diff --git a/.github/workflows/MistDemo.yml b/.github/workflows/MistDemo.yml index 747f2378..8e26a161 100644 --- a/.github/workflows/MistDemo.yml +++ b/.github/workflows/MistDemo.yml @@ -187,7 +187,6 @@ jobs: swap-storage: true - uses: brightdigit/swift-build@v1 with: - scheme: ${{ env.PACKAGE_NAME }} type: android android-swift-version: ${{ matrix.swift.version }} android-api-level: ${{ matrix.android-api-level }} @@ -225,7 +224,6 @@ jobs: id: build uses: brightdigit/swift-build@v1 with: - scheme: ${{ env.PACKAGE_NAME }}-Package type: ${{ matrix.type }} xcode: ${{ matrix.xcode }} deviceName: ${{ matrix.deviceName }} @@ -298,7 +296,6 @@ jobs: id: build uses: brightdigit/swift-build@v1 with: - scheme: ${{ env.PACKAGE_NAME }}-Package type: ${{ matrix.type }} xcode: ${{ matrix.xcode }} deviceName: ${{ matrix.deviceName }} diff --git a/.github/workflows/MistKit.yml b/.github/workflows/MistKit.yml index 85e55cee..539cbb10 100644 --- a/.github/workflows/MistKit.yml +++ b/.github/workflows/MistKit.yml @@ -215,7 +215,6 @@ jobs: id: build uses: brightdigit/swift-build@v1 with: - scheme: ${{ env.PACKAGE_NAME }}-Package type: ${{ matrix.type }} xcode: ${{ matrix.xcode }} deviceName: ${{ matrix.deviceName }} @@ -292,7 +291,6 @@ jobs: id: build uses: brightdigit/swift-build@v1 with: - scheme: ${{ env.PACKAGE_NAME }}-Package type: ${{ matrix.type }} xcode: ${{ matrix.xcode }} deviceName: ${{ matrix.deviceName }} diff --git a/Examples/BushelCloud/.gitrepo b/Examples/BushelCloud/.gitrepo index d9c179c7..673ff170 100644 --- a/Examples/BushelCloud/.gitrepo +++ b/Examples/BushelCloud/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = git@github.com:brightdigit/BushelCloud.git branch = mistkit - commit = 1ab45e4fe8420bc52c3c27f3740b770e49e36b9b - parent = fe0a6ae37cc09970570aaa5f1eacef948a81b177 + commit = b0c3985fbc0f1d25fc5ebf0c48ffc123549d0f28 + parent = 5edf7036eabfea004b8f74b8caab58884401662c method = merge cmdver = 0.4.9 diff --git a/Examples/BushelCloud/Scripts/lint.sh b/Examples/BushelCloud/Scripts/lint.sh index f1907ff7..fb075260 100755 --- a/Examples/BushelCloud/Scripts/lint.sh +++ b/Examples/BushelCloud/Scripts/lint.sh @@ -59,6 +59,7 @@ if [ -z "$FORMAT_ONLY" ]; then fi $PACKAGE_DIR/Scripts/header.sh -d $PACKAGE_DIR/Sources -c "Leo Dion" -o "BrightDigit" -p "BushelCloud" +$PACKAGE_DIR/Scripts/header.sh -d $PACKAGE_DIR/Tests -c "Leo Dion" -o "BrightDigit" -p "BushelCloud" # Generated files now automatically include ignore directives via OpenAPI generator configuration diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/CloudKit/MockCloudKitServiceTests.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/CloudKit/MockCloudKitServiceTests.swift index 4898020c..af574f47 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/CloudKit/MockCloudKitServiceTests.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/CloudKit/MockCloudKitServiceTests.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/CloudKit/PEMValidatorTests.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/CloudKit/PEMValidatorTests.swift index 1bbed1d0..146282d6 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/CloudKit/PEMValidatorTests.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/CloudKit/PEMValidatorTests.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/Configuration/ConfigurationLoaderTests.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/Configuration/ConfigurationLoaderTests.swift index a5d8eaee..9645ede7 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/Configuration/ConfigurationLoaderTests.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/Configuration/ConfigurationLoaderTests.swift @@ -2,7 +2,29 @@ // ConfigurationLoaderTests.swift // BushelCloud // -// Comprehensive tests for ConfigurationLoader +// Created by Leo Dion. +// Copyright © 2026 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the "Software"), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. // internal import Configuration diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/Configuration/FetchConfigurationTests.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/Configuration/FetchConfigurationTests.swift index 7e985096..8c7eb183 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/Configuration/FetchConfigurationTests.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/Configuration/FetchConfigurationTests.swift @@ -3,7 +3,28 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the "Software"), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. // internal import Foundation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/MockAppleDBFetcherTests.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/MockAppleDBFetcherTests.swift index bb0fb7e5..b8fcd2dd 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/MockAppleDBFetcherTests.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/MockAppleDBFetcherTests.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/MockIPSWFetcherTests.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/MockIPSWFetcherTests.swift index 8b2f5de6..f6c02c61 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/MockIPSWFetcherTests.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/MockIPSWFetcherTests.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/MockMESUFetcherTests.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/MockMESUFetcherTests.swift index 8ada1321..7186d321 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/MockMESUFetcherTests.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/MockMESUFetcherTests.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/MockSwiftVersionFetcherTests.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/MockSwiftVersionFetcherTests.swift index f15ad5a6..19e1cccd 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/MockSwiftVersionFetcherTests.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/MockSwiftVersionFetcherTests.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/MockXcodeReleasesFetcherTests.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/MockXcodeReleasesFetcherTests.swift index be93db84..06bdc3f1 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/MockXcodeReleasesFetcherTests.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/MockXcodeReleasesFetcherTests.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/RestoreImageDeduplicationTests.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/RestoreImageDeduplicationTests.swift index bbafacaa..2810d0a1 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/RestoreImageDeduplicationTests.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/RestoreImageDeduplicationTests.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/RestoreImageMergeTests.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/RestoreImageMergeTests.swift index 326bffef..492e9165 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/RestoreImageMergeTests.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/RestoreImageMergeTests.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/SwiftVersionDeduplicationTests.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/SwiftVersionDeduplicationTests.swift index 17b86201..6ca537cc 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/SwiftVersionDeduplicationTests.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/SwiftVersionDeduplicationTests.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/VirtualBuddyFetcherTests.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/VirtualBuddyFetcherTests.swift index 4ae97c5b..d599a383 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/VirtualBuddyFetcherTests.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/VirtualBuddyFetcherTests.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/XcodeVersionDeduplicationTests.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/XcodeVersionDeduplicationTests.swift index 65087e83..c916a084 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/XcodeVersionDeduplicationTests.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/XcodeVersionDeduplicationTests.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/XcodeVersionReferenceResolutionTests.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/XcodeVersionReferenceResolutionTests.swift index e2f5e5ae..77ea68e5 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/XcodeVersionReferenceResolutionTests.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/DataSources/XcodeVersionReferenceResolutionTests.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/ErrorHandling/AuthenticationErrorHandlingTests.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/ErrorHandling/AuthenticationErrorHandlingTests.swift index e5b86560..f020c736 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/ErrorHandling/AuthenticationErrorHandlingTests.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/ErrorHandling/AuthenticationErrorHandlingTests.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/ErrorHandling/CloudKitErrorHandlingTests.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/ErrorHandling/CloudKitErrorHandlingTests.swift index 4236b9e3..27cae07a 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/ErrorHandling/CloudKitErrorHandlingTests.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/ErrorHandling/CloudKitErrorHandlingTests.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/ErrorHandling/GracefulDegradationTests.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/ErrorHandling/GracefulDegradationTests.swift index f09f4679..2b9d7d8c 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/ErrorHandling/GracefulDegradationTests.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/ErrorHandling/GracefulDegradationTests.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/ErrorHandling/NetworkErrorHandlingTests.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/ErrorHandling/NetworkErrorHandlingTests.swift index 7d0cc87e..aec79dd8 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/ErrorHandling/NetworkErrorHandlingTests.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/ErrorHandling/NetworkErrorHandlingTests.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/Extensions/FieldValueURLTests.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/Extensions/FieldValueURLTests.swift index 7ac8b34e..b8a2213e 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/Extensions/FieldValueURLTests.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/Extensions/FieldValueURLTests.swift @@ -1,8 +1,30 @@ // // FieldValueURLTests.swift -// BushelCloudTests +// BushelCloud // -// Created by Claude Code +// Created by Leo Dion. +// Copyright © 2026 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the "Software"), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. // internal import Foundation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockAppleDBFetcher.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockAppleDBFetcher.swift index 965cb271..dd4277a7 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockAppleDBFetcher.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockAppleDBFetcher.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockCloudKitService.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockCloudKitService.swift index 831a967c..a7b67620 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockCloudKitService.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockCloudKitService.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockFetcherError.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockFetcherError.swift index 42bdd97b..29beceb9 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockFetcherError.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockFetcherError.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockIPSWFetcher.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockIPSWFetcher.swift index 2e66edf3..da8b9704 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockIPSWFetcher.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockIPSWFetcher.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockMESUFetcher.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockMESUFetcher.swift index 025c213d..2bb244ce 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockMESUFetcher.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockMESUFetcher.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockSwiftVersionFetcher.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockSwiftVersionFetcher.swift index d6b97101..966b536d 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockSwiftVersionFetcher.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockSwiftVersionFetcher.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockURLProtocol.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockURLProtocol.swift index 2c4d791c..72bcc756 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockURLProtocol.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockURLProtocol.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockXcodeReleasesFetcher.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockXcodeReleasesFetcher.swift index 4621ca5e..2d950276 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockXcodeReleasesFetcher.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/Mocks/MockXcodeReleasesFetcher.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/Models/DataSourceMetadataTests.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/Models/DataSourceMetadataTests.swift index d069d2a8..26b768a4 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/Models/DataSourceMetadataTests.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/Models/DataSourceMetadataTests.swift @@ -3,7 +3,28 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the "Software"), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. // internal import BushelFoundation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/Models/RestoreImageRecordTests.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/Models/RestoreImageRecordTests.swift index 440788e7..07a0758d 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/Models/RestoreImageRecordTests.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/Models/RestoreImageRecordTests.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/Models/SwiftVersionRecordTests.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/Models/SwiftVersionRecordTests.swift index c12e1c71..49f261e2 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/Models/SwiftVersionRecordTests.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/Models/SwiftVersionRecordTests.swift @@ -3,7 +3,28 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the "Software"), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. // internal import MistKit diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/Models/XcodeVersionRecordTests.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/Models/XcodeVersionRecordTests.swift index 43c786e8..c8d2a03c 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/Models/XcodeVersionRecordTests.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/Models/XcodeVersionRecordTests.swift @@ -3,7 +3,28 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. +// +// Permission is hereby granted, free of charge, to any person +// obtaining a copy of this software and associated documentation +// files (the "Software"), to deal in the Software without +// restriction, including without limitation the rights to use, +// copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following +// conditions: +// +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. // internal import MistKit diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/Utilities/FieldValue+Assertions.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/Utilities/FieldValue+Assertions.swift index 57806116..b985a0d1 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/Utilities/FieldValue+Assertions.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/Utilities/FieldValue+Assertions.swift @@ -1,9 +1,9 @@ // -// FieldValueAssertions.swift +// FieldValue+Assertions.swift // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/Utilities/MockRecordInfo.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/Utilities/MockRecordInfo.swift index a7f6fc4b..1a0808c3 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/Utilities/MockRecordInfo.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/Utilities/MockRecordInfo.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/BushelCloud/Tests/BushelCloudKitTests/Utilities/TestFixtures.swift b/Examples/BushelCloud/Tests/BushelCloudKitTests/Utilities/TestFixtures.swift index 2f755e86..ed199eb6 100644 --- a/Examples/BushelCloud/Tests/BushelCloudKitTests/Utilities/TestFixtures.swift +++ b/Examples/BushelCloud/Tests/BushelCloudKitTests/Utilities/TestFixtures.swift @@ -3,7 +3,7 @@ // BushelCloud // // Created by Leo Dion. -// Copyright © 2025 BrightDigit. +// Copyright © 2026 BrightDigit. // // Permission is hereby granted, free of charge, to any person // obtaining a copy of this software and associated documentation diff --git a/Examples/CelestraCloud/.github/workflows/CelestraCloud.yml b/Examples/CelestraCloud/.github/workflows/CelestraCloud.yml index a878600d..c9c225be 100644 --- a/Examples/CelestraCloud/.github/workflows/CelestraCloud.yml +++ b/Examples/CelestraCloud/.github/workflows/CelestraCloud.yml @@ -21,7 +21,8 @@ concurrency: env: PACKAGE_NAME: CelestraCloud - MISTKIT_BRANCH: v1.0.0-beta.2 + MISTKIT_BRANCH: 1.0.0-beta.2 + CONFIGKEYKIT_BRANCH: main jobs: configure: @@ -89,6 +90,11 @@ jobs: with: branch: ${{ env.MISTKIT_BRANCH }} + - name: Setup ConfigKeyKit + uses: brightdigit/ConfigKeyKit/.github/actions/setup-configkeykit@main + with: + branch: ${{ env.CONFIGKEYKIT_BRANCH }} + - uses: brightdigit/swift-build@v1 id: build with: @@ -134,6 +140,11 @@ jobs: uses: brightdigit/MistKit/.github/actions/setup-mistkit@main with: branch: ${{ env.MISTKIT_BRANCH }} + + - name: Setup ConfigKeyKit + uses: brightdigit/ConfigKeyKit/.github/actions/setup-configkeykit@main + with: + branch: ${{ env.CONFIGKEYKIT_BRANCH }} - uses: brightdigit/swift-build@v1 id: build with: @@ -176,6 +187,11 @@ jobs: with: branch: ${{ env.MISTKIT_BRANCH }} + - name: Setup ConfigKeyKit + uses: brightdigit/ConfigKeyKit/.github/actions/setup-configkeykit@main + with: + branch: ${{ env.CONFIGKEYKIT_BRANCH }} + - name: Build and Test id: build uses: brightdigit/swift-build@v1 @@ -239,6 +255,11 @@ jobs: with: branch: ${{ env.MISTKIT_BRANCH }} + - name: Setup ConfigKeyKit + uses: brightdigit/ConfigKeyKit/.github/actions/setup-configkeykit@main + with: + branch: ${{ env.CONFIGKEYKIT_BRANCH }} + - name: Build and Test id: build uses: brightdigit/swift-build@v1 diff --git a/Examples/CelestraCloud/.github/workflows/codeql.yml b/Examples/CelestraCloud/.github/workflows/codeql.yml index df1ac023..90fafef7 100644 --- a/Examples/CelestraCloud/.github/workflows/codeql.yml +++ b/Examples/CelestraCloud/.github/workflows/codeql.yml @@ -60,7 +60,12 @@ jobs: - name: Setup MistKit uses: brightdigit/MistKit/.github/actions/setup-mistkit@main with: - branch: v1.0.0-beta.2 + branch: 1.0.0-beta.2 + + - name: Setup ConfigKeyKit + uses: brightdigit/ConfigKeyKit/.github/actions/setup-configkeykit@main + with: + branch: main # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/Examples/CelestraCloud/.github/workflows/update-feeds.yml b/Examples/CelestraCloud/.github/workflows/update-feeds.yml index 5a883d72..955e6666 100644 --- a/Examples/CelestraCloud/.github/workflows/update-feeds.yml +++ b/Examples/CelestraCloud/.github/workflows/update-feeds.yml @@ -49,7 +49,8 @@ env: CLOUDKIT_KEY_ID: ${{ secrets.CLOUDKIT_KEY_ID }} CLOUDKIT_ENVIRONMENT: ${{ (github.event_name == 'pull_request' || github.event_name == 'push') && 'development' || github.event.inputs.environment || 'production' }} CLOUDKIT_PRIVATE_KEY_PATH: /tmp/cloudkit_key.pem - MISTKIT_BRANCH: v1.0.0-beta.2 + MISTKIT_BRANCH: 1.0.0-beta.2 + CONFIGKEYKIT_BRANCH: main jobs: # Determine which tier to run based on schedule or manual input @@ -165,6 +166,12 @@ jobs: with: branch: ${{ env.MISTKIT_BRANCH }} + - name: Setup ConfigKeyKit + if: steps.cache-binary.outputs.cache-hit != 'true' + uses: brightdigit/ConfigKeyKit/.github/actions/setup-configkeykit@main + with: + branch: ${{ env.CONFIGKEYKIT_BRANCH }} + - name: Build CelestraCloud if: steps.cache-binary.outputs.cache-hit != 'true' run: swift build -c release --static-swift-stdlib diff --git a/Examples/CelestraCloud/.gitrepo b/Examples/CelestraCloud/.gitrepo index 8cc20d02..5a600ce7 100644 --- a/Examples/CelestraCloud/.gitrepo +++ b/Examples/CelestraCloud/.gitrepo @@ -6,7 +6,7 @@ [subrepo] remote = git@github.com:brightdigit/CelestraCloud.git branch = mistkit - commit = 4c532d39cd0540b08899c09fe80c24b00a7fd1ce - parent = 503ad2b6566916a9aa3c45b46b66bceb64df548d + commit = 32138a843b34f4a621fda765ee16c0a29bdfb65a + parent = a2401a509551fa6ab5b96e1c1a590ee3bdf58d71 method = merge cmdver = 0.4.9 diff --git a/Examples/CelestraCloud/Package.swift b/Examples/CelestraCloud/Package.swift index fbd81200..84ed5e85 100644 --- a/Examples/CelestraCloud/Package.swift +++ b/Examples/CelestraCloud/Package.swift @@ -91,6 +91,7 @@ let package = Package( ], dependencies: [ .package(name: "MistKit", path: "../.."), + .package(name: "ConfigKeyKit", path: "../../Packages/ConfigKeyKit"), .package(url: "https://github.com/brightdigit/CelestraKit.git", branch: "v0.0.3"), .package(url: "https://github.com/apple/swift-log.git", from: "1.0.0"), .package( @@ -104,6 +105,7 @@ let package = Package( name: "CelestraCloudKit", dependencies: [ .product(name: "MistKit", package: "MistKit"), + .product(name: "ConfigKeyKit", package: "ConfigKeyKit"), .product(name: "CelestraKit", package: "CelestraKit"), .product(name: "Logging", package: "swift-log"), .product(name: "Configuration", package: "swift-configuration") diff --git a/Examples/CelestraCloud/Sources/CelestraCloudKit/CelestraConfig.swift b/Examples/CelestraCloud/Sources/CelestraCloudKit/CelestraConfig.swift index 7522d099..6ec33a40 100644 --- a/Examples/CelestraCloud/Sources/CelestraCloudKit/CelestraConfig.swift +++ b/Examples/CelestraCloud/Sources/CelestraCloudKit/CelestraConfig.swift @@ -27,7 +27,7 @@ // OTHER DEALINGS IN THE SOFTWARE. // -public import Foundation +internal import Foundation public import MistKit // MARK: - Shared Configuration @@ -54,46 +54,4 @@ public enum CelestraConfig { environment: config.environment ) } - - /// Create CloudKit service from environment variables - @available( - *, deprecated, message: "Use ConfigurationLoader with createCloudKitService(from:) instead" - ) - public static func createCloudKitService() throws -> CloudKitService { - // Validate required environment variables - guard let containerID = ProcessInfo.processInfo.environment["CLOUDKIT_CONTAINER_ID"] else { - throw ConfigurationError("CLOUDKIT_CONTAINER_ID environment variable required") - } - - guard let keyID = ProcessInfo.processInfo.environment["CLOUDKIT_KEY_ID"] else { - throw ConfigurationError("CLOUDKIT_KEY_ID environment variable required") - } - - guard let privateKeyPath = ProcessInfo.processInfo.environment["CLOUDKIT_PRIVATE_KEY_PATH"] - else { - throw ConfigurationError("CLOUDKIT_PRIVATE_KEY_PATH environment variable required") - } - - // Read private key from file - let privateKeyPEM = try String(contentsOfFile: privateKeyPath, encoding: .utf8) - - // Determine environment (development or production) - let environment: MistKit.Environment = - ProcessInfo.processInfo.environment["CLOUDKIT_ENVIRONMENT"] == "production" - ? .production - : .development - - // Create token manager for server-to-server authentication - let tokenManager = try ServerToServerAuthManager( - keyID: keyID, - pemString: privateKeyPEM - ) - - // Create and return CloudKit service - return CloudKitService( - containerIdentifier: containerID, - tokenManager: tokenManager, - environment: environment - ) - } } diff --git a/Examples/CelestraCloud/Sources/CelestraCloudKit/Configuration/ConfigSource.swift b/Examples/CelestraCloud/Sources/CelestraCloudKit/Configuration/ConfigSource.swift deleted file mode 100644 index 05dfe132..00000000 --- a/Examples/CelestraCloud/Sources/CelestraCloudKit/Configuration/ConfigSource.swift +++ /dev/null @@ -1,38 +0,0 @@ -// -// ConfigSource.swift -// CelestraCloud -// -// Created by Leo Dion. -// Copyright © 2026 BrightDigit. -// -// Permission is hereby granted, free of charge, to any person -// obtaining a copy of this software and associated documentation -// files (the "Software"), to deal in the Software without -// restriction, including without limitation the rights to use, -// copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following -// conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -// OTHER DEALINGS IN THE SOFTWARE. -// - -public import Foundation - -/// Configuration source type for error reporting -public enum ConfigSource: String, Sendable { - case cli = "CLI argument" - case environment = "Environment variable" - case file = "Config file" - case defaults = "Default value" -} diff --git a/Examples/CelestraCloud/Sources/CelestraCloudKit/Configuration/ConfigurationKeys.swift b/Examples/CelestraCloud/Sources/CelestraCloudKit/Configuration/ConfigurationKeys.swift index e3b4cdbf..9585c2ba 100644 --- a/Examples/CelestraCloud/Sources/CelestraCloudKit/Configuration/ConfigurationKeys.swift +++ b/Examples/CelestraCloud/Sources/CelestraCloudKit/Configuration/ConfigurationKeys.swift @@ -27,33 +27,39 @@ // OTHER DEALINGS IN THE SOFTWARE. // -/// Configuration keys for reading from providers +internal import ConfigKeyKit +internal import Foundation + +/// Configuration keys for reading from providers. +/// +/// Each option is a single typed `ConfigKey`/`OptionalConfigKey`. ConfigKeyKit's +/// `StandardNamingStyle` derives both spellings from one dash-separated base: +/// the CLI flag (dash-case, e.g. `--cloudkit-container-id`) and the environment +/// variable (`SCREAMING_SNAKE_CASE`, e.g. `CLOUDKIT_CONTAINER_ID`). Bases use +/// dashes throughout for consistency and conventional kebab-case CLI flags. internal enum ConfigurationKeys { internal enum CloudKit { - internal static let containerID = "cloudkit.container_id" - internal static let containerIDEnv = "CLOUDKIT_CONTAINER_ID" - internal static let keyID = "cloudkit.key_id" - internal static let keyIDEnv = "CLOUDKIT_KEY_ID" - internal static let privateKeyPath = "cloudkit.private_key_path" - internal static let privateKeyPathEnv = "CLOUDKIT_PRIVATE_KEY_PATH" - internal static let environment = "cloudkit.environment" - internal static let environmentEnv = "CLOUDKIT_ENVIRONMENT" + internal static let containerID = ConfigKey( + "cloudkit.container-id", + default: CloudKitConfiguration.defaultContainerID + ) + internal static let keyID = OptionalConfigKey("cloudkit.key-id") + internal static let privateKeyPath = OptionalConfigKey("cloudkit.private-key-path") + internal static let environment = OptionalConfigKey("cloudkit.environment") } internal enum Update { - internal static let delay = "update.delay" - internal static let delayEnv = "UPDATE_DELAY" - internal static let skipRobotsCheck = "update.skip_robots_check" - internal static let skipRobotsCheckEnv = "UPDATE_SKIP_ROBOTS_CHECK" - internal static let maxFailures = "update.max_failures" - internal static let maxFailuresEnv = "UPDATE_MAX_FAILURES" - internal static let minPopularity = "update.min_popularity" - internal static let minPopularityEnv = "UPDATE_MIN_POPULARITY" - internal static let lastAttemptedBefore = "update.last_attempted_before" - internal static let lastAttemptedBeforeEnv = "UPDATE_LAST_ATTEMPTED_BEFORE" - internal static let limit = "update.limit" - internal static let limitEnv = "UPDATE_LIMIT" - internal static let jsonOutputPath = "update.json-output-path" - internal static let jsonOutputPathEnv = "UPDATE_JSON_OUTPUT_PATH" + internal static let delay = ConfigKey("update.delay", default: 2.0) + internal static let skipRobotsCheck = ConfigKey( + "update.skip-robots-check", + default: false + ) + internal static let maxFailures = OptionalConfigKey("update.max-failures") + internal static let minPopularity = OptionalConfigKey("update.min-popularity") + internal static let lastAttemptedBefore = OptionalConfigKey( + "update.last-attempted-before" + ) + internal static let limit = OptionalConfigKey("update.limit") + internal static let jsonOutputPath = OptionalConfigKey("update.json-output-path") } } diff --git a/Examples/CelestraCloud/Sources/CelestraCloudKit/Configuration/ConfigurationLoader.swift b/Examples/CelestraCloud/Sources/CelestraCloudKit/Configuration/ConfigurationLoader.swift index b4449c9c..69914684 100644 --- a/Examples/CelestraCloud/Sources/CelestraCloudKit/Configuration/ConfigurationLoader.swift +++ b/Examples/CelestraCloud/Sources/CelestraCloudKit/Configuration/ConfigurationLoader.swift @@ -27,6 +27,7 @@ // OTHER DEALINGS IN THE SOFTWARE. // +internal import ConfigKeyKit internal import Configuration internal import Foundation internal import MistKit @@ -59,54 +60,23 @@ public actor ConfigurationLoader { /// Load complete configuration with all defaults applied public func loadConfiguration() async throws -> CelestraConfiguration { - // CloudKit configuration + // CloudKit configuration (automatic CLI → ENV → default fallback) let cloudkit = CloudKitConfiguration( - containerID: readString(forKey: ConfigurationKeys.CloudKit.containerID) - ?? readString(forKey: ConfigurationKeys.CloudKit.containerIDEnv) - ?? CloudKitConfiguration.defaultContainerID, - keyID: readString(forKey: ConfigurationKeys.CloudKit.keyID) - ?? readString(forKey: ConfigurationKeys.CloudKit.keyIDEnv), - privateKeyPath: readString(forKey: ConfigurationKeys.CloudKit.privateKeyPath) - ?? readString(forKey: ConfigurationKeys.CloudKit.privateKeyPathEnv), - environment: parseEnvironment( - readString(forKey: ConfigurationKeys.CloudKit.environment) - ?? readString(forKey: ConfigurationKeys.CloudKit.environmentEnv) - ) + containerID: read(ConfigurationKeys.CloudKit.containerID), + keyID: read(ConfigurationKeys.CloudKit.keyID), + privateKeyPath: read(ConfigurationKeys.CloudKit.privateKeyPath), + environment: parseEnvironment(read(ConfigurationKeys.CloudKit.environment)) ) // Update command configuration - let delay = - readDouble(forKey: ConfigurationKeys.Update.delay) - ?? readDouble(forKey: ConfigurationKeys.Update.delayEnv) - ?? 2.0 - let skipRobotsCheck = - readBool(forKey: ConfigurationKeys.Update.skipRobotsCheck) - ?? readBool(forKey: ConfigurationKeys.Update.skipRobotsCheckEnv) - ?? false - let maxFailures = - readInt(forKey: ConfigurationKeys.Update.maxFailures) - ?? readInt(forKey: ConfigurationKeys.Update.maxFailuresEnv) - let minPopularity = - readInt(forKey: ConfigurationKeys.Update.minPopularity) - ?? readInt(forKey: ConfigurationKeys.Update.minPopularityEnv) - let lastAttemptedBefore = - readDate(forKey: ConfigurationKeys.Update.lastAttemptedBefore) - ?? readDate(forKey: ConfigurationKeys.Update.lastAttemptedBeforeEnv) - let limit = - readInt(forKey: ConfigurationKeys.Update.limit) - ?? readInt(forKey: ConfigurationKeys.Update.limitEnv) - let jsonOutputPath = - readString(forKey: ConfigurationKeys.Update.jsonOutputPath) - ?? readString(forKey: ConfigurationKeys.Update.jsonOutputPathEnv) - let update = UpdateCommandConfiguration( - delay: delay, - skipRobotsCheck: skipRobotsCheck, - maxFailures: maxFailures, - minPopularity: minPopularity, - lastAttemptedBefore: lastAttemptedBefore, - limit: limit, - jsonOutputPath: jsonOutputPath + delay: read(ConfigurationKeys.Update.delay), + skipRobotsCheck: read(ConfigurationKeys.Update.skipRobotsCheck), + maxFailures: read(ConfigurationKeys.Update.maxFailures), + minPopularity: read(ConfigurationKeys.Update.minPopularity), + lastAttemptedBefore: read(ConfigurationKeys.Update.lastAttemptedBefore), + limit: read(ConfigurationKeys.Update.limit), + jsonOutputPath: read(ConfigurationKeys.Update.jsonOutputPath) ) return CelestraConfiguration( @@ -115,25 +85,21 @@ public actor ConfigurationLoader { ) } - // MARK: - Private Helpers + // MARK: - Per-key-string Primitives private func readString(forKey key: String) -> String? { configReader.string(forKey: ConfigKey(key)) } - private func readDouble(forKey key: String) -> Double? { - configReader.double(forKey: ConfigKey(key)) - } - - // swiftlint:disable:next discouraged_optional_boolean - private func readBool(forKey key: String) -> Bool? { - configReader.bool(forKey: ConfigKey(key)) - } - private func readInt(forKey key: String) -> Int? { configReader.int(forKey: ConfigKey(key)) } + private func readDate(forKey key: String) -> Date? { + // Swift Configuration automatically converts ISO8601 strings to Date + configReader.string(forKey: ConfigKey(key), as: Date.self) + } + private func parseEnvironment(_ value: String?) -> MistKit.Environment { guard let value = value?.lowercased() else { return .development @@ -141,8 +107,84 @@ public actor ConfigurationLoader { return value == "production" ? .production : .development } - private func readDate(forKey key: String) -> Date? { - // Swift Configuration automatically converts ISO8601 strings to Date - configReader.string(forKey: ConfigKey(key), as: Date.self) + // MARK: - Generic ConfigKey Helpers (required default → non-optional) + + /// Read a string value with automatic CLI → ENV → default fallback. + private func read(_ key: ConfigKeyKit.ConfigKey) -> String { + for source in ConfigKeySource.allCases { + guard let keyString = key.key(for: source) else { continue } + if let value = readString(forKey: keyString) { + return value + } + } + return key.defaultValue + } + + /// Read a double value with automatic CLI → ENV → default fallback. + private func read(_ key: ConfigKeyKit.ConfigKey) -> Double { + for source in ConfigKeySource.allCases { + guard let keyString = key.key(for: source) else { continue } + if let stringValue = readString(forKey: keyString), let value = Double(stringValue) { + return value + } + } + return key.defaultValue + } + + /// Read a boolean value with CLI flag-presence and ENV string parsing. + /// + /// - CLI: flag presence indicates `true` (e.g. `--update-skip-robots-check`). + /// - ENV: accepts `true`/`1`/`yes` (case-insensitive); anything else is `false`. + /// - Otherwise: the key's default. + private func read(_ key: ConfigKeyKit.ConfigKey) -> Bool { + if let cliKey = key.key(for: .commandLine), + configReader.string(forKey: ConfigKey(cliKey)) != nil + { + return true + } + + if let envKey = key.key(for: .environment), + let envValue = configReader.string(forKey: ConfigKey(envKey)) + { + let lowercased = envValue.lowercased().trimmingCharacters(in: .whitespaces) + return lowercased == "true" || lowercased == "1" || lowercased == "yes" + } + + return key.defaultValue + } + + // MARK: - Generic OptionalConfigKey Helpers (no default → optional) + + /// Read a string value with automatic CLI → ENV fallback. + private func read(_ key: ConfigKeyKit.OptionalConfigKey) -> String? { + for source in ConfigKeySource.allCases { + guard let keyString = key.key(for: source) else { continue } + if let value = readString(forKey: keyString) { + return value + } + } + return nil + } + + /// Read an integer value with automatic CLI → ENV fallback. + private func read(_ key: ConfigKeyKit.OptionalConfigKey) -> Int? { + for source in ConfigKeySource.allCases { + guard let keyString = key.key(for: source) else { continue } + if let value = readInt(forKey: keyString) { + return value + } + } + return nil + } + + /// Read a date value (ISO8601) with automatic CLI → ENV fallback. + private func read(_ key: ConfigKeyKit.OptionalConfigKey) -> Date? { + for source in ConfigKeySource.allCases { + guard let keyString = key.key(for: source) else { continue } + if let value = readDate(forKey: keyString) { + return value + } + } + return nil } } diff --git a/Examples/CelestraCloud/Sources/CelestraCloudKit/Configuration/EnhancedConfigurationError.swift b/Examples/CelestraCloud/Sources/CelestraCloudKit/Configuration/EnhancedConfigurationError.swift index 6329bc5e..394e9040 100644 --- a/Examples/CelestraCloud/Sources/CelestraCloudKit/Configuration/EnhancedConfigurationError.swift +++ b/Examples/CelestraCloud/Sources/CelestraCloudKit/Configuration/EnhancedConfigurationError.swift @@ -37,18 +37,12 @@ public struct EnhancedConfigurationError: LocalizedError { /// The configuration key that caused the error, if applicable. public let key: String? - /// The source of the configuration value, if applicable. - public let source: ConfigSource? - /// A localized description of the error. public var errorDescription: String? { var parts = [message] if let key = key { parts.append("(key: \(key))") } - if let source = source { - parts.append("(source: \(source.rawValue))") - } return parts.joined(separator: " ") } @@ -57,10 +51,8 @@ public struct EnhancedConfigurationError: LocalizedError { /// - Parameters: /// - message: The error message describing what went wrong. /// - key: The configuration key that caused the error, if applicable. - /// - source: The source of the configuration value, if applicable. - public init(_ message: String, key: String? = nil, source: ConfigSource? = nil) { + public init(_ message: String, key: String? = nil) { self.message = message self.key = key - self.source = source } } diff --git a/Examples/CelestraCloud/Sources/CelestraCloudKit/Errors/ConfigurationError.swift b/Examples/CelestraCloud/Sources/CelestraCloudKit/Errors/ConfigurationError.swift deleted file mode 100644 index 5c68c1d5..00000000 --- a/Examples/CelestraCloud/Sources/CelestraCloudKit/Errors/ConfigurationError.swift +++ /dev/null @@ -1,48 +0,0 @@ -// -// ConfigurationError.swift -// CelestraCloud -// -// Created by Leo Dion. -// Copyright © 2026 BrightDigit. -// -// Permission is hereby granted, free of charge, to any person -// obtaining a copy of this software and associated documentation -// files (the "Software"), to deal in the Software without -// restriction, including without limitation the rights to use, -// copy, modify, merge, publish, distribute, sublicense, and/or -// sell copies of the Software, and to permit persons to whom the -// Software is furnished to do so, subject to the following -// conditions: -// -// The above copyright notice and this permission notice shall be -// included in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -// OTHER DEALINGS IN THE SOFTWARE. -// - -public import Foundation - -/// Custom error for configuration issues (library-compatible) -public struct ConfigurationError: LocalizedError { - /// The error message describing what went wrong. - public let message: String - - /// A localized description of the error. - public var errorDescription: String? { - message - } - - /// Creates a new configuration error. - /// - /// - Parameter message: The error message describing what went wrong. - public init(_ message: String) { - self.message = message - } -} diff --git a/Packages/ConfigKeyKit/.gitrepo b/Packages/ConfigKeyKit/.gitrepo index 843af89e..e29788ff 100644 --- a/Packages/ConfigKeyKit/.gitrepo +++ b/Packages/ConfigKeyKit/.gitrepo @@ -7,6 +7,6 @@ remote = git@github.com:brightdigit/ConfigKeyKit.git branch = main commit = a9a8bc8be5b33d4aa732a9d0d06a05e8281b4855 - parent = abff797b5cea271cf680f60e3e6d34ea359925d9 + parent = 2537f39f5ceeab6b00fd9e9e2bdc3fbdefdae26b method = merge cmdver = 0.4.9 diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 00000000..d8ba84e8 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,4 @@ +# Documentation + +- **[cloudkit-guide/](cloudkit-guide/)** — Content reference, talk prep, and marketing materials for the server-side CloudKit speaking series +- **[why-mistkit.md](why-mistkit.md)** — Use-case catalog of server-side CloudKit patterns (public database, private database, web app bridge, data aggregation) diff --git a/docs/cloudkit-guide/.social/README.md b/docs/cloudkit-guide/.social/README.md new file mode 100644 index 00000000..5dc96f55 --- /dev/null +++ b/docs/cloudkit-guide/.social/README.md @@ -0,0 +1,199 @@ +# Server-Side CloudKit — Social + +## Topics to Test + +- CloudKit server-to-server auth gotchas +- Conflict resolution strategies (exponential backoff) +- Multi-source data orchestration patterns (BushelCloud) + +## Article Promotion + +**CloudKit Server Auth Article** +- [ ] Twitter thread: 5-7 tweets highlighting key auth patterns +- [ ] LinkedIn post: professional angle on Apple documentation gaps +- [ ] Mastodon: technical deep-dive angle, open-source focus +- [ ] Link to existing MistKit rebuild articles (Parts 1 & 2) as context + +## Conference Announcements + +**Pre-Swift Craft** (late April, 2–4 weeks before May 18) +- [ ] "Speaking at Swift Craft" announcement (Twitter, LinkedIn, Mastodon) +- [ ] Share talk abstract with key takeaway teaser +- [ ] Link to CloudKit server auth article (if published) + +**Pre-iOSDevUK** (mid August, 2–4 weeks before Sept 7) +- [ ] "Speaking at iOSDevUK" announcement +- [ ] Emphasize first-time speaker angle at iOSDevUK +- [ ] Share refined talk narrative (incorporating feedback from 2 prior deliveries) + +### Post-Talk Recaps + +**After Swift Craft (May 18–20)** +- [ ] Key takeaways thread (3–5 main points) +- [ ] Share slides/resources link +- [ ] Thank organizers and attendees +- [ ] Share any audience questions that sparked interesting discussion + +**After iOSDevUK (Sept 7–10)** +- [ ] Comprehensive recap (final delivery) +- [ ] "What I learned giving this talk 2 times" reflection +- [ ] Share final slides and all resources + +--- + +## Social Media Content + +Pre-written posts for CloudKit server-to-server authentication. Adapt per platform and timing. + +### Twitter/X + +**Problem/Pain Point** +> Apple's CloudKit server-to-server auth docs are... let's call them "minimalist." +> +> After shipping 2 production backends with it (macOS/Swift version sync tool + RSS reader), I learned what the docs don't cover: +> • Key rotation strategies +> • Environment switching gotchas +> • Error handling that works at scale + +**Hot Take** +> Hot take: CloudKit server-to-server auth is Apple's worst-documented feature. +> +> Not "under-documented." Not "could be better." +> +> WORST. +> +> Built BushelCloud + CelestraCloud to prove it can work. The official docs miss 80% of production reality. + +**Stats/Facts** +> CloudKit server-to-server auth reality check: +> +> Official docs: 3 pages +> Stack Overflow questions: hundreds unanswered +> Production gotchas I hit: too many to count +> Hours debugging environment switching: most of a day +> Working examples from Apple: 0 (that I could find) +> +> Working examples I built: 2 (BushelCloud, CelestraCloud) + +**Developer Empathy** +> You: "I'll just add CloudKit server-to-server auth" +> +> Apple docs: *shows basic key pair setup* +> +> You: "Cool, now how do I handle—" +> +> Apple docs: *crickets* +> +> You: *8 hours later, debugging environment switching* +> +> Built this twice now. The docs don't prepare you. + +**Thread Starter** +> CloudKit server-to-server authentication: a thread on what Apple's docs won't tell you. +> +> Just shipped production apps using this (BushelCloud + CelestraCloud). Here's everything I wish I knew before starting. 🧵 +> +> 1/ The docs show you how to generate keys. They don't show you what to do when they expire in production... + +**Confession/Story** +> Confession: I avoided CloudKit server-to-server auth for years because the docs scared me off. +> +> Finally bit the bullet for BushelCloud. Then again for CelestraCloud. +> +> Turns out it works great... once you figure out the 20 things Apple doesn't document. + +--- + +### LinkedIn + +**Technical Deep-Dive Teaser** +> CloudKit Server-to-Server Authentication: Beyond the Documentation Gap +> +> After implementing CloudKit's server-to-server authentication for two production applications (a macOS/Swift version sync tool and an RSS reader), I've documented patterns that Apple's official documentation doesn't address. +> +> Real-world challenges that aren't in the docs: +> • Key pair lifecycle management in production environments +> • Graceful handling of authentication failures at scale +> • Environment switching between development and production backends +> • Error patterns that only emerge under load +> • Security considerations for key storage and rotation +> +> The MistKit library handles the communication layer beautifully, but authentication architecture requires production experience to get right. +> +> For backend developers working with CloudKit: the gap between Apple's examples and production-ready systems is significant. +> +> #iOSDevelopment #CloudKit #ServerSideSwift #BackendDevelopment + +**Problem Solver** +> Solving CloudKit's Server-to-Server Authentication Challenge +> +> Apple's CloudKit server-to-server authentication is powerful but under-documented. After building BushelCloud (macOS/Swift version sync) and CelestraCloud (RSS reader) in production, I've mapped the journey from basic examples to scalable implementations. +> +> What the documentation covers: +> ✓ Key pair generation +> ✓ Basic request signing +> +> What production requires (but docs don't cover): +> → Authentication state management across services +> → Handling expired credentials gracefully +> → Environment-specific configuration patterns +> → Error recovery strategies +> → Security best practices for key storage +> +> #CloudKit #AppleDevelopment #iOS #Backend + +--- + +### Mastodon + +**Community Discussion** +> Friendly reminder that CloudKit server-to-server authentication is both: +> • Incredibly powerful for iOS/Mac backends +> • Incredibly under-documented by Apple +> +> Just shipped my second production app using it (CelestraCloud, an RSS reader). First was BushelCloud (macOS/Swift version sync tool). +> +> Both times I had to figure out key rotation, environment switching, and error handling from scratch. +> +> Anyone else been down this road? What gotchas did you hit? +> +> #CloudKit #Swift #iOSDev + +**Behind-the-Scenes** +> Building BushelCloud + CelestraCloud taught me that CloudKit server-to-server auth has two phases: +> +> Phase 1: Following Apple's docs ✅ (2 hours) +> Phase 2: Figuring out everything else ⚠️ (2 days) +> +> Key pair lifecycle? Not in docs. +> Environment switching? Not in docs. +> Production error handling? Definitely not in docs. +> +> It works great now. But wow, that discovery process. +> +> #ServerSideSwift #CloudKit + +--- + +### YouTube Community Posts + +**Variation 1** +Most developers don't know this: CloudKit works on Android, Windows, and servers. Not just Apple platforms. + +CloudKit Web Services is a REST API. If your platform can make HTTP requests, it can use CloudKit. I've shipped two production apps using this (BushelCloud and CelestraCloud). + +What platform would you connect to CloudKit? Android? Windows? Server-side? Drop a comment. + +**Variation 2** +Here's something that took me forever to realize: CloudKit isn't locked to iOS and Mac. CloudKit Web Services is essentially a REST API. + +You can build Android apps, Windows desktop apps, Linux servers — all talking to CloudKit. I've shipped two production apps doing exactly this. + +Would you watch a deep-dive on cross-platform CloudKit? What's your biggest CloudKit question? + +**Variation 3** +CloudKit on Android? Yep. Windows? Sure. Server-side Swift? Absolutely. + +CloudKit Web Services is a REST API that works anywhere. Apple's docs show you the basics but leave out everything about production patterns (key rotation, error handling, security). + +I spent 8+ hours discovering what Apple doesn't document. Should I make a comprehensive video on this? diff --git a/docs/cloudkit-guide/README.md b/docs/cloudkit-guide/README.md new file mode 100644 index 00000000..3f81f447 --- /dev/null +++ b/docs/cloudkit-guide/README.md @@ -0,0 +1,460 @@ +# CloudKit as Your Backend: From iOS to Server-Side Swift + +## Presentation Description from Swift Craft 2026 + +> CloudKit is great for iOS apps. How about backend services? I rebuilt a production CloudKit library and learned the patterns Apple doesn't document: three auth methods, type safety, error handling. Real deployments. Learn the whys and hows of using CloudKit on the backend. +> CloudKit has excellent documentation for iOS and macOS client development. But backend services—podcast aggregation, RSS readers, data processing—face APIs that Apple barely documents. I rebuilt a comprehensive CloudKit library using AI-generated OpenAPI specifications. The result: type-safe Swift code supporting three authentication methods (server-to-server, web authentication token, and API token), typed error handling for 9 HTTP status codes, and production deployments. + +> This talk fills the gaps with real production patterns: + +> Three Authentication Methods: - Server-to-Server: Autonomous services (podcast aggregation, cron jobs) - Web Authentication Token: User operations from backend (on behalf of signed-in users) - API Token: Development and debugging (CloudKit Dashboard) + +> Each method includes key generation, request signing, token handling, and failure recovery that Apple's documentation glosses over. You'll learn when to use each method and how to implement them with a unified ClientMiddleware pattern. + +> Type System Challenges: Solving CloudKit's dynamically-typed fields in Swift's statically-typed system with discriminated unions and type-safe record builders. + +> Production Error Handling: CloudKit returns 9+ HTTP status codes. Implementing typed error hierarchies, retry logic for transient failures, conflict resolution for concurrent modifications. + +> When to Use CloudKit: Decision framework comparing CloudKit vs. Firebase vs. custom backends with real production examples. + +> Drawing from production deployments (podcast backend, RSS sync service), attendees at all experience levels learn authentication patterns, type safety, error handling, and informed backend decisions. No prior CloudKit server-side experience required. + +--- + +## Core Narrative & Hook + +**Opening hook** (works for talks, videos, threads): +> "Raise your hand if you've used CloudKit from an iOS app. Keep it up if you've used CloudKit from a backend service. Yeah, that's the problem." + +**The problem**: CloudKit server-side is Apple's worst-documented feature. 2016-era docs. Auth barely explained. No error handling examples. Type system challenges unaddressed. Stack Overflow full of unanswered questions. + +**The solution story**: Built two production backends (BushelCloud + CelestraCloud) that required solving all of this. Then rebuilt MistKit from scratch using AI-generated OpenAPI specs to give others the patterns Apple didn't document. + +**Key insight on AI**: AI excels at documentation→OpenAPI spec translation. Human expertise required for architecture, error patterns, and API design. + +--- + +Educational content, reference material, and talk prep for an ongoing series about [MistKit](../README.md) and server-side CloudKit — covering what Apple's documentation leaves out. + +CloudKit Web Services is a REST API that works on any platform: server-side Swift, Linux, Android, Windows — not just Apple devices. Most developers don't know this, and Apple's documentation for server-to-server authentication is famously incomplete. This series covers the patterns that two production backends (BushelCloud and CelestraCloud) required to get right. + +| Theme | What It Covers | +|---|---| +| **Server-to-Server Auth** | Key pair generation, ECDSA request signing, credential lifecycle, what Apple's docs omit | +| **Type Safety** | CloudKit's dynamic fields vs. Swift's static types — discriminated unions, OpenAPI `oneOf` | +| **Error Handling** | 9 HTTP status codes, retry logic, exponential backoff, conflict resolution | +| **API Ergonomics** | Three-layer architecture: generated OpenAPI → abstraction → user-facing Swift API | + +--- + +## Outline + +### Why CloudKit + +#### iOS App 101 + +#### CloudKit on the Server + +##### Why CloudKit on the Server + +* Web Application +* Background Job + +**Production Examples**: + +| App | Purpose | Auth | Real Challenges | +|---|---|---|---| +| BushelCloud | Syncs macOS/Swift/Xcode version data for Bushel VM | Server-to-server | Concurrent updates from multiple version sources | +| CelestraCloud | Syncs RSS feeds for Celestra RSS reader | Server-to-server | 15-min polling, aggressive rate limiting, conflict resolution | + +**Stats for credibility**: +- **MistKit**: actively maintained open-source library — see the [repo](../../) for current stats +- Built using AI-assisted OpenAPI generation — significantly faster than manual implementation +- **BushelCloud** and **CelestraCloud** are production deployments, each requiring substantial schema migrations + +**When to Use CloudKit**: + +Use CloudKit when: +- Building backend for an iOS/macOS app +- Data sync for indie/small team +- Zero server management preferred +- Already in the Apple ecosystem + +Consider alternatives when: +- Android support needed → Firebase +- Complex relational queries → PostgreSQL/Supabase +- Real-time updates → Firebase +- Full backend control → Vapor/Hummingbird + +**Reality check**: CloudKit's "free" tier has limits. Rate limiting (429) is real at scale. Factor in discovery time for undocumented auth patterns. + +--- + +##### Understanding CloudKit + +| Theme | What It Covers | +|---|---| +| **Server-to-Server Auth** | Key pair generation, ECDSA request signing, credential lifecycle, what Apple's docs omit | +| **Type Safety** | CloudKit's dynamic fields vs. Swift's static types — discriminated unions, OpenAPI `oneOf` | +| **Error Handling** | 9 HTTP status codes, retry logic, exponential backoff, conflict resolution | +| **API Ergonomics** | Three-layer architecture: generated OpenAPI → abstraction → user-facing Swift API *(see Integrating MistKit)* | + +###### Authentication + +**Three Authentication Methods**: + +| Method | Use Case | Status | +|---|---|---| +| **API Token** | Dev/debug only, Dashboard-generated | Never production | +| **Web Auth Token** | User-specific backend ops, token passed from iOS app | Completely undocumented by Apple | +| **Server-to-Server** | Autonomous services, cron jobs, CLIs | Primary focus | + +**Server-to-Server — what Apple's docs cover**: Key pair generation, basic signing concept. + +**What they don't cover**: +- Exactly what to sign: ISO8601 timestamp + request path + body hash (SHA-256) +- How to sign: ECDSA with P-256 curve +- Where to put it: `X-Apple-CloudKit-Request-SignatureV1` header +- The full token format +- Environment switching between dev and production containers +- Key lifecycle management and rotation + +**`ClientMiddleware` pattern**: Separates auth from business logic. Testable (swap mock auth in tests). Reusable across operations. Production-ready. + +--- + +###### Database Scopes (Public vs Private vs Shared) + +All three databases use the same URL structure — swap the `{database}` path segment: + +``` +/database/1/{container}/{environment}/{public|private|shared}/{operation} +``` + +**Authentication per database**: + +| | Public | Private | Shared | +|---|---|---|---| +| **Server-to-Server Key** | Yes | No | No | +| **API Token (no user auth)** | Read only | No | No | +| **API Token + Web Auth Token** | Full access | Full access | Full access | + +**Operations availability**: + +| Operation | Public | Private | Shared | +|---|---|---|---| +| Query records | Yes | Yes | Yes | +| Lookup records | Yes | Yes | Yes | +| Modify records | Yes (requires auth) | Yes | Yes (if write permission) | +| Fetch record changes | No | Yes (custom zones only) | Yes | +| Custom zones | Not supported | Yes | Yes (owned by sharing user) | +| Create/modify zones | No | Yes | No | +| Zone changes | No | Yes | Yes | +| Zone-based subscriptions | No | Yes | Yes | +| Query-based subscriptions | Yes | Yes | No | +| Asset upload | Yes (requires auth) | Yes | Yes (if write access) | + +**Storage & access model**: + +| | Public | Private | Shared | +|---|---|---|---| +| **Storage** | App's iCloud allotment | User's iCloud account | Sharing owner's account | +| **Access model** | Security roles (world, authenticated, creator) | Owner only | Share participants | +| **Read without auth** | Yes (if role = world) | No | No | + +**Implications for server-to-server (MistKit backend services)**: +- Server-to-server keys are limited to **public database only** +- No change tracking — must poll with queries +- No custom zones — no atomic batch operations +- Security roles control read/write access + +--- + +###### Data Types + +**The problem**: CloudKit fields are runtime-dynamic JSON. Swift is statically typed. Mismatch. + +```json +{ "value": "Hello" } // String +{ "value": 42 } // Int +{ "value": "2026-07-01" } // Date (ISO8601 string) +{ "value": {...} } // Asset, Reference, Location +{ "value": [...] } // Array of any above +``` + +**The solution**: OpenAPI `oneOf` discriminated unions → Swift enum with associated values: + +```swift +enum CKRecordValue { + case string(String) + case int64(Int64) + case double(Double) + case date(Date) + case bytes(Data) + case reference(CKRecordReference) + case asset(CKAsset) + case location(CKLocation) + case list([CKRecordValue]) +} +``` + +Custom type overrides in `openapi-generator-config.yaml` improve ergonomics. Compiler catches type errors at build time — not runtime surprises. + +**Real example**: RSS article record — `title` (`.string`), `url` (`.string`), `publishDate` (`.date`), `unread` (`.int64`). + +--- + +###### Error Codes + +CloudKit returns 9 HTTP status codes, each requiring specific handling: + +| Code | Meaning | Strategy | +|---|---|---| +| 200 | Success | — | +| 400 | Bad Request (malformed data) | Fix request, don't retry | +| 401 | Unauthorized (bad signature, expired token) | Refresh auth, retry | +| 404 | Not Found | Handle missing record | +| 409 | Conflict (concurrent modification) | Merge + retry | +| 412 | Precondition Failed | Conditional save failed | +| 421 | Misdirected Request (wrong container) | Fix configuration | +| 429 | Too Many Requests | Exponential backoff | +| 503 | Service Unavailable | Exponential backoff | + +Each error carries nested JSON: `ckErrorCode`, `serverRecord` (on 409), `reason`. + +**Retry logic**: +- **429**: Exponential backoff — 1s, 2s, 4s, 8s, 16s. Respect `retryAfter` header. +- **409**: Receive `serverRecord` in error body. Merge strategies: last-write-wins, field-level merge, or custom business logic. Re-sign and retry. +- **503**: Exponential backoff, max 3-5 attempts. +- **401**: Refresh auth credentials, retry. + +**Typed error hierarchy**: `enum CloudKitError` with associated values — not string throwing. Enables pattern matching for specific recovery. + +**Partial failures**: Batch operations can have mixed success/failure per record. Handle per-record, not all-or-nothing. + +**Real example**: CelestraCloud — RSS sync every 15 minutes. Concurrent updates from multiple devices + aggressive CloudKit rate limiting. Both 409 and 429 handling are non-optional. + +--- + +##### Integrating MistKit + +###### Web Application + +###### Background Job + +**Three-Layer Architecture**: + +**Problem**: OpenAPI-generated code is verbose and low-level. + +```swift +// 40+ lines of this: +let request = Operations.SaveRecordsRequest( + path: .init(databaseScope: "public", containerIdentifier: "iCloud.com.example.app"), + body: .json(.init(operations: [.init(operationType: "create", record: .init(...))])) +) +``` + +| Layer | Responsibility | +|---|---| +| **Generated client** (Layer 1) | Auto-generated from OpenAPI spec. Never edit. Low-level REST. | +| **MistKit abstraction** (Layer 2) | Auth middleware, retry logic, error handling, response unwrapping, domain type conversion | +| **User-facing API** (Layer 3) | Swift-native, intuitive, feels like native CloudKit framework | + +After all three layers: +```swift +try await database.save(record) // 5 lines, type-safe, production-ready +``` + +--- + +## Talk Structure + +Five acts, scalable to any length. + +### Act 1: The Documentation Gap + +**Goal**: Establish the problem — Apple's CloudKit server-to-server docs are insufficient for production use. + +| Slide | Content | Duration | +|---|---|---| +| 1 | Title slide + intro | 1 min | +| 2 | "What CloudKit promises" — iCloud sync, zero backend, Apple handles infrastructure | 1.5 min | +| 3 | "What happens when you need a server" — the documentation gap | 1.5 min | +| 4 | Two production examples: BushelCloud + CelestraCloud — what we needed vs. what Apple provided | 2 min | + +**Key message**: Apple documents the happy path. Production needs the rest. + +--- + +### Act 2: The Rebuild — OpenAPI + AI + +**Goal**: Show how MistKit was rebuilt using OpenAPI spec generation and AI assistance. *(Skip for 30-min format.)* + +| Slide | Content | Duration | +|---|---|---| +| 5 | MistKit history: original library → why a rebuild was needed | 2 min | +| 6 | OpenAPI approach: spec-driven development with swift-openapi-generator | 2 min | +| 7 | AI-assisted rebuild: how Claude Code helped generate type-safe code from the OpenAPI spec | 2 min | +| 8 | The result: comprehensive test coverage, full type safety, production-ready | 2 min | + +**Key message**: Modern tooling (OpenAPI + AI) can make CloudKit's complexity manageable. + +--- + +### Act 3: Server-to-Server Authentication + +**Goal**: Walk through the authentication implementation that Apple barely documents. + +| Slide | Content | Duration | +|---|---|---| +| 9 | Authentication overview: what Apple tells you vs. what you need | 2 min | +| 10 | Key pair generation — step by step | 2 min | +| 11 | **Live code**: Request signing implementation | 3 min | +| 12 | Environment switching (development → production) | 1.5 min | +| 13 | Common pitfalls and debugging auth failures | 1.5 min | + +**Transition to demo**: "Let me show you this working..." + +#### Demo (5–7 min) + +**Prerequisites**: Xcode with MistKit package, Apple Developer account, CloudKit container configured, server-to-server key pair from CloudKit Dashboard. + +**Step 1 — Key pair generation (1 min)** +Show the CloudKit Dashboard flow: container → Server-to-Server Keys → generate → download `.pem` → note key ID. +> *"Apple gives you a `.pem` file and a key ID. What they don't tell you is how to actually use these to sign requests."* + +**Step 2 — Request signing (2 min)** +Walk through the MistKit signing code: load private key → create payload (date + body + path) → sign with ECDSA → attach headers (`X-Apple-CloudKit-Request-KeyID`, `X-Apple-CloudKit-Request-ISO8601Date`, `X-Apple-CloudKit-Request-SignedMessage`). +> *"This is the part where most developers give up. The signing format isn't documented clearly, and getting any part wrong gives you a generic 401."* + +**Step 3 — Environment switching (1 min)** +Show dev vs. production container config and how MistKit handles the switch. +> *"In development you get helpful error messages. In production, you get less help. Test everything in development first."* + +**Step 4 — Error handling (1.5 min)** +Trigger and handle 401 (invalid key), 404 (wrong record type), 409 (concurrent modification). Show typed error handling and retry logic. +> *"9 different HTTP status codes, each with its own recovery strategy. MistKit gives you typed errors instead of raw status codes."* + +**Step 5 — Live query (1.5 min)** +Execute a working query: request signed → response decoded → type-safe field access shown. +> *"From zero documentation to type-safe queries. That's what production-ready CloudKit looks like."* + +**Fallback plan**: Pre-recorded video of the same demo. Terminal output screenshots as static slides. Key code snippets already in slide deck. + +**Demo environment checklist**: +- [ ] MistKit demo project builds and runs +- [ ] CloudKit container has test data +- [ ] Private key file accessible +- [ ] Internet connection verified +- [ ] Pre-recorded backup video ready +- [ ] Terminal font size increased for projector visibility + +--- + +### Act 4: Type Polymorphism & Error Handling + +**Goal**: Deep dive into making CloudKit's dynamic type system safe in Swift. + +| Slide | Content | Duration | +|---|---|---| +| 14 | The problem: CloudKit fields are dynamically typed | 2 min | +| 15 | OpenAPI discriminated unions for type safety | 2 min | +| 16 | **Code demo**: Type-safe record field access | 3 min | +| 17 | Error handling overview: 9 HTTP status codes | 2 min | +| 18 | **Code demo**: Typed error responses with retry logic | 3 min | +| 19 | Conflict resolution with exponential backoff (CelestraCloud patterns) | 2 min | +| 20 | Production error handling: lessons from real deployments | 1 min | + +**Key message**: Type safety isn't optional when your backend talks to CloudKit. + +--- + +### Act 5: API Ergonomics + +**Goal**: Show the three-layer architecture that makes OpenAPI-generated code feel Swift-native. + +| Slide | Content | Duration | +|---|---|---| +| 21 | The three-layer architecture: Generated → Abstraction → User API | 2 min | +| 22 | Layer 1: Raw OpenAPI-generated code (what you get) | 1.5 min | +| 23 | Layer 2: Abstraction layer (Swift idioms, error mapping) | 1.5 min | +| 24 | Layer 3: User-facing API (what developers actually call) | 2 min | + +**Key message**: Good API design bridges the gap between generated code and developer experience. + +--- + +### Closing + Q&A + +| Slide | Content | Duration | +|---|---|---| +| 25 | When to use CloudKit as your backend (decision framework) | 2 min | +| 26 | Resources: MistKit repo, blog articles, related talks | 2 min | +| 27 | Q&A | 5–10 min | + +--- + +## Format Adaptations + +| Format | Adjust | Total content | +|---|---|---| +| **30-min talk** | Skip Act 2, condense Act 4 code demos to pre-recorded | ~25 min | +| **45-min talk** | Compress Acts 1–2 to 10 min combined, reduce Q&A to 5 min | ~38 min | +| **60-min talk** | All acts, full examples + live demo | ~50 min | +| **Workshop** | Attendees build a CloudKit backend service hands-on | 2–3 hours | +| **Blog post** | One act = one post, with real code | 2,000–3,000 words | +| **Social media** | Hook + one insight (auth gap, one error code, type safety) | Short | + +**iOSDevUK note**: More beginner-friendly framing on authentication concepts. + +--- + +## Accepted Talks (2026) + +- **Swift Craft 2026** — June 2026 (60 min) +- **Swift Rockies 2026** — Calgary, AB, July 2026 (45 min) +- **iOSDevUK 2026** — Aberystwyth, Wales, Sept 7–10, 2026 (30 min) + +--- + +## Materials Checklist + +- [ ] Slide deck (Keynote or Deckset) +- [ ] MistKit demo project (clean, working state) +- [ ] Pre-recorded demo backup video +- [ ] Production screenshots from BushelCloud & CelestraCloud (anonymized if needed) +- [ ] Code snippets for slides (syntax highlighted) + +--- + +## Memorable Phrases + +- *"Apple's worst-documented feature"* — server-to-server authentication +- *"The patterns Apple's documentation doesn't cover"* +- *"AI excels at docs→spec translation; humans needed for architecture"* +- *"Compiler catches type errors, not runtime surprises"* +- *"Zero overlap, complete coverage"* — useful when pairing with a client-side CloudKit talk + +--- + +## Learning Outcomes + +Audience leaves able to: +1. Implement server-to-server CloudKit auth — key pairs, request signing, environment switching +2. Design type-safe APIs for CloudKit's dynamic fields using OpenAPI discriminated unions +3. Handle all 9 CloudKit HTTP status codes with appropriate retry logic +4. Build the three-layer architecture to make generated code feel Swift-native +5. Decide when CloudKit is the right backend vs. Vapor, Firebase, or Supabase + +--- + +## In This Directory + +``` +docs/cloudkit-guide/ +└── articles/ # Blog posts and written content in progress +``` + +- [MistKit source code](../../Sources/MistKit/) +- [MistDemo example app](../../Examples/MistDemo/) +- [OpenAPI specification](../../openapi.yaml) diff --git a/docs/cloudkit-guide/articles/README.md b/docs/cloudkit-guide/articles/README.md new file mode 100644 index 00000000..a1471a67 --- /dev/null +++ b/docs/cloudkit-guide/articles/README.md @@ -0,0 +1,11 @@ +# Articles + +## Roadmap + +- [ ] "Beyond the MistKit Tutorials: Authenticating CloudKit from Backend Services" (before Swift Craft, May) +- [ ] "Building Celestra: Full-Stack Swift RSS Reader" (April) + +## Quarterly Alignment + +- **Q2:** CloudKit auth article fills major Apple documentation gap, Swift Craft talk support, portfolio building + diff --git a/docs/cloudkit-guide/articles/authenticating-cloudkit-backend-services.md b/docs/cloudkit-guide/articles/authenticating-cloudkit-backend-services.md new file mode 100644 index 00000000..f1f59673 --- /dev/null +++ b/docs/cloudkit-guide/articles/authenticating-cloudkit-backend-services.md @@ -0,0 +1,367 @@ +--- +title: Beyond the MistKit Tutorials: Authenticating CloudKit from Backend Services +date: 2026-01-01 00:00 +description: A practical walkthrough of the three CloudKit Web Services authentication methods — API tokens, web auth tokens, and server-to-server signing — and how to wire them up from a backend Swift service using MistKit. +featuredImage: /media/tutorials/[VERIFY: path to hero image] +subscriptionCTA: Subscribe for more deep dives on running Swift on the server. +--- + + + +A few years ago I built [HeartWitch](https://github.com/brightdigit/HeartWitch), a service that streams a streamer's live heart rate from their Apple Watch to a browser overlay. The watch was already signed in to iCloud, so making the user retype credentials on a watch face felt absurd — and CloudKit had a perfectly good identity for that user already. The catch: my server didn't run on an Apple platform. It needed to talk to CloudKit over the REST API, and Apple's documentation on how to authenticate that conversation is scattered across half a dozen pages, mostly written assuming a JavaScript browser context. + +This article is the guide I wish I'd had: a practical walkthrough of the three authentication methods CloudKit Web Services supports, when each one applies, and how to wire each one up using [MistKit](https://github.com/brightdigit/MistKit). + +--- + +**In this series:** + +* [Rebuilding MistKit with Claude Code (Part 1)](/tutorials/rebuilding-mistkit-claude-code-part-1/) +* [Rebuilding MistKit with Claude Code (Part 2)](/tutorials/rebuilding-mistkit-claude-code-part-2/) +* _Beyond the MistKit Tutorials: Authenticating CloudKit from Backend Services_ + +--- + +- [Why CloudKit Auth is Different on the Backend](#why-cloudkit-auth-is-different) +- [Method 1: API Token](#method-1-api-token) +- [Method 2: Web Auth Token](#method-2-web-auth-token) + - [Via Browser Redirect (Web Apps)](#getting-web-auth-token-browser) + - [Via iOS App (CKFetchWebAuthTokenOperation)](#getting-web-auth-token-from-ios) +- [Method 3: Server-to-Server (ECDSA)](#method-3-server-to-server) +- [Choosing the Right Method](#choosing-the-right-method) +- [Configuring MistKit](#configuring-mistkit) +- [Production Considerations](#production-considerations) + + +## Why CloudKit Auth is Different on the Backend + +On an Apple platform, CloudKit auth is invisible — the system framework hands the signed-in iCloud identity to your app and you never think about it. On a server, none of that is true. You're talking to `https://api.apple-cloudkit.com` directly, and you have to prove you're allowed to be there with credentials you manage yourself. Apple's [CloudKit Web Services Reference](https://developer.apple.com/library/archive/documentation/DataManagement/Conceptual/CloudKitWebServicesReference/) is the source of truth, but a lot of its examples assume a browser running [CloudKit JS](https://developer.apple.com/documentation/cloudkitjs), which is exactly the context backend services don't have. + +The single most counterintuitive thing here — and the thing every newcomer trips on — is that **the public and private databases use different authentication methods.** A public-database backend service signs requests as itself with an ECDSA key. A private-database backend service acts on behalf of a specific user, holding a token that user obtained by signing into iCloud. There is no method that does both. Pick the database first; the auth method falls out of that choice. + +That gives you really *two and a half* authentication methods: + +| Method | Database | Use Case | +|--------|----------|----------| +| API Token | Public (limited) | Prerequisite for Web Auth Token; limited standalone access to public data | +| Web Auth Token | Private / Shared | Access a specific user's private database (paired with API Token) | +| Server-to-Server | Public | Backend services, daemons, and CLI tools writing to the public database | + +The "half" is the API Token. On its own it does very little — its real job is to be the container identifier for the Web Auth Token flow. + + +## Method 1: API Token + + + +An API Token identifies your CloudKit container but grants limited access on its own. Its primary role in backend auth is as a required companion to the Web Auth Token — without an API Token, you can't initiate the web auth flow at all. + +### Creating an API Token in CloudKit Dashboard + +In the [CloudKit Dashboard](https://icloud.developer.apple.com/dashboard/), pick your container and open **Tokens & Keys → API Tokens**. Click the `+` button, give the token a name, and pick a **Sign-in Callback** (more on that below). Optionally tick **User Info** if you want the user's first/last name returned alongside the token. Click **Save**, and the dashboard shows the token string — copy it now, since you'll set it as `CLOUDKIT_API_TOKEN` in your service's environment. + +The Sign-in Callback choice matters because it changes how the Web Auth Token comes back to you: + +- **URL Redirect** — Apple's sign-in page redirects the browser to a URL you supply, with `ckSession` (sometimes called `ckWebAuthToken` in older docs and Stack Overflow answers) appended as a query parameter. This is the mode to pick if your backend handles the callback directly. +- **Post Message** — Apple's sign-in window posts a JavaScript `message` event back to your page containing the token in the event data. This is the mode CloudKit JS uses by default. + +If you're building a backend service with a thin web frontend, **URL Redirect** is the simpler integration: the token shows up as part of a normal HTTP request to your server. + +### Limitations + +An API Token alone cannot access the private database. To read or write a user's private data from a backend service, you must pair it with a Web Auth Token obtained from the user's iCloud session. + + +## Method 2: Web Auth Token + +A Web Auth Token is the only way to access a specific user's private (or shared) database from a backend service. Pure server daemons with no notion of "the user" don't need this method — they want server-to-server. But anything that sits behind a web app or an iOS app and acts on behalf of a signed-in user does. + +There are two ways your backend can get hold of one: the user signs in through a browser redirect (the path Apple's docs spend the most time on), or your iOS app pulls the token from the device's iCloud session via `CKFetchWebAuthTokenOperation` and sends it to your server. + + +### Via Browser Redirect (Web Apps) + +#### The Auth Flow + +The browser-redirect flow looks like this end-to-end: + +1. Your service makes a CloudKit request with only `ckAPIToken` set (no user identity yet). +2. CloudKit replies `401 Unauthorized` with a JSON body whose `serverErrorCode` is `AUTHENTICATION_REQUIRED` and whose `redirectURL` points to Apple's sign-in page. +3. Your service redirects the browser to that URL. +4. The user signs in with their Apple ID. +5. Apple redirects the browser back to the callback URL you registered, appending `ckSession=…` (the web auth token) as a query parameter. +6. Your service stores that token alongside the API token and uses both for every subsequent CloudKit request. + +That `ckSession` parameter is also persisted in a cookie on the same domain when the user opts in to "stay signed in" — useful if you're trying to figure out why a token survives a page refresh in development. + +#### The `AUTHENTICATION_REQUIRED` Response + +The 401 response with `AUTHENTICATION_REQUIRED` is the integration point — it's how CloudKit tells you "this user hasn't authenticated yet; here's where to send them." MistKit surfaces this through its typed error layer so you can pattern-match on it without parsing JSON yourself: + +```swift +do { + _ = try await service.queryRecords(...) +} catch let error as CloudKitError where error.serverErrorCode == .authenticationRequired { + if let redirectURL = error.redirectURL { + response.redirect(to: redirectURL) + } +} +``` + +#### Pairing with the API Token + +Once the user has signed in, every authenticated CloudKit request needs **both** tokens as query parameters: `ckAPIToken=…` (identifies the container) and `ckSession=…` (identifies the user). MistKit's `WebAuthTokenManager` carries both and the `AuthenticationMiddleware` appends them automatically — you never assemble the URL by hand. + + +### Via iOS App (CKFetchWebAuthTokenOperation) + +If your backend acts on behalf of a user who's already signed into your **iOS app**, you don't need the browser redirect at all. The iOS device already has an authenticated CloudKit session, and Apple's framework lets you extract a short-lived web auth token from it that your server can then use. + +The flow looks like this: + +1. **iOS app** runs a [`CKFetchWebAuthTokenOperation`](https://developer.apple.com/documentation/cloudkit/ckfetchwebauthtokenoperation) against `CKContainer.default().privateCloudDatabase`, passing the same API token you'd use from the web. +2. **CloudKit framework** exchanges the user's local iCloud session for a `ckWebAuthToken` string. +3. **iOS app** posts that token to your backend over your own API (HTTPS, your own auth — this token is now your responsibility). +4. **Backend** uses MistKit with both the API token and the received web auth token to read or write the user's private database. + +```swift +let op = CKFetchWebAuthTokenOperation(apiToken: apiToken) +op.fetchWebAuthTokenCompletionBlock = { token, error in + guard let token, error == nil else { return } + // POST `token` to your backend over your own API. +} +CKContainer.default().privateCloudDatabase.add(op) +``` + +> **Note:** The MistKit examples in this repo (Bushel, Celestra) use the browser-redirect flow above and the server-to-server flow below — not this iOS handoff path. The flow is documented here for completeness because it's the intended pattern when your backend is paired with your own iOS app, but the MistKit-side integration is identical to the browser-redirect case once your server has the token in hand. + +> **Note:** Web-auth-token lifetime, refresh behavior, and container scoping aren't extensively documented by Apple — treat any production deployment as needing live verification of token expiry semantics before you depend on long-lived sessions. + + +## Method 3: Server-to-Server (ECDSA) + + + +Server-to-server authentication uses ECDSA P-256 signing to authenticate as your server rather than as a user. This is the method for daemons, CLI tools, and scheduled jobs that write to the public database. + +### Setting Up in CloudKit Dashboard + +The key pair is **yours, not Apple's**. You generate it locally and hand the dashboard the public half. From the [CloudKit Dashboard](https://icloud.developer.apple.com/dashboard/), open your container's **Tokens & Keys → Server-to-Server Keys** and click the `+` button. The dashboard shows you the exact `openssl` command to run; the abbreviated version is: + +```bash +# Generate a P-256 private key +openssl ecparam -name prime256v1 -genkey -noout -out cloudkit-key.pem + +# Derive the public key in the format CloudKit expects, copy to clipboard +openssl ec -in cloudkit-key.pem -pubout | pbcopy +``` + +Paste the public key into the dashboard's text box, name the key, and save. The dashboard returns a **Key ID** — copy that. You now have everything you need: + +- The private key (`cloudkit-key.pem`) — kept on the server, never committed. +- The Key ID — set as `CLOUDKIT_KEY_ID` in your service's environment. + +### What Gets Signed + +For every request, MistKit signs a canonical string with your ECDSA private key. The exact payload is: + +``` +[ISO 8601 date]:[Base64-encoded SHA-256 of body]:[URL subpath] +``` + +For example, the signed string for a query against the public database might look like: + +``` +2026-05-06T14:30:00Z:H+oYzZ…body-hash…=:/database/1/iCloud.com.example.MyApp/development/public/records/query +``` + +The timestamp prevents replay attacks (CloudKit rejects signatures whose date drifts too far from the server clock), and the body hash binds the signature to that specific request payload — anyone tampering with the body invalidates the signature. + +### The Request Header Format + +CloudKit's server-to-server scheme **does not use an `Authorization:` header**. Instead, the signature is split across three custom headers: + +``` +X-Apple-CloudKit-Request-KeyID: [your key ID] +X-Apple-CloudKit-Request-ISO8601Date: [the same date that was signed] +X-Apple-CloudKit-Request-SignatureV1: [base64-encoded ECDSA signature] +``` + +For example, a signed request might carry: + +``` +X-Apple-CloudKit-Request-KeyID: fc9f8fc677ffe615a2e28b6be189f937c093a2393e49556d7fa459497ebb7a4a +X-Apple-CloudKit-Request-ISO8601Date: 2026-05-06T14:30:00Z +X-Apple-CloudKit-Request-SignatureV1: MEUCIQDx3pT8K2v9hN5L1Q3R4sT5uV6wX7yZ8aB9cD0eF1gH2wIgI3jK4lM5nO6pQ7rS8tU9vW0xY1zA2bC3dE4fG5hI6jK= +``` + +If you've used AWS SigV4 or similar schemes, this is similar in spirit but its own dialect. MistKit's `AuthenticationMiddleware` builds these for you on every request — see [`Sources/MistKit/AuthenticationMiddleware.swift`](https://github.com/brightdigit/MistKit/blob/main/Sources/MistKit/AuthenticationMiddleware.swift) and [`Sources/MistKit/Authentication/Internal/RequestSignature.swift`](https://github.com/brightdigit/MistKit/blob/main/Sources/MistKit/Authentication/Internal/RequestSignature.swift) for the implementation. + +### Key File Management + +MistKit accepts the private key two ways: + +- `CLOUDKIT_PRIVATE_KEY_PATH` — a filesystem path to the `.pem` file. Best when the key lives on disk (e.g. mounted as a Kubernetes secret). +- `CLOUDKIT_PRIVATE_KEY` — the PEM contents inline as an environment variable. Best in CI environments where secrets are injected as env vars and you'd rather not write them to disk. + +In the [BushelCloud](https://github.com/brightdigit/BushelCloud) and [CelestraCloud](https://github.com/brightdigit/CelestraCloud) examples, both repos store the PEM contents in **GitHub Actions secrets** and inject them as `CLOUDKIT_PRIVATE_KEY` at job runtime. The job runs on a stock `ubuntu-latest` runner, runs the MistKit-based binary, and exits — the key never touches disk. For non-CI deployments, a secrets manager (AWS Secrets Manager, GCP Secret Manager, HashiCorp Vault) injecting an env var is the equivalent pattern. + + +## Choosing the Right Method + +A short decision tree: + +- **Are you running in a browser?** Use [CloudKit JS](https://developer.apple.com/documentation/cloudkitjs), not MistKit. MistKit is for code that runs outside Apple's framework — server, CLI, scheduled job, or a non-Swift platform via the Swift toolchain. +- **Do you need to read or write a specific user's private data?** Web Auth Token. The user has to sign in (browser redirect) or hand you a token from your iOS app (`CKFetchWebAuthTokenOperation`). +- **Are you running a daemon, scheduled job, or CLI that writes to the public database on its own behalf?** Server-to-Server. +- **Do you only need to read public data and don't mind being unauthenticated?** API Token alone can do limited reads, but in practice most backend services that touch the public database should use Server-to-Server — writes require it, and you'll likely want them eventually. + +It's also worth knowing what each database actually supports — public, private, and shared databases don't have feature parity: + +| Operation | Public | Private | Shared | +|-----------|:------:|:-------:|:------:| +| Query / lookup records | ✓ | ✓ | ✓ | +| Modify records | ✓ | ✓ | ✓ | +| Record changes (sync) | – | ✓ | ✓ | +| Zones / zone changes | – | ✓ | ✓ | +| Query notifications | ✓ | ✓ | – | +| Asset upload | ✓ | ✓ | ✓ | + + +## Configuring MistKit + + + +### The `TokenManager` Protocol + +`TokenManager` is the seam MistKit uses to plug in any of the three auth methods at runtime. Three concrete implementations ship in the box — `APITokenManager`, `WebAuthTokenManager`, and `ServerToServerAuthManager` — and they all conform to the same protocol. Before each request, `AuthenticationMiddleware` asks the manager for its current `Authenticator` and lets the authenticator apply itself — query parameters for the token-based methods, signed headers for server-to-server. You can also implement your own `TokenManager` if you need to source credentials from a secrets vault or rotate them at runtime. + +`CloudKitService` itself is database-agnostic: the database to target is chosen **per call** on each operation that supports multiple databases (`queryRecords`, `createRecord`, etc.). For `.public`, every call also picks how to attribute itself via `PublicAuthPreference` — `.requires(.serverToServer)`, `.requires(.webAuth)`, or one of the `.prefers(_:)` variants for fallback behavior. Private and shared databases ignore this since CloudKit only accepts web-auth on those scopes. + +### API Token Configuration + +```swift +let service = CloudKitService( + containerIdentifier: "iCloud.com.example.MyApp", + tokenManager: APITokenManager(apiToken: apiToken), + environment: .development +) + +// Public-database call — API token grants limited reads only. +let results = try await service.queryRecords( + /* ... */ + database: .public(.prefers(.webAuth)) +) +``` + +### Web Auth Token Configuration + +```swift +let service = CloudKitService( + containerIdentifier: "iCloud.com.example.MyApp", + tokenManager: WebAuthTokenManager( + apiToken: apiToken, + webAuthToken: webAuthToken + ), + environment: .development +) + +// Private-database call — no PublicAuthPreference needed. +let results = try await service.queryRecords( + /* ... */ + database: .private +) +``` + +### Server-to-Server Configuration + +```swift +// PEM contents inline (e.g. from CLOUDKIT_PRIVATE_KEY) +let manager = try ServerToServerAuthManager( + keyID: keyID, + pemString: pemString +) + +// PEM file on disk (e.g. from CLOUDKIT_PRIVATE_KEY_PATH) +let pem = try String(contentsOfFile: privateKeyPath, encoding: .utf8) +let manager = try ServerToServerAuthManager(keyID: keyID, pemString: pem) + +let service = CloudKitService( + containerIdentifier: "iCloud.com.example.MyApp", + tokenManager: manager, + environment: .development +) + +// Public-database call — service-attributed via S2S signing. +let results = try await service.queryRecords( + /* ... */ + database: .public(.requires(.serverToServer)) +) +``` + +### Reading Credentials from the Environment + +The MistDemo CLI in this repo treats environment variables as the canonical source for credentials, which is exactly what you want on a server: nothing checked in, nothing on disk except where the platform mandates it. The pattern is straightforward — read the env var, fall back to a file path for the key, and bail out with a clear error if anything is missing: + +```swift +let env = ProcessInfo.processInfo.environment + +guard let keyID = env["CLOUDKIT_KEY_ID"] else { + throw ConfigurationError.missingRequired("CLOUDKIT_KEY_ID") +} + +let pem: String +if let inline = env["CLOUDKIT_PRIVATE_KEY"] { + pem = inline.replacingOccurrences(of: "\\n", with: "\n") +} else if let path = env["CLOUDKIT_PRIVATE_KEY_PATH"] { + pem = try String(contentsOfFile: path, encoding: .utf8) +} else { + throw ConfigurationError.missingRequired("CLOUDKIT_PRIVATE_KEY or CLOUDKIT_PRIVATE_KEY_PATH") +} + +let manager = try ServerToServerAuthManager(keyID: keyID, pemString: pem) +``` + +The `\\n` → `\n` replacement matters when CI systems (GitHub Actions, GitLab CI, etc.) escape the newlines in the PEM contents on the way through their secret-injection layer. If you store keys in a system that preserves newlines verbatim, you can drop the replacement. + + +## Production Considerations + +### Key Rotation _(Server-to-Server)_ + +Server-to-server keys don't expire on their own, but rotating them periodically is still good hygiene. The dashboard supports multiple active keys per container, so the rotation flow is: + +1. Generate a new key pair locally and add the public key as a new entry in **Tokens & Keys → Server-to-Server Keys**. +2. Roll the new Key ID and PEM into your service's secrets store. +3. Restart your service so it picks up the new credentials. +4. Once you've confirmed the new key is being used (check the CloudKit logs), delete the old key from the dashboard. + +> **Note:** The example services haven't exercised a full production rotation end-to-end — the multi-key overlap window is what makes a zero-downtime rotation possible, but the dashboard UI for it is worth a dry run on a non-production container before you depend on it. + +### Securing Credentials in CI/CD _(Server-to-Server)_ + +Don't commit keys, ever — `.pem` files belong in `.gitignore` from day one. In GitHub Actions (the pattern Bushel and Celestra use), the PEM contents go in **Settings → Secrets and variables → Actions** and the workflow injects them as environment variables on the runner: + +```yaml +env: + CLOUDKIT_KEY_ID: ${{ secrets.CLOUDKIT_KEY_ID }} + CLOUDKIT_PRIVATE_KEY: ${{ secrets.CLOUDKIT_PRIVATE_KEY }} + CLOUDKIT_CONTAINER_ID: ${{ secrets.CLOUDKIT_CONTAINER_ID }} +``` + +The same pattern works on any modern CI (GitLab CI variables, CircleCI contexts, Jenkins credentials). For long-running services, prefer a real secrets manager — AWS Secrets Manager, GCP Secret Manager, or HashiCorp Vault — with the key fetched at startup and injected into the process environment, never written to disk. + +### Local Development vs Production + +CloudKit containers expose two parallel environments — **development** and **production** — and the OpenAPI URL pattern includes which one you're hitting (`/database/{version}/{container}/{environment}/...`). MistKit picks the environment from the `environment:` parameter on `CloudKitService`. Standard practice: + +- During development, deploy schema changes to the development environment, run tests there, and use a separate development container or a development-only API token. +- Promote the schema to production via the dashboard before deploying user-facing code that depends on it. + +> **Note:** Whether server-to-server keys are scoped per-environment (dev vs prod) or shared across both isn't clearly surfaced in Apple's docs — check the **Tokens & Keys** section of the dashboard for your container to confirm which model applies before assuming a single key works in both environments. + +--- + +That's the full picture: pick the database, pick the matching auth method, set the right environment variables, and let MistKit's `AuthenticationMiddleware` handle the wire format. The [`Examples/MistDemo`](https://github.com/brightdigit/MistKit/tree/main/Examples/MistDemo) directory in the repo is a working reference for all three methods — it's the same code that runs against the real CloudKit container in MistKit's integration tests, so you can copy from it with confidence. The [BushelCloud](https://github.com/brightdigit/BushelCloud) and [CelestraCloud](https://github.com/brightdigit/CelestraCloud) repos show the GitHub Actions deployment pattern end to end, including the cron-scheduled scrape jobs that ultimately update a CloudKit public database from a stock Ubuntu runner. + +📚 **[View Documentation](https://swiftpackageindex.com/brightdigit/MistKit/documentation)** | 🐙 **[GitHub Repository](https://github.com/brightdigit/MistKit)** diff --git a/docs/cloudkit-guide/articles/deploying-mistkit-server-side.md b/docs/cloudkit-guide/articles/deploying-mistkit-server-side.md new file mode 100644 index 00000000..cb316a2a --- /dev/null +++ b/docs/cloudkit-guide/articles/deploying-mistkit-server-side.md @@ -0,0 +1,445 @@ +--- +title: Deploying MistKit - From Local CLI to a Scheduled CloudKit Job in CI +date: 2026-06-01 00:00 +description: A practical walkthrough of running a MistKit-based service or scheduled job in production - how to build a static Linux binary, manage CloudKit credentials, and structure GitHub Actions workflows for tiered scheduled sync. Built around two real production deployments, BushelCloud and CelestraCloud. +featuredImage: /media/tutorials/[VERIFY: path to hero image] +subscriptionCTA: Subscribe for more deep dives on running Swift on the server. +--- + + + + + +The hard part of using MistKit on a backend isn't writing the code - it's deciding where the code runs, how the credentials get there, and what happens when nobody's watching. Once you've got CloudKit working from a local CLI, the next question is: how do I run this on a schedule, on Linux, without a Mac in the loop? + +This article is the deployment guide that picks up where the [authentication walkthrough](/tutorials/authenticating-cloudkit-backend-services/) leaves off. Instead of focusing on which auth method to pick, it focuses on the operational side: how to build, package, and run a MistKit-based service so it works reliably on a server, in a container, or as a scheduled CI job. Two production deployments - [BushelCloud](https://github.com/brightdigit/BushelCloud) and [CelestraCloud](https://github.com/brightdigit/CelestraCloud) - are used throughout as worked examples, because both ship today as scheduled CI jobs that write to a CloudKit public database from stock Ubuntu runners. + +--- + +**In this series:** + +* [Rebuilding MistKit with Claude Code (Part 1)](/tutorials/rebuilding-mistkit-claude-code-part-1/) +* [Rebuilding MistKit with Claude Code (Part 2)](/tutorials/rebuilding-mistkit-claude-code-part-2/) +* [Authenticating CloudKit from Backend Services](/tutorials/authenticating-cloudkit-backend-services/) +* _Deploying MistKit: From Local CLI to a Scheduled CloudKit Job in CI_ + +--- + +- [What "Deploying" Actually Means Here](#what-deploying-means) +- [Workload Shapes: Server vs. Scheduled Job](#workload-shapes) +- [Picking an Auth Method for Your Deployment](#picking-auth-method) + - [Server-to-Server (Autonomous Services, Scheduled Jobs)](#auth-s2s) + - [API Token (Public-Database Readers)](#auth-api-token) + - [Web Auth Token (Acting on Behalf of a User)](#auth-web-token) +- [Building a Deployable Binary](#building-a-deployable-binary) + - [Static Linux Builds](#static-linux-builds) + - [Binary Caching in CI](#binary-caching-in-ci) +- [Providing Credentials at Runtime](#providing-credentials) + - [The Environment Variable Contract](#env-var-contract) + - [Inline Values vs. File Paths](#inline-vs-path) + - [Validating the Key Before You Hit CloudKit](#validating-the-key) + - [Wiring It Up in Different Runtimes](#runtime-wiring) +- [Scheduling Strategies](#scheduling-strategies) + - [Single-Cron: BushelCloud's Pattern](#single-cron-bushelcloud) + - [Tiered Scheduling: CelestraCloud's Pattern](#tiered-celestracloud) + - [Avoiding the Thundering Herd](#thundering-herd) +- [Concurrency, Idempotency, and Retries](#concurrency-and-retries) +- [Observability: Reporting from a Cron Job](#observability) +- [Dev vs. Prod CloudKit Environments](#dev-vs-prod) + + +## What "Deploying" Actually Means Here + +"Deploying" a MistKit-based service can mean one of three things, depending on the workload: + +1. **A long-running web service** that handles user requests and talks to CloudKit on their behalf (typically with a Web Auth Token, or system-attributed with Server-to-Server). +2. **A scheduled job** - a CLI or daemon that wakes up on a cron, pulls data from somewhere, and writes it to CloudKit (typically with Server-to-Server auth). +3. **A one-shot CLI** that a human runs occasionally - data import, schema bootstrapping, audits. + +The first is closest to a "normal" web app deployment - your existing Vapor/Hummingbird playbook applies and MistKit is just another HTTP client inside it. The second is where backend CloudKit actually shines and where the operational patterns are non-obvious: there's no user session to lean on, no UI to report progress, and no Apple-supplied infrastructure to fall back on. The third is mostly the local-dev story plus credential hygiene. + +Both example repos in this series - BushelCloud and CelestraCloud - are case (2): scheduled jobs running in GitHub Actions on Ubuntu. That's the shape this article spends the most time on, since it's the least documented. The build, credential, and observability sections also apply directly to case (1) - the only thing that differs is the scheduler. + + +## Workload Shapes: Server vs. Scheduled Job + +| Concern | Long-running service | Scheduled job | +|---------|---------------------|---------------| +| **Auth** | Web Auth Token (per user), API Token (public reads), or S2S (system-attributed) | Server-to-Server (or API Token for read-only public sync) | +| **Runtime** | Vapor/Hummingbird host, kept warm | Container or `runs-on:` runner, exits on completion | +| **Credentials** | Long-lived secrets in the process environment | Injected per-run from CI secrets | +| **Idempotency** | Per-request | Per-run - "what if this fires twice?" matters more | +| **Observability** | Existing APM / logs | Job summary, artifacts, optional notification | +| **Failure mode** | Returns 5xx to caller | Silent unless you wire up alerts | + +The scheduled-job column is where the worked examples live, but most of the operational patterns - building a portable binary, injecting credentials from the environment, validating the key before first use - port directly to the long-running-service column. + + +## Picking an Auth Method for Your Deployment + +The [authentication walkthrough](/tutorials/authenticating-cloudkit-backend-services/) covers the three methods in detail. From a deployment perspective, the key question is: **what credentials does my running process need to have available, and where do they come from?** That question has three different answers. + + +### Server-to-Server (Autonomous Services, Scheduled Jobs) + +This is what most of this article is about. Your deployment needs to ship with: + +- `CLOUDKIT_KEY_ID` - the Key ID string from the CloudKit Dashboard +- `CLOUDKIT_PRIVATE_KEY` (inline PEM) **or** `CLOUDKIT_PRIVATE_KEY_PATH` (filesystem path) + +The PEM file is the sensitive piece - it's the private half of an ECDSA P-256 key pair, and it's how your service proves it's allowed to write to the public database. Limited to the **public database only**. + +Use S2S when: scheduled jobs, daemons, CLIs that write data on their own behalf, or a long-running service that operates as itself (not on behalf of a user) and only needs the public database. + + +### API Token (Public-Database Readers) + +The simplest possible credentialing for a backend service: + +- `CLOUDKIT_API_TOKEN` - a single string from the CloudKit Dashboard + +No signing, no key file, no clock-synchronized timestamps. Just an env var. The trade-off is that an API Token alone grants only limited public-database access - you can read public records that have a security role of `_world`, but you can't write, and you can't touch the private or shared databases. + +Use API Token when: your backend service only **reads** data from the public database and you don't care about per-user attribution. A read replica that mirrors a CloudKit-hosted dataset into a search index, a status page that surfaces public-database counts, a thin REST proxy that exposes a curated subset of public records - all good fits. + +The deployment story collapses to "set one env var" - everything in [Providing Credentials at Runtime](#providing-credentials) below still applies, but the PEM-validation step and the file-on-disk pattern don't. + + +### Web Auth Token (Acting on Behalf of a User) + +Web Auth Token requires **both**: + +- `CLOUDKIT_API_TOKEN` - identifies the container +- `CLOUDKIT_WEB_AUTH_TOKEN` - identifies the specific user + +The second token is per-user and arrives at your service through one of the flows documented in the auth article (browser redirect or `CKFetchWebAuthTokenOperation` handoff from an iOS app). It's not something you'd typically set as a static environment variable - it's something your service receives at request time and passes through to MistKit on a per-request basis. + +There's no obvious reason to run a *scheduled job* with a Web Auth Token - schedule cycles outlive any reasonable user session, and the token would need refreshing on a cadence that defeats the point. It shows up in the deployment story only when a long-running web service holds tokens in a session store and uses MistKit to act on behalf of whichever user is currently making a request. + +Web Auth Token lifetime and refresh behavior aren't extensively documented; treat long-lived scheduled use as untested territory and verify token expiry against the current CloudKit docs before relying on it. + + +## Building a Deployable Binary + + +### Static Linux Builds + +MistKit targets cross-platform Swift, so the deployment artifact for a Linux service or scheduled job is a single statically-linked binary that doesn't need a Swift runtime on the host. Both BushelCloud and CelestraCloud build with `--static-swift-stdlib` against the official Swift Docker image: + +```bash +swift build -c release --static-swift-stdlib +``` + +In CI, the build happens inside a `swift:6.2-noble` (Ubuntu Noble) container so the resulting binary is portable across any modern Ubuntu runner. CelestraCloud invokes this with `container: swift:6.2-noble` at the job level; BushelCloud uses `docker run --rm` inside a `runs-on: ubuntu-latest` step for the fallback build path. Either approach works - the container-at-job-level form is slightly cleaner when every step in a job needs the Swift toolchain. + +The same `--static-swift-stdlib` binary drops straight into a distroless or `ubuntu:noble` container image for non-CI deployment targets (Kubernetes, Fly.io, a plain `systemd` unit on a VPS). No Swift runtime needed on the host. + +Both examples currently pin Swift 6.2; bump to the latest stable major when Apple ships one. + + +### Binary Caching in CI + +A `swift build -c release --static-swift-stdlib` from scratch in the Swift Docker image takes ~2 minutes on a stock `ubuntu-latest` runner. For a job that runs three times a day, that's six wasted minutes daily - and worse, it's six minutes during which a transient toolchain or network hiccup could fail a scheduled production run. + +The pattern both repos use is to **build the binary once and cache it**: + +```yaml +- name: Cache compiled binary + id: cache-binary + uses: actions/cache@v4 + with: + path: .build/release/celestra-cloud + key: celestra-cloud-${{ runner.os }}-${{ hashFiles('Sources/**/*.swift', 'Package.swift') }}-${{ github.event.inputs.force_rebuild || 'false' }} +``` + +The cache key is keyed on the hash of the Swift sources and `Package.swift`, so any code change invalidates it. CelestraCloud also wires an `actions/upload-artifact@v4` step after the build and `actions/download-artifact@v4` in each subsequent job, so a single build feeds multiple downstream sync jobs in the same workflow run (one per feed tier). + +BushelCloud takes a similar shape but pulls the binary from a separate `bushel-cloud-build.yml` workflow's artifact, falling back to an inline build if the artifact has expired (GitHub Actions artifact retention defaults to 90 days). The fallback path is worth copying - it prevents a stale-artifact failure on day 91 from breaking your scheduled run. + +For a long-running server deployment, the equivalent of "binary caching" is just shipping a built image: one CI workflow builds and publishes the container, the runtime pulls and runs it. Same end state, different scheduler. + + +## Providing Credentials at Runtime + +The credential-injection patterns below apply regardless of whether MistKit is running as a scheduled GitHub Actions job, a long-running container on Kubernetes, a systemd-managed daemon on a VPS, or a developer's local CLI. The only thing that changes per environment is *how* the values get into the process's environment - MistKit itself just reads them. + + +### The Environment Variable Contract + +MistKit (and the example CLIs) read all credentials from `ProcessInfo.processInfo.environment`. The full set of variables, by auth method: + +| Variable | Method | Purpose | +|----------|--------|---------| +| `CLOUDKIT_CONTAINER_ID` | All | Container identifier, e.g. `iCloud.com.example.MyApp` | +| `CLOUDKIT_ENVIRONMENT` | All | `development` or `production` | +| `CLOUDKIT_API_TOKEN` | API Token / Web Auth | Public-DB token from Dashboard | +| `CLOUDKIT_WEB_AUTH_TOKEN` | Web Auth | Per-user token from sign-in flow | +| `CLOUDKIT_KEY_ID` | S2S | Server-to-Server key ID from Dashboard | +| `CLOUDKIT_PRIVATE_KEY` | S2S | Inline PEM contents | +| `CLOUDKIT_PRIVATE_KEY_PATH` | S2S | Filesystem path to PEM file | + +A typical bootstrap in your service entrypoint reads these once at startup and constructs the `CloudKitService`: + +```swift +let env = ProcessInfo.processInfo.environment + +guard let containerID = env["CLOUDKIT_CONTAINER_ID"] else { + throw ConfigurationError.missingRequired("CLOUDKIT_CONTAINER_ID") +} + +let environment: CloudKitEnvironment = + env["CLOUDKIT_ENVIRONMENT"] == "production" ? .production : .development + +// S2S path - read PEM inline or from disk +guard let keyID = env["CLOUDKIT_KEY_ID"] else { + throw ConfigurationError.missingRequired("CLOUDKIT_KEY_ID") +} + +let pem: String +if let inline = env["CLOUDKIT_PRIVATE_KEY"] { + pem = inline.replacingOccurrences(of: "\\n", with: "\n") +} else if let path = env["CLOUDKIT_PRIVATE_KEY_PATH"] { + pem = try String(contentsOfFile: path, encoding: .utf8) +} else { + throw ConfigurationError.missingRequired("CLOUDKIT_PRIVATE_KEY or CLOUDKIT_PRIVATE_KEY_PATH") +} + +let manager = try ServerToServerAuthManager(keyID: keyID, pemString: pem) +let service = CloudKitService( + containerIdentifier: containerID, + tokenManager: manager, + environment: environment +) +``` + +The `\\n` → `\n` replacement matters when the secrets-injection layer escapes newlines in the PEM contents (GitHub Actions, GitLab CI, and a handful of others do this). If your environment preserves newlines verbatim, you can drop the replacement. + + +### Inline Values vs. File Paths + +For the Server-to-Server PEM specifically, MistKit accepts the key two ways: inline as `CLOUDKIT_PRIVATE_KEY`, or via a filesystem path in `CLOUDKIT_PRIVATE_KEY_PATH`. The choice depends on where the credential comes from in the host environment: + +- **Inline** is the simplest path when the credential comes from a CI secret store or a `.env` file - you pass the PEM string through as-is and the key never touches disk. +- **File path** is what you want when the credential is mounted as a file by the platform - Kubernetes secrets, systemd's `LoadCredential=`, Docker secrets, a secrets-manager CSI driver. Pointing at the mount path means you get the platform's encryption-at-rest and rotation handling for free. + +BushelCloud's composite action uses the inline form: + +```yaml +env: + CLOUDKIT_KEY_ID: ${{ inputs.cloudkit-key-id }} + CLOUDKIT_PRIVATE_KEY: ${{ inputs.cloudkit-private-key }} +``` + +CelestraCloud writes the PEM to a temp file first, then points MistKit at the path: + +```yaml +env: + CLOUDKIT_PRIVATE_KEY_PATH: /tmp/cloudkit_key.pem + +steps: + - name: Create CloudKit private key file + run: | + cat <<'EOF' > $CLOUDKIT_PRIVATE_KEY_PATH + ${{ secrets.CLOUDKIT_PRIVATE_KEY }} + EOF + chmod 600 $CLOUDKIT_PRIVATE_KEY_PATH + + # ... sync step uses the binary with CLOUDKIT_PRIVATE_KEY_PATH set ... + + - name: Cleanup private key + if: always() + run: rm -f $CLOUDKIT_PRIVATE_KEY_PATH +``` + +Two things to call out: the `chmod 600` (so only the runner user can read it) and the `if: always()` cleanup step (so the key is removed even when the sync step fails). Neither matters much on an ephemeral runner that's thrown away after the run, but both are non-optional on long-lived hosts. + + +### Validating the Key Before You Hit CloudKit + +A truncated PEM doesn't fail at parse time - it fails when you try to sign a request, and the failure mode is a generic `401 AUTHENTICATION_FAILED` from CloudKit with no detail on _why_. BushelCloud's composite action validates the PEM format before the sync step runs, which dramatically shortens the debugging loop on credential rotation: + +```bash +if ! grep -q "BEGIN.*PRIVATE KEY" <<< "$CLOUDKIT_PRIVATE_KEY"; then + echo "Error: PEM header not found" + echo "Common issues: missing BEGIN/END markers, extra whitespace, copy/paste truncation" + exit 1 +fi + +if ! grep -q "END.*PRIVATE KEY" <<< "$CLOUDKIT_PRIVATE_KEY"; then + echo "Error: PEM footer not found" + exit 1 +fi + +# Validate base64 content between headers +PEM_CONTENT=$(sed -n '/BEGIN/,/END/p' <<< "$CLOUDKIT_PRIVATE_KEY" | grep -v "BEGIN\|END") +if ! base64 -d >/dev/null 2>&1 <<< "$PEM_CONTENT"; then + echo "Error: PEM content is not valid base64" + exit 1 +fi +``` + +The `<<< "$VAR"` (here-string) form is deliberate: it keeps the secret out of the process argument list, which on Linux is visible to other users via `/proc/*/cmdline`. Don't pipe secrets through `echo "$PEM" | grep` if you can avoid it. + +For a long-running service, the same check belongs in the startup health check - fail loudly at boot rather than on the first request. + +GitHub Actions redacts known secrets from log output, but process-list visibility on shared runners is a separate concern - the here-string form keeps secrets out of `/proc/*/cmdline` regardless of platform-specific log handling. + + +### Wiring It Up in Different Runtimes + +Same env-var contract, different injection mechanism per runtime: + +- **Local development** - A `.env` file in the project root, sourced with `source .env` or loaded by a library like Apple's [swift-configuration](https://github.com/apple/swift-configuration) (CelestraCloud does this - see its `Configuration/` directory). Add `.env` to `.gitignore`. +- **GitHub Actions / GitLab CI** - Secrets stored in the project's secret store, exposed via `env:` blocks or `${{ secrets.NAME }}` interpolation, as shown above. +- **Docker / Compose** - `environment:` block in `docker-compose.yml`, `env_file:`, or `--env-file` at `docker run` time. +- **Kubernetes** - `Secret` resources, projected into the pod either as env vars (`envFrom: secretRef:`) or as files (`volumeMounts: + secret:`). The file form pairs naturally with `CLOUDKIT_PRIVATE_KEY_PATH`. +- **systemd on a VPS** - `EnvironmentFile=` in the unit file for plain env vars; `LoadCredential=` (on systems with credential-encryption) for keys that should stay encrypted at rest. +- **Managed platforms (Fly.io, Railway, Render, Lambda)** - Each has its own "environment variables" or "secrets" tab in the dashboard. The injected values end up in `ProcessInfo.processInfo.environment` exactly the same way. + +The MistKit side doesn't care which of these you use - it just reads the environment. + + +## Scheduling Strategies + +GitHub Actions' `on: schedule:` is the easy part - cron syntax, one line, done. The interesting design decisions are around _what_ to schedule and _how often_. (For long-running services this section doesn't apply - skip to [Concurrency, Idempotency, and Retries](#concurrency-and-retries).) + + +### Single-Cron: BushelCloud's Pattern + +BushelCloud syncs macOS / Xcode / Swift version data three times a day. There's only one logical job ("scrape upstream sources, write to CloudKit"), and the scheduling reflects that: + +```yaml +on: + schedule: + - cron: '17 2 * * *' # 02:17 UTC + - cron: '43 10 * * *' # 10:43 UTC + - cron: '29 18 * * *' # 18:29 UTC + + workflow_dispatch: # Manual trigger for testing +``` + +The three offsets are chosen to give roughly 8-hour spacing, aligned with the VirtualBuddy TSS API's 12-hour cache lifetime (one of BushelCloud's upstream data sources). Manual `workflow_dispatch` is left on for ad-hoc reruns and for the "I just merged a fix and want to see it run now" case. + +Production sync runs are kept on `workflow_dispatch` only - the live production CloudKit container is only updated when a human explicitly clicks the button, after the development environment has had a clean run. This is one of those policy decisions that's worth committing to early. + + +### Tiered Scheduling: CelestraCloud's Pattern + +CelestraCloud is more interesting because not all RSS feeds are equal. Popular feeds want frequent refresh; feeds that haven't published in months can be checked weekly. The workflow encodes this with multiple cron lines, a `determine-tier` job that inspects the current hour, and a set of downstream jobs gated on tier outputs: + +```yaml +on: + schedule: + - cron: '0 2 * * *' # Daily: standard feeds + - cron: '0 3 * * 0' # Weekly Sunday: stale feeds +``` + +The `determine-tier` job reads `date -u +%H` and emits a `tier` output (`standard`, `stale`, `high`, or `pr-test`); each downstream job has an `if: needs.determine-tier.outputs.runs_standard == 'true'` guard. The result is a single workflow file that the cron scheduler can fire on multiple schedules without duplicating per-tier YAML. + +Within a tier, the actual MistKit call is parameterized by the tier's filters: + +```yaml +# High-priority tier - matrix of two passes with different popularity thresholds +strategy: + matrix: + include: + - name: "Pass 1: Very popular feeds" + args: "--update-min-popularity 100 --update-max-failures 2 --update-delay 2.0 --update-limit 100" + - name: "Pass 2: Popular feeds" + args: "--update-min-popularity 10 --update-max-failures 5 --update-delay 2.5 --update-limit 100" +``` + +Those `--update-*` flags map directly to MistKit's `QueryFilter` API - the CLI is just a thin wrapper that converts CLI arguments into filter parameters on the CloudKit query. The same pattern works for any cron job that needs to process "the top N by some metric" without scanning the whole table. + + +### Avoiding the Thundering Herd + +Both repos schedule at non-:00 minute offsets - `17`, `29`, `43` for BushelCloud. This isn't paranoia: GitHub Actions has a real bias toward delaying jobs scheduled at exactly `:00` past common UTC boundaries (top of the hour, midnight UTC), because that's when half the world's cron jobs fire. Picking a prime-ish minute offset typically gets you closer to the actual intended fire time. + +GitHub's docs explicitly note that scheduled workflows can be delayed during periods of high load, particularly at the top of the hour. + + +## Concurrency, Idempotency, and Retries + +Both repos use GitHub Actions' `concurrency:` group with `cancel-in-progress: true` to guarantee that a new sync run cancels any older one still in flight: + +```yaml +concurrency: + group: cloudkit-sync-dev + cancel-in-progress: true +``` + +This is safe **only because the underlying job is idempotent**. BushelCloud uses deterministic record names based on build numbers and `.forceReplace` operations, so re-running a sync updates existing records instead of creating duplicates. CelestraCloud queries by GUID before upload and skips articles that already exist. Neither cares whether a previous run finished cleanly. + +If your job isn't idempotent - say, it appends to a log or increments a counter - you want `cancel-in-progress: false` (the default) and an explicit lock at the application level (e.g. a CloudKit record that acts as a leader-election token). + +MistKit itself doesn't do automatic retry on transient CloudKit errors today. For 429 (rate limit) and 503 (transient unavailability), the typical pattern is a small wrapper at the operation site that catches `CloudKitError`, checks the `serverErrorCode`, and retries with exponential backoff: + +```swift +func withRetry(_ op: () async throws -> T) async throws -> T { + var delay: UInt64 = 1_000_000_000 // 1s in nanoseconds + for attempt in 1...5 { + do { return try await op() } + catch let error as CloudKitError + where error.serverErrorCode == .tooManyRequests + || error.serverErrorCode == .serviceUnavailable { + if attempt == 5 { throw error } + try await Task.sleep(nanoseconds: delay) + delay *= 2 + } + } + fatalError("unreachable") +} +``` + +The exact `serverErrorCode` cases worth retrying may evolve - cross-reference `CloudKitError` in the MistKit source for the current set. + + +## Observability: Reporting from a Cron Job + +The hardest part of a quiet scheduled job is knowing whether it actually ran and what it did. Both repos solve this with two-step reporting: the CLI emits a structured JSON report, and a downstream CI step parses that report into a `$GITHUB_STEP_SUMMARY` (which becomes the rich summary view on the workflow run page). + +CelestraCloud's pattern uses a `--update-json-output-path` flag on the CLI: + +```bash +./bin/celestra-cloud update \ + --update-limit 5 \ + --update-max-failures 0 \ + --update-json-output-path ./feed-update-pr-test.json +``` + +A separate `summary` job then `jq`'s the resulting JSON files and writes a markdown summary: + +```bash +total_feeds=$(jq -r '.summary.totalFeeds // 0' "$json_file") +success_count=$(jq -r '.summary.successCount // 0' "$json_file") +echo "- **Total Feeds Processed:** $total_feeds" >> $GITHUB_STEP_SUMMARY +echo "- **Successful:** $success_count" >> $GITHUB_STEP_SUMMARY +``` + +BushelCloud does the same with a `BUSHEL_SYNC_JSON_OUTPUT_FILE` environment variable, plus a per-record-type breakdown of created / updated / failed counts. The summary lives at `$GITHUB_STEP_SUMMARY` and surfaces as the workflow run's "Summary" view in the GitHub UI - no need for an external dashboard or alerting service in the early days of a deployment. + +For production alerting, both repos retain the JSON report as a workflow artifact (`actions/upload-artifact@v4` with `retention-days: 30` or `90`), so a separate process - a daily Slack digest, a dashboard scrape, a manual audit - can pull historical results without re-running the job. + +For a long-running service, the equivalent is the request-level logging you already have - structured logs flowing into your existing aggregator, plus health-check endpoints that exercise a representative MistKit call so you find out about auth or schema drift before users do. + + +## Dev vs. Prod CloudKit Environments + +CloudKit containers expose two parallel environments: `development` and `production`. The MistKit `environment:` parameter on `CloudKitService` (or the `CLOUDKIT_ENVIRONMENT` env var that the example CLIs read) selects which one a given run targets. + +The deployment pattern that works in practice: + +1. **Two separate workflows or service deployments**, one per environment. BushelCloud has `cloudkit-sync-dev.yml` (scheduled, 3x daily) and `cloudkit-sync-prod.yml` (`workflow_dispatch:` only). +2. **Two sets of secrets**, suffixed `_DEV` and `_PROD` in the repo's secret store. The workflow or container references the appropriate set explicitly - no shared "default" secret that one accidentally cross-contaminates. +3. **Schema changes go through dev first**, deployed via `cktool` and verified by the next scheduled dev sync. Once the dev sync is clean for a day, promote the schema to production and trigger the prod deployment. + +This is the same dev/prod hygiene as any backend, just with CloudKit's specific quirk that the schema lives on Apple's infrastructure and has to be promoted explicitly via `cktool` (CloudKit Dashboard or `xcrun cktool deploy-schema-changes`). + +The `cktool` subcommand has shifted between Xcode versions - check `xcrun cktool --help` against your installed Xcode if the invocation above doesn't match. + +--- + +That's the operational picture: pick the right auth method for your workload, build a static binary, inject the credentials from your platform's secrets mechanism, and (for scheduled jobs) make the job idempotent and surface a structured report so you can tell what it did. The [`Examples/BushelCloud`](https://github.com/brightdigit/MistKit/tree/main/Examples/BushelCloud) and [`Examples/CelestraCloud`](https://github.com/brightdigit/MistKit/tree/main/Examples/CelestraCloud) directories in the MistKit repo are working references for everything in this article - both ship with the GitHub Actions workflows referenced above and have been running on schedule for months. Clone either one as a starting point and replace the data layer with your own. + +📚 **[View Documentation](https://swiftpackageindex.com/brightdigit/MistKit/documentation)** | 🐙 **[GitHub Repository](https://github.com/brightdigit/MistKit)** diff --git a/docs/cloudkit-guide/articles/rebuilding-mistkit-claude-code-part-1.md b/docs/cloudkit-guide/articles/rebuilding-mistkit-claude-code-part-1.md new file mode 100644 index 00000000..03cb6b26 --- /dev/null +++ b/docs/cloudkit-guide/articles/rebuilding-mistkit-claude-code-part-1.md @@ -0,0 +1,535 @@ +--- +title: Rebuilding MistKit with Claude Code - From CloudKit Docs to Type-Safe Swift (Part 1) +date: 2025-12-01 00:00 +description: Follow the journey of rebuilding MistKit using Claude Code and swift-openapi-generator. Learn how OpenAPI specifications transformed Apple's CloudKit documentation into a type-safe Swift client, and discover the challenges of mapping CloudKit's quirky REST API to modern Swift patterns. +featuredImage: /media/tutorials/rebuilding-mistkit-claude-code/mistkit-rebuild-part1-hero.webp +subscriptionCTA: Want to learn more about AI-assisted Swift development? Sign up for our newsletter to get notified when Part 2 drops. +--- + +In my previous article about [Building SyntaxKit with AI](https://brightdigit.com/tutorials/syntaxkit-swift-code-generation/), I explored how with the help of [Claude Code](https://claude.ai/claude-code) I could transform SwiftSyntax's 80+ lines of verbose API calls into 10 lines of elegant, declarative Swift. + +I saw how Claude Code could easily replace and understand patterns. That's when I decided to explore the idea of updating [MistKit](https://github.com/brightdigit/MistKit), my library for server-side CloudKit application and see how Claude Code can help. + +--- + +**In this series:** + +* [Building SyntaxKit with AI](/tutorials/syntaxkit-swift-code-generation/) +* _Rebuilding MistKit with Claude Code (Part 1)_ +* [Rebuilding MistKit with Claude Code (Part 2)](/tutorials/rebuilding-mistkit-claude-code-part-2/) + +--- + +📚 **[View Documentation](https://swiftpackageindex.com/brightdigit/MistKit/documentation)** | 🐙 **[GitHub Repository](https://github.com/brightdigit/MistKit)** + +- [The Decision to Rebuild](#the-decision-to-rebuild) + - [The Game Changer: swift-openapi-generator](#the-game-changer-swift-openapi-generator) + - [Learning from SyntaxKit's Pattern](#learning-from-syntaxkits-pattern) +- [Building with Claude Code](#building-with-claude-code) + - [Why OpenAPI + swift-openapi-generator?](#why-openapi--swift-openapi-generator) + - [Challenge #1: Type System Polymorphism](#challenge-1-type-system-polymorphism) + - [Challenge #2: Authentication Complexity](#challenge-2-authentication-complexity) + - [Challenge #3: Error Handling](#challenge-3-error-handling) + - [Challenge #4: API Ergonomics](#challenge-4-api-ergonomics) + - [The Iterative Workflow with Claude](#the-iterative-workflow-with-claude) +- [What's Next](#whats-next) + + +## The Decision to Rebuild + +I had a couple of use cases where MistKit running in the cloud would allow me to store data in a public database. However I hadn't touched the library in a while. + +By now, [Swift had transformed](https://brightdigit.com/tutorials/swift-6-async-await-actors-fixes/) while MistKit stood still: +- **Swift 6** with strict concurrency checking +- **async/await** as standard (not experimental) +- **Server-side Swift maturity** (Vapor 4, swift-nio, AWS Lambda) +- **Modern patterns** expected (Result types, AsyncSequence, property wrappers) + +MistKit, frozen in 2021, couldn't take advantage of any of this. + +> youtube https://youtu.be/_-k97s1ZPzE + + +### The Game Changer: [swift-openapi-generator](https://github.com/apple/swift-openapi-generator) + +At [WWDC 2023](https://developer.apple.com/videos/play/wwdc2023/10171/), Apple announced [`swift-openapi-generator`](https://github.com/apple/swift-openapi-generator)—a tool that reads OpenAPI specifications and automatically generates type-safe Swift client code. This single tool made the MistKit rebuild feasible. What was missing was an OpenAPI spec. If I had that I could easily create a library which made the necessary calls to CloudKit as needed, as well as compatibility with [server-side (AsyncHTTPClient)](https://github.com/swift-server/swift-openapi-async-http-client) or [client-side (URLSession)](https://github.com/apple/swift-openapi-urlsession) APIs . + +That's where [Claude Code](https://claude.ai/claude-code) came in. + + +### Learning from SyntaxKit's Pattern + +With my work on SyntaxKit, I could see that if I fed sufficient documentation on an API to an LLM, it can understand how to develop against it. There may be issues along the way. However, any failures come with the ability to learn and adapt either with internal documentation or writing sufficient tests. + +Just as I was able to simplify SwiftSyntax into a simpler API with [SyntaxKit](https://github.com/brightdigit/SyntaxKit), I can have an LLM create an OpenAPI spec for CloudKit. + +--- + +The pattern was clear: **give Claude the right context, and it could translate Apple's documentation into a usable OpenAPI spec**. SyntaxKit taught me that code generation works best when you have a clear source of truth—for SyntaxKit it was SwiftSyntax ASTs, for MistKit it would be CloudKit's REST API documentation. The abstraction layer would come later. + +The rebuild was ready to begin. + +![CloudKit Web Services Documentation Site](/media/tutorials/rebuilding-mistkit-claude-code/cloudkit-documentation.webp) + + +## Building with [Claude Code](https://claude.ai/claude-code) + +I needed a way for Claude Code to understand how the CloudKit REST API worked. There was one main document I used—the [CloudKit Web Services Documentation Site](https://developer.apple.com/library/archive/documentation/DataManagement/Conceptual/CloudKitWebServicesReference/). The [CloudKit Web Services Documentation](https://developer.apple.com/library/archive/documentation/DataManagement/Conceptual/CloudKitWebServicesReference/) Site, **which hasn't been updated since June of 2016**, contains the most thorough documentation on how the REST API works and hopefully can provide enough for Claude to start crafting the OpenAPI spec. + +By running the site (as well as the swift-openapi-generator documentation) through llm.codes, saving the exported markdown documentation in the `.claude/docs` directory and letting Claude Code know about it (i.e. add a reference to it in Claude.md), I could now start having Claude Code translate the documentation into a usable API. + +### Setting Up Claude Code for MistKit + +Before diving in, here's what you need to understand about working with Claude Code: + +**Documentation Export with llm.codes** +I used [llm.codes](https://llm.codes) (mentioned in my [SyntaxKit article](https://brightdigit.com/tutorials/syntaxkit-swift-code-generation/)) to convert Apple's web documentation into markdown format that Claude can easily understand. This tool crawls documentation sites and exports them as clean markdown files. It also works with DocC documentation from Swift packages, making it easy to give Claude context about any Swift library's API. + +**Claude Code's Context System** +Claude Code uses a simple but powerful context system: +- `.claude/docs/` - Store reference documentation (like CloudKit API docs, swift-openapi-generator guides) +- `.claude/CLAUDE.md` or `CLAUDE.md` - Reference these docs so Claude knows to use them as context + +This gives Claude the context it needs to understand CloudKit's API without you having to paste documentation repeatedly in every conversation. + +``` +.claude/docs +├── cktool-full.md # Complete CloudKit CLI tool documentation +├── cktool.md # Condensed CloudKit CLI reference +├── cktooljs-full.md # Full CloudKitJS documentation +├── cktooljs.md # CloudKitJS quick reference +├── cloudkit-public-database-architecture.md +├── cloudkit-schema-plan.md +├── cloudkit-schema-reference.md +├── cloudkitjs.md # JavaScript SDK documentation +├── data-sources-api-research.md +├── firmware-wiki.md +├── https_-swiftpackageindex.com-apple-swift-log-main-documentation-logging.md +├── https_-swiftpackageindex.com-apple-swift-openapi-generator-1.10.3-documentation-swift-openapi-generator.md +├── https_-swiftpackageindex.com-brightdigit-SyndiKit-0.6.1-documentation-syndikit.md +├── mobileasset-wiki.md +├── protocol-extraction-continuation.md +├── QUICK_REFERENCE.md +├── README.md +├── schema-design-workflow.md +├── sosumi-cloudkit-schema-source.md +├── SUMMARY.md +├── testing-enablinganddisabling.md +└── webservices.md # Primary CloudKit Web Services REST API documentation +``` + +Note: Files with "-full" suffix contain complete documentation exported from llm.codes, while shorter versions are condensed for quicker reference. The swift-openapi-generator docs were essential for understanding type overrides and middleware configuration. + + +### Why OpenAPI + [swift-openapi-generator](https://github.com/apple/swift-openapi-generator)? + +With [`swift-openapi-generator`](https://github.com/apple/swift-openapi-generator) available (announced WWDC 2023), the path forward became clear: + +1. **Create OpenAPI specification from CloudKit documentation** + - Translate Apple's prose docs → Machine-readable YAML + - Every endpoint, parameter, response type formally defined + +2. **Let swift-openapi-generator generate the client** + - Run `swift build` → 10,476 lines of type-safe networking code appear + - Request/response types (Codable structs) + - API client methods (async/await) + - Type-safe enums, JSON handling, URL building + - Configuration: `openapi-generator-config.yaml` + Swift Package Manager build plugin + +3. **Build clean abstraction layer on top** + - Wrap generated code in friendly, idiomatic Swift API + - Add TokenManager for authentication + - CustomFieldValue for CloudKit's polymorphic types + +By following [spec-driven development](https://brightdigit.com/tutorials/swift-openapi-generator/), we had many benefits: + +- Type safety (if it compiles, it's valid CloudKit usage) +- Completeness (every endpoint defined) +- Maintainability (spec changes = regenerate code) +- No manual JSON parsing or networking boilerplate +- Cross-platform (macOS, iOS, Linux, server-side Swift) + + +### Challenge #1: Type System Polymorphism +[CloudKit fields](https://developer.apple.com/library/archive/documentation/DataManagement/Conceptual/CloudKitWebServicesReference/Types.html#//apple_ref/doc/uid/TP40015240-CH3-SW2) are dynamically typed—one field can be STRING, INT64, DOUBLE, TIMESTAMP, BYTES, REFERENCE, ASSET, LOCATION, or LIST. But [OpenAPI is statically typed](https://spec.openapis.org/oas/latest.html). How do we model this polymorphism? + +```no-highlight +Me: "Here's CloudKit's field value structure from Apple's docs. + A field can have value of type STRING, INT64, DOUBLE, TIMESTAMP, + BYTES, REFERENCE, ASSET, LOCATION, LIST..." + +Claude: "This is a discriminated union. Try modeling with oneOf in OpenAPI: + The value property can be oneOf the different types, + and the type field acts as a discriminator." + +Me: "Good start, but there's a CloudKit quirk: ASSETID is different + from ASSET. ASSET has full metadata, ASSETID is just a reference." + +Claude: "Interesting! You'll need a type override in the generator config: + typeOverrides: + schemas: + FieldValue: CustomFieldValue + Then implement CustomFieldValue to handle ASSETID specially." + +Me: "Perfect. Can you generate test cases for all field types?" + +Claude: "Here are test cases for STRING, INT64, DOUBLE, TIMESTAMP, + BYTES, REFERENCE, ASSET, ASSETID, LOCATION, and LIST..." +``` + +Having developed MistKit previously, I understood the challenge of various field types and the difficulty in expressing that in Swift. This is a common challenge in Swift with JSON data. + +Claude's suggestion of [`typeOverrides`](https://swiftpackageindex.com/apple/swift-openapi-generator/1.10.3/documentation/swift-openapi-generator/configuring-the-generator#Type-overrides) was the breakthrough—instead of fighting OpenAPI's type system, we'd let the generator create basic types, then override with our custom implementation that handles CloudKit's quirks. + +#### Understanding ASSET vs ASSETID + +CloudKit uses two different type discriminators for [asset fields](https://developer.apple.com/library/archive/documentation/DataManagement/Conceptual/CloudKitWebServicesReference/Types.html#//apple_ref/doc/uid/TP40015240-CH3-SW2): + +**[ASSET](https://developer.apple.com/library/archive/documentation/DataManagement/Conceptual/CloudKitWebServicesReference/Types.html#//apple_ref/doc/uid/TP40015240-CH3-SW2)** - Full asset metadata returned by CloudKit +- Appears in: Query responses, lookup responses, modification responses +- Contains: `fileChecksum`, `size`, `downloadURL`, `wrappingKey`, `receipt` +- Use case: When you need to download or verify the asset file + +**[ASSETID](https://developer.apple.com/library/archive/documentation/DataManagement/Conceptual/CloudKitWebServicesReference/Types.html#//apple_ref/doc/uid/TP40015240-CH3-SW2)** - Asset reference placeholder +- Appears in: Record creation/update requests +- Contains: Same structure as ASSET, but typically only `downloadURL` populated +- Use case: When you're referencing an already-uploaded asset + +At the end of the day, both decode to the same `AssetValue` structure, but CloudKit distinguishes them with different type strings (`"ASSET"` vs `"ASSETID"`). Our custom implementation handles this elegantly: + +```swift +internal struct CustomFieldValue: Codable, Hashable, Sendable { + internal enum FieldTypePayload: String, Codable, Sendable { + case asset = "ASSET" + case assetid = "ASSETID" // Both decode to AssetValue + case string = "STRING" + case int64 = "INT64" + // ... more types + } + + internal let value: CustomFieldValuePayload + internal let type: FieldTypePayload? +} +``` + +Using the `CustomFieldValue` with the power of openapi-generator `typeOverides` allows us to implement the specific quirks of CloudKit field values. + + +### Challenge #2: Authentication Complexity + +The next challenge was dealing with the 3 different methods of authentication: + +1. **API Token** - Container-level access + - Query parameter: `ckAPIToken` + - Simplest method + - A starting point for **Web Auth Token** + +2. **[Web Auth Token](https://developer.apple.com/library/archive/documentation/DataManagement/Conceptual/CloudKitWebServicesReference/SettingUpWebServices.html#//apple_ref/doc/uid/TP40015240-CH24-SW2)** - User-specific access + - Two query parameters: `ckAPIToken` + `ckWebAuthToken` + - For private database access + +3. **[Server-to-Server](https://developer.apple.com/library/archive/documentation/DataManagement/Conceptual/CloudKitWebServicesReference/SettingUpWebServices.html#//apple_ref/doc/uid/TP40015240-CH24-SW6)** - Public Database Access + - ECDSA P-256 signature in Authorization header + - Most complex, most secure + + +This became a complexity problem when trying to model it in OpenAPI. What Claude suggested was to use the [ClientMiddleware API](https://swiftpackageindex.com/apple/swift-openapi-runtime/1.8.3/documentation/openapiruntime/clientmiddleware) to handle authentication dynamically rather than relying on generator's built-in auth. The meant we used: + +1. **OpenAPI**: Define all three `securitySchemes` but make endpoint security optional (`security: []`) +2. **Middleware**: Implement `AuthenticationMiddleware` that inspects `TokenManager` at runtime +3. **TokenManager Protocol**: Three implementations (API, WebAuth, ServerToServer) +4. **Runtime Selection**: Client chooses auth method via TokenManager injection + +Here's what it looks like: + +```swift +internal struct AuthenticationMiddleware: ClientMiddleware { + internal let tokenManager: any TokenManager + + func intercept(...) async throws -> (HTTPResponse, HTTPBody?) { + guard let credentials = try await tokenManager.getCurrentCredentials() else { + throw TokenManagerError.invalidCredentials(.noCredentialsAvailable) + } + + var modifiedRequest = request + + switch credentials.method { + case .apiToken(let token): + // Add ckAPIToken to query parameters + case .webAuthToken(let apiToken, let webToken): + // Add both tokens to query parameters + case .serverToServer(let keyID, let privateKey): + // Sign request with ECDSA + // Add Authorization header with signature + } + + return try await next(modifiedRequest, body, baseURL) + } +} +``` + +This helps because: + +- ✅ Generator doesn't need to handle auth complexity +- ✅ We control authentication at runtime +- ✅ Easy to test (inject mock TokenManager) +- ✅ Supports all three methods seamlessly +- ✅ Can switch auth methods without code changes + +While this looks like it will work I wanted to make absolute sure. When using an LLM **it's important to have code which actually proves that it works and not just unit test.** So I created a simple command line tool which would to both write and read from a public and private database: + +```no-highlight +Me: "Can you run MistDemo to test the actual functionality?" + +Claude: *[Runs demo successfully]* +"Perfect! The MistDemo ran successfully: + - Web Authentication - Used API token + web auth token + - CloudKit API Calls - Made multiple successful requests + - HTTP Integration - AuthenticationMiddleware properly added all required parameters + - Data Retrieval - Successfully retrieved TodoItem records from CloudKit + + The authentication layer is working as designed. All three authentication methods have a solid foundation!" +``` + +We'll touch more on this approach in [the next blog post.](/tutorials/rebuilding-mistkit-claude-code-part-2/) + + +### Challenge #3: Error Handling + +[CloudKit returns over 9 different HTTP status codes](https://developer.apple.com/library/archive/documentation/DataManagement/Conceptual/CloudKitWebServicesReference/ErrorCodes.html), each with nested error details including `serverErrorCode`, `reason`, `uuid`, and sometimes `redirectURL` or `retryAfter`. What would be nice is if we can parse these in a Swift-y way, taking advantage of Swift 6 features like typed throws for more precise error handling. + +According to Apple's Documentation: + +> **Record Fetch Error Dictionary** +> +> The error dictionary describing a failed operation with the following keys: + + - `recordName`: The name of the record that the operation failed on. + - `reason`: A string indicating the reason for the error. + - `serverErrorCode`: A string containing the code for the error that occurred. For possible values, see Error Codes. + - `retryAfter`: The suggested time to wait before trying this operation again. + - `uuid`: A unique identifier for this error. + - `redirectURL`: A redirect URL for the user to securely sign in. + +Based on this, I had Claude create an openapi entry on this: + +```yaml +components: + schemas: + ErrorResponse: + type: object + description: Error response object + properties: + uuid: + type: string + description: Unique error identifier for support + serverErrorCode: + type: string + enum: + - ACCESS_DENIED + - ATOMIC_ERROR + - AUTHENTICATION_FAILED + - AUTHENTICATION_REQUIRED + - BAD_REQUEST + - CONFLICT + - EXISTS + - INTERNAL_ERROR + - NOT_FOUND + - QUOTA_EXCEEDED + - THROTTLED + - TRY_AGAIN_LATER + - VALIDATING_REFERENCE_ERROR + - ZONE_NOT_FOUND + reason: + type: string + redirectURL: + type: string + + responses: + BadRequest: + description: Bad request (400) - BAD_REQUEST, ATOMIC_ERROR + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + + Unauthorized: + description: Unauthorized (401) - AUTHENTICATION_FAILED + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + + # ... additional error responses for 403, 404, 409, 412, 413, 421, 429, 500, 503 +``` + +Claude was able to translate the documentation into: + +1. **Error Code Enum**: Converted prose list of error codes to explicit enum +2. **HTTP Status Mapping**: Created reusable response components for each HTTP status +3. **Consistent Schema**: All errors use same `ErrorResponse` schema +4. **Status Documentation**: Linked HTTP statuses to CloudKit error codes in descriptions + +This enables: +- **Type-Safe Error Handling**: Generated code includes all possible error codes +- **Automatic Deserialization**: Errors automatically parsed to correct type +- **Centralized Definitions**: Define once, reference everywhere + +Here's how it's mapped: + +| HTTP Status | CloudKit Error Codes | Client Action | +|-------------|---------------------|---------------| +| **400 Bad Request** | `BAD_REQUEST`, `ATOMIC_ERROR` | Fix request parameters or retry non-atomically | +| **401 Unauthorized** | `AUTHENTICATION_FAILED` | Re-authenticate or check credentials | +| **403 Forbidden** | `ACCESS_DENIED` | User lacks permissions | +| **404 Not Found** | `NOT_FOUND`, `ZONE_NOT_FOUND` | Verify resource exists | +| **409 Conflict** | `CONFLICT`, `EXISTS` | Fetch latest version and retry, or use force operations | +| **412 Precondition Failed** | `VALIDATING_REFERENCE_ERROR` | Referenced record doesn't exist | +| **413 Request Too Large** | `QUOTA_EXCEEDED` | Reduce request size or upgrade quota | +| **429 Too Many Requests** | `THROTTLED` | Implement exponential backoff | +| **500 Internal Error** | `INTERNAL_ERROR` | Retry with backoff | +| **503 Service Unavailable** | `TRY_AGAIN_LATER` | Temporary issue, retry later | + +This structured [error handling](https://brightdigit.com/articles/swift-error-handling/) enables the generated client to provide specific, actionable error messages rather than generic HTTP failures. Developers get type-safe error codes, HTTP status mapping, and clear guidance on how to handle each error condition. + + +### Challenge #4: API Ergonomics + +The generated OpenAPI client works, but it's not exactly ergonomic. Here's what a simple query looks like with the raw generated code: + +```swift +// Verbose generated API +let input = Operations.queryRecords.Input( + path: .init( + version: "1", + container: "iCloud.com.example.MyApp", + environment: Components.Parameters.environment.production, + database: Components.Parameters.database._private + ), + headers: .init(accept: [.json]), + body: .json(.init( + query: .init(recordType: "User") + )) +) + +let response = try await client.queryRecords(input) + +switch response { +case .ok(let okResponse): + let queryResponse = try okResponse.body.json + // Process records... +default: + // Handle errors... +} +``` + +The problem is there's too much boilerplate for simple operations when we can clean this up with a nicer abstraction. The solution was to build a three-layer architecture that keeps the generated code internal and exposes a clean public API: + +Three-layer architecture showing User Code (public API), MistKit Abstraction (internal), and Generated OpenAPI Client (internal) + +So now it can look something like this: + +```swift +// Clean, idiomatic Swift +let service = try CloudKitService( + container: "iCloud.com.example.MyApp", + environment: .production, + database: .private, + tokenManager: tokenManager +) + +let records = try await service.queryRecords( + recordType: "User", + filter: .equals("status", .string("active")) +) + +// Type-safe field access +for record in records { + if let name = record.fields["name"]?.stringValue { + print("User: \(name)") + } +} +``` + +In this case, we create a few abstraction to help: + +- `FieldValue` enum for type-safe field access +- `RecordInfo` struct for read operations +- `QueryFilter` for building queries +- `CloudKitService` wrapper hiding OpenAPI complexity + +This means the generated code stays internal while users interact with the more friendly API. + + +### The Iterative Workflow with Claude + +This process of building and refining was iterative when working with Claude Code: + +1. **I draft the structure** + - Provide CloudKit domain knowledge and desired API + +2. **Claude expands** + - Fills in request/response schemas + - Generates boilerplate for similar endpoints + - Creates consistent patterns + +3. **I review for CloudKit accuracy** + - Check against Apple docs + - Add edge cases and CloudKit quirks + - Refine error responses + - Define integration and unit tests for verification + +4. **Claude validates consistency** + - Catches schema mismatches + - Suggests improvements + +5. **Iterate until complete** + +Let's take for instance, this conversation I had with Claude: + +```no-highlight +Me: "Here's the query endpoint from Apple's docs" + +Claude: *[Creates complete OpenAPI definition]* +"Here's a complete OpenAPI definition with request/response schemas" + +Me: "Add `resultsLimit` validation and `continuationMarker` for pagination" + +Claude: *[Updates definition with pagination support]* +"Updated, and I noticed the `zoneID` should be optional" +``` + +> youtube https://youtu.be/gH3QnVHsUAc + +By providing my own experience with great Swift APIs and Claude's ability at applying patterns, I quickly build a library that's friendly to use. + +#### Building MistKit from Scratch with Claude Code + +With Claude Code, I could easily create an openapi document based on the Apple's documentation. With my guidance and understanding with the REST API and good Swift design, I could guide Claude through issues like: + +* Field Value with the oneOf pattern and handling the ASSETID quirk) +* completed authentication modeling with three security schemes + +This will make it much easier to continue future features with MistKit and enabling me to create some server-side application for my apps. + + +## What's Next + +After three months of collaboration with Claude (**representing significant acceleration over manual development**), I had: +- ✅ 10,476 lines of generated, type-safe Swift code +- ✅ Three authentication methods working seamlessly +- ✅ CustomFieldValue handling CloudKit's polymorphic types +- ✅ Clean public API hiding OpenAPI complexity +- ✅ 161 tests across 47 test files + +The OpenAPI spec was complete. The generated client compiled. The abstraction layer was elegant. Unit tests passed. + +**How Claude Code Accelerated Development:** +- **Documentation Translation**: Converting Apple's prose documentation to a precise OpenAPI spec would have taken weeks manually. Claude handled the bulk of this in days, with me providing CloudKit domain expertise and corrections. +- **Boilerplate Generation**: The 10,476 lines of generated Swift code from swift-openapi-generator saved months of hand-writing networking code, request/response types, and JSON handling. +- **Pattern Application**: Once I established patterns (like `CustomFieldValue` for polymorphic types), Claude consistently applied them across the codebase. +- **Iteration Speed**: When authentication approaches needed refactoring, Claude could update dozens of files in minutes vs. hours of manual editing. + +What would have likely taken 6-12 months of solo development was compressed into 3 months of _side-project_ collaboration, with Claude handling repetitive tasks while I focused on architecture, CloudKit-specific quirks, and real-world testing. + +However I really needed to put it the test in my actual uses. In the next post, I'll talk about find flaws in MistKit by actually consuming my library with help from Claude Code. I'll be building a couple of command line tools for easily uploading data for [Bushel](https://getbushel.app) and a future RSS Reader to the public database. By doing this I'll understand [Claude's limitation, benefits and how to workaround those.](/tutorials/rebuilding-mistkit-claude-code-part-2/) diff --git a/docs/cloudkit-guide/articles/rebuilding-mistkit-claude-code-part-2.md b/docs/cloudkit-guide/articles/rebuilding-mistkit-claude-code-part-2.md new file mode 100644 index 00000000..129c56ef --- /dev/null +++ b/docs/cloudkit-guide/articles/rebuilding-mistkit-claude-code-part-2.md @@ -0,0 +1,195 @@ +--- +title: Rebuilding MistKit with Claude Code - Real-World Lessons and Collaboration Patterns (Part 2) +date: 2025-12-10 00:00 +description: After building MistKit's type-safe CloudKit client, we put it to the test with real applications. Discover what happened when theory met practice—the unexpected discoveries, hard-earned lessons, and collaboration patterns that emerged from 428 Claude Code sessions over three months. +featuredImage: /media/tutorials/rebuilding-mistkit-claude-code/mistkit-rebuild-part1-hero.webp +subscriptionCTA: Want to learn more about AI-assisted Swift development and modern API design patterns? Sign up for our newsletter to get notified about the rest of the Modern Swift Patterns series and future tutorials on building production-ready Swift applications. +--- + +In [Part 1](https://brightdigit.com/tutorials/rebuilding-mistkit-claude-code-part-1/), I showed how [Claude Code](https://claude.ai/claude-code) and [swift-openapi-generator](https://github.com/apple/swift-openapi-generator) transformed [CloudKit's REST documentation](https://developer.apple.com/documentation/cloudkitjs/cloudkit/cloudkit_web_services) into a type-safe Swift client. We had 161 unit tests which passed, but would it actually work in the real world? + +📚 **[View Documentation](https://swiftpackageindex.com/brightdigit/MistKit/documentation)** | 🐙 **[GitHub Repository](https://github.com/brightdigit/MistKit)** + +- [Real-World Proof](#real-world-proof) + - [The Celestra and Bushel Examples](#the-celestra-and-bushel-examples) + - [Integration Testing Through Real Applications](#integration-testing-through-real-applications) +- [Lessons Learned](#lessons-learned) + - [Unit Test Generation](#unit-test-generation) + - [Human Guided Architecture](#human-guided-architecture) + - [Grabby AI](#grabby-ai) + - [Context Management](#context-management) + - [Human + AI Code Reviews](#human--ai-code-reviews) +- [Multiplier, not a Replacement](#multiplier-not-a-replacement) + + +## Real-World Proof + +Would MistKit's abstractions actually work when building an application? I had 2 real-world applications for MistKit to try it out: + +- an RSS aggregator syncing thousands of articles to CloudKit using [SyndiKit](https://github.com/brightdigit/SyndiKit) for an app codenamed **[Celestra](https://celestr.app)** +- For **[Bushel](https://getbushel.app)**, I wanted to track restore images and various metadata for macOS and developer software versions. + + + +### The Celestra and Bushel Examples + +Tests validate correctness, but real applications validate design. MistKit needed to prove it could power actual software and not just pass unit tests. Enter two real-world applications—**[the Celestra app](https://celestr.app)** (an RSS reader) and **[the Bushel app](https://getbushel.app)** (a macOS virtualization tool)—each powered by MistKit-driven CLI backends that populate CloudKit public databases. These CLI tools, running on scheduled cloud infrastructure, proved MistKit works in production. + +The architecture for both follows the same pattern: +- **Consumer apps** ([the Celestra app](https://celestr.app), [the Bushel app](https://getbushel.app)) - iOS/macOS apps that read from CloudKit +- **CLI tools** - Built with MistKit, run on cloud infrastructure (cron jobs, cloud functions, scheduled tasks) +- **CloudKit public database** - Central data layer connecting CLI tools to apps + +This pattern enables: +- **Automated updates**: CLI tools run on schedules without user devices being online +- **Separation of concerns**: Data population (CLI) vs data consumption (app) +- **Scalability**: Cloud infrastructure handles data aggregation, apps stay lightweight + +#### Celestra: Automated RSS Feed Sync for a Reader App + +The [Celestra app](https://celestr.app) is an RSS reader in development for iOS and macOS. To keep content fresh without requiring the app to be open, I built a [CLI tool with MistKit](https://github.com/brightdigit/MistKit/tree/main/Examples/Celestra) that runs on scheduled cloud infrastructure. The CLI tool runs periodically (cron job, cloud function, scheduled task) to fetch RSS feeds and sync them to CloudKit's public database, making fresh content available to all users instantly—even when their devices are offline. + +This architecture enables push notifications on updated articles without the app running, and MistKit's batch operations can efficiently handle hundreds of content updates. The [CLI tool example](https://github.com/brightdigit/MistKit/tree/main/Examples/Celestra) demonstrates key MistKit patterns: + +**Query filtering** - Find feeds that need updating: +```swift +// Query filtering - find stale feeds +QueryFilter.lessThan("lastAttempted", .date(cutoff)) +QueryFilter.greaterThanOrEquals("usageCount", .int64(minPop)) +``` + +**Batch operations** - Efficiently sync hundreds of articles: +```swift +// Batch operations +let operations = articles.map { article in + RecordOperation.create( + recordType: "Article", + recordName: article.guid, + fields: article.toCloudKitFields() + ) +} +service.modifyRecords(operations, atomic: false) +``` + +#### Bushel: Powering a macOS VM App with CloudKit + +The [Bushel app](https://getbushel.app) is a macOS virtualization tool for developers. It currently allows pluggable _hubs_ to get a list of restore images, their download URLs, and their status. However, since the data is universal, I wanted a comprehensive, queryable central database of macOS restore images and various metadata about operating system versions and developer tools. Therefore I wanted a [CLI tool with MistKit](https://github.com/brightdigit/MistKit/tree/main/Examples/Bushel) that runs on scheduled cloud infrastructure (cron jobs, cloud functions, scheduled tasks) to populate a CloudKit public database with various metadata about macOS versions and their restore images. + +This architecture provides: +- **Public Database**: Worldwide access to version history without embedding static JSON in the app +- **Automated Updates**: CLI tool syncs latest info on restore images, Xcode, and Swift versions +- **Queryable**: [Bushel app](https://getbushel.app) can easily query for restore images such as _macOS 15.2_ +- **Scalable**: CLI tool aggregates data from various sources automatically +- **Deduplication**: buildNumber-based deduplication ensures clean data + +The [CLI tool example](https://github.com/brightdigit/MistKit/tree/main/Examples/Bushel) demonstrates advanced MistKit patterns: + +```swift +// Protocol-based record conversion +protocol CloudKitRecord { + static var cloudKitRecordType: String { get } + func toCloudKitFields() -> [String: FieldValue] +} + +// Relationship handling +fields["minimumMacOS"] = .reference( + Reference(recordName: restoreImageRecordName) +) +``` + +--- + +> transistor https://share.transistor.fm/s/ffcb9fc1 + +Both CLI tool examples serve as copy-paste starting points for new MistKit projects. + + +Watching MistKit power real applications was satisfying—I could see the generated code actually work in production. The CLI tools successfully synced RSS articles (Celestra) and tracked complex version relationships (Bushel). But more importantly, these real-world applications revealed critical issues that no unit test could catch. + + +### Integration Testing Through Real Applications + +Building real applications exposed issues no unit test could catch. Here's what Celestra and Bushel revealed: + +- **Batch Operation Limits**: CloudKit enforces 200-operation-per-request limit (not documented clearly) therefore we added chunking logic. +- **Boolean Field Handling**: CloudKit has no native boolean type but we wanted the developer to safely use Swift Boolean types so we created a safe and easy way to use the standardized INT64 representation. + +I was able to verify that the API design and critical pieces like Server-to-Server authentication were working as intended. These real-world tests validated MistKit's foundation. + + + +## Lessons Learned + +There were few things which surprised me as far as what Claude Code was good and not good at and where [collaboration worked best](https://brightdigit.com/tutorials/syntaxkit-swift-code-generation/). Claude excelled at tasks I thought would be hard (comprehensive test generation). It struggled with things I assumed would be easy (knowing which APIs exist). Through iteration, a collaboration pattern emerged. Here's what I learned. + +### Unit Test Generation + +Test generation proved to be Claude Code's greatest strength, and it's ideal for LLMs because it leverages pattern recognition from vast training data. Claude has seen thousands of Swift test files and can apply those structural patterns to new domains. The task requires extrapolation from examples, not novel reasoning—Claude recognizes "if testing STRING type, also test empty string, Unicode, and nil" because that pattern appears frequently in its training corpus. A typical interaction looked like this: + +```no-highlight +Me: "Generate tests for all CustomFieldValue types" + +Claude: *[Creates tests covering all 10 field types with edge cases]* +"I've generated comprehensive tests covering: + - All 10 field types (STRING, INT64, DOUBLE, TIMESTAMP, BYTES, REFERENCE, ASSET, ASSETID, LOCATION, LIST) + - Edge cases: empty lists, nil values, malformed data + - Encoding/decoding round-trips + - Nested LIST types + - Invalid type/value combinations + + I also added tests for the ASSET vs ASSETID quirk" +``` + +It was able to produce 161 tests across 47 files including edge cases I hadn't considered. The only quirk I found was that it favored [XCTest](https://developer.apple.com/documentation/xctest) over [Swift Testing](https://developer.apple.com/documentation/testing) at first. This makes sense since there's probably more training material in XCTest. I've primarily switched to Swift Testing for my new work. If you are in the same place then be sure to make a note of that in your `CLAUDE.md` when you start your project. + +### Human Guided Architecture + +While Claude excelled at pattern-based tasks, architectural decisions consistently required human judgment. At various points, Claude would steer the architecture in strange directions that didn't seem correct. The issue is that its training is best for smaller contexts and code examples, which isn't enough for holistic system design. Be confident in steering Claude in the right direction—this is where developer expertise matters most. The risk is drift if the pattern isn't perfectly specified, but for well-defined transformations, LLMs excel. Luckily, Claude does a fairly good job at refactoring when corrected, and its context window (200K tokens in Sonnet 4.5) allows it to see multiple files simultaneously and apply consistent transformations across the codebase. + +### Grabby AI + +These limitations manifested in predictable patterns throughout the project. As we were implementing the CLI tools for Bushel and Celestra, Claude would often try to implement features using the direct [OpenAPI](https://www.openapis.org/) code as opposed to the abstracted API we had built: + +```swift +// WRONG: Internal type reference +let operation = Components.Schemas.RecordOperation( + recordType: "RestoreImage", + fields: fields +) +``` + +Even going so far as to make those methods and properties `public`. Often referred to as power-grabbing, it would go outside its designated boundary, even though I would tell it often not to use those APIs. It's important to set those constraints clearly within the context window and review the code intentionally. All mistakes share common traits—Claude follows patterns from training data or generated code literally without questioning ergonomics or existence. The fix is always the same: explicit guidance in prompts and immediate verification of suggestions. + +### Context Management + +Managing these challenges required strategic context management. One of the biggest challenges working with Claude Code is managing its knowledge cutoffs and lack of familiarity with newer or niche APIs. In the world of Swift, Claude's training often predates [Swift Testing](https://developer.apple.com/documentation/testing) or [swift-openapi-generator](https://github.com/apple/swift-openapi-generator) specifics. This is where providing documentation upfront in `.claude/docs/` helps. With tools like [Sosumi.ai](https://sosumi.ai) for Apple API exploration and [llm.codes](https://llm.codes) I can provide documentation like: +- `testing-enablinganddisabling.md` (126KB) - Swift Testing patterns +- `webservices.md` (289KB) - CloudKit Web Services REST API reference +- `cloudkitjs.md` (188KB) - CloudKit operation patterns and data types +- `swift-openapi-generator.md` (235KB) - Code generation configuration + +> youtube https://youtu.be/gH3QnVHsUAc + +At the root of this is the `CLAUDE.md` file which acts as a table of contents, telling Claude where to look for specific information. Claude doesn't need to memorize everything—it needs to know where to look. + +### Human + AI Code Reviews + +Whatever your AI writes should be understood by you fairly well. Don't skip this step. This is especially important in the context of [humane code](https://brightdigit.com/articles/humane-code/)—code that is empathetic to future developers who need to understand and maintain it. AI-generated code still needs to communicate clearly with the humans who will work with it later. + +> transistor https://share.transistor.fm/s/99f236b1 + +These patterns and practices reflect a deeper truth about AI-assisted development: Claude Code is a force multiplier, not a replacement for developer judgment. I provided architectural vision; Claude generated comprehensive implementations. I identified edge cases from domain knowledge; Claude translated them into exhaustive test suites. I steered strategic decisions; Claude handled mechanical transformations at scale. Together, we built something neither could have built alone—a production-ready CloudKit client that balances type safety with developer ergonomics. + + +## Multiplier, not a Replacement + +These lessons crystallized into a philosophy: **AI is a force multiplier, not a replacement**. Claude generated thousands of lines of code, but I architected what those lines should accomplish. It drafted comprehensive tests, but I knew which edge cases mattered. It refactored at scale, but I chose the patterns worth preserving. Where I lacked expertise translating CloudKit's REST API into an OpenAPI spec, Claude filled those gaps. + +The proof came from real-world application. Building **Celestra** and **Bushel** validated MistKit's design beyond what unit tests could achieve. The CLI tools exposed batch operation limits, revealed boolean field handling quirks, and confirmed that Server-to-Server authentication worked in production. These discoveries transformed MistKit from a technically correct library into a production-ready tool. + +Both CLI examples are now open source as starting points for new projects: +- [Bushel CLI Example](https://github.com/brightdigit/MistKit/tree/main/Examples/Bushel) - Demonstrates complex CloudKit relationships and batch operations powering the [Bushel app](https://getbushel.app) +- [Celestra CLI Example](https://github.com/brightdigit/MistKit/tree/main/Examples/Celestra) - Demonstrates public database patterns and automated sync for the [Celestra app](https://celestr.app) + +Through 428 sessions across three months, Claude Code and I built MistKit v1.0 Alpha—a type-safe CloudKit client that proves AI-assisted development can deliver production-quality Swift libraries when human judgment guides the process. + diff --git a/docs/internals/authentication-middleware.md b/docs/internals/authentication-middleware.md new file mode 100644 index 00000000..75c78e3e --- /dev/null +++ b/docs/internals/authentication-middleware.md @@ -0,0 +1,361 @@ +# Authentication Middleware + +MistKit's authentication system uses an HTTP middleware pattern to transparently sign every request with the correct credentials, supporting three authentication methods and runtime upgrades between them. + +## Database / Authentication Support + +CloudKit constrains which authentication mode is valid for each database scope. MistKit surfaces those constraints through `Database` and `PublicAuthPreference`: + +| Authentication mode | **Private** | **Shared** | **Public** | +|----------------------------------------------------|----------------------|----------------------|---------------------------------------------------------------------------| +| **API Token only** (`ckAPIToken`) | Not supported | Not supported | Whatever the public schema grants the `_world` role (typically reads of `/records/query`, `/records/lookup`) | +| **Web Auth** (`ckAPIToken` + `ckWebAuthToken`) | All endpoints | All endpoints | All endpoints — **only** mode accepted for `/users/*` | +| **Server-to-Server** (ECDSA P-256) | Rejected by CloudKit | Rejected by CloudKit | All endpoints **except** `/users/*` (CloudKit rejects S2S there) | + +Public-database calls pick attribution per-call via `PublicAuthPreference` on `Database.public(_:)` — see [Per-Call Attribution](#per-call-attribution-publicauthpreference). Private and shared scopes always require web-auth; CloudKit rejects server-to-server signatures on those endpoints. User-context routes (`/users/*`) always pass `.public(.requires(.webAuth))` because CloudKit only honors web-auth there. + +## TokenManager Protocol + +A `TokenManager` is the lifecycle owner of credentials (loading, validating, rotating, persisting). It vends an `Authenticator` to whomever needs to apply those credentials to an outgoing request: + +```swift +public protocol TokenManager: Sendable { + var hasCredentials: Bool { get async } + func validateCredentials() async throws(TokenManagerError) -> Bool + func currentAuthenticator() async throws(TokenManagerError) -> (any Authenticator)? +} +``` + +Concrete managers include `APITokenManager`, `WebAuthTokenManager`, `ServerToServerAuthManager`, and the runtime-upgradable `AdaptiveTokenManager`. + +## Authenticator Protocol + +Each concrete `Authenticator` (`APITokenAuthenticator`, `WebAuthTokenAuthenticator`, `ServerToServerAuthenticator`) owns both the credential payload and the rule for attaching it to a request: + +```swift +public protocol Authenticator: Sendable { + static var storageKey: String { get } + var defaultStorageIdentifier: String { get } + init(decoding data: Data) throws + func authenticate(request: inout HTTPRequest, body: inout HTTPBody?) async throws + func encoded() throws -> Data +} +``` + +Bundling the credential with the application logic keeps new authentication schemes from rippling into the middleware: any `Authenticator` can be plugged in without changes elsewhere. + +### Why `body: inout HTTPBody?` + +`HTTPBody` is a single-pass async sequence. `ServerToServerAuthenticator` has to read every byte to compute the SHA-256 over the body — and that consumes the iterator. The authenticator buffers those bytes, then reassigns `body = HTTPBody(bytes)` so downstream middleware sees a fresh, replayable copy of the same data. The protocol's `inout` parameter exists to allow that reassignment. The other authenticators don't actually mutate `body`, but the protocol signature has to accommodate the one that does. + +## The Middleware Intercept + +`AuthenticationMiddleware` conforms to the OpenAPI `ClientMiddleware` protocol and intercepts every outgoing request. The middleware itself is trivial — it asks the token manager for the current authenticator and lets the authenticator apply itself: + +```swift +internal func intercept( + _ request: HTTPRequest, + body: HTTPBody?, + baseURL: URL, + operationID: String, + next: (HTTPRequest, HTTPBody?, URL) async throws -> (HTTPResponse, HTTPBody?) +) async throws -> (HTTPResponse, HTTPBody?) { + guard let authenticator = try await tokenManager.currentAuthenticator() else { + throw TokenManagerError.invalidCredentials(.noCredentialsAvailable) + } + + var modifiedRequest = request + var modifiedBody = body + try await authenticator.authenticate(request: &modifiedRequest, body: &modifiedBody) + return try await next(modifiedRequest, modifiedBody, baseURL) +} +``` + +The per-scheme branching — query parameter for API token, two query parameters for web auth, signed headers for server-to-server — lives inside each concrete `Authenticator.authenticate(request:body:)` implementation. + +## API Token Authentication + +The simplest method — appends a query parameter. `APITokenAuthenticator.authenticate(request:body:)` does the work: + +1. **Append the query parameter** — `?ckAPIToken=<64-hex>` is added to the request URL. + +Example: + +``` +GET /database/1/iCloud.com.example/development/public/records/query?ckAPIToken=abc123... +``` + +- Token is a 64-character hex string identifying the container. +- Grants **public database** access only. +- Validated via regex: `^[a-f0-9]{64}$` + +## Web Auth Token Authentication + +Adds a second query parameter for user-specific operations. `WebAuthTokenAuthenticator.authenticate(request:body:)` does the work: + +1. **URL-encode the web auth token** via `CharacterMapEncoder` to escape characters CloudKit rejects in query strings. +2. **Append both query parameters** — `?ckAPIToken=<…>&ckWebAuthToken=` is added to the request URL. + +Example: + +``` +GET ...?ckAPIToken=abc123...&ckWebAuthToken=encoded-token +``` + +The encoder replaces URL-unsafe characters: + +```swift +// CharacterMapEncoder replaces URL-unsafe characters: +// + → %2B +// / → %2F +// = → %3D +let encoded = tokenEncoder.encode(webToken) +``` + +This grants access to **private and shared databases** for the authenticated user. + +## Server-to-Server (ECDSA P-256) Authentication + +Used for backend services without user interaction. `ServerToServerAuthenticator.authenticate(request:body:)` does the work: + +1. **Buffer the request body** (up to `bodyBufferLimit`, default 1 MiB), and reassign `body` to the buffered copy so downstream middleware sees the same bytes the signature covers. +2. **Build a `RequestSignature`** — this initializer does the signing. +3. **Append the resulting `HTTPFields`** to `request.headerFields`. + +```swift +public func authenticate( + request: inout HTTPRequest, + body: inout HTTPBody? +) async throws { + let bodyData: Data? + if let original = body { + let bytes = try await Data(collecting: original, upTo: bodyBufferLimit) + body = HTTPBody(bytes) + bodyData = bytes + } else { + bodyData = nil + } + + let signature = try RequestSignature( + keyID: keyID, + privateKey: privateKey, + requestBody: bodyData, + webServiceSubpath: request.path + ) + + request.headerFields.append(contentsOf: signature.headers) +} +``` + +### RequestSignature + +`RequestSignature` is the value type that holds a signed header bundle: + +```swift +public struct RequestSignature: Sendable { + public let keyID: String + public let iso8601DateString: String // exact string that was signed + public let signatureDerRepresentation: Data // DER bytes + public var signatureBase64: String { ... } // wire form, derived on demand + public var headers: HTTPFields { ... } // typed headers, ready to append +} +``` + +It's a transport-format value, not a domain value: + +- **`iso8601DateString` is stored as String, not Date.** The ISO 8601 string is part of the signed payload — re-formatting a `Date` on every header access would risk a wire string that differs from what was signed (formatter options, locale, fractional seconds). Storing the string locks the wire form to the signed form. +- **`signatureDerRepresentation` is stored as Data, not String.** The ECDSA signature is naturally bytes. The base64 form is computed on demand via `signatureBase64` so the type doesn't carry a redundant encoding, and the struct stays free of the `@available` constraints that come with `P256.Signing.ECDSASignature`. + +### Signing process + +The convenience initializer `init(keyID:privateKey:requestBody:webServiceSubpath:date:)` does: + +1. **Format the ISO 8601 date.** On macOS 12 / iOS 15 / tvOS 15 / watchOS 8 and later, `Date.ISO8601FormatStyle` (Sendable value type). On older OSes, a `nonisolated(unsafe)` cached `ISO8601DateFormatter` (documented thread-safe for `string(from:)`). +2. **Hash the body.** `SHA256.cloudKitBodyHash(of: body)` returns `base64(SHA256(body))`, or the empty string when the body is `nil` — matching CloudKit's no-body convention. +3. **Build the signing payload:** `"::"` +4. **Sign with P-256.** `privateKey.signature(for: Data(payload.utf8))` → DER bytes. +5. **Delegate to the storage init**, capturing `iso8601DateString`, `signatureDerRepresentation`, and `keyID`. + +A second initializer — `init(keyID:privateKey:bodyHash:webServiceSubpath:iso8601DateString:)` — takes the pre-formatted strings directly. It's the core signing path (no formatting, no hashing); the convenience init delegates to it. Useful for deterministic testing or when the caller already has those values. + +### Wire format + +The three headers appended to the request: + +```http +X-Apple-CloudKit-Request-KeyID: +X-Apple-CloudKit-Request-ISO8601Date: 2026-05-15T14:30:00Z +X-Apple-CloudKit-Request-SignatureV1: +``` + +`HTTPField.Name` constants for these live in `Sources/MistKit/Utilities/HTTPField.Name+CloudKit.swift`. + +## AdaptiveTokenManager & `upgradeToWebAuthentication` + +`AdaptiveTokenManager` is an **actor** that enables runtime transitions between auth methods. It vends an `APITokenAuthenticator` while API-only and switches to a `WebAuthTokenAuthenticator` once upgraded: + +```swift +public actor AdaptiveTokenManager: TokenManager { + internal let apiToken: String + internal var webAuthToken: String? + internal let storage: (any TokenStorage)? + + public func currentAuthenticator() async throws(TokenManagerError) -> (any Authenticator)? { + if let webToken = webAuthToken { + return try WebAuthTokenAuthenticator(apiToken: apiToken, webAuthToken: webToken) + } + return try APITokenAuthenticator(token: apiToken) + } + + @discardableResult + public func upgradeToWebAuthentication( + webAuthToken: String + ) async throws(TokenManagerError) -> WebAuthTokenAuthenticator { + let authenticator = try WebAuthTokenAuthenticator( + apiToken: apiToken, + webAuthToken: webAuthToken + ) + self.webAuthToken = webAuthToken + + if let storage = storage { + // Don't fail the upgrade if storage fails — just log. + try? await storage.store(authenticator, identifier: apiToken) + } + + return authenticator + } +} +``` + +`WebAuthTokenAuthenticator`'s initializer is what validates the token (empty / too-short tokens throw `TokenManagerError.invalidCredentials`), so the manager doesn't duplicate that logic. The `upgradeToWebAuthentication(_:)` method lives on `AdaptiveTokenManager+Transitions`. + +A typical client-app flow: + +1. App starts with **API token only** → can query public database. +2. User authenticates via CloudKit's web auth flow → receives web auth token. +3. App calls `upgradeToWebAuthentication(webAuthToken:)` → all subsequent requests include the user's token. +4. App can now access **private database** operations. + +The actor ensures thread-safe state mutation; the optional `TokenStorage` lets credentials survive across app launches. + +## Per-Call Attribution: `PublicAuthPreference` + +Public-database operations can be attributed either to a service account (server-to-server / ECDSA P-256) or to an end user (API token + web auth). The caller picks per-call via `Database.public(_:)`: + +```swift +public enum Database { + case `public`(PublicAuthPreference) + case `private` + case shared +} +``` + +- `.prefers(.serverToServer)` — try S2S, fall back to web-auth/API-token if S2S isn't configured. +- `.prefers(.webAuth)` — try web-auth, fall back to S2S. +- `.requires(.serverToServer)` — must use S2S, otherwise throw `missingCredentials(.preferenceRequired)`. +- `.requires(.webAuth)` — must use web-auth, otherwise throw. + +There is **no default** — every public-database call picks explicitly. User-context routes (`/users/*`) pass `.public(.requires(.webAuth))` directly because CloudKit only accepts web-auth on those endpoints. Private and shared databases ignore this — they always require web-auth, since CloudKit rejects S2S on those scopes. + +See `Sources/MistKit/Authentication/PublicAuthPreference.swift` and `Sources/MistKit/Authentication/Credentials/Credentials+TokenManager.swift` for the resolution logic. + +## Complete Authentication Flow + +The shared middleware pipeline is the same regardless of scheme — the per-scheme work happens inside `Authenticator.authenticate(request:body:)`, expanded in the diagrams that follow. + +```mermaid +sequenceDiagram + autonumber + participant App as App / Operation call + participant Client as OpenAPI Client + participant Mid as AuthenticationMiddleware + participant TM as TokenManager + participant Auth as Authenticator + participant Net as next middleware / URLSession + participant CK as CloudKit + + App->>Client: queryRecords(...) / createRecord(...) / ... + Client->>Mid: intercept(request, body, next) + Mid->>TM: currentAuthenticator() + + alt no credentials + TM-->>Mid: nil + Mid-->>Client: throws TokenManagerError.noCredentialsAvailable + else has credentials + TM-->>Mid: (any Authenticator) + Mid->>Auth: authenticate(&request, &body) + Note over Auth: scheme-specific work —
see per-scheme diagrams below + Auth-->>Mid: (request and body now carry credentials) + Mid->>Net: next(request, body, baseURL) + Net->>CK: HTTPS request + CK-->>Net: HTTP response + Net-->>Mid: (response, body) + Mid-->>Client: (response, body) + Client-->>App: decoded result + end +``` + +### API Token Flow + +The `APITokenAuthenticator` branch is a single mutation — it appends `?ckAPIToken=<64-hex>` to the request URL and returns. No body buffering, no async work. + +### Web Auth Flow + +`WebAuthTokenAuthenticator` URL-encodes the user-specific token via `CharacterMapEncoder` before appending it as a second query parameter alongside the API token: + +```mermaid +sequenceDiagram + autonumber + participant Mid as AuthenticationMiddleware + participant Auth as WebAuthTokenAuthenticator + participant Enc as CharacterMapEncoder + + Mid->>Auth: authenticate(&request, &body) + Auth->>Enc: encode(webAuthToken) + Note right of Enc: + → %2B
/ → %2F
= → %3D + Enc-->>Auth: URL-encoded token + Note over Auth: attach credentials to request + Auth->>Auth: append ?ckAPIToken=<…>&ckWebAuthToken= + Auth-->>Mid: request carries query params +``` + +### Server-to-Server (ECDSA P-256) Flow + +`ServerToServerAuthenticator` buffers the body so it can be hashed, builds a `RequestSignature`, and appends the three `X-Apple-CloudKit-*` headers: + +```mermaid +sequenceDiagram + autonumber + participant Mid as AuthenticationMiddleware + participant Auth as ServerToServerAuthenticator + participant Sig as RequestSignature + + Mid->>Auth: authenticate(&request, &body) + Auth->>Auth: buffer body and reassign as replayable HTTPBody + Auth->>Sig: RequestSignature(keyID, privateKey, requestBody, webServiceSubpath) + Sig-->>Auth: signed header bundle + Note over Auth: attach credentials to request + Auth->>Auth: request.headerFields.append(contentsOf: signature.headers) + Auth-->>Mid: request carries X-Apple-CloudKit-* headers +``` + +### Token Manager Selection + +```mermaid +flowchart LR + Cfg["Credentials / config"] --> Choose{which manager?} + Choose -- "API token only" --> APITM["APITokenManager"] + Choose -- "API + web auth token" --> WATM["WebAuthTokenManager"] + Choose -- "keyID + P-256 key" --> S2STM["ServerToServerAuthManager"] + Choose -- "API token now,
maybe upgrade later" --> Adapt["AdaptiveTokenManager (actor)"] + + APITM --> APIA["APITokenAuthenticator"] + WATM --> WAA["WebAuthTokenAuthenticator"] + S2STM --> S2SA["ServerToServerAuthenticator"] + Adapt -. "before upgrade" .-> APIA + Adapt -. "after upgradeToWebAuthentication(_:)" .-> WAA + + APIA --> Pub["Public DB"] + WAA --> PrivShared["Private / Shared DB"] + S2SA --> PubS2S["Public DB (service-attributed)"] +``` diff --git a/docs/internals/error-code-parsing.md b/docs/internals/error-code-parsing.md new file mode 100644 index 00000000..7468a37c --- /dev/null +++ b/docs/internals/error-code-parsing.md @@ -0,0 +1,263 @@ +# Error Code Parsing + +MistKit transforms CloudKit's HTTP error responses into strongly-typed Swift errors through a multi-stage pipeline that leverages the OpenAPI-generated types. + +## CloudKit Error Response Format + +CloudKit returns errors as JSON with a consistent structure: + +```json +{ + "uuid": "a1b2c3d4-...", + "serverErrorCode": "AUTHENTICATION_FAILED", + "reason": "The request requires authentication." +} +``` + +The `serverErrorCode` is one of 14 defined values: + +| Code | Meaning | +|------|---------| +| `ACCESS_DENIED` | User lacks permission | +| `ATOMIC_ERROR` | Atomic operation partially failed | +| `AUTHENTICATION_FAILED` | Invalid credentials | +| `AUTHENTICATION_REQUIRED` | No credentials provided | +| `BAD_REQUEST` | Malformed request | +| `CONFLICT` | Record version conflict | +| `EXISTS` | Record already exists | +| `INTERNAL_ERROR` | Server-side failure | +| `NOT_FOUND` | Record/zone not found | +| `QUOTA_EXCEEDED` | Storage/request quota hit | +| `THROTTLED` | Rate limited | +| `TRY_AGAIN_LATER` | Temporary server issue | +| `VALIDATING_REFERENCE_ERROR` | Reference integrity violation | +| `ZONE_NOT_FOUND` | Zone doesn't exist | + +## OpenAPI Schema Definition + +The `openapi.yaml` defines an `ErrorResponse` schema and maps it to HTTP status codes: + +```yaml +ErrorResponse: + properties: + uuid: { type: string } + serverErrorCode: + type: string + enum: [ACCESS_DENIED, ATOMIC_ERROR, AUTHENTICATION_FAILED, ...] + reason: { type: string } + redirectURL: { type: string } +``` + +Each HTTP status (400, 401, 403, 404, 409, 412, 413, 421, 429, 500, 503) gets its own response type referencing this schema. + +## Generated Types + +The Swift OpenAPI generator produces: + +```swift +// The error code enum +internal enum serverErrorCodePayload: String, Codable, CaseIterable { + case ACCESS_DENIED, ATOMIC_ERROR, AUTHENTICATION_FAILED, ... +} + +// The error response struct +internal struct ErrorResponse: Codable { + internal var uuid: String? + internal var serverErrorCode: serverErrorCodePayload? + internal var reason: String? + internal var redirectURL: String? +} + +// Per-status response wrappers +// Components.Responses.BadRequest, .Unauthorized, .Forbidden, etc. +``` + +Each operation's output is an enum with success and error cases: + +```swift +enum Operations.queryRecords.Output { + case ok(Operations.queryRecords.Output.Ok) + case badRequest(Components.Responses.BadRequest) + case unauthorized(Components.Responses.Unauthorized) + case forbidden(Components.Responses.Forbidden) + // ... all 11 error cases + case undocumented(statusCode: Int, ...) +} +``` + +## CloudKitResponseType Protocol + +A protocol provides unified error extraction across all operation outputs: + +```swift +protocol CloudKitResponseType { + var badRequestResponse: Components.Responses.BadRequest? { get } + var unauthorizedResponse: Components.Responses.Unauthorized? { get } + var forbiddenResponse: Components.Responses.Forbidden? { get } + var notFoundResponse: Components.Responses.NotFound? { get } + var conflictResponse: Components.Responses.Conflict? { get } + // ... all 11 error statuses + var isOk: Bool { get } + var undocumentedStatusCode: Int? { get } +} +``` + +Each operation output implements this via pattern matching: + +```swift +extension Operations.queryRecords.Output: CloudKitResponseType { + var badRequestResponse: Components.Responses.BadRequest? { + if case .badRequest(let response) = self { return response } + return nil + } + // ... one property per error case +} +``` + +## The Public Error Type: `CloudKitError` + +```swift +public enum CloudKitError: LocalizedError, Sendable { + case httpError(statusCode: Int) + case httpErrorWithDetails(statusCode: Int, serverErrorCode: String?, reason: String?) + case httpErrorWithRawResponse(statusCode: Int, rawResponse: String) + case invalidResponse + case underlyingError(any Error) + case decodingError(DecodingError) + case networkError(URLError) +} +``` + +The primary case is `httpErrorWithDetails` — it carries both the HTTP status and the CloudKit-specific error code and reason string. + +## The Parsing Pipeline + +### Step 1: Extractor Array + +`CloudKitError+OpenAPI.swift` defines an ordered list of extractors: + +```swift +private static let errorExtractors: [(any CloudKitResponseType) -> CloudKitError?] = [ + { $0.badRequestResponse.map { CloudKitError(badRequest: $0) } }, + { $0.unauthorizedResponse.map { CloudKitError(unauthorized: $0) } }, + { $0.forbiddenResponse.map { CloudKitError(forbidden: $0) } }, + { $0.notFoundResponse.map { CloudKitError(notFound: $0) } }, + { $0.conflictResponse.map { CloudKitError(conflict: $0) } }, + // ... all 11 statuses +] +``` + +### Step 2: Generic Initializer + +```swift +internal init?(_ response: T) { + if response.isOk { return nil } // Not an error — return nil + + // Try each extractor until one matches + for extractor in Self.errorExtractors { + if let error = extractor(response) { + self = error + return + } + } + + // Undocumented status code fallback + if let statusCode = response.undocumentedStatusCode { + self = .httpError(statusCode: statusCode) + return + } + + self = .invalidResponse +} +``` + +### Step 3: Per-Status Initializers + +Each status code has a private initializer that extracts the JSON body: + +```swift +private init(badRequest response: Components.Responses.BadRequest) { + if case .json(let errorResponse) = response.body { + self = .httpErrorWithDetails( + statusCode: 400, + serverErrorCode: errorResponse.serverErrorCode?.rawValue, + reason: errorResponse.reason + ) + } else { + self = .httpError(statusCode: 400) + } +} +``` + +If the body isn't JSON (rare), it falls back to a plain `httpError` without details. + +## Response Processing Pattern + +`CloudKitResponseProcessor` applies the error-first pattern to every operation: + +```swift +func processQueryResponse(_ response: Operations.queryRecords.Output) + async throws(CloudKitError) -> [RecordInfo] +{ + // Error check FIRST + if let error = CloudKitError(response) { + throw error + } + + // Only then extract the success payload + switch response { + case .ok(let okResponse): + return try extractRecords(from: okResponse) + default: + throw CloudKitError.invalidResponse + } +} +``` + +## Additional Error Mapping + +`CloudKitService+ErrorHandling.swift` catches non-HTTP errors and wraps them: + +```swift +func mapToCloudKitError(_ error: any Error) -> CloudKitError { + switch error { + case let cloudKitError as CloudKitError: + return cloudKitError // Already typed — pass through + case let decodingError as DecodingError: + return .decodingError(decodingError) + case let urlError as URLError: + return .networkError(urlError) + default: + return .underlyingError(error) + } +} +``` + +## End-to-End Example + +``` +HTTP 400 Bad Request +{"serverErrorCode": "BAD_REQUEST", "reason": "Invalid filter"} + │ + ▼ +OpenAPI runtime deserializes to: + Operations.queryRecords.Output.badRequest(Components.Responses.BadRequest) + │ + ▼ +CloudKitResponseProcessor calls: CloudKitError(response) + │ + ▼ +Generic initializer: response.isOk == false + → tries errorExtractors[0]: badRequestResponse != nil ✓ + │ + ▼ +Private init(badRequest:): extracts JSON body + → .httpErrorWithDetails(statusCode: 400, + serverErrorCode: "BAD_REQUEST", + reason: "Invalid filter") + │ + ▼ +Thrown as CloudKitError — caller can switch on case + or display via .errorDescription: + "CloudKit API error: HTTP 400\nServer Error Code: BAD_REQUEST\nReason: Invalid filter" +``` diff --git a/docs/internals/field-type-polymorphism.md b/docs/internals/field-type-polymorphism.md new file mode 100644 index 00000000..610d4a09 --- /dev/null +++ b/docs/internals/field-type-polymorphism.md @@ -0,0 +1,197 @@ +# Field Type Polymorphism + +MistKit models CloudKit field values through a three-layer type system that bridges Swift's type safety with the CloudKit REST API's loosely-typed JSON. + +## Domain Layer: The `FieldValue` Enum + +At the public API level, `FieldValue` is a discriminated union (Swift enum) with 9 cases: + +```swift +public enum FieldValue: Codable, Equatable, Sendable { + case string(String) + case int64(Int) + case double(Double) + case bytes(String) // Base64-encoded binary data + case date(Date) // Stored as milliseconds since epoch + case location(Location) + case reference(Reference) + case asset(Asset) + case list([FieldValue]) // Recursive — supports heterogeneous lists +} +``` + +This is the only type library consumers interact with. It hides all API serialization details. + +## OpenAPI Layer: Request/Response Asymmetry + +CloudKit's REST API treats field values differently in requests vs responses. The OpenAPI spec (`openapi.yaml`) models this with two separate schemas: + +### FieldValueRequest + +```yaml +FieldValueRequest: + properties: + value: + oneOf: [StringValue, Int64Value, DoubleValue, BytesValue, + DateValue, LocationValue, ReferenceValue, AssetValue, ListValue] + type: + enum: [STRING_LIST, INT64_LIST, DOUBLE_LIST, ...] # List element types only +``` + +- The `type` field is **optional** and only used for list-typed filter expressions (IN/NOT_IN). +- For mutations, CloudKit **infers** the type from the value's JSON structure. + +### FieldValueResponse + +```yaml +FieldValueResponse: + properties: + value: + oneOf: [StringValue, Int64Value, DoubleValue, BytesValue, + DateValue, LocationValue, ReferenceValue, AssetValue, ListValue] + type: + enum: [STRING, INT64, DOUBLE, TIMESTAMP, ASSETID, ...] # All field types +``` + +- The `type` field is **optional but present** — provides explicit type information. +- Critical for disambiguation: a `DoubleValue` with `type: TIMESTAMP` is a date, not a double. + +### Why Two Types? + +| Concern | Request | Response | +|---------|---------|----------| +| Type field purpose | Specifies list element type for filters | Disambiguates value semantics | +| Type field values | List types only (STRING_LIST, etc.) | All field types (STRING, TIMESTAMP, etc.) | +| Required? | No — CloudKit infers from structure | No — but aids parsing | + +Modeling this asymmetry at the schema level means the Swift compiler prevents accidentally using a response type where a request is expected. + +## Generated Code: `oneOf` Polymorphism + +The Swift OpenAPI generator translates `oneOf` into nested enums with try-catch decoding: + +```swift +internal struct FieldValueRequest: Codable { + internal enum valuePayload: Codable { + case StringValue(String) + case Int64Value(Int64) + case DoubleValue(Double) + case DateValue(Double) + case LocationValue(LocationValue) + // ... all 9 cases + + internal init(from decoder: any Decoder) throws { + // Tries each case sequentially — first successful decode wins + if let v = try? container.decode(String.self) { self = .StringValue(v); return } + if let v = try? container.decode(Int64.self) { self = .Int64Value(v); return } + // ... + throw DecodingError.failedToDecodeOneOfSchema(...) + } + } +} +``` + +No discriminator field is needed in the JSON — the generator relies on structural matching. + +## Bidirectional Conversion + +### Domain → Request (`Components.Schemas.FieldValueRequest+MistKit.swift`) + +```swift +internal init(from fieldValue: FieldValue) { + if let scalar = Self.makeScalarRequest(from: fieldValue) { + self = scalar + } else { + self = Self.makeComplexRequest(from: fieldValue) + } +} +``` + +Scalar conversion handles the simple cases (string, int64, double, bytes, date). Complex conversion handles location, reference, asset, and list. Date values are converted from `Date` to milliseconds: + +```swift +case .date(let value): + return Self(value: .DateValue(value.timeIntervalSince1970 * 1_000)) +``` + +### Response → Domain (`FieldValue+Components.swift`) + +```swift +private static func makeSimpleFieldValue( + from value: Components.Schemas.FieldValueResponse.valuePayload, + type fieldType: Components.Schemas.FieldValueResponse._typePayload? +) -> FieldValue? { + if case .DoubleValue(let dblVal) = value { + // The type field disambiguates double vs timestamp + return fieldType == .TIMESTAMP + ? .date(Date(timeIntervalSince1970: dblVal / 1_000)) + : .double(dblVal) + } + // ... +} +``` + +The response `type` field is essential here — without it, a timestamp would be indistinguishable from a plain double. + +## Known Limitation: Asset Schema Is Not Split + +Unlike `FieldValue`, the `AssetValue` schema is **not** split into request/response variants. A single `AssetValue` is referenced from both `FieldValueRequest` and `FieldValueResponse` (`openapi.yaml:1016`), and the domain-level `Asset` struct mirrors that — all fields are optional on a single type. + +### What this means for callers + +CloudKit's asset payload is semantically asymmetric, but the current schema doesn't enforce it: + +| Field | Request side (write) | Response side (read) | +|-------|----------------------|----------------------| +| `receipt` | Required — token from prior CDN upload | Not returned | +| `wrappingKey`, `referenceChecksum` | Set by the upload step | Not returned | +| `downloadURL` | Ignored if sent | Required — where to fetch bytes | +| `fileChecksum`, `size` | Optional metadata | Returned by CloudKit | + +Because `AssetValue` flattens both shapes into one all-optional struct, the compiler cannot prevent putting a `downloadURL` into a write payload or expecting a `receipt` on a read. A response asset and a request asset are the same Swift type, so callers can in principle round-trip the wrong shape. + +### How the service layer compensates + +Rather than splitting the schema, the asymmetry is handled at the service layer: + +1. **Two-step upload flow** (`CloudKitService+WriteOperations.swift`) hides raw asset request construction from callers. `uploadAssets()` calls `requestAssetUploadURL()` → `uploadAssetData()` → produces an `Asset` populated with `receipt`/`wrappingKey`/`size` ready for a follow-up `modifyRecords` call. Callers don't hand-build write-side `Asset` values. +2. **Read-side `Asset` values** are constructed in `FieldValue+Components.swift` from `FieldValueResponse`, populated only with the fields CloudKit actually returns (`downloadURL`, `fileChecksum`, `size`). +3. **Convention over compilation:** when consuming code needs to act on a download URL, it pattern-matches `case .asset(let asset)` and reads `asset.downloadURL`. The unused write-side fields are simply `nil`. + +In practice this is sufficient because callers never construct write-side asset values directly — the upload flow always hands them a fully-populated `Asset`. + +### Why the asymmetry isn't pushed into types + +A schema split (`AssetValueRequest` + `AssetValueResponse`, mirroring the `FieldValue` split) would move this asymmetry into the type system, but it would also require either two public domain types — breaking the 9-case enum symmetry on `FieldValue` — or a domain-level read/write distinction the public API deliberately doesn't make. The current design treats `Asset` as a single round-trippable value and contains the asymmetry inside the service layer instead. + +## Recursive List Handling + +Lists use `ListValuePayload` — structurally identical to `valuePayload` — enabling nested heterogeneous lists: + +```swift +extension Components.Schemas.ListValuePayload { + internal init(from fieldValue: FieldValue) { + // Same scalar/complex split, recursively applied to each element + } +} +``` + +## Summary + +``` +┌─────────────────────────────────────────────┐ +│ Public API: FieldValue (9-case enum) │ +└──────────────────┬──────────────────────────┘ + │ Bidirectional conversion + ┌───────────┴───────────┐ + ▼ ▼ +┌──────────────┐ ┌───────────────┐ +│ FieldValue │ │ FieldValue │ +│ Request │ │ Response │ +│ (no type) │ │ (+ type hint) │ +└──────────────┘ └───────────────┘ + │ │ + └───────────┬───────────┘ + ▼ + CloudKit REST API (JSON) +``` diff --git a/docs/talk-feedback.md b/docs/talk-feedback.md new file mode 100644 index 00000000..d58b3988 --- /dev/null +++ b/docs/talk-feedback.md @@ -0,0 +1,63 @@ +# Talk Feedback — CloudKit as Your Backend (dry run, 2026-05-05) + +Notes from the Riverside dry run with Evan and Josh. The Keynote deck lives outside the repo, so this file is the durable home for talk-level feedback. Sibling to [`why-mistkit.md`](why-mistkit.md). + +## Source + +- Riverside dry run with Evan + Josh +- Raw transcript: [`transcriptions/transcript.txt`](transcriptions/transcript.txt) +- Self-reported deck completeness during the run: ~60% + +## What's Working + +- The **Heart Witch** Apple-Watch origin story (no login on a watch face → CloudKit) is the single best hook in the deck. +- The **"two and a half authentication methods"** framing is sharper than Apple's three-equal-methods presentation. API Token alone barely qualifies as a method — it's a prerequisite. +- The **GitHub Actions / Bushel / Celestra deployment story** is the strongest section. It's the part of the talk that does not exist in Apple's docs anywhere. +- The **CloudKit Dashboard walkthrough** (Tokens & Keys → openssl command → paste public key → done) is concrete and audience-friendly. + +## Structural Changes + +- **Open with Heart Witch.** Currently it shows up roughly five minutes in. Lead with the problem ("watch user can't type a password"), not company background. +- **Make the public-vs-private + auth-method a 2D matrix slide**, not a bullet list. It's the structure people will remember. +- **Move the deployment / GitHub Actions section earlier** and give it more time. It's defensible content; the intro is not. +- **Fold API Token into the Web Auth Token section.** "Two and a half" is honest framing for the intro, but a full slide on it is overkill — it's a prerequisite, not a peer method. + +## Cuts + +- **General CloudKit / NoSQL intro** — covered by the Part 1 article; assume the audience. +- **MistKit origin / Claude-Code rebuild deep dive** — that's Part 1/2 article territory; one slide max. +- **Field-type polymorphism deep dive** — same; ~30 seconds. +- **Error-handling deep dive** — same; ~30 seconds. +- **WASM / browser-extension tangent** — off-topic for backend services. Replace with one line: "running in a browser? Use CloudKit JS, not MistKit." +- **Roadmap / "what's next" closing** — the Part 2 article covers it; keep one slide for "where to follow along." + +## Expand / Add + +- **`CKFetchWebAuthTokenOperation`** — the iOS-app-to-backend handoff path. Audience members building iOS+server stacks will ask about it in Q&A. At minimum one slide saying "the other way to get a web auth token is from inside an iOS app via `CKFetchWebAuthTokenOperation`; haven't shipped this pattern personally but here's the documented flow." +- **The signing payload format** — the talk hand-waves "Claude figured it out from the docs." Show the canonical string (HTTP method + ISO 8601 timestamp + SHA-256 body hash + path) and the `Authorization` header format. Pull straight from `Sources/MistKit/Service/AuthenticationMiddleware.swift`. +- **Web-auth-token lifetime / refresh** — one bullet. If unknown, spend 15 minutes in the dashboard before the live talk. + +## Audio / Delivery Cleanup (for the recorded version) + +Lines from the transcript to clean up: + +- "Sorry, just going into Do Not Disturb mode." +- "I hate Teams." +- "Surprised? I mean, I know they have an app." +- Multiple "sorry, slides aren't done" asides — replace with confidence in the recorded take. + +## Brand / Spelling + +The auto-transcription introduces several errors that would propagate if the transcript is fed back into Claude as source material: + +- "Heart Witch" → mangled as "Hart Twitch" / "Hardwitch" throughout. Confirm the on-screen spelling and the slide title before recording. +- "MistKit" → consistently transcribed as "Miskit." Search-and-replace before reuse. +- Around the WASM tangent (line 135), "WASM" gets transcribed as "awesome." + +## Q&A Prep — Likely Audience Questions + +- **"How do I get a web auth token from inside my iOS app?"** → `CKFetchWebAuthTokenOperation`. (See *Expand* above.) +- **"Can I use this from a browser extension?"** → Yes for non-Safari, but use CloudKit JS unless you specifically need Swift. +- **"What's the production story for key storage?"** → GitHub Actions Secrets in Bushel / Celestra; secrets manager or env-var injection in general. +- **"Does this work on Linux?"** → Yes — that's the whole point. Also Windows and Android. Not WASM yet (no transport). +- **"How does this compare to using Vapor + the CloudKit framework?"** → The CloudKit framework only runs on Apple platforms. MistKit runs anywhere Swift runs. diff --git a/docs/transcriptions/paragraphs.json b/docs/transcriptions/paragraphs.json new file mode 100644 index 00000000..55b33754 --- /dev/null +++ b/docs/transcriptions/paragraphs.json @@ -0,0 +1 @@ +{"paragraphs":[{"text":"Hey, Evan, can you hear me all right? Yeah, I can hear you. Awesome. How do I sound? Good.","start":262980,"end":268740,"confidence":0.99658203,"words":[{"text":"Hey,","start":262980,"end":263180,"confidence":0.99658203,"speaker":"A"},{"text":"Evan,","start":263180,"end":263580,"confidence":0.99609375,"speaker":"A"},{"text":"can","start":263580,"end":263700,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":263700,"end":263780,"confidence":0.99316406,"speaker":"A"},{"text":"hear","start":263780,"end":263900,"confidence":1,"speaker":"A"},{"text":"me","start":263900,"end":264020,"confidence":1,"speaker":"A"},{"text":"all","start":264020,"end":264140,"confidence":0.87158203,"speaker":"A"},{"text":"right?","start":264140,"end":264420,"confidence":0.96240234,"speaker":"A"},{"text":"Yeah,","start":264660,"end":265020,"confidence":0.9741211,"speaker":"B"},{"text":"I","start":265020,"end":265140,"confidence":1,"speaker":"B"},{"text":"can","start":265140,"end":265260,"confidence":1,"speaker":"B"},{"text":"hear","start":265260,"end":265420,"confidence":1,"speaker":"B"},{"text":"you.","start":265420,"end":265700,"confidence":0.99365234,"speaker":"B"},{"text":"Awesome.","start":266420,"end":267060,"confidence":0.9998372,"speaker":"A"},{"text":"How","start":267060,"end":267340,"confidence":1,"speaker":"A"},{"text":"do","start":267340,"end":267500,"confidence":1,"speaker":"A"},{"text":"I","start":267500,"end":267660,"confidence":1,"speaker":"A"},{"text":"sound?","start":267660,"end":268020,"confidence":0.99975586,"speaker":"A"},{"text":"Good.","start":268340,"end":268740,"confidence":0.99902344,"speaker":"A"}]},{"text":"I've used this microphone in ages. It's like all dusty.","start":270260,"end":274420,"confidence":0.7714844,"words":[{"text":"I've","start":270260,"end":270740,"confidence":0.7714844,"speaker":"A"},{"text":"used","start":270740,"end":270940,"confidence":0.99316406,"speaker":"A"},{"text":"this","start":270940,"end":271140,"confidence":0.9736328,"speaker":"A"},{"text":"microphone","start":271140,"end":271660,"confidence":0.9484375,"speaker":"A"},{"text":"in","start":271660,"end":271820,"confidence":0.9946289,"speaker":"A"},{"text":"ages.","start":271820,"end":272340,"confidence":0.9995117,"speaker":"A"},{"text":"It's","start":273060,"end":273420,"confidence":0.99397784,"speaker":"A"},{"text":"like","start":273420,"end":273580,"confidence":0.99121094,"speaker":"A"},{"text":"all","start":273580,"end":273780,"confidence":0.98583984,"speaker":"A"},{"text":"dusty.","start":273780,"end":274420,"confidence":0.99934894,"speaker":"A"}]},{"text":"How you think I should wait like five minutes for people to come in or. Probably. Yeah, that there's if. Yeah, otherwise you can just. You could start, but that'll be interesting.","start":281140,"end":291930,"confidence":0.6699219,"words":[{"text":"How","start":281140,"end":281500,"confidence":0.6699219,"speaker":"A"},{"text":"you","start":281500,"end":281700,"confidence":0.97021484,"speaker":"A"},{"text":"think","start":281700,"end":281820,"confidence":1,"speaker":"A"},{"text":"I","start":281820,"end":281940,"confidence":0.99853516,"speaker":"A"},{"text":"should","start":281940,"end":282060,"confidence":0.9995117,"speaker":"A"},{"text":"wait","start":282060,"end":282260,"confidence":0.99975586,"speaker":"A"},{"text":"like","start":282260,"end":282380,"confidence":0.99316406,"speaker":"A"},{"text":"five","start":282380,"end":282540,"confidence":0.9995117,"speaker":"A"},{"text":"minutes","start":282540,"end":282820,"confidence":1,"speaker":"A"},{"text":"for","start":282820,"end":283020,"confidence":0.9995117,"speaker":"A"},{"text":"people","start":283020,"end":283220,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":283220,"end":283380,"confidence":0.9916992,"speaker":"A"},{"text":"come","start":283380,"end":283540,"confidence":0.9995117,"speaker":"A"},{"text":"in","start":283540,"end":283780,"confidence":0.99902344,"speaker":"A"},{"text":"or.","start":283780,"end":284100,"confidence":0.9394531,"speaker":"A"},{"text":"Probably.","start":284260,"end":284740,"confidence":0.8670247,"speaker":"B"},{"text":"Yeah,","start":284980,"end":285460,"confidence":0.99316406,"speaker":"B"},{"text":"that","start":285770,"end":285970,"confidence":0.72314453,"speaker":"B"},{"text":"there's","start":285970,"end":286410,"confidence":0.8248698,"speaker":"B"},{"text":"if.","start":286490,"end":286890,"confidence":0.97558594,"speaker":"B"},{"text":"Yeah,","start":286970,"end":287530,"confidence":0.99869794,"speaker":"B"},{"text":"otherwise","start":288010,"end":288450,"confidence":0.98502606,"speaker":"B"},{"text":"you","start":288450,"end":288570,"confidence":0.99902344,"speaker":"B"},{"text":"can","start":288570,"end":288690,"confidence":0.99902344,"speaker":"B"},{"text":"just.","start":288690,"end":288890,"confidence":1,"speaker":"B"},{"text":"You","start":288890,"end":289090,"confidence":0.99609375,"speaker":"B"},{"text":"could","start":289090,"end":289290,"confidence":0.9824219,"speaker":"B"},{"text":"start,","start":289290,"end":289610,"confidence":0.9995117,"speaker":"B"},{"text":"but","start":289850,"end":290250,"confidence":0.99902344,"speaker":"B"},{"text":"that'll","start":291130,"end":291530,"confidence":0.96761066,"speaker":"B"},{"text":"be","start":291530,"end":291610,"confidence":0.9995117,"speaker":"B"},{"text":"interesting.","start":291610,"end":291930,"confidence":0.99609375,"speaker":"B"}]},{"text":"Do you mind if I grab a cup of coffee real quick? No, not at all. Not at all. Okay, cool. I'm not using the AirPods mic, so I can hear you, but you won't be able to hear me.","start":291930,"end":301370,"confidence":0.7919922,"words":[{"text":"Do","start":291930,"end":292090,"confidence":0.7919922,"speaker":"A"},{"text":"you","start":292090,"end":292170,"confidence":0.99560547,"speaker":"A"},{"text":"mind","start":292170,"end":292290,"confidence":0.9995117,"speaker":"A"},{"text":"if","start":292290,"end":292450,"confidence":0.99560547,"speaker":"A"},{"text":"I","start":292450,"end":292650,"confidence":0.9995117,"speaker":"A"},{"text":"grab","start":292650,"end":292930,"confidence":1,"speaker":"A"},{"text":"a","start":292930,"end":293050,"confidence":0.9995117,"speaker":"A"},{"text":"cup","start":293050,"end":293170,"confidence":0.9995117,"speaker":"A"},{"text":"of","start":293170,"end":293330,"confidence":0.9970703,"speaker":"A"},{"text":"coffee","start":293330,"end":293650,"confidence":0.9998372,"speaker":"A"},{"text":"real","start":293650,"end":293810,"confidence":0.9995117,"speaker":"A"},{"text":"quick?","start":293810,"end":294010,"confidence":1,"speaker":"A"},{"text":"No,","start":294010,"end":294250,"confidence":0.9975586,"speaker":"B"},{"text":"not","start":294250,"end":294450,"confidence":1,"speaker":"B"},{"text":"at","start":294450,"end":294570,"confidence":0.9995117,"speaker":"B"},{"text":"all.","start":294570,"end":294730,"confidence":1,"speaker":"B"},{"text":"Not","start":294730,"end":294930,"confidence":0.71875,"speaker":"A"},{"text":"at","start":294930,"end":295010,"confidence":0.8486328,"speaker":"A"},{"text":"all.","start":295010,"end":295210,"confidence":0.9042969,"speaker":"A"},{"text":"Okay,","start":295530,"end":296090,"confidence":0.9946289,"speaker":"A"},{"text":"cool.","start":296730,"end":297210,"confidence":0.99609375,"speaker":"A"},{"text":"I'm","start":297210,"end":297570,"confidence":0.8929036,"speaker":"A"},{"text":"not","start":297570,"end":297730,"confidence":1,"speaker":"A"},{"text":"using","start":297730,"end":297930,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":297930,"end":298090,"confidence":0.99609375,"speaker":"A"},{"text":"AirPods","start":298090,"end":298610,"confidence":0.96594,"speaker":"A"},{"text":"mic,","start":298610,"end":298930,"confidence":0.9863281,"speaker":"A"},{"text":"so","start":298930,"end":299250,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":299250,"end":299490,"confidence":1,"speaker":"A"},{"text":"can","start":299490,"end":299650,"confidence":0.9995117,"speaker":"A"},{"text":"hear","start":299650,"end":299810,"confidence":1,"speaker":"A"},{"text":"you,","start":299810,"end":299970,"confidence":0.9995117,"speaker":"A"},{"text":"but","start":299970,"end":300130,"confidence":1,"speaker":"A"},{"text":"you","start":300130,"end":300290,"confidence":1,"speaker":"A"},{"text":"won't","start":300290,"end":300490,"confidence":0.9998372,"speaker":"A"},{"text":"be","start":300490,"end":300570,"confidence":1,"speaker":"A"},{"text":"able","start":300570,"end":300690,"confidence":1,"speaker":"A"},{"text":"to","start":300690,"end":300850,"confidence":1,"speaker":"A"},{"text":"hear","start":300850,"end":301050,"confidence":0.9995117,"speaker":"A"},{"text":"me.","start":301050,"end":301370,"confidence":0.9995117,"speaker":"A"}]},{"text":"Okay.","start":301690,"end":302250,"confidence":0.98746747,"words":[{"text":"Okay.","start":301690,"end":302250,"confidence":0.98746747,"speaker":"B"}]},{"text":"It's.","start":362440,"end":387820,"confidence":0.7732747,"words":[{"text":"It's.","start":362440,"end":387820,"confidence":0.7732747,"speaker":"A"}]},{"text":"Thank you for your patience.","start":531699,"end":535060,"confidence":0.9851074,"words":[{"text":"Thank","start":531699,"end":531940,"confidence":0.9851074,"speaker":"A"},{"text":"you","start":531940,"end":532260,"confidence":1,"speaker":"A"},{"text":"for","start":533860,"end":534220,"confidence":0.59277344,"speaker":"A"},{"text":"your","start":534220,"end":534500,"confidence":1,"speaker":"A"},{"text":"patience.","start":534500,"end":535060,"confidence":0.9992676,"speaker":"A"}]},{"text":"So is it just you? It looks like it's just me. Josh is trying to get in, but he's trying to get on on his mobile device and I don't think that's possible with Riverside.","start":549010,"end":559250,"confidence":0.9873047,"words":[{"text":"So","start":549010,"end":549130,"confidence":0.9873047,"speaker":"A"},{"text":"is","start":549130,"end":549290,"confidence":0.99365234,"speaker":"A"},{"text":"it","start":549290,"end":549450,"confidence":0.99902344,"speaker":"A"},{"text":"just","start":549450,"end":549650,"confidence":1,"speaker":"A"},{"text":"you?","start":549650,"end":549970,"confidence":0.9995117,"speaker":"A"},{"text":"It","start":551330,"end":551610,"confidence":0.95751953,"speaker":"B"},{"text":"looks","start":551610,"end":551810,"confidence":1,"speaker":"B"},{"text":"like","start":551810,"end":551930,"confidence":0.9995117,"speaker":"B"},{"text":"it's","start":551930,"end":552130,"confidence":0.9996745,"speaker":"B"},{"text":"just","start":552130,"end":552290,"confidence":1,"speaker":"B"},{"text":"me.","start":552290,"end":552570,"confidence":1,"speaker":"B"},{"text":"Josh","start":552570,"end":553010,"confidence":0.9995117,"speaker":"B"},{"text":"is","start":553010,"end":553290,"confidence":0.9970703,"speaker":"B"},{"text":"trying","start":553290,"end":553530,"confidence":0.9995117,"speaker":"B"},{"text":"to","start":553530,"end":553650,"confidence":1,"speaker":"B"},{"text":"get","start":553650,"end":553810,"confidence":1,"speaker":"B"},{"text":"in,","start":553810,"end":554010,"confidence":0.9995117,"speaker":"B"},{"text":"but","start":554010,"end":554170,"confidence":0.9995117,"speaker":"B"},{"text":"he's","start":554170,"end":554610,"confidence":0.92529297,"speaker":"B"},{"text":"trying","start":554610,"end":554930,"confidence":0.9995117,"speaker":"B"},{"text":"to","start":554930,"end":555090,"confidence":1,"speaker":"B"},{"text":"get","start":555090,"end":555210,"confidence":1,"speaker":"B"},{"text":"on","start":555210,"end":555490,"confidence":0.9272461,"speaker":"B"},{"text":"on","start":555650,"end":555970,"confidence":1,"speaker":"B"},{"text":"his","start":555970,"end":556210,"confidence":0.99902344,"speaker":"B"},{"text":"mobile","start":556210,"end":556530,"confidence":0.9998372,"speaker":"B"},{"text":"device","start":556530,"end":556810,"confidence":1,"speaker":"B"},{"text":"and","start":556810,"end":557010,"confidence":0.90478516,"speaker":"B"},{"text":"I","start":557010,"end":557210,"confidence":1,"speaker":"B"},{"text":"don't","start":557210,"end":557490,"confidence":0.98828125,"speaker":"B"},{"text":"think","start":557490,"end":557689,"confidence":1,"speaker":"B"},{"text":"that's","start":557689,"end":558010,"confidence":1,"speaker":"B"},{"text":"possible","start":558010,"end":558290,"confidence":1,"speaker":"B"},{"text":"with","start":558290,"end":558570,"confidence":0.9995117,"speaker":"B"},{"text":"Riverside.","start":558570,"end":559250,"confidence":0.9998372,"speaker":"B"}]},{"text":"Surprised? I mean, I know they have an app. Maybe he's using. I'm not sure if he's using. Using the app or not.","start":563250,"end":570070,"confidence":0.9345703,"words":[{"text":"Surprised?","start":563250,"end":563890,"confidence":0.9345703,"speaker":"A"},{"text":"I","start":564690,"end":564970,"confidence":0.9897461,"speaker":"A"},{"text":"mean,","start":564970,"end":565090,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":565090,"end":565210,"confidence":0.99902344,"speaker":"A"},{"text":"know","start":565210,"end":565370,"confidence":1,"speaker":"A"},{"text":"they","start":565370,"end":565530,"confidence":1,"speaker":"A"},{"text":"have","start":565530,"end":565690,"confidence":1,"speaker":"A"},{"text":"an","start":565690,"end":565850,"confidence":0.99902344,"speaker":"A"},{"text":"app.","start":565850,"end":566130,"confidence":0.9863281,"speaker":"A"},{"text":"Maybe","start":567590,"end":567790,"confidence":0.93359375,"speaker":"B"},{"text":"he's","start":567790,"end":567990,"confidence":0.9996745,"speaker":"B"},{"text":"using.","start":567990,"end":568190,"confidence":0.99902344,"speaker":"B"},{"text":"I'm","start":568190,"end":568430,"confidence":0.99934894,"speaker":"B"},{"text":"not","start":568430,"end":568510,"confidence":0.99902344,"speaker":"B"},{"text":"sure","start":568510,"end":568630,"confidence":1,"speaker":"B"},{"text":"if","start":568630,"end":568710,"confidence":0.9980469,"speaker":"B"},{"text":"he's","start":568710,"end":568790,"confidence":0.9189453,"speaker":"B"},{"text":"using.","start":568790,"end":569030,"confidence":0.98535156,"speaker":"B"},{"text":"Using","start":569110,"end":569430,"confidence":1,"speaker":"B"},{"text":"the","start":569430,"end":569630,"confidence":0.99902344,"speaker":"B"},{"text":"app","start":569630,"end":569790,"confidence":0.9995117,"speaker":"B"},{"text":"or","start":569790,"end":569910,"confidence":0.9995117,"speaker":"B"},{"text":"not.","start":569910,"end":570070,"confidence":0.9995117,"speaker":"B"}]},{"text":"Okay.","start":570070,"end":570550,"confidence":0.99820966,"words":[{"text":"Okay.","start":570070,"end":570550,"confidence":0.99820966,"speaker":"A"}]},{"text":"Should I just go? Sure. Okay. Well, thanks for joining me, Evan. I really appreciate it.","start":575190,"end":585270,"confidence":0.99658203,"words":[{"text":"Should","start":575190,"end":575470,"confidence":0.99658203,"speaker":"A"},{"text":"I","start":575470,"end":575630,"confidence":0.8354492,"speaker":"A"},{"text":"just","start":575630,"end":575910,"confidence":1,"speaker":"A"},{"text":"go?","start":575910,"end":576310,"confidence":1,"speaker":"A"},{"text":"Sure.","start":578230,"end":578630,"confidence":1,"speaker":"B"},{"text":"Okay.","start":579830,"end":580470,"confidence":0.91015625,"speaker":"A"},{"text":"Well,","start":582390,"end":582710,"confidence":0.9980469,"speaker":"A"},{"text":"thanks","start":582710,"end":583030,"confidence":0.9926758,"speaker":"A"},{"text":"for","start":583030,"end":583230,"confidence":1,"speaker":"A"},{"text":"joining","start":583230,"end":583549,"confidence":0.75911456,"speaker":"A"},{"text":"me,","start":583549,"end":583830,"confidence":0.99902344,"speaker":"A"},{"text":"Evan.","start":583830,"end":584310,"confidence":0.9511719,"speaker":"A"},{"text":"I","start":584310,"end":584510,"confidence":0.9995117,"speaker":"A"},{"text":"really","start":584510,"end":584670,"confidence":0.9995117,"speaker":"A"},{"text":"appreciate","start":584670,"end":584990,"confidence":0.9088135,"speaker":"A"},{"text":"it.","start":584990,"end":585270,"confidence":0.99853516,"speaker":"A"}]},{"text":"I would say no. I mean I do, seriously. So yeah, this is a kind of a dry run. I would say I'm about 60% done with this presentation about CloudKit on the server and we'll probably hop back and forth between Keynote and not Keynote, but yeah. So this is CloudKit as your backend from iOS to server side Swift.","start":587430,"end":616630,"confidence":0.8666992,"words":[{"text":"I","start":587430,"end":587670,"confidence":0.8666992,"speaker":"A"},{"text":"would","start":587670,"end":587790,"confidence":0.67871094,"speaker":"A"},{"text":"say","start":587790,"end":588070,"confidence":0.9448242,"speaker":"A"},{"text":"no.","start":588390,"end":588630,"confidence":0.9951172,"speaker":"A"},{"text":"I","start":588630,"end":588710,"confidence":0.9995117,"speaker":"A"},{"text":"mean","start":588710,"end":588830,"confidence":0.95947266,"speaker":"A"},{"text":"I","start":588830,"end":588990,"confidence":0.99902344,"speaker":"A"},{"text":"do,","start":588990,"end":589270,"confidence":1,"speaker":"A"},{"text":"seriously.","start":589270,"end":589910,"confidence":0.99934894,"speaker":"A"},{"text":"So","start":591830,"end":592110,"confidence":0.9995117,"speaker":"A"},{"text":"yeah,","start":592110,"end":592470,"confidence":1,"speaker":"A"},{"text":"this","start":592630,"end":592910,"confidence":0.99902344,"speaker":"A"},{"text":"is","start":592910,"end":593030,"confidence":0.79296875,"speaker":"A"},{"text":"a","start":593030,"end":593150,"confidence":0.6645508,"speaker":"A"},{"text":"kind","start":593150,"end":593310,"confidence":0.99853516,"speaker":"A"},{"text":"of","start":593310,"end":593430,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":593430,"end":593550,"confidence":0.99609375,"speaker":"A"},{"text":"dry","start":593550,"end":593830,"confidence":0.8828125,"speaker":"A"},{"text":"run.","start":593830,"end":594150,"confidence":0.9970703,"speaker":"A"},{"text":"I","start":594710,"end":594830,"confidence":0.9941406,"speaker":"A"},{"text":"would","start":594830,"end":594950,"confidence":0.9980469,"speaker":"A"},{"text":"say","start":594950,"end":595070,"confidence":0.99560547,"speaker":"A"},{"text":"I'm","start":595070,"end":595270,"confidence":0.99869794,"speaker":"A"},{"text":"about","start":595270,"end":595470,"confidence":0.9995117,"speaker":"A"},{"text":"60%","start":595470,"end":596110,"confidence":0.92505,"speaker":"A"},{"text":"done","start":596110,"end":596350,"confidence":0.9995117,"speaker":"A"},{"text":"with","start":596350,"end":596510,"confidence":1,"speaker":"A"},{"text":"this","start":596510,"end":596710,"confidence":0.99853516,"speaker":"A"},{"text":"presentation","start":596710,"end":597350,"confidence":1,"speaker":"A"},{"text":"about","start":599270,"end":599670,"confidence":0.9975586,"speaker":"A"},{"text":"CloudKit","start":600310,"end":600990,"confidence":0.7687988,"speaker":"A"},{"text":"on","start":600990,"end":601150,"confidence":0.9980469,"speaker":"A"},{"text":"the","start":601150,"end":601310,"confidence":0.9946289,"speaker":"A"},{"text":"server","start":601310,"end":601750,"confidence":0.7963867,"speaker":"A"},{"text":"and","start":604070,"end":604470,"confidence":0.9892578,"speaker":"A"},{"text":"we'll","start":604870,"end":605230,"confidence":0.9514974,"speaker":"A"},{"text":"probably","start":605230,"end":605470,"confidence":1,"speaker":"A"},{"text":"hop","start":605470,"end":605710,"confidence":0.9946289,"speaker":"A"},{"text":"back","start":605710,"end":605950,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":605950,"end":606110,"confidence":1,"speaker":"A"},{"text":"forth","start":606110,"end":606350,"confidence":1,"speaker":"A"},{"text":"between","start":606350,"end":606630,"confidence":1,"speaker":"A"},{"text":"Keynote","start":606630,"end":607230,"confidence":0.88049316,"speaker":"A"},{"text":"and","start":607230,"end":607390,"confidence":0.9975586,"speaker":"A"},{"text":"not","start":607390,"end":607590,"confidence":0.9458008,"speaker":"A"},{"text":"Keynote,","start":607590,"end":608310,"confidence":0.99328613,"speaker":"A"},{"text":"but","start":608870,"end":609270,"confidence":0.9941406,"speaker":"A"},{"text":"yeah.","start":609510,"end":609990,"confidence":0.9737956,"speaker":"A"},{"text":"So","start":611670,"end":611950,"confidence":0.9946289,"speaker":"A"},{"text":"this","start":611950,"end":612110,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":612110,"end":612310,"confidence":0.9995117,"speaker":"A"},{"text":"CloudKit","start":612310,"end":612910,"confidence":0.92456055,"speaker":"A"},{"text":"as","start":612910,"end":613070,"confidence":0.9863281,"speaker":"A"},{"text":"your","start":613070,"end":613230,"confidence":0.94628906,"speaker":"A"},{"text":"backend","start":613230,"end":613750,"confidence":0.8310547,"speaker":"A"},{"text":"from","start":613910,"end":614310,"confidence":1,"speaker":"A"},{"text":"iOS","start":614310,"end":614870,"confidence":0.9992676,"speaker":"A"},{"text":"to","start":615030,"end":615390,"confidence":0.9941406,"speaker":"A"},{"text":"server","start":615390,"end":615830,"confidence":0.9873047,"speaker":"A"},{"text":"side","start":615830,"end":616070,"confidence":0.5727539,"speaker":"A"},{"text":"Swift.","start":616070,"end":616630,"confidence":0.9953613,"speaker":"A"}]},{"text":"So what is CloudKit? CloudKit is a service launched by Apple probably a decade ago to kind of give developers a built in back end for storing data for their apps. One of the biggest benefits is is how cheap it is to use for iOS developers.","start":627600,"end":649970,"confidence":0.9916992,"words":[{"text":"So","start":627600,"end":627840,"confidence":0.9916992,"speaker":"A"},{"text":"what","start":628160,"end":628480,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":628480,"end":628720,"confidence":0.99902344,"speaker":"A"},{"text":"CloudKit?","start":628720,"end":629440,"confidence":0.88281,"speaker":"A"},{"text":"CloudKit","start":629600,"end":630320,"confidence":0.88281,"speaker":"A"},{"text":"is","start":630320,"end":630600,"confidence":0.9921875,"speaker":"A"},{"text":"a","start":630600,"end":630880,"confidence":0.99853516,"speaker":"A"},{"text":"service","start":630880,"end":631200,"confidence":0.9995117,"speaker":"A"},{"text":"launched","start":632240,"end":632680,"confidence":0.99731445,"speaker":"A"},{"text":"by","start":632680,"end":632840,"confidence":1,"speaker":"A"},{"text":"Apple","start":632840,"end":633360,"confidence":1,"speaker":"A"},{"text":"probably","start":633600,"end":634000,"confidence":0.99869794,"speaker":"A"},{"text":"a","start":634000,"end":634160,"confidence":0.9995117,"speaker":"A"},{"text":"decade","start":634160,"end":634520,"confidence":0.99975586,"speaker":"A"},{"text":"ago","start":634520,"end":634800,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":635920,"end":636279,"confidence":0.9848633,"speaker":"A"},{"text":"kind","start":636279,"end":636520,"confidence":0.8803711,"speaker":"A"},{"text":"of","start":636520,"end":636800,"confidence":0.98828125,"speaker":"A"},{"text":"give","start":636960,"end":637360,"confidence":0.9995117,"speaker":"A"},{"text":"developers","start":638880,"end":639680,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":639840,"end":640200,"confidence":0.99902344,"speaker":"A"},{"text":"built","start":640200,"end":640520,"confidence":0.9995117,"speaker":"A"},{"text":"in","start":640520,"end":640720,"confidence":0.99316406,"speaker":"A"},{"text":"back","start":640720,"end":641000,"confidence":0.9995117,"speaker":"A"},{"text":"end","start":641000,"end":641280,"confidence":0.58935547,"speaker":"A"},{"text":"for","start":641280,"end":641520,"confidence":0.99609375,"speaker":"A"},{"text":"storing","start":641520,"end":641960,"confidence":0.9946289,"speaker":"A"},{"text":"data","start":641960,"end":642240,"confidence":0.99902344,"speaker":"A"},{"text":"for","start":642640,"end":642920,"confidence":0.9995117,"speaker":"A"},{"text":"their","start":642920,"end":643160,"confidence":0.99853516,"speaker":"A"},{"text":"apps.","start":643160,"end":643680,"confidence":0.99902344,"speaker":"A"},{"text":"One","start":644480,"end":644760,"confidence":0.9995117,"speaker":"A"},{"text":"of","start":644760,"end":644880,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":644880,"end":645000,"confidence":0.99853516,"speaker":"A"},{"text":"biggest","start":645000,"end":645360,"confidence":1,"speaker":"A"},{"text":"benefits","start":645360,"end":646000,"confidence":0.99902344,"speaker":"A"},{"text":"is","start":646080,"end":646300,"confidence":0.84765625,"speaker":"A"},{"text":"is","start":646450,"end":646690,"confidence":0.9736328,"speaker":"A"},{"text":"how","start":646690,"end":647090,"confidence":0.9995117,"speaker":"A"},{"text":"cheap","start":647090,"end":647450,"confidence":0.9998372,"speaker":"A"},{"text":"it","start":647450,"end":647610,"confidence":0.9980469,"speaker":"A"},{"text":"is","start":647610,"end":647890,"confidence":0.9980469,"speaker":"A"},{"text":"to","start":647970,"end":648250,"confidence":0.99853516,"speaker":"A"},{"text":"use","start":648250,"end":648490,"confidence":0.9970703,"speaker":"A"},{"text":"for","start":648490,"end":648810,"confidence":0.9995117,"speaker":"A"},{"text":"iOS","start":648810,"end":649290,"confidence":0.9992676,"speaker":"A"},{"text":"developers.","start":649290,"end":649970,"confidence":0.998291,"speaker":"A"}]},{"text":"So if you have built an app, you could just add CloudKit right here within the Xcode project and use the regular CloudKit API in Swift to go ahead and start using it in your app.","start":652450,"end":670850,"confidence":0.95751953,"words":[{"text":"So","start":652450,"end":652850,"confidence":0.95751953,"speaker":"A"},{"text":"if","start":653570,"end":653850,"confidence":0.99853516,"speaker":"A"},{"text":"you","start":653850,"end":654130,"confidence":1,"speaker":"A"},{"text":"have","start":654450,"end":654850,"confidence":0.99902344,"speaker":"A"},{"text":"built","start":655330,"end":655690,"confidence":0.99934894,"speaker":"A"},{"text":"an","start":655690,"end":655850,"confidence":0.99560547,"speaker":"A"},{"text":"app,","start":655850,"end":656130,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":656290,"end":656570,"confidence":1,"speaker":"A"},{"text":"could","start":656570,"end":656730,"confidence":0.6508789,"speaker":"A"},{"text":"just","start":656730,"end":656930,"confidence":0.99902344,"speaker":"A"},{"text":"add","start":656930,"end":657250,"confidence":0.99853516,"speaker":"A"},{"text":"CloudKit","start":657410,"end":658290,"confidence":0.89294,"speaker":"A"},{"text":"right","start":658290,"end":658610,"confidence":0.99853516,"speaker":"A"},{"text":"here","start":658610,"end":658930,"confidence":0.9995117,"speaker":"A"},{"text":"within","start":659570,"end":659970,"confidence":0.9975586,"speaker":"A"},{"text":"the","start":661330,"end":661730,"confidence":0.9970703,"speaker":"A"},{"text":"Xcode","start":662209,"end":662770,"confidence":0.91137695,"speaker":"A"},{"text":"project","start":662770,"end":663090,"confidence":1,"speaker":"A"},{"text":"and","start":663490,"end":663890,"confidence":0.9975586,"speaker":"A"},{"text":"use","start":665330,"end":665690,"confidence":0.99853516,"speaker":"A"},{"text":"the","start":665690,"end":665970,"confidence":0.9995117,"speaker":"A"},{"text":"regular","start":665970,"end":666370,"confidence":0.9995117,"speaker":"A"},{"text":"CloudKit","start":666370,"end":666970,"confidence":0.9975586,"speaker":"A"},{"text":"API","start":666970,"end":667490,"confidence":0.99853516,"speaker":"A"},{"text":"in","start":667890,"end":668170,"confidence":0.5913086,"speaker":"A"},{"text":"Swift","start":668170,"end":668570,"confidence":0.9951172,"speaker":"A"},{"text":"to","start":668570,"end":668810,"confidence":0.99902344,"speaker":"A"},{"text":"go","start":668810,"end":668970,"confidence":0.9975586,"speaker":"A"},{"text":"ahead","start":668970,"end":669250,"confidence":0.9765625,"speaker":"A"},{"text":"and","start":669250,"end":669530,"confidence":0.99902344,"speaker":"A"},{"text":"start","start":669530,"end":669730,"confidence":1,"speaker":"A"},{"text":"using","start":669730,"end":669930,"confidence":1,"speaker":"A"},{"text":"it","start":669930,"end":670130,"confidence":0.9980469,"speaker":"A"},{"text":"in","start":670130,"end":670330,"confidence":0.99902344,"speaker":"A"},{"text":"your","start":670330,"end":670530,"confidence":1,"speaker":"A"},{"text":"app.","start":670530,"end":670850,"confidence":0.9975586,"speaker":"A"}]},{"text":"Here is what it looks like to create a new record type. You can do all this through the CloudKit dashboard.","start":673390,"end":680190,"confidence":0.9946289,"words":[{"text":"Here","start":673390,"end":673630,"confidence":0.9946289,"speaker":"A"},{"text":"is","start":673630,"end":674030,"confidence":0.9995117,"speaker":"A"},{"text":"what","start":674030,"end":674430,"confidence":0.9995117,"speaker":"A"},{"text":"it","start":674430,"end":674750,"confidence":0.9980469,"speaker":"A"},{"text":"looks","start":674750,"end":675110,"confidence":1,"speaker":"A"},{"text":"like","start":675110,"end":675390,"confidence":0.99902344,"speaker":"A"},{"text":"to","start":675390,"end":675750,"confidence":0.99902344,"speaker":"A"},{"text":"create","start":675750,"end":675990,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":675990,"end":676110,"confidence":0.9868164,"speaker":"A"},{"text":"new","start":676110,"end":676270,"confidence":0.99853516,"speaker":"A"},{"text":"record","start":676270,"end":676590,"confidence":0.9995117,"speaker":"A"},{"text":"type.","start":676590,"end":676990,"confidence":0.99194336,"speaker":"A"},{"text":"You","start":676990,"end":677150,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":677150,"end":677270,"confidence":1,"speaker":"A"},{"text":"do","start":677270,"end":677430,"confidence":1,"speaker":"A"},{"text":"all","start":677430,"end":677590,"confidence":0.9995117,"speaker":"A"},{"text":"this","start":677590,"end":677870,"confidence":0.99853516,"speaker":"A"},{"text":"through","start":677870,"end":678270,"confidence":1,"speaker":"A"},{"text":"the","start":678430,"end":678790,"confidence":0.99902344,"speaker":"A"},{"text":"CloudKit","start":678790,"end":679510,"confidence":0.9987793,"speaker":"A"},{"text":"dashboard.","start":679510,"end":680190,"confidence":0.99938965,"speaker":"A"}]},{"text":"In CloudKit you could also do this using a schema file too. And you can export and import your schema that way. And it's not a SQL based database, it's much more, no sequel ish or an abstract layer above it. But essentially you can create records kind of like a table but not quite in your records. You can create a struct for it.","start":684190,"end":712680,"confidence":0.7402344,"words":[{"text":"In","start":684190,"end":684470,"confidence":0.7402344,"speaker":"A"},{"text":"CloudKit","start":684470,"end":685150,"confidence":0.9477539,"speaker":"A"},{"text":"you","start":685390,"end":685670,"confidence":0.9995117,"speaker":"A"},{"text":"could","start":685670,"end":685830,"confidence":0.8930664,"speaker":"A"},{"text":"also","start":685830,"end":686030,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":686030,"end":686230,"confidence":1,"speaker":"A"},{"text":"this","start":686230,"end":686470,"confidence":1,"speaker":"A"},{"text":"using","start":686470,"end":686830,"confidence":1,"speaker":"A"},{"text":"a","start":687150,"end":687430,"confidence":0.94921875,"speaker":"A"},{"text":"schema","start":687430,"end":687910,"confidence":0.9895833,"speaker":"A"},{"text":"file","start":687910,"end":688270,"confidence":0.8520508,"speaker":"A"},{"text":"too.","start":688670,"end":689070,"confidence":0.8598633,"speaker":"A"},{"text":"And","start":689390,"end":689670,"confidence":0.99316406,"speaker":"A"},{"text":"you","start":689670,"end":689830,"confidence":0.98583984,"speaker":"A"},{"text":"can","start":689830,"end":689990,"confidence":0.6220703,"speaker":"A"},{"text":"export","start":689990,"end":690310,"confidence":0.9975586,"speaker":"A"},{"text":"and","start":690310,"end":690470,"confidence":0.9692383,"speaker":"A"},{"text":"import","start":690470,"end":690750,"confidence":0.9970703,"speaker":"A"},{"text":"your","start":690830,"end":691150,"confidence":0.99902344,"speaker":"A"},{"text":"schema","start":691150,"end":691710,"confidence":0.92041016,"speaker":"A"},{"text":"that","start":691710,"end":692030,"confidence":0.99658203,"speaker":"A"},{"text":"way.","start":692030,"end":692350,"confidence":0.9975586,"speaker":"A"},{"text":"And","start":693230,"end":693630,"confidence":0.98046875,"speaker":"A"},{"text":"it's","start":693630,"end":694070,"confidence":0.9996745,"speaker":"A"},{"text":"not","start":694070,"end":694350,"confidence":0.9980469,"speaker":"A"},{"text":"a","start":694590,"end":694870,"confidence":0.9321289,"speaker":"A"},{"text":"SQL","start":694870,"end":695190,"confidence":0.9423828,"speaker":"A"},{"text":"based","start":695190,"end":695430,"confidence":0.99902344,"speaker":"A"},{"text":"database,","start":695430,"end":696030,"confidence":0.9995117,"speaker":"A"},{"text":"it's","start":696030,"end":696270,"confidence":0.97802734,"speaker":"A"},{"text":"much","start":696270,"end":696470,"confidence":0.9980469,"speaker":"A"},{"text":"more,","start":696470,"end":696830,"confidence":0.9892578,"speaker":"A"},{"text":"no","start":697310,"end":697670,"confidence":0.9902344,"speaker":"A"},{"text":"sequel","start":697670,"end":698110,"confidence":0.8517253,"speaker":"A"},{"text":"ish","start":698110,"end":698430,"confidence":0.9033203,"speaker":"A"},{"text":"or","start":698430,"end":698630,"confidence":0.9995117,"speaker":"A"},{"text":"an","start":698630,"end":698830,"confidence":0.9770508,"speaker":"A"},{"text":"abstract","start":698830,"end":699350,"confidence":0.9822591,"speaker":"A"},{"text":"layer","start":699350,"end":699910,"confidence":0.99886066,"speaker":"A"},{"text":"above","start":699910,"end":700230,"confidence":0.98461914,"speaker":"A"},{"text":"it.","start":700230,"end":700510,"confidence":0.99609375,"speaker":"A"},{"text":"But","start":701400,"end":701560,"confidence":0.99658203,"speaker":"A"},{"text":"essentially","start":701560,"end":702240,"confidence":0.97021484,"speaker":"A"},{"text":"you","start":702240,"end":702600,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":702680,"end":703080,"confidence":0.9995117,"speaker":"A"},{"text":"create","start":703080,"end":703440,"confidence":0.9970703,"speaker":"A"},{"text":"records","start":703440,"end":704120,"confidence":0.99658203,"speaker":"A"},{"text":"kind","start":704520,"end":704800,"confidence":0.99658203,"speaker":"A"},{"text":"of","start":704800,"end":704920,"confidence":0.9970703,"speaker":"A"},{"text":"like","start":704920,"end":705040,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":705040,"end":705200,"confidence":0.9995117,"speaker":"A"},{"text":"table","start":705200,"end":705480,"confidence":0.9995117,"speaker":"A"},{"text":"but","start":705480,"end":705680,"confidence":0.99902344,"speaker":"A"},{"text":"not","start":705680,"end":705880,"confidence":0.99853516,"speaker":"A"},{"text":"quite","start":705880,"end":706280,"confidence":0.99853516,"speaker":"A"},{"text":"in","start":707000,"end":707280,"confidence":0.98339844,"speaker":"A"},{"text":"your","start":707280,"end":707520,"confidence":0.9970703,"speaker":"A"},{"text":"records.","start":707520,"end":708200,"confidence":0.9963379,"speaker":"A"},{"text":"You","start":709400,"end":709680,"confidence":0.99902344,"speaker":"A"},{"text":"can","start":709680,"end":709960,"confidence":0.9995117,"speaker":"A"},{"text":"create","start":710360,"end":710760,"confidence":0.9824219,"speaker":"A"},{"text":"a","start":711400,"end":711760,"confidence":0.9980469,"speaker":"A"},{"text":"struct","start":711760,"end":712240,"confidence":0.83862305,"speaker":"A"},{"text":"for","start":712240,"end":712480,"confidence":0.99902344,"speaker":"A"},{"text":"it.","start":712480,"end":712680,"confidence":0.9980469,"speaker":"A"}]},{"text":"You can just use CloudKit directly to go ahead and then you can then plug it into your app and do fun stuff like this. We can do things like queries and basic database stuff. There's a lot of advantages to it. For one, if you're doing Apple only, then it definitely makes sense to look into, at least look into CloudKit.","start":712680,"end":738080,"confidence":0.9995117,"words":[{"text":"You","start":712680,"end":712880,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":712880,"end":713040,"confidence":0.9995117,"speaker":"A"},{"text":"just","start":713040,"end":713240,"confidence":1,"speaker":"A"},{"text":"use","start":713240,"end":713560,"confidence":0.99902344,"speaker":"A"},{"text":"CloudKit","start":713960,"end":714600,"confidence":0.982666,"speaker":"A"},{"text":"directly","start":714600,"end":715120,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":715120,"end":715360,"confidence":0.9995117,"speaker":"A"},{"text":"go","start":715360,"end":715520,"confidence":0.9995117,"speaker":"A"},{"text":"ahead","start":715520,"end":715800,"confidence":0.99853516,"speaker":"A"},{"text":"and","start":716440,"end":716760,"confidence":0.9951172,"speaker":"A"},{"text":"then","start":716760,"end":717039,"confidence":0.99072266,"speaker":"A"},{"text":"you","start":717039,"end":717280,"confidence":0.98535156,"speaker":"A"},{"text":"can","start":717280,"end":717480,"confidence":0.88964844,"speaker":"A"},{"text":"then","start":717480,"end":717760,"confidence":0.78759766,"speaker":"A"},{"text":"plug","start":717760,"end":718080,"confidence":0.9995117,"speaker":"A"},{"text":"it","start":718080,"end":718240,"confidence":0.99902344,"speaker":"A"},{"text":"into","start":718240,"end":718440,"confidence":0.99902344,"speaker":"A"},{"text":"your","start":718440,"end":718680,"confidence":0.9995117,"speaker":"A"},{"text":"app","start":718680,"end":718920,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":718920,"end":719240,"confidence":0.9628906,"speaker":"A"},{"text":"do","start":719240,"end":719520,"confidence":0.9995117,"speaker":"A"},{"text":"fun","start":719520,"end":719760,"confidence":0.99853516,"speaker":"A"},{"text":"stuff","start":719760,"end":720040,"confidence":1,"speaker":"A"},{"text":"like","start":720040,"end":720200,"confidence":0.9995117,"speaker":"A"},{"text":"this.","start":720200,"end":720520,"confidence":0.9946289,"speaker":"A"},{"text":"We","start":721560,"end":721880,"confidence":0.44580078,"speaker":"A"},{"text":"can","start":721880,"end":722080,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":722080,"end":722240,"confidence":1,"speaker":"A"},{"text":"things","start":722240,"end":722440,"confidence":1,"speaker":"A"},{"text":"like","start":722440,"end":722760,"confidence":0.9995117,"speaker":"A"},{"text":"queries","start":722840,"end":723520,"confidence":0.9477539,"speaker":"A"},{"text":"and","start":723520,"end":723880,"confidence":0.8354492,"speaker":"A"},{"text":"basic","start":724840,"end":725280,"confidence":0.99975586,"speaker":"A"},{"text":"database","start":725280,"end":725800,"confidence":0.99869794,"speaker":"A"},{"text":"stuff.","start":725800,"end":726200,"confidence":0.9996745,"speaker":"A"},{"text":"There's","start":726200,"end":726640,"confidence":0.99153644,"speaker":"A"},{"text":"a","start":726640,"end":726760,"confidence":0.99902344,"speaker":"A"},{"text":"lot","start":726760,"end":726840,"confidence":1,"speaker":"A"},{"text":"of","start":726840,"end":726960,"confidence":0.99902344,"speaker":"A"},{"text":"advantages","start":726960,"end":727520,"confidence":0.9991862,"speaker":"A"},{"text":"to","start":727520,"end":727760,"confidence":0.99853516,"speaker":"A"},{"text":"it.","start":727760,"end":728040,"confidence":0.99658203,"speaker":"A"},{"text":"For","start":729280,"end":729440,"confidence":0.9794922,"speaker":"A"},{"text":"one,","start":729440,"end":729760,"confidence":0.9667969,"speaker":"A"},{"text":"if","start":730080,"end":730400,"confidence":0.9995117,"speaker":"A"},{"text":"you're","start":730400,"end":730880,"confidence":0.95996094,"speaker":"A"},{"text":"doing","start":730960,"end":731360,"confidence":0.99902344,"speaker":"A"},{"text":"Apple","start":731840,"end":732320,"confidence":1,"speaker":"A"},{"text":"only,","start":732320,"end":732640,"confidence":0.9995117,"speaker":"A"},{"text":"then","start":733600,"end":734000,"confidence":0.99658203,"speaker":"A"},{"text":"it","start":734000,"end":734280,"confidence":0.9995117,"speaker":"A"},{"text":"definitely","start":734280,"end":734680,"confidence":0.99938965,"speaker":"A"},{"text":"makes","start":734680,"end":734880,"confidence":0.9980469,"speaker":"A"},{"text":"sense","start":734880,"end":735280,"confidence":0.99975586,"speaker":"A"},{"text":"to","start":735520,"end":735840,"confidence":0.99853516,"speaker":"A"},{"text":"look","start":735840,"end":736120,"confidence":0.98046875,"speaker":"A"},{"text":"into,","start":736120,"end":736440,"confidence":0.53515625,"speaker":"A"},{"text":"at","start":736440,"end":736640,"confidence":0.9995117,"speaker":"A"},{"text":"least","start":736640,"end":736800,"confidence":0.9995117,"speaker":"A"},{"text":"look","start":736800,"end":737040,"confidence":0.99902344,"speaker":"A"},{"text":"into","start":737040,"end":737320,"confidence":0.99902344,"speaker":"A"},{"text":"CloudKit.","start":737320,"end":738080,"confidence":0.9995117,"speaker":"A"}]},{"text":"If you're just going to deploy to Apple Devices. If you don't mind the, the fact that it's not a regular SQL database, that's something too to think about. If you like need a SQL database, this might not be what you want. And then if you don't mind working with a lot of the abstraction layers that CloudKit provides, then this might be good for you to get started or especially if you don't have any database experience. So as far as like server choices, I would say CloudKit might not be your first choice, but it certainly is a decent choice if you're going the Apple only route.","start":742320,"end":784450,"confidence":0.9980469,"words":[{"text":"If","start":742320,"end":742600,"confidence":0.9980469,"speaker":"A"},{"text":"you're","start":742600,"end":742800,"confidence":0.9996745,"speaker":"A"},{"text":"just","start":742800,"end":742920,"confidence":0.9995117,"speaker":"A"},{"text":"going","start":742920,"end":743040,"confidence":0.92333984,"speaker":"A"},{"text":"to","start":743040,"end":743120,"confidence":0.99902344,"speaker":"A"},{"text":"deploy","start":743120,"end":743480,"confidence":1,"speaker":"A"},{"text":"to","start":743480,"end":743840,"confidence":0.99316406,"speaker":"A"},{"text":"Apple","start":744480,"end":744960,"confidence":0.99975586,"speaker":"A"},{"text":"Devices.","start":744960,"end":745440,"confidence":1,"speaker":"A"},{"text":"If","start":746080,"end":746440,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":746440,"end":746800,"confidence":0.9995117,"speaker":"A"},{"text":"don't","start":747120,"end":747560,"confidence":0.9637044,"speaker":"A"},{"text":"mind","start":747560,"end":747920,"confidence":0.9995117,"speaker":"A"},{"text":"the,","start":748320,"end":748720,"confidence":0.9042969,"speaker":"A"},{"text":"the","start":749920,"end":750200,"confidence":0.9995117,"speaker":"A"},{"text":"fact","start":750200,"end":750360,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":750360,"end":750520,"confidence":1,"speaker":"A"},{"text":"it's","start":750520,"end":750720,"confidence":0.9996745,"speaker":"A"},{"text":"not","start":750720,"end":750920,"confidence":0.84814453,"speaker":"A"},{"text":"a","start":750920,"end":751160,"confidence":0.5908203,"speaker":"A"},{"text":"regular","start":751160,"end":751560,"confidence":0.9992676,"speaker":"A"},{"text":"SQL","start":751560,"end":751960,"confidence":0.98860675,"speaker":"A"},{"text":"database,","start":751960,"end":752640,"confidence":0.9998372,"speaker":"A"},{"text":"that's","start":754050,"end":754210,"confidence":0.9980469,"speaker":"A"},{"text":"something","start":754210,"end":754410,"confidence":0.9995117,"speaker":"A"},{"text":"too","start":754410,"end":754650,"confidence":0.68408203,"speaker":"A"},{"text":"to","start":754650,"end":754810,"confidence":0.99853516,"speaker":"A"},{"text":"think","start":754810,"end":754930,"confidence":1,"speaker":"A"},{"text":"about.","start":754930,"end":755090,"confidence":0.9995117,"speaker":"A"},{"text":"If","start":755090,"end":755290,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":755290,"end":755450,"confidence":1,"speaker":"A"},{"text":"like","start":755450,"end":755610,"confidence":0.92333984,"speaker":"A"},{"text":"need","start":755610,"end":755770,"confidence":0.9848633,"speaker":"A"},{"text":"a","start":755770,"end":755890,"confidence":0.9926758,"speaker":"A"},{"text":"SQL","start":755890,"end":756210,"confidence":0.96533203,"speaker":"A"},{"text":"database,","start":756210,"end":756650,"confidence":0.98063153,"speaker":"A"},{"text":"this","start":756650,"end":756850,"confidence":0.97998047,"speaker":"A"},{"text":"might","start":756850,"end":757050,"confidence":1,"speaker":"A"},{"text":"not","start":757050,"end":757210,"confidence":0.9995117,"speaker":"A"},{"text":"be","start":757210,"end":757490,"confidence":1,"speaker":"A"},{"text":"what","start":757730,"end":758050,"confidence":0.9819336,"speaker":"A"},{"text":"you","start":758050,"end":758370,"confidence":0.9995117,"speaker":"A"},{"text":"want.","start":758370,"end":758770,"confidence":0.9926758,"speaker":"A"},{"text":"And","start":759410,"end":759690,"confidence":0.95654297,"speaker":"A"},{"text":"then","start":759690,"end":759890,"confidence":0.9819336,"speaker":"A"},{"text":"if","start":759890,"end":760050,"confidence":1,"speaker":"A"},{"text":"you","start":760050,"end":760170,"confidence":1,"speaker":"A"},{"text":"don't","start":760170,"end":760370,"confidence":1,"speaker":"A"},{"text":"mind","start":760370,"end":760530,"confidence":1,"speaker":"A"},{"text":"working","start":760530,"end":760770,"confidence":1,"speaker":"A"},{"text":"with","start":760770,"end":761010,"confidence":0.9848633,"speaker":"A"},{"text":"a","start":761010,"end":761170,"confidence":0.99902344,"speaker":"A"},{"text":"lot","start":761170,"end":761290,"confidence":1,"speaker":"A"},{"text":"of","start":761290,"end":761410,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":761410,"end":761530,"confidence":0.9995117,"speaker":"A"},{"text":"abstraction","start":761530,"end":762130,"confidence":0.9991455,"speaker":"A"},{"text":"layers","start":762130,"end":762610,"confidence":0.99934894,"speaker":"A"},{"text":"that","start":763010,"end":763330,"confidence":0.99853516,"speaker":"A"},{"text":"CloudKit","start":763330,"end":763970,"confidence":0.99902344,"speaker":"A"},{"text":"provides,","start":763970,"end":764610,"confidence":0.9995117,"speaker":"A"},{"text":"then","start":766930,"end":767330,"confidence":0.99658203,"speaker":"A"},{"text":"this","start":767650,"end":767970,"confidence":0.9995117,"speaker":"A"},{"text":"might","start":767970,"end":768170,"confidence":0.99609375,"speaker":"A"},{"text":"be","start":768170,"end":768370,"confidence":1,"speaker":"A"},{"text":"good","start":768370,"end":768530,"confidence":1,"speaker":"A"},{"text":"for","start":768530,"end":768650,"confidence":0.87402344,"speaker":"A"},{"text":"you","start":768650,"end":768850,"confidence":1,"speaker":"A"},{"text":"to","start":768850,"end":769050,"confidence":1,"speaker":"A"},{"text":"get","start":769050,"end":769210,"confidence":1,"speaker":"A"},{"text":"started","start":769210,"end":769490,"confidence":0.9995117,"speaker":"A"},{"text":"or","start":770050,"end":770410,"confidence":0.99658203,"speaker":"A"},{"text":"especially","start":770410,"end":770730,"confidence":0.9995117,"speaker":"A"},{"text":"if","start":770730,"end":770930,"confidence":1,"speaker":"A"},{"text":"you","start":770930,"end":771050,"confidence":1,"speaker":"A"},{"text":"don't","start":771050,"end":771250,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":771250,"end":771370,"confidence":1,"speaker":"A"},{"text":"any","start":771370,"end":771570,"confidence":0.9995117,"speaker":"A"},{"text":"database","start":771570,"end":772130,"confidence":0.9998372,"speaker":"A"},{"text":"experience.","start":772130,"end":772450,"confidence":0.9995117,"speaker":"A"},{"text":"So","start":774130,"end":774410,"confidence":0.99316406,"speaker":"A"},{"text":"as","start":774410,"end":774570,"confidence":0.9995117,"speaker":"A"},{"text":"far","start":774570,"end":774730,"confidence":1,"speaker":"A"},{"text":"as","start":774730,"end":774930,"confidence":1,"speaker":"A"},{"text":"like","start":774930,"end":775250,"confidence":0.9770508,"speaker":"A"},{"text":"server","start":775570,"end":776090,"confidence":0.99975586,"speaker":"A"},{"text":"choices,","start":776090,"end":776650,"confidence":0.98291016,"speaker":"A"},{"text":"I","start":776650,"end":776850,"confidence":0.9995117,"speaker":"A"},{"text":"would","start":776850,"end":777010,"confidence":1,"speaker":"A"},{"text":"say","start":777010,"end":777290,"confidence":1,"speaker":"A"},{"text":"CloudKit","start":777290,"end":777970,"confidence":0.9926758,"speaker":"A"},{"text":"might","start":777970,"end":778170,"confidence":0.99365234,"speaker":"A"},{"text":"not","start":778170,"end":778330,"confidence":0.57714844,"speaker":"A"},{"text":"be","start":778330,"end":778490,"confidence":1,"speaker":"A"},{"text":"your","start":778490,"end":778690,"confidence":1,"speaker":"A"},{"text":"first","start":778690,"end":778930,"confidence":0.9995117,"speaker":"A"},{"text":"choice,","start":778930,"end":779330,"confidence":0.99975586,"speaker":"A"},{"text":"but","start":779970,"end":780090,"confidence":0.9970703,"speaker":"A"},{"text":"it","start":780090,"end":780250,"confidence":0.99902344,"speaker":"A"},{"text":"certainly","start":780250,"end":780610,"confidence":1,"speaker":"A"},{"text":"is","start":780610,"end":780930,"confidence":1,"speaker":"A"},{"text":"a","start":780930,"end":781210,"confidence":0.9995117,"speaker":"A"},{"text":"decent","start":781210,"end":781570,"confidence":1,"speaker":"A"},{"text":"choice","start":781570,"end":781970,"confidence":0.99975586,"speaker":"A"},{"text":"if","start":782290,"end":782610,"confidence":0.6225586,"speaker":"A"},{"text":"you're","start":782610,"end":782890,"confidence":0.9943034,"speaker":"A"},{"text":"going","start":782890,"end":783090,"confidence":0.99853516,"speaker":"A"},{"text":"the","start":783090,"end":783290,"confidence":0.9145508,"speaker":"A"},{"text":"Apple","start":783290,"end":783650,"confidence":0.9995117,"speaker":"A"},{"text":"only","start":783650,"end":783970,"confidence":0.9995117,"speaker":"A"},{"text":"route.","start":783970,"end":784450,"confidence":0.9938965,"speaker":"A"}]},{"text":"But then the question comes in, why would you want Cloud server side CloudKit? Why would you want to do anything with CloudKit on the server? So here's, here's the first case. Well, this is how you can go ahead and do that is they provide actually a REST API for calls to CloudKit using the, if you go to the documentation, I'll provide a link to that CloudKit Web Services which provides a lot of the documentation for what we'll be talking about today. A lot of this is abstracted out in the JavaScript library.","start":789970,"end":823790,"confidence":0.99658203,"words":[{"text":"But","start":789970,"end":790250,"confidence":0.99658203,"speaker":"A"},{"text":"then","start":790250,"end":790410,"confidence":1,"speaker":"A"},{"text":"the","start":790410,"end":790530,"confidence":1,"speaker":"A"},{"text":"question","start":790530,"end":790730,"confidence":1,"speaker":"A"},{"text":"comes","start":790730,"end":791010,"confidence":0.9951172,"speaker":"A"},{"text":"in,","start":791010,"end":791250,"confidence":0.97216797,"speaker":"A"},{"text":"why","start":791250,"end":791450,"confidence":1,"speaker":"A"},{"text":"would","start":791450,"end":791610,"confidence":1,"speaker":"A"},{"text":"you","start":791610,"end":791770,"confidence":1,"speaker":"A"},{"text":"want","start":791770,"end":792010,"confidence":0.99902344,"speaker":"A"},{"text":"Cloud","start":792010,"end":792450,"confidence":0.954834,"speaker":"A"},{"text":"server","start":792450,"end":792850,"confidence":0.98461914,"speaker":"A"},{"text":"side","start":792850,"end":793050,"confidence":0.55859375,"speaker":"A"},{"text":"CloudKit?","start":793050,"end":793730,"confidence":0.98095703,"speaker":"A"},{"text":"Why","start":793890,"end":794170,"confidence":1,"speaker":"A"},{"text":"would","start":794170,"end":794330,"confidence":1,"speaker":"A"},{"text":"you","start":794330,"end":794490,"confidence":1,"speaker":"A"},{"text":"want","start":794490,"end":794610,"confidence":0.9941406,"speaker":"A"},{"text":"to","start":794610,"end":794690,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":794690,"end":794810,"confidence":1,"speaker":"A"},{"text":"anything","start":794810,"end":795090,"confidence":1,"speaker":"A"},{"text":"with","start":795090,"end":795250,"confidence":0.9995117,"speaker":"A"},{"text":"CloudKit","start":795250,"end":795810,"confidence":0.9885254,"speaker":"A"},{"text":"on","start":795810,"end":796009,"confidence":0.9980469,"speaker":"A"},{"text":"the","start":796009,"end":796170,"confidence":0.9995117,"speaker":"A"},{"text":"server?","start":796170,"end":796610,"confidence":1,"speaker":"A"},{"text":"So","start":797970,"end":798250,"confidence":0.99316406,"speaker":"A"},{"text":"here's,","start":798250,"end":798610,"confidence":0.9793294,"speaker":"A"},{"text":"here's","start":798610,"end":799090,"confidence":0.9996745,"speaker":"A"},{"text":"the","start":799250,"end":799530,"confidence":0.9995117,"speaker":"A"},{"text":"first","start":799530,"end":799810,"confidence":0.9995117,"speaker":"A"},{"text":"case.","start":799890,"end":800290,"confidence":0.9995117,"speaker":"A"},{"text":"Well,","start":800690,"end":801090,"confidence":0.96533203,"speaker":"A"},{"text":"this","start":801250,"end":801530,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":801530,"end":801690,"confidence":1,"speaker":"A"},{"text":"how","start":801690,"end":801890,"confidence":1,"speaker":"A"},{"text":"you","start":801890,"end":802090,"confidence":1,"speaker":"A"},{"text":"can","start":802090,"end":802290,"confidence":0.9995117,"speaker":"A"},{"text":"go","start":802290,"end":802490,"confidence":0.9995117,"speaker":"A"},{"text":"ahead","start":802490,"end":802650,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":802650,"end":802850,"confidence":0.97216797,"speaker":"A"},{"text":"do","start":802850,"end":803050,"confidence":1,"speaker":"A"},{"text":"that","start":803050,"end":803250,"confidence":0.99902344,"speaker":"A"},{"text":"is","start":803250,"end":803570,"confidence":0.90234375,"speaker":"A"},{"text":"they","start":803970,"end":804330,"confidence":0.99902344,"speaker":"A"},{"text":"provide","start":804330,"end":804690,"confidence":1,"speaker":"A"},{"text":"actually","start":804690,"end":805050,"confidence":0.9980469,"speaker":"A"},{"text":"a","start":805050,"end":805290,"confidence":0.91259766,"speaker":"A"},{"text":"REST","start":805290,"end":805490,"confidence":0.9995117,"speaker":"A"},{"text":"API","start":805490,"end":806090,"confidence":0.95166016,"speaker":"A"},{"text":"for","start":806090,"end":806450,"confidence":0.9946289,"speaker":"A"},{"text":"calls","start":806450,"end":806930,"confidence":0.9992676,"speaker":"A"},{"text":"to","start":806930,"end":807170,"confidence":0.9970703,"speaker":"A"},{"text":"CloudKit","start":807170,"end":807880,"confidence":0.9848633,"speaker":"A"},{"text":"using","start":808910,"end":809150,"confidence":0.95654297,"speaker":"A"},{"text":"the,","start":809310,"end":809710,"confidence":0.98828125,"speaker":"A"},{"text":"if","start":809950,"end":810230,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":810230,"end":810350,"confidence":1,"speaker":"A"},{"text":"go","start":810350,"end":810430,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":810430,"end":810550,"confidence":0.99853516,"speaker":"A"},{"text":"the","start":810550,"end":810670,"confidence":0.9995117,"speaker":"A"},{"text":"documentation,","start":810670,"end":811350,"confidence":0.99902344,"speaker":"A"},{"text":"I'll","start":811350,"end":811670,"confidence":0.99820966,"speaker":"A"},{"text":"provide","start":811670,"end":811910,"confidence":0.99658203,"speaker":"A"},{"text":"a","start":811910,"end":812110,"confidence":0.9067383,"speaker":"A"},{"text":"link","start":812110,"end":812350,"confidence":0.9992676,"speaker":"A"},{"text":"to","start":812350,"end":812550,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":812550,"end":812830,"confidence":0.8276367,"speaker":"A"},{"text":"CloudKit","start":812910,"end":813590,"confidence":0.87280273,"speaker":"A"},{"text":"Web","start":813590,"end":813830,"confidence":0.99658203,"speaker":"A"},{"text":"Services","start":813830,"end":814110,"confidence":0.9995117,"speaker":"A"},{"text":"which","start":815310,"end":815710,"confidence":0.99902344,"speaker":"A"},{"text":"provides","start":816510,"end":816990,"confidence":0.99975586,"speaker":"A"},{"text":"a","start":816990,"end":817070,"confidence":0.9995117,"speaker":"A"},{"text":"lot","start":817070,"end":817190,"confidence":1,"speaker":"A"},{"text":"of","start":817190,"end":817310,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":817310,"end":817430,"confidence":0.9980469,"speaker":"A"},{"text":"documentation","start":817430,"end":818070,"confidence":0.9998047,"speaker":"A"},{"text":"for","start":818070,"end":818270,"confidence":0.9995117,"speaker":"A"},{"text":"what","start":818270,"end":818390,"confidence":0.99902344,"speaker":"A"},{"text":"we'll","start":818390,"end":818630,"confidence":0.8699544,"speaker":"A"},{"text":"be","start":818630,"end":818790,"confidence":1,"speaker":"A"},{"text":"talking","start":818790,"end":819030,"confidence":0.97631836,"speaker":"A"},{"text":"about","start":819030,"end":819230,"confidence":0.9995117,"speaker":"A"},{"text":"today.","start":819230,"end":819550,"confidence":0.99902344,"speaker":"A"},{"text":"A","start":820910,"end":821150,"confidence":0.99658203,"speaker":"A"},{"text":"lot","start":821150,"end":821270,"confidence":1,"speaker":"A"},{"text":"of","start":821270,"end":821430,"confidence":0.9995117,"speaker":"A"},{"text":"this","start":821430,"end":821590,"confidence":0.99902344,"speaker":"A"},{"text":"is","start":821590,"end":821790,"confidence":0.99853516,"speaker":"A"},{"text":"abstracted","start":821790,"end":822390,"confidence":0.88964844,"speaker":"A"},{"text":"out","start":822390,"end":822550,"confidence":0.99902344,"speaker":"A"},{"text":"in","start":822550,"end":822670,"confidence":0.9980469,"speaker":"A"},{"text":"the","start":822670,"end":822750,"confidence":0.9995117,"speaker":"A"},{"text":"JavaScript","start":822750,"end":823350,"confidence":0.99698895,"speaker":"A"},{"text":"library.","start":823350,"end":823790,"confidence":0.9916992,"speaker":"A"}]},{"text":"So if you want to do stuff on a website, they provide a CloudKit JavaScript library for that. Sorry, just going into do not disturb mode.","start":823870,"end":839230,"confidence":0.9838867,"words":[{"text":"So","start":823870,"end":824109,"confidence":0.9838867,"speaker":"A"},{"text":"if","start":824109,"end":824230,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":824230,"end":824350,"confidence":1,"speaker":"A"},{"text":"want","start":824350,"end":824510,"confidence":0.95166016,"speaker":"A"},{"text":"to","start":824510,"end":824670,"confidence":0.9980469,"speaker":"A"},{"text":"do","start":824670,"end":824790,"confidence":0.9995117,"speaker":"A"},{"text":"stuff","start":824790,"end":824990,"confidence":1,"speaker":"A"},{"text":"on","start":824990,"end":825110,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":825110,"end":825270,"confidence":0.98828125,"speaker":"A"},{"text":"website,","start":825270,"end":825550,"confidence":0.99609375,"speaker":"A"},{"text":"they","start":826430,"end":826790,"confidence":0.9995117,"speaker":"A"},{"text":"provide","start":826790,"end":827150,"confidence":1,"speaker":"A"},{"text":"a","start":827230,"end":827630,"confidence":0.99853516,"speaker":"A"},{"text":"CloudKit","start":827790,"end":828590,"confidence":0.99438477,"speaker":"A"},{"text":"JavaScript","start":828590,"end":829390,"confidence":0.9239909,"speaker":"A"},{"text":"library","start":830270,"end":830830,"confidence":0.9996745,"speaker":"A"},{"text":"for","start":830830,"end":831110,"confidence":0.99853516,"speaker":"A"},{"text":"that.","start":831110,"end":831470,"confidence":0.99609375,"speaker":"A"},{"text":"Sorry,","start":833150,"end":833710,"confidence":0.8925781,"speaker":"A"},{"text":"just","start":836190,"end":836310,"confidence":0.93847656,"speaker":"A"},{"text":"going","start":836310,"end":836510,"confidence":0.9814453,"speaker":"A"},{"text":"into","start":836510,"end":836790,"confidence":0.9121094,"speaker":"A"},{"text":"do","start":836790,"end":837030,"confidence":0.99560547,"speaker":"A"},{"text":"not","start":837030,"end":837230,"confidence":0.99902344,"speaker":"A"},{"text":"disturb","start":837230,"end":837870,"confidence":0.87369794,"speaker":"A"},{"text":"mode.","start":838670,"end":839230,"confidence":0.73999023,"speaker":"A"}]},{"text":"They even in that web references documentation they provide a composing web service request and all these instructions about how to go ahead and do that. So man, was it like half a decade ago that I built Heart Twitch and at the time I don't think there was anything, there was anything like sign in with Apple even. And like I really didn't want like to explain how harshwitch works is you have like a watch and it will send the heart rate to the server and then the server will then use a web socket to push it out to a web page. And then you would point OBS or some sort of streaming software to the URL or to the browser window and then that way you can stream your heart rate. That's how it works.","start":847950,"end":900860,"confidence":0.9404297,"words":[{"text":"They","start":847950,"end":848270,"confidence":0.9404297,"speaker":"A"},{"text":"even","start":848270,"end":848590,"confidence":0.7373047,"speaker":"A"},{"text":"in","start":848750,"end":849030,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":849030,"end":849270,"confidence":0.99902344,"speaker":"A"},{"text":"web","start":849270,"end":849710,"confidence":0.9995117,"speaker":"A"},{"text":"references","start":849790,"end":850429,"confidence":0.9367676,"speaker":"A"},{"text":"documentation","start":850430,"end":851070,"confidence":0.97734374,"speaker":"A"},{"text":"they","start":851070,"end":851270,"confidence":0.9980469,"speaker":"A"},{"text":"provide","start":851270,"end":851510,"confidence":1,"speaker":"A"},{"text":"a","start":851510,"end":851710,"confidence":0.8413086,"speaker":"A"},{"text":"composing","start":851710,"end":852150,"confidence":0.92008466,"speaker":"A"},{"text":"web","start":852150,"end":852390,"confidence":0.998291,"speaker":"A"},{"text":"service","start":852390,"end":852630,"confidence":0.99902344,"speaker":"A"},{"text":"request","start":852630,"end":853150,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":853470,"end":853750,"confidence":0.9970703,"speaker":"A"},{"text":"all","start":853750,"end":853910,"confidence":0.9995117,"speaker":"A"},{"text":"these","start":853910,"end":854110,"confidence":0.99902344,"speaker":"A"},{"text":"instructions","start":854110,"end":854670,"confidence":0.9996745,"speaker":"A"},{"text":"about","start":854670,"end":854910,"confidence":1,"speaker":"A"},{"text":"how","start":854910,"end":855070,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":855070,"end":855190,"confidence":1,"speaker":"A"},{"text":"go","start":855190,"end":855310,"confidence":1,"speaker":"A"},{"text":"ahead","start":855310,"end":855470,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":855470,"end":855670,"confidence":1,"speaker":"A"},{"text":"do","start":855670,"end":855830,"confidence":1,"speaker":"A"},{"text":"that.","start":855830,"end":856110,"confidence":1,"speaker":"A"},{"text":"So","start":857470,"end":857870,"confidence":0.98876953,"speaker":"A"},{"text":"man,","start":858270,"end":858590,"confidence":0.9482422,"speaker":"A"},{"text":"was","start":858590,"end":858790,"confidence":0.99853516,"speaker":"A"},{"text":"it","start":858790,"end":858950,"confidence":0.9277344,"speaker":"A"},{"text":"like","start":858950,"end":859110,"confidence":0.9941406,"speaker":"A"},{"text":"half","start":859110,"end":859310,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":859310,"end":859470,"confidence":0.99902344,"speaker":"A"},{"text":"decade","start":859470,"end":859790,"confidence":0.99975586,"speaker":"A"},{"text":"ago","start":859790,"end":860110,"confidence":1,"speaker":"A"},{"text":"that","start":860880,"end":861120,"confidence":0.97216797,"speaker":"A"},{"text":"I","start":861280,"end":861680,"confidence":0.97314453,"speaker":"A"},{"text":"built","start":862960,"end":863320,"confidence":0.99153644,"speaker":"A"},{"text":"Heart","start":863320,"end":863520,"confidence":0.8129883,"speaker":"A"},{"text":"Twitch","start":863520,"end":864000,"confidence":0.98999023,"speaker":"A"},{"text":"and","start":864480,"end":864880,"confidence":0.9814453,"speaker":"A"},{"text":"at","start":865360,"end":865640,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":865640,"end":865840,"confidence":0.99853516,"speaker":"A"},{"text":"time","start":865840,"end":866080,"confidence":1,"speaker":"A"},{"text":"I","start":866080,"end":866280,"confidence":1,"speaker":"A"},{"text":"don't","start":866280,"end":866520,"confidence":0.99934894,"speaker":"A"},{"text":"think","start":866520,"end":866720,"confidence":1,"speaker":"A"},{"text":"there","start":866720,"end":866960,"confidence":0.99365234,"speaker":"A"},{"text":"was","start":866960,"end":867280,"confidence":0.9995117,"speaker":"A"},{"text":"anything,","start":867440,"end":868080,"confidence":0.99975586,"speaker":"A"},{"text":"there","start":870080,"end":870360,"confidence":0.99658203,"speaker":"A"},{"text":"was","start":870360,"end":870560,"confidence":0.99902344,"speaker":"A"},{"text":"anything","start":870560,"end":870960,"confidence":0.99975586,"speaker":"A"},{"text":"like","start":870960,"end":871200,"confidence":0.99902344,"speaker":"A"},{"text":"sign","start":871200,"end":871440,"confidence":0.99658203,"speaker":"A"},{"text":"in","start":871440,"end":871640,"confidence":0.9819336,"speaker":"A"},{"text":"with","start":871640,"end":871800,"confidence":1,"speaker":"A"},{"text":"Apple","start":871800,"end":872160,"confidence":0.9995117,"speaker":"A"},{"text":"even.","start":872160,"end":872480,"confidence":0.9970703,"speaker":"A"},{"text":"And","start":872880,"end":873280,"confidence":0.97265625,"speaker":"A"},{"text":"like","start":873520,"end":873840,"confidence":0.9399414,"speaker":"A"},{"text":"I","start":873840,"end":874160,"confidence":0.9995117,"speaker":"A"},{"text":"really","start":874160,"end":874560,"confidence":0.99902344,"speaker":"A"},{"text":"didn't","start":875120,"end":875640,"confidence":0.99348956,"speaker":"A"},{"text":"want","start":875640,"end":875920,"confidence":0.9995117,"speaker":"A"},{"text":"like","start":876880,"end":877280,"confidence":0.9794922,"speaker":"A"},{"text":"to","start":878160,"end":878480,"confidence":0.98291016,"speaker":"A"},{"text":"explain","start":878480,"end":878760,"confidence":0.99853516,"speaker":"A"},{"text":"how","start":878760,"end":878920,"confidence":0.9995117,"speaker":"A"},{"text":"harshwitch","start":878920,"end":879520,"confidence":0.62939453,"speaker":"A"},{"text":"works","start":879520,"end":879800,"confidence":0.99975586,"speaker":"A"},{"text":"is","start":879800,"end":879960,"confidence":0.91064453,"speaker":"A"},{"text":"you","start":879960,"end":880120,"confidence":0.99853516,"speaker":"A"},{"text":"have","start":880120,"end":880320,"confidence":1,"speaker":"A"},{"text":"like","start":880320,"end":880520,"confidence":0.9902344,"speaker":"A"},{"text":"a","start":880520,"end":880680,"confidence":0.9995117,"speaker":"A"},{"text":"watch","start":880680,"end":880960,"confidence":0.99902344,"speaker":"A"},{"text":"and","start":881360,"end":881720,"confidence":0.6225586,"speaker":"A"},{"text":"it","start":881720,"end":881960,"confidence":0.9995117,"speaker":"A"},{"text":"will","start":881960,"end":882200,"confidence":0.9995117,"speaker":"A"},{"text":"send","start":882200,"end":882600,"confidence":0.9291992,"speaker":"A"},{"text":"the","start":882600,"end":882840,"confidence":0.9995117,"speaker":"A"},{"text":"heart","start":882840,"end":883040,"confidence":0.9995117,"speaker":"A"},{"text":"rate","start":883040,"end":883280,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":883280,"end":883480,"confidence":1,"speaker":"A"},{"text":"the","start":883480,"end":883640,"confidence":1,"speaker":"A"},{"text":"server","start":883640,"end":884160,"confidence":0.99975586,"speaker":"A"},{"text":"and","start":885360,"end":885640,"confidence":0.9921875,"speaker":"A"},{"text":"then","start":885640,"end":885920,"confidence":0.9926758,"speaker":"A"},{"text":"the","start":887020,"end":887180,"confidence":0.99658203,"speaker":"A"},{"text":"server","start":887180,"end":887580,"confidence":1,"speaker":"A"},{"text":"will","start":887580,"end":887780,"confidence":0.99902344,"speaker":"A"},{"text":"then","start":887780,"end":888020,"confidence":0.9995117,"speaker":"A"},{"text":"use","start":888020,"end":888260,"confidence":1,"speaker":"A"},{"text":"a","start":888260,"end":888420,"confidence":0.99853516,"speaker":"A"},{"text":"web","start":888420,"end":888660,"confidence":0.7871094,"speaker":"A"},{"text":"socket","start":888660,"end":889180,"confidence":0.9996745,"speaker":"A"},{"text":"to","start":889180,"end":889540,"confidence":0.9995117,"speaker":"A"},{"text":"push","start":889540,"end":889860,"confidence":1,"speaker":"A"},{"text":"it","start":889860,"end":890020,"confidence":0.99902344,"speaker":"A"},{"text":"out","start":890020,"end":890180,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":890180,"end":890340,"confidence":1,"speaker":"A"},{"text":"a","start":890340,"end":890500,"confidence":0.99853516,"speaker":"A"},{"text":"web","start":890500,"end":890740,"confidence":0.99975586,"speaker":"A"},{"text":"page.","start":890740,"end":891100,"confidence":0.84643555,"speaker":"A"},{"text":"And","start":892060,"end":892340,"confidence":0.97558594,"speaker":"A"},{"text":"then","start":892340,"end":892620,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":892620,"end":892900,"confidence":0.99902344,"speaker":"A"},{"text":"would","start":892900,"end":893180,"confidence":0.9838867,"speaker":"A"},{"text":"point","start":893500,"end":893900,"confidence":0.9926758,"speaker":"A"},{"text":"OBS","start":893980,"end":894380,"confidence":0.9897461,"speaker":"A"},{"text":"or","start":894540,"end":894780,"confidence":0.99072266,"speaker":"A"},{"text":"some","start":894780,"end":894900,"confidence":0.9995117,"speaker":"A"},{"text":"sort","start":894900,"end":895100,"confidence":0.9926758,"speaker":"A"},{"text":"of","start":895100,"end":895260,"confidence":0.53027344,"speaker":"A"},{"text":"streaming","start":895260,"end":895700,"confidence":0.91813153,"speaker":"A"},{"text":"software","start":895700,"end":896020,"confidence":0.9998779,"speaker":"A"},{"text":"to","start":896020,"end":896180,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":896180,"end":896340,"confidence":1,"speaker":"A"},{"text":"URL","start":896340,"end":896860,"confidence":0.99487305,"speaker":"A"},{"text":"or","start":896860,"end":897060,"confidence":0.9980469,"speaker":"A"},{"text":"to","start":897060,"end":897220,"confidence":0.99609375,"speaker":"A"},{"text":"the","start":897220,"end":897340,"confidence":1,"speaker":"A"},{"text":"browser","start":897340,"end":897700,"confidence":0.9983724,"speaker":"A"},{"text":"window","start":897700,"end":898060,"confidence":1,"speaker":"A"},{"text":"and","start":898060,"end":898220,"confidence":0.99072266,"speaker":"A"},{"text":"then","start":898220,"end":898380,"confidence":0.8310547,"speaker":"A"},{"text":"that","start":898380,"end":898580,"confidence":0.9995117,"speaker":"A"},{"text":"way","start":898580,"end":898740,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":898740,"end":898860,"confidence":1,"speaker":"A"},{"text":"can","start":898860,"end":898980,"confidence":0.9995117,"speaker":"A"},{"text":"stream","start":898980,"end":899260,"confidence":0.99609375,"speaker":"A"},{"text":"your","start":899260,"end":899460,"confidence":0.99853516,"speaker":"A"},{"text":"heart","start":899460,"end":899660,"confidence":0.9980469,"speaker":"A"},{"text":"rate.","start":899660,"end":899940,"confidence":0.9951172,"speaker":"A"},{"text":"That's","start":899940,"end":900220,"confidence":0.9996745,"speaker":"A"},{"text":"how","start":900220,"end":900300,"confidence":0.9995117,"speaker":"A"},{"text":"it","start":900300,"end":900420,"confidence":0.99853516,"speaker":"A"},{"text":"works.","start":900420,"end":900860,"confidence":0.9946289,"speaker":"A"}]},{"text":"And what I really didn't want is a difficult way for a user to log in with a username and password on the watch because we all know typing on the watch is hell. So my, my thought was like, and I didn't have sign in with Apple, right? So my thought was why don't we use CloudKit? Because you're already signed in a CloudKit on the Watch with your, your id.","start":901500,"end":924080,"confidence":0.9711914,"words":[{"text":"And","start":901500,"end":901780,"confidence":0.9711914,"speaker":"A"},{"text":"what","start":901780,"end":901940,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":901940,"end":902100,"confidence":1,"speaker":"A"},{"text":"really","start":902100,"end":902339,"confidence":0.9995117,"speaker":"A"},{"text":"didn't","start":902339,"end":902659,"confidence":0.9980469,"speaker":"A"},{"text":"want","start":902659,"end":902900,"confidence":1,"speaker":"A"},{"text":"is","start":902900,"end":903180,"confidence":0.99902344,"speaker":"A"},{"text":"a","start":903180,"end":903500,"confidence":0.9711914,"speaker":"A"},{"text":"difficult","start":903500,"end":903980,"confidence":0.9699707,"speaker":"A"},{"text":"way","start":903980,"end":904180,"confidence":0.9995117,"speaker":"A"},{"text":"for","start":904180,"end":904380,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":904380,"end":904580,"confidence":0.8876953,"speaker":"A"},{"text":"user","start":904580,"end":904900,"confidence":1,"speaker":"A"},{"text":"to","start":904900,"end":905100,"confidence":0.9995117,"speaker":"A"},{"text":"log","start":905100,"end":905420,"confidence":1,"speaker":"A"},{"text":"in","start":905420,"end":905820,"confidence":0.9838867,"speaker":"A"},{"text":"with","start":906540,"end":906820,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":906820,"end":906980,"confidence":0.7949219,"speaker":"A"},{"text":"username","start":906980,"end":907500,"confidence":0.9975586,"speaker":"A"},{"text":"and","start":907500,"end":907620,"confidence":0.99902344,"speaker":"A"},{"text":"password","start":907620,"end":908020,"confidence":0.90152997,"speaker":"A"},{"text":"on","start":908020,"end":908180,"confidence":0.6225586,"speaker":"A"},{"text":"the","start":908180,"end":908340,"confidence":0.9995117,"speaker":"A"},{"text":"watch","start":908340,"end":908620,"confidence":0.9995117,"speaker":"A"},{"text":"because","start":908620,"end":908900,"confidence":0.72558594,"speaker":"A"},{"text":"we","start":908900,"end":909020,"confidence":0.9995117,"speaker":"A"},{"text":"all","start":909020,"end":909140,"confidence":0.99902344,"speaker":"A"},{"text":"know","start":909140,"end":909300,"confidence":0.9980469,"speaker":"A"},{"text":"typing","start":909300,"end":909620,"confidence":0.8249512,"speaker":"A"},{"text":"on","start":909620,"end":909740,"confidence":0.9921875,"speaker":"A"},{"text":"the","start":909740,"end":909820,"confidence":0.9951172,"speaker":"A"},{"text":"watch","start":909820,"end":910020,"confidence":0.99902344,"speaker":"A"},{"text":"is","start":910020,"end":910380,"confidence":0.84472656,"speaker":"A"},{"text":"hell.","start":910780,"end":911260,"confidence":0.9157715,"speaker":"A"},{"text":"So","start":911900,"end":912300,"confidence":0.9770508,"speaker":"A"},{"text":"my,","start":912460,"end":912860,"confidence":0.70410156,"speaker":"A"},{"text":"my","start":912860,"end":913140,"confidence":0.9995117,"speaker":"A"},{"text":"thought","start":913140,"end":913340,"confidence":0.99902344,"speaker":"A"},{"text":"was","start":913340,"end":913620,"confidence":0.99853516,"speaker":"A"},{"text":"like,","start":913620,"end":913980,"confidence":0.9897461,"speaker":"A"},{"text":"and","start":914320,"end":914480,"confidence":0.6791992,"speaker":"A"},{"text":"I","start":914480,"end":914680,"confidence":1,"speaker":"A"},{"text":"didn't","start":914680,"end":914920,"confidence":0.9996745,"speaker":"A"},{"text":"have","start":914920,"end":915200,"confidence":0.9921875,"speaker":"A"},{"text":"sign","start":915280,"end":915600,"confidence":0.8886719,"speaker":"A"},{"text":"in","start":915600,"end":915800,"confidence":0.59814453,"speaker":"A"},{"text":"with","start":915800,"end":915960,"confidence":1,"speaker":"A"},{"text":"Apple,","start":915960,"end":916280,"confidence":1,"speaker":"A"},{"text":"right?","start":916280,"end":916560,"confidence":0.9970703,"speaker":"A"},{"text":"So","start":917440,"end":917720,"confidence":0.9995117,"speaker":"A"},{"text":"my","start":917720,"end":917880,"confidence":0.99902344,"speaker":"A"},{"text":"thought","start":917880,"end":918080,"confidence":0.9995117,"speaker":"A"},{"text":"was","start":918080,"end":918320,"confidence":0.99902344,"speaker":"A"},{"text":"why","start":918320,"end":918520,"confidence":1,"speaker":"A"},{"text":"don't","start":918520,"end":918720,"confidence":0.9972331,"speaker":"A"},{"text":"we","start":918720,"end":918840,"confidence":1,"speaker":"A"},{"text":"use","start":918840,"end":919000,"confidence":1,"speaker":"A"},{"text":"CloudKit?","start":919000,"end":919680,"confidence":0.9992676,"speaker":"A"},{"text":"Because","start":919840,"end":920120,"confidence":0.98095703,"speaker":"A"},{"text":"you're","start":920120,"end":920320,"confidence":0.9998372,"speaker":"A"},{"text":"already","start":920320,"end":920520,"confidence":1,"speaker":"A"},{"text":"signed","start":920520,"end":920880,"confidence":0.9963379,"speaker":"A"},{"text":"in","start":920880,"end":921000,"confidence":0.71728516,"speaker":"A"},{"text":"a","start":921000,"end":921120,"confidence":0.61376953,"speaker":"A"},{"text":"CloudKit","start":921120,"end":921640,"confidence":0.99658203,"speaker":"A"},{"text":"on","start":921640,"end":921800,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":921800,"end":921960,"confidence":1,"speaker":"A"},{"text":"Watch","start":921960,"end":922240,"confidence":0.99853516,"speaker":"A"},{"text":"with","start":922800,"end":923120,"confidence":0.99853516,"speaker":"A"},{"text":"your,","start":923120,"end":923440,"confidence":0.9980469,"speaker":"A"},{"text":"your","start":923440,"end":923760,"confidence":0.9995117,"speaker":"A"},{"text":"id.","start":923760,"end":924080,"confidence":0.9995117,"speaker":"A"}]},{"text":"And what you do is you log in with a regular like email address and password in Heart Twitch on the website. And then there's a little, there's a site, there's a part of the site where you can sign into CloudKit and then from there you can, because, because of the CloudKit JavaScript library, you can then I can then pull the all the devices because when you first launch the app on the Watch, it adds your watch to the CloudKit database. And then I could pull that in and then add that to my postgres database. So then there is no need for authentication because I already have the CloudKit, the device added in my postgres database. So it's kind of like knows, oh yeah, this is Leo's watch, he doesn't need to authenticate.","start":926640,"end":975520,"confidence":0.99316406,"words":[{"text":"And","start":926640,"end":926920,"confidence":0.99316406,"speaker":"A"},{"text":"what","start":926920,"end":927080,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":927080,"end":927320,"confidence":1,"speaker":"A"},{"text":"do","start":927320,"end":927680,"confidence":1,"speaker":"A"},{"text":"is","start":928320,"end":928720,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":929440,"end":929720,"confidence":0.9995117,"speaker":"A"},{"text":"log","start":929720,"end":929920,"confidence":1,"speaker":"A"},{"text":"in","start":929920,"end":930159,"confidence":0.9975586,"speaker":"A"},{"text":"with","start":930159,"end":930359,"confidence":1,"speaker":"A"},{"text":"a","start":930359,"end":930480,"confidence":0.9794922,"speaker":"A"},{"text":"regular","start":930480,"end":930760,"confidence":1,"speaker":"A"},{"text":"like","start":930760,"end":930960,"confidence":0.9975586,"speaker":"A"},{"text":"email","start":930960,"end":931240,"confidence":1,"speaker":"A"},{"text":"address","start":931240,"end":931520,"confidence":1,"speaker":"A"},{"text":"and","start":931520,"end":931760,"confidence":0.6791992,"speaker":"A"},{"text":"password","start":931760,"end":932320,"confidence":0.88378906,"speaker":"A"},{"text":"in","start":933040,"end":933440,"confidence":0.7763672,"speaker":"A"},{"text":"Heart","start":933680,"end":934000,"confidence":0.66796875,"speaker":"A"},{"text":"Twitch","start":934000,"end":934400,"confidence":0.9975586,"speaker":"A"},{"text":"on","start":934400,"end":934560,"confidence":1,"speaker":"A"},{"text":"the","start":934560,"end":934680,"confidence":1,"speaker":"A"},{"text":"website.","start":934680,"end":934960,"confidence":0.9995117,"speaker":"A"},{"text":"And","start":935840,"end":936120,"confidence":0.99902344,"speaker":"A"},{"text":"then","start":936120,"end":936280,"confidence":0.9995117,"speaker":"A"},{"text":"there's","start":936280,"end":936520,"confidence":0.8927409,"speaker":"A"},{"text":"a","start":936520,"end":936640,"confidence":0.9995117,"speaker":"A"},{"text":"little,","start":936640,"end":936840,"confidence":1,"speaker":"A"},{"text":"there's","start":936840,"end":937200,"confidence":0.9996745,"speaker":"A"},{"text":"a","start":937200,"end":937360,"confidence":0.9995117,"speaker":"A"},{"text":"site,","start":937360,"end":937640,"confidence":0.9995117,"speaker":"A"},{"text":"there's","start":937640,"end":937960,"confidence":0.99886066,"speaker":"A"},{"text":"a","start":937960,"end":938160,"confidence":0.9995117,"speaker":"A"},{"text":"part","start":938160,"end":938360,"confidence":1,"speaker":"A"},{"text":"of","start":938360,"end":938480,"confidence":1,"speaker":"A"},{"text":"the","start":938480,"end":938560,"confidence":1,"speaker":"A"},{"text":"site","start":938560,"end":938720,"confidence":1,"speaker":"A"},{"text":"where","start":938720,"end":938920,"confidence":1,"speaker":"A"},{"text":"you","start":938920,"end":939040,"confidence":1,"speaker":"A"},{"text":"can","start":939040,"end":939280,"confidence":1,"speaker":"A"},{"text":"sign","start":939840,"end":940120,"confidence":1,"speaker":"A"},{"text":"into","start":940120,"end":940360,"confidence":0.8144531,"speaker":"A"},{"text":"CloudKit","start":940360,"end":941120,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":942180,"end":942300,"confidence":0.94628906,"speaker":"A"},{"text":"then","start":942300,"end":942500,"confidence":0.99902344,"speaker":"A"},{"text":"from","start":942500,"end":942740,"confidence":1,"speaker":"A"},{"text":"there","start":942740,"end":943060,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":944180,"end":944540,"confidence":0.9526367,"speaker":"A"},{"text":"can,","start":944540,"end":944900,"confidence":1,"speaker":"A"},{"text":"because,","start":945860,"end":946260,"confidence":0.8623047,"speaker":"A"},{"text":"because","start":946260,"end":946540,"confidence":0.99853516,"speaker":"A"},{"text":"of","start":946540,"end":946700,"confidence":0.9897461,"speaker":"A"},{"text":"the","start":946700,"end":946820,"confidence":0.9980469,"speaker":"A"},{"text":"CloudKit","start":946820,"end":947340,"confidence":0.99438477,"speaker":"A"},{"text":"JavaScript","start":947340,"end":947980,"confidence":0.9984538,"speaker":"A"},{"text":"library,","start":947980,"end":948380,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":948380,"end":948540,"confidence":0.95751953,"speaker":"A"},{"text":"can","start":948540,"end":948660,"confidence":0.99902344,"speaker":"A"},{"text":"then","start":948660,"end":948820,"confidence":0.99853516,"speaker":"A"},{"text":"I","start":948820,"end":948980,"confidence":0.9951172,"speaker":"A"},{"text":"can","start":948980,"end":949100,"confidence":0.9975586,"speaker":"A"},{"text":"then","start":949100,"end":949300,"confidence":0.9951172,"speaker":"A"},{"text":"pull","start":949300,"end":949620,"confidence":0.99975586,"speaker":"A"},{"text":"the","start":949620,"end":949940,"confidence":0.9140625,"speaker":"A"},{"text":"all","start":952260,"end":952580,"confidence":0.99609375,"speaker":"A"},{"text":"the","start":952580,"end":952780,"confidence":0.99902344,"speaker":"A"},{"text":"devices","start":952780,"end":953220,"confidence":0.9992676,"speaker":"A"},{"text":"because","start":953220,"end":953540,"confidence":0.99902344,"speaker":"A"},{"text":"when","start":953540,"end":953740,"confidence":1,"speaker":"A"},{"text":"you","start":953740,"end":953900,"confidence":0.9995117,"speaker":"A"},{"text":"first","start":953900,"end":954100,"confidence":1,"speaker":"A"},{"text":"launch","start":954100,"end":954340,"confidence":1,"speaker":"A"},{"text":"the","start":954340,"end":954540,"confidence":0.9746094,"speaker":"A"},{"text":"app","start":954540,"end":954700,"confidence":0.9995117,"speaker":"A"},{"text":"on","start":954700,"end":954820,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":954820,"end":954900,"confidence":0.9995117,"speaker":"A"},{"text":"Watch,","start":954900,"end":955100,"confidence":0.9897461,"speaker":"A"},{"text":"it","start":955100,"end":955340,"confidence":0.93408203,"speaker":"A"},{"text":"adds","start":955340,"end":955580,"confidence":0.9987793,"speaker":"A"},{"text":"your","start":955580,"end":955740,"confidence":0.9980469,"speaker":"A"},{"text":"watch","start":955740,"end":956020,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":956340,"end":956620,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":956620,"end":956740,"confidence":0.9995117,"speaker":"A"},{"text":"CloudKit","start":956740,"end":957300,"confidence":0.99609375,"speaker":"A"},{"text":"database.","start":957300,"end":957940,"confidence":0.9998372,"speaker":"A"},{"text":"And","start":958260,"end":958540,"confidence":0.9921875,"speaker":"A"},{"text":"then","start":958540,"end":958660,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":958660,"end":958780,"confidence":0.99902344,"speaker":"A"},{"text":"could","start":958780,"end":958940,"confidence":0.66503906,"speaker":"A"},{"text":"pull","start":958940,"end":959140,"confidence":1,"speaker":"A"},{"text":"that","start":959140,"end":959300,"confidence":0.9975586,"speaker":"A"},{"text":"in","start":959300,"end":959540,"confidence":0.9980469,"speaker":"A"},{"text":"and","start":959540,"end":959740,"confidence":0.9995117,"speaker":"A"},{"text":"then","start":959740,"end":959900,"confidence":0.9970703,"speaker":"A"},{"text":"add","start":959900,"end":960060,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":960060,"end":960220,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":960220,"end":960380,"confidence":0.9995117,"speaker":"A"},{"text":"my","start":960380,"end":960540,"confidence":0.9995117,"speaker":"A"},{"text":"postgres","start":960540,"end":961140,"confidence":0.98583984,"speaker":"A"},{"text":"database.","start":961140,"end":961700,"confidence":1,"speaker":"A"},{"text":"So","start":961700,"end":961980,"confidence":0.99658203,"speaker":"A"},{"text":"then","start":961980,"end":962260,"confidence":0.9970703,"speaker":"A"},{"text":"there","start":962260,"end":962540,"confidence":1,"speaker":"A"},{"text":"is","start":962540,"end":962740,"confidence":0.9995117,"speaker":"A"},{"text":"no","start":962740,"end":962940,"confidence":0.9995117,"speaker":"A"},{"text":"need","start":962940,"end":963140,"confidence":1,"speaker":"A"},{"text":"for","start":963140,"end":963380,"confidence":0.9995117,"speaker":"A"},{"text":"authentication","start":963380,"end":964180,"confidence":0.9998779,"speaker":"A"},{"text":"because","start":964740,"end":965140,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":965220,"end":965500,"confidence":0.9980469,"speaker":"A"},{"text":"already","start":965500,"end":965700,"confidence":1,"speaker":"A"},{"text":"have","start":965700,"end":965900,"confidence":0.99853516,"speaker":"A"},{"text":"the","start":965900,"end":966060,"confidence":0.9995117,"speaker":"A"},{"text":"CloudKit,","start":966060,"end":966740,"confidence":0.99975586,"speaker":"A"},{"text":"the","start":967720,"end":967880,"confidence":0.9663086,"speaker":"A"},{"text":"device","start":967880,"end":968280,"confidence":0.9992676,"speaker":"A"},{"text":"added","start":968280,"end":968600,"confidence":0.9995117,"speaker":"A"},{"text":"in","start":969000,"end":969280,"confidence":0.9995117,"speaker":"A"},{"text":"my","start":969280,"end":969480,"confidence":0.9926758,"speaker":"A"},{"text":"postgres","start":969480,"end":970000,"confidence":0.89941406,"speaker":"A"},{"text":"database.","start":970000,"end":970400,"confidence":0.9998372,"speaker":"A"},{"text":"So","start":970400,"end":970520,"confidence":0.8930664,"speaker":"A"},{"text":"it's","start":970520,"end":970720,"confidence":0.87093097,"speaker":"A"},{"text":"kind","start":970720,"end":970840,"confidence":0.93603516,"speaker":"A"},{"text":"of","start":970840,"end":970960,"confidence":0.859375,"speaker":"A"},{"text":"like","start":970960,"end":971120,"confidence":0.9736328,"speaker":"A"},{"text":"knows,","start":971120,"end":971440,"confidence":0.94555664,"speaker":"A"},{"text":"oh","start":971440,"end":971680,"confidence":0.97143555,"speaker":"A"},{"text":"yeah,","start":971680,"end":972040,"confidence":0.9983724,"speaker":"A"},{"text":"this","start":972200,"end":972480,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":972480,"end":972720,"confidence":0.99902344,"speaker":"A"},{"text":"Leo's","start":972720,"end":973280,"confidence":0.9902344,"speaker":"A"},{"text":"watch,","start":973280,"end":973560,"confidence":0.99853516,"speaker":"A"},{"text":"he","start":974040,"end":974320,"confidence":0.99902344,"speaker":"A"},{"text":"doesn't","start":974320,"end":974520,"confidence":0.9996745,"speaker":"A"},{"text":"need","start":974520,"end":974640,"confidence":0.99902344,"speaker":"A"},{"text":"to","start":974640,"end":974840,"confidence":0.9863281,"speaker":"A"},{"text":"authenticate.","start":974840,"end":975520,"confidence":0.9996338,"speaker":"A"}]},{"text":"And that way we can link devices to accounts without having to do any sort of login process. And so this was my use case for doing server side. Essentially CloudKit was I could call the CloudKit web server based on that person's web authentication token, which we'll get all into later. I then pull that information in. So.","start":975520,"end":1002450,"confidence":0.9116211,"words":[{"text":"And","start":975520,"end":975760,"confidence":0.9116211,"speaker":"A"},{"text":"that","start":975760,"end":975920,"confidence":0.99365234,"speaker":"A"},{"text":"way","start":975920,"end":976120,"confidence":0.99853516,"speaker":"A"},{"text":"we","start":976120,"end":976320,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":976320,"end":976520,"confidence":0.9995117,"speaker":"A"},{"text":"link","start":976520,"end":976800,"confidence":0.99975586,"speaker":"A"},{"text":"devices","start":976800,"end":977240,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":977240,"end":977520,"confidence":0.9614258,"speaker":"A"},{"text":"accounts","start":977520,"end":978200,"confidence":0.9980469,"speaker":"A"},{"text":"without","start":978280,"end":978680,"confidence":0.9995117,"speaker":"A"},{"text":"having","start":978680,"end":978960,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":978960,"end":979120,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":979120,"end":979280,"confidence":0.9995117,"speaker":"A"},{"text":"any","start":979280,"end":979440,"confidence":0.9995117,"speaker":"A"},{"text":"sort","start":979440,"end":979640,"confidence":0.99625653,"speaker":"A"},{"text":"of","start":979640,"end":979760,"confidence":0.9951172,"speaker":"A"},{"text":"login","start":979760,"end":980200,"confidence":0.984375,"speaker":"A"},{"text":"process.","start":980200,"end":980520,"confidence":0.9995117,"speaker":"A"},{"text":"And","start":981080,"end":981360,"confidence":0.9008789,"speaker":"A"},{"text":"so","start":981360,"end":981600,"confidence":0.59228516,"speaker":"A"},{"text":"this","start":981600,"end":981840,"confidence":0.9995117,"speaker":"A"},{"text":"was","start":981840,"end":982000,"confidence":0.9951172,"speaker":"A"},{"text":"my","start":982000,"end":982200,"confidence":0.99902344,"speaker":"A"},{"text":"use","start":982200,"end":982440,"confidence":0.9916992,"speaker":"A"},{"text":"case","start":982440,"end":982760,"confidence":0.9995117,"speaker":"A"},{"text":"for","start":982919,"end":983320,"confidence":0.9995117,"speaker":"A"},{"text":"doing","start":983800,"end":984200,"confidence":0.99902344,"speaker":"A"},{"text":"server","start":985160,"end":985680,"confidence":0.71899414,"speaker":"A"},{"text":"side.","start":985680,"end":985960,"confidence":0.9086914,"speaker":"A"},{"text":"Essentially","start":986040,"end":986680,"confidence":0.9888916,"speaker":"A"},{"text":"CloudKit","start":987000,"end":987720,"confidence":0.87207,"speaker":"A"},{"text":"was","start":987720,"end":988000,"confidence":0.98583984,"speaker":"A"},{"text":"I","start":988000,"end":988240,"confidence":0.99902344,"speaker":"A"},{"text":"could","start":988240,"end":988400,"confidence":0.99365234,"speaker":"A"},{"text":"call","start":988400,"end":988600,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":988600,"end":988800,"confidence":0.99853516,"speaker":"A"},{"text":"CloudKit","start":988800,"end":989360,"confidence":0.9609375,"speaker":"A"},{"text":"web","start":989360,"end":989560,"confidence":0.9902344,"speaker":"A"},{"text":"server","start":989560,"end":990040,"confidence":0.99902344,"speaker":"A"},{"text":"based","start":993410,"end":993610,"confidence":0.98876953,"speaker":"A"},{"text":"on","start":993610,"end":993850,"confidence":1,"speaker":"A"},{"text":"that","start":993850,"end":994050,"confidence":0.9995117,"speaker":"A"},{"text":"person's","start":994050,"end":994690,"confidence":0.99690753,"speaker":"A"},{"text":"web","start":995570,"end":995970,"confidence":0.9992676,"speaker":"A"},{"text":"authentication","start":995970,"end":996610,"confidence":0.9998779,"speaker":"A"},{"text":"token,","start":996610,"end":996970,"confidence":0.9998372,"speaker":"A"},{"text":"which","start":996970,"end":997130,"confidence":0.9995117,"speaker":"A"},{"text":"we'll","start":997130,"end":997330,"confidence":0.9316406,"speaker":"A"},{"text":"get","start":997330,"end":997490,"confidence":0.99902344,"speaker":"A"},{"text":"all","start":997490,"end":997730,"confidence":0.74365234,"speaker":"A"},{"text":"into","start":997730,"end":998010,"confidence":0.99072266,"speaker":"A"},{"text":"later.","start":998010,"end":998370,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":998530,"end":998850,"confidence":0.5698242,"speaker":"A"},{"text":"then","start":998850,"end":999050,"confidence":0.91748047,"speaker":"A"},{"text":"pull","start":999050,"end":999250,"confidence":0.99975586,"speaker":"A"},{"text":"that","start":999250,"end":999410,"confidence":0.9980469,"speaker":"A"},{"text":"information","start":999410,"end":999730,"confidence":0.9995117,"speaker":"A"},{"text":"in.","start":999970,"end":1000370,"confidence":0.9824219,"speaker":"A"},{"text":"So.","start":1002050,"end":1002450,"confidence":0.8515625,"speaker":"A"}]},{"text":"Cool.","start":1007250,"end":1007730,"confidence":0.9333496,"words":[{"text":"Cool.","start":1007250,"end":1007730,"confidence":0.9333496,"speaker":"A"}]},{"text":"Just checking if anybody's having issues. It doesn't look like it. So that's good to know. So that was the private database piece, but I actually think a much more useful case would be the public database because the idea would be is that you'd have some sort of app that would use central repository of data that it can pull information from. And I'm looking at both of these with Bushel and then an RSS reader I'm building called Celestra with Bushel.","start":1010770,"end":1045150,"confidence":0.99121094,"words":[{"text":"Just","start":1010770,"end":1011050,"confidence":0.99121094,"speaker":"A"},{"text":"checking","start":1011050,"end":1011370,"confidence":0.9980469,"speaker":"A"},{"text":"if","start":1011370,"end":1011530,"confidence":0.99853516,"speaker":"A"},{"text":"anybody's","start":1011530,"end":1012050,"confidence":0.94539386,"speaker":"A"},{"text":"having","start":1012050,"end":1012210,"confidence":0.9995117,"speaker":"A"},{"text":"issues.","start":1012210,"end":1012530,"confidence":0.99853516,"speaker":"A"},{"text":"It","start":1012530,"end":1012770,"confidence":0.5439453,"speaker":"A"},{"text":"doesn't","start":1012770,"end":1013050,"confidence":0.9983724,"speaker":"A"},{"text":"look","start":1013050,"end":1013210,"confidence":0.99902344,"speaker":"A"},{"text":"like","start":1013210,"end":1013370,"confidence":0.99853516,"speaker":"A"},{"text":"it.","start":1013370,"end":1013650,"confidence":0.9975586,"speaker":"A"},{"text":"So","start":1013650,"end":1014050,"confidence":0.8925781,"speaker":"A"},{"text":"that's","start":1014690,"end":1015050,"confidence":0.98014325,"speaker":"A"},{"text":"good","start":1015050,"end":1015210,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":1015210,"end":1015370,"confidence":0.9980469,"speaker":"A"},{"text":"know.","start":1015370,"end":1015650,"confidence":0.9975586,"speaker":"A"},{"text":"So","start":1017170,"end":1017410,"confidence":0.9707031,"speaker":"A"},{"text":"that","start":1017410,"end":1017530,"confidence":0.98779297,"speaker":"A"},{"text":"was","start":1017530,"end":1017690,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1017690,"end":1017850,"confidence":0.9995117,"speaker":"A"},{"text":"private","start":1017850,"end":1018090,"confidence":0.9995117,"speaker":"A"},{"text":"database","start":1018090,"end":1018690,"confidence":0.9998372,"speaker":"A"},{"text":"piece,","start":1018690,"end":1019090,"confidence":0.99576825,"speaker":"A"},{"text":"but","start":1019950,"end":1020070,"confidence":0.97558594,"speaker":"A"},{"text":"I","start":1020070,"end":1020230,"confidence":0.99853516,"speaker":"A"},{"text":"actually","start":1020230,"end":1020470,"confidence":0.9970703,"speaker":"A"},{"text":"think","start":1020470,"end":1020790,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":1020790,"end":1021030,"confidence":0.9921875,"speaker":"A"},{"text":"much","start":1021030,"end":1021230,"confidence":0.9946289,"speaker":"A"},{"text":"more","start":1021230,"end":1021470,"confidence":1,"speaker":"A"},{"text":"useful","start":1021470,"end":1021910,"confidence":0.99975586,"speaker":"A"},{"text":"case","start":1021910,"end":1022270,"confidence":0.9995117,"speaker":"A"},{"text":"would","start":1022670,"end":1022990,"confidence":1,"speaker":"A"},{"text":"be","start":1022990,"end":1023270,"confidence":1,"speaker":"A"},{"text":"the","start":1023270,"end":1023510,"confidence":0.9995117,"speaker":"A"},{"text":"public","start":1023510,"end":1023750,"confidence":0.9995117,"speaker":"A"},{"text":"database","start":1023750,"end":1024430,"confidence":0.99934894,"speaker":"A"},{"text":"because","start":1024990,"end":1025390,"confidence":0.9946289,"speaker":"A"},{"text":"the","start":1026830,"end":1027150,"confidence":0.99853516,"speaker":"A"},{"text":"idea","start":1027150,"end":1027550,"confidence":0.9758301,"speaker":"A"},{"text":"would","start":1027550,"end":1027750,"confidence":0.99658203,"speaker":"A"},{"text":"be","start":1027750,"end":1027950,"confidence":0.99902344,"speaker":"A"},{"text":"is","start":1027950,"end":1028150,"confidence":0.93359375,"speaker":"A"},{"text":"that","start":1028150,"end":1028310,"confidence":0.99853516,"speaker":"A"},{"text":"you'd","start":1028310,"end":1028630,"confidence":0.96516925,"speaker":"A"},{"text":"have","start":1028630,"end":1028910,"confidence":1,"speaker":"A"},{"text":"some","start":1029710,"end":1029990,"confidence":0.9995117,"speaker":"A"},{"text":"sort","start":1029990,"end":1030230,"confidence":0.99609375,"speaker":"A"},{"text":"of","start":1030230,"end":1030390,"confidence":0.9975586,"speaker":"A"},{"text":"app","start":1030390,"end":1030670,"confidence":0.99902344,"speaker":"A"},{"text":"that","start":1030670,"end":1030950,"confidence":0.9995117,"speaker":"A"},{"text":"would","start":1030950,"end":1031150,"confidence":0.9970703,"speaker":"A"},{"text":"use","start":1031150,"end":1031470,"confidence":0.99902344,"speaker":"A"},{"text":"central","start":1031550,"end":1031950,"confidence":0.9995117,"speaker":"A"},{"text":"repository","start":1031950,"end":1032790,"confidence":0.99694824,"speaker":"A"},{"text":"of","start":1032790,"end":1032990,"confidence":0.99853516,"speaker":"A"},{"text":"data","start":1032990,"end":1033310,"confidence":0.99902344,"speaker":"A"},{"text":"that","start":1035470,"end":1035790,"confidence":0.99902344,"speaker":"A"},{"text":"it","start":1035790,"end":1035950,"confidence":0.63134766,"speaker":"A"},{"text":"can","start":1035950,"end":1036070,"confidence":0.9980469,"speaker":"A"},{"text":"pull","start":1036070,"end":1036390,"confidence":0.99975586,"speaker":"A"},{"text":"information","start":1036390,"end":1036750,"confidence":1,"speaker":"A"},{"text":"from.","start":1036990,"end":1037390,"confidence":0.9995117,"speaker":"A"},{"text":"And","start":1037790,"end":1038110,"confidence":0.91259766,"speaker":"A"},{"text":"I'm","start":1038110,"end":1038390,"confidence":0.99104816,"speaker":"A"},{"text":"looking","start":1038390,"end":1038550,"confidence":0.9902344,"speaker":"A"},{"text":"at","start":1038550,"end":1038710,"confidence":0.99902344,"speaker":"A"},{"text":"both","start":1038710,"end":1038870,"confidence":1,"speaker":"A"},{"text":"of","start":1038870,"end":1039030,"confidence":0.9995117,"speaker":"A"},{"text":"these","start":1039030,"end":1039310,"confidence":0.9995117,"speaker":"A"},{"text":"with","start":1039310,"end":1039710,"confidence":0.99902344,"speaker":"A"},{"text":"Bushel","start":1039950,"end":1040590,"confidence":0.90722656,"speaker":"A"},{"text":"and","start":1040590,"end":1040790,"confidence":0.9975586,"speaker":"A"},{"text":"then","start":1040790,"end":1040950,"confidence":0.9584961,"speaker":"A"},{"text":"an","start":1040950,"end":1041190,"confidence":0.98291016,"speaker":"A"},{"text":"RSS","start":1041190,"end":1041670,"confidence":0.9987793,"speaker":"A"},{"text":"reader","start":1041670,"end":1042070,"confidence":0.9975586,"speaker":"A"},{"text":"I'm","start":1042070,"end":1042270,"confidence":0.93929034,"speaker":"A"},{"text":"building","start":1042270,"end":1042430,"confidence":0.9995117,"speaker":"A"},{"text":"called","start":1042430,"end":1042630,"confidence":0.9584961,"speaker":"A"},{"text":"Celestra","start":1042630,"end":1043310,"confidence":0.9358724,"speaker":"A"},{"text":"with","start":1044190,"end":1044510,"confidence":0.98535156,"speaker":"A"},{"text":"Bushel.","start":1044510,"end":1045150,"confidence":0.9350586,"speaker":"A"}]},{"text":"The. The way it's built right now is I have this concept of hubs and you can plug in a URL and that URL would provide or some sort of service. That service would then provide the Entire List of macOS restore images that are available.","start":1046199,"end":1061959,"confidence":0.84375,"words":[{"text":"The.","start":1046199,"end":1046439,"confidence":0.84375,"speaker":"A"},{"text":"The","start":1046679,"end":1046959,"confidence":0.9980469,"speaker":"A"},{"text":"way","start":1046959,"end":1047119,"confidence":1,"speaker":"A"},{"text":"it's","start":1047119,"end":1047319,"confidence":0.9996745,"speaker":"A"},{"text":"built","start":1047319,"end":1047559,"confidence":0.8929036,"speaker":"A"},{"text":"right","start":1047559,"end":1047759,"confidence":0.9995117,"speaker":"A"},{"text":"now","start":1047759,"end":1047959,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1047959,"end":1048199,"confidence":0.9667969,"speaker":"A"},{"text":"I","start":1048199,"end":1048359,"confidence":0.99902344,"speaker":"A"},{"text":"have","start":1048359,"end":1048479,"confidence":0.9975586,"speaker":"A"},{"text":"this","start":1048479,"end":1048679,"confidence":0.9995117,"speaker":"A"},{"text":"concept","start":1048679,"end":1049079,"confidence":0.9786784,"speaker":"A"},{"text":"of","start":1049079,"end":1049319,"confidence":0.9995117,"speaker":"A"},{"text":"hubs","start":1049319,"end":1049719,"confidence":0.9838867,"speaker":"A"},{"text":"and","start":1050679,"end":1051079,"confidence":0.96240234,"speaker":"A"},{"text":"you","start":1051159,"end":1051439,"confidence":1,"speaker":"A"},{"text":"can","start":1051439,"end":1051599,"confidence":0.99902344,"speaker":"A"},{"text":"plug","start":1051599,"end":1051799,"confidence":1,"speaker":"A"},{"text":"in","start":1051799,"end":1051919,"confidence":0.9951172,"speaker":"A"},{"text":"a","start":1051919,"end":1052079,"confidence":0.99072266,"speaker":"A"},{"text":"URL","start":1052079,"end":1052639,"confidence":0.9992676,"speaker":"A"},{"text":"and","start":1052639,"end":1052839,"confidence":0.9628906,"speaker":"A"},{"text":"that","start":1052839,"end":1052959,"confidence":0.99902344,"speaker":"A"},{"text":"URL","start":1052959,"end":1053439,"confidence":0.9367676,"speaker":"A"},{"text":"would","start":1053439,"end":1053719,"confidence":0.99658203,"speaker":"A"},{"text":"provide","start":1053719,"end":1054039,"confidence":1,"speaker":"A"},{"text":"or","start":1054039,"end":1054399,"confidence":0.99902344,"speaker":"A"},{"text":"some","start":1054399,"end":1054679,"confidence":0.97216797,"speaker":"A"},{"text":"sort","start":1054679,"end":1054919,"confidence":0.9941406,"speaker":"A"},{"text":"of","start":1054919,"end":1055079,"confidence":0.99902344,"speaker":"A"},{"text":"service.","start":1055079,"end":1055399,"confidence":0.99902344,"speaker":"A"},{"text":"That","start":1055959,"end":1056359,"confidence":0.9980469,"speaker":"A"},{"text":"service","start":1056599,"end":1056999,"confidence":0.9980469,"speaker":"A"},{"text":"would","start":1056999,"end":1057279,"confidence":0.9941406,"speaker":"A"},{"text":"then","start":1057279,"end":1057479,"confidence":0.9916992,"speaker":"A"},{"text":"provide","start":1057479,"end":1057799,"confidence":1,"speaker":"A"},{"text":"the","start":1058359,"end":1058639,"confidence":0.9995117,"speaker":"A"},{"text":"Entire","start":1058639,"end":1058999,"confidence":0.99975586,"speaker":"A"},{"text":"List","start":1058999,"end":1059279,"confidence":0.9995117,"speaker":"A"},{"text":"of","start":1059279,"end":1059639,"confidence":0.99853516,"speaker":"A"},{"text":"macOS","start":1059719,"end":1060439,"confidence":0.76636,"speaker":"A"},{"text":"restore","start":1060439,"end":1060839,"confidence":0.98168945,"speaker":"A"},{"text":"images","start":1060839,"end":1061278,"confidence":0.9987793,"speaker":"A"},{"text":"that","start":1061278,"end":1061479,"confidence":0.9995117,"speaker":"A"},{"text":"are","start":1061479,"end":1061638,"confidence":0.9995117,"speaker":"A"},{"text":"available.","start":1061638,"end":1061959,"confidence":0.9995117,"speaker":"A"}]},{"text":"But then I realized like really there's only one location for those and each service is just going to be using the same URLs anyway. So if I had one central repository or one central database because they all pull from Apple, I can then parse the web for those restore images and then store them in CloudKit and then that way Bushel can then pull those from one single repository. And all I would have to do, and what I'm doing now is running basically a GitHub action or you could do like a Cron job where it would run on Ubuntu, wouldn't even need a Mac and it would download and scrape the web for restore images and storm in the public database. It's the same idea with Celestra. It's an RSS reader.","start":1064119,"end":1109110,"confidence":0.9941406,"words":[{"text":"But","start":1064119,"end":1064399,"confidence":0.9941406,"speaker":"A"},{"text":"then","start":1064399,"end":1064559,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":1064559,"end":1064719,"confidence":0.9995117,"speaker":"A"},{"text":"realized","start":1064719,"end":1065079,"confidence":0.9863281,"speaker":"A"},{"text":"like","start":1065079,"end":1065319,"confidence":0.90283203,"speaker":"A"},{"text":"really","start":1065319,"end":1065559,"confidence":0.9970703,"speaker":"A"},{"text":"there's","start":1065559,"end":1065839,"confidence":0.9889323,"speaker":"A"},{"text":"only","start":1065839,"end":1065999,"confidence":0.9995117,"speaker":"A"},{"text":"one","start":1065999,"end":1066199,"confidence":0.9995117,"speaker":"A"},{"text":"location","start":1066199,"end":1066679,"confidence":1,"speaker":"A"},{"text":"for","start":1066679,"end":1066919,"confidence":0.9995117,"speaker":"A"},{"text":"those","start":1066919,"end":1067239,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":1067319,"end":1067719,"confidence":0.98876953,"speaker":"A"},{"text":"each","start":1067719,"end":1068079,"confidence":0.9824219,"speaker":"A"},{"text":"service","start":1068079,"end":1068399,"confidence":0.9951172,"speaker":"A"},{"text":"is","start":1068399,"end":1068639,"confidence":0.99853516,"speaker":"A"},{"text":"just","start":1068639,"end":1068799,"confidence":0.99609375,"speaker":"A"},{"text":"going","start":1068799,"end":1068919,"confidence":0.8798828,"speaker":"A"},{"text":"to","start":1068919,"end":1068999,"confidence":0.99902344,"speaker":"A"},{"text":"be","start":1068999,"end":1069079,"confidence":0.99853516,"speaker":"A"},{"text":"using","start":1069079,"end":1069319,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1069319,"end":1069559,"confidence":0.9995117,"speaker":"A"},{"text":"same","start":1069559,"end":1069719,"confidence":0.9995117,"speaker":"A"},{"text":"URLs","start":1069719,"end":1070359,"confidence":0.92261,"speaker":"A"},{"text":"anyway.","start":1070359,"end":1070839,"confidence":0.99731445,"speaker":"A"},{"text":"So","start":1071970,"end":1072050,"confidence":0.92822266,"speaker":"A"},{"text":"if","start":1072050,"end":1072170,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":1072170,"end":1072330,"confidence":0.9995117,"speaker":"A"},{"text":"had","start":1072330,"end":1072570,"confidence":0.9975586,"speaker":"A"},{"text":"one","start":1072570,"end":1072850,"confidence":0.9995117,"speaker":"A"},{"text":"central","start":1072850,"end":1073170,"confidence":1,"speaker":"A"},{"text":"repository","start":1073250,"end":1074050,"confidence":0.9127197,"speaker":"A"},{"text":"or","start":1074050,"end":1074250,"confidence":0.99853516,"speaker":"A"},{"text":"one","start":1074250,"end":1074450,"confidence":0.9970703,"speaker":"A"},{"text":"central","start":1074450,"end":1074770,"confidence":1,"speaker":"A"},{"text":"database","start":1074770,"end":1075490,"confidence":1,"speaker":"A"},{"text":"because","start":1076850,"end":1077170,"confidence":0.99365234,"speaker":"A"},{"text":"they","start":1077170,"end":1077370,"confidence":0.9975586,"speaker":"A"},{"text":"all","start":1077370,"end":1077530,"confidence":0.99902344,"speaker":"A"},{"text":"pull","start":1077530,"end":1077770,"confidence":0.99975586,"speaker":"A"},{"text":"from","start":1077770,"end":1077970,"confidence":0.9995117,"speaker":"A"},{"text":"Apple,","start":1077970,"end":1078450,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":1078690,"end":1079010,"confidence":0.99853516,"speaker":"A"},{"text":"can","start":1079010,"end":1079210,"confidence":0.99365234,"speaker":"A"},{"text":"then","start":1079210,"end":1079490,"confidence":0.98828125,"speaker":"A"},{"text":"parse","start":1079650,"end":1080250,"confidence":0.8129883,"speaker":"A"},{"text":"the","start":1080250,"end":1080490,"confidence":0.9995117,"speaker":"A"},{"text":"web","start":1080490,"end":1080850,"confidence":0.99975586,"speaker":"A"},{"text":"for","start":1081090,"end":1081410,"confidence":0.59033203,"speaker":"A"},{"text":"those","start":1081410,"end":1081690,"confidence":0.99902344,"speaker":"A"},{"text":"restore","start":1081690,"end":1082210,"confidence":0.98779297,"speaker":"A"},{"text":"images","start":1082210,"end":1082690,"confidence":0.99780273,"speaker":"A"},{"text":"and","start":1082690,"end":1082930,"confidence":0.99072266,"speaker":"A"},{"text":"then","start":1082930,"end":1083090,"confidence":0.99658203,"speaker":"A"},{"text":"store","start":1083090,"end":1083370,"confidence":0.9736328,"speaker":"A"},{"text":"them","start":1083370,"end":1083530,"confidence":0.9238281,"speaker":"A"},{"text":"in","start":1083530,"end":1083650,"confidence":0.98779297,"speaker":"A"},{"text":"CloudKit","start":1083650,"end":1084210,"confidence":0.94812,"speaker":"A"},{"text":"and","start":1084210,"end":1084370,"confidence":0.8354492,"speaker":"A"},{"text":"then","start":1084370,"end":1084530,"confidence":0.9873047,"speaker":"A"},{"text":"that","start":1084530,"end":1084770,"confidence":0.9980469,"speaker":"A"},{"text":"way","start":1084770,"end":1085090,"confidence":0.99853516,"speaker":"A"},{"text":"Bushel","start":1085410,"end":1086010,"confidence":0.8808594,"speaker":"A"},{"text":"can","start":1086010,"end":1086170,"confidence":0.9501953,"speaker":"A"},{"text":"then","start":1086170,"end":1086450,"confidence":0.95751953,"speaker":"A"},{"text":"pull","start":1087570,"end":1087930,"confidence":0.9995117,"speaker":"A"},{"text":"those","start":1087930,"end":1088210,"confidence":0.9975586,"speaker":"A"},{"text":"from","start":1088210,"end":1088530,"confidence":1,"speaker":"A"},{"text":"one","start":1088530,"end":1088770,"confidence":0.9995117,"speaker":"A"},{"text":"single","start":1088770,"end":1089090,"confidence":1,"speaker":"A"},{"text":"repository.","start":1089090,"end":1089970,"confidence":0.9998779,"speaker":"A"},{"text":"And","start":1090210,"end":1090490,"confidence":0.86572266,"speaker":"A"},{"text":"all","start":1090490,"end":1090650,"confidence":0.99853516,"speaker":"A"},{"text":"I","start":1090650,"end":1090770,"confidence":0.98291016,"speaker":"A"},{"text":"would","start":1090770,"end":1090930,"confidence":0.98583984,"speaker":"A"},{"text":"have","start":1090930,"end":1091090,"confidence":1,"speaker":"A"},{"text":"to","start":1091090,"end":1091210,"confidence":0.99902344,"speaker":"A"},{"text":"do,","start":1091210,"end":1091450,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":1091450,"end":1091770,"confidence":0.64404297,"speaker":"A"},{"text":"what","start":1091770,"end":1092010,"confidence":0.9995117,"speaker":"A"},{"text":"I'm","start":1092010,"end":1092210,"confidence":0.99934894,"speaker":"A"},{"text":"doing","start":1092210,"end":1092410,"confidence":1,"speaker":"A"},{"text":"now","start":1092410,"end":1092690,"confidence":0.99853516,"speaker":"A"},{"text":"is","start":1092690,"end":1092930,"confidence":0.99902344,"speaker":"A"},{"text":"running","start":1092930,"end":1093370,"confidence":0.99121094,"speaker":"A"},{"text":"basically","start":1093370,"end":1093850,"confidence":0.998291,"speaker":"A"},{"text":"a","start":1093850,"end":1094090,"confidence":0.9951172,"speaker":"A"},{"text":"GitHub","start":1094090,"end":1094490,"confidence":0.9991862,"speaker":"A"},{"text":"action","start":1094490,"end":1094690,"confidence":1,"speaker":"A"},{"text":"or","start":1094690,"end":1094850,"confidence":0.98828125,"speaker":"A"},{"text":"you","start":1094850,"end":1094930,"confidence":0.91503906,"speaker":"A"},{"text":"could","start":1094930,"end":1095050,"confidence":0.8876953,"speaker":"A"},{"text":"do","start":1095050,"end":1095210,"confidence":0.99853516,"speaker":"A"},{"text":"like","start":1095210,"end":1095370,"confidence":0.8642578,"speaker":"A"},{"text":"a","start":1095370,"end":1095490,"confidence":0.9868164,"speaker":"A"},{"text":"Cron","start":1095490,"end":1095770,"confidence":0.97875977,"speaker":"A"},{"text":"job","start":1095770,"end":1096050,"confidence":1,"speaker":"A"},{"text":"where","start":1096450,"end":1096850,"confidence":0.9995117,"speaker":"A"},{"text":"it","start":1096850,"end":1097130,"confidence":0.99560547,"speaker":"A"},{"text":"would","start":1097130,"end":1097290,"confidence":1,"speaker":"A"},{"text":"run","start":1097290,"end":1097450,"confidence":0.9995117,"speaker":"A"},{"text":"on","start":1097450,"end":1097610,"confidence":0.9824219,"speaker":"A"},{"text":"Ubuntu,","start":1097610,"end":1098090,"confidence":0.8498047,"speaker":"A"},{"text":"wouldn't","start":1098090,"end":1098370,"confidence":0.9715576,"speaker":"A"},{"text":"even","start":1098370,"end":1098490,"confidence":0.99853516,"speaker":"A"},{"text":"need","start":1098490,"end":1098650,"confidence":0.99853516,"speaker":"A"},{"text":"a","start":1098650,"end":1098810,"confidence":0.99853516,"speaker":"A"},{"text":"Mac","start":1098810,"end":1099090,"confidence":0.9992676,"speaker":"A"},{"text":"and","start":1099090,"end":1099290,"confidence":0.96240234,"speaker":"A"},{"text":"it","start":1099290,"end":1099450,"confidence":0.99853516,"speaker":"A"},{"text":"would","start":1099450,"end":1099730,"confidence":0.9995117,"speaker":"A"},{"text":"download","start":1099890,"end":1100490,"confidence":1,"speaker":"A"},{"text":"and","start":1100490,"end":1100730,"confidence":0.59228516,"speaker":"A"},{"text":"scrape","start":1100730,"end":1101130,"confidence":0.8902588,"speaker":"A"},{"text":"the","start":1101130,"end":1101290,"confidence":0.9995117,"speaker":"A"},{"text":"web","start":1101290,"end":1101530,"confidence":0.9995117,"speaker":"A"},{"text":"for","start":1101530,"end":1101770,"confidence":0.9970703,"speaker":"A"},{"text":"restore","start":1101770,"end":1102250,"confidence":0.9777832,"speaker":"A"},{"text":"images","start":1102250,"end":1102650,"confidence":0.99731445,"speaker":"A"},{"text":"and","start":1102650,"end":1103000,"confidence":0.52197266,"speaker":"A"},{"text":"storm","start":1103070,"end":1103350,"confidence":0.92749023,"speaker":"A"},{"text":"in","start":1103350,"end":1103470,"confidence":0.9951172,"speaker":"A"},{"text":"the","start":1103470,"end":1103590,"confidence":0.99902344,"speaker":"A"},{"text":"public","start":1103590,"end":1103790,"confidence":1,"speaker":"A"},{"text":"database.","start":1103790,"end":1104430,"confidence":0.99820966,"speaker":"A"},{"text":"It's","start":1106350,"end":1106710,"confidence":0.9967448,"speaker":"A"},{"text":"the","start":1106710,"end":1106830,"confidence":0.9995117,"speaker":"A"},{"text":"same","start":1106830,"end":1106950,"confidence":1,"speaker":"A"},{"text":"idea","start":1106950,"end":1107230,"confidence":0.99902344,"speaker":"A"},{"text":"with","start":1107230,"end":1107350,"confidence":0.98779297,"speaker":"A"},{"text":"Celestra.","start":1107350,"end":1107910,"confidence":0.9313151,"speaker":"A"},{"text":"It's","start":1107910,"end":1108110,"confidence":0.99283856,"speaker":"A"},{"text":"an","start":1108110,"end":1108190,"confidence":0.73876953,"speaker":"A"},{"text":"RSS","start":1108190,"end":1108630,"confidence":0.9946289,"speaker":"A"},{"text":"reader.","start":1108630,"end":1109110,"confidence":0.99902344,"speaker":"A"}]},{"text":"What if I took those RSS RSS files in the web and just scrape them and then store them in a CloudKit database in a public database and then that way people can pull that up all through CloudKit.","start":1109110,"end":1122910,"confidence":0.9995117,"words":[{"text":"What","start":1109110,"end":1109270,"confidence":0.9995117,"speaker":"A"},{"text":"if","start":1109270,"end":1109430,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":1109430,"end":1109630,"confidence":0.9995117,"speaker":"A"},{"text":"took","start":1109630,"end":1109870,"confidence":0.99902344,"speaker":"A"},{"text":"those","start":1109870,"end":1110070,"confidence":0.9946289,"speaker":"A"},{"text":"RSS","start":1110070,"end":1110590,"confidence":0.98535156,"speaker":"A"},{"text":"RSS","start":1112750,"end":1113310,"confidence":0.94921875,"speaker":"A"},{"text":"files","start":1113310,"end":1113670,"confidence":0.95703125,"speaker":"A"},{"text":"in","start":1113670,"end":1113830,"confidence":0.99365234,"speaker":"A"},{"text":"the","start":1113830,"end":1113950,"confidence":1,"speaker":"A"},{"text":"web","start":1113950,"end":1114150,"confidence":0.99975586,"speaker":"A"},{"text":"and","start":1114150,"end":1114350,"confidence":0.8354492,"speaker":"A"},{"text":"just","start":1114350,"end":1114630,"confidence":0.99853516,"speaker":"A"},{"text":"scrape","start":1114630,"end":1115110,"confidence":0.8651123,"speaker":"A"},{"text":"them","start":1115110,"end":1115270,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":1115270,"end":1115430,"confidence":0.99902344,"speaker":"A"},{"text":"then","start":1115430,"end":1115630,"confidence":0.9970703,"speaker":"A"},{"text":"store","start":1115630,"end":1115950,"confidence":0.97753906,"speaker":"A"},{"text":"them","start":1115950,"end":1116070,"confidence":0.99902344,"speaker":"A"},{"text":"in","start":1116070,"end":1116190,"confidence":0.99902344,"speaker":"A"},{"text":"a","start":1116190,"end":1116270,"confidence":0.99902344,"speaker":"A"},{"text":"CloudKit","start":1116270,"end":1116830,"confidence":0.9890137,"speaker":"A"},{"text":"database","start":1116830,"end":1117470,"confidence":0.9996745,"speaker":"A"},{"text":"in","start":1118110,"end":1118430,"confidence":0.8745117,"speaker":"A"},{"text":"a","start":1118430,"end":1118590,"confidence":0.99902344,"speaker":"A"},{"text":"public","start":1118590,"end":1118750,"confidence":1,"speaker":"A"},{"text":"database","start":1118750,"end":1119390,"confidence":0.9998372,"speaker":"A"},{"text":"and","start":1119390,"end":1119550,"confidence":0.99316406,"speaker":"A"},{"text":"then","start":1119550,"end":1119710,"confidence":0.9741211,"speaker":"A"},{"text":"that","start":1119710,"end":1119910,"confidence":0.9995117,"speaker":"A"},{"text":"way","start":1119910,"end":1120110,"confidence":1,"speaker":"A"},{"text":"people","start":1120110,"end":1120390,"confidence":1,"speaker":"A"},{"text":"can","start":1120390,"end":1120750,"confidence":0.9995117,"speaker":"A"},{"text":"pull","start":1120750,"end":1121110,"confidence":1,"speaker":"A"},{"text":"that","start":1121110,"end":1121310,"confidence":0.99853516,"speaker":"A"},{"text":"up","start":1121310,"end":1121630,"confidence":0.99853516,"speaker":"A"},{"text":"all","start":1121630,"end":1121910,"confidence":0.9980469,"speaker":"A"},{"text":"through","start":1121910,"end":1122110,"confidence":1,"speaker":"A"},{"text":"CloudKit.","start":1122110,"end":1122910,"confidence":0.845459,"speaker":"A"}]},{"text":"So the idea today is we're going to talk about how to set something, how I set something like this up and how you could use use my library to then go ahead and do this yourself for any sort of work that you're going to do that where you want to use either a public or private database in CloudKit. So this is where I introduce myself. So I'm going to talk today about building Miskit, which is my library I built for doing CloudKit stuff on the server or essentially off of, not off of Apple platforms.","start":1125150,"end":1157140,"confidence":0.9873047,"words":[{"text":"So","start":1125150,"end":1125550,"confidence":0.9873047,"speaker":"A"},{"text":"the","start":1125630,"end":1125910,"confidence":0.99902344,"speaker":"A"},{"text":"idea","start":1125910,"end":1126270,"confidence":1,"speaker":"A"},{"text":"today","start":1126270,"end":1126550,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1126550,"end":1126790,"confidence":0.9980469,"speaker":"A"},{"text":"we're","start":1126790,"end":1127030,"confidence":0.9991862,"speaker":"A"},{"text":"going","start":1127030,"end":1127150,"confidence":0.88671875,"speaker":"A"},{"text":"to","start":1127150,"end":1127230,"confidence":1,"speaker":"A"},{"text":"talk","start":1127230,"end":1127390,"confidence":0.9995117,"speaker":"A"},{"text":"about","start":1127390,"end":1127710,"confidence":0.9975586,"speaker":"A"},{"text":"how","start":1128030,"end":1128350,"confidence":0.99365234,"speaker":"A"},{"text":"to","start":1128350,"end":1128550,"confidence":0.9707031,"speaker":"A"},{"text":"set","start":1128550,"end":1128750,"confidence":0.99853516,"speaker":"A"},{"text":"something,","start":1128750,"end":1129070,"confidence":0.95947266,"speaker":"A"},{"text":"how","start":1129070,"end":1129430,"confidence":0.9814453,"speaker":"A"},{"text":"I","start":1129430,"end":1129710,"confidence":0.99560547,"speaker":"A"},{"text":"set","start":1129710,"end":1129990,"confidence":0.99658203,"speaker":"A"},{"text":"something","start":1129990,"end":1130310,"confidence":1,"speaker":"A"},{"text":"like","start":1130310,"end":1130550,"confidence":0.99902344,"speaker":"A"},{"text":"this","start":1130550,"end":1130750,"confidence":0.9995117,"speaker":"A"},{"text":"up","start":1130750,"end":1131070,"confidence":0.99560547,"speaker":"A"},{"text":"and","start":1131860,"end":1132100,"confidence":0.9321289,"speaker":"A"},{"text":"how","start":1132100,"end":1132380,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1132380,"end":1132540,"confidence":0.99902344,"speaker":"A"},{"text":"could","start":1132540,"end":1132740,"confidence":0.99560547,"speaker":"A"},{"text":"use","start":1132740,"end":1133060,"confidence":0.9277344,"speaker":"A"},{"text":"use","start":1133300,"end":1133580,"confidence":1,"speaker":"A"},{"text":"my","start":1133580,"end":1133780,"confidence":0.99121094,"speaker":"A"},{"text":"library","start":1133780,"end":1134260,"confidence":0.9998372,"speaker":"A"},{"text":"to","start":1134260,"end":1134460,"confidence":0.9975586,"speaker":"A"},{"text":"then","start":1134460,"end":1134620,"confidence":0.9980469,"speaker":"A"},{"text":"go","start":1134620,"end":1134780,"confidence":0.99902344,"speaker":"A"},{"text":"ahead","start":1134780,"end":1134980,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":1134980,"end":1135220,"confidence":0.53125,"speaker":"A"},{"text":"do","start":1135220,"end":1135420,"confidence":1,"speaker":"A"},{"text":"this","start":1135420,"end":1135620,"confidence":1,"speaker":"A"},{"text":"yourself","start":1135620,"end":1136060,"confidence":0.99975586,"speaker":"A"},{"text":"for","start":1136060,"end":1136340,"confidence":0.9995117,"speaker":"A"},{"text":"any","start":1136340,"end":1136660,"confidence":0.9995117,"speaker":"A"},{"text":"sort","start":1136660,"end":1136980,"confidence":0.9975586,"speaker":"A"},{"text":"of","start":1136980,"end":1137100,"confidence":0.9995117,"speaker":"A"},{"text":"work","start":1137100,"end":1137340,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":1137340,"end":1137580,"confidence":0.99853516,"speaker":"A"},{"text":"you're","start":1137580,"end":1137780,"confidence":0.99886066,"speaker":"A"},{"text":"going","start":1137780,"end":1137860,"confidence":0.7861328,"speaker":"A"},{"text":"to","start":1137860,"end":1137940,"confidence":0.99853516,"speaker":"A"},{"text":"do","start":1137940,"end":1138060,"confidence":0.99902344,"speaker":"A"},{"text":"that","start":1138060,"end":1138260,"confidence":0.9140625,"speaker":"A"},{"text":"where","start":1138260,"end":1138460,"confidence":0.9970703,"speaker":"A"},{"text":"you","start":1138460,"end":1138580,"confidence":1,"speaker":"A"},{"text":"want","start":1138580,"end":1138700,"confidence":0.9140625,"speaker":"A"},{"text":"to","start":1138700,"end":1138860,"confidence":0.9941406,"speaker":"A"},{"text":"use","start":1138860,"end":1139100,"confidence":0.99609375,"speaker":"A"},{"text":"either","start":1139100,"end":1139420,"confidence":0.99975586,"speaker":"A"},{"text":"a","start":1139420,"end":1139580,"confidence":0.9238281,"speaker":"A"},{"text":"public","start":1139580,"end":1139780,"confidence":1,"speaker":"A"},{"text":"or","start":1139780,"end":1140020,"confidence":1,"speaker":"A"},{"text":"private","start":1140020,"end":1140300,"confidence":1,"speaker":"A"},{"text":"database","start":1140300,"end":1140980,"confidence":0.9995117,"speaker":"A"},{"text":"in","start":1141220,"end":1141500,"confidence":0.7890625,"speaker":"A"},{"text":"CloudKit.","start":1141500,"end":1142180,"confidence":0.99560547,"speaker":"A"},{"text":"So","start":1143300,"end":1143540,"confidence":0.9873047,"speaker":"A"},{"text":"this","start":1143540,"end":1143660,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1143660,"end":1143820,"confidence":1,"speaker":"A"},{"text":"where","start":1143820,"end":1143980,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":1143980,"end":1144140,"confidence":0.97509766,"speaker":"A"},{"text":"introduce","start":1144140,"end":1144580,"confidence":0.96435547,"speaker":"A"},{"text":"myself.","start":1144580,"end":1145060,"confidence":0.99487305,"speaker":"A"},{"text":"So","start":1145940,"end":1146180,"confidence":0.9741211,"speaker":"A"},{"text":"I'm","start":1146180,"end":1146340,"confidence":0.99690753,"speaker":"A"},{"text":"going","start":1146340,"end":1146420,"confidence":0.9428711,"speaker":"A"},{"text":"to","start":1146420,"end":1146500,"confidence":0.99853516,"speaker":"A"},{"text":"talk","start":1146500,"end":1146660,"confidence":0.9995117,"speaker":"A"},{"text":"today","start":1146660,"end":1146860,"confidence":0.99121094,"speaker":"A"},{"text":"about","start":1146860,"end":1147020,"confidence":1,"speaker":"A"},{"text":"building","start":1147020,"end":1147299,"confidence":0.9995117,"speaker":"A"},{"text":"Miskit,","start":1147299,"end":1148020,"confidence":0.82421875,"speaker":"A"},{"text":"which","start":1148260,"end":1148540,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1148540,"end":1148700,"confidence":0.99072266,"speaker":"A"},{"text":"my","start":1148700,"end":1148860,"confidence":0.9995117,"speaker":"A"},{"text":"library","start":1148860,"end":1149300,"confidence":1,"speaker":"A"},{"text":"I","start":1149300,"end":1149500,"confidence":0.99853516,"speaker":"A"},{"text":"built","start":1149500,"end":1149860,"confidence":0.96761066,"speaker":"A"},{"text":"for","start":1150340,"end":1150700,"confidence":0.9921875,"speaker":"A"},{"text":"doing","start":1150700,"end":1151060,"confidence":0.9995117,"speaker":"A"},{"text":"CloudKit","start":1151460,"end":1152100,"confidence":0.99609375,"speaker":"A"},{"text":"stuff","start":1152100,"end":1152580,"confidence":0.99886066,"speaker":"A"},{"text":"on","start":1152740,"end":1153020,"confidence":0.94628906,"speaker":"A"},{"text":"the","start":1153020,"end":1153180,"confidence":0.9995117,"speaker":"A"},{"text":"server","start":1153180,"end":1153540,"confidence":1,"speaker":"A"},{"text":"or","start":1153540,"end":1153740,"confidence":0.9951172,"speaker":"A"},{"text":"essentially","start":1153740,"end":1154180,"confidence":0.9970703,"speaker":"A"},{"text":"off","start":1154180,"end":1154420,"confidence":0.8652344,"speaker":"A"},{"text":"of,","start":1154420,"end":1154740,"confidence":0.9970703,"speaker":"A"},{"text":"not","start":1155380,"end":1155660,"confidence":0.99853516,"speaker":"A"},{"text":"off","start":1155660,"end":1155860,"confidence":0.9995117,"speaker":"A"},{"text":"of","start":1155860,"end":1156100,"confidence":0.9970703,"speaker":"A"},{"text":"Apple","start":1156100,"end":1156500,"confidence":0.99975586,"speaker":"A"},{"text":"platforms.","start":1156500,"end":1157140,"confidence":0.9978841,"speaker":"A"}]},{"text":"Evan, do you have any questions before I keep going? No, it's good. Good topic though. So like I said, we have CloudKit Web Services and CloudKit Web Services. We provide a lot of documentation.","start":1159770,"end":1174210,"confidence":0.9189453,"words":[{"text":"Evan,","start":1159770,"end":1160050,"confidence":0.9189453,"speaker":"A"},{"text":"do","start":1160050,"end":1160170,"confidence":0.9980469,"speaker":"A"},{"text":"you","start":1160170,"end":1160250,"confidence":0.9873047,"speaker":"A"},{"text":"have","start":1160250,"end":1160330,"confidence":0.9995117,"speaker":"A"},{"text":"any","start":1160330,"end":1160450,"confidence":0.99902344,"speaker":"A"},{"text":"questions","start":1160450,"end":1160850,"confidence":0.99975586,"speaker":"A"},{"text":"before","start":1160850,"end":1161010,"confidence":1,"speaker":"A"},{"text":"I","start":1161010,"end":1161170,"confidence":0.99853516,"speaker":"A"},{"text":"keep","start":1161170,"end":1161330,"confidence":0.99902344,"speaker":"A"},{"text":"going?","start":1161330,"end":1161610,"confidence":0.99902344,"speaker":"A"},{"text":"No,","start":1162730,"end":1163130,"confidence":0.9770508,"speaker":"B"},{"text":"it's","start":1163370,"end":1163730,"confidence":0.9757487,"speaker":"B"},{"text":"good.","start":1163730,"end":1163970,"confidence":0.6723633,"speaker":"B"},{"text":"Good","start":1163970,"end":1164250,"confidence":1,"speaker":"B"},{"text":"topic","start":1164250,"end":1164610,"confidence":0.9953613,"speaker":"B"},{"text":"though.","start":1164610,"end":1164890,"confidence":0.99072266,"speaker":"B"},{"text":"So","start":1166810,"end":1167090,"confidence":0.9042969,"speaker":"A"},{"text":"like","start":1167090,"end":1167250,"confidence":0.9951172,"speaker":"A"},{"text":"I","start":1167250,"end":1167410,"confidence":1,"speaker":"A"},{"text":"said,","start":1167410,"end":1167610,"confidence":1,"speaker":"A"},{"text":"we","start":1167610,"end":1167810,"confidence":1,"speaker":"A"},{"text":"have","start":1167810,"end":1167970,"confidence":1,"speaker":"A"},{"text":"CloudKit","start":1167970,"end":1168570,"confidence":0.86804,"speaker":"A"},{"text":"Web","start":1168570,"end":1168810,"confidence":0.99853516,"speaker":"A"},{"text":"Services","start":1168810,"end":1169050,"confidence":0.99853516,"speaker":"A"},{"text":"and","start":1170170,"end":1170530,"confidence":0.8461914,"speaker":"A"},{"text":"CloudKit","start":1170530,"end":1171090,"confidence":0.9489746,"speaker":"A"},{"text":"Web","start":1171090,"end":1171330,"confidence":0.9975586,"speaker":"A"},{"text":"Services.","start":1171330,"end":1171610,"confidence":0.99902344,"speaker":"A"},{"text":"We","start":1172330,"end":1172730,"confidence":0.53759766,"speaker":"A"},{"text":"provide","start":1172730,"end":1173090,"confidence":1,"speaker":"A"},{"text":"a","start":1173090,"end":1173329,"confidence":0.96240234,"speaker":"A"},{"text":"lot","start":1173329,"end":1173489,"confidence":1,"speaker":"A"},{"text":"of","start":1173489,"end":1173610,"confidence":0.99853516,"speaker":"A"},{"text":"documentation.","start":1173610,"end":1174210,"confidence":0.99990237,"speaker":"A"}]},{"text":"We talked about CloudKit JS and the instructions on how to compose a web service request which has everything I need to compose one. And back in 2020 I did this all manually.","start":1174210,"end":1184570,"confidence":0.99902344,"words":[{"text":"We","start":1174210,"end":1174450,"confidence":0.99902344,"speaker":"A"},{"text":"talked","start":1174450,"end":1174650,"confidence":0.9987793,"speaker":"A"},{"text":"about","start":1174650,"end":1174770,"confidence":0.99902344,"speaker":"A"},{"text":"CloudKit","start":1174770,"end":1175330,"confidence":0.9980469,"speaker":"A"},{"text":"JS","start":1175330,"end":1175770,"confidence":0.7067871,"speaker":"A"},{"text":"and","start":1175850,"end":1176170,"confidence":0.9921875,"speaker":"A"},{"text":"the","start":1176170,"end":1176370,"confidence":0.9819336,"speaker":"A"},{"text":"instructions","start":1176370,"end":1176890,"confidence":0.9773763,"speaker":"A"},{"text":"on","start":1176890,"end":1177090,"confidence":0.9995117,"speaker":"A"},{"text":"how","start":1177090,"end":1177290,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":1177290,"end":1177530,"confidence":0.9995117,"speaker":"A"},{"text":"compose","start":1177530,"end":1177930,"confidence":0.99853516,"speaker":"A"},{"text":"a","start":1177930,"end":1178090,"confidence":0.9926758,"speaker":"A"},{"text":"web","start":1178090,"end":1178410,"confidence":0.9980469,"speaker":"A"},{"text":"service","start":1178650,"end":1179050,"confidence":0.9902344,"speaker":"A"},{"text":"request","start":1179050,"end":1179570,"confidence":0.99853516,"speaker":"A"},{"text":"which","start":1179570,"end":1179810,"confidence":0.99902344,"speaker":"A"},{"text":"has","start":1179810,"end":1180090,"confidence":0.9975586,"speaker":"A"},{"text":"everything","start":1180090,"end":1180450,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":1180450,"end":1180730,"confidence":0.9980469,"speaker":"A"},{"text":"need","start":1180730,"end":1181050,"confidence":0.99853516,"speaker":"A"},{"text":"to","start":1181210,"end":1181490,"confidence":0.99853516,"speaker":"A"},{"text":"compose","start":1181490,"end":1181810,"confidence":0.99487305,"speaker":"A"},{"text":"one.","start":1181810,"end":1182050,"confidence":0.57421875,"speaker":"A"},{"text":"And","start":1182050,"end":1182370,"confidence":0.81640625,"speaker":"A"},{"text":"back","start":1182370,"end":1182610,"confidence":1,"speaker":"A"},{"text":"in","start":1182610,"end":1182810,"confidence":0.9995117,"speaker":"A"},{"text":"2020","start":1182810,"end":1183370,"confidence":0.9978,"speaker":"A"},{"text":"I","start":1183370,"end":1183610,"confidence":0.9995117,"speaker":"A"},{"text":"did","start":1183610,"end":1183730,"confidence":0.99902344,"speaker":"A"},{"text":"this","start":1183730,"end":1183890,"confidence":0.98535156,"speaker":"A"},{"text":"all","start":1183890,"end":1184090,"confidence":0.99316406,"speaker":"A"},{"text":"manually.","start":1184090,"end":1184570,"confidence":0.9992676,"speaker":"A"}]},{"text":"The thing is at this point, if you look at right there, actually if you look at the top, you can see it hasn't been updated in over 10 years, which is kind of crazy, but it works. And then we got introduced to something back in WWDC I want to say it was 23.","start":1186600,"end":1208200,"confidence":0.9946289,"words":[{"text":"The","start":1186600,"end":1186760,"confidence":0.9946289,"speaker":"A"},{"text":"thing","start":1186760,"end":1187000,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1187000,"end":1187240,"confidence":0.99902344,"speaker":"A"},{"text":"at","start":1187240,"end":1187440,"confidence":0.99902344,"speaker":"A"},{"text":"this","start":1187440,"end":1187640,"confidence":0.9995117,"speaker":"A"},{"text":"point,","start":1187640,"end":1187960,"confidence":0.9995117,"speaker":"A"},{"text":"if","start":1188600,"end":1188880,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":1188880,"end":1189040,"confidence":0.9995117,"speaker":"A"},{"text":"look","start":1189040,"end":1189200,"confidence":0.9995117,"speaker":"A"},{"text":"at","start":1189200,"end":1189440,"confidence":0.9814453,"speaker":"A"},{"text":"right","start":1189440,"end":1189720,"confidence":0.99902344,"speaker":"A"},{"text":"there,","start":1189720,"end":1190040,"confidence":0.99902344,"speaker":"A"},{"text":"actually","start":1191000,"end":1191320,"confidence":0.99316406,"speaker":"A"},{"text":"if","start":1191320,"end":1191480,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1191480,"end":1191560,"confidence":0.9995117,"speaker":"A"},{"text":"look","start":1191560,"end":1191680,"confidence":1,"speaker":"A"},{"text":"at","start":1191680,"end":1191800,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1191800,"end":1191920,"confidence":0.9995117,"speaker":"A"},{"text":"top,","start":1191920,"end":1192120,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1192120,"end":1192280,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":1192280,"end":1192400,"confidence":1,"speaker":"A"},{"text":"see","start":1192400,"end":1192600,"confidence":0.9995117,"speaker":"A"},{"text":"it","start":1192600,"end":1192760,"confidence":0.98828125,"speaker":"A"},{"text":"hasn't","start":1192760,"end":1193080,"confidence":0.99768066,"speaker":"A"},{"text":"been","start":1193080,"end":1193200,"confidence":0.9995117,"speaker":"A"},{"text":"updated","start":1193200,"end":1193560,"confidence":0.99975586,"speaker":"A"},{"text":"in","start":1193560,"end":1193800,"confidence":0.96875,"speaker":"A"},{"text":"over","start":1193800,"end":1194120,"confidence":0.99902344,"speaker":"A"},{"text":"10","start":1194200,"end":1194480,"confidence":0.99951,"speaker":"A"},{"text":"years,","start":1194480,"end":1194760,"confidence":0.99902344,"speaker":"A"},{"text":"which","start":1196600,"end":1196880,"confidence":0.9975586,"speaker":"A"},{"text":"is","start":1196880,"end":1197160,"confidence":0.99853516,"speaker":"A"},{"text":"kind","start":1197160,"end":1197440,"confidence":0.88671875,"speaker":"A"},{"text":"of","start":1197440,"end":1197600,"confidence":0.9736328,"speaker":"A"},{"text":"crazy,","start":1197600,"end":1198120,"confidence":0.9996745,"speaker":"A"},{"text":"but","start":1198920,"end":1199200,"confidence":0.99609375,"speaker":"A"},{"text":"it","start":1199200,"end":1199360,"confidence":0.99902344,"speaker":"A"},{"text":"works.","start":1199360,"end":1199800,"confidence":0.99731445,"speaker":"A"},{"text":"And","start":1200999,"end":1201280,"confidence":0.7661133,"speaker":"A"},{"text":"then","start":1201280,"end":1201560,"confidence":0.9995117,"speaker":"A"},{"text":"we","start":1202040,"end":1202440,"confidence":0.9975586,"speaker":"A"},{"text":"got","start":1202840,"end":1203240,"confidence":0.96191406,"speaker":"A"},{"text":"introduced","start":1204200,"end":1204800,"confidence":0.9563802,"speaker":"A"},{"text":"to","start":1204800,"end":1204960,"confidence":0.9355469,"speaker":"A"},{"text":"something","start":1204960,"end":1205200,"confidence":0.9970703,"speaker":"A"},{"text":"back","start":1205200,"end":1205440,"confidence":0.9951172,"speaker":"A"},{"text":"in","start":1205440,"end":1205600,"confidence":0.9897461,"speaker":"A"},{"text":"WWDC","start":1205600,"end":1206520,"confidence":0.7050781,"speaker":"A"},{"text":"I","start":1206520,"end":1206760,"confidence":0.93896484,"speaker":"A"},{"text":"want","start":1206760,"end":1206840,"confidence":0.89404297,"speaker":"A"},{"text":"to","start":1206840,"end":1206920,"confidence":0.9980469,"speaker":"A"},{"text":"say","start":1206920,"end":1207040,"confidence":0.99609375,"speaker":"A"},{"text":"it","start":1207040,"end":1207160,"confidence":0.8076172,"speaker":"A"},{"text":"was","start":1207160,"end":1207400,"confidence":0.79248047,"speaker":"A"},{"text":"23.","start":1207480,"end":1208200,"confidence":0.99805,"speaker":"A"}]},{"text":"We got introduced to the Open API generator which is really nice because then we have, we can generate the Swift code if we know what the Open API documentation looks like it. And of course Apple doesn't provide one for CloudKit but they did provide a pretty big piece open. If you ever you looked at the Open API generator, it's amazing. Takes the Open API gamble file and generates all the Swift code you need. One of the other issues I had with first developing Miskit in 2020 was that there was no way to like there was no abstraction layer which could differentiate between doing something on the server or using regular like URL session which is more targeted towards client side.","start":1210280,"end":1256080,"confidence":0.99853516,"words":[{"text":"We","start":1210280,"end":1210600,"confidence":0.99853516,"speaker":"A"},{"text":"got","start":1210600,"end":1210840,"confidence":0.96240234,"speaker":"A"},{"text":"introduced","start":1210840,"end":1211360,"confidence":0.9744466,"speaker":"A"},{"text":"to","start":1211360,"end":1211520,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1211520,"end":1211680,"confidence":0.9995117,"speaker":"A"},{"text":"Open","start":1211680,"end":1211920,"confidence":0.9980469,"speaker":"A"},{"text":"API","start":1211920,"end":1212440,"confidence":0.97436523,"speaker":"A"},{"text":"generator","start":1212440,"end":1213000,"confidence":0.9851074,"speaker":"A"},{"text":"which","start":1213800,"end":1214000,"confidence":0.99365234,"speaker":"A"},{"text":"is","start":1214000,"end":1214320,"confidence":1,"speaker":"A"},{"text":"really","start":1214320,"end":1214600,"confidence":0.9995117,"speaker":"A"},{"text":"nice","start":1214600,"end":1215000,"confidence":1,"speaker":"A"},{"text":"because","start":1215000,"end":1215400,"confidence":0.99902344,"speaker":"A"},{"text":"then","start":1215960,"end":1216360,"confidence":0.9760742,"speaker":"A"},{"text":"we","start":1216840,"end":1217160,"confidence":0.6513672,"speaker":"A"},{"text":"have,","start":1217160,"end":1217480,"confidence":0.9902344,"speaker":"A"},{"text":"we","start":1217640,"end":1217920,"confidence":0.99609375,"speaker":"A"},{"text":"can","start":1217920,"end":1218080,"confidence":0.99902344,"speaker":"A"},{"text":"generate","start":1218080,"end":1218440,"confidence":0.99975586,"speaker":"A"},{"text":"the","start":1218440,"end":1218560,"confidence":0.9975586,"speaker":"A"},{"text":"Swift","start":1218560,"end":1218840,"confidence":0.7780762,"speaker":"A"},{"text":"code","start":1218840,"end":1219120,"confidence":0.96761066,"speaker":"A"},{"text":"if","start":1219120,"end":1219280,"confidence":1,"speaker":"A"},{"text":"we","start":1219280,"end":1219440,"confidence":0.99902344,"speaker":"A"},{"text":"know","start":1219440,"end":1219640,"confidence":0.98779297,"speaker":"A"},{"text":"what","start":1219640,"end":1219840,"confidence":0.99853516,"speaker":"A"},{"text":"the","start":1219840,"end":1220080,"confidence":0.9638672,"speaker":"A"},{"text":"Open","start":1220080,"end":1220400,"confidence":0.9980469,"speaker":"A"},{"text":"API","start":1220400,"end":1220880,"confidence":0.8979492,"speaker":"A"},{"text":"documentation","start":1220880,"end":1221720,"confidence":0.99970704,"speaker":"A"},{"text":"looks","start":1222200,"end":1222600,"confidence":1,"speaker":"A"},{"text":"like","start":1222600,"end":1222720,"confidence":0.99902344,"speaker":"A"},{"text":"it.","start":1222720,"end":1222880,"confidence":0.7519531,"speaker":"A"},{"text":"And","start":1222880,"end":1223040,"confidence":0.87597656,"speaker":"A"},{"text":"of","start":1223040,"end":1223160,"confidence":0.9980469,"speaker":"A"},{"text":"course","start":1223160,"end":1223280,"confidence":1,"speaker":"A"},{"text":"Apple","start":1223280,"end":1223600,"confidence":0.99975586,"speaker":"A"},{"text":"doesn't","start":1223600,"end":1223840,"confidence":0.99853516,"speaker":"A"},{"text":"provide","start":1223840,"end":1224080,"confidence":1,"speaker":"A"},{"text":"one","start":1224080,"end":1224320,"confidence":0.9926758,"speaker":"A"},{"text":"for","start":1224320,"end":1224480,"confidence":0.99902344,"speaker":"A"},{"text":"CloudKit","start":1224480,"end":1225240,"confidence":0.9314,"speaker":"A"},{"text":"but","start":1225960,"end":1226280,"confidence":0.9951172,"speaker":"A"},{"text":"they","start":1226280,"end":1226480,"confidence":0.88427734,"speaker":"A"},{"text":"did","start":1226480,"end":1226720,"confidence":0.98779297,"speaker":"A"},{"text":"provide","start":1226720,"end":1227040,"confidence":1,"speaker":"A"},{"text":"a","start":1227040,"end":1227280,"confidence":0.9995117,"speaker":"A"},{"text":"pretty","start":1227280,"end":1227520,"confidence":0.9998372,"speaker":"A"},{"text":"big","start":1227520,"end":1227720,"confidence":1,"speaker":"A"},{"text":"piece","start":1227720,"end":1228120,"confidence":0.99869794,"speaker":"A"},{"text":"open.","start":1229240,"end":1229639,"confidence":0.6689453,"speaker":"A"},{"text":"If","start":1229800,"end":1230040,"confidence":0.9873047,"speaker":"A"},{"text":"you","start":1230040,"end":1230120,"confidence":0.77490234,"speaker":"A"},{"text":"ever","start":1230120,"end":1230360,"confidence":0.91748047,"speaker":"A"},{"text":"you","start":1230360,"end":1230640,"confidence":0.7763672,"speaker":"A"},{"text":"looked","start":1230640,"end":1230920,"confidence":0.9987793,"speaker":"A"},{"text":"at","start":1230920,"end":1231000,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1231000,"end":1231120,"confidence":0.99902344,"speaker":"A"},{"text":"Open","start":1231120,"end":1231320,"confidence":0.99902344,"speaker":"A"},{"text":"API","start":1231320,"end":1231760,"confidence":0.9448242,"speaker":"A"},{"text":"generator,","start":1231760,"end":1232160,"confidence":0.9995117,"speaker":"A"},{"text":"it's","start":1232160,"end":1232400,"confidence":0.89192706,"speaker":"A"},{"text":"amazing.","start":1232400,"end":1232840,"confidence":0.9998372,"speaker":"A"},{"text":"Takes","start":1232840,"end":1233200,"confidence":0.7607422,"speaker":"A"},{"text":"the","start":1233200,"end":1233320,"confidence":0.46704102,"speaker":"A"},{"text":"Open","start":1233320,"end":1233520,"confidence":0.99902344,"speaker":"A"},{"text":"API","start":1233520,"end":1234080,"confidence":0.9501953,"speaker":"A"},{"text":"gamble","start":1234080,"end":1234640,"confidence":0.7845052,"speaker":"A"},{"text":"file","start":1234640,"end":1235000,"confidence":0.99121094,"speaker":"A"},{"text":"and","start":1235000,"end":1235320,"confidence":0.53125,"speaker":"A"},{"text":"generates","start":1235560,"end":1236160,"confidence":0.99975586,"speaker":"A"},{"text":"all","start":1236160,"end":1236400,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1236400,"end":1236560,"confidence":0.99609375,"speaker":"A"},{"text":"Swift","start":1236560,"end":1236840,"confidence":0.7429199,"speaker":"A"},{"text":"code","start":1236840,"end":1237080,"confidence":0.9991862,"speaker":"A"},{"text":"you","start":1237080,"end":1237240,"confidence":0.99853516,"speaker":"A"},{"text":"need.","start":1237240,"end":1237560,"confidence":1,"speaker":"A"},{"text":"One","start":1237880,"end":1238160,"confidence":0.99560547,"speaker":"A"},{"text":"of","start":1238160,"end":1238320,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1238320,"end":1238440,"confidence":1,"speaker":"A"},{"text":"other","start":1238440,"end":1238600,"confidence":0.99902344,"speaker":"A"},{"text":"issues","start":1238600,"end":1238880,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":1238880,"end":1239120,"confidence":0.99902344,"speaker":"A"},{"text":"had","start":1239120,"end":1239280,"confidence":0.99658203,"speaker":"A"},{"text":"with","start":1239280,"end":1239560,"confidence":0.98828125,"speaker":"A"},{"text":"first","start":1240880,"end":1241040,"confidence":0.98339844,"speaker":"A"},{"text":"developing","start":1241040,"end":1241480,"confidence":0.99902344,"speaker":"A"},{"text":"Miskit","start":1241480,"end":1242160,"confidence":0.90844727,"speaker":"A"},{"text":"in","start":1242160,"end":1242440,"confidence":0.99072266,"speaker":"A"},{"text":"2020","start":1242440,"end":1243120,"confidence":0.99658,"speaker":"A"},{"text":"was","start":1243600,"end":1243920,"confidence":0.99609375,"speaker":"A"},{"text":"that","start":1243920,"end":1244160,"confidence":0.9951172,"speaker":"A"},{"text":"there","start":1244160,"end":1244360,"confidence":1,"speaker":"A"},{"text":"was","start":1244360,"end":1244520,"confidence":0.9995117,"speaker":"A"},{"text":"no","start":1244520,"end":1244720,"confidence":1,"speaker":"A"},{"text":"way","start":1244720,"end":1245000,"confidence":1,"speaker":"A"},{"text":"to","start":1245000,"end":1245320,"confidence":0.99658203,"speaker":"A"},{"text":"like","start":1245320,"end":1245680,"confidence":0.99072266,"speaker":"A"},{"text":"there","start":1245840,"end":1246160,"confidence":0.9770508,"speaker":"A"},{"text":"was","start":1246160,"end":1246360,"confidence":0.9941406,"speaker":"A"},{"text":"no","start":1246360,"end":1246520,"confidence":0.95410156,"speaker":"A"},{"text":"abstraction","start":1246520,"end":1247120,"confidence":0.9992676,"speaker":"A"},{"text":"layer","start":1247120,"end":1247520,"confidence":0.99934894,"speaker":"A"},{"text":"which","start":1247520,"end":1247800,"confidence":0.99902344,"speaker":"A"},{"text":"could","start":1247800,"end":1248040,"confidence":0.99316406,"speaker":"A"},{"text":"differentiate","start":1248040,"end":1248640,"confidence":0.9992676,"speaker":"A"},{"text":"between","start":1248640,"end":1248920,"confidence":1,"speaker":"A"},{"text":"doing","start":1248920,"end":1249200,"confidence":0.99902344,"speaker":"A"},{"text":"something","start":1249200,"end":1249440,"confidence":1,"speaker":"A"},{"text":"on","start":1249440,"end":1249640,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":1249640,"end":1249800,"confidence":0.98876953,"speaker":"A"},{"text":"server","start":1249800,"end":1250320,"confidence":0.9995117,"speaker":"A"},{"text":"or","start":1250720,"end":1251080,"confidence":0.99902344,"speaker":"A"},{"text":"using","start":1251080,"end":1251440,"confidence":0.9975586,"speaker":"A"},{"text":"regular","start":1251760,"end":1252400,"confidence":0.99902344,"speaker":"A"},{"text":"like","start":1252480,"end":1252880,"confidence":0.9765625,"speaker":"A"},{"text":"URL","start":1253040,"end":1253680,"confidence":0.9951172,"speaker":"A"},{"text":"session","start":1253680,"end":1254040,"confidence":0.9991862,"speaker":"A"},{"text":"which","start":1254040,"end":1254200,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1254200,"end":1254360,"confidence":0.99658203,"speaker":"A"},{"text":"more","start":1254360,"end":1254600,"confidence":1,"speaker":"A"},{"text":"targeted","start":1254600,"end":1255080,"confidence":1,"speaker":"A"},{"text":"towards","start":1255080,"end":1255360,"confidence":0.9992676,"speaker":"A"},{"text":"client","start":1255360,"end":1255719,"confidence":0.9328613,"speaker":"A"},{"text":"side.","start":1255719,"end":1256080,"confidence":0.99853516,"speaker":"A"}]},{"text":"So I had to build my own abstraction for that. Luckily Open API has, there's open API transport I believe, which provides an abstraction layer where you can then plug in either use Async HTTP client, which is the server way of doing it, or you can plug in a URL session transport, which is of course the client way to do, provides a really great tutorial. I highly recommend checking this out as well as the doxy documentation that they provide. So this is great. But then I'd have to go ahead and I'd have to figure out a way to convert all this documentation into an open API document.","start":1258960,"end":1301140,"confidence":0.9970703,"words":[{"text":"So","start":1258960,"end":1259360,"confidence":0.9970703,"speaker":"A"},{"text":"I","start":1259440,"end":1259720,"confidence":0.99121094,"speaker":"A"},{"text":"had","start":1259720,"end":1259880,"confidence":0.8510742,"speaker":"A"},{"text":"to","start":1259880,"end":1260000,"confidence":0.97216797,"speaker":"A"},{"text":"build","start":1260000,"end":1260120,"confidence":0.9970703,"speaker":"A"},{"text":"my","start":1260120,"end":1260280,"confidence":0.9995117,"speaker":"A"},{"text":"own","start":1260280,"end":1260440,"confidence":1,"speaker":"A"},{"text":"abstraction","start":1260440,"end":1261000,"confidence":0.90441895,"speaker":"A"},{"text":"for","start":1261000,"end":1261120,"confidence":1,"speaker":"A"},{"text":"that.","start":1261120,"end":1261280,"confidence":1,"speaker":"A"},{"text":"Luckily","start":1261280,"end":1261640,"confidence":0.99641925,"speaker":"A"},{"text":"Open","start":1261640,"end":1261840,"confidence":0.9995117,"speaker":"A"},{"text":"API","start":1261840,"end":1262440,"confidence":0.7475586,"speaker":"A"},{"text":"has,","start":1262440,"end":1262800,"confidence":0.99609375,"speaker":"A"},{"text":"there's","start":1264080,"end":1264560,"confidence":0.99820966,"speaker":"A"},{"text":"open","start":1264560,"end":1264880,"confidence":0.87109375,"speaker":"A"},{"text":"API","start":1264960,"end":1265600,"confidence":0.8029785,"speaker":"A"},{"text":"transport","start":1265600,"end":1266240,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":1266240,"end":1266520,"confidence":0.99658203,"speaker":"A"},{"text":"believe,","start":1266520,"end":1266800,"confidence":0.9995117,"speaker":"A"},{"text":"which","start":1266880,"end":1267240,"confidence":0.9995117,"speaker":"A"},{"text":"provides","start":1267240,"end":1267600,"confidence":0.9995117,"speaker":"A"},{"text":"an","start":1267600,"end":1267720,"confidence":0.99121094,"speaker":"A"},{"text":"abstraction","start":1267720,"end":1268400,"confidence":0.98132324,"speaker":"A"},{"text":"layer","start":1268480,"end":1268840,"confidence":0.96940106,"speaker":"A"},{"text":"where","start":1268840,"end":1269000,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1269000,"end":1269120,"confidence":1,"speaker":"A"},{"text":"can","start":1269120,"end":1269240,"confidence":0.9995117,"speaker":"A"},{"text":"then","start":1269240,"end":1269400,"confidence":0.9975586,"speaker":"A"},{"text":"plug","start":1269400,"end":1269640,"confidence":0.9992676,"speaker":"A"},{"text":"in","start":1269640,"end":1269840,"confidence":0.9946289,"speaker":"A"},{"text":"either","start":1269840,"end":1270120,"confidence":0.9980469,"speaker":"A"},{"text":"use","start":1270120,"end":1270400,"confidence":0.99316406,"speaker":"A"},{"text":"Async","start":1270980,"end":1271420,"confidence":0.94433594,"speaker":"A"},{"text":"HTTP","start":1271420,"end":1272100,"confidence":0.9790039,"speaker":"A"},{"text":"client,","start":1272100,"end":1272620,"confidence":0.9975586,"speaker":"A"},{"text":"which","start":1272620,"end":1272900,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1272900,"end":1273140,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1273140,"end":1273420,"confidence":0.9995117,"speaker":"A"},{"text":"server","start":1273420,"end":1273900,"confidence":0.99902344,"speaker":"A"},{"text":"way","start":1273900,"end":1274060,"confidence":0.98583984,"speaker":"A"},{"text":"of","start":1274060,"end":1274220,"confidence":1,"speaker":"A"},{"text":"doing","start":1274220,"end":1274380,"confidence":1,"speaker":"A"},{"text":"it,","start":1274380,"end":1274540,"confidence":0.9995117,"speaker":"A"},{"text":"or","start":1274540,"end":1274780,"confidence":0.59228516,"speaker":"A"},{"text":"you","start":1274780,"end":1275020,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":1275020,"end":1275180,"confidence":0.9995117,"speaker":"A"},{"text":"plug","start":1275180,"end":1275380,"confidence":0.99975586,"speaker":"A"},{"text":"in","start":1275380,"end":1275500,"confidence":0.99658203,"speaker":"A"},{"text":"a","start":1275500,"end":1275660,"confidence":0.99609375,"speaker":"A"},{"text":"URL","start":1275660,"end":1276180,"confidence":0.99853516,"speaker":"A"},{"text":"session","start":1276180,"end":1276660,"confidence":0.87906903,"speaker":"A"},{"text":"transport,","start":1277060,"end":1277780,"confidence":0.99902344,"speaker":"A"},{"text":"which","start":1277860,"end":1278180,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1278180,"end":1278500,"confidence":0.9995117,"speaker":"A"},{"text":"of","start":1278500,"end":1278780,"confidence":0.5307617,"speaker":"A"},{"text":"course","start":1278780,"end":1278940,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1278940,"end":1279100,"confidence":0.5600586,"speaker":"A"},{"text":"client","start":1279100,"end":1279380,"confidence":0.99487305,"speaker":"A"},{"text":"way","start":1279380,"end":1279580,"confidence":0.9941406,"speaker":"A"},{"text":"to","start":1279580,"end":1279700,"confidence":0.9995117,"speaker":"A"},{"text":"do,","start":1279700,"end":1279820,"confidence":0.9995117,"speaker":"A"},{"text":"provides","start":1282060,"end":1282420,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":1282420,"end":1282540,"confidence":0.9995117,"speaker":"A"},{"text":"really","start":1282540,"end":1282700,"confidence":0.9995117,"speaker":"A"},{"text":"great","start":1282700,"end":1282980,"confidence":0.9995117,"speaker":"A"},{"text":"tutorial.","start":1283060,"end":1283740,"confidence":0.9855957,"speaker":"A"},{"text":"I","start":1283740,"end":1283980,"confidence":0.96777344,"speaker":"A"},{"text":"highly","start":1283980,"end":1284300,"confidence":0.998291,"speaker":"A"},{"text":"recommend","start":1284300,"end":1284620,"confidence":1,"speaker":"A"},{"text":"checking","start":1284620,"end":1284900,"confidence":0.99934894,"speaker":"A"},{"text":"this","start":1284900,"end":1285060,"confidence":0.9951172,"speaker":"A"},{"text":"out","start":1285060,"end":1285380,"confidence":0.9970703,"speaker":"A"},{"text":"as","start":1286579,"end":1286859,"confidence":1,"speaker":"A"},{"text":"well","start":1286859,"end":1287020,"confidence":1,"speaker":"A"},{"text":"as","start":1287020,"end":1287300,"confidence":0.99853516,"speaker":"A"},{"text":"the","start":1287380,"end":1287740,"confidence":0.9975586,"speaker":"A"},{"text":"doxy","start":1287740,"end":1288340,"confidence":0.84684247,"speaker":"A"},{"text":"documentation","start":1288340,"end":1289060,"confidence":0.99990237,"speaker":"A"},{"text":"that","start":1289220,"end":1289500,"confidence":0.99853516,"speaker":"A"},{"text":"they","start":1289500,"end":1289700,"confidence":0.9995117,"speaker":"A"},{"text":"provide.","start":1289700,"end":1290020,"confidence":0.9970703,"speaker":"A"},{"text":"So","start":1291860,"end":1292220,"confidence":0.9667969,"speaker":"A"},{"text":"this","start":1292220,"end":1292460,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1292460,"end":1292660,"confidence":0.95654297,"speaker":"A"},{"text":"great.","start":1292660,"end":1292940,"confidence":1,"speaker":"A"},{"text":"But","start":1292940,"end":1293180,"confidence":0.99609375,"speaker":"A"},{"text":"then","start":1293180,"end":1293420,"confidence":0.99853516,"speaker":"A"},{"text":"I'd","start":1293420,"end":1293820,"confidence":0.99625653,"speaker":"A"},{"text":"have","start":1293820,"end":1293980,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":1293980,"end":1294100,"confidence":1,"speaker":"A"},{"text":"go","start":1294100,"end":1294220,"confidence":0.9995117,"speaker":"A"},{"text":"ahead","start":1294220,"end":1294500,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":1294660,"end":1294940,"confidence":0.99853516,"speaker":"A"},{"text":"I'd","start":1294940,"end":1295180,"confidence":0.8806966,"speaker":"A"},{"text":"have","start":1295180,"end":1295300,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":1295300,"end":1295420,"confidence":0.9995117,"speaker":"A"},{"text":"figure","start":1295420,"end":1295660,"confidence":0.7961426,"speaker":"A"},{"text":"out","start":1295660,"end":1295820,"confidence":0.99853516,"speaker":"A"},{"text":"a","start":1295820,"end":1295980,"confidence":0.9970703,"speaker":"A"},{"text":"way","start":1295980,"end":1296260,"confidence":0.99560547,"speaker":"A"},{"text":"to","start":1296900,"end":1297020,"confidence":0.9819336,"speaker":"A"},{"text":"convert","start":1297020,"end":1297300,"confidence":0.9992676,"speaker":"A"},{"text":"all","start":1297300,"end":1297540,"confidence":0.9995117,"speaker":"A"},{"text":"this","start":1297540,"end":1297740,"confidence":0.9975586,"speaker":"A"},{"text":"documentation","start":1297740,"end":1298500,"confidence":0.9995117,"speaker":"A"},{"text":"into","start":1298660,"end":1299060,"confidence":0.9995117,"speaker":"A"},{"text":"an","start":1299140,"end":1299420,"confidence":0.99853516,"speaker":"A"},{"text":"open","start":1299420,"end":1299700,"confidence":0.9995117,"speaker":"A"},{"text":"API","start":1299700,"end":1300340,"confidence":0.9458008,"speaker":"A"},{"text":"document.","start":1300420,"end":1301140,"confidence":0.9998779,"speaker":"A"}]},{"text":"I mean, can you guess what helped me to get build an open API document from all this documentation? Some of the tools, some AI tool. Yes. AI came and I'm like, holy crap. Like AI is really good at documenting your code, but it's also pretty darn good at taking documentation and building code.","start":1302420,"end":1326250,"confidence":0.5463867,"words":[{"text":"I","start":1302420,"end":1302700,"confidence":0.5463867,"speaker":"A"},{"text":"mean,","start":1302700,"end":1302860,"confidence":0.9926758,"speaker":"A"},{"text":"can","start":1302860,"end":1303020,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1303020,"end":1303180,"confidence":0.99902344,"speaker":"A"},{"text":"guess","start":1303180,"end":1303540,"confidence":0.99975586,"speaker":"A"},{"text":"what","start":1303940,"end":1304260,"confidence":0.9995117,"speaker":"A"},{"text":"helped","start":1304260,"end":1304620,"confidence":0.76538086,"speaker":"A"},{"text":"me","start":1304620,"end":1304980,"confidence":0.9926758,"speaker":"A"},{"text":"to","start":1305540,"end":1305820,"confidence":0.9873047,"speaker":"A"},{"text":"get","start":1305820,"end":1306100,"confidence":0.6230469,"speaker":"A"},{"text":"build","start":1306180,"end":1306580,"confidence":0.95996094,"speaker":"A"},{"text":"an","start":1306820,"end":1307100,"confidence":0.9550781,"speaker":"A"},{"text":"open","start":1307100,"end":1307340,"confidence":0.9995117,"speaker":"A"},{"text":"API","start":1307340,"end":1307860,"confidence":0.90722656,"speaker":"A"},{"text":"document","start":1307860,"end":1308260,"confidence":0.9959717,"speaker":"A"},{"text":"from","start":1308260,"end":1308460,"confidence":0.99853516,"speaker":"A"},{"text":"all","start":1308460,"end":1308620,"confidence":0.9995117,"speaker":"A"},{"text":"this","start":1308620,"end":1308820,"confidence":0.9555664,"speaker":"A"},{"text":"documentation?","start":1308820,"end":1309540,"confidence":0.9988281,"speaker":"A"},{"text":"Some","start":1310340,"end":1310740,"confidence":0.62402344,"speaker":"B"},{"text":"of","start":1311060,"end":1311260,"confidence":0.25683594,"speaker":"B"},{"text":"the","start":1311260,"end":1311300,"confidence":0.56347656,"speaker":"B"},{"text":"tools,","start":1311300,"end":1311620,"confidence":0.72314453,"speaker":"B"},{"text":"some","start":1312659,"end":1312940,"confidence":0.9658203,"speaker":"B"},{"text":"AI","start":1312940,"end":1313260,"confidence":0.9914551,"speaker":"B"},{"text":"tool.","start":1313260,"end":1313540,"confidence":0.9716797,"speaker":"B"},{"text":"Yes.","start":1314500,"end":1314980,"confidence":0.9482422,"speaker":"A"},{"text":"AI","start":1316820,"end":1317340,"confidence":0.91967773,"speaker":"A"},{"text":"came","start":1317340,"end":1317620,"confidence":0.9980469,"speaker":"A"},{"text":"and","start":1317620,"end":1317900,"confidence":0.99853516,"speaker":"A"},{"text":"I'm","start":1317900,"end":1318140,"confidence":0.99934894,"speaker":"A"},{"text":"like,","start":1318140,"end":1318340,"confidence":0.9921875,"speaker":"A"},{"text":"holy","start":1318340,"end":1318620,"confidence":0.82543945,"speaker":"A"},{"text":"crap.","start":1318620,"end":1318980,"confidence":0.86450195,"speaker":"A"},{"text":"Like","start":1319460,"end":1319860,"confidence":0.6220703,"speaker":"A"},{"text":"AI","start":1320180,"end":1320660,"confidence":0.92407227,"speaker":"A"},{"text":"is","start":1320660,"end":1320860,"confidence":0.9946289,"speaker":"A"},{"text":"really","start":1320860,"end":1321020,"confidence":0.99902344,"speaker":"A"},{"text":"good","start":1321020,"end":1321180,"confidence":0.99902344,"speaker":"A"},{"text":"at","start":1321180,"end":1321340,"confidence":0.9995117,"speaker":"A"},{"text":"documenting","start":1321340,"end":1321820,"confidence":0.99990237,"speaker":"A"},{"text":"your","start":1321820,"end":1321980,"confidence":0.99902344,"speaker":"A"},{"text":"code,","start":1321980,"end":1322260,"confidence":0.9998372,"speaker":"A"},{"text":"but","start":1322260,"end":1322460,"confidence":0.96972656,"speaker":"A"},{"text":"it's","start":1322460,"end":1322660,"confidence":0.9749349,"speaker":"A"},{"text":"also","start":1322660,"end":1322820,"confidence":0.9995117,"speaker":"A"},{"text":"pretty","start":1322820,"end":1323060,"confidence":0.9996745,"speaker":"A"},{"text":"darn","start":1323060,"end":1323260,"confidence":0.90804034,"speaker":"A"},{"text":"good","start":1323260,"end":1323420,"confidence":1,"speaker":"A"},{"text":"at","start":1323420,"end":1323700,"confidence":0.9902344,"speaker":"A"},{"text":"taking","start":1324490,"end":1324690,"confidence":0.93066406,"speaker":"A"},{"text":"documentation","start":1324690,"end":1325370,"confidence":0.9998047,"speaker":"A"},{"text":"and","start":1325370,"end":1325570,"confidence":0.99609375,"speaker":"A"},{"text":"building","start":1325570,"end":1325810,"confidence":0.9995117,"speaker":"A"},{"text":"code.","start":1325810,"end":1326250,"confidence":0.8733724,"speaker":"A"}]},{"text":"So then I would just plug it. I've been plugging in with Claude and it has a copy of all the documentation in my repo and it can go ahead and edit the open API. It's not perfect by any means, of course, but that's what unit tests are for.","start":1326890,"end":1341610,"confidence":0.9238281,"words":[{"text":"So","start":1326890,"end":1327170,"confidence":0.9238281,"speaker":"A"},{"text":"then","start":1327170,"end":1327450,"confidence":0.99658203,"speaker":"A"},{"text":"I","start":1327930,"end":1328250,"confidence":0.9819336,"speaker":"A"},{"text":"would","start":1328250,"end":1328450,"confidence":0.9848633,"speaker":"A"},{"text":"just","start":1328450,"end":1328610,"confidence":0.99902344,"speaker":"A"},{"text":"plug","start":1328610,"end":1328850,"confidence":0.9938965,"speaker":"A"},{"text":"it.","start":1328850,"end":1329050,"confidence":0.8227539,"speaker":"A"},{"text":"I've","start":1329050,"end":1329290,"confidence":0.99397784,"speaker":"A"},{"text":"been","start":1329290,"end":1329410,"confidence":0.9975586,"speaker":"A"},{"text":"plugging","start":1329410,"end":1329730,"confidence":0.95751953,"speaker":"A"},{"text":"in","start":1329730,"end":1329890,"confidence":0.8691406,"speaker":"A"},{"text":"with","start":1329890,"end":1330050,"confidence":0.9995117,"speaker":"A"},{"text":"Claude","start":1330050,"end":1330650,"confidence":0.73999023,"speaker":"A"},{"text":"and","start":1331050,"end":1331330,"confidence":0.9667969,"speaker":"A"},{"text":"it","start":1331330,"end":1331490,"confidence":0.9975586,"speaker":"A"},{"text":"has","start":1331490,"end":1331650,"confidence":1,"speaker":"A"},{"text":"a","start":1331650,"end":1331850,"confidence":0.9995117,"speaker":"A"},{"text":"copy","start":1331850,"end":1332170,"confidence":1,"speaker":"A"},{"text":"of","start":1332170,"end":1332290,"confidence":1,"speaker":"A"},{"text":"all","start":1332290,"end":1332450,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1332450,"end":1332610,"confidence":0.9995117,"speaker":"A"},{"text":"documentation","start":1332610,"end":1333210,"confidence":0.99970704,"speaker":"A"},{"text":"in","start":1333210,"end":1333410,"confidence":0.9277344,"speaker":"A"},{"text":"my","start":1333410,"end":1333570,"confidence":1,"speaker":"A"},{"text":"repo","start":1333570,"end":1334090,"confidence":0.9848633,"speaker":"A"},{"text":"and","start":1334410,"end":1334730,"confidence":0.9682617,"speaker":"A"},{"text":"it","start":1334730,"end":1334930,"confidence":0.8828125,"speaker":"A"},{"text":"can","start":1334930,"end":1335090,"confidence":0.9995117,"speaker":"A"},{"text":"go","start":1335090,"end":1335250,"confidence":0.9995117,"speaker":"A"},{"text":"ahead","start":1335250,"end":1335410,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":1335410,"end":1335610,"confidence":0.99853516,"speaker":"A"},{"text":"edit","start":1335610,"end":1336090,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1336250,"end":1336490,"confidence":0.9824219,"speaker":"A"},{"text":"open","start":1336490,"end":1336690,"confidence":0.99316406,"speaker":"A"},{"text":"API.","start":1336690,"end":1337210,"confidence":0.9802246,"speaker":"A"},{"text":"It's","start":1337210,"end":1337490,"confidence":0.9817708,"speaker":"A"},{"text":"not","start":1337490,"end":1337690,"confidence":0.99853516,"speaker":"A"},{"text":"perfect","start":1337690,"end":1338010,"confidence":0.97998047,"speaker":"A"},{"text":"by","start":1338010,"end":1338250,"confidence":0.99853516,"speaker":"A"},{"text":"any","start":1338250,"end":1338490,"confidence":1,"speaker":"A"},{"text":"means,","start":1338490,"end":1338810,"confidence":1,"speaker":"A"},{"text":"of","start":1338810,"end":1339090,"confidence":0.99902344,"speaker":"A"},{"text":"course,","start":1339090,"end":1339370,"confidence":1,"speaker":"A"},{"text":"but","start":1339530,"end":1339849,"confidence":0.9970703,"speaker":"A"},{"text":"that's","start":1339849,"end":1340170,"confidence":0.9998372,"speaker":"A"},{"text":"what","start":1340170,"end":1340410,"confidence":0.9980469,"speaker":"A"},{"text":"unit","start":1340410,"end":1340850,"confidence":0.84521484,"speaker":"A"},{"text":"tests","start":1340850,"end":1341210,"confidence":0.9946289,"speaker":"A"},{"text":"are","start":1341210,"end":1341330,"confidence":0.99560547,"speaker":"A"},{"text":"for.","start":1341330,"end":1341610,"confidence":0.99658203,"speaker":"A"}]},{"text":"And actually having integration tests in order to do stuff so that.","start":1343850,"end":1351700,"confidence":0.89697266,"words":[{"text":"And","start":1343850,"end":1344170,"confidence":0.89697266,"speaker":"A"},{"text":"actually","start":1344170,"end":1344410,"confidence":0.99853516,"speaker":"A"},{"text":"having","start":1344410,"end":1344650,"confidence":0.87402344,"speaker":"A"},{"text":"integration","start":1344650,"end":1345210,"confidence":0.9769287,"speaker":"A"},{"text":"tests","start":1345210,"end":1345770,"confidence":0.9975586,"speaker":"A"},{"text":"in","start":1346250,"end":1346530,"confidence":0.99853516,"speaker":"A"},{"text":"order","start":1346530,"end":1346730,"confidence":1,"speaker":"A"},{"text":"to","start":1346730,"end":1346930,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":1346930,"end":1347130,"confidence":0.9995117,"speaker":"A"},{"text":"stuff","start":1347130,"end":1347530,"confidence":0.9998372,"speaker":"A"},{"text":"so","start":1347690,"end":1348090,"confidence":0.83496094,"speaker":"A"},{"text":"that.","start":1351460,"end":1351700,"confidence":0.9980469,"speaker":"A"}]},{"text":"Sorry, I just want to make sure nothing important.","start":1355380,"end":1361460,"confidence":0.9995117,"words":[{"text":"Sorry,","start":1355380,"end":1355740,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":1355740,"end":1355860,"confidence":0.9995117,"speaker":"A"},{"text":"just","start":1355860,"end":1355980,"confidence":1,"speaker":"A"},{"text":"want","start":1355980,"end":1356140,"confidence":0.99560547,"speaker":"A"},{"text":"to","start":1356140,"end":1356300,"confidence":0.99365234,"speaker":"A"},{"text":"make","start":1356300,"end":1356460,"confidence":1,"speaker":"A"},{"text":"sure","start":1356460,"end":1356740,"confidence":1,"speaker":"A"},{"text":"nothing","start":1360660,"end":1361100,"confidence":0.88623047,"speaker":"A"},{"text":"important.","start":1361100,"end":1361460,"confidence":1,"speaker":"A"}]},{"text":"I hate teams.","start":1366900,"end":1368020,"confidence":0.9951172,"words":[{"text":"I","start":1366900,"end":1367180,"confidence":0.9951172,"speaker":"A"},{"text":"hate","start":1367180,"end":1367460,"confidence":0.9992676,"speaker":"A"},{"text":"teams.","start":1367460,"end":1368020,"confidence":0.9995117,"speaker":"A"}]},{"text":"Okay, so great. So let's talk about.","start":1373060,"end":1376420,"confidence":0.94677734,"words":[{"text":"Okay,","start":1373060,"end":1373620,"confidence":0.94677734,"speaker":"A"},{"text":"so","start":1374820,"end":1375100,"confidence":0.9980469,"speaker":"A"},{"text":"great.","start":1375100,"end":1375380,"confidence":0.9980469,"speaker":"A"},{"text":"So","start":1375700,"end":1375780,"confidence":0.9995117,"speaker":"A"},{"text":"let's","start":1375780,"end":1375980,"confidence":0.9996745,"speaker":"A"},{"text":"talk","start":1375980,"end":1376140,"confidence":0.9995117,"speaker":"A"},{"text":"about.","start":1376140,"end":1376420,"confidence":0.9980469,"speaker":"A"}]},{"text":"Sorry, slides are still not done, but let's talk about authentication methods. You can see I have the logos here, but I haven't quite cleaned this up. So there's really two and a half authentication methods when it comes to CloudKit. So here is the miss demo database. You just go in here and you can go to tokens and keys and then that will give you access to set up either the API if you want to do API key or API token if you want to do a private database or a server to server keyset if you want to do a public database.","start":1379700,"end":1420190,"confidence":0.90966797,"words":[{"text":"Sorry,","start":1379700,"end":1380180,"confidence":0.90966797,"speaker":"A"},{"text":"slides","start":1380500,"end":1380900,"confidence":0.76538086,"speaker":"A"},{"text":"are","start":1380900,"end":1381100,"confidence":0.9995117,"speaker":"A"},{"text":"still","start":1381100,"end":1381260,"confidence":1,"speaker":"A"},{"text":"not","start":1381260,"end":1381420,"confidence":1,"speaker":"A"},{"text":"done,","start":1381420,"end":1381620,"confidence":0.9980469,"speaker":"A"},{"text":"but","start":1381620,"end":1381940,"confidence":0.99316406,"speaker":"A"},{"text":"let's","start":1382100,"end":1382460,"confidence":0.9991862,"speaker":"A"},{"text":"talk","start":1382460,"end":1382620,"confidence":0.9995117,"speaker":"A"},{"text":"about","start":1382620,"end":1382900,"confidence":0.9980469,"speaker":"A"},{"text":"authentication","start":1384500,"end":1385380,"confidence":1,"speaker":"A"},{"text":"methods.","start":1385380,"end":1386020,"confidence":0.99975586,"speaker":"A"},{"text":"You","start":1386340,"end":1386620,"confidence":0.9970703,"speaker":"A"},{"text":"can","start":1386620,"end":1386780,"confidence":0.8959961,"speaker":"A"},{"text":"see","start":1386780,"end":1386940,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":1386940,"end":1387100,"confidence":0.99902344,"speaker":"A"},{"text":"have","start":1387100,"end":1387380,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1387460,"end":1387740,"confidence":0.99121094,"speaker":"A"},{"text":"logos","start":1387740,"end":1388140,"confidence":0.9980469,"speaker":"A"},{"text":"here,","start":1388140,"end":1388300,"confidence":0.9995117,"speaker":"A"},{"text":"but","start":1388300,"end":1388420,"confidence":1,"speaker":"A"},{"text":"I","start":1388420,"end":1388540,"confidence":0.9995117,"speaker":"A"},{"text":"haven't","start":1388540,"end":1388780,"confidence":0.99975586,"speaker":"A"},{"text":"quite","start":1388780,"end":1389020,"confidence":0.99975586,"speaker":"A"},{"text":"cleaned","start":1389020,"end":1389340,"confidence":0.79541016,"speaker":"A"},{"text":"this","start":1389340,"end":1389540,"confidence":0.9941406,"speaker":"A"},{"text":"up.","start":1389540,"end":1389860,"confidence":0.9970703,"speaker":"A"},{"text":"So","start":1390820,"end":1391220,"confidence":0.9770508,"speaker":"A"},{"text":"there's","start":1391940,"end":1392540,"confidence":0.9983724,"speaker":"A"},{"text":"really","start":1392540,"end":1392900,"confidence":0.99902344,"speaker":"A"},{"text":"two","start":1393780,"end":1394140,"confidence":1,"speaker":"A"},{"text":"and","start":1394140,"end":1394380,"confidence":0.87890625,"speaker":"A"},{"text":"a","start":1394380,"end":1394540,"confidence":0.9667969,"speaker":"A"},{"text":"half","start":1394540,"end":1394820,"confidence":0.9995117,"speaker":"A"},{"text":"authentication","start":1394820,"end":1395660,"confidence":0.99975586,"speaker":"A"},{"text":"methods","start":1395660,"end":1396140,"confidence":1,"speaker":"A"},{"text":"when","start":1396140,"end":1396300,"confidence":1,"speaker":"A"},{"text":"it","start":1396300,"end":1396420,"confidence":1,"speaker":"A"},{"text":"comes","start":1396420,"end":1396540,"confidence":1,"speaker":"A"},{"text":"to","start":1396540,"end":1396700,"confidence":1,"speaker":"A"},{"text":"CloudKit.","start":1396700,"end":1397380,"confidence":0.9552,"speaker":"A"},{"text":"So","start":1398420,"end":1398820,"confidence":0.9326172,"speaker":"A"},{"text":"here","start":1398900,"end":1399300,"confidence":0.99853516,"speaker":"A"},{"text":"is","start":1399460,"end":1399860,"confidence":0.9658203,"speaker":"A"},{"text":"the","start":1401150,"end":1401270,"confidence":0.95947266,"speaker":"A"},{"text":"miss","start":1401270,"end":1401470,"confidence":0.5654297,"speaker":"A"},{"text":"demo","start":1401470,"end":1401950,"confidence":0.7548828,"speaker":"A"},{"text":"database.","start":1401950,"end":1402630,"confidence":0.9996745,"speaker":"A"},{"text":"You","start":1402630,"end":1402870,"confidence":0.9995117,"speaker":"A"},{"text":"just","start":1402870,"end":1403030,"confidence":0.9995117,"speaker":"A"},{"text":"go","start":1403030,"end":1403230,"confidence":0.9995117,"speaker":"A"},{"text":"in","start":1403230,"end":1403430,"confidence":0.9995117,"speaker":"A"},{"text":"here","start":1403430,"end":1403710,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":1404270,"end":1404550,"confidence":0.99560547,"speaker":"A"},{"text":"you","start":1404550,"end":1404710,"confidence":0.99853516,"speaker":"A"},{"text":"can","start":1404710,"end":1404870,"confidence":0.99365234,"speaker":"A"},{"text":"go","start":1404870,"end":1404990,"confidence":1,"speaker":"A"},{"text":"to","start":1404990,"end":1405110,"confidence":0.9995117,"speaker":"A"},{"text":"tokens","start":1405110,"end":1405510,"confidence":0.99975586,"speaker":"A"},{"text":"and","start":1405510,"end":1405670,"confidence":0.9892578,"speaker":"A"},{"text":"keys","start":1405670,"end":1406070,"confidence":0.9992676,"speaker":"A"},{"text":"and","start":1406070,"end":1406310,"confidence":0.9975586,"speaker":"A"},{"text":"then","start":1406310,"end":1406470,"confidence":0.99902344,"speaker":"A"},{"text":"that","start":1406470,"end":1406630,"confidence":0.9995117,"speaker":"A"},{"text":"will","start":1406630,"end":1406790,"confidence":0.9995117,"speaker":"A"},{"text":"give","start":1406790,"end":1406950,"confidence":1,"speaker":"A"},{"text":"you","start":1406950,"end":1407150,"confidence":1,"speaker":"A"},{"text":"access","start":1407150,"end":1407470,"confidence":1,"speaker":"A"},{"text":"to","start":1407470,"end":1407750,"confidence":0.98339844,"speaker":"A"},{"text":"set","start":1407750,"end":1407950,"confidence":0.99658203,"speaker":"A"},{"text":"up","start":1407950,"end":1408270,"confidence":0.7631836,"speaker":"A"},{"text":"either","start":1408510,"end":1408990,"confidence":0.99975586,"speaker":"A"},{"text":"the","start":1408990,"end":1409390,"confidence":0.9995117,"speaker":"A"},{"text":"API","start":1409870,"end":1410550,"confidence":0.9995117,"speaker":"A"},{"text":"if","start":1410550,"end":1410750,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1410750,"end":1410870,"confidence":0.9243164,"speaker":"A"},{"text":"want","start":1410870,"end":1411030,"confidence":0.94921875,"speaker":"A"},{"text":"to","start":1411030,"end":1411150,"confidence":0.9980469,"speaker":"A"},{"text":"do","start":1411150,"end":1411390,"confidence":0.9970703,"speaker":"A"},{"text":"API","start":1411790,"end":1412430,"confidence":0.9926758,"speaker":"A"},{"text":"key","start":1412430,"end":1412830,"confidence":0.9995117,"speaker":"A"},{"text":"or","start":1412830,"end":1413110,"confidence":0.9980469,"speaker":"A"},{"text":"API","start":1413110,"end":1413470,"confidence":0.8027344,"speaker":"A"},{"text":"token","start":1413470,"end":1414030,"confidence":0.86376953,"speaker":"A"},{"text":"if","start":1414270,"end":1414550,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1414550,"end":1414710,"confidence":1,"speaker":"A"},{"text":"want","start":1414710,"end":1414830,"confidence":0.9394531,"speaker":"A"},{"text":"to","start":1414830,"end":1414910,"confidence":0.99902344,"speaker":"A"},{"text":"do","start":1414910,"end":1415070,"confidence":0.99902344,"speaker":"A"},{"text":"a","start":1415070,"end":1415270,"confidence":0.53125,"speaker":"A"},{"text":"private","start":1415270,"end":1415470,"confidence":1,"speaker":"A"},{"text":"database","start":1415470,"end":1416190,"confidence":0.9998372,"speaker":"A"},{"text":"or","start":1416190,"end":1416550,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":1416550,"end":1416790,"confidence":0.99853516,"speaker":"A"},{"text":"server","start":1416790,"end":1417109,"confidence":0.9946289,"speaker":"A"},{"text":"to","start":1417109,"end":1417310,"confidence":0.97753906,"speaker":"A"},{"text":"server","start":1417310,"end":1417630,"confidence":0.9992676,"speaker":"A"},{"text":"keyset","start":1417630,"end":1418190,"confidence":0.8388672,"speaker":"A"},{"text":"if","start":1418350,"end":1418630,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1418630,"end":1418750,"confidence":0.99902344,"speaker":"A"},{"text":"want","start":1418750,"end":1418870,"confidence":0.53808594,"speaker":"A"},{"text":"to","start":1418870,"end":1418990,"confidence":0.9951172,"speaker":"A"},{"text":"do","start":1418990,"end":1419150,"confidence":0.99902344,"speaker":"A"},{"text":"a","start":1419150,"end":1419310,"confidence":0.8515625,"speaker":"A"},{"text":"public","start":1419310,"end":1419470,"confidence":1,"speaker":"A"},{"text":"database.","start":1419470,"end":1420190,"confidence":0.9996745,"speaker":"A"}]},{"text":"So let's talk about the API token. Pretty simple. You just go into here, click the plus sign, you say a name and you say whether you want to do a post message or URL redirect. We'll get into that in a little bit in the next section. And then whether you want to have user info and you click save and you'll get a nice little API token you could use in your web your web calls essentially.","start":1420190,"end":1446680,"confidence":0.98095703,"words":[{"text":"So","start":1420190,"end":1420430,"confidence":0.98095703,"speaker":"A"},{"text":"let's","start":1420430,"end":1420590,"confidence":0.9998372,"speaker":"A"},{"text":"talk","start":1420590,"end":1420710,"confidence":0.99902344,"speaker":"A"},{"text":"about","start":1420710,"end":1420870,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":1420870,"end":1421030,"confidence":0.9980469,"speaker":"A"},{"text":"API","start":1421030,"end":1421430,"confidence":0.99902344,"speaker":"A"},{"text":"token.","start":1421430,"end":1421950,"confidence":0.9773763,"speaker":"A"},{"text":"Pretty","start":1422510,"end":1422870,"confidence":1,"speaker":"A"},{"text":"simple.","start":1422870,"end":1423310,"confidence":0.83935547,"speaker":"A"},{"text":"You","start":1423470,"end":1423750,"confidence":0.9995117,"speaker":"A"},{"text":"just","start":1423750,"end":1423870,"confidence":1,"speaker":"A"},{"text":"go","start":1423870,"end":1423990,"confidence":0.99609375,"speaker":"A"},{"text":"into","start":1423990,"end":1424190,"confidence":0.61572266,"speaker":"A"},{"text":"here,","start":1424190,"end":1424510,"confidence":0.9995117,"speaker":"A"},{"text":"click","start":1424750,"end":1425110,"confidence":0.9987793,"speaker":"A"},{"text":"the","start":1425110,"end":1425270,"confidence":0.9995117,"speaker":"A"},{"text":"plus","start":1425270,"end":1425550,"confidence":0.9980469,"speaker":"A"},{"text":"sign,","start":1425550,"end":1425870,"confidence":0.9980469,"speaker":"A"},{"text":"you","start":1426840,"end":1427000,"confidence":0.9980469,"speaker":"A"},{"text":"say","start":1427000,"end":1427200,"confidence":0.99853516,"speaker":"A"},{"text":"a","start":1427200,"end":1427320,"confidence":0.91064453,"speaker":"A"},{"text":"name","start":1427320,"end":1427560,"confidence":0.99609375,"speaker":"A"},{"text":"and","start":1428600,"end":1428920,"confidence":0.9975586,"speaker":"A"},{"text":"you","start":1428920,"end":1429120,"confidence":0.99902344,"speaker":"A"},{"text":"say","start":1429120,"end":1429280,"confidence":0.9980469,"speaker":"A"},{"text":"whether","start":1429280,"end":1429440,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1429440,"end":1429600,"confidence":1,"speaker":"A"},{"text":"want","start":1429600,"end":1429720,"confidence":0.99560547,"speaker":"A"},{"text":"to","start":1429720,"end":1429800,"confidence":0.99560547,"speaker":"A"},{"text":"do","start":1429800,"end":1429920,"confidence":0.99853516,"speaker":"A"},{"text":"a","start":1429920,"end":1430040,"confidence":0.9995117,"speaker":"A"},{"text":"post","start":1430040,"end":1430240,"confidence":0.9995117,"speaker":"A"},{"text":"message","start":1430240,"end":1430680,"confidence":0.99902344,"speaker":"A"},{"text":"or","start":1430680,"end":1430920,"confidence":0.9995117,"speaker":"A"},{"text":"URL","start":1430920,"end":1431440,"confidence":0.8330078,"speaker":"A"},{"text":"redirect.","start":1431440,"end":1432040,"confidence":1,"speaker":"A"},{"text":"We'll","start":1432280,"end":1432640,"confidence":0.9708659,"speaker":"A"},{"text":"get","start":1432640,"end":1432800,"confidence":1,"speaker":"A"},{"text":"into","start":1432800,"end":1432960,"confidence":1,"speaker":"A"},{"text":"that","start":1432960,"end":1433120,"confidence":1,"speaker":"A"},{"text":"in","start":1433120,"end":1433280,"confidence":0.8725586,"speaker":"A"},{"text":"a","start":1433280,"end":1433400,"confidence":0.99902344,"speaker":"A"},{"text":"little","start":1433400,"end":1433560,"confidence":0.9526367,"speaker":"A"},{"text":"bit","start":1433560,"end":1433760,"confidence":1,"speaker":"A"},{"text":"in","start":1433760,"end":1433920,"confidence":0.99609375,"speaker":"A"},{"text":"the","start":1433920,"end":1434040,"confidence":0.9995117,"speaker":"A"},{"text":"next","start":1434040,"end":1434200,"confidence":0.9995117,"speaker":"A"},{"text":"section.","start":1434200,"end":1434680,"confidence":0.9995117,"speaker":"A"},{"text":"And","start":1435960,"end":1436240,"confidence":0.98828125,"speaker":"A"},{"text":"then","start":1436240,"end":1436480,"confidence":0.89453125,"speaker":"A"},{"text":"whether","start":1436480,"end":1436760,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1436760,"end":1436960,"confidence":1,"speaker":"A"},{"text":"want","start":1436960,"end":1437120,"confidence":0.9975586,"speaker":"A"},{"text":"to","start":1437120,"end":1437280,"confidence":1,"speaker":"A"},{"text":"have","start":1437280,"end":1437560,"confidence":1,"speaker":"A"},{"text":"user","start":1437800,"end":1438280,"confidence":0.99902344,"speaker":"A"},{"text":"info","start":1438280,"end":1438760,"confidence":1,"speaker":"A"},{"text":"and","start":1438840,"end":1439240,"confidence":0.99609375,"speaker":"A"},{"text":"you","start":1439400,"end":1439720,"confidence":0.99609375,"speaker":"A"},{"text":"click","start":1439720,"end":1440040,"confidence":0.9995117,"speaker":"A"},{"text":"save","start":1440040,"end":1440360,"confidence":0.9987793,"speaker":"A"},{"text":"and","start":1440360,"end":1440640,"confidence":0.9326172,"speaker":"A"},{"text":"you'll","start":1440640,"end":1440920,"confidence":0.99934894,"speaker":"A"},{"text":"get","start":1440920,"end":1441040,"confidence":1,"speaker":"A"},{"text":"a","start":1441040,"end":1441160,"confidence":0.9995117,"speaker":"A"},{"text":"nice","start":1441160,"end":1441400,"confidence":0.99975586,"speaker":"A"},{"text":"little","start":1441400,"end":1441680,"confidence":0.9995117,"speaker":"A"},{"text":"API","start":1441680,"end":1442280,"confidence":0.86499023,"speaker":"A"},{"text":"token","start":1442519,"end":1442960,"confidence":0.9996745,"speaker":"A"},{"text":"you","start":1442960,"end":1443120,"confidence":0.9995117,"speaker":"A"},{"text":"could","start":1443120,"end":1443280,"confidence":0.9951172,"speaker":"A"},{"text":"use","start":1443280,"end":1443520,"confidence":1,"speaker":"A"},{"text":"in","start":1443520,"end":1443760,"confidence":0.99658203,"speaker":"A"},{"text":"your","start":1443760,"end":1444040,"confidence":0.9848633,"speaker":"A"},{"text":"web","start":1444120,"end":1444600,"confidence":0.99560547,"speaker":"A"},{"text":"your","start":1445240,"end":1445560,"confidence":0.9873047,"speaker":"A"},{"text":"web","start":1445560,"end":1445840,"confidence":0.9987793,"speaker":"A"},{"text":"calls","start":1445840,"end":1446160,"confidence":0.9831543,"speaker":"A"},{"text":"essentially.","start":1446160,"end":1446680,"confidence":0.9581299,"speaker":"A"}]},{"text":"API doesn't really. The API token doesn't really give you a lot of. But what it does give you is it gives you an entry to get a web authentication token for a user. So basically the way that works. So you'll notice here, when we were in this section, we have this piece here called Sign in Callback.","start":1449000,"end":1469610,"confidence":0.8713379,"words":[{"text":"API","start":1449000,"end":1449560,"confidence":0.8713379,"speaker":"A"},{"text":"doesn't","start":1449560,"end":1449800,"confidence":0.99886066,"speaker":"A"},{"text":"really.","start":1449800,"end":1450000,"confidence":0.9980469,"speaker":"A"},{"text":"The","start":1450000,"end":1450200,"confidence":0.88720703,"speaker":"A"},{"text":"API","start":1450200,"end":1450640,"confidence":0.954834,"speaker":"A"},{"text":"token","start":1450640,"end":1451000,"confidence":0.99934894,"speaker":"A"},{"text":"doesn't","start":1451000,"end":1451200,"confidence":0.9160156,"speaker":"A"},{"text":"really","start":1451200,"end":1451360,"confidence":0.9995117,"speaker":"A"},{"text":"give","start":1451360,"end":1451520,"confidence":1,"speaker":"A"},{"text":"you","start":1451520,"end":1451680,"confidence":0.99853516,"speaker":"A"},{"text":"a","start":1451680,"end":1451800,"confidence":0.99853516,"speaker":"A"},{"text":"lot","start":1451800,"end":1452040,"confidence":0.99560547,"speaker":"A"},{"text":"of.","start":1452100,"end":1452260,"confidence":0.515625,"speaker":"A"},{"text":"But","start":1452570,"end":1452690,"confidence":0.98535156,"speaker":"A"},{"text":"what","start":1452690,"end":1452850,"confidence":0.99658203,"speaker":"A"},{"text":"it","start":1452850,"end":1452970,"confidence":0.9902344,"speaker":"A"},{"text":"does","start":1452970,"end":1453130,"confidence":0.9980469,"speaker":"A"},{"text":"give","start":1453130,"end":1453290,"confidence":0.99853516,"speaker":"A"},{"text":"you","start":1453290,"end":1453410,"confidence":0.99853516,"speaker":"A"},{"text":"is","start":1453410,"end":1453570,"confidence":0.98779297,"speaker":"A"},{"text":"it","start":1453570,"end":1453690,"confidence":0.9951172,"speaker":"A"},{"text":"gives","start":1453690,"end":1453890,"confidence":0.9733887,"speaker":"A"},{"text":"you","start":1453890,"end":1454010,"confidence":1,"speaker":"A"},{"text":"an","start":1454010,"end":1454170,"confidence":1,"speaker":"A"},{"text":"entry","start":1454170,"end":1454530,"confidence":0.99975586,"speaker":"A"},{"text":"to","start":1454530,"end":1454850,"confidence":1,"speaker":"A"},{"text":"get","start":1454850,"end":1455130,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":1455130,"end":1455330,"confidence":0.9995117,"speaker":"A"},{"text":"web","start":1455330,"end":1455570,"confidence":1,"speaker":"A"},{"text":"authentication","start":1455570,"end":1456250,"confidence":0.8823242,"speaker":"A"},{"text":"token","start":1456250,"end":1456610,"confidence":0.9998372,"speaker":"A"},{"text":"for","start":1456610,"end":1456770,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":1456770,"end":1456930,"confidence":0.48901367,"speaker":"A"},{"text":"user.","start":1456930,"end":1457450,"confidence":0.99902344,"speaker":"A"},{"text":"So","start":1457850,"end":1458130,"confidence":0.99121094,"speaker":"A"},{"text":"basically","start":1458130,"end":1458570,"confidence":0.99853516,"speaker":"A"},{"text":"the","start":1458730,"end":1459010,"confidence":1,"speaker":"A"},{"text":"way","start":1459010,"end":1459210,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":1459210,"end":1459450,"confidence":1,"speaker":"A"},{"text":"works.","start":1459450,"end":1459930,"confidence":0.99731445,"speaker":"A"},{"text":"So","start":1460970,"end":1461370,"confidence":0.9580078,"speaker":"A"},{"text":"you'll","start":1461450,"end":1461810,"confidence":0.93896484,"speaker":"A"},{"text":"notice","start":1461810,"end":1462170,"confidence":0.99975586,"speaker":"A"},{"text":"here,","start":1462170,"end":1462490,"confidence":0.99902344,"speaker":"A"},{"text":"when","start":1463050,"end":1463370,"confidence":0.9941406,"speaker":"A"},{"text":"we","start":1463370,"end":1463570,"confidence":0.9995117,"speaker":"A"},{"text":"were","start":1463570,"end":1463770,"confidence":0.99853516,"speaker":"A"},{"text":"in","start":1463770,"end":1463970,"confidence":1,"speaker":"A"},{"text":"this","start":1463970,"end":1464250,"confidence":0.9995117,"speaker":"A"},{"text":"section,","start":1464330,"end":1464890,"confidence":0.99975586,"speaker":"A"},{"text":"we","start":1467050,"end":1467330,"confidence":0.9980469,"speaker":"A"},{"text":"have","start":1467330,"end":1467490,"confidence":0.9995117,"speaker":"A"},{"text":"this","start":1467490,"end":1467690,"confidence":1,"speaker":"A"},{"text":"piece","start":1467690,"end":1467970,"confidence":0.9998372,"speaker":"A"},{"text":"here","start":1467970,"end":1468250,"confidence":0.99902344,"speaker":"A"},{"text":"called","start":1468250,"end":1468569,"confidence":0.99902344,"speaker":"A"},{"text":"Sign","start":1468569,"end":1468770,"confidence":0.9926758,"speaker":"A"},{"text":"in","start":1468770,"end":1468970,"confidence":0.48339844,"speaker":"A"},{"text":"Callback.","start":1468970,"end":1469610,"confidence":0.9967448,"speaker":"A"}]},{"text":"So you can have either call a JavaScript, it's called a message event, it will call a Message event and a message event will have the metadata with the web authentication token of that user. Or you could do URL redirect where on authentication the user has a URL and then part of that URL is then having part of one of the query parameters and we'll get into that. We'll then have the web authentication token in the URL. So you put, basically you have your website, you add the JavaScript, you need to add the sign in with Apple. Oh, here's Josh.","start":1469770,"end":1508010,"confidence":0.9580078,"words":[{"text":"So","start":1469770,"end":1470170,"confidence":0.9580078,"speaker":"A"},{"text":"you","start":1470330,"end":1470650,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":1470650,"end":1470930,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":1470930,"end":1471250,"confidence":0.98291016,"speaker":"A"},{"text":"either","start":1471250,"end":1471690,"confidence":1,"speaker":"A"},{"text":"call","start":1471690,"end":1472010,"confidence":0.9741211,"speaker":"A"},{"text":"a","start":1472010,"end":1472210,"confidence":0.96875,"speaker":"A"},{"text":"JavaScript,","start":1472210,"end":1472970,"confidence":0.9967448,"speaker":"A"},{"text":"it's","start":1473370,"end":1473730,"confidence":0.99593097,"speaker":"A"},{"text":"called","start":1473730,"end":1473930,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":1473930,"end":1474130,"confidence":0.9794922,"speaker":"A"},{"text":"message","start":1474130,"end":1474530,"confidence":0.9980469,"speaker":"A"},{"text":"event,","start":1474530,"end":1474810,"confidence":0.9897461,"speaker":"A"},{"text":"it","start":1475610,"end":1475890,"confidence":0.9941406,"speaker":"A"},{"text":"will","start":1475890,"end":1476090,"confidence":0.82177734,"speaker":"A"},{"text":"call","start":1476090,"end":1476330,"confidence":0.6923828,"speaker":"A"},{"text":"a","start":1476330,"end":1476530,"confidence":0.90625,"speaker":"A"},{"text":"Message","start":1476530,"end":1476850,"confidence":0.99902344,"speaker":"A"},{"text":"event","start":1476850,"end":1477090,"confidence":0.9897461,"speaker":"A"},{"text":"and","start":1477090,"end":1477450,"confidence":0.97265625,"speaker":"A"},{"text":"a","start":1477450,"end":1477730,"confidence":0.8847656,"speaker":"A"},{"text":"message","start":1477730,"end":1478050,"confidence":0.9987793,"speaker":"A"},{"text":"event","start":1478050,"end":1478250,"confidence":0.9951172,"speaker":"A"},{"text":"will","start":1478250,"end":1478450,"confidence":0.9921875,"speaker":"A"},{"text":"have","start":1478450,"end":1478610,"confidence":1,"speaker":"A"},{"text":"the","start":1478610,"end":1478730,"confidence":0.9975586,"speaker":"A"},{"text":"metadata","start":1478730,"end":1479250,"confidence":0.99886066,"speaker":"A"},{"text":"with","start":1479250,"end":1479410,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1479410,"end":1479530,"confidence":0.99560547,"speaker":"A"},{"text":"web","start":1479530,"end":1479730,"confidence":0.9992676,"speaker":"A"},{"text":"authentication","start":1479730,"end":1480410,"confidence":0.99975586,"speaker":"A"},{"text":"token","start":1480410,"end":1480770,"confidence":0.9998372,"speaker":"A"},{"text":"of","start":1480770,"end":1480930,"confidence":0.99902344,"speaker":"A"},{"text":"that","start":1480930,"end":1481090,"confidence":0.99902344,"speaker":"A"},{"text":"user.","start":1481090,"end":1481530,"confidence":0.99902344,"speaker":"A"},{"text":"Or","start":1482410,"end":1482530,"confidence":0.9902344,"speaker":"A"},{"text":"you","start":1482530,"end":1482650,"confidence":0.7363281,"speaker":"A"},{"text":"could","start":1482650,"end":1482770,"confidence":0.99072266,"speaker":"A"},{"text":"do","start":1482770,"end":1482930,"confidence":0.9946289,"speaker":"A"},{"text":"URL","start":1482930,"end":1483450,"confidence":0.99658203,"speaker":"A"},{"text":"redirect","start":1483450,"end":1484090,"confidence":0.99975586,"speaker":"A"},{"text":"where","start":1484170,"end":1484570,"confidence":0.99121094,"speaker":"A"},{"text":"on","start":1484810,"end":1485210,"confidence":0.8457031,"speaker":"A"},{"text":"authentication","start":1485290,"end":1486050,"confidence":0.99975586,"speaker":"A"},{"text":"the","start":1486050,"end":1486290,"confidence":0.9975586,"speaker":"A"},{"text":"user","start":1486290,"end":1486730,"confidence":0.99975586,"speaker":"A"},{"text":"has","start":1486970,"end":1487250,"confidence":0.99902344,"speaker":"A"},{"text":"a","start":1487250,"end":1487410,"confidence":0.9975586,"speaker":"A"},{"text":"URL","start":1487410,"end":1487930,"confidence":0.998291,"speaker":"A"},{"text":"and","start":1487930,"end":1488130,"confidence":0.99609375,"speaker":"A"},{"text":"then","start":1488130,"end":1488290,"confidence":0.9560547,"speaker":"A"},{"text":"part","start":1488290,"end":1488450,"confidence":1,"speaker":"A"},{"text":"of","start":1488450,"end":1488570,"confidence":1,"speaker":"A"},{"text":"that","start":1488570,"end":1488690,"confidence":0.9995117,"speaker":"A"},{"text":"URL","start":1488690,"end":1489170,"confidence":0.9980469,"speaker":"A"},{"text":"is","start":1489170,"end":1489330,"confidence":0.99609375,"speaker":"A"},{"text":"then","start":1489330,"end":1489530,"confidence":0.98291016,"speaker":"A"},{"text":"having","start":1489530,"end":1489850,"confidence":0.99658203,"speaker":"A"},{"text":"part","start":1490650,"end":1490930,"confidence":0.9921875,"speaker":"A"},{"text":"of","start":1490930,"end":1491090,"confidence":0.99853516,"speaker":"A"},{"text":"one","start":1491090,"end":1491210,"confidence":0.9995117,"speaker":"A"},{"text":"of","start":1491210,"end":1491290,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1491290,"end":1491370,"confidence":1,"speaker":"A"},{"text":"query","start":1491370,"end":1491690,"confidence":0.8486328,"speaker":"A"},{"text":"parameters","start":1491770,"end":1492570,"confidence":0.8824463,"speaker":"A"},{"text":"and","start":1492570,"end":1492850,"confidence":0.9814453,"speaker":"A"},{"text":"we'll","start":1492850,"end":1493050,"confidence":0.99934894,"speaker":"A"},{"text":"get","start":1493050,"end":1493130,"confidence":1,"speaker":"A"},{"text":"into","start":1493130,"end":1493290,"confidence":0.99902344,"speaker":"A"},{"text":"that.","start":1493290,"end":1493610,"confidence":0.9975586,"speaker":"A"},{"text":"We'll","start":1494250,"end":1494570,"confidence":0.89176434,"speaker":"A"},{"text":"then","start":1494570,"end":1494690,"confidence":0.9980469,"speaker":"A"},{"text":"have","start":1494690,"end":1494850,"confidence":1,"speaker":"A"},{"text":"the","start":1494850,"end":1495010,"confidence":0.9980469,"speaker":"A"},{"text":"web","start":1495010,"end":1495250,"confidence":0.9904785,"speaker":"A"},{"text":"authentication","start":1495250,"end":1495810,"confidence":0.9975586,"speaker":"A"},{"text":"token","start":1495810,"end":1496130,"confidence":0.9996745,"speaker":"A"},{"text":"in","start":1496130,"end":1496290,"confidence":0.99560547,"speaker":"A"},{"text":"the","start":1496290,"end":1496450,"confidence":1,"speaker":"A"},{"text":"URL.","start":1496450,"end":1497050,"confidence":0.99731445,"speaker":"A"},{"text":"So","start":1498570,"end":1498970,"confidence":0.9921875,"speaker":"A"},{"text":"you","start":1499050,"end":1499330,"confidence":0.9794922,"speaker":"A"},{"text":"put,","start":1499330,"end":1499610,"confidence":0.9970703,"speaker":"A"},{"text":"basically","start":1500010,"end":1500410,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1500410,"end":1500570,"confidence":0.71972656,"speaker":"A"},{"text":"have","start":1500570,"end":1500690,"confidence":0.99853516,"speaker":"A"},{"text":"your","start":1500690,"end":1500850,"confidence":1,"speaker":"A"},{"text":"website,","start":1500850,"end":1501130,"confidence":0.9980469,"speaker":"A"},{"text":"you","start":1501450,"end":1501850,"confidence":0.9995117,"speaker":"A"},{"text":"add","start":1501850,"end":1502130,"confidence":0.9980469,"speaker":"A"},{"text":"the","start":1502130,"end":1502290,"confidence":0.9995117,"speaker":"A"},{"text":"JavaScript,","start":1502290,"end":1503050,"confidence":0.9950358,"speaker":"A"},{"text":"you","start":1503210,"end":1503490,"confidence":0.99658203,"speaker":"A"},{"text":"need","start":1503490,"end":1503770,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":1504330,"end":1504730,"confidence":0.99902344,"speaker":"A"},{"text":"add","start":1504970,"end":1505330,"confidence":0.9892578,"speaker":"A"},{"text":"the","start":1505330,"end":1505570,"confidence":0.9975586,"speaker":"A"},{"text":"sign","start":1505570,"end":1505770,"confidence":0.99902344,"speaker":"A"},{"text":"in","start":1505770,"end":1505970,"confidence":0.99609375,"speaker":"A"},{"text":"with","start":1505970,"end":1506170,"confidence":1,"speaker":"A"},{"text":"Apple.","start":1506170,"end":1506650,"confidence":0.9987793,"speaker":"A"},{"text":"Oh,","start":1506970,"end":1507330,"confidence":0.8078613,"speaker":"A"},{"text":"here's","start":1507330,"end":1507650,"confidence":0.9991862,"speaker":"A"},{"text":"Josh.","start":1507650,"end":1508010,"confidence":0.9987793,"speaker":"A"}]},{"text":"Oh cool. Josh, you there?","start":1514310,"end":1515910,"confidence":0.9213867,"words":[{"text":"Oh","start":1514310,"end":1514510,"confidence":0.9213867,"speaker":"A"},{"text":"cool.","start":1514510,"end":1514870,"confidence":0.99902344,"speaker":"A"},{"text":"Josh,","start":1514870,"end":1515350,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1515350,"end":1515590,"confidence":0.97265625,"speaker":"A"},{"text":"there?","start":1515590,"end":1515910,"confidence":0.9995117,"speaker":"A"}]},{"text":"I hope so. Good. Okay. Hey, we were just talking about how to set up. I'm going to go back a little bit Evan, but not too far back.","start":1518790,"end":1526630,"confidence":0.99853516,"words":[{"text":"I","start":1518790,"end":1519110,"confidence":0.99853516,"speaker":"C"},{"text":"hope","start":1519110,"end":1519390,"confidence":1,"speaker":"C"},{"text":"so.","start":1519390,"end":1519750,"confidence":0.99902344,"speaker":"C"},{"text":"Good.","start":1520710,"end":1521070,"confidence":0.9868164,"speaker":"A"},{"text":"Okay.","start":1521070,"end":1521590,"confidence":0.97753906,"speaker":"A"},{"text":"Hey,","start":1521750,"end":1522110,"confidence":0.9992676,"speaker":"A"},{"text":"we","start":1522110,"end":1522230,"confidence":0.99902344,"speaker":"A"},{"text":"were","start":1522230,"end":1522350,"confidence":0.51660156,"speaker":"A"},{"text":"just","start":1522350,"end":1522510,"confidence":1,"speaker":"A"},{"text":"talking","start":1522510,"end":1522750,"confidence":0.99975586,"speaker":"A"},{"text":"about","start":1522750,"end":1522990,"confidence":0.9970703,"speaker":"A"},{"text":"how","start":1522990,"end":1523230,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":1523230,"end":1523430,"confidence":0.9902344,"speaker":"A"},{"text":"set","start":1523430,"end":1523630,"confidence":1,"speaker":"A"},{"text":"up.","start":1523630,"end":1523790,"confidence":0.984375,"speaker":"A"},{"text":"I'm","start":1523790,"end":1523990,"confidence":0.9970703,"speaker":"A"},{"text":"going","start":1523990,"end":1524070,"confidence":0.5854492,"speaker":"A"},{"text":"to","start":1524070,"end":1524150,"confidence":0.9951172,"speaker":"A"},{"text":"go","start":1524150,"end":1524269,"confidence":0.9975586,"speaker":"A"},{"text":"back","start":1524269,"end":1524429,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":1524429,"end":1524550,"confidence":0.99902344,"speaker":"A"},{"text":"little","start":1524550,"end":1524630,"confidence":1,"speaker":"A"},{"text":"bit","start":1524630,"end":1524750,"confidence":0.99853516,"speaker":"A"},{"text":"Evan,","start":1524750,"end":1525190,"confidence":0.86279297,"speaker":"A"},{"text":"but","start":1525510,"end":1525790,"confidence":0.98535156,"speaker":"A"},{"text":"not","start":1525790,"end":1525950,"confidence":0.99316406,"speaker":"A"},{"text":"too","start":1525950,"end":1526110,"confidence":0.9980469,"speaker":"A"},{"text":"far","start":1526110,"end":1526310,"confidence":1,"speaker":"A"},{"text":"back.","start":1526310,"end":1526630,"confidence":0.99853516,"speaker":"A"}]},{"text":"Yeah, no worries. That's okay. But we talked about setting up API token and how to do that. So you go in here, you just click plus, you select your sign in callback and you put in a name and it'll give you an API token once you click save. Basically.","start":1527110,"end":1546310,"confidence":0.9895833,"words":[{"text":"Yeah,","start":1527110,"end":1527430,"confidence":0.9895833,"speaker":"B"},{"text":"no","start":1527430,"end":1527550,"confidence":0.9824219,"speaker":"B"},{"text":"worries.","start":1527550,"end":1527910,"confidence":0.998291,"speaker":"B"},{"text":"That's","start":1527990,"end":1528310,"confidence":0.99625653,"speaker":"A"},{"text":"okay.","start":1528310,"end":1528710,"confidence":0.9635417,"speaker":"A"},{"text":"But","start":1530470,"end":1530750,"confidence":0.9370117,"speaker":"A"},{"text":"we","start":1530750,"end":1530910,"confidence":0.9995117,"speaker":"A"},{"text":"talked","start":1530910,"end":1531110,"confidence":0.97265625,"speaker":"A"},{"text":"about","start":1531110,"end":1531270,"confidence":0.9980469,"speaker":"A"},{"text":"setting","start":1531270,"end":1531510,"confidence":0.9995117,"speaker":"A"},{"text":"up","start":1531510,"end":1531750,"confidence":0.99902344,"speaker":"A"},{"text":"API","start":1531830,"end":1532390,"confidence":0.9980469,"speaker":"A"},{"text":"token","start":1532390,"end":1532950,"confidence":1,"speaker":"A"},{"text":"and","start":1533270,"end":1533590,"confidence":0.9946289,"speaker":"A"},{"text":"how","start":1533590,"end":1533790,"confidence":1,"speaker":"A"},{"text":"to","start":1533790,"end":1533910,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":1533910,"end":1534030,"confidence":1,"speaker":"A"},{"text":"that.","start":1534030,"end":1534310,"confidence":0.9995117,"speaker":"A"},{"text":"So","start":1535910,"end":1536150,"confidence":0.9707031,"speaker":"A"},{"text":"you","start":1536950,"end":1537350,"confidence":0.9169922,"speaker":"A"},{"text":"go","start":1537430,"end":1537710,"confidence":0.99072266,"speaker":"A"},{"text":"in","start":1537710,"end":1537870,"confidence":0.9941406,"speaker":"A"},{"text":"here,","start":1537870,"end":1538150,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1538150,"end":1538430,"confidence":0.9819336,"speaker":"A"},{"text":"just","start":1538430,"end":1538550,"confidence":0.9970703,"speaker":"A"},{"text":"click","start":1538550,"end":1538790,"confidence":0.9995117,"speaker":"A"},{"text":"plus,","start":1538790,"end":1539110,"confidence":0.9655762,"speaker":"A"},{"text":"you","start":1539110,"end":1539350,"confidence":0.9897461,"speaker":"A"},{"text":"select","start":1539350,"end":1539630,"confidence":0.9995117,"speaker":"A"},{"text":"your","start":1539630,"end":1539790,"confidence":0.9975586,"speaker":"A"},{"text":"sign","start":1539790,"end":1539990,"confidence":0.99658203,"speaker":"A"},{"text":"in","start":1539990,"end":1540190,"confidence":0.9428711,"speaker":"A"},{"text":"callback","start":1540190,"end":1540710,"confidence":0.9742839,"speaker":"A"},{"text":"and","start":1540710,"end":1540950,"confidence":0.99365234,"speaker":"A"},{"text":"you","start":1540950,"end":1541150,"confidence":0.98828125,"speaker":"A"},{"text":"put","start":1541150,"end":1541310,"confidence":1,"speaker":"A"},{"text":"in","start":1541310,"end":1541470,"confidence":0.9379883,"speaker":"A"},{"text":"a","start":1541470,"end":1541670,"confidence":0.9404297,"speaker":"A"},{"text":"name","start":1541670,"end":1541990,"confidence":0.99902344,"speaker":"A"},{"text":"and","start":1542630,"end":1542910,"confidence":0.90283203,"speaker":"A"},{"text":"it'll","start":1542910,"end":1543150,"confidence":0.84277344,"speaker":"A"},{"text":"give","start":1543150,"end":1543310,"confidence":1,"speaker":"A"},{"text":"you","start":1543310,"end":1543590,"confidence":0.9995117,"speaker":"A"},{"text":"an","start":1543750,"end":1544030,"confidence":0.9770508,"speaker":"A"},{"text":"API","start":1544030,"end":1544470,"confidence":0.8105469,"speaker":"A"},{"text":"token","start":1544470,"end":1544950,"confidence":0.9941406,"speaker":"A"},{"text":"once","start":1544950,"end":1545150,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":1545150,"end":1545310,"confidence":0.9995117,"speaker":"A"},{"text":"click","start":1545310,"end":1545550,"confidence":0.99975586,"speaker":"A"},{"text":"save.","start":1545550,"end":1545830,"confidence":0.9980469,"speaker":"A"},{"text":"Basically.","start":1545830,"end":1546310,"confidence":0.9953613,"speaker":"A"}]},{"text":"Come on.","start":1550549,"end":1551190,"confidence":0.9658203,"words":[{"text":"Come","start":1550549,"end":1550870,"confidence":0.9658203,"speaker":"A"},{"text":"on.","start":1550870,"end":1551190,"confidence":0.99853516,"speaker":"A"}]},{"text":"The reason you want an API token is this allows you to then have users Sign in to CloudKit either using, using the the web service like Curl or you could also do it through a website using CloudKit js. So web authentication token we talked about how you can either do the post message or you can do the URL redirect. Basically you have the JavaScript on your website and there has a button, click the button, you get this nice little window here sign in and then when you sign in if you had selected post message, you'll get the web authentication token and the data of the event in JavaScript or you will get the web authentication token as a URL in the callback URL here. Does that make sense?","start":1554470,"end":1607820,"confidence":0.9975586,"words":[{"text":"The","start":1554470,"end":1554710,"confidence":0.9975586,"speaker":"A"},{"text":"reason","start":1554710,"end":1554910,"confidence":1,"speaker":"A"},{"text":"you","start":1554910,"end":1555150,"confidence":0.84814453,"speaker":"A"},{"text":"want","start":1555150,"end":1555310,"confidence":0.99902344,"speaker":"A"},{"text":"an","start":1555310,"end":1555470,"confidence":0.99658203,"speaker":"A"},{"text":"API","start":1555470,"end":1555830,"confidence":0.79589844,"speaker":"A"},{"text":"token","start":1555830,"end":1556190,"confidence":0.9998372,"speaker":"A"},{"text":"is","start":1556190,"end":1556390,"confidence":0.9941406,"speaker":"A"},{"text":"this","start":1556390,"end":1556590,"confidence":0.99902344,"speaker":"A"},{"text":"allows","start":1556590,"end":1556990,"confidence":0.99975586,"speaker":"A"},{"text":"you","start":1556990,"end":1557190,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":1557190,"end":1557390,"confidence":0.9946289,"speaker":"A"},{"text":"then","start":1557390,"end":1557670,"confidence":0.95654297,"speaker":"A"},{"text":"have","start":1558550,"end":1558830,"confidence":0.9995117,"speaker":"A"},{"text":"users","start":1558830,"end":1559350,"confidence":0.99886066,"speaker":"A"},{"text":"Sign","start":1559350,"end":1559670,"confidence":1,"speaker":"A"},{"text":"in","start":1559670,"end":1559990,"confidence":0.9448242,"speaker":"A"},{"text":"to","start":1559990,"end":1560390,"confidence":0.9980469,"speaker":"A"},{"text":"CloudKit","start":1560390,"end":1561190,"confidence":0.97046,"speaker":"A"},{"text":"either","start":1562820,"end":1563060,"confidence":0.99902344,"speaker":"A"},{"text":"using,","start":1563060,"end":1563380,"confidence":0.9873047,"speaker":"A"},{"text":"using","start":1565140,"end":1565500,"confidence":1,"speaker":"A"},{"text":"the","start":1565500,"end":1565860,"confidence":0.9794922,"speaker":"A"},{"text":"the","start":1566420,"end":1566700,"confidence":0.99853516,"speaker":"A"},{"text":"web","start":1566700,"end":1567060,"confidence":0.99975586,"speaker":"A"},{"text":"service","start":1567140,"end":1567540,"confidence":0.9995117,"speaker":"A"},{"text":"like","start":1567620,"end":1567940,"confidence":0.9995117,"speaker":"A"},{"text":"Curl","start":1567940,"end":1568580,"confidence":0.8334961,"speaker":"A"},{"text":"or","start":1568900,"end":1569300,"confidence":1,"speaker":"A"},{"text":"you","start":1569300,"end":1569580,"confidence":0.9995117,"speaker":"A"},{"text":"could","start":1569580,"end":1569820,"confidence":0.99609375,"speaker":"A"},{"text":"also","start":1569820,"end":1570140,"confidence":1,"speaker":"A"},{"text":"do","start":1570140,"end":1570380,"confidence":1,"speaker":"A"},{"text":"it","start":1570380,"end":1570540,"confidence":1,"speaker":"A"},{"text":"through","start":1570540,"end":1570700,"confidence":1,"speaker":"A"},{"text":"a","start":1570700,"end":1570860,"confidence":1,"speaker":"A"},{"text":"website","start":1570860,"end":1571100,"confidence":0.9995117,"speaker":"A"},{"text":"using","start":1571100,"end":1571380,"confidence":0.9995117,"speaker":"A"},{"text":"CloudKit","start":1571380,"end":1571980,"confidence":0.998291,"speaker":"A"},{"text":"js.","start":1571980,"end":1572500,"confidence":0.83740234,"speaker":"A"},{"text":"So","start":1573780,"end":1574180,"confidence":0.99560547,"speaker":"A"},{"text":"web","start":1574420,"end":1574820,"confidence":0.97021484,"speaker":"A"},{"text":"authentication","start":1574820,"end":1575500,"confidence":0.9995117,"speaker":"A"},{"text":"token","start":1575500,"end":1576100,"confidence":0.9991862,"speaker":"A"},{"text":"we","start":1576100,"end":1576420,"confidence":0.9995117,"speaker":"A"},{"text":"talked","start":1576420,"end":1576700,"confidence":0.99975586,"speaker":"A"},{"text":"about","start":1576700,"end":1576900,"confidence":0.99902344,"speaker":"A"},{"text":"how","start":1576900,"end":1577219,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1577219,"end":1577460,"confidence":1,"speaker":"A"},{"text":"can","start":1577460,"end":1577539,"confidence":1,"speaker":"A"},{"text":"either","start":1577539,"end":1577740,"confidence":1,"speaker":"A"},{"text":"do","start":1577740,"end":1577900,"confidence":1,"speaker":"A"},{"text":"the","start":1577900,"end":1578060,"confidence":1,"speaker":"A"},{"text":"post","start":1578060,"end":1578300,"confidence":1,"speaker":"A"},{"text":"message","start":1578300,"end":1578780,"confidence":0.9995117,"speaker":"A"},{"text":"or","start":1578780,"end":1578980,"confidence":0.8930664,"speaker":"A"},{"text":"you","start":1578980,"end":1579140,"confidence":0.99902344,"speaker":"A"},{"text":"can","start":1579140,"end":1579260,"confidence":0.99853516,"speaker":"A"},{"text":"do","start":1579260,"end":1579380,"confidence":1,"speaker":"A"},{"text":"the","start":1579380,"end":1579500,"confidence":0.99853516,"speaker":"A"},{"text":"URL","start":1579500,"end":1579860,"confidence":0.77905273,"speaker":"A"},{"text":"redirect.","start":1579860,"end":1580420,"confidence":0.99975586,"speaker":"A"},{"text":"Basically","start":1581140,"end":1581700,"confidence":0.99975586,"speaker":"A"},{"text":"you","start":1581700,"end":1582100,"confidence":1,"speaker":"A"},{"text":"have","start":1582100,"end":1582380,"confidence":1,"speaker":"A"},{"text":"the","start":1582380,"end":1582540,"confidence":0.99121094,"speaker":"A"},{"text":"JavaScript","start":1582540,"end":1583020,"confidence":0.9979655,"speaker":"A"},{"text":"on","start":1583020,"end":1583180,"confidence":1,"speaker":"A"},{"text":"your","start":1583180,"end":1583380,"confidence":1,"speaker":"A"},{"text":"website","start":1583380,"end":1583700,"confidence":0.9951172,"speaker":"A"},{"text":"and","start":1584820,"end":1585180,"confidence":0.9980469,"speaker":"A"},{"text":"there","start":1585180,"end":1585420,"confidence":0.58447266,"speaker":"A"},{"text":"has","start":1585420,"end":1585580,"confidence":0.8017578,"speaker":"A"},{"text":"a","start":1585580,"end":1585700,"confidence":1,"speaker":"A"},{"text":"button,","start":1585700,"end":1585980,"confidence":0.998291,"speaker":"A"},{"text":"click","start":1585980,"end":1586260,"confidence":0.99975586,"speaker":"A"},{"text":"the","start":1586260,"end":1586380,"confidence":0.9995117,"speaker":"A"},{"text":"button,","start":1586380,"end":1586620,"confidence":0.99975586,"speaker":"A"},{"text":"you","start":1586620,"end":1586740,"confidence":0.99853516,"speaker":"A"},{"text":"get","start":1586740,"end":1586860,"confidence":0.99560547,"speaker":"A"},{"text":"this","start":1586860,"end":1587020,"confidence":0.9995117,"speaker":"A"},{"text":"nice","start":1587020,"end":1587260,"confidence":0.99975586,"speaker":"A"},{"text":"little","start":1587260,"end":1587460,"confidence":0.9995117,"speaker":"A"},{"text":"window","start":1587460,"end":1587820,"confidence":0.99975586,"speaker":"A"},{"text":"here","start":1587820,"end":1588100,"confidence":0.9951172,"speaker":"A"},{"text":"sign","start":1588780,"end":1588940,"confidence":0.95947266,"speaker":"A"},{"text":"in","start":1588940,"end":1589260,"confidence":0.99072266,"speaker":"A"},{"text":"and","start":1590860,"end":1591140,"confidence":0.9550781,"speaker":"A"},{"text":"then","start":1591140,"end":1591420,"confidence":0.9970703,"speaker":"A"},{"text":"when","start":1591820,"end":1592100,"confidence":1,"speaker":"A"},{"text":"you","start":1592100,"end":1592300,"confidence":0.9995117,"speaker":"A"},{"text":"sign","start":1592300,"end":1592540,"confidence":0.9995117,"speaker":"A"},{"text":"in","start":1592540,"end":1592820,"confidence":0.98583984,"speaker":"A"},{"text":"if","start":1592820,"end":1593060,"confidence":0.9980469,"speaker":"A"},{"text":"you","start":1593060,"end":1593340,"confidence":0.9995117,"speaker":"A"},{"text":"had","start":1593340,"end":1593660,"confidence":0.9121094,"speaker":"A"},{"text":"selected","start":1593660,"end":1594060,"confidence":0.9992676,"speaker":"A"},{"text":"post","start":1594060,"end":1594380,"confidence":0.9975586,"speaker":"A"},{"text":"message,","start":1594380,"end":1595020,"confidence":0.984375,"speaker":"A"},{"text":"you'll","start":1595340,"end":1595700,"confidence":0.9923503,"speaker":"A"},{"text":"get","start":1595700,"end":1595860,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1595860,"end":1596020,"confidence":0.9995117,"speaker":"A"},{"text":"web","start":1596020,"end":1596260,"confidence":0.9992676,"speaker":"A"},{"text":"authentication","start":1596260,"end":1597020,"confidence":0.96813965,"speaker":"A"},{"text":"token","start":1597020,"end":1597540,"confidence":0.9998372,"speaker":"A"},{"text":"and","start":1597540,"end":1597820,"confidence":0.5283203,"speaker":"A"},{"text":"the","start":1597820,"end":1598020,"confidence":0.9995117,"speaker":"A"},{"text":"data","start":1598020,"end":1598260,"confidence":0.9995117,"speaker":"A"},{"text":"of","start":1598260,"end":1598500,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1598500,"end":1598660,"confidence":0.9995117,"speaker":"A"},{"text":"event","start":1598660,"end":1598940,"confidence":0.99853516,"speaker":"A"},{"text":"in","start":1598940,"end":1599260,"confidence":0.9291992,"speaker":"A"},{"text":"JavaScript","start":1599260,"end":1600060,"confidence":0.99348956,"speaker":"A"},{"text":"or","start":1600540,"end":1600900,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":1600900,"end":1601140,"confidence":0.9995117,"speaker":"A"},{"text":"will","start":1601140,"end":1601300,"confidence":0.87109375,"speaker":"A"},{"text":"get","start":1601300,"end":1601460,"confidence":1,"speaker":"A"},{"text":"the","start":1601460,"end":1601580,"confidence":0.9995117,"speaker":"A"},{"text":"web","start":1601580,"end":1601780,"confidence":0.9980469,"speaker":"A"},{"text":"authentication","start":1601780,"end":1602460,"confidence":0.8979492,"speaker":"A"},{"text":"token","start":1602460,"end":1602860,"confidence":0.9996745,"speaker":"A"},{"text":"as","start":1602860,"end":1603060,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":1603060,"end":1603220,"confidence":0.98779297,"speaker":"A"},{"text":"URL","start":1603220,"end":1603820,"confidence":0.86157227,"speaker":"A"},{"text":"in","start":1604300,"end":1604579,"confidence":0.99853516,"speaker":"A"},{"text":"the","start":1604579,"end":1604739,"confidence":1,"speaker":"A"},{"text":"callback","start":1604739,"end":1605260,"confidence":0.9983724,"speaker":"A"},{"text":"URL","start":1605260,"end":1605780,"confidence":0.8745117,"speaker":"A"},{"text":"here.","start":1605780,"end":1606140,"confidence":0.9975586,"speaker":"A"},{"text":"Does","start":1606780,"end":1607060,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":1607060,"end":1607220,"confidence":0.9995117,"speaker":"A"},{"text":"make","start":1607220,"end":1607420,"confidence":0.9926758,"speaker":"A"},{"text":"sense?","start":1607420,"end":1607820,"confidence":0.9995117,"speaker":"A"}]},{"text":"Yep. Yeah. In some cases if you scour the Internet so Stack overflow will tell you and this has happened to me sometimes it will not be CK web authentication token, sometimes it'll be CK session because that's what Apple likes to do.","start":1610860,"end":1626600,"confidence":0.7561035,"words":[{"text":"Yep.","start":1610860,"end":1611420,"confidence":0.7561035,"speaker":"B"},{"text":"Yeah.","start":1612220,"end":1612860,"confidence":0.94124347,"speaker":"A"},{"text":"In","start":1613420,"end":1613740,"confidence":0.9975586,"speaker":"A"},{"text":"some","start":1613740,"end":1613940,"confidence":1,"speaker":"A"},{"text":"cases","start":1613940,"end":1614220,"confidence":0.9995117,"speaker":"A"},{"text":"if","start":1614380,"end":1614660,"confidence":0.99853516,"speaker":"A"},{"text":"you","start":1614660,"end":1614940,"confidence":1,"speaker":"A"},{"text":"scour","start":1615180,"end":1615620,"confidence":0.9921875,"speaker":"A"},{"text":"the","start":1615620,"end":1615860,"confidence":0.9995117,"speaker":"A"},{"text":"Internet","start":1615860,"end":1616295,"confidence":0.99780273,"speaker":"A"},{"text":"so","start":1616295,"end":1616450,"confidence":0.37280273,"speaker":"A"},{"text":"Stack","start":1616520,"end":1616720,"confidence":0.94799805,"speaker":"A"},{"text":"overflow","start":1616720,"end":1617120,"confidence":0.9749756,"speaker":"A"},{"text":"will","start":1617120,"end":1617280,"confidence":0.9916992,"speaker":"A"},{"text":"tell","start":1617280,"end":1617440,"confidence":1,"speaker":"A"},{"text":"you","start":1617440,"end":1617600,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":1617600,"end":1617800,"confidence":0.99658203,"speaker":"A"},{"text":"this","start":1617800,"end":1618000,"confidence":0.99902344,"speaker":"A"},{"text":"has","start":1618000,"end":1618200,"confidence":0.9765625,"speaker":"A"},{"text":"happened","start":1618200,"end":1618520,"confidence":0.99975586,"speaker":"A"},{"text":"to","start":1618520,"end":1618640,"confidence":0.9995117,"speaker":"A"},{"text":"me","start":1618640,"end":1618920,"confidence":0.9995117,"speaker":"A"},{"text":"sometimes","start":1619240,"end":1619720,"confidence":0.9998372,"speaker":"A"},{"text":"it","start":1619720,"end":1619800,"confidence":0.99902344,"speaker":"A"},{"text":"will","start":1619800,"end":1619920,"confidence":0.99853516,"speaker":"A"},{"text":"not","start":1619920,"end":1620080,"confidence":0.9995117,"speaker":"A"},{"text":"be","start":1620080,"end":1620360,"confidence":0.99902344,"speaker":"A"},{"text":"CK","start":1620360,"end":1620920,"confidence":0.89404297,"speaker":"A"},{"text":"web","start":1620920,"end":1621200,"confidence":0.9916992,"speaker":"A"},{"text":"authentication","start":1621200,"end":1621880,"confidence":0.9996338,"speaker":"A"},{"text":"token,","start":1621880,"end":1622360,"confidence":0.9995117,"speaker":"A"},{"text":"sometimes","start":1622360,"end":1622760,"confidence":0.9954427,"speaker":"A"},{"text":"it'll","start":1622760,"end":1623000,"confidence":0.8121745,"speaker":"A"},{"text":"be","start":1623000,"end":1623080,"confidence":0.9995117,"speaker":"A"},{"text":"CK","start":1623080,"end":1623480,"confidence":0.8876953,"speaker":"A"},{"text":"session","start":1623480,"end":1624040,"confidence":0.99902344,"speaker":"A"},{"text":"because","start":1624360,"end":1624760,"confidence":0.99853516,"speaker":"A"},{"text":"that's","start":1625240,"end":1625600,"confidence":0.9996745,"speaker":"A"},{"text":"what","start":1625600,"end":1625760,"confidence":0.99560547,"speaker":"A"},{"text":"Apple","start":1625760,"end":1626040,"confidence":0.99560547,"speaker":"A"},{"text":"likes","start":1626040,"end":1626280,"confidence":0.98999023,"speaker":"A"},{"text":"to","start":1626280,"end":1626360,"confidence":0.9995117,"speaker":"A"},{"text":"do.","start":1626360,"end":1626600,"confidence":0.9995117,"speaker":"A"}]},{"text":"But it's the same thing. So you basically want to look for either property or query parameter name and you should be good to go and then you'll have that user as well authentication token you could do. What I, what I've been doing is, is I've been take like making a call to a like local server for instance and then essentially then I could do whatever I want with that web authentication token. As long as you have the web authentication token and the API token you can do anything on a private database that the user has rights to. So you can go, you can go to town with that all this stuff gets Swift in a cookie too.","start":1629080,"end":1671420,"confidence":0.99316406,"words":[{"text":"But","start":1629080,"end":1629360,"confidence":0.99316406,"speaker":"A"},{"text":"it's","start":1629360,"end":1629560,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1629560,"end":1629680,"confidence":1,"speaker":"A"},{"text":"same","start":1629680,"end":1629840,"confidence":1,"speaker":"A"},{"text":"thing.","start":1629840,"end":1630120,"confidence":0.9995117,"speaker":"A"},{"text":"So","start":1630200,"end":1630480,"confidence":0.99853516,"speaker":"A"},{"text":"you","start":1630480,"end":1630640,"confidence":0.9980469,"speaker":"A"},{"text":"basically","start":1630640,"end":1630920,"confidence":0.99975586,"speaker":"A"},{"text":"want","start":1630920,"end":1631120,"confidence":0.8725586,"speaker":"A"},{"text":"to","start":1631120,"end":1631240,"confidence":1,"speaker":"A"},{"text":"look","start":1631240,"end":1631320,"confidence":1,"speaker":"A"},{"text":"for","start":1631320,"end":1631440,"confidence":1,"speaker":"A"},{"text":"either","start":1631440,"end":1631720,"confidence":0.99975586,"speaker":"A"},{"text":"property","start":1631720,"end":1632200,"confidence":0.99902344,"speaker":"A"},{"text":"or","start":1632200,"end":1632520,"confidence":0.9995117,"speaker":"A"},{"text":"query","start":1632680,"end":1633160,"confidence":0.97436523,"speaker":"A"},{"text":"parameter","start":1633240,"end":1633840,"confidence":0.9998372,"speaker":"A"},{"text":"name","start":1633840,"end":1634160,"confidence":0.99853516,"speaker":"A"},{"text":"and","start":1634160,"end":1634400,"confidence":0.99853516,"speaker":"A"},{"text":"you","start":1634400,"end":1634560,"confidence":0.9980469,"speaker":"A"},{"text":"should","start":1634560,"end":1634720,"confidence":1,"speaker":"A"},{"text":"be","start":1634720,"end":1634880,"confidence":1,"speaker":"A"},{"text":"good","start":1634880,"end":1635040,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":1635040,"end":1635200,"confidence":0.9980469,"speaker":"A"},{"text":"go","start":1635200,"end":1635480,"confidence":0.9975586,"speaker":"A"},{"text":"and","start":1636360,"end":1636640,"confidence":0.99560547,"speaker":"A"},{"text":"then","start":1636640,"end":1636760,"confidence":1,"speaker":"A"},{"text":"you'll","start":1636760,"end":1636960,"confidence":0.9902344,"speaker":"A"},{"text":"have","start":1636960,"end":1637080,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":1637080,"end":1637160,"confidence":0.99902344,"speaker":"A"},{"text":"user","start":1637160,"end":1637400,"confidence":0.99902344,"speaker":"A"},{"text":"as","start":1637400,"end":1637520,"confidence":0.4970703,"speaker":"A"},{"text":"well","start":1637520,"end":1637800,"confidence":0.99316406,"speaker":"A"},{"text":"authentication","start":1637800,"end":1638520,"confidence":0.99902344,"speaker":"A"},{"text":"token","start":1638520,"end":1639080,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1639960,"end":1640240,"confidence":0.98876953,"speaker":"A"},{"text":"could","start":1640240,"end":1640400,"confidence":0.9658203,"speaker":"A"},{"text":"do.","start":1640400,"end":1640680,"confidence":0.9926758,"speaker":"A"},{"text":"What","start":1640920,"end":1641240,"confidence":0.9736328,"speaker":"A"},{"text":"I,","start":1641240,"end":1641560,"confidence":0.9926758,"speaker":"A"},{"text":"what","start":1641720,"end":1642000,"confidence":0.9086914,"speaker":"A"},{"text":"I've","start":1642000,"end":1642200,"confidence":0.99527997,"speaker":"A"},{"text":"been","start":1642200,"end":1642360,"confidence":0.9995117,"speaker":"A"},{"text":"doing","start":1642360,"end":1642680,"confidence":0.9995117,"speaker":"A"},{"text":"is,","start":1643490,"end":1643730,"confidence":0.9863281,"speaker":"A"},{"text":"is","start":1645170,"end":1645490,"confidence":0.94628906,"speaker":"A"},{"text":"I've","start":1645490,"end":1645850,"confidence":0.9996745,"speaker":"A"},{"text":"been","start":1645850,"end":1646130,"confidence":0.99853516,"speaker":"A"},{"text":"take","start":1647330,"end":1647730,"confidence":0.9165039,"speaker":"A"},{"text":"like","start":1647730,"end":1648050,"confidence":0.99902344,"speaker":"A"},{"text":"making","start":1648050,"end":1648290,"confidence":0.99902344,"speaker":"A"},{"text":"a","start":1648290,"end":1648490,"confidence":0.9995117,"speaker":"A"},{"text":"call","start":1648490,"end":1648690,"confidence":1,"speaker":"A"},{"text":"to","start":1648690,"end":1648930,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":1648930,"end":1649130,"confidence":0.7597656,"speaker":"A"},{"text":"like","start":1649130,"end":1649370,"confidence":0.98779297,"speaker":"A"},{"text":"local","start":1649370,"end":1649690,"confidence":0.9995117,"speaker":"A"},{"text":"server","start":1649690,"end":1650170,"confidence":0.99975586,"speaker":"A"},{"text":"for","start":1650170,"end":1650330,"confidence":0.9995117,"speaker":"A"},{"text":"instance","start":1650330,"end":1650770,"confidence":0.99975586,"speaker":"A"},{"text":"and","start":1651330,"end":1651650,"confidence":0.99853516,"speaker":"A"},{"text":"then","start":1651650,"end":1651970,"confidence":0.99902344,"speaker":"A"},{"text":"essentially","start":1651970,"end":1652690,"confidence":0.9987793,"speaker":"A"},{"text":"then","start":1653410,"end":1653690,"confidence":0.8886719,"speaker":"A"},{"text":"I","start":1653690,"end":1653810,"confidence":1,"speaker":"A"},{"text":"could","start":1653810,"end":1653930,"confidence":0.6508789,"speaker":"A"},{"text":"do","start":1653930,"end":1654090,"confidence":0.9995117,"speaker":"A"},{"text":"whatever","start":1654090,"end":1654330,"confidence":1,"speaker":"A"},{"text":"I","start":1654330,"end":1654490,"confidence":0.9995117,"speaker":"A"},{"text":"want","start":1654490,"end":1654690,"confidence":0.9995117,"speaker":"A"},{"text":"with","start":1654690,"end":1654890,"confidence":0.99853516,"speaker":"A"},{"text":"that","start":1654890,"end":1655050,"confidence":0.9995117,"speaker":"A"},{"text":"web","start":1655050,"end":1655290,"confidence":0.9897461,"speaker":"A"},{"text":"authentication","start":1655290,"end":1655970,"confidence":0.9991455,"speaker":"A"},{"text":"token.","start":1655970,"end":1656330,"confidence":0.9996745,"speaker":"A"},{"text":"As","start":1656330,"end":1656490,"confidence":0.9995117,"speaker":"A"},{"text":"long","start":1656490,"end":1656610,"confidence":1,"speaker":"A"},{"text":"as","start":1656610,"end":1656690,"confidence":0.99853516,"speaker":"A"},{"text":"you","start":1656690,"end":1656770,"confidence":1,"speaker":"A"},{"text":"have","start":1656770,"end":1656890,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1656890,"end":1657010,"confidence":0.9995117,"speaker":"A"},{"text":"web","start":1657010,"end":1657210,"confidence":0.998291,"speaker":"A"},{"text":"authentication","start":1657210,"end":1657730,"confidence":0.99975586,"speaker":"A"},{"text":"token","start":1657730,"end":1658090,"confidence":0.99902344,"speaker":"A"},{"text":"and","start":1658090,"end":1658210,"confidence":0.9355469,"speaker":"A"},{"text":"the","start":1658210,"end":1658330,"confidence":0.99853516,"speaker":"A"},{"text":"API","start":1658330,"end":1658770,"confidence":0.9987793,"speaker":"A"},{"text":"token","start":1658770,"end":1659329,"confidence":0.9996745,"speaker":"A"},{"text":"you","start":1659570,"end":1659850,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":1659850,"end":1660010,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":1660010,"end":1660170,"confidence":1,"speaker":"A"},{"text":"anything","start":1660170,"end":1660570,"confidence":0.99975586,"speaker":"A"},{"text":"on","start":1660570,"end":1660730,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":1660730,"end":1660850,"confidence":0.99902344,"speaker":"A"},{"text":"private","start":1660850,"end":1661050,"confidence":1,"speaker":"A"},{"text":"database","start":1661050,"end":1661810,"confidence":0.99934894,"speaker":"A"},{"text":"that","start":1662530,"end":1662810,"confidence":0.9975586,"speaker":"A"},{"text":"the","start":1662810,"end":1662930,"confidence":0.9995117,"speaker":"A"},{"text":"user","start":1662930,"end":1663210,"confidence":1,"speaker":"A"},{"text":"has","start":1663210,"end":1663410,"confidence":0.99902344,"speaker":"A"},{"text":"rights","start":1663410,"end":1663690,"confidence":0.9975586,"speaker":"A"},{"text":"to.","start":1663690,"end":1664050,"confidence":0.9824219,"speaker":"A"},{"text":"So","start":1664450,"end":1664850,"confidence":0.9941406,"speaker":"A"},{"text":"you","start":1665890,"end":1666170,"confidence":0.98876953,"speaker":"A"},{"text":"can","start":1666170,"end":1666330,"confidence":0.95703125,"speaker":"A"},{"text":"go,","start":1666330,"end":1666570,"confidence":0.99853516,"speaker":"A"},{"text":"you","start":1666570,"end":1666810,"confidence":0.99560547,"speaker":"A"},{"text":"can","start":1666810,"end":1666970,"confidence":0.5966797,"speaker":"A"},{"text":"go","start":1666970,"end":1667130,"confidence":1,"speaker":"A"},{"text":"to","start":1667130,"end":1667250,"confidence":0.9980469,"speaker":"A"},{"text":"town","start":1667250,"end":1667410,"confidence":0.99902344,"speaker":"A"},{"text":"with","start":1667410,"end":1667610,"confidence":0.99609375,"speaker":"A"},{"text":"that","start":1667610,"end":1667890,"confidence":0.9848633,"speaker":"A"},{"text":"all","start":1669420,"end":1669540,"confidence":0.99365234,"speaker":"A"},{"text":"this","start":1669540,"end":1669700,"confidence":0.8154297,"speaker":"A"},{"text":"stuff","start":1669700,"end":1669900,"confidence":1,"speaker":"A"},{"text":"gets","start":1669900,"end":1670060,"confidence":0.99487305,"speaker":"A"},{"text":"Swift","start":1670060,"end":1670260,"confidence":0.99975586,"speaker":"A"},{"text":"in","start":1670260,"end":1670420,"confidence":0.99902344,"speaker":"A"},{"text":"a","start":1670420,"end":1670540,"confidence":0.9995117,"speaker":"A"},{"text":"cookie","start":1670540,"end":1671020,"confidence":1,"speaker":"A"},{"text":"too.","start":1671020,"end":1671420,"confidence":0.9838867,"speaker":"A"}]},{"text":"So that way it'll work. When you go back, if you have checked the box for allow, it's either a box or JavaScript method property that will say, hey, I want this to persist. It'll be Swift in a, in a cookie as well. So if you want to spelunk your cookies, you can see the web authentication token there. So that's actually the easier of the two.","start":1671580,"end":1693500,"confidence":0.99658203,"words":[{"text":"So","start":1671580,"end":1671820,"confidence":0.99658203,"speaker":"A"},{"text":"that","start":1671820,"end":1671940,"confidence":1,"speaker":"A"},{"text":"way","start":1671940,"end":1672180,"confidence":0.9995117,"speaker":"A"},{"text":"it'll","start":1672180,"end":1672540,"confidence":0.8470052,"speaker":"A"},{"text":"work.","start":1672540,"end":1672860,"confidence":1,"speaker":"A"},{"text":"When","start":1673740,"end":1674020,"confidence":1,"speaker":"A"},{"text":"you","start":1674020,"end":1674220,"confidence":0.9995117,"speaker":"A"},{"text":"go","start":1674220,"end":1674460,"confidence":1,"speaker":"A"},{"text":"back,","start":1674460,"end":1674700,"confidence":1,"speaker":"A"},{"text":"if","start":1674700,"end":1674940,"confidence":0.53125,"speaker":"A"},{"text":"you","start":1674940,"end":1675260,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":1675500,"end":1675900,"confidence":0.9995117,"speaker":"A"},{"text":"checked","start":1675900,"end":1676420,"confidence":0.99560547,"speaker":"A"},{"text":"the","start":1676420,"end":1676580,"confidence":1,"speaker":"A"},{"text":"box","start":1676580,"end":1676900,"confidence":0.9995117,"speaker":"A"},{"text":"for","start":1676900,"end":1677180,"confidence":0.99902344,"speaker":"A"},{"text":"allow,","start":1677180,"end":1677500,"confidence":0.99560547,"speaker":"A"},{"text":"it's","start":1678780,"end":1679100,"confidence":0.9899089,"speaker":"A"},{"text":"either","start":1679100,"end":1679340,"confidence":0.99975586,"speaker":"A"},{"text":"a","start":1679340,"end":1679540,"confidence":0.9995117,"speaker":"A"},{"text":"box","start":1679540,"end":1679780,"confidence":0.99975586,"speaker":"A"},{"text":"or","start":1679780,"end":1679980,"confidence":0.99902344,"speaker":"A"},{"text":"JavaScript","start":1679980,"end":1680580,"confidence":0.99934894,"speaker":"A"},{"text":"method","start":1680580,"end":1680900,"confidence":0.99348956,"speaker":"A"},{"text":"property","start":1680900,"end":1681260,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":1681260,"end":1681460,"confidence":0.9995117,"speaker":"A"},{"text":"will","start":1681460,"end":1681700,"confidence":0.9013672,"speaker":"A"},{"text":"say,","start":1681700,"end":1681940,"confidence":0.9975586,"speaker":"A"},{"text":"hey,","start":1681940,"end":1682180,"confidence":0.9992676,"speaker":"A"},{"text":"I","start":1682180,"end":1682300,"confidence":1,"speaker":"A"},{"text":"want","start":1682300,"end":1682420,"confidence":1,"speaker":"A"},{"text":"this","start":1682420,"end":1682580,"confidence":0.99902344,"speaker":"A"},{"text":"to","start":1682580,"end":1682740,"confidence":1,"speaker":"A"},{"text":"persist.","start":1682740,"end":1683260,"confidence":0.9992676,"speaker":"A"},{"text":"It'll","start":1683420,"end":1683780,"confidence":0.9715169,"speaker":"A"},{"text":"be","start":1683780,"end":1683900,"confidence":1,"speaker":"A"},{"text":"Swift","start":1683900,"end":1684100,"confidence":0.9980469,"speaker":"A"},{"text":"in","start":1684100,"end":1684260,"confidence":0.9121094,"speaker":"A"},{"text":"a,","start":1684260,"end":1684420,"confidence":0.7871094,"speaker":"A"},{"text":"in","start":1684420,"end":1684580,"confidence":0.71191406,"speaker":"A"},{"text":"a","start":1684580,"end":1684740,"confidence":0.9995117,"speaker":"A"},{"text":"cookie","start":1684740,"end":1685020,"confidence":0.99975586,"speaker":"A"},{"text":"as","start":1685020,"end":1685179,"confidence":1,"speaker":"A"},{"text":"well.","start":1685179,"end":1685460,"confidence":1,"speaker":"A"},{"text":"So","start":1685460,"end":1685700,"confidence":0.99658203,"speaker":"A"},{"text":"if","start":1685700,"end":1685820,"confidence":1,"speaker":"A"},{"text":"you","start":1685820,"end":1685940,"confidence":1,"speaker":"A"},{"text":"want","start":1685940,"end":1686060,"confidence":0.95751953,"speaker":"A"},{"text":"to","start":1686060,"end":1686220,"confidence":0.97314453,"speaker":"A"},{"text":"spelunk","start":1686220,"end":1686820,"confidence":0.9758301,"speaker":"A"},{"text":"your","start":1686820,"end":1686980,"confidence":0.99560547,"speaker":"A"},{"text":"cookies,","start":1686980,"end":1687260,"confidence":1,"speaker":"A"},{"text":"you","start":1687340,"end":1687580,"confidence":0.99853516,"speaker":"A"},{"text":"can","start":1687580,"end":1687820,"confidence":0.9995117,"speaker":"A"},{"text":"see","start":1687980,"end":1688300,"confidence":0.78027344,"speaker":"A"},{"text":"the","start":1688300,"end":1688500,"confidence":0.9995117,"speaker":"A"},{"text":"web","start":1688500,"end":1688740,"confidence":0.9992676,"speaker":"A"},{"text":"authentication","start":1688740,"end":1689340,"confidence":0.99938965,"speaker":"A"},{"text":"token","start":1689340,"end":1689740,"confidence":0.99902344,"speaker":"A"},{"text":"there.","start":1689740,"end":1690060,"confidence":0.99560547,"speaker":"A"},{"text":"So","start":1691500,"end":1691780,"confidence":0.9921875,"speaker":"A"},{"text":"that's","start":1691780,"end":1692100,"confidence":0.9995117,"speaker":"A"},{"text":"actually","start":1692100,"end":1692300,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1692300,"end":1692540,"confidence":0.99609375,"speaker":"A"},{"text":"easier","start":1692540,"end":1692900,"confidence":0.99975586,"speaker":"A"},{"text":"of","start":1692900,"end":1693020,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1693020,"end":1693180,"confidence":0.99902344,"speaker":"A"},{"text":"two.","start":1693180,"end":1693500,"confidence":0.9926758,"speaker":"A"}]},{"text":"So that gives you the private database for the public database is where you're going to need a server to server authentication. And so to do that it's really actually not as bad as I thought it was going to be. But you go to the new server to server key, put in a name you want, it'll actually give you the command you need to run and then you just paste in the public key in here. That gives you. That will give you everything you need.","start":1694380,"end":1720300,"confidence":0.99902344,"words":[{"text":"So","start":1694380,"end":1694660,"confidence":0.99902344,"speaker":"A"},{"text":"that","start":1694660,"end":1694820,"confidence":1,"speaker":"A"},{"text":"gives","start":1694820,"end":1695020,"confidence":1,"speaker":"A"},{"text":"you","start":1695020,"end":1695100,"confidence":1,"speaker":"A"},{"text":"the","start":1695100,"end":1695220,"confidence":0.9995117,"speaker":"A"},{"text":"private","start":1695220,"end":1695420,"confidence":1,"speaker":"A"},{"text":"database","start":1695420,"end":1695940,"confidence":0.9998372,"speaker":"A"},{"text":"for","start":1695940,"end":1696100,"confidence":0.9975586,"speaker":"A"},{"text":"the","start":1696100,"end":1696220,"confidence":0.9995117,"speaker":"A"},{"text":"public","start":1696220,"end":1696380,"confidence":1,"speaker":"A"},{"text":"database","start":1696380,"end":1696940,"confidence":0.99886066,"speaker":"A"},{"text":"is","start":1696940,"end":1697140,"confidence":0.98876953,"speaker":"A"},{"text":"where","start":1697140,"end":1697300,"confidence":0.99902344,"speaker":"A"},{"text":"you're","start":1697300,"end":1697500,"confidence":0.9975586,"speaker":"A"},{"text":"going","start":1697500,"end":1697580,"confidence":0.9355469,"speaker":"A"},{"text":"to","start":1697580,"end":1697660,"confidence":0.9980469,"speaker":"A"},{"text":"need","start":1697660,"end":1697820,"confidence":0.99853516,"speaker":"A"},{"text":"a","start":1697820,"end":1697990,"confidence":0.55908203,"speaker":"A"},{"text":"server","start":1698220,"end":1698460,"confidence":0.9975586,"speaker":"A"},{"text":"to","start":1698460,"end":1698620,"confidence":0.9536133,"speaker":"A"},{"text":"server","start":1698620,"end":1699020,"confidence":0.99902344,"speaker":"A"},{"text":"authentication.","start":1699020,"end":1699820,"confidence":0.99938965,"speaker":"A"},{"text":"And","start":1701340,"end":1701700,"confidence":0.98876953,"speaker":"A"},{"text":"so","start":1701700,"end":1701940,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":1701940,"end":1702100,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":1702100,"end":1702300,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":1702300,"end":1702620,"confidence":0.9970703,"speaker":"A"},{"text":"it's","start":1703180,"end":1703540,"confidence":0.9996745,"speaker":"A"},{"text":"really","start":1703540,"end":1703820,"confidence":0.99853516,"speaker":"A"},{"text":"actually","start":1703820,"end":1704180,"confidence":0.99853516,"speaker":"A"},{"text":"not","start":1704180,"end":1704420,"confidence":1,"speaker":"A"},{"text":"as","start":1704420,"end":1704620,"confidence":0.99902344,"speaker":"A"},{"text":"bad","start":1704620,"end":1704820,"confidence":1,"speaker":"A"},{"text":"as","start":1704820,"end":1704980,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":1704980,"end":1705140,"confidence":1,"speaker":"A"},{"text":"thought","start":1705140,"end":1705260,"confidence":1,"speaker":"A"},{"text":"it","start":1705260,"end":1705340,"confidence":0.9975586,"speaker":"A"},{"text":"was","start":1705340,"end":1705460,"confidence":0.9995117,"speaker":"A"},{"text":"going","start":1705460,"end":1705580,"confidence":0.8984375,"speaker":"A"},{"text":"to","start":1705580,"end":1705660,"confidence":1,"speaker":"A"},{"text":"be.","start":1705660,"end":1705900,"confidence":1,"speaker":"A"},{"text":"But","start":1705900,"end":1706300,"confidence":0.9975586,"speaker":"A"},{"text":"you","start":1706620,"end":1706940,"confidence":0.9995117,"speaker":"A"},{"text":"go","start":1706940,"end":1707220,"confidence":0.99902344,"speaker":"A"},{"text":"to","start":1707220,"end":1707500,"confidence":1,"speaker":"A"},{"text":"the","start":1707500,"end":1707700,"confidence":0.9995117,"speaker":"A"},{"text":"new","start":1707700,"end":1707980,"confidence":0.9970703,"speaker":"A"},{"text":"server","start":1708220,"end":1708620,"confidence":0.99731445,"speaker":"A"},{"text":"to","start":1708620,"end":1708740,"confidence":0.8359375,"speaker":"A"},{"text":"server","start":1708740,"end":1709140,"confidence":0.99731445,"speaker":"A"},{"text":"key,","start":1709140,"end":1709420,"confidence":0.99121094,"speaker":"A"},{"text":"put","start":1709420,"end":1709700,"confidence":0.9951172,"speaker":"A"},{"text":"in","start":1709700,"end":1709900,"confidence":0.9526367,"speaker":"A"},{"text":"a","start":1709900,"end":1710100,"confidence":0.9555664,"speaker":"A"},{"text":"name","start":1710100,"end":1710300,"confidence":0.9941406,"speaker":"A"},{"text":"you","start":1710300,"end":1710500,"confidence":0.99072266,"speaker":"A"},{"text":"want,","start":1710500,"end":1710780,"confidence":0.70458984,"speaker":"A"},{"text":"it'll","start":1711020,"end":1711460,"confidence":0.9889323,"speaker":"A"},{"text":"actually","start":1711460,"end":1711660,"confidence":0.99902344,"speaker":"A"},{"text":"give","start":1711660,"end":1711860,"confidence":1,"speaker":"A"},{"text":"you","start":1711860,"end":1712020,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1712020,"end":1712180,"confidence":0.9995117,"speaker":"A"},{"text":"command","start":1712180,"end":1712500,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1712500,"end":1712660,"confidence":0.9970703,"speaker":"A"},{"text":"need","start":1712660,"end":1712820,"confidence":0.99902344,"speaker":"A"},{"text":"to","start":1712820,"end":1712980,"confidence":1,"speaker":"A"},{"text":"run","start":1712980,"end":1713260,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":1713340,"end":1713620,"confidence":0.99853516,"speaker":"A"},{"text":"then","start":1713620,"end":1713780,"confidence":0.9946289,"speaker":"A"},{"text":"you","start":1713780,"end":1713940,"confidence":0.99853516,"speaker":"A"},{"text":"just","start":1713940,"end":1714099,"confidence":0.9995117,"speaker":"A"},{"text":"paste","start":1714099,"end":1714420,"confidence":0.98950195,"speaker":"A"},{"text":"in","start":1714420,"end":1714580,"confidence":0.9951172,"speaker":"A"},{"text":"the","start":1714580,"end":1714700,"confidence":0.9995117,"speaker":"A"},{"text":"public","start":1714700,"end":1714900,"confidence":0.9995117,"speaker":"A"},{"text":"key","start":1714900,"end":1715180,"confidence":0.9995117,"speaker":"A"},{"text":"in","start":1715180,"end":1715380,"confidence":0.9169922,"speaker":"A"},{"text":"here.","start":1715380,"end":1715660,"confidence":0.9995117,"speaker":"A"},{"text":"That","start":1716380,"end":1716700,"confidence":0.9980469,"speaker":"A"},{"text":"gives","start":1716700,"end":1717060,"confidence":0.9995117,"speaker":"A"},{"text":"you.","start":1717060,"end":1717340,"confidence":0.9995117,"speaker":"A"},{"text":"That","start":1718780,"end":1719060,"confidence":0.8378906,"speaker":"A"},{"text":"will","start":1719060,"end":1719220,"confidence":0.9951172,"speaker":"A"},{"text":"give","start":1719220,"end":1719380,"confidence":1,"speaker":"A"},{"text":"you","start":1719380,"end":1719540,"confidence":1,"speaker":"A"},{"text":"everything","start":1719540,"end":1719780,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1719780,"end":1720020,"confidence":0.99902344,"speaker":"A"},{"text":"need.","start":1720020,"end":1720300,"confidence":0.9995117,"speaker":"A"}]},{"text":"So here's how to run it. Basically, sorry about that.","start":1720860,"end":1724630,"confidence":0.9995117,"words":[{"text":"So","start":1720860,"end":1721140,"confidence":0.9995117,"speaker":"A"},{"text":"here's","start":1721140,"end":1721540,"confidence":0.9949544,"speaker":"A"},{"text":"how","start":1721540,"end":1721780,"confidence":1,"speaker":"A"},{"text":"to","start":1721780,"end":1721940,"confidence":0.9995117,"speaker":"A"},{"text":"run","start":1721940,"end":1722100,"confidence":1,"speaker":"A"},{"text":"it.","start":1722100,"end":1722300,"confidence":0.99902344,"speaker":"A"},{"text":"Basically,","start":1722300,"end":1722780,"confidence":0.998291,"speaker":"A"},{"text":"sorry","start":1723990,"end":1724190,"confidence":0.9773763,"speaker":"A"},{"text":"about","start":1724190,"end":1724350,"confidence":0.9819336,"speaker":"A"},{"text":"that.","start":1724350,"end":1724630,"confidence":0.9941406,"speaker":"A"}]},{"text":"We just run that. That gives us the key. We can go ahead and get the public key. We can also pipe it to PB Copy and then all we have to do is paste that in the box over here.","start":1737190,"end":1750930,"confidence":0.7998047,"words":[{"text":"We","start":1737190,"end":1737470,"confidence":0.7998047,"speaker":"A"},{"text":"just","start":1737470,"end":1737670,"confidence":0.99853516,"speaker":"A"},{"text":"run","start":1737670,"end":1737870,"confidence":0.9975586,"speaker":"A"},{"text":"that.","start":1737870,"end":1738150,"confidence":0.9970703,"speaker":"A"},{"text":"That","start":1738470,"end":1738750,"confidence":0.9995117,"speaker":"A"},{"text":"gives","start":1738750,"end":1738950,"confidence":0.99975586,"speaker":"A"},{"text":"us","start":1738950,"end":1739070,"confidence":1,"speaker":"A"},{"text":"the","start":1739070,"end":1739230,"confidence":0.9995117,"speaker":"A"},{"text":"key.","start":1739230,"end":1739510,"confidence":0.9995117,"speaker":"A"},{"text":"We","start":1740710,"end":1740990,"confidence":0.99902344,"speaker":"A"},{"text":"can","start":1740990,"end":1741150,"confidence":0.9995117,"speaker":"A"},{"text":"go","start":1741150,"end":1741310,"confidence":0.99902344,"speaker":"A"},{"text":"ahead","start":1741310,"end":1741550,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":1741550,"end":1741910,"confidence":0.9970703,"speaker":"A"},{"text":"get","start":1742070,"end":1742350,"confidence":1,"speaker":"A"},{"text":"the","start":1742350,"end":1742510,"confidence":1,"speaker":"A"},{"text":"public","start":1742510,"end":1742750,"confidence":1,"speaker":"A"},{"text":"key.","start":1742750,"end":1743110,"confidence":0.9995117,"speaker":"A"},{"text":"We","start":1743190,"end":1743470,"confidence":0.9980469,"speaker":"A"},{"text":"can","start":1743470,"end":1743750,"confidence":0.9995117,"speaker":"A"},{"text":"also","start":1743910,"end":1744270,"confidence":0.99902344,"speaker":"A"},{"text":"pipe","start":1744270,"end":1744670,"confidence":0.9607747,"speaker":"A"},{"text":"it","start":1744670,"end":1744870,"confidence":0.9975586,"speaker":"A"},{"text":"to","start":1744870,"end":1745070,"confidence":0.9975586,"speaker":"A"},{"text":"PB","start":1745070,"end":1745390,"confidence":0.79541016,"speaker":"A"},{"text":"Copy","start":1745390,"end":1745990,"confidence":0.9637044,"speaker":"A"},{"text":"and","start":1746470,"end":1746750,"confidence":0.9321289,"speaker":"A"},{"text":"then","start":1746750,"end":1746910,"confidence":0.98779297,"speaker":"A"},{"text":"all","start":1746910,"end":1747070,"confidence":0.9995117,"speaker":"A"},{"text":"we","start":1747070,"end":1747190,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":1747190,"end":1747310,"confidence":0.95947266,"speaker":"A"},{"text":"to","start":1747310,"end":1747430,"confidence":0.99609375,"speaker":"A"},{"text":"do","start":1747430,"end":1747590,"confidence":0.99609375,"speaker":"A"},{"text":"is","start":1747590,"end":1747830,"confidence":0.99902344,"speaker":"A"},{"text":"paste","start":1747830,"end":1748110,"confidence":0.9172363,"speaker":"A"},{"text":"that","start":1748110,"end":1748310,"confidence":0.99560547,"speaker":"A"},{"text":"in","start":1748310,"end":1748510,"confidence":0.9970703,"speaker":"A"},{"text":"the","start":1748510,"end":1748670,"confidence":0.99853516,"speaker":"A"},{"text":"box","start":1748670,"end":1749030,"confidence":0.99780273,"speaker":"A"},{"text":"over","start":1750370,"end":1750570,"confidence":0.9951172,"speaker":"A"},{"text":"here.","start":1750570,"end":1750930,"confidence":0.9995117,"speaker":"A"}]},{"text":"There we go.","start":1757970,"end":1758690,"confidence":0.98046875,"words":[{"text":"There","start":1757970,"end":1758250,"confidence":0.98046875,"speaker":"A"},{"text":"we","start":1758250,"end":1758410,"confidence":0.5283203,"speaker":"A"},{"text":"go.","start":1758410,"end":1758690,"confidence":1,"speaker":"A"}]},{"text":"It's pretty complicated to use the server key. We can spell on the miskit code on how to do it because it does a lot of that work for you if you have it. But you will need the, the private key, the key id, I think, I think that's it. And then you should be good with having access now to the public database. So just to go over, there's differences between the public and private database.","start":1765890,"end":1795490,"confidence":0.9930013,"words":[{"text":"It's","start":1765890,"end":1766250,"confidence":0.9930013,"speaker":"A"},{"text":"pretty","start":1766250,"end":1766570,"confidence":0.9998372,"speaker":"A"},{"text":"complicated","start":1766570,"end":1767250,"confidence":1,"speaker":"A"},{"text":"to","start":1767250,"end":1767490,"confidence":0.9995117,"speaker":"A"},{"text":"use","start":1767490,"end":1767770,"confidence":1,"speaker":"A"},{"text":"the","start":1767770,"end":1768010,"confidence":0.9995117,"speaker":"A"},{"text":"server","start":1768010,"end":1768450,"confidence":0.99975586,"speaker":"A"},{"text":"key.","start":1768450,"end":1768770,"confidence":0.99560547,"speaker":"A"},{"text":"We","start":1770050,"end":1770330,"confidence":0.9951172,"speaker":"A"},{"text":"can","start":1770330,"end":1770490,"confidence":0.99902344,"speaker":"A"},{"text":"spell","start":1770490,"end":1770770,"confidence":0.9838867,"speaker":"A"},{"text":"on","start":1770770,"end":1771050,"confidence":0.8208008,"speaker":"A"},{"text":"the","start":1771050,"end":1771250,"confidence":0.99658203,"speaker":"A"},{"text":"miskit","start":1771250,"end":1771690,"confidence":0.9238281,"speaker":"A"},{"text":"code","start":1771690,"end":1771970,"confidence":0.99348956,"speaker":"A"},{"text":"on","start":1771970,"end":1772090,"confidence":0.9975586,"speaker":"A"},{"text":"how","start":1772090,"end":1772250,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":1772250,"end":1772410,"confidence":0.99902344,"speaker":"A"},{"text":"do","start":1772410,"end":1772570,"confidence":0.9995117,"speaker":"A"},{"text":"it","start":1772570,"end":1772850,"confidence":0.9995117,"speaker":"A"},{"text":"because","start":1773170,"end":1773450,"confidence":0.9663086,"speaker":"A"},{"text":"it","start":1773450,"end":1773610,"confidence":0.9995117,"speaker":"A"},{"text":"does","start":1773610,"end":1773810,"confidence":0.99902344,"speaker":"A"},{"text":"a","start":1773810,"end":1773970,"confidence":0.9995117,"speaker":"A"},{"text":"lot","start":1773970,"end":1774050,"confidence":1,"speaker":"A"},{"text":"of","start":1774050,"end":1774130,"confidence":0.9980469,"speaker":"A"},{"text":"that","start":1774130,"end":1774290,"confidence":0.99560547,"speaker":"A"},{"text":"work","start":1774290,"end":1774530,"confidence":1,"speaker":"A"},{"text":"for","start":1774530,"end":1774730,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":1774730,"end":1774930,"confidence":0.9995117,"speaker":"A"},{"text":"if","start":1774930,"end":1775170,"confidence":0.59228516,"speaker":"A"},{"text":"you","start":1775170,"end":1775330,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":1775330,"end":1775450,"confidence":0.9995117,"speaker":"A"},{"text":"it.","start":1775450,"end":1775730,"confidence":0.9916992,"speaker":"A"},{"text":"But","start":1776610,"end":1776730,"confidence":0.99121094,"speaker":"A"},{"text":"you","start":1776730,"end":1776890,"confidence":0.9995117,"speaker":"A"},{"text":"will","start":1776890,"end":1777090,"confidence":0.9995117,"speaker":"A"},{"text":"need","start":1777090,"end":1777410,"confidence":0.9995117,"speaker":"A"},{"text":"the,","start":1777650,"end":1778050,"confidence":0.8984375,"speaker":"A"},{"text":"the","start":1779170,"end":1779490,"confidence":0.98876953,"speaker":"A"},{"text":"private","start":1779490,"end":1779810,"confidence":0.9995117,"speaker":"A"},{"text":"key,","start":1779890,"end":1780290,"confidence":0.9975586,"speaker":"A"},{"text":"the","start":1780290,"end":1780570,"confidence":0.99121094,"speaker":"A"},{"text":"key","start":1780570,"end":1780810,"confidence":0.9946289,"speaker":"A"},{"text":"id,","start":1780810,"end":1781170,"confidence":0.98583984,"speaker":"A"},{"text":"I","start":1782290,"end":1782570,"confidence":0.90771484,"speaker":"A"},{"text":"think,","start":1782570,"end":1782850,"confidence":0.9980469,"speaker":"A"},{"text":"I","start":1783170,"end":1783450,"confidence":0.8652344,"speaker":"A"},{"text":"think","start":1783450,"end":1783610,"confidence":0.9868164,"speaker":"A"},{"text":"that's","start":1783610,"end":1783810,"confidence":0.9995117,"speaker":"A"},{"text":"it.","start":1783810,"end":1784050,"confidence":0.9941406,"speaker":"A"},{"text":"And","start":1784370,"end":1784650,"confidence":0.9921875,"speaker":"A"},{"text":"then","start":1784650,"end":1784890,"confidence":0.94677734,"speaker":"A"},{"text":"you","start":1784890,"end":1785130,"confidence":0.99658203,"speaker":"A"},{"text":"should","start":1785130,"end":1785290,"confidence":1,"speaker":"A"},{"text":"be","start":1785290,"end":1785490,"confidence":1,"speaker":"A"},{"text":"good","start":1785490,"end":1785810,"confidence":0.9995117,"speaker":"A"},{"text":"with","start":1786130,"end":1786490,"confidence":0.9975586,"speaker":"A"},{"text":"having","start":1786490,"end":1786810,"confidence":0.9555664,"speaker":"A"},{"text":"access","start":1786810,"end":1787170,"confidence":1,"speaker":"A"},{"text":"now","start":1787170,"end":1787490,"confidence":0.9975586,"speaker":"A"},{"text":"to","start":1787490,"end":1787770,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1787770,"end":1788010,"confidence":0.9995117,"speaker":"A"},{"text":"public","start":1788010,"end":1788290,"confidence":0.9995117,"speaker":"A"},{"text":"database.","start":1789330,"end":1790130,"confidence":0.99902344,"speaker":"A"},{"text":"So","start":1790850,"end":1791250,"confidence":0.98876953,"speaker":"A"},{"text":"just","start":1791570,"end":1791889,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":1791889,"end":1792050,"confidence":0.99853516,"speaker":"A"},{"text":"go","start":1792050,"end":1792209,"confidence":0.99902344,"speaker":"A"},{"text":"over,","start":1792209,"end":1792530,"confidence":1,"speaker":"A"},{"text":"there's","start":1792610,"end":1793050,"confidence":0.9892578,"speaker":"A"},{"text":"differences","start":1793050,"end":1793450,"confidence":0.9995117,"speaker":"A"},{"text":"between","start":1793450,"end":1793770,"confidence":1,"speaker":"A"},{"text":"the","start":1793770,"end":1793970,"confidence":0.9995117,"speaker":"A"},{"text":"public","start":1793970,"end":1794210,"confidence":1,"speaker":"A"},{"text":"and","start":1794210,"end":1794490,"confidence":0.99902344,"speaker":"A"},{"text":"private","start":1794490,"end":1794730,"confidence":1,"speaker":"A"},{"text":"database.","start":1794730,"end":1795490,"confidence":0.99820966,"speaker":"A"}]},{"text":"So this is query. You can see my cursor, right? Query and lookup of records is available on all but file changes or, excuse me, record changes. It's not available on public zones, aren't really available in public zone changes aren't available in public notifications. Zone notifications aren't available in public, but query notifications are.","start":1797170,"end":1821990,"confidence":0.99609375,"words":[{"text":"So","start":1797170,"end":1797570,"confidence":0.99609375,"speaker":"A"},{"text":"this","start":1797730,"end":1798050,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1798050,"end":1798370,"confidence":0.9995117,"speaker":"A"},{"text":"query.","start":1798530,"end":1799090,"confidence":0.9975586,"speaker":"A"},{"text":"You","start":1799570,"end":1799810,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":1799810,"end":1799930,"confidence":0.5439453,"speaker":"A"},{"text":"see","start":1799930,"end":1800090,"confidence":0.99609375,"speaker":"A"},{"text":"my","start":1800090,"end":1800250,"confidence":0.8847656,"speaker":"A"},{"text":"cursor,","start":1800250,"end":1800650,"confidence":0.9938151,"speaker":"A"},{"text":"right?","start":1800650,"end":1800930,"confidence":0.97265625,"speaker":"A"},{"text":"Query","start":1800930,"end":1801330,"confidence":0.9904785,"speaker":"A"},{"text":"and","start":1801330,"end":1801530,"confidence":0.53759766,"speaker":"A"},{"text":"lookup","start":1801530,"end":1802010,"confidence":0.94018555,"speaker":"A"},{"text":"of","start":1802010,"end":1802330,"confidence":0.9916992,"speaker":"A"},{"text":"records","start":1802330,"end":1803010,"confidence":0.99975586,"speaker":"A"},{"text":"is","start":1803010,"end":1803290,"confidence":0.9995117,"speaker":"A"},{"text":"available","start":1803290,"end":1803570,"confidence":0.9995117,"speaker":"A"},{"text":"on","start":1803650,"end":1803970,"confidence":0.99853516,"speaker":"A"},{"text":"all","start":1803970,"end":1804290,"confidence":0.99658203,"speaker":"A"},{"text":"but","start":1805270,"end":1805510,"confidence":0.9897461,"speaker":"A"},{"text":"file","start":1805590,"end":1806030,"confidence":0.9970703,"speaker":"A"},{"text":"changes","start":1806030,"end":1806630,"confidence":0.9992676,"speaker":"A"},{"text":"or,","start":1806790,"end":1807110,"confidence":0.97314453,"speaker":"A"},{"text":"excuse","start":1807110,"end":1807430,"confidence":0.99820966,"speaker":"A"},{"text":"me,","start":1807430,"end":1807670,"confidence":0.9995117,"speaker":"A"},{"text":"record","start":1807990,"end":1808350,"confidence":0.99609375,"speaker":"A"},{"text":"changes.","start":1808350,"end":1808830,"confidence":0.99975586,"speaker":"A"},{"text":"It's","start":1808830,"end":1809070,"confidence":0.8819987,"speaker":"A"},{"text":"not","start":1809070,"end":1809230,"confidence":1,"speaker":"A"},{"text":"available","start":1809230,"end":1809510,"confidence":0.99853516,"speaker":"A"},{"text":"on","start":1809830,"end":1810150,"confidence":0.9160156,"speaker":"A"},{"text":"public","start":1810150,"end":1810470,"confidence":0.9995117,"speaker":"A"},{"text":"zones,","start":1810950,"end":1811390,"confidence":0.9909668,"speaker":"A"},{"text":"aren't","start":1811390,"end":1811670,"confidence":0.9958496,"speaker":"A"},{"text":"really","start":1811670,"end":1811830,"confidence":1,"speaker":"A"},{"text":"available","start":1811830,"end":1812150,"confidence":0.99853516,"speaker":"A"},{"text":"in","start":1812150,"end":1812430,"confidence":0.9394531,"speaker":"A"},{"text":"public","start":1812430,"end":1812710,"confidence":1,"speaker":"A"},{"text":"zone","start":1812790,"end":1813190,"confidence":0.96240234,"speaker":"A"},{"text":"changes","start":1813190,"end":1813550,"confidence":0.8989258,"speaker":"A"},{"text":"aren't","start":1813550,"end":1813870,"confidence":0.9959717,"speaker":"A"},{"text":"available","start":1813870,"end":1814150,"confidence":1,"speaker":"A"},{"text":"in","start":1814470,"end":1814750,"confidence":0.9667969,"speaker":"A"},{"text":"public","start":1814750,"end":1815030,"confidence":1,"speaker":"A"},{"text":"notifications.","start":1815670,"end":1816470,"confidence":0.9949544,"speaker":"A"},{"text":"Zone","start":1816550,"end":1816950,"confidence":0.94677734,"speaker":"A"},{"text":"notifications","start":1816950,"end":1817630,"confidence":0.9996745,"speaker":"A"},{"text":"aren't","start":1817630,"end":1817950,"confidence":0.9765625,"speaker":"A"},{"text":"available","start":1817950,"end":1818230,"confidence":1,"speaker":"A"},{"text":"in","start":1818310,"end":1818590,"confidence":0.9941406,"speaker":"A"},{"text":"public,","start":1818590,"end":1818870,"confidence":1,"speaker":"A"},{"text":"but","start":1819670,"end":1820070,"confidence":0.9921875,"speaker":"A"},{"text":"query","start":1820070,"end":1820550,"confidence":0.82421875,"speaker":"A"},{"text":"notifications","start":1820709,"end":1821510,"confidence":0.9996745,"speaker":"A"},{"text":"are.","start":1821590,"end":1821990,"confidence":0.9902344,"speaker":"A"}]},{"text":"And you can also do any stuff with assets which are basically binary files. You can also do that in all of them. You can't do query notifications on shared. Shared would essentially work like private essentially. So it's just a matter of who.","start":1821990,"end":1840530,"confidence":0.9921875,"words":[{"text":"And","start":1821990,"end":1822390,"confidence":0.9921875,"speaker":"A"},{"text":"you","start":1822390,"end":1822630,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":1822630,"end":1822750,"confidence":0.9995117,"speaker":"A"},{"text":"also","start":1822750,"end":1822990,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":1822990,"end":1823350,"confidence":1,"speaker":"A"},{"text":"any","start":1823350,"end":1823750,"confidence":0.99853516,"speaker":"A"},{"text":"stuff","start":1823750,"end":1824150,"confidence":0.9996745,"speaker":"A"},{"text":"with","start":1824150,"end":1824470,"confidence":0.98876953,"speaker":"A"},{"text":"assets","start":1824710,"end":1825270,"confidence":0.7792969,"speaker":"A"},{"text":"which","start":1825350,"end":1825630,"confidence":0.99853516,"speaker":"A"},{"text":"are","start":1825630,"end":1825790,"confidence":1,"speaker":"A"},{"text":"basically","start":1825790,"end":1826190,"confidence":0.99975586,"speaker":"A"},{"text":"binary","start":1826190,"end":1826710,"confidence":0.9995117,"speaker":"A"},{"text":"files.","start":1826710,"end":1827030,"confidence":0.99194336,"speaker":"A"},{"text":"You","start":1827030,"end":1827190,"confidence":0.99853516,"speaker":"A"},{"text":"can","start":1827190,"end":1827310,"confidence":0.99853516,"speaker":"A"},{"text":"also","start":1827310,"end":1827470,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":1827470,"end":1827630,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":1827630,"end":1827910,"confidence":0.99902344,"speaker":"A"},{"text":"in","start":1828310,"end":1828670,"confidence":0.5600586,"speaker":"A"},{"text":"all","start":1828670,"end":1828910,"confidence":0.9995117,"speaker":"A"},{"text":"of","start":1828910,"end":1829070,"confidence":0.99902344,"speaker":"A"},{"text":"them.","start":1829070,"end":1829350,"confidence":0.9145508,"speaker":"A"},{"text":"You","start":1830630,"end":1830910,"confidence":0.99658203,"speaker":"A"},{"text":"can't","start":1830910,"end":1831230,"confidence":0.9586589,"speaker":"A"},{"text":"do","start":1831230,"end":1831590,"confidence":1,"speaker":"A"},{"text":"query","start":1831750,"end":1832190,"confidence":0.970459,"speaker":"A"},{"text":"notifications","start":1832190,"end":1832990,"confidence":0.99934894,"speaker":"A"},{"text":"on","start":1832990,"end":1833270,"confidence":0.98046875,"speaker":"A"},{"text":"shared.","start":1833270,"end":1833830,"confidence":0.99780273,"speaker":"A"},{"text":"Shared","start":1834470,"end":1834910,"confidence":0.9873047,"speaker":"A"},{"text":"would","start":1834910,"end":1835110,"confidence":0.5698242,"speaker":"A"},{"text":"essentially","start":1835110,"end":1835590,"confidence":0.99902344,"speaker":"A"},{"text":"work","start":1835590,"end":1835870,"confidence":1,"speaker":"A"},{"text":"like","start":1835870,"end":1836110,"confidence":0.9980469,"speaker":"A"},{"text":"private","start":1836110,"end":1836390,"confidence":0.99902344,"speaker":"A"},{"text":"essentially.","start":1836850,"end":1837410,"confidence":0.9968262,"speaker":"A"},{"text":"So","start":1837490,"end":1837890,"confidence":0.9946289,"speaker":"A"},{"text":"it's","start":1839090,"end":1839410,"confidence":0.9995117,"speaker":"A"},{"text":"just","start":1839410,"end":1839530,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":1839530,"end":1839650,"confidence":0.9995117,"speaker":"A"},{"text":"matter","start":1839650,"end":1839810,"confidence":1,"speaker":"A"},{"text":"of","start":1839810,"end":1840130,"confidence":0.99902344,"speaker":"A"},{"text":"who.","start":1840130,"end":1840530,"confidence":0.77685547,"speaker":"A"}]},{"text":"Who's the owner and how is it shared.","start":1840530,"end":1842610,"confidence":0.9977214,"words":[{"text":"Who's","start":1840530,"end":1840930,"confidence":0.9977214,"speaker":"A"},{"text":"the","start":1840930,"end":1841050,"confidence":0.99853516,"speaker":"A"},{"text":"owner","start":1841050,"end":1841370,"confidence":1,"speaker":"A"},{"text":"and","start":1841370,"end":1841570,"confidence":0.99609375,"speaker":"A"},{"text":"how","start":1841570,"end":1841810,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1841810,"end":1841970,"confidence":0.94970703,"speaker":"A"},{"text":"it","start":1841970,"end":1842090,"confidence":0.99902344,"speaker":"A"},{"text":"shared.","start":1842090,"end":1842610,"confidence":0.9968262,"speaker":"A"}]},{"text":"So one of the big challenges I think we've all faced this when we've dealt with certain web services is field type polymorphism. If you've done JSON where you don't know what type you're getting back or what data you're getting back, this can Be a bit challenging. So if you look at the documentation in Web Services Reference, there is a, there's a page called types and dictionaries and there is types. There's different type values for each field. If you're familiar with CloudKit, you've seen this, right?","start":1844690,"end":1878450,"confidence":0.99658203,"words":[{"text":"So","start":1844690,"end":1844930,"confidence":0.99658203,"speaker":"A"},{"text":"one","start":1844930,"end":1845050,"confidence":0.9794922,"speaker":"A"},{"text":"of","start":1845050,"end":1845210,"confidence":1,"speaker":"A"},{"text":"the","start":1845210,"end":1845450,"confidence":0.9995117,"speaker":"A"},{"text":"big","start":1845450,"end":1845730,"confidence":1,"speaker":"A"},{"text":"challenges","start":1845730,"end":1846370,"confidence":0.96468097,"speaker":"A"},{"text":"I","start":1846450,"end":1846730,"confidence":0.99853516,"speaker":"A"},{"text":"think","start":1846730,"end":1846890,"confidence":1,"speaker":"A"},{"text":"we've","start":1846890,"end":1847170,"confidence":0.9977214,"speaker":"A"},{"text":"all","start":1847170,"end":1847330,"confidence":0.9995117,"speaker":"A"},{"text":"faced","start":1847330,"end":1847650,"confidence":0.95825195,"speaker":"A"},{"text":"this","start":1847650,"end":1847810,"confidence":0.99072266,"speaker":"A"},{"text":"when","start":1847810,"end":1848010,"confidence":0.99609375,"speaker":"A"},{"text":"we've","start":1848010,"end":1848370,"confidence":0.98095703,"speaker":"A"},{"text":"dealt","start":1848370,"end":1848650,"confidence":0.9992676,"speaker":"A"},{"text":"with","start":1848650,"end":1848810,"confidence":1,"speaker":"A"},{"text":"certain","start":1848810,"end":1849010,"confidence":0.9995117,"speaker":"A"},{"text":"web","start":1849010,"end":1849290,"confidence":0.99902344,"speaker":"A"},{"text":"services","start":1849290,"end":1849570,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1850530,"end":1850930,"confidence":0.98876953,"speaker":"A"},{"text":"field","start":1851410,"end":1851810,"confidence":0.9897461,"speaker":"A"},{"text":"type","start":1851970,"end":1852449,"confidence":0.810791,"speaker":"A"},{"text":"polymorphism.","start":1852449,"end":1853370,"confidence":0.9991862,"speaker":"A"},{"text":"If","start":1853370,"end":1853570,"confidence":1,"speaker":"A"},{"text":"you've","start":1853570,"end":1853730,"confidence":0.9998372,"speaker":"A"},{"text":"done","start":1853730,"end":1853890,"confidence":0.9975586,"speaker":"A"},{"text":"JSON","start":1853890,"end":1854370,"confidence":0.7998047,"speaker":"A"},{"text":"where","start":1854370,"end":1854650,"confidence":0.87939453,"speaker":"A"},{"text":"you","start":1854650,"end":1854850,"confidence":1,"speaker":"A"},{"text":"don't","start":1854850,"end":1855090,"confidence":0.9996745,"speaker":"A"},{"text":"know","start":1855090,"end":1855210,"confidence":0.99902344,"speaker":"A"},{"text":"what","start":1855210,"end":1855370,"confidence":0.9995117,"speaker":"A"},{"text":"type","start":1855370,"end":1855730,"confidence":0.9946289,"speaker":"A"},{"text":"you're","start":1855730,"end":1855970,"confidence":1,"speaker":"A"},{"text":"getting","start":1855970,"end":1856130,"confidence":0.9995117,"speaker":"A"},{"text":"back","start":1856130,"end":1856370,"confidence":0.9980469,"speaker":"A"},{"text":"or","start":1856370,"end":1856570,"confidence":0.9980469,"speaker":"A"},{"text":"what","start":1856570,"end":1856730,"confidence":0.98876953,"speaker":"A"},{"text":"data","start":1856730,"end":1856930,"confidence":0.9980469,"speaker":"A"},{"text":"you're","start":1856930,"end":1857170,"confidence":0.9995117,"speaker":"A"},{"text":"getting","start":1857170,"end":1857370,"confidence":0.9916992,"speaker":"A"},{"text":"back,","start":1857370,"end":1857730,"confidence":0.9526367,"speaker":"A"},{"text":"this","start":1858050,"end":1858330,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":1858330,"end":1858490,"confidence":0.99902344,"speaker":"A"},{"text":"Be","start":1858490,"end":1858610,"confidence":1,"speaker":"A"},{"text":"a","start":1858610,"end":1858690,"confidence":0.9995117,"speaker":"A"},{"text":"bit","start":1858690,"end":1858850,"confidence":0.99902344,"speaker":"A"},{"text":"challenging.","start":1858850,"end":1859410,"confidence":0.9601237,"speaker":"A"},{"text":"So","start":1860530,"end":1860930,"confidence":0.9951172,"speaker":"A"},{"text":"if","start":1861730,"end":1862050,"confidence":0.6791992,"speaker":"A"},{"text":"you","start":1862050,"end":1862250,"confidence":1,"speaker":"A"},{"text":"look","start":1862250,"end":1862410,"confidence":1,"speaker":"A"},{"text":"at","start":1862410,"end":1862610,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1862610,"end":1862850,"confidence":0.9980469,"speaker":"A"},{"text":"documentation","start":1862850,"end":1863650,"confidence":0.99902344,"speaker":"A"},{"text":"in","start":1864290,"end":1864490,"confidence":0.78466797,"speaker":"A"},{"text":"Web","start":1864490,"end":1864810,"confidence":0.9890137,"speaker":"A"},{"text":"Services","start":1864810,"end":1865090,"confidence":0.99902344,"speaker":"A"},{"text":"Reference,","start":1865090,"end":1865810,"confidence":0.9918213,"speaker":"A"},{"text":"there","start":1866850,"end":1867210,"confidence":0.9921875,"speaker":"A"},{"text":"is","start":1867210,"end":1867570,"confidence":0.99902344,"speaker":"A"},{"text":"a,","start":1867890,"end":1868290,"confidence":0.99853516,"speaker":"A"},{"text":"there's","start":1869090,"end":1869610,"confidence":0.9824219,"speaker":"A"},{"text":"a","start":1869610,"end":1869890,"confidence":0.99902344,"speaker":"A"},{"text":"page","start":1869890,"end":1870290,"confidence":0.9951172,"speaker":"A"},{"text":"called","start":1870290,"end":1870530,"confidence":0.9995117,"speaker":"A"},{"text":"types","start":1870530,"end":1870810,"confidence":0.87719727,"speaker":"A"},{"text":"and","start":1870810,"end":1870970,"confidence":0.9536133,"speaker":"A"},{"text":"dictionaries","start":1870970,"end":1871650,"confidence":0.99609375,"speaker":"A"},{"text":"and","start":1871650,"end":1872010,"confidence":0.99902344,"speaker":"A"},{"text":"there","start":1872010,"end":1872290,"confidence":0.9980469,"speaker":"A"},{"text":"is","start":1872290,"end":1872610,"confidence":0.99609375,"speaker":"A"},{"text":"types.","start":1872610,"end":1873170,"confidence":0.9255371,"speaker":"A"},{"text":"There's","start":1874050,"end":1874410,"confidence":0.98860675,"speaker":"A"},{"text":"different","start":1874410,"end":1874610,"confidence":1,"speaker":"A"},{"text":"type","start":1874610,"end":1875010,"confidence":0.83618164,"speaker":"A"},{"text":"values","start":1875010,"end":1875530,"confidence":0.9992676,"speaker":"A"},{"text":"for","start":1875530,"end":1875690,"confidence":1,"speaker":"A"},{"text":"each","start":1875690,"end":1875930,"confidence":1,"speaker":"A"},{"text":"field.","start":1875930,"end":1876250,"confidence":1,"speaker":"A"},{"text":"If","start":1876250,"end":1876450,"confidence":1,"speaker":"A"},{"text":"you're","start":1876450,"end":1876610,"confidence":1,"speaker":"A"},{"text":"familiar","start":1876610,"end":1876890,"confidence":1,"speaker":"A"},{"text":"with","start":1876890,"end":1877050,"confidence":0.9995117,"speaker":"A"},{"text":"CloudKit,","start":1877050,"end":1877530,"confidence":0.953125,"speaker":"A"},{"text":"you've","start":1877530,"end":1877730,"confidence":0.99886066,"speaker":"A"},{"text":"seen","start":1877730,"end":1877890,"confidence":0.9995117,"speaker":"A"},{"text":"this,","start":1877890,"end":1878130,"confidence":0.9980469,"speaker":"A"},{"text":"right?","start":1878130,"end":1878450,"confidence":0.99853516,"speaker":"A"}]},{"text":"So you have an asset which is basically a, a binary file. You have bytes which is essentially a 60 byte base 64 encoded string, date type which is returned as a number. Double is returned as a number because These are the JavaScript types. Int is returned as a number and then there's location reference and then string and list. And how would you like, how do you do adjacent object like this?","start":1879170,"end":1916620,"confidence":0.9995117,"words":[{"text":"So","start":1879170,"end":1879570,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1879570,"end":1879850,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":1879850,"end":1880089,"confidence":1,"speaker":"A"},{"text":"an","start":1880089,"end":1880329,"confidence":0.99853516,"speaker":"A"},{"text":"asset","start":1880329,"end":1880650,"confidence":0.9995117,"speaker":"A"},{"text":"which","start":1880650,"end":1880850,"confidence":1,"speaker":"A"},{"text":"is","start":1880850,"end":1881050,"confidence":0.9995117,"speaker":"A"},{"text":"basically","start":1881050,"end":1881490,"confidence":1,"speaker":"A"},{"text":"a,","start":1882210,"end":1882610,"confidence":0.9838867,"speaker":"A"},{"text":"a","start":1884290,"end":1884690,"confidence":0.9995117,"speaker":"A"},{"text":"binary","start":1884690,"end":1885330,"confidence":0.9998372,"speaker":"A"},{"text":"file.","start":1885330,"end":1885810,"confidence":0.69873047,"speaker":"A"},{"text":"You","start":1886850,"end":1887170,"confidence":1,"speaker":"A"},{"text":"have","start":1887170,"end":1887490,"confidence":1,"speaker":"A"},{"text":"bytes","start":1887490,"end":1888210,"confidence":0.8411458,"speaker":"A"},{"text":"which","start":1889090,"end":1889410,"confidence":1,"speaker":"A"},{"text":"is","start":1889410,"end":1889650,"confidence":0.9995117,"speaker":"A"},{"text":"essentially","start":1889650,"end":1890130,"confidence":0.99902344,"speaker":"A"},{"text":"a","start":1890130,"end":1890450,"confidence":0.95996094,"speaker":"A"},{"text":"60","start":1890530,"end":1890930,"confidence":0.9458,"speaker":"A"},{"text":"byte","start":1891170,"end":1891650,"confidence":0.9658203,"speaker":"A"},{"text":"base","start":1891860,"end":1892100,"confidence":0.8461914,"speaker":"A"},{"text":"64","start":1892100,"end":1892580,"confidence":0.99829,"speaker":"A"},{"text":"encoded","start":1892580,"end":1893140,"confidence":0.9967448,"speaker":"A"},{"text":"string,","start":1893140,"end":1893620,"confidence":0.9970703,"speaker":"A"},{"text":"date","start":1894740,"end":1895140,"confidence":0.98095703,"speaker":"A"},{"text":"type","start":1895140,"end":1895580,"confidence":0.9716797,"speaker":"A"},{"text":"which","start":1895580,"end":1895820,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1895820,"end":1896060,"confidence":0.99658203,"speaker":"A"},{"text":"returned","start":1896060,"end":1896580,"confidence":0.98876953,"speaker":"A"},{"text":"as","start":1896580,"end":1896700,"confidence":0.99902344,"speaker":"A"},{"text":"a","start":1896700,"end":1896860,"confidence":0.9995117,"speaker":"A"},{"text":"number.","start":1896860,"end":1897140,"confidence":0.99560547,"speaker":"A"},{"text":"Double","start":1897780,"end":1898220,"confidence":0.9511719,"speaker":"A"},{"text":"is","start":1898220,"end":1898460,"confidence":0.98779297,"speaker":"A"},{"text":"returned","start":1898460,"end":1898860,"confidence":0.954834,"speaker":"A"},{"text":"as","start":1898860,"end":1899020,"confidence":0.9951172,"speaker":"A"},{"text":"a","start":1899020,"end":1899140,"confidence":0.99853516,"speaker":"A"},{"text":"number","start":1899140,"end":1899380,"confidence":0.99658203,"speaker":"A"},{"text":"because","start":1899940,"end":1900220,"confidence":0.7080078,"speaker":"A"},{"text":"These","start":1900220,"end":1900380,"confidence":0.99658203,"speaker":"A"},{"text":"are","start":1900380,"end":1900500,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1900500,"end":1900620,"confidence":0.9995117,"speaker":"A"},{"text":"JavaScript","start":1900620,"end":1901220,"confidence":0.9517415,"speaker":"A"},{"text":"types.","start":1901220,"end":1901620,"confidence":0.76464844,"speaker":"A"},{"text":"Int","start":1902260,"end":1902660,"confidence":0.57714844,"speaker":"A"},{"text":"is","start":1902820,"end":1903220,"confidence":0.99609375,"speaker":"A"},{"text":"returned","start":1903540,"end":1904060,"confidence":0.9616699,"speaker":"A"},{"text":"as","start":1904060,"end":1904220,"confidence":0.99902344,"speaker":"A"},{"text":"a","start":1904220,"end":1904340,"confidence":0.99902344,"speaker":"A"},{"text":"number","start":1904340,"end":1904580,"confidence":0.99609375,"speaker":"A"},{"text":"and","start":1905700,"end":1905980,"confidence":0.9946289,"speaker":"A"},{"text":"then","start":1905980,"end":1906140,"confidence":0.99902344,"speaker":"A"},{"text":"there's","start":1906140,"end":1906420,"confidence":0.85302734,"speaker":"A"},{"text":"location","start":1906420,"end":1906980,"confidence":0.99902344,"speaker":"A"},{"text":"reference","start":1907540,"end":1908260,"confidence":0.8996582,"speaker":"A"},{"text":"and","start":1909300,"end":1909620,"confidence":0.9892578,"speaker":"A"},{"text":"then","start":1909620,"end":1909940,"confidence":0.9980469,"speaker":"A"},{"text":"string","start":1910020,"end":1910500,"confidence":0.9926758,"speaker":"A"},{"text":"and","start":1910500,"end":1910740,"confidence":0.98828125,"speaker":"A"},{"text":"list.","start":1910740,"end":1911060,"confidence":0.99658203,"speaker":"A"},{"text":"And","start":1911620,"end":1912020,"confidence":0.9951172,"speaker":"A"},{"text":"how","start":1912100,"end":1912420,"confidence":0.9980469,"speaker":"A"},{"text":"would","start":1912420,"end":1912620,"confidence":0.94873047,"speaker":"A"},{"text":"you","start":1912620,"end":1912900,"confidence":0.99902344,"speaker":"A"},{"text":"like,","start":1913060,"end":1913420,"confidence":0.9946289,"speaker":"A"},{"text":"how","start":1913420,"end":1913660,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":1913660,"end":1913820,"confidence":0.99658203,"speaker":"A"},{"text":"you","start":1913820,"end":1914020,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":1914020,"end":1914340,"confidence":0.99902344,"speaker":"A"},{"text":"adjacent","start":1914820,"end":1915620,"confidence":0.7462891,"speaker":"A"},{"text":"object","start":1915780,"end":1916220,"confidence":0.82470703,"speaker":"A"},{"text":"like","start":1916220,"end":1916460,"confidence":0.99902344,"speaker":"A"},{"text":"this?","start":1916460,"end":1916620,"confidence":0.99902344,"speaker":"A"}]},{"text":"How would you even represent this in Swift? Because you don't know what type you're going to get. So like I said, this is a work in progress. Sorry. So what I do, I don't know how much you can see this.","start":1916620,"end":1928710,"confidence":0.9975586,"words":[{"text":"How","start":1916620,"end":1916780,"confidence":0.9975586,"speaker":"A"},{"text":"would","start":1916780,"end":1916940,"confidence":0.99560547,"speaker":"A"},{"text":"you","start":1916940,"end":1917100,"confidence":0.9980469,"speaker":"A"},{"text":"even","start":1917100,"end":1917300,"confidence":0.9995117,"speaker":"A"},{"text":"represent","start":1917300,"end":1917620,"confidence":0.99853516,"speaker":"A"},{"text":"this","start":1917620,"end":1917900,"confidence":0.8857422,"speaker":"A"},{"text":"in","start":1917900,"end":1918060,"confidence":0.9404297,"speaker":"A"},{"text":"Swift?","start":1918060,"end":1918380,"confidence":0.9929199,"speaker":"A"},{"text":"Because","start":1918380,"end":1918580,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":1918580,"end":1918740,"confidence":0.9995117,"speaker":"A"},{"text":"don't","start":1918740,"end":1918900,"confidence":0.99934894,"speaker":"A"},{"text":"know","start":1918900,"end":1918980,"confidence":0.99902344,"speaker":"A"},{"text":"what","start":1918980,"end":1919100,"confidence":0.9970703,"speaker":"A"},{"text":"type","start":1919100,"end":1919300,"confidence":0.9980469,"speaker":"A"},{"text":"you're","start":1919300,"end":1919460,"confidence":0.99820966,"speaker":"A"},{"text":"going","start":1919460,"end":1919540,"confidence":0.72802734,"speaker":"A"},{"text":"to","start":1919540,"end":1919620,"confidence":0.99902344,"speaker":"A"},{"text":"get.","start":1919620,"end":1919860,"confidence":0.9980469,"speaker":"A"},{"text":"So","start":1921350,"end":1921590,"confidence":0.9604492,"speaker":"A"},{"text":"like","start":1922790,"end":1923070,"confidence":0.99609375,"speaker":"A"},{"text":"I","start":1923070,"end":1923230,"confidence":0.9995117,"speaker":"A"},{"text":"said,","start":1923230,"end":1923390,"confidence":0.9995117,"speaker":"A"},{"text":"this","start":1923390,"end":1923550,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1923550,"end":1923710,"confidence":0.9975586,"speaker":"A"},{"text":"a","start":1923710,"end":1923830,"confidence":0.9980469,"speaker":"A"},{"text":"work","start":1923830,"end":1923950,"confidence":0.99853516,"speaker":"A"},{"text":"in","start":1923950,"end":1924110,"confidence":0.99902344,"speaker":"A"},{"text":"progress.","start":1924110,"end":1924510,"confidence":0.99975586,"speaker":"A"},{"text":"Sorry.","start":1924510,"end":1924950,"confidence":0.9889323,"speaker":"A"},{"text":"So","start":1925830,"end":1926150,"confidence":0.94628906,"speaker":"A"},{"text":"what","start":1926150,"end":1926350,"confidence":0.99609375,"speaker":"A"},{"text":"I","start":1926350,"end":1926550,"confidence":0.99853516,"speaker":"A"},{"text":"do,","start":1926550,"end":1926870,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":1927190,"end":1927430,"confidence":0.99853516,"speaker":"A"},{"text":"don't","start":1927430,"end":1927590,"confidence":0.9785156,"speaker":"A"},{"text":"know","start":1927590,"end":1927670,"confidence":0.9975586,"speaker":"A"},{"text":"how","start":1927670,"end":1927790,"confidence":0.99902344,"speaker":"A"},{"text":"much","start":1927790,"end":1927950,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":1927950,"end":1928110,"confidence":0.99853516,"speaker":"A"},{"text":"can","start":1928110,"end":1928270,"confidence":0.7426758,"speaker":"A"},{"text":"see","start":1928270,"end":1928430,"confidence":0.9995117,"speaker":"A"},{"text":"this.","start":1928430,"end":1928710,"confidence":0.9951172,"speaker":"A"}]},{"text":"I'm going to actually move over to my documentation here at this point. So how are we doing on time? We good?","start":1929110,"end":1940070,"confidence":0.99886066,"words":[{"text":"I'm","start":1929110,"end":1929430,"confidence":0.99886066,"speaker":"A"},{"text":"going","start":1929430,"end":1929550,"confidence":0.71240234,"speaker":"A"},{"text":"to","start":1929550,"end":1929710,"confidence":0.99902344,"speaker":"A"},{"text":"actually","start":1929710,"end":1929910,"confidence":0.9975586,"speaker":"A"},{"text":"move","start":1929910,"end":1930150,"confidence":0.9995117,"speaker":"A"},{"text":"over","start":1930150,"end":1930430,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":1930430,"end":1930790,"confidence":0.99853516,"speaker":"A"},{"text":"my","start":1932470,"end":1932870,"confidence":0.99902344,"speaker":"A"},{"text":"documentation","start":1932950,"end":1933910,"confidence":0.99990237,"speaker":"A"},{"text":"here","start":1933910,"end":1934310,"confidence":0.99609375,"speaker":"A"},{"text":"at","start":1935270,"end":1935550,"confidence":0.9951172,"speaker":"A"},{"text":"this","start":1935550,"end":1935710,"confidence":1,"speaker":"A"},{"text":"point.","start":1935710,"end":1935990,"confidence":0.9995117,"speaker":"A"},{"text":"So","start":1936150,"end":1936550,"confidence":0.9145508,"speaker":"A"},{"text":"how","start":1938310,"end":1938590,"confidence":0.99853516,"speaker":"A"},{"text":"are","start":1938590,"end":1938710,"confidence":0.9394531,"speaker":"A"},{"text":"we","start":1938710,"end":1938830,"confidence":0.42895508,"speaker":"A"},{"text":"doing","start":1938830,"end":1938990,"confidence":0.9980469,"speaker":"A"},{"text":"on","start":1938990,"end":1939190,"confidence":0.99853516,"speaker":"A"},{"text":"time?","start":1939190,"end":1939510,"confidence":0.9995117,"speaker":"A"},{"text":"We","start":1939510,"end":1939790,"confidence":0.7001953,"speaker":"A"},{"text":"good?","start":1939790,"end":1940070,"confidence":0.98876953,"speaker":"A"}]},{"text":"Yeah, I think, I think we're doing good. Okay, cool. Any, do you want to ask questions? I don't have anything right now. Same nothing right now.","start":1942550,"end":1955040,"confidence":0.9842122,"words":[{"text":"Yeah,","start":1942550,"end":1942870,"confidence":0.9842122,"speaker":"B"},{"text":"I","start":1942870,"end":1942990,"confidence":0.59228516,"speaker":"B"},{"text":"think,","start":1942990,"end":1943190,"confidence":0.9770508,"speaker":"B"},{"text":"I","start":1943190,"end":1943350,"confidence":0.96240234,"speaker":"B"},{"text":"think","start":1943350,"end":1943470,"confidence":0.9975586,"speaker":"B"},{"text":"we're","start":1943470,"end":1943670,"confidence":0.99902344,"speaker":"B"},{"text":"doing","start":1943670,"end":1943790,"confidence":0.9980469,"speaker":"B"},{"text":"good.","start":1943790,"end":1944070,"confidence":0.9951172,"speaker":"B"},{"text":"Okay,","start":1944870,"end":1945310,"confidence":0.94189453,"speaker":"A"},{"text":"cool.","start":1945310,"end":1945590,"confidence":0.99780273,"speaker":"A"},{"text":"Any,","start":1945590,"end":1945910,"confidence":0.90234375,"speaker":"A"},{"text":"do","start":1946560,"end":1946640,"confidence":0.70996094,"speaker":"A"},{"text":"you","start":1946640,"end":1946760,"confidence":0.9946289,"speaker":"A"},{"text":"want","start":1946760,"end":1946880,"confidence":0.9321289,"speaker":"A"},{"text":"to","start":1946880,"end":1946960,"confidence":0.9980469,"speaker":"A"},{"text":"ask","start":1946960,"end":1947120,"confidence":0.9995117,"speaker":"A"},{"text":"questions?","start":1947120,"end":1947680,"confidence":0.99975586,"speaker":"A"},{"text":"I","start":1949680,"end":1949960,"confidence":0.9975586,"speaker":"B"},{"text":"don't","start":1949960,"end":1950240,"confidence":0.9991862,"speaker":"B"},{"text":"have","start":1950240,"end":1950480,"confidence":0.9995117,"speaker":"B"},{"text":"anything","start":1950480,"end":1950960,"confidence":0.99975586,"speaker":"B"},{"text":"right","start":1951440,"end":1951800,"confidence":0.99902344,"speaker":"B"},{"text":"now.","start":1951800,"end":1952160,"confidence":0.99853516,"speaker":"B"},{"text":"Same","start":1953760,"end":1954160,"confidence":0.98291016,"speaker":"C"},{"text":"nothing","start":1954240,"end":1954600,"confidence":0.99975586,"speaker":"C"},{"text":"right","start":1954600,"end":1954800,"confidence":0.9995117,"speaker":"C"},{"text":"now.","start":1954800,"end":1955040,"confidence":0.9995117,"speaker":"C"}]},{"text":"But this seems applicable to things I'll be doing coming up. Okay, cool.","start":1955040,"end":1960480,"confidence":0.9980469,"words":[{"text":"But","start":1955040,"end":1955240,"confidence":0.9980469,"speaker":"C"},{"text":"this","start":1955240,"end":1955440,"confidence":0.99853516,"speaker":"C"},{"text":"seems","start":1955440,"end":1955880,"confidence":0.99975586,"speaker":"C"},{"text":"applicable","start":1955880,"end":1956560,"confidence":0.99975586,"speaker":"C"},{"text":"to","start":1956560,"end":1956960,"confidence":0.9995117,"speaker":"C"},{"text":"things","start":1957280,"end":1957600,"confidence":1,"speaker":"C"},{"text":"I'll","start":1957600,"end":1957880,"confidence":0.98779297,"speaker":"C"},{"text":"be","start":1957880,"end":1958000,"confidence":0.9995117,"speaker":"C"},{"text":"doing","start":1958000,"end":1958200,"confidence":0.9995117,"speaker":"C"},{"text":"coming","start":1958200,"end":1958480,"confidence":0.99853516,"speaker":"C"},{"text":"up.","start":1958480,"end":1958800,"confidence":0.99609375,"speaker":"C"},{"text":"Okay,","start":1959360,"end":1960000,"confidence":0.88964844,"speaker":"A"},{"text":"cool.","start":1960000,"end":1960480,"confidence":0.99902344,"speaker":"A"}]},{"text":"So we have set up in the open. So we have an open API YAML file that you can pull up in Miskit, which is basically every like the documentation converted to YAML. And so what we do is you can set up in the YAML the field value requests and they have an enum type essentially for, for open API. So and then, so this has, you know, it could be one of either any of these types of. And then there's an enum in case you have a list.","start":1963200,"end":2003170,"confidence":0.8515625,"words":[{"text":"So","start":1963200,"end":1963600,"confidence":0.8515625,"speaker":"A"},{"text":"we","start":1964480,"end":1964760,"confidence":0.9838867,"speaker":"A"},{"text":"have","start":1964760,"end":1964960,"confidence":0.59765625,"speaker":"A"},{"text":"set","start":1964960,"end":1965200,"confidence":0.99902344,"speaker":"A"},{"text":"up","start":1965200,"end":1965520,"confidence":0.9716797,"speaker":"A"},{"text":"in","start":1965920,"end":1966280,"confidence":0.85595703,"speaker":"A"},{"text":"the","start":1966280,"end":1966640,"confidence":0.98291016,"speaker":"A"},{"text":"open.","start":1966800,"end":1967200,"confidence":0.9916992,"speaker":"A"},{"text":"So","start":1967200,"end":1967440,"confidence":0.93896484,"speaker":"A"},{"text":"we","start":1967440,"end":1967520,"confidence":0.9980469,"speaker":"A"},{"text":"have","start":1967520,"end":1967640,"confidence":0.99902344,"speaker":"A"},{"text":"an","start":1967640,"end":1967760,"confidence":0.9116211,"speaker":"A"},{"text":"open","start":1967760,"end":1967960,"confidence":0.99853516,"speaker":"A"},{"text":"API","start":1967960,"end":1968480,"confidence":0.9958496,"speaker":"A"},{"text":"YAML","start":1968480,"end":1968920,"confidence":0.9547526,"speaker":"A"},{"text":"file","start":1968920,"end":1969360,"confidence":0.99731445,"speaker":"A"},{"text":"that","start":1969760,"end":1970040,"confidence":0.9980469,"speaker":"A"},{"text":"you","start":1970040,"end":1970240,"confidence":0.99902344,"speaker":"A"},{"text":"can","start":1970240,"end":1970400,"confidence":0.99853516,"speaker":"A"},{"text":"pull","start":1970400,"end":1970560,"confidence":0.99975586,"speaker":"A"},{"text":"up","start":1970560,"end":1970680,"confidence":0.9995117,"speaker":"A"},{"text":"in","start":1970680,"end":1970880,"confidence":0.9970703,"speaker":"A"},{"text":"Miskit,","start":1970880,"end":1971520,"confidence":0.98657227,"speaker":"A"},{"text":"which","start":1972250,"end":1972370,"confidence":0.9975586,"speaker":"A"},{"text":"is","start":1972370,"end":1972650,"confidence":0.99902344,"speaker":"A"},{"text":"basically","start":1972730,"end":1973370,"confidence":0.99975586,"speaker":"A"},{"text":"every","start":1973370,"end":1973770,"confidence":0.99365234,"speaker":"A"},{"text":"like","start":1973770,"end":1974170,"confidence":0.98828125,"speaker":"A"},{"text":"the","start":1975050,"end":1975370,"confidence":0.99902344,"speaker":"A"},{"text":"documentation","start":1975370,"end":1976170,"confidence":0.99912107,"speaker":"A"},{"text":"converted","start":1976330,"end":1977010,"confidence":0.9996745,"speaker":"A"},{"text":"to","start":1977010,"end":1977210,"confidence":0.9975586,"speaker":"A"},{"text":"YAML.","start":1977210,"end":1977850,"confidence":0.71435547,"speaker":"A"},{"text":"And","start":1978410,"end":1978770,"confidence":0.99072266,"speaker":"A"},{"text":"so","start":1978770,"end":1978970,"confidence":1,"speaker":"A"},{"text":"what","start":1978970,"end":1979090,"confidence":0.9995117,"speaker":"A"},{"text":"we","start":1979090,"end":1979290,"confidence":1,"speaker":"A"},{"text":"do","start":1979290,"end":1979570,"confidence":0.9980469,"speaker":"A"},{"text":"is","start":1979570,"end":1979930,"confidence":0.6928711,"speaker":"A"},{"text":"you","start":1980090,"end":1980410,"confidence":1,"speaker":"A"},{"text":"can","start":1980410,"end":1980690,"confidence":1,"speaker":"A"},{"text":"set","start":1980690,"end":1980930,"confidence":0.9995117,"speaker":"A"},{"text":"up","start":1980930,"end":1981210,"confidence":0.9975586,"speaker":"A"},{"text":"in","start":1982490,"end":1982770,"confidence":0.98095703,"speaker":"A"},{"text":"the","start":1982770,"end":1982930,"confidence":0.9951172,"speaker":"A"},{"text":"YAML","start":1982930,"end":1983250,"confidence":0.8038737,"speaker":"A"},{"text":"the","start":1983250,"end":1983410,"confidence":0.97753906,"speaker":"A"},{"text":"field","start":1983410,"end":1983690,"confidence":0.9980469,"speaker":"A"},{"text":"value","start":1983770,"end":1984130,"confidence":1,"speaker":"A"},{"text":"requests","start":1984130,"end":1984690,"confidence":0.8439128,"speaker":"A"},{"text":"and","start":1984690,"end":1984810,"confidence":0.9970703,"speaker":"A"},{"text":"they","start":1984810,"end":1984930,"confidence":1,"speaker":"A"},{"text":"have","start":1984930,"end":1985090,"confidence":1,"speaker":"A"},{"text":"an","start":1985090,"end":1985290,"confidence":0.9633789,"speaker":"A"},{"text":"enum","start":1985290,"end":1985770,"confidence":0.8808594,"speaker":"A"},{"text":"type","start":1985770,"end":1986090,"confidence":0.8652344,"speaker":"A"},{"text":"essentially","start":1986090,"end":1986650,"confidence":0.94311523,"speaker":"A"},{"text":"for,","start":1987930,"end":1988330,"confidence":0.96875,"speaker":"A"},{"text":"for","start":1992090,"end":1992450,"confidence":0.9995117,"speaker":"A"},{"text":"open","start":1992450,"end":1992810,"confidence":0.9995117,"speaker":"A"},{"text":"API.","start":1992970,"end":1993610,"confidence":0.9975586,"speaker":"A"},{"text":"So","start":1993690,"end":1994090,"confidence":0.98583984,"speaker":"A"},{"text":"and","start":1994970,"end":1995250,"confidence":0.9350586,"speaker":"A"},{"text":"then,","start":1995250,"end":1995490,"confidence":0.39233398,"speaker":"A"},{"text":"so","start":1995490,"end":1995770,"confidence":0.9975586,"speaker":"A"},{"text":"this","start":1995770,"end":1996010,"confidence":0.99902344,"speaker":"A"},{"text":"has,","start":1996010,"end":1996330,"confidence":0.99853516,"speaker":"A"},{"text":"you","start":1996330,"end":1996570,"confidence":0.6645508,"speaker":"A"},{"text":"know,","start":1996570,"end":1996690,"confidence":0.97998047,"speaker":"A"},{"text":"it","start":1996690,"end":1996810,"confidence":0.9975586,"speaker":"A"},{"text":"could","start":1996810,"end":1996930,"confidence":0.9838867,"speaker":"A"},{"text":"be","start":1996930,"end":1997090,"confidence":1,"speaker":"A"},{"text":"one","start":1997090,"end":1997210,"confidence":0.99853516,"speaker":"A"},{"text":"of","start":1997210,"end":1997410,"confidence":0.99902344,"speaker":"A"},{"text":"either","start":1997410,"end":1997770,"confidence":0.9968262,"speaker":"A"},{"text":"any","start":1997770,"end":1998010,"confidence":0.9995117,"speaker":"A"},{"text":"of","start":1998010,"end":1998170,"confidence":1,"speaker":"A"},{"text":"these","start":1998170,"end":1998370,"confidence":0.99902344,"speaker":"A"},{"text":"types","start":1998370,"end":1998810,"confidence":0.9453125,"speaker":"A"},{"text":"of.","start":1998860,"end":1999020,"confidence":0.5004883,"speaker":"A"},{"text":"And","start":2000050,"end":2000210,"confidence":0.97216797,"speaker":"A"},{"text":"then","start":2000210,"end":2000530,"confidence":0.9995117,"speaker":"A"},{"text":"there's","start":2000850,"end":2001210,"confidence":0.99560547,"speaker":"A"},{"text":"an","start":2001210,"end":2001370,"confidence":0.76220703,"speaker":"A"},{"text":"enum","start":2001370,"end":2001850,"confidence":0.92211914,"speaker":"A"},{"text":"in","start":2001850,"end":2002090,"confidence":0.9995117,"speaker":"A"},{"text":"case","start":2002090,"end":2002290,"confidence":1,"speaker":"A"},{"text":"you","start":2002290,"end":2002530,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":2002530,"end":2002730,"confidence":1,"speaker":"A"},{"text":"a","start":2002730,"end":2002890,"confidence":0.99902344,"speaker":"A"},{"text":"list.","start":2002890,"end":2003170,"confidence":0.9995117,"speaker":"A"}]},{"text":"So if you have a list value type there is an extra property called type and then that will tell you what type the. The list is. And it's homo homomorphic. It's all the same list type. You can't have lists of different types.","start":2004050,"end":2022210,"confidence":0.99560547,"words":[{"text":"So","start":2004050,"end":2004450,"confidence":0.99560547,"speaker":"A"},{"text":"if","start":2005250,"end":2005570,"confidence":0.9980469,"speaker":"A"},{"text":"you","start":2005570,"end":2005770,"confidence":1,"speaker":"A"},{"text":"have","start":2005770,"end":2005970,"confidence":1,"speaker":"A"},{"text":"a","start":2005970,"end":2006210,"confidence":0.99902344,"speaker":"A"},{"text":"list","start":2006210,"end":2006530,"confidence":0.9995117,"speaker":"A"},{"text":"value","start":2006850,"end":2007250,"confidence":0.9995117,"speaker":"A"},{"text":"type","start":2007330,"end":2007890,"confidence":0.99780273,"speaker":"A"},{"text":"there","start":2008530,"end":2008850,"confidence":1,"speaker":"A"},{"text":"is","start":2008850,"end":2009090,"confidence":1,"speaker":"A"},{"text":"an","start":2009090,"end":2009290,"confidence":0.9995117,"speaker":"A"},{"text":"extra","start":2009290,"end":2009690,"confidence":0.99975586,"speaker":"A"},{"text":"property","start":2009690,"end":2010290,"confidence":0.9995117,"speaker":"A"},{"text":"called","start":2010290,"end":2010690,"confidence":0.9995117,"speaker":"A"},{"text":"type","start":2011010,"end":2011450,"confidence":0.81103516,"speaker":"A"},{"text":"and","start":2011450,"end":2011690,"confidence":0.9951172,"speaker":"A"},{"text":"then","start":2011690,"end":2011850,"confidence":0.99365234,"speaker":"A"},{"text":"that","start":2011850,"end":2012010,"confidence":0.9995117,"speaker":"A"},{"text":"will","start":2012010,"end":2012210,"confidence":0.9995117,"speaker":"A"},{"text":"tell","start":2012210,"end":2012410,"confidence":1,"speaker":"A"},{"text":"you","start":2012410,"end":2012570,"confidence":1,"speaker":"A"},{"text":"what","start":2012570,"end":2012810,"confidence":0.59277344,"speaker":"A"},{"text":"type","start":2012810,"end":2013250,"confidence":0.8652344,"speaker":"A"},{"text":"the.","start":2013410,"end":2013810,"confidence":0.98876953,"speaker":"A"},{"text":"The","start":2014450,"end":2014730,"confidence":0.99853516,"speaker":"A"},{"text":"list","start":2014730,"end":2015010,"confidence":0.9995117,"speaker":"A"},{"text":"is.","start":2015010,"end":2015329,"confidence":0.9995117,"speaker":"A"},{"text":"And","start":2015329,"end":2015570,"confidence":0.99365234,"speaker":"A"},{"text":"it's","start":2015570,"end":2016050,"confidence":0.99397784,"speaker":"A"},{"text":"homo","start":2016530,"end":2017250,"confidence":0.8297526,"speaker":"A"},{"text":"homomorphic.","start":2017250,"end":2018450,"confidence":0.99763995,"speaker":"A"},{"text":"It's","start":2018690,"end":2019050,"confidence":0.9720052,"speaker":"A"},{"text":"all","start":2019050,"end":2019210,"confidence":0.99560547,"speaker":"A"},{"text":"the","start":2019210,"end":2019330,"confidence":0.9995117,"speaker":"A"},{"text":"same","start":2019330,"end":2019570,"confidence":0.99902344,"speaker":"A"},{"text":"list","start":2019890,"end":2020210,"confidence":0.97314453,"speaker":"A"},{"text":"type.","start":2020210,"end":2020490,"confidence":0.9848633,"speaker":"A"},{"text":"You","start":2020490,"end":2020610,"confidence":0.9995117,"speaker":"A"},{"text":"can't","start":2020610,"end":2020810,"confidence":0.98567706,"speaker":"A"},{"text":"have","start":2020810,"end":2021010,"confidence":1,"speaker":"A"},{"text":"lists","start":2021010,"end":2021330,"confidence":0.9987793,"speaker":"A"},{"text":"of","start":2021330,"end":2021450,"confidence":0.9995117,"speaker":"A"},{"text":"different","start":2021450,"end":2021690,"confidence":1,"speaker":"A"},{"text":"types.","start":2021690,"end":2022210,"confidence":0.92578125,"speaker":"A"}]},{"text":"And then we have here again field value. Sometimes the type is available, sometimes it's not. But basically we have all the different value types available to us in a CK value. And then this is. Then the Open API generator essentially builds this for me which is.","start":2024050,"end":2049150,"confidence":0.95751953,"words":[{"text":"And","start":2024050,"end":2024450,"confidence":0.95751953,"speaker":"A"},{"text":"then","start":2024610,"end":2025010,"confidence":0.9038086,"speaker":"A"},{"text":"we","start":2026030,"end":2026190,"confidence":0.9941406,"speaker":"A"},{"text":"have","start":2026190,"end":2026470,"confidence":0.9995117,"speaker":"A"},{"text":"here","start":2026470,"end":2026830,"confidence":0.99902344,"speaker":"A"},{"text":"again","start":2028830,"end":2029230,"confidence":0.99853516,"speaker":"A"},{"text":"field","start":2029230,"end":2029590,"confidence":0.9404297,"speaker":"A"},{"text":"value.","start":2029590,"end":2029950,"confidence":0.99902344,"speaker":"A"},{"text":"Sometimes","start":2031390,"end":2031910,"confidence":0.99886066,"speaker":"A"},{"text":"the","start":2031910,"end":2032070,"confidence":0.98876953,"speaker":"A"},{"text":"type","start":2032070,"end":2032310,"confidence":0.9086914,"speaker":"A"},{"text":"is","start":2032310,"end":2032470,"confidence":0.99853516,"speaker":"A"},{"text":"available,","start":2032470,"end":2032750,"confidence":0.9995117,"speaker":"A"},{"text":"sometimes","start":2032910,"end":2033430,"confidence":0.9996745,"speaker":"A"},{"text":"it's","start":2033430,"end":2033750,"confidence":0.99886066,"speaker":"A"},{"text":"not.","start":2033750,"end":2034030,"confidence":0.9995117,"speaker":"A"},{"text":"But","start":2034590,"end":2034910,"confidence":0.99658203,"speaker":"A"},{"text":"basically","start":2034910,"end":2035390,"confidence":0.99975586,"speaker":"A"},{"text":"we","start":2035390,"end":2035670,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":2035670,"end":2035910,"confidence":0.9995117,"speaker":"A"},{"text":"all","start":2035910,"end":2036150,"confidence":1,"speaker":"A"},{"text":"the","start":2036150,"end":2036310,"confidence":0.9995117,"speaker":"A"},{"text":"different","start":2036310,"end":2036590,"confidence":0.9995117,"speaker":"A"},{"text":"value","start":2036750,"end":2037150,"confidence":0.99902344,"speaker":"A"},{"text":"types","start":2037230,"end":2037710,"confidence":0.99975586,"speaker":"A"},{"text":"available","start":2037710,"end":2038030,"confidence":0.99902344,"speaker":"A"},{"text":"to","start":2038190,"end":2038470,"confidence":1,"speaker":"A"},{"text":"us","start":2038470,"end":2038750,"confidence":1,"speaker":"A"},{"text":"in","start":2038830,"end":2039110,"confidence":0.97802734,"speaker":"A"},{"text":"a","start":2039110,"end":2039270,"confidence":0.96728516,"speaker":"A"},{"text":"CK","start":2039270,"end":2039630,"confidence":0.9001465,"speaker":"A"},{"text":"value.","start":2039630,"end":2039950,"confidence":0.9091797,"speaker":"A"},{"text":"And","start":2041950,"end":2042230,"confidence":0.9848633,"speaker":"A"},{"text":"then","start":2042230,"end":2042510,"confidence":0.99902344,"speaker":"A"},{"text":"this","start":2042990,"end":2043310,"confidence":0.99853516,"speaker":"A"},{"text":"is.","start":2043310,"end":2043550,"confidence":0.99902344,"speaker":"A"},{"text":"Then","start":2043550,"end":2043870,"confidence":0.9848633,"speaker":"A"},{"text":"the","start":2044110,"end":2044430,"confidence":0.98828125,"speaker":"A"},{"text":"Open","start":2044430,"end":2044750,"confidence":0.9946289,"speaker":"A"},{"text":"API","start":2045150,"end":2045670,"confidence":0.99780273,"speaker":"A"},{"text":"generator","start":2045670,"end":2046190,"confidence":0.97143555,"speaker":"A"},{"text":"essentially","start":2046190,"end":2046870,"confidence":0.99902344,"speaker":"A"},{"text":"builds","start":2046870,"end":2047310,"confidence":0.9782715,"speaker":"A"},{"text":"this","start":2047310,"end":2047470,"confidence":0.9926758,"speaker":"A"},{"text":"for","start":2047470,"end":2047670,"confidence":0.9838867,"speaker":"A"},{"text":"me","start":2047670,"end":2047950,"confidence":0.99853516,"speaker":"A"},{"text":"which","start":2048510,"end":2048830,"confidence":0.9980469,"speaker":"A"},{"text":"is.","start":2048830,"end":2049150,"confidence":0.9873047,"speaker":"A"}]},{"text":"Has an enum and a struck for field field value request and then it does all the decoding for me. Thankfully I didn't have to do any of it.","start":2049710,"end":2059169,"confidence":0.9980469,"words":[{"text":"Has","start":2049710,"end":2049990,"confidence":0.9980469,"speaker":"A"},{"text":"an","start":2049990,"end":2050150,"confidence":0.47924805,"speaker":"A"},{"text":"enum","start":2050150,"end":2050670,"confidence":0.7680664,"speaker":"A"},{"text":"and","start":2050830,"end":2051110,"confidence":0.9902344,"speaker":"A"},{"text":"a","start":2051110,"end":2051270,"confidence":0.9863281,"speaker":"A"},{"text":"struck","start":2051270,"end":2051510,"confidence":0.7644043,"speaker":"A"},{"text":"for","start":2051510,"end":2051670,"confidence":0.5751953,"speaker":"A"},{"text":"field","start":2051670,"end":2051950,"confidence":0.7363281,"speaker":"A"},{"text":"field","start":2052110,"end":2052510,"confidence":1,"speaker":"A"},{"text":"value","start":2052670,"end":2053070,"confidence":0.99902344,"speaker":"A"},{"text":"request","start":2053070,"end":2053630,"confidence":0.7783203,"speaker":"A"},{"text":"and","start":2055329,"end":2055449,"confidence":0.9321289,"speaker":"A"},{"text":"then","start":2055449,"end":2055609,"confidence":0.9946289,"speaker":"A"},{"text":"it","start":2055609,"end":2055769,"confidence":1,"speaker":"A"},{"text":"does","start":2055769,"end":2055929,"confidence":0.9995117,"speaker":"A"},{"text":"all","start":2055929,"end":2056089,"confidence":0.9941406,"speaker":"A"},{"text":"the","start":2056089,"end":2056249,"confidence":0.9946289,"speaker":"A"},{"text":"decoding","start":2056249,"end":2056769,"confidence":0.99886066,"speaker":"A"},{"text":"for","start":2056769,"end":2056969,"confidence":0.99902344,"speaker":"A"},{"text":"me.","start":2056969,"end":2057249,"confidence":1,"speaker":"A"},{"text":"Thankfully","start":2057249,"end":2057849,"confidence":0.99523926,"speaker":"A"},{"text":"I","start":2057849,"end":2058089,"confidence":0.99560547,"speaker":"A"},{"text":"didn't","start":2058089,"end":2058289,"confidence":0.95670575,"speaker":"A"},{"text":"have","start":2058289,"end":2058369,"confidence":0.99902344,"speaker":"A"},{"text":"to","start":2058369,"end":2058449,"confidence":0.9980469,"speaker":"A"},{"text":"do","start":2058449,"end":2058569,"confidence":0.91845703,"speaker":"A"},{"text":"any","start":2058569,"end":2058769,"confidence":1,"speaker":"A"},{"text":"of","start":2058769,"end":2058929,"confidence":0.9995117,"speaker":"A"},{"text":"it.","start":2058929,"end":2059169,"confidence":0.9975586,"speaker":"A"}]},{"text":"And then yeah, I just wanted to cover that piece where we show how we deal with these kind of like polymorphic types and how those work. The next thing I want to cover is error handling. So if you look at the documentation gives you. If you get an error we get something like this and then that will show you in the. In the table actually shows you what each error means.","start":2063089,"end":2093630,"confidence":0.97021484,"words":[{"text":"And","start":2063089,"end":2063369,"confidence":0.97021484,"speaker":"A"},{"text":"then","start":2063369,"end":2063649,"confidence":0.99658203,"speaker":"A"},{"text":"yeah,","start":2065409,"end":2065809,"confidence":0.94091797,"speaker":"A"},{"text":"I","start":2065809,"end":2066009,"confidence":0.99902344,"speaker":"A"},{"text":"just","start":2066009,"end":2066169,"confidence":0.99902344,"speaker":"A"},{"text":"wanted","start":2066169,"end":2066409,"confidence":0.99780273,"speaker":"A"},{"text":"to","start":2066409,"end":2066569,"confidence":0.99902344,"speaker":"A"},{"text":"cover","start":2066569,"end":2066769,"confidence":1,"speaker":"A"},{"text":"that","start":2066769,"end":2067009,"confidence":0.9995117,"speaker":"A"},{"text":"piece","start":2067009,"end":2067409,"confidence":0.9667969,"speaker":"A"},{"text":"where","start":2067569,"end":2067929,"confidence":0.9995117,"speaker":"A"},{"text":"we","start":2067929,"end":2068249,"confidence":0.9995117,"speaker":"A"},{"text":"show","start":2068249,"end":2068609,"confidence":0.99902344,"speaker":"A"},{"text":"how","start":2068929,"end":2069249,"confidence":0.9995117,"speaker":"A"},{"text":"we","start":2069249,"end":2069449,"confidence":1,"speaker":"A"},{"text":"deal","start":2069449,"end":2069609,"confidence":1,"speaker":"A"},{"text":"with","start":2069609,"end":2069888,"confidence":0.9995117,"speaker":"A"},{"text":"these","start":2069888,"end":2070209,"confidence":0.99072266,"speaker":"A"},{"text":"kind","start":2070209,"end":2070369,"confidence":0.98876953,"speaker":"A"},{"text":"of","start":2070369,"end":2070529,"confidence":0.5283203,"speaker":"A"},{"text":"like","start":2070529,"end":2070729,"confidence":0.984375,"speaker":"A"},{"text":"polymorphic","start":2070729,"end":2071969,"confidence":0.9777832,"speaker":"A"},{"text":"types","start":2071969,"end":2072529,"confidence":0.76416016,"speaker":"A"},{"text":"and","start":2073249,"end":2073529,"confidence":0.99658203,"speaker":"A"},{"text":"how","start":2073529,"end":2073729,"confidence":0.9995117,"speaker":"A"},{"text":"those","start":2073729,"end":2073969,"confidence":0.99902344,"speaker":"A"},{"text":"work.","start":2073969,"end":2074289,"confidence":0.99853516,"speaker":"A"},{"text":"The","start":2075329,"end":2075569,"confidence":0.9746094,"speaker":"A"},{"text":"next","start":2075569,"end":2075729,"confidence":0.9902344,"speaker":"A"},{"text":"thing","start":2075729,"end":2075889,"confidence":0.9692383,"speaker":"A"},{"text":"I","start":2075889,"end":2075969,"confidence":0.89208984,"speaker":"A"},{"text":"want","start":2075969,"end":2076089,"confidence":0.79052734,"speaker":"A"},{"text":"to","start":2076089,"end":2076209,"confidence":0.99902344,"speaker":"A"},{"text":"cover","start":2076209,"end":2076409,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":2076409,"end":2076689,"confidence":0.99853516,"speaker":"A"},{"text":"error","start":2076689,"end":2077009,"confidence":0.914917,"speaker":"A"},{"text":"handling.","start":2077009,"end":2077489,"confidence":0.99902344,"speaker":"A"},{"text":"So","start":2079249,"end":2079529,"confidence":0.99121094,"speaker":"A"},{"text":"if","start":2079529,"end":2079729,"confidence":0.6791992,"speaker":"A"},{"text":"you","start":2079729,"end":2079929,"confidence":1,"speaker":"A"},{"text":"look","start":2079929,"end":2080049,"confidence":1,"speaker":"A"},{"text":"at","start":2080049,"end":2080169,"confidence":1,"speaker":"A"},{"text":"the","start":2080169,"end":2080289,"confidence":1,"speaker":"A"},{"text":"documentation","start":2080289,"end":2081009,"confidence":0.9964844,"speaker":"A"},{"text":"gives","start":2081569,"end":2081969,"confidence":0.9904785,"speaker":"A"},{"text":"you.","start":2081969,"end":2082209,"confidence":0.99658203,"speaker":"A"},{"text":"If","start":2083390,"end":2083510,"confidence":0.98876953,"speaker":"A"},{"text":"you","start":2083510,"end":2083630,"confidence":0.9975586,"speaker":"A"},{"text":"get","start":2083630,"end":2083750,"confidence":0.97509766,"speaker":"A"},{"text":"an","start":2083750,"end":2083910,"confidence":0.9604492,"speaker":"A"},{"text":"error","start":2083910,"end":2084270,"confidence":0.8522949,"speaker":"A"},{"text":"we","start":2085150,"end":2085430,"confidence":0.99121094,"speaker":"A"},{"text":"get","start":2085430,"end":2085630,"confidence":0.71777344,"speaker":"A"},{"text":"something","start":2085630,"end":2085870,"confidence":0.9995117,"speaker":"A"},{"text":"like","start":2085870,"end":2086070,"confidence":0.9995117,"speaker":"A"},{"text":"this","start":2086070,"end":2086350,"confidence":0.99902344,"speaker":"A"},{"text":"and","start":2088030,"end":2088350,"confidence":0.9238281,"speaker":"A"},{"text":"then","start":2088350,"end":2088630,"confidence":0.9921875,"speaker":"A"},{"text":"that","start":2088630,"end":2088910,"confidence":0.90283203,"speaker":"A"},{"text":"will","start":2088910,"end":2089150,"confidence":0.7714844,"speaker":"A"},{"text":"show","start":2089150,"end":2089350,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":2089350,"end":2089630,"confidence":0.99658203,"speaker":"A"},{"text":"in","start":2089870,"end":2090150,"confidence":0.7524414,"speaker":"A"},{"text":"the.","start":2090150,"end":2090350,"confidence":0.80615234,"speaker":"A"},{"text":"In","start":2090350,"end":2090590,"confidence":0.98876953,"speaker":"A"},{"text":"the","start":2090590,"end":2090750,"confidence":0.9995117,"speaker":"A"},{"text":"table","start":2090750,"end":2091070,"confidence":0.9995117,"speaker":"A"},{"text":"actually","start":2091070,"end":2091390,"confidence":0.99853516,"speaker":"A"},{"text":"shows","start":2091390,"end":2091710,"confidence":0.99975586,"speaker":"A"},{"text":"you","start":2091710,"end":2091830,"confidence":0.9995117,"speaker":"A"},{"text":"what","start":2091830,"end":2092030,"confidence":0.9995117,"speaker":"A"},{"text":"each","start":2092030,"end":2092350,"confidence":0.9995117,"speaker":"A"},{"text":"error","start":2092830,"end":2093270,"confidence":0.87854004,"speaker":"A"},{"text":"means.","start":2093270,"end":2093630,"confidence":0.99853516,"speaker":"A"}]},{"text":"So again we do like an enum in YAML. It's basically a string and then we have everything else be a string. And then the open API generator will automatically generate this which gives us the server error code and the error response. It'll also do all this stuff here, which is really nice.","start":2094830,"end":2115500,"confidence":0.9707031,"words":[{"text":"So","start":2094830,"end":2095230,"confidence":0.9707031,"speaker":"A"},{"text":"again","start":2095230,"end":2095630,"confidence":0.9995117,"speaker":"A"},{"text":"we","start":2095710,"end":2095990,"confidence":1,"speaker":"A"},{"text":"do","start":2095990,"end":2096150,"confidence":0.9980469,"speaker":"A"},{"text":"like","start":2096150,"end":2096270,"confidence":0.9892578,"speaker":"A"},{"text":"an","start":2096270,"end":2096430,"confidence":0.9868164,"speaker":"A"},{"text":"enum","start":2096430,"end":2096990,"confidence":0.9489746,"speaker":"A"},{"text":"in","start":2097150,"end":2097470,"confidence":0.54541016,"speaker":"A"},{"text":"YAML.","start":2097470,"end":2098110,"confidence":0.94954425,"speaker":"A"},{"text":"It's","start":2098830,"end":2099190,"confidence":0.99853516,"speaker":"A"},{"text":"basically","start":2099190,"end":2099550,"confidence":0.99975586,"speaker":"A"},{"text":"a","start":2099550,"end":2099750,"confidence":0.9970703,"speaker":"A"},{"text":"string","start":2099750,"end":2100110,"confidence":0.99975586,"speaker":"A"},{"text":"and","start":2100110,"end":2100310,"confidence":0.99658203,"speaker":"A"},{"text":"then","start":2100310,"end":2100430,"confidence":0.9746094,"speaker":"A"},{"text":"we","start":2100430,"end":2100550,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":2100550,"end":2100710,"confidence":0.9995117,"speaker":"A"},{"text":"everything","start":2100710,"end":2100910,"confidence":0.9995117,"speaker":"A"},{"text":"else","start":2100910,"end":2101190,"confidence":0.99975586,"speaker":"A"},{"text":"be","start":2101190,"end":2101350,"confidence":0.98046875,"speaker":"A"},{"text":"a","start":2101350,"end":2101510,"confidence":0.99853516,"speaker":"A"},{"text":"string.","start":2101510,"end":2101950,"confidence":0.99902344,"speaker":"A"},{"text":"And","start":2102590,"end":2102870,"confidence":0.96240234,"speaker":"A"},{"text":"then","start":2102870,"end":2103150,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":2103310,"end":2103590,"confidence":0.9946289,"speaker":"A"},{"text":"open","start":2103590,"end":2103790,"confidence":0.9946289,"speaker":"A"},{"text":"API","start":2103790,"end":2104270,"confidence":0.95581055,"speaker":"A"},{"text":"generator","start":2104270,"end":2104790,"confidence":0.998291,"speaker":"A"},{"text":"will","start":2104790,"end":2105030,"confidence":0.9975586,"speaker":"A"},{"text":"automatically","start":2105030,"end":2105590,"confidence":0.8905029,"speaker":"A"},{"text":"generate","start":2105590,"end":2106110,"confidence":1,"speaker":"A"},{"text":"this","start":2106110,"end":2106430,"confidence":0.9970703,"speaker":"A"},{"text":"which","start":2107710,"end":2108110,"confidence":0.9975586,"speaker":"A"},{"text":"gives","start":2108110,"end":2108510,"confidence":0.9970703,"speaker":"A"},{"text":"us","start":2108510,"end":2108630,"confidence":0.99609375,"speaker":"A"},{"text":"the","start":2108630,"end":2108910,"confidence":0.53759766,"speaker":"A"},{"text":"server","start":2109500,"end":2109860,"confidence":0.9980469,"speaker":"A"},{"text":"error","start":2109860,"end":2110140,"confidence":0.986084,"speaker":"A"},{"text":"code","start":2110140,"end":2110500,"confidence":0.9977214,"speaker":"A"},{"text":"and","start":2110500,"end":2110740,"confidence":0.9145508,"speaker":"A"},{"text":"the","start":2110740,"end":2110980,"confidence":0.95751953,"speaker":"A"},{"text":"error","start":2110980,"end":2111220,"confidence":0.9855957,"speaker":"A"},{"text":"response.","start":2111220,"end":2111820,"confidence":0.89868164,"speaker":"A"},{"text":"It'll","start":2112380,"end":2112820,"confidence":0.9863281,"speaker":"A"},{"text":"also","start":2112820,"end":2113060,"confidence":1,"speaker":"A"},{"text":"do","start":2113060,"end":2113300,"confidence":1,"speaker":"A"},{"text":"all","start":2113300,"end":2113460,"confidence":1,"speaker":"A"},{"text":"this","start":2113460,"end":2113660,"confidence":0.61621094,"speaker":"A"},{"text":"stuff","start":2113660,"end":2113980,"confidence":1,"speaker":"A"},{"text":"here,","start":2113980,"end":2114260,"confidence":1,"speaker":"A"},{"text":"which","start":2114260,"end":2114580,"confidence":0.9399414,"speaker":"A"},{"text":"is","start":2114580,"end":2114820,"confidence":0.99658203,"speaker":"A"},{"text":"really","start":2114820,"end":2115060,"confidence":0.74316406,"speaker":"A"},{"text":"nice.","start":2115060,"end":2115500,"confidence":1,"speaker":"A"}]},{"text":"And then we've then in our. We've abstracted a lot of this in miskit. So that way we also have now a cloud cloud error type which gives us a lot more info regarding that.","start":2117980,"end":2131820,"confidence":0.9970703,"words":[{"text":"And","start":2117980,"end":2118260,"confidence":0.9970703,"speaker":"A"},{"text":"then","start":2118260,"end":2118540,"confidence":0.9995117,"speaker":"A"},{"text":"we've","start":2118620,"end":2119180,"confidence":0.9142253,"speaker":"A"},{"text":"then","start":2119180,"end":2119500,"confidence":0.953125,"speaker":"A"},{"text":"in","start":2119500,"end":2119700,"confidence":0.984375,"speaker":"A"},{"text":"our.","start":2119700,"end":2119980,"confidence":0.9980469,"speaker":"A"},{"text":"We've","start":2120140,"end":2120500,"confidence":0.9944661,"speaker":"A"},{"text":"abstracted","start":2120500,"end":2121220,"confidence":0.9979248,"speaker":"A"},{"text":"a","start":2121220,"end":2121340,"confidence":0.9995117,"speaker":"A"},{"text":"lot","start":2121340,"end":2121460,"confidence":1,"speaker":"A"},{"text":"of","start":2121460,"end":2121580,"confidence":1,"speaker":"A"},{"text":"this","start":2121580,"end":2121740,"confidence":0.99658203,"speaker":"A"},{"text":"in","start":2121740,"end":2121940,"confidence":0.72802734,"speaker":"A"},{"text":"miskit.","start":2121940,"end":2122620,"confidence":0.83813477,"speaker":"A"},{"text":"So","start":2122940,"end":2123180,"confidence":1,"speaker":"A"},{"text":"that","start":2123180,"end":2123340,"confidence":1,"speaker":"A"},{"text":"way","start":2123340,"end":2123660,"confidence":0.99902344,"speaker":"A"},{"text":"we","start":2123980,"end":2124260,"confidence":1,"speaker":"A"},{"text":"also","start":2124260,"end":2124460,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":2124460,"end":2124740,"confidence":1,"speaker":"A"},{"text":"now","start":2124740,"end":2125100,"confidence":0.99853516,"speaker":"A"},{"text":"a","start":2125580,"end":2125860,"confidence":0.99658203,"speaker":"A"},{"text":"cloud","start":2125860,"end":2126220,"confidence":0.9638672,"speaker":"A"},{"text":"cloud","start":2126540,"end":2127100,"confidence":0.9489746,"speaker":"A"},{"text":"error","start":2127100,"end":2127500,"confidence":0.94311523,"speaker":"A"},{"text":"type","start":2127500,"end":2127980,"confidence":0.99975586,"speaker":"A"},{"text":"which","start":2128540,"end":2128900,"confidence":1,"speaker":"A"},{"text":"gives","start":2128900,"end":2129220,"confidence":1,"speaker":"A"},{"text":"us","start":2129220,"end":2129380,"confidence":1,"speaker":"A"},{"text":"a","start":2129380,"end":2129500,"confidence":1,"speaker":"A"},{"text":"lot","start":2129500,"end":2129660,"confidence":1,"speaker":"A"},{"text":"more","start":2129660,"end":2129980,"confidence":0.9995117,"speaker":"A"},{"text":"info","start":2130060,"end":2130700,"confidence":0.99975586,"speaker":"A"},{"text":"regarding","start":2130860,"end":2131460,"confidence":0.87874347,"speaker":"A"},{"text":"that.","start":2131460,"end":2131820,"confidence":0.99853516,"speaker":"A"}]},{"text":"So that's how we handle errors. And everything I do in the abs, the more abstract higher up stuff is done using type throws like I have type throws and everything. So that's how I handle that. Let me check one last piece I wanted to cover.","start":2133900,"end":2152200,"confidence":0.9975586,"words":[{"text":"So","start":2133900,"end":2134220,"confidence":0.9975586,"speaker":"A"},{"text":"that's","start":2134220,"end":2134540,"confidence":0.9998372,"speaker":"A"},{"text":"how","start":2134540,"end":2134660,"confidence":1,"speaker":"A"},{"text":"we","start":2134660,"end":2134820,"confidence":1,"speaker":"A"},{"text":"handle","start":2134820,"end":2135180,"confidence":0.99975586,"speaker":"A"},{"text":"errors.","start":2135180,"end":2135740,"confidence":0.99912107,"speaker":"A"},{"text":"And","start":2135820,"end":2136140,"confidence":0.99658203,"speaker":"A"},{"text":"everything","start":2136140,"end":2136460,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":2137240,"end":2137360,"confidence":0.9736328,"speaker":"A"},{"text":"do","start":2137360,"end":2137520,"confidence":0.9995117,"speaker":"A"},{"text":"in","start":2137520,"end":2137680,"confidence":0.90283203,"speaker":"A"},{"text":"the","start":2137680,"end":2137800,"confidence":0.92822266,"speaker":"A"},{"text":"abs,","start":2137800,"end":2138080,"confidence":0.4827881,"speaker":"A"},{"text":"the","start":2138080,"end":2138360,"confidence":0.9897461,"speaker":"A"},{"text":"more","start":2138360,"end":2138600,"confidence":0.99072266,"speaker":"A"},{"text":"abstract","start":2138600,"end":2138960,"confidence":0.8538411,"speaker":"A"},{"text":"higher","start":2138960,"end":2139280,"confidence":0.99365234,"speaker":"A"},{"text":"up","start":2139280,"end":2139560,"confidence":0.9970703,"speaker":"A"},{"text":"stuff","start":2139560,"end":2139960,"confidence":0.9713542,"speaker":"A"},{"text":"is","start":2140280,"end":2140680,"confidence":0.99902344,"speaker":"A"},{"text":"done","start":2140680,"end":2141080,"confidence":0.9995117,"speaker":"A"},{"text":"using","start":2141800,"end":2142200,"confidence":1,"speaker":"A"},{"text":"type","start":2142360,"end":2142840,"confidence":0.77783203,"speaker":"A"},{"text":"throws","start":2142840,"end":2143320,"confidence":0.9947917,"speaker":"A"},{"text":"like","start":2143320,"end":2143560,"confidence":0.9794922,"speaker":"A"},{"text":"I","start":2143560,"end":2143760,"confidence":0.99902344,"speaker":"A"},{"text":"have","start":2143760,"end":2143960,"confidence":0.9995117,"speaker":"A"},{"text":"type","start":2143960,"end":2144240,"confidence":0.7751465,"speaker":"A"},{"text":"throws","start":2144240,"end":2144560,"confidence":0.9274089,"speaker":"A"},{"text":"and","start":2144560,"end":2144680,"confidence":0.5439453,"speaker":"A"},{"text":"everything.","start":2144680,"end":2144920,"confidence":0.9995117,"speaker":"A"},{"text":"So","start":2145160,"end":2145560,"confidence":0.9941406,"speaker":"A"},{"text":"that's","start":2145960,"end":2146360,"confidence":0.9996745,"speaker":"A"},{"text":"how","start":2146360,"end":2146440,"confidence":1,"speaker":"A"},{"text":"I","start":2146440,"end":2146560,"confidence":0.9995117,"speaker":"A"},{"text":"handle","start":2146560,"end":2146960,"confidence":0.9951172,"speaker":"A"},{"text":"that.","start":2146960,"end":2147240,"confidence":0.9970703,"speaker":"A"},{"text":"Let","start":2148600,"end":2148880,"confidence":0.97753906,"speaker":"A"},{"text":"me","start":2148880,"end":2149040,"confidence":0.9995117,"speaker":"A"},{"text":"check","start":2149040,"end":2149400,"confidence":0.99780273,"speaker":"A"},{"text":"one","start":2150600,"end":2150920,"confidence":0.99560547,"speaker":"A"},{"text":"last","start":2150920,"end":2151160,"confidence":0.99853516,"speaker":"A"},{"text":"piece","start":2151160,"end":2151440,"confidence":1,"speaker":"A"},{"text":"I","start":2151440,"end":2151560,"confidence":0.99853516,"speaker":"A"},{"text":"wanted","start":2151560,"end":2151800,"confidence":0.99902344,"speaker":"A"},{"text":"to","start":2151800,"end":2151920,"confidence":0.99902344,"speaker":"A"},{"text":"cover.","start":2151920,"end":2152200,"confidence":0.9980469,"speaker":"A"}]},{"text":"The last piece I want to cover is really cool. And that is the authentication layer. So Open API provides what's called middleware and that allows you to, when you create a client or a server, you can plug that in and it will handle like let's say you need to make modifications with the request or response. When it comes in, you can intercept it and make whatever modifications you want to make. And in this case what we've done is I've created an authentication middleware which then sees if you have what's called a token manager and an authentic you have that and an authentication method.","start":2154920,"end":2197590,"confidence":0.3737793,"words":[{"text":"The","start":2154920,"end":2155200,"confidence":0.3737793,"speaker":"A"},{"text":"last","start":2155200,"end":2155360,"confidence":0.9980469,"speaker":"A"},{"text":"piece","start":2155360,"end":2155600,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":2155600,"end":2155720,"confidence":0.97998047,"speaker":"A"},{"text":"want","start":2155720,"end":2155840,"confidence":0.9321289,"speaker":"A"},{"text":"to","start":2155840,"end":2155960,"confidence":0.9916992,"speaker":"A"},{"text":"cover","start":2155960,"end":2156160,"confidence":1,"speaker":"A"},{"text":"is","start":2156160,"end":2156520,"confidence":0.99902344,"speaker":"A"},{"text":"really","start":2156760,"end":2157120,"confidence":0.9995117,"speaker":"A"},{"text":"cool.","start":2157120,"end":2157440,"confidence":0.99975586,"speaker":"A"},{"text":"And","start":2157440,"end":2157680,"confidence":0.7548828,"speaker":"A"},{"text":"that","start":2157680,"end":2157920,"confidence":1,"speaker":"A"},{"text":"is","start":2157920,"end":2158200,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2158200,"end":2158520,"confidence":1,"speaker":"A"},{"text":"authentication","start":2158520,"end":2159280,"confidence":0.9998779,"speaker":"A"},{"text":"layer.","start":2159280,"end":2159800,"confidence":0.9975586,"speaker":"A"},{"text":"So","start":2160200,"end":2160480,"confidence":0.9770508,"speaker":"A"},{"text":"Open","start":2160480,"end":2160720,"confidence":0.9995117,"speaker":"A"},{"text":"API","start":2160720,"end":2161320,"confidence":0.9436035,"speaker":"A"},{"text":"provides","start":2161320,"end":2161920,"confidence":0.99975586,"speaker":"A"},{"text":"what's","start":2161920,"end":2162240,"confidence":0.99902344,"speaker":"A"},{"text":"called","start":2162240,"end":2162480,"confidence":1,"speaker":"A"},{"text":"middleware","start":2162480,"end":2163160,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":2164440,"end":2164680,"confidence":0.9550781,"speaker":"A"},{"text":"that","start":2164760,"end":2165080,"confidence":0.99902344,"speaker":"A"},{"text":"allows","start":2165080,"end":2165440,"confidence":1,"speaker":"A"},{"text":"you","start":2165440,"end":2165640,"confidence":0.9995117,"speaker":"A"},{"text":"to,","start":2165640,"end":2165960,"confidence":0.99072266,"speaker":"A"},{"text":"when","start":2166200,"end":2166480,"confidence":0.99658203,"speaker":"A"},{"text":"you","start":2166480,"end":2166600,"confidence":0.9892578,"speaker":"A"},{"text":"create","start":2166600,"end":2166720,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":2166720,"end":2166880,"confidence":0.99902344,"speaker":"A"},{"text":"client","start":2166880,"end":2167120,"confidence":0.99975586,"speaker":"A"},{"text":"or","start":2167120,"end":2167320,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":2167320,"end":2167520,"confidence":0.9916992,"speaker":"A"},{"text":"server,","start":2167520,"end":2167840,"confidence":0.99975586,"speaker":"A"},{"text":"you","start":2167840,"end":2167960,"confidence":0.99902344,"speaker":"A"},{"text":"can","start":2167960,"end":2168080,"confidence":1,"speaker":"A"},{"text":"plug","start":2168080,"end":2168360,"confidence":0.99975586,"speaker":"A"},{"text":"that","start":2168360,"end":2168560,"confidence":0.9995117,"speaker":"A"},{"text":"in","start":2168560,"end":2168760,"confidence":0.9975586,"speaker":"A"},{"text":"and","start":2168760,"end":2168960,"confidence":0.9980469,"speaker":"A"},{"text":"it","start":2168960,"end":2169120,"confidence":0.99902344,"speaker":"A"},{"text":"will","start":2169120,"end":2169280,"confidence":0.99902344,"speaker":"A"},{"text":"handle","start":2169280,"end":2169800,"confidence":0.99902344,"speaker":"A"},{"text":"like","start":2169880,"end":2170240,"confidence":0.9291992,"speaker":"A"},{"text":"let's","start":2170240,"end":2170520,"confidence":0.99934894,"speaker":"A"},{"text":"say","start":2170520,"end":2170640,"confidence":1,"speaker":"A"},{"text":"you","start":2170640,"end":2170760,"confidence":1,"speaker":"A"},{"text":"need","start":2170760,"end":2170880,"confidence":1,"speaker":"A"},{"text":"to","start":2170880,"end":2171000,"confidence":1,"speaker":"A"},{"text":"make","start":2171000,"end":2171120,"confidence":1,"speaker":"A"},{"text":"modifications","start":2171120,"end":2171840,"confidence":0.9995117,"speaker":"A"},{"text":"with","start":2171840,"end":2172080,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":2172080,"end":2172240,"confidence":0.9951172,"speaker":"A"},{"text":"request","start":2172240,"end":2172600,"confidence":0.9995117,"speaker":"A"},{"text":"or","start":2172600,"end":2172800,"confidence":0.98779297,"speaker":"A"},{"text":"response.","start":2172800,"end":2173400,"confidence":0.9970703,"speaker":"A"},{"text":"When","start":2173640,"end":2173920,"confidence":1,"speaker":"A"},{"text":"it","start":2173920,"end":2174080,"confidence":0.99902344,"speaker":"A"},{"text":"comes","start":2174080,"end":2174280,"confidence":1,"speaker":"A"},{"text":"in,","start":2174280,"end":2174600,"confidence":0.99658203,"speaker":"A"},{"text":"you","start":2174680,"end":2174960,"confidence":1,"speaker":"A"},{"text":"can","start":2174960,"end":2175120,"confidence":0.9995117,"speaker":"A"},{"text":"intercept","start":2175120,"end":2175520,"confidence":0.8586426,"speaker":"A"},{"text":"it","start":2175520,"end":2175760,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":2175760,"end":2175880,"confidence":0.9995117,"speaker":"A"},{"text":"make","start":2175880,"end":2176040,"confidence":0.9995117,"speaker":"A"},{"text":"whatever","start":2176040,"end":2176360,"confidence":0.9995117,"speaker":"A"},{"text":"modifications","start":2176360,"end":2177040,"confidence":0.99886066,"speaker":"A"},{"text":"you","start":2177040,"end":2177280,"confidence":0.9995117,"speaker":"A"},{"text":"want","start":2177280,"end":2177440,"confidence":0.9277344,"speaker":"A"},{"text":"to","start":2177440,"end":2177560,"confidence":0.9980469,"speaker":"A"},{"text":"make.","start":2177560,"end":2177800,"confidence":0.9980469,"speaker":"A"},{"text":"And","start":2179239,"end":2179519,"confidence":0.9013672,"speaker":"A"},{"text":"in","start":2179519,"end":2179640,"confidence":1,"speaker":"A"},{"text":"this","start":2179640,"end":2179800,"confidence":1,"speaker":"A"},{"text":"case","start":2179800,"end":2180120,"confidence":1,"speaker":"A"},{"text":"what","start":2180840,"end":2181160,"confidence":0.9995117,"speaker":"A"},{"text":"we've","start":2181160,"end":2181440,"confidence":0.9941406,"speaker":"A"},{"text":"done","start":2181440,"end":2181720,"confidence":1,"speaker":"A"},{"text":"is","start":2181720,"end":2182120,"confidence":0.9970703,"speaker":"A"},{"text":"I've","start":2182520,"end":2182880,"confidence":0.9954427,"speaker":"A"},{"text":"created","start":2182880,"end":2183320,"confidence":0.99975586,"speaker":"A"},{"text":"an","start":2184520,"end":2184840,"confidence":0.9926758,"speaker":"A"},{"text":"authentication","start":2184840,"end":2185480,"confidence":1,"speaker":"A"},{"text":"middleware","start":2185480,"end":2186200,"confidence":0.9993164,"speaker":"A"},{"text":"which","start":2187480,"end":2187840,"confidence":0.99902344,"speaker":"A"},{"text":"then","start":2187840,"end":2188200,"confidence":0.99902344,"speaker":"A"},{"text":"sees","start":2188600,"end":2189080,"confidence":0.8354492,"speaker":"A"},{"text":"if","start":2189080,"end":2189280,"confidence":0.99853516,"speaker":"A"},{"text":"you","start":2189280,"end":2189480,"confidence":0.99365234,"speaker":"A"},{"text":"have","start":2189480,"end":2189800,"confidence":0.9946289,"speaker":"A"},{"text":"what's","start":2191430,"end":2191670,"confidence":0.9420573,"speaker":"A"},{"text":"called","start":2191670,"end":2191790,"confidence":1,"speaker":"A"},{"text":"a","start":2191790,"end":2191910,"confidence":0.9916992,"speaker":"A"},{"text":"token","start":2191910,"end":2192270,"confidence":0.9996745,"speaker":"A"},{"text":"manager","start":2192270,"end":2192870,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":2193990,"end":2194390,"confidence":0.98828125,"speaker":"A"},{"text":"an","start":2194390,"end":2194750,"confidence":0.7910156,"speaker":"A"},{"text":"authentic","start":2194750,"end":2195310,"confidence":0.97542316,"speaker":"A"},{"text":"you","start":2195310,"end":2195470,"confidence":0.9970703,"speaker":"A"},{"text":"have","start":2195470,"end":2195630,"confidence":1,"speaker":"A"},{"text":"that","start":2195630,"end":2195870,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":2195870,"end":2196190,"confidence":0.9975586,"speaker":"A"},{"text":"an","start":2196190,"end":2196430,"confidence":0.9980469,"speaker":"A"},{"text":"authentication","start":2196430,"end":2197070,"confidence":0.99938965,"speaker":"A"},{"text":"method.","start":2197070,"end":2197590,"confidence":0.9983724,"speaker":"A"}]},{"text":"And the way it works is you pick what type of authentication you want to use. If you already have like a pre existing web token or you already have, or you, you know, have your key ID and your private key already, or you just have the API token. We've created basically a middleware that uses that. So this is how it creates the headers for server to server. So it does all this for us.","start":2198070,"end":2224160,"confidence":0.9921875,"words":[{"text":"And","start":2198070,"end":2198430,"confidence":0.9921875,"speaker":"A"},{"text":"the","start":2198430,"end":2198670,"confidence":1,"speaker":"A"},{"text":"way","start":2198670,"end":2198790,"confidence":1,"speaker":"A"},{"text":"it","start":2198790,"end":2198910,"confidence":0.99902344,"speaker":"A"},{"text":"works","start":2198910,"end":2199350,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":2199510,"end":2199910,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":2199910,"end":2200230,"confidence":1,"speaker":"A"},{"text":"pick","start":2200230,"end":2200550,"confidence":0.99853516,"speaker":"A"},{"text":"what","start":2201190,"end":2201550,"confidence":0.99365234,"speaker":"A"},{"text":"type","start":2201550,"end":2201830,"confidence":0.99975586,"speaker":"A"},{"text":"of","start":2201830,"end":2201990,"confidence":0.9995117,"speaker":"A"},{"text":"authentication","start":2201990,"end":2202550,"confidence":0.9998779,"speaker":"A"},{"text":"you","start":2202550,"end":2202710,"confidence":0.99902344,"speaker":"A"},{"text":"want","start":2202710,"end":2202830,"confidence":0.9165039,"speaker":"A"},{"text":"to","start":2202830,"end":2202950,"confidence":0.99609375,"speaker":"A"},{"text":"use.","start":2202950,"end":2203070,"confidence":1,"speaker":"A"},{"text":"If","start":2203070,"end":2203230,"confidence":1,"speaker":"A"},{"text":"you","start":2203230,"end":2203350,"confidence":1,"speaker":"A"},{"text":"already","start":2203350,"end":2203510,"confidence":0.99853516,"speaker":"A"},{"text":"have","start":2203510,"end":2203670,"confidence":1,"speaker":"A"},{"text":"like","start":2203670,"end":2203790,"confidence":0.99560547,"speaker":"A"},{"text":"a","start":2203790,"end":2203910,"confidence":0.9995117,"speaker":"A"},{"text":"pre","start":2203910,"end":2204030,"confidence":1,"speaker":"A"},{"text":"existing","start":2204030,"end":2204430,"confidence":0.98551434,"speaker":"A"},{"text":"web","start":2204430,"end":2204670,"confidence":0.99975586,"speaker":"A"},{"text":"token","start":2204670,"end":2205190,"confidence":0.9552409,"speaker":"A"},{"text":"or","start":2205590,"end":2205950,"confidence":0.99853516,"speaker":"A"},{"text":"you","start":2205950,"end":2206190,"confidence":0.99853516,"speaker":"A"},{"text":"already","start":2206190,"end":2206470,"confidence":0.99853516,"speaker":"A"},{"text":"have,","start":2206470,"end":2206789,"confidence":0.92626953,"speaker":"A"},{"text":"or","start":2206789,"end":2207070,"confidence":0.95996094,"speaker":"A"},{"text":"you,","start":2207070,"end":2207350,"confidence":0.9916992,"speaker":"A"},{"text":"you","start":2207350,"end":2207550,"confidence":0.9770508,"speaker":"A"},{"text":"know,","start":2207550,"end":2207710,"confidence":0.9716797,"speaker":"A"},{"text":"have","start":2207710,"end":2207910,"confidence":0.6328125,"speaker":"A"},{"text":"your","start":2207910,"end":2208110,"confidence":0.99853516,"speaker":"A"},{"text":"key","start":2208110,"end":2208310,"confidence":0.99609375,"speaker":"A"},{"text":"ID","start":2208310,"end":2208590,"confidence":0.97753906,"speaker":"A"},{"text":"and","start":2208590,"end":2208830,"confidence":0.99902344,"speaker":"A"},{"text":"your","start":2208830,"end":2208990,"confidence":0.99902344,"speaker":"A"},{"text":"private","start":2208990,"end":2209230,"confidence":1,"speaker":"A"},{"text":"key","start":2209230,"end":2209510,"confidence":0.9995117,"speaker":"A"},{"text":"already,","start":2209510,"end":2209830,"confidence":0.99560547,"speaker":"A"},{"text":"or","start":2209910,"end":2210190,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":2210190,"end":2210350,"confidence":0.9995117,"speaker":"A"},{"text":"just","start":2210350,"end":2210510,"confidence":1,"speaker":"A"},{"text":"have","start":2210510,"end":2210670,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2210670,"end":2210790,"confidence":0.98339844,"speaker":"A"},{"text":"API","start":2210790,"end":2211190,"confidence":0.9992676,"speaker":"A"},{"text":"token.","start":2211190,"end":2211750,"confidence":0.99934894,"speaker":"A"},{"text":"We've","start":2212390,"end":2212790,"confidence":0.9996745,"speaker":"A"},{"text":"created","start":2212790,"end":2213190,"confidence":0.9995117,"speaker":"A"},{"text":"basically","start":2213190,"end":2213590,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":2213590,"end":2213750,"confidence":0.99609375,"speaker":"A"},{"text":"middleware","start":2213750,"end":2214270,"confidence":0.99716794,"speaker":"A"},{"text":"that","start":2214270,"end":2214470,"confidence":0.99902344,"speaker":"A"},{"text":"uses","start":2214470,"end":2214870,"confidence":0.9992676,"speaker":"A"},{"text":"that.","start":2214870,"end":2215190,"confidence":0.98339844,"speaker":"A"},{"text":"So","start":2216560,"end":2216800,"confidence":0.7055664,"speaker":"A"},{"text":"this","start":2218880,"end":2219120,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":2219120,"end":2219280,"confidence":0.99902344,"speaker":"A"},{"text":"how","start":2219280,"end":2219560,"confidence":1,"speaker":"A"},{"text":"it","start":2219560,"end":2219840,"confidence":0.9995117,"speaker":"A"},{"text":"creates","start":2219840,"end":2220200,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":2220200,"end":2220360,"confidence":0.9995117,"speaker":"A"},{"text":"headers","start":2220360,"end":2220800,"confidence":0.99902344,"speaker":"A"},{"text":"for","start":2221040,"end":2221360,"confidence":0.98583984,"speaker":"A"},{"text":"server","start":2221360,"end":2221720,"confidence":0.9992676,"speaker":"A"},{"text":"to","start":2221720,"end":2221920,"confidence":0.96972656,"speaker":"A"},{"text":"server.","start":2221920,"end":2222400,"confidence":0.9992676,"speaker":"A"},{"text":"So","start":2222800,"end":2223040,"confidence":0.8354492,"speaker":"A"},{"text":"it","start":2223040,"end":2223160,"confidence":0.98583984,"speaker":"A"},{"text":"does","start":2223160,"end":2223320,"confidence":1,"speaker":"A"},{"text":"all","start":2223320,"end":2223480,"confidence":1,"speaker":"A"},{"text":"this","start":2223480,"end":2223640,"confidence":0.9970703,"speaker":"A"},{"text":"for","start":2223640,"end":2223840,"confidence":0.9995117,"speaker":"A"},{"text":"us.","start":2223840,"end":2224160,"confidence":0.99072266,"speaker":"A"}]},{"text":"And then what I added, which I think is really nice, is called the adaptive token manager. And the idea with that is like let's say you're using a client and you have the web authentication token now and then this allows you to upgrade with that web authentication token to the private database and have access to that.","start":2225760,"end":2247730,"confidence":0.6791992,"words":[{"text":"And","start":2225760,"end":2226040,"confidence":0.6791992,"speaker":"A"},{"text":"then","start":2226040,"end":2226320,"confidence":0.9941406,"speaker":"A"},{"text":"what","start":2227520,"end":2227760,"confidence":0.9873047,"speaker":"A"},{"text":"I","start":2227760,"end":2227880,"confidence":0.9980469,"speaker":"A"},{"text":"added,","start":2227880,"end":2228160,"confidence":0.99658203,"speaker":"A"},{"text":"which","start":2228480,"end":2228760,"confidence":0.9970703,"speaker":"A"},{"text":"I","start":2228760,"end":2228920,"confidence":0.9995117,"speaker":"A"},{"text":"think","start":2228920,"end":2229040,"confidence":1,"speaker":"A"},{"text":"is","start":2229040,"end":2229160,"confidence":0.9975586,"speaker":"A"},{"text":"really","start":2229160,"end":2229320,"confidence":0.9995117,"speaker":"A"},{"text":"nice,","start":2229320,"end":2229600,"confidence":1,"speaker":"A"},{"text":"is","start":2229600,"end":2229800,"confidence":0.68310547,"speaker":"A"},{"text":"called","start":2229800,"end":2229960,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2229960,"end":2230120,"confidence":0.9975586,"speaker":"A"},{"text":"adaptive","start":2230120,"end":2230720,"confidence":0.9437256,"speaker":"A"},{"text":"token","start":2230720,"end":2231240,"confidence":0.84195966,"speaker":"A"},{"text":"manager.","start":2231240,"end":2231760,"confidence":0.9963379,"speaker":"A"},{"text":"And","start":2232240,"end":2232520,"confidence":0.6923828,"speaker":"A"},{"text":"the","start":2232520,"end":2232680,"confidence":0.9995117,"speaker":"A"},{"text":"idea","start":2232680,"end":2233000,"confidence":1,"speaker":"A"},{"text":"with","start":2233000,"end":2233160,"confidence":0.99609375,"speaker":"A"},{"text":"that","start":2233160,"end":2233360,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":2233360,"end":2233600,"confidence":0.9975586,"speaker":"A"},{"text":"like","start":2233600,"end":2233880,"confidence":0.8354492,"speaker":"A"},{"text":"let's","start":2233880,"end":2234240,"confidence":0.9013672,"speaker":"A"},{"text":"say","start":2234240,"end":2234560,"confidence":0.9995117,"speaker":"A"},{"text":"you're","start":2236960,"end":2237360,"confidence":0.9977214,"speaker":"A"},{"text":"using","start":2237360,"end":2237520,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":2237520,"end":2237720,"confidence":0.99902344,"speaker":"A"},{"text":"client","start":2237720,"end":2238160,"confidence":0.99975586,"speaker":"A"},{"text":"and","start":2238240,"end":2238560,"confidence":0.9926758,"speaker":"A"},{"text":"you","start":2238560,"end":2238880,"confidence":0.99902344,"speaker":"A"},{"text":"have","start":2238880,"end":2239280,"confidence":1,"speaker":"A"},{"text":"the","start":2239280,"end":2239560,"confidence":0.9995117,"speaker":"A"},{"text":"web","start":2239560,"end":2239800,"confidence":0.9995117,"speaker":"A"},{"text":"authentication","start":2239800,"end":2240480,"confidence":0.8408203,"speaker":"A"},{"text":"token","start":2240480,"end":2240920,"confidence":0.9995117,"speaker":"A"},{"text":"now","start":2240920,"end":2241200,"confidence":0.91308594,"speaker":"A"},{"text":"and","start":2241440,"end":2241720,"confidence":0.94628906,"speaker":"A"},{"text":"then","start":2241720,"end":2242000,"confidence":0.97216797,"speaker":"A"},{"text":"this","start":2242080,"end":2242360,"confidence":0.9975586,"speaker":"A"},{"text":"allows","start":2242360,"end":2242640,"confidence":1,"speaker":"A"},{"text":"you","start":2242640,"end":2242760,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":2242760,"end":2242920,"confidence":0.9980469,"speaker":"A"},{"text":"upgrade","start":2242920,"end":2243440,"confidence":0.9767253,"speaker":"A"},{"text":"with","start":2243810,"end":2243970,"confidence":0.9770508,"speaker":"A"},{"text":"that","start":2243970,"end":2244170,"confidence":0.9995117,"speaker":"A"},{"text":"web","start":2244170,"end":2244410,"confidence":0.998291,"speaker":"A"},{"text":"authentication","start":2244410,"end":2245090,"confidence":0.99938965,"speaker":"A"},{"text":"token","start":2245090,"end":2245450,"confidence":0.9991862,"speaker":"A"},{"text":"to","start":2245450,"end":2245610,"confidence":0.99560547,"speaker":"A"},{"text":"the","start":2245610,"end":2245770,"confidence":1,"speaker":"A"},{"text":"private","start":2245770,"end":2245970,"confidence":1,"speaker":"A"},{"text":"database","start":2245970,"end":2246490,"confidence":0.9998372,"speaker":"A"},{"text":"and","start":2246490,"end":2246690,"confidence":0.99853516,"speaker":"A"},{"text":"have","start":2246690,"end":2246930,"confidence":0.99560547,"speaker":"A"},{"text":"access","start":2246930,"end":2247210,"confidence":1,"speaker":"A"},{"text":"to","start":2247210,"end":2247450,"confidence":0.9995117,"speaker":"A"},{"text":"that.","start":2247450,"end":2247730,"confidence":0.9995117,"speaker":"A"}]},{"text":"So and then all the, all the signing is done before you in miskit for the server to server because stuff that needs to be signed, etc. And it takes care of all that. All stuff that Claude was essentially able to decipher from the documentation.","start":2250530,"end":2270060,"confidence":0.97558594,"words":[{"text":"So","start":2250530,"end":2250850,"confidence":0.97558594,"speaker":"A"},{"text":"and","start":2250850,"end":2251050,"confidence":0.97558594,"speaker":"A"},{"text":"then","start":2251050,"end":2251210,"confidence":0.97753906,"speaker":"A"},{"text":"all","start":2251210,"end":2251490,"confidence":0.9658203,"speaker":"A"},{"text":"the,","start":2251490,"end":2251890,"confidence":0.9921875,"speaker":"A"},{"text":"all","start":2252690,"end":2252970,"confidence":0.9013672,"speaker":"A"},{"text":"the","start":2252970,"end":2253170,"confidence":0.99609375,"speaker":"A"},{"text":"signing","start":2253170,"end":2253610,"confidence":0.99658203,"speaker":"A"},{"text":"is","start":2253610,"end":2253770,"confidence":0.9926758,"speaker":"A"},{"text":"done","start":2253770,"end":2253970,"confidence":1,"speaker":"A"},{"text":"before","start":2253970,"end":2254290,"confidence":0.86816406,"speaker":"A"},{"text":"you","start":2254290,"end":2254610,"confidence":0.99902344,"speaker":"A"},{"text":"in","start":2254610,"end":2254810,"confidence":0.9550781,"speaker":"A"},{"text":"miskit","start":2254810,"end":2255490,"confidence":0.8145752,"speaker":"A"},{"text":"for","start":2255650,"end":2256010,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":2256010,"end":2256250,"confidence":0.99902344,"speaker":"A"},{"text":"server","start":2256250,"end":2256530,"confidence":0.99902344,"speaker":"A"},{"text":"to","start":2256530,"end":2256690,"confidence":0.8510742,"speaker":"A"},{"text":"server","start":2256690,"end":2257050,"confidence":0.9995117,"speaker":"A"},{"text":"because","start":2257050,"end":2257250,"confidence":0.9995117,"speaker":"A"},{"text":"stuff","start":2257250,"end":2257490,"confidence":0.9991862,"speaker":"A"},{"text":"that","start":2257490,"end":2257650,"confidence":0.68603516,"speaker":"A"},{"text":"needs","start":2257650,"end":2257850,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":2257850,"end":2257970,"confidence":1,"speaker":"A"},{"text":"be","start":2257970,"end":2258090,"confidence":1,"speaker":"A"},{"text":"signed,","start":2258090,"end":2258330,"confidence":0.79589844,"speaker":"A"},{"text":"etc.","start":2258330,"end":2259010,"confidence":0.88311,"speaker":"A"},{"text":"And","start":2259570,"end":2259849,"confidence":0.99609375,"speaker":"A"},{"text":"it","start":2259849,"end":2260010,"confidence":0.99902344,"speaker":"A"},{"text":"takes","start":2260010,"end":2260250,"confidence":1,"speaker":"A"},{"text":"care","start":2260250,"end":2260410,"confidence":1,"speaker":"A"},{"text":"of","start":2260410,"end":2260610,"confidence":1,"speaker":"A"},{"text":"all","start":2260610,"end":2260850,"confidence":0.9951172,"speaker":"A"},{"text":"that.","start":2260850,"end":2261170,"confidence":0.99560547,"speaker":"A"},{"text":"All","start":2261570,"end":2261890,"confidence":0.9902344,"speaker":"A"},{"text":"stuff","start":2261890,"end":2262170,"confidence":0.9947917,"speaker":"A"},{"text":"that","start":2262170,"end":2262450,"confidence":0.99853516,"speaker":"A"},{"text":"Claude","start":2262690,"end":2263330,"confidence":0.7474365,"speaker":"A"},{"text":"was","start":2263330,"end":2263650,"confidence":0.9995117,"speaker":"A"},{"text":"essentially","start":2263650,"end":2264210,"confidence":0.9995117,"speaker":"A"},{"text":"able","start":2264210,"end":2264450,"confidence":0.9980469,"speaker":"A"},{"text":"to","start":2264450,"end":2264770,"confidence":1,"speaker":"A"},{"text":"decipher","start":2264850,"end":2265610,"confidence":0.99593097,"speaker":"A"},{"text":"from","start":2265610,"end":2265970,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2266610,"end":2267010,"confidence":0.99072266,"speaker":"A"},{"text":"documentation.","start":2269340,"end":2270060,"confidence":0.9116211,"speaker":"A"}]},{"text":"There's one more thing I wanted to show.","start":2272620,"end":2274300,"confidence":0.9972331,"words":[{"text":"There's","start":2272620,"end":2273020,"confidence":0.9972331,"speaker":"A"},{"text":"one","start":2273020,"end":2273140,"confidence":1,"speaker":"A"},{"text":"more","start":2273140,"end":2273300,"confidence":1,"speaker":"A"},{"text":"thing","start":2273300,"end":2273460,"confidence":1,"speaker":"A"},{"text":"I","start":2273460,"end":2273620,"confidence":0.9995117,"speaker":"A"},{"text":"wanted","start":2273620,"end":2273860,"confidence":0.9975586,"speaker":"A"},{"text":"to","start":2273860,"end":2274020,"confidence":1,"speaker":"A"},{"text":"show.","start":2274020,"end":2274300,"confidence":0.99902344,"speaker":"A"}]},{"text":"If you want to hop in with a question while I pull something up, feel free.","start":2276380,"end":2280940,"confidence":0.9995117,"words":[{"text":"If","start":2276380,"end":2276660,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":2276660,"end":2276780,"confidence":1,"speaker":"A"},{"text":"want","start":2276780,"end":2276860,"confidence":0.9921875,"speaker":"A"},{"text":"to","start":2276860,"end":2276980,"confidence":0.9995117,"speaker":"A"},{"text":"hop","start":2276980,"end":2277140,"confidence":0.99853516,"speaker":"A"},{"text":"in","start":2277140,"end":2277300,"confidence":0.9995117,"speaker":"A"},{"text":"with","start":2277300,"end":2277460,"confidence":1,"speaker":"A"},{"text":"a","start":2277460,"end":2277620,"confidence":0.9941406,"speaker":"A"},{"text":"question","start":2277620,"end":2277900,"confidence":1,"speaker":"A"},{"text":"while","start":2278380,"end":2278740,"confidence":0.9946289,"speaker":"A"},{"text":"I","start":2278740,"end":2279100,"confidence":0.99902344,"speaker":"A"},{"text":"pull","start":2279260,"end":2279620,"confidence":0.9995117,"speaker":"A"},{"text":"something","start":2279620,"end":2279860,"confidence":1,"speaker":"A"},{"text":"up,","start":2279860,"end":2280220,"confidence":0.99902344,"speaker":"A"},{"text":"feel","start":2280300,"end":2280620,"confidence":0.9995117,"speaker":"A"},{"text":"free.","start":2280620,"end":2280940,"confidence":1,"speaker":"A"}]},{"text":"No questions. Cool. So I'm going to show one last thing and that is how do we actually deploy this?","start":2301190,"end":2310310,"confidence":0.9892578,"words":[{"text":"No","start":2301190,"end":2301350,"confidence":0.9892578,"speaker":"A"},{"text":"questions.","start":2301350,"end":2301910,"confidence":0.9995117,"speaker":"A"},{"text":"Cool.","start":2303910,"end":2304390,"confidence":0.8347168,"speaker":"A"},{"text":"So","start":2304790,"end":2305030,"confidence":0.9921875,"speaker":"A"},{"text":"I'm","start":2305030,"end":2305190,"confidence":0.94905597,"speaker":"A"},{"text":"going","start":2305190,"end":2305270,"confidence":0.77441406,"speaker":"A"},{"text":"to","start":2305270,"end":2305350,"confidence":0.9980469,"speaker":"A"},{"text":"show","start":2305350,"end":2305510,"confidence":0.9975586,"speaker":"A"},{"text":"one","start":2305510,"end":2305710,"confidence":0.9995117,"speaker":"A"},{"text":"last","start":2305710,"end":2305950,"confidence":0.9995117,"speaker":"A"},{"text":"thing","start":2305950,"end":2306310,"confidence":0.99902344,"speaker":"A"},{"text":"and","start":2306950,"end":2307230,"confidence":0.9921875,"speaker":"A"},{"text":"that","start":2307230,"end":2307430,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":2307430,"end":2307750,"confidence":0.99609375,"speaker":"A"},{"text":"how","start":2308230,"end":2308630,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":2308710,"end":2308990,"confidence":0.99853516,"speaker":"A"},{"text":"we","start":2308990,"end":2309190,"confidence":1,"speaker":"A"},{"text":"actually","start":2309190,"end":2309470,"confidence":0.9970703,"speaker":"A"},{"text":"deploy","start":2309470,"end":2309990,"confidence":1,"speaker":"A"},{"text":"this?","start":2309990,"end":2310310,"confidence":0.9995117,"speaker":"A"}]},{"text":"Is this too big, too small? Looks okay. That looks good. Yeah, it looks good. Okay, cool.","start":2313350,"end":2320070,"confidence":0.9980469,"words":[{"text":"Is","start":2313350,"end":2313630,"confidence":0.9980469,"speaker":"A"},{"text":"this","start":2313630,"end":2313830,"confidence":0.9995117,"speaker":"A"},{"text":"too","start":2313830,"end":2314070,"confidence":0.9975586,"speaker":"A"},{"text":"big,","start":2314070,"end":2314350,"confidence":1,"speaker":"A"},{"text":"too","start":2314350,"end":2314590,"confidence":0.98779297,"speaker":"A"},{"text":"small?","start":2314590,"end":2314870,"confidence":0.99853516,"speaker":"A"},{"text":"Looks","start":2316150,"end":2316510,"confidence":0.8227539,"speaker":"A"},{"text":"okay.","start":2316510,"end":2316950,"confidence":0.9710286,"speaker":"A"},{"text":"That","start":2317590,"end":2317870,"confidence":0.97265625,"speaker":"C"},{"text":"looks","start":2317870,"end":2318150,"confidence":0.99902344,"speaker":"C"},{"text":"good.","start":2318150,"end":2318390,"confidence":0.9921875,"speaker":"C"},{"text":"Yeah,","start":2318710,"end":2319030,"confidence":0.992513,"speaker":"B"},{"text":"it","start":2319030,"end":2319110,"confidence":0.79003906,"speaker":"B"},{"text":"looks","start":2319110,"end":2319270,"confidence":0.99902344,"speaker":"B"},{"text":"good.","start":2319270,"end":2319430,"confidence":0.9951172,"speaker":"B"},{"text":"Okay,","start":2319430,"end":2319750,"confidence":0.9550781,"speaker":"A"},{"text":"cool.","start":2319750,"end":2320070,"confidence":0.99121094,"speaker":"A"}]},{"text":"So essentially what I've done is I'm using GitHub Actions. There's a way you can.","start":2323850,"end":2330410,"confidence":0.9604492,"words":[{"text":"So","start":2323850,"end":2324050,"confidence":0.9604492,"speaker":"A"},{"text":"essentially","start":2324050,"end":2324530,"confidence":0.9962158,"speaker":"A"},{"text":"what","start":2324530,"end":2324690,"confidence":0.9995117,"speaker":"A"},{"text":"I've","start":2324690,"end":2324930,"confidence":0.99886066,"speaker":"A"},{"text":"done","start":2324930,"end":2325210,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":2325530,"end":2325930,"confidence":0.99365234,"speaker":"A"},{"text":"I'm","start":2326570,"end":2326930,"confidence":0.95214844,"speaker":"A"},{"text":"using","start":2326930,"end":2327210,"confidence":1,"speaker":"A"},{"text":"GitHub","start":2327370,"end":2327890,"confidence":0.9975586,"speaker":"A"},{"text":"Actions.","start":2327890,"end":2328490,"confidence":0.9992676,"speaker":"A"},{"text":"There's","start":2329290,"end":2329690,"confidence":0.9991862,"speaker":"A"},{"text":"a","start":2329690,"end":2329770,"confidence":0.9995117,"speaker":"A"},{"text":"way","start":2329770,"end":2329930,"confidence":1,"speaker":"A"},{"text":"you","start":2329930,"end":2330130,"confidence":0.99902344,"speaker":"A"},{"text":"can.","start":2330130,"end":2330410,"confidence":0.99902344,"speaker":"A"}]},{"text":"This is all public by the way, so I will provide URLs in the Slack or something. Let's do this one. So this is a Swift package for Bushel. It's called Bushel Cloud. It pulls the stuff up from.","start":2333130,"end":2350660,"confidence":0.99902344,"words":[{"text":"This","start":2333130,"end":2333410,"confidence":0.99902344,"speaker":"A"},{"text":"is","start":2333410,"end":2333530,"confidence":0.99853516,"speaker":"A"},{"text":"all","start":2333530,"end":2333770,"confidence":0.98876953,"speaker":"A"},{"text":"public","start":2334010,"end":2334370,"confidence":1,"speaker":"A"},{"text":"by","start":2334370,"end":2334570,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":2334570,"end":2334690,"confidence":0.9995117,"speaker":"A"},{"text":"way,","start":2334690,"end":2334970,"confidence":1,"speaker":"A"},{"text":"so","start":2335050,"end":2335450,"confidence":0.9321289,"speaker":"A"},{"text":"I","start":2335850,"end":2336130,"confidence":0.99902344,"speaker":"A"},{"text":"will","start":2336130,"end":2336370,"confidence":0.86621094,"speaker":"A"},{"text":"provide","start":2336370,"end":2336689,"confidence":1,"speaker":"A"},{"text":"URLs","start":2336689,"end":2337330,"confidence":0.94067,"speaker":"A"},{"text":"in","start":2337330,"end":2337490,"confidence":0.98828125,"speaker":"A"},{"text":"the","start":2337490,"end":2337650,"confidence":0.9897461,"speaker":"A"},{"text":"Slack","start":2337650,"end":2337970,"confidence":0.998291,"speaker":"A"},{"text":"or","start":2337970,"end":2338170,"confidence":0.9970703,"speaker":"A"},{"text":"something.","start":2338170,"end":2338490,"confidence":0.9995117,"speaker":"A"},{"text":"Let's","start":2339450,"end":2339890,"confidence":0.99853516,"speaker":"A"},{"text":"do","start":2339890,"end":2340050,"confidence":0.9790039,"speaker":"A"},{"text":"this","start":2340050,"end":2340250,"confidence":0.9975586,"speaker":"A"},{"text":"one.","start":2340250,"end":2340570,"confidence":0.99316406,"speaker":"A"},{"text":"So","start":2342410,"end":2342810,"confidence":0.8173828,"speaker":"A"},{"text":"this","start":2343930,"end":2344210,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":2344210,"end":2344370,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":2344370,"end":2344530,"confidence":0.9765625,"speaker":"A"},{"text":"Swift","start":2344530,"end":2344810,"confidence":0.9226074,"speaker":"A"},{"text":"package","start":2344810,"end":2345370,"confidence":0.99768066,"speaker":"A"},{"text":"for","start":2347060,"end":2347220,"confidence":0.97998047,"speaker":"A"},{"text":"Bushel.","start":2347220,"end":2347860,"confidence":0.9685872,"speaker":"A"},{"text":"It's","start":2347860,"end":2348180,"confidence":0.9995117,"speaker":"A"},{"text":"called","start":2348180,"end":2348340,"confidence":0.99853516,"speaker":"A"},{"text":"Bushel","start":2348340,"end":2348780,"confidence":0.90283203,"speaker":"A"},{"text":"Cloud.","start":2348780,"end":2349180,"confidence":0.99658203,"speaker":"A"},{"text":"It","start":2349180,"end":2349420,"confidence":0.9995117,"speaker":"A"},{"text":"pulls","start":2349420,"end":2349700,"confidence":1,"speaker":"A"},{"text":"the","start":2349700,"end":2349820,"confidence":0.98828125,"speaker":"A"},{"text":"stuff","start":2349820,"end":2350060,"confidence":1,"speaker":"A"},{"text":"up","start":2350060,"end":2350300,"confidence":0.9995117,"speaker":"A"},{"text":"from.","start":2350300,"end":2350660,"confidence":0.9970703,"speaker":"A"}]},{"text":"Uses Miskit to go ahead and pull, get access to CloudKit and let me go back to the workflow. How familiar are you with GitHub workflows?","start":2351220,"end":2366580,"confidence":0.84887695,"words":[{"text":"Uses","start":2351220,"end":2351740,"confidence":0.84887695,"speaker":"A"},{"text":"Miskit","start":2351740,"end":2352340,"confidence":0.9329834,"speaker":"A"},{"text":"to","start":2353540,"end":2353820,"confidence":0.9941406,"speaker":"A"},{"text":"go","start":2353820,"end":2353980,"confidence":1,"speaker":"A"},{"text":"ahead","start":2353980,"end":2354260,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":2354340,"end":2354740,"confidence":0.88720703,"speaker":"A"},{"text":"pull,","start":2356740,"end":2357220,"confidence":0.9621582,"speaker":"A"},{"text":"get","start":2357860,"end":2358140,"confidence":0.99902344,"speaker":"A"},{"text":"access","start":2358140,"end":2358380,"confidence":1,"speaker":"A"},{"text":"to","start":2358380,"end":2358700,"confidence":1,"speaker":"A"},{"text":"CloudKit","start":2358700,"end":2359460,"confidence":0.9325,"speaker":"A"},{"text":"and","start":2359940,"end":2360340,"confidence":0.98291016,"speaker":"A"},{"text":"let","start":2361060,"end":2361340,"confidence":0.99316406,"speaker":"A"},{"text":"me","start":2361340,"end":2361460,"confidence":1,"speaker":"A"},{"text":"go","start":2361460,"end":2361620,"confidence":0.9995117,"speaker":"A"},{"text":"back","start":2361620,"end":2361940,"confidence":1,"speaker":"A"},{"text":"to","start":2361940,"end":2362339,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2362339,"end":2362620,"confidence":1,"speaker":"A"},{"text":"workflow.","start":2362620,"end":2363300,"confidence":0.96276855,"speaker":"A"},{"text":"How","start":2364100,"end":2364420,"confidence":0.99853516,"speaker":"A"},{"text":"familiar","start":2364420,"end":2364860,"confidence":1,"speaker":"A"},{"text":"are","start":2364860,"end":2365020,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":2365020,"end":2365180,"confidence":0.9995117,"speaker":"A"},{"text":"with","start":2365180,"end":2365380,"confidence":1,"speaker":"A"},{"text":"GitHub","start":2365380,"end":2365860,"confidence":0.87939453,"speaker":"A"},{"text":"workflows?","start":2365860,"end":2366580,"confidence":0.9026367,"speaker":"A"}]},{"text":"Sadly not had the chance to work too deeply with them yet. Okay. Basically it's like for CI, but you can also set it up on a schedule. So I did that and then it runs the scheduled job and then I just execute.","start":2369860,"end":2386490,"confidence":0.99576825,"words":[{"text":"Sadly","start":2369860,"end":2370300,"confidence":0.99576825,"speaker":"C"},{"text":"not","start":2370300,"end":2370500,"confidence":0.9951172,"speaker":"C"},{"text":"had","start":2370500,"end":2370660,"confidence":0.9980469,"speaker":"C"},{"text":"the","start":2370660,"end":2370780,"confidence":0.99658203,"speaker":"C"},{"text":"chance","start":2370780,"end":2371020,"confidence":0.99975586,"speaker":"C"},{"text":"to","start":2371020,"end":2371180,"confidence":0.9995117,"speaker":"C"},{"text":"work","start":2371180,"end":2371460,"confidence":1,"speaker":"C"},{"text":"too","start":2371780,"end":2372060,"confidence":0.99560547,"speaker":"C"},{"text":"deeply","start":2372060,"end":2372380,"confidence":0.9991862,"speaker":"C"},{"text":"with","start":2372380,"end":2372500,"confidence":0.9995117,"speaker":"C"},{"text":"them","start":2372500,"end":2372660,"confidence":0.97021484,"speaker":"C"},{"text":"yet.","start":2372660,"end":2372980,"confidence":0.98291016,"speaker":"C"},{"text":"Okay.","start":2373690,"end":2374090,"confidence":0.9503581,"speaker":"A"},{"text":"Basically","start":2375130,"end":2375610,"confidence":0.9987793,"speaker":"A"},{"text":"it's","start":2375610,"end":2375850,"confidence":0.99934894,"speaker":"A"},{"text":"like","start":2375850,"end":2375970,"confidence":0.99072266,"speaker":"A"},{"text":"for","start":2375970,"end":2376170,"confidence":0.9448242,"speaker":"A"},{"text":"CI,","start":2376170,"end":2376610,"confidence":0.97021484,"speaker":"A"},{"text":"but","start":2376610,"end":2376810,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":2376810,"end":2376930,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":2376930,"end":2377050,"confidence":0.9995117,"speaker":"A"},{"text":"also","start":2377050,"end":2377250,"confidence":0.9995117,"speaker":"A"},{"text":"set","start":2377250,"end":2377490,"confidence":1,"speaker":"A"},{"text":"it","start":2377490,"end":2377610,"confidence":0.9995117,"speaker":"A"},{"text":"up","start":2377610,"end":2377730,"confidence":0.9995117,"speaker":"A"},{"text":"on","start":2377730,"end":2377890,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":2377890,"end":2378050,"confidence":0.9980469,"speaker":"A"},{"text":"schedule.","start":2378050,"end":2378570,"confidence":0.8905029,"speaker":"A"},{"text":"So","start":2378890,"end":2379170,"confidence":0.9941406,"speaker":"A"},{"text":"I","start":2379170,"end":2379330,"confidence":1,"speaker":"A"},{"text":"did","start":2379330,"end":2379530,"confidence":0.99902344,"speaker":"A"},{"text":"that","start":2379530,"end":2379850,"confidence":0.99902344,"speaker":"A"},{"text":"and","start":2381290,"end":2381570,"confidence":0.9902344,"speaker":"A"},{"text":"then","start":2381570,"end":2381850,"confidence":0.9980469,"speaker":"A"},{"text":"it","start":2382890,"end":2383170,"confidence":0.99853516,"speaker":"A"},{"text":"runs","start":2383170,"end":2383490,"confidence":0.99975586,"speaker":"A"},{"text":"the","start":2383490,"end":2383610,"confidence":0.6640625,"speaker":"A"},{"text":"scheduled","start":2383610,"end":2384090,"confidence":0.89404297,"speaker":"A"},{"text":"job","start":2384090,"end":2384410,"confidence":1,"speaker":"A"},{"text":"and","start":2384810,"end":2385090,"confidence":0.9975586,"speaker":"A"},{"text":"then","start":2385090,"end":2385250,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":2385250,"end":2385450,"confidence":0.9995117,"speaker":"A"},{"text":"just","start":2385450,"end":2385730,"confidence":0.9995117,"speaker":"A"},{"text":"execute.","start":2385730,"end":2386490,"confidence":0.97875977,"speaker":"A"}]},{"text":"So then this was refactored over here into an action.","start":2390650,"end":2395210,"confidence":0.9941406,"words":[{"text":"So","start":2390650,"end":2390930,"confidence":0.9941406,"speaker":"A"},{"text":"then","start":2390930,"end":2391170,"confidence":0.9975586,"speaker":"A"},{"text":"this","start":2391170,"end":2391410,"confidence":1,"speaker":"A"},{"text":"was","start":2391410,"end":2391610,"confidence":0.9995117,"speaker":"A"},{"text":"refactored","start":2391610,"end":2392490,"confidence":0.99283856,"speaker":"A"},{"text":"over","start":2393290,"end":2393690,"confidence":0.99560547,"speaker":"A"},{"text":"here","start":2393690,"end":2394090,"confidence":0.9995117,"speaker":"A"},{"text":"into","start":2394330,"end":2394650,"confidence":0.9741211,"speaker":"A"},{"text":"an","start":2394650,"end":2394890,"confidence":0.99902344,"speaker":"A"},{"text":"action.","start":2394890,"end":2395210,"confidence":0.9995117,"speaker":"A"}]},{"text":"There we go. And I have all sorts of stuff here for like this is generic essentially, but all these, the environment, etc. These are all passed from that workflow into here. These are basically either API keys or the information that I need for accessing Cloud, the public, public database. Right.","start":2397770,"end":2426080,"confidence":0.89990234,"words":[{"text":"There","start":2397770,"end":2398090,"confidence":0.89990234,"speaker":"A"},{"text":"we","start":2398090,"end":2398250,"confidence":0.99853516,"speaker":"A"},{"text":"go.","start":2398250,"end":2398490,"confidence":0.99853516,"speaker":"A"},{"text":"And","start":2399540,"end":2399780,"confidence":0.9848633,"speaker":"A"},{"text":"I","start":2401140,"end":2401420,"confidence":0.99658203,"speaker":"A"},{"text":"have","start":2401420,"end":2401580,"confidence":0.9995117,"speaker":"A"},{"text":"all","start":2401580,"end":2401740,"confidence":0.9995117,"speaker":"A"},{"text":"sorts","start":2401740,"end":2402020,"confidence":0.890625,"speaker":"A"},{"text":"of","start":2402020,"end":2402180,"confidence":1,"speaker":"A"},{"text":"stuff","start":2402180,"end":2402380,"confidence":1,"speaker":"A"},{"text":"here","start":2402380,"end":2402660,"confidence":0.9995117,"speaker":"A"},{"text":"for","start":2403060,"end":2403460,"confidence":0.9863281,"speaker":"A"},{"text":"like","start":2405380,"end":2405780,"confidence":0.97021484,"speaker":"A"},{"text":"this","start":2406660,"end":2406940,"confidence":0.9975586,"speaker":"A"},{"text":"is","start":2406940,"end":2407100,"confidence":0.99902344,"speaker":"A"},{"text":"generic","start":2407100,"end":2407700,"confidence":1,"speaker":"A"},{"text":"essentially,","start":2407700,"end":2408420,"confidence":0.9996338,"speaker":"A"},{"text":"but","start":2408500,"end":2408900,"confidence":0.9941406,"speaker":"A"},{"text":"all","start":2410020,"end":2410300,"confidence":0.98828125,"speaker":"A"},{"text":"these,","start":2410300,"end":2410580,"confidence":0.9868164,"speaker":"A"},{"text":"the","start":2410820,"end":2411140,"confidence":0.9223633,"speaker":"A"},{"text":"environment,","start":2411140,"end":2411460,"confidence":1,"speaker":"A"},{"text":"etc.","start":2411700,"end":2412500,"confidence":0.975,"speaker":"A"},{"text":"These","start":2413140,"end":2413420,"confidence":0.9995117,"speaker":"A"},{"text":"are","start":2413420,"end":2413540,"confidence":0.9995117,"speaker":"A"},{"text":"all","start":2413540,"end":2413700,"confidence":0.99853516,"speaker":"A"},{"text":"passed","start":2413700,"end":2414060,"confidence":0.93310547,"speaker":"A"},{"text":"from","start":2414060,"end":2414220,"confidence":1,"speaker":"A"},{"text":"that","start":2414220,"end":2414420,"confidence":0.99902344,"speaker":"A"},{"text":"workflow","start":2414420,"end":2414980,"confidence":0.9741211,"speaker":"A"},{"text":"into","start":2414980,"end":2415260,"confidence":0.99609375,"speaker":"A"},{"text":"here.","start":2415260,"end":2415620,"confidence":0.99902344,"speaker":"A"},{"text":"These","start":2415940,"end":2416220,"confidence":0.9975586,"speaker":"A"},{"text":"are","start":2416220,"end":2416380,"confidence":0.9995117,"speaker":"A"},{"text":"basically","start":2416380,"end":2416820,"confidence":0.9992676,"speaker":"A"},{"text":"either","start":2416820,"end":2417180,"confidence":0.9995117,"speaker":"A"},{"text":"API","start":2417180,"end":2417620,"confidence":0.85180664,"speaker":"A"},{"text":"keys","start":2417620,"end":2417980,"confidence":0.99975586,"speaker":"A"},{"text":"or","start":2417980,"end":2418180,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2418180,"end":2418420,"confidence":0.99902344,"speaker":"A"},{"text":"information","start":2418420,"end":2418740,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":2418820,"end":2419100,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":2419100,"end":2419260,"confidence":1,"speaker":"A"},{"text":"need","start":2419260,"end":2419540,"confidence":0.9995117,"speaker":"A"},{"text":"for","start":2419620,"end":2420020,"confidence":0.9995117,"speaker":"A"},{"text":"accessing","start":2420500,"end":2421100,"confidence":0.9953613,"speaker":"A"},{"text":"Cloud,","start":2421100,"end":2421460,"confidence":0.9243164,"speaker":"A"},{"text":"the","start":2421460,"end":2421780,"confidence":0.8491211,"speaker":"A"},{"text":"public,","start":2421780,"end":2422100,"confidence":0.765625,"speaker":"A"},{"text":"public","start":2424020,"end":2424380,"confidence":0.9995117,"speaker":"A"},{"text":"database.","start":2424380,"end":2425060,"confidence":0.99869794,"speaker":"A"},{"text":"Right.","start":2425840,"end":2426080,"confidence":0.9008789,"speaker":"A"}]},{"text":"And then I already pre built the binary. So we already have that. We're running this on Ubuntu because it's the default. Look at it. If there is no binary, it goes ahead and builds the binary for me.","start":2426480,"end":2443840,"confidence":0.9794922,"words":[{"text":"And","start":2426480,"end":2426760,"confidence":0.9794922,"speaker":"A"},{"text":"then","start":2426760,"end":2427040,"confidence":0.9980469,"speaker":"A"},{"text":"I","start":2427840,"end":2428120,"confidence":0.96435547,"speaker":"A"},{"text":"already","start":2428120,"end":2428360,"confidence":0.99902344,"speaker":"A"},{"text":"pre","start":2428360,"end":2428680,"confidence":0.99853516,"speaker":"A"},{"text":"built","start":2428680,"end":2429200,"confidence":0.8404948,"speaker":"A"},{"text":"the","start":2429760,"end":2430160,"confidence":0.9970703,"speaker":"A"},{"text":"binary.","start":2430160,"end":2430880,"confidence":0.9977214,"speaker":"A"},{"text":"So","start":2431120,"end":2431520,"confidence":0.99316406,"speaker":"A"},{"text":"we","start":2431600,"end":2431880,"confidence":0.9995117,"speaker":"A"},{"text":"already","start":2431880,"end":2432040,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":2432040,"end":2432200,"confidence":0.99902344,"speaker":"A"},{"text":"that.","start":2432200,"end":2432360,"confidence":1,"speaker":"A"},{"text":"We're","start":2432360,"end":2432600,"confidence":0.9973958,"speaker":"A"},{"text":"running","start":2432600,"end":2432840,"confidence":1,"speaker":"A"},{"text":"this","start":2432840,"end":2433120,"confidence":0.99902344,"speaker":"A"},{"text":"on","start":2433200,"end":2433600,"confidence":0.9975586,"speaker":"A"},{"text":"Ubuntu","start":2434880,"end":2435720,"confidence":0.93408203,"speaker":"A"},{"text":"because","start":2435720,"end":2435960,"confidence":0.94970703,"speaker":"A"},{"text":"it's","start":2435960,"end":2436160,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":2436160,"end":2436280,"confidence":0.8647461,"speaker":"A"},{"text":"default.","start":2436280,"end":2436800,"confidence":0.9998779,"speaker":"A"},{"text":"Look","start":2437200,"end":2437480,"confidence":0.9970703,"speaker":"A"},{"text":"at","start":2437480,"end":2437640,"confidence":0.9995117,"speaker":"A"},{"text":"it.","start":2437640,"end":2437920,"confidence":0.9995117,"speaker":"A"},{"text":"If","start":2439200,"end":2439600,"confidence":0.9980469,"speaker":"A"},{"text":"there","start":2439920,"end":2440280,"confidence":1,"speaker":"A"},{"text":"is","start":2440280,"end":2440560,"confidence":0.9995117,"speaker":"A"},{"text":"no","start":2440560,"end":2440880,"confidence":0.9970703,"speaker":"A"},{"text":"binary,","start":2440960,"end":2441639,"confidence":0.9977214,"speaker":"A"},{"text":"it","start":2441639,"end":2441840,"confidence":0.9736328,"speaker":"A"},{"text":"goes","start":2441840,"end":2442000,"confidence":1,"speaker":"A"},{"text":"ahead","start":2442000,"end":2442120,"confidence":0.99853516,"speaker":"A"},{"text":"and","start":2442120,"end":2442320,"confidence":1,"speaker":"A"},{"text":"builds","start":2442320,"end":2442680,"confidence":0.99853516,"speaker":"A"},{"text":"the","start":2442680,"end":2442800,"confidence":1,"speaker":"A"},{"text":"binary","start":2442800,"end":2443280,"confidence":0.9991862,"speaker":"A"},{"text":"for","start":2443280,"end":2443520,"confidence":0.99853516,"speaker":"A"},{"text":"me.","start":2443520,"end":2443840,"confidence":0.9995117,"speaker":"A"}]},{"text":"So that's what this is doing. And then we make sure the binary works. We make, we make it executable, we validate, make sure all the API secrets are there. We then go ahead and this validates the pim. But essentially this is the fun part.","start":2444000,"end":2462370,"confidence":0.95166016,"words":[{"text":"So","start":2444000,"end":2444240,"confidence":0.95166016,"speaker":"A"},{"text":"that's","start":2444240,"end":2444400,"confidence":0.9991862,"speaker":"A"},{"text":"what","start":2444400,"end":2444520,"confidence":0.9995117,"speaker":"A"},{"text":"this","start":2444520,"end":2444680,"confidence":1,"speaker":"A"},{"text":"is","start":2444680,"end":2444880,"confidence":1,"speaker":"A"},{"text":"doing.","start":2444880,"end":2445200,"confidence":0.99902344,"speaker":"A"},{"text":"And","start":2447120,"end":2447440,"confidence":0.88671875,"speaker":"A"},{"text":"then","start":2447440,"end":2447760,"confidence":0.99902344,"speaker":"A"},{"text":"we","start":2448800,"end":2449080,"confidence":0.9995117,"speaker":"A"},{"text":"make","start":2449080,"end":2449280,"confidence":0.7973633,"speaker":"A"},{"text":"sure","start":2449280,"end":2449480,"confidence":1,"speaker":"A"},{"text":"the","start":2449480,"end":2449640,"confidence":0.9941406,"speaker":"A"},{"text":"binary","start":2449640,"end":2450080,"confidence":0.92838544,"speaker":"A"},{"text":"works.","start":2450080,"end":2450640,"confidence":0.9995117,"speaker":"A"},{"text":"We","start":2450880,"end":2451120,"confidence":0.41552734,"speaker":"A"},{"text":"make,","start":2451120,"end":2451180,"confidence":0.6088867,"speaker":"A"},{"text":"we","start":2451250,"end":2451330,"confidence":0.6176758,"speaker":"A"},{"text":"make","start":2451330,"end":2451450,"confidence":0.99902344,"speaker":"A"},{"text":"it","start":2451450,"end":2451610,"confidence":0.9550781,"speaker":"A"},{"text":"executable,","start":2451610,"end":2452210,"confidence":0.9968262,"speaker":"A"},{"text":"we","start":2452290,"end":2452650,"confidence":0.99658203,"speaker":"A"},{"text":"validate,","start":2452650,"end":2453290,"confidence":0.9996745,"speaker":"A"},{"text":"make","start":2453290,"end":2453530,"confidence":0.9951172,"speaker":"A"},{"text":"sure","start":2453530,"end":2453730,"confidence":1,"speaker":"A"},{"text":"all","start":2453730,"end":2454050,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":2454050,"end":2454450,"confidence":0.99902344,"speaker":"A"},{"text":"API","start":2455010,"end":2455570,"confidence":0.9987793,"speaker":"A"},{"text":"secrets","start":2455570,"end":2456050,"confidence":0.98339844,"speaker":"A"},{"text":"are","start":2456050,"end":2456250,"confidence":0.99902344,"speaker":"A"},{"text":"there.","start":2456250,"end":2456530,"confidence":0.99902344,"speaker":"A"},{"text":"We","start":2457650,"end":2457970,"confidence":0.9951172,"speaker":"A"},{"text":"then","start":2457970,"end":2458210,"confidence":0.99658203,"speaker":"A"},{"text":"go","start":2458210,"end":2458410,"confidence":0.99853516,"speaker":"A"},{"text":"ahead","start":2458410,"end":2458690,"confidence":0.99853516,"speaker":"A"},{"text":"and","start":2458930,"end":2459290,"confidence":0.9921875,"speaker":"A"},{"text":"this","start":2459290,"end":2459530,"confidence":0.9863281,"speaker":"A"},{"text":"validates","start":2459530,"end":2460010,"confidence":0.99690753,"speaker":"A"},{"text":"the","start":2460010,"end":2460170,"confidence":0.99902344,"speaker":"A"},{"text":"pim.","start":2460170,"end":2460530,"confidence":0.8864746,"speaker":"A"},{"text":"But","start":2460690,"end":2460970,"confidence":0.99853516,"speaker":"A"},{"text":"essentially","start":2460970,"end":2461370,"confidence":0.9954834,"speaker":"A"},{"text":"this","start":2461370,"end":2461530,"confidence":0.9902344,"speaker":"A"},{"text":"is","start":2461530,"end":2461650,"confidence":0.9814453,"speaker":"A"},{"text":"the","start":2461650,"end":2461770,"confidence":0.8173828,"speaker":"A"},{"text":"fun","start":2461770,"end":2462010,"confidence":0.9980469,"speaker":"A"},{"text":"part.","start":2462010,"end":2462370,"confidence":0.9995117,"speaker":"A"}]},{"text":"We go ahead, we have all our inputs for the private key, the key id, environment, container id. And then I use Virtual Buddy for signing verification. And.","start":2463410,"end":2474450,"confidence":0.9995117,"words":[{"text":"We","start":2463410,"end":2463690,"confidence":0.9995117,"speaker":"A"},{"text":"go","start":2463690,"end":2463810,"confidence":0.9995117,"speaker":"A"},{"text":"ahead,","start":2463810,"end":2464050,"confidence":0.99902344,"speaker":"A"},{"text":"we","start":2464050,"end":2464330,"confidence":0.9980469,"speaker":"A"},{"text":"have","start":2464330,"end":2464610,"confidence":0.99902344,"speaker":"A"},{"text":"all","start":2464930,"end":2465290,"confidence":0.99853516,"speaker":"A"},{"text":"our","start":2465290,"end":2465530,"confidence":0.99365234,"speaker":"A"},{"text":"inputs","start":2465530,"end":2466010,"confidence":0.88171387,"speaker":"A"},{"text":"for","start":2466010,"end":2466170,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":2466170,"end":2466290,"confidence":1,"speaker":"A"},{"text":"private","start":2466290,"end":2466490,"confidence":0.99902344,"speaker":"A"},{"text":"key,","start":2466490,"end":2466770,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2466770,"end":2467089,"confidence":0.9277344,"speaker":"A"},{"text":"key","start":2467089,"end":2467410,"confidence":0.98779297,"speaker":"A"},{"text":"id,","start":2467410,"end":2467730,"confidence":0.97021484,"speaker":"A"},{"text":"environment,","start":2467810,"end":2468210,"confidence":0.99902344,"speaker":"A"},{"text":"container","start":2468690,"end":2469290,"confidence":0.99902344,"speaker":"A"},{"text":"id.","start":2469290,"end":2469570,"confidence":0.99609375,"speaker":"A"},{"text":"And","start":2470610,"end":2470890,"confidence":0.9707031,"speaker":"A"},{"text":"then","start":2470890,"end":2471050,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":2471050,"end":2471170,"confidence":0.99902344,"speaker":"A"},{"text":"use","start":2471170,"end":2471370,"confidence":0.99658203,"speaker":"A"},{"text":"Virtual","start":2471370,"end":2471770,"confidence":0.9996338,"speaker":"A"},{"text":"Buddy","start":2471770,"end":2472090,"confidence":0.98583984,"speaker":"A"},{"text":"for","start":2472090,"end":2472250,"confidence":0.99902344,"speaker":"A"},{"text":"signing","start":2472250,"end":2472650,"confidence":0.9938965,"speaker":"A"},{"text":"verification.","start":2472650,"end":2473410,"confidence":0.99990237,"speaker":"A"},{"text":"And.","start":2474050,"end":2474450,"confidence":0.93603516,"speaker":"A"}]},{"text":"It then goes in and it runs the sync and then we'll go in. Basically it pulls from several websites information about macrosos, restore images and checks whether they're signed. And then it goes ahead and it adds those to the database. And then what this does is it exports the information in a run. Let's, let's take a look, see if I have one.","start":2478460,"end":2504020,"confidence":0.9707031,"words":[{"text":"It","start":2478460,"end":2478580,"confidence":0.9707031,"speaker":"A"},{"text":"then","start":2478580,"end":2478740,"confidence":0.9980469,"speaker":"A"},{"text":"goes","start":2478740,"end":2479060,"confidence":0.99975586,"speaker":"A"},{"text":"in","start":2479060,"end":2479220,"confidence":0.99902344,"speaker":"A"},{"text":"and","start":2479220,"end":2479500,"confidence":0.8173828,"speaker":"A"},{"text":"it","start":2479900,"end":2480300,"confidence":0.99560547,"speaker":"A"},{"text":"runs","start":2481260,"end":2481740,"confidence":1,"speaker":"A"},{"text":"the","start":2481740,"end":2481940,"confidence":0.9995117,"speaker":"A"},{"text":"sync","start":2481940,"end":2482380,"confidence":0.9733073,"speaker":"A"},{"text":"and","start":2483500,"end":2483780,"confidence":0.96435547,"speaker":"A"},{"text":"then","start":2483780,"end":2484060,"confidence":0.97753906,"speaker":"A"},{"text":"we'll","start":2484860,"end":2485220,"confidence":0.8601888,"speaker":"A"},{"text":"go","start":2485220,"end":2485380,"confidence":0.99902344,"speaker":"A"},{"text":"in.","start":2485380,"end":2485660,"confidence":0.9980469,"speaker":"A"},{"text":"Basically","start":2485980,"end":2486460,"confidence":0.9995117,"speaker":"A"},{"text":"it","start":2486460,"end":2486620,"confidence":0.95996094,"speaker":"A"},{"text":"pulls","start":2486620,"end":2486900,"confidence":0.99902344,"speaker":"A"},{"text":"from","start":2486900,"end":2487060,"confidence":1,"speaker":"A"},{"text":"several","start":2487060,"end":2487340,"confidence":0.9995117,"speaker":"A"},{"text":"websites","start":2487340,"end":2488140,"confidence":0.99658203,"speaker":"A"},{"text":"information","start":2489100,"end":2489500,"confidence":1,"speaker":"A"},{"text":"about","start":2489580,"end":2489900,"confidence":0.9995117,"speaker":"A"},{"text":"macrosos,","start":2489900,"end":2490500,"confidence":0.85645,"speaker":"A"},{"text":"restore","start":2490500,"end":2490940,"confidence":0.85498047,"speaker":"A"},{"text":"images","start":2490940,"end":2491380,"confidence":0.998291,"speaker":"A"},{"text":"and","start":2491380,"end":2491620,"confidence":0.9980469,"speaker":"A"},{"text":"checks","start":2491620,"end":2491940,"confidence":0.9996745,"speaker":"A"},{"text":"whether","start":2491940,"end":2492100,"confidence":0.99902344,"speaker":"A"},{"text":"they're","start":2492100,"end":2492380,"confidence":0.98030597,"speaker":"A"},{"text":"signed.","start":2492380,"end":2492939,"confidence":0.80981445,"speaker":"A"},{"text":"And","start":2493340,"end":2493620,"confidence":0.94970703,"speaker":"A"},{"text":"then","start":2493620,"end":2493780,"confidence":0.9970703,"speaker":"A"},{"text":"it","start":2493780,"end":2493940,"confidence":1,"speaker":"A"},{"text":"goes","start":2493940,"end":2494140,"confidence":1,"speaker":"A"},{"text":"ahead","start":2494140,"end":2494340,"confidence":0.99902344,"speaker":"A"},{"text":"and","start":2494340,"end":2494700,"confidence":0.53125,"speaker":"A"},{"text":"it","start":2494780,"end":2495180,"confidence":0.86621094,"speaker":"A"},{"text":"adds","start":2496380,"end":2496900,"confidence":0.99853516,"speaker":"A"},{"text":"those","start":2496900,"end":2497180,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":2497260,"end":2497540,"confidence":1,"speaker":"A"},{"text":"the","start":2497540,"end":2497660,"confidence":1,"speaker":"A"},{"text":"database.","start":2497660,"end":2498260,"confidence":0.9998372,"speaker":"A"},{"text":"And","start":2498260,"end":2498500,"confidence":0.9238281,"speaker":"A"},{"text":"then","start":2498500,"end":2498700,"confidence":0.9902344,"speaker":"A"},{"text":"what","start":2498700,"end":2498900,"confidence":0.9995117,"speaker":"A"},{"text":"this","start":2498900,"end":2499060,"confidence":1,"speaker":"A"},{"text":"does","start":2499060,"end":2499260,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":2499260,"end":2499460,"confidence":0.99902344,"speaker":"A"},{"text":"it","start":2499460,"end":2499620,"confidence":0.86279297,"speaker":"A"},{"text":"exports","start":2499620,"end":2500140,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":2500620,"end":2500940,"confidence":0.99560547,"speaker":"A"},{"text":"information","start":2500940,"end":2501260,"confidence":1,"speaker":"A"},{"text":"in","start":2501500,"end":2501780,"confidence":0.9946289,"speaker":"A"},{"text":"a","start":2501780,"end":2501900,"confidence":0.98046875,"speaker":"A"},{"text":"run.","start":2501900,"end":2502100,"confidence":0.9926758,"speaker":"A"},{"text":"Let's,","start":2502100,"end":2502460,"confidence":0.7273763,"speaker":"A"},{"text":"let's","start":2502460,"end":2502700,"confidence":0.8728841,"speaker":"A"},{"text":"take","start":2502700,"end":2502820,"confidence":0.9921875,"speaker":"A"},{"text":"a","start":2502820,"end":2502940,"confidence":1,"speaker":"A"},{"text":"look,","start":2502940,"end":2503140,"confidence":0.9995117,"speaker":"A"},{"text":"see","start":2503140,"end":2503380,"confidence":0.99902344,"speaker":"A"},{"text":"if","start":2503380,"end":2503500,"confidence":1,"speaker":"A"},{"text":"I","start":2503500,"end":2503580,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":2503580,"end":2503740,"confidence":0.9995117,"speaker":"A"},{"text":"one.","start":2503740,"end":2504020,"confidence":0.9863281,"speaker":"A"}]},{"text":"I can show you. Oh, there's one scheduled.","start":2504020,"end":2507420,"confidence":0.99316406,"words":[{"text":"I","start":2504020,"end":2504260,"confidence":0.99316406,"speaker":"A"},{"text":"can","start":2504260,"end":2504420,"confidence":0.9458008,"speaker":"A"},{"text":"show","start":2504420,"end":2504580,"confidence":0.9995117,"speaker":"A"},{"text":"you.","start":2504580,"end":2504860,"confidence":0.9970703,"speaker":"A"},{"text":"Oh,","start":2505980,"end":2506180,"confidence":0.8977051,"speaker":"A"},{"text":"there's","start":2506180,"end":2506460,"confidence":0.91503906,"speaker":"A"},{"text":"one","start":2506460,"end":2506700,"confidence":0.99853516,"speaker":"A"},{"text":"scheduled.","start":2506700,"end":2507420,"confidence":0.97436523,"speaker":"A"}]},{"text":"Yeah, here we go. So there's 57 new restore images created, 177 updated. 234 Total. No operations failed. I also store Xcode versions and Swift versions.","start":2510060,"end":2525900,"confidence":0.97347003,"words":[{"text":"Yeah,","start":2510060,"end":2510460,"confidence":0.97347003,"speaker":"A"},{"text":"here","start":2510460,"end":2510660,"confidence":0.9995117,"speaker":"A"},{"text":"we","start":2510660,"end":2510780,"confidence":1,"speaker":"A"},{"text":"go.","start":2510780,"end":2511020,"confidence":0.9995117,"speaker":"A"},{"text":"So","start":2511260,"end":2511660,"confidence":0.8173828,"speaker":"A"},{"text":"there's","start":2512060,"end":2512700,"confidence":0.9090169,"speaker":"A"},{"text":"57","start":2513100,"end":2513700,"confidence":0.99829,"speaker":"A"},{"text":"new","start":2513700,"end":2514060,"confidence":0.98291016,"speaker":"A"},{"text":"restore","start":2514060,"end":2514580,"confidence":0.84936523,"speaker":"A"},{"text":"images","start":2514580,"end":2514980,"confidence":0.9980469,"speaker":"A"},{"text":"created,","start":2514980,"end":2515580,"confidence":0.9970703,"speaker":"A"},{"text":"177","start":2516300,"end":2517500,"confidence":0.95771,"speaker":"A"},{"text":"updated.","start":2517660,"end":2518300,"confidence":0.9980469,"speaker":"A"},{"text":"234","start":2518780,"end":2519900,"confidence":0.93447,"speaker":"A"},{"text":"total.","start":2519980,"end":2520380,"confidence":0.9995117,"speaker":"A"},{"text":"No","start":2521420,"end":2521740,"confidence":0.9970703,"speaker":"A"},{"text":"operations","start":2521740,"end":2522300,"confidence":0.9987793,"speaker":"A"},{"text":"failed.","start":2522380,"end":2523020,"confidence":0.9992676,"speaker":"A"},{"text":"I","start":2523100,"end":2523380,"confidence":0.9916992,"speaker":"A"},{"text":"also","start":2523380,"end":2523580,"confidence":0.99902344,"speaker":"A"},{"text":"store","start":2523580,"end":2523900,"confidence":0.77490234,"speaker":"A"},{"text":"Xcode","start":2523900,"end":2524340,"confidence":0.89245605,"speaker":"A"},{"text":"versions","start":2524340,"end":2524700,"confidence":0.9970703,"speaker":"A"},{"text":"and","start":2524700,"end":2524980,"confidence":0.9370117,"speaker":"A"},{"text":"Swift","start":2524980,"end":2525420,"confidence":0.9921875,"speaker":"A"},{"text":"versions.","start":2525420,"end":2525900,"confidence":0.9975586,"speaker":"A"}]},{"text":"Those get stored as well. Had to rebuild it, but here is the results. I'm not going to pull that up, but it's essentially updated my CloudKit database and that's all in the public database. And then maybe even by the time I present this, I'll have a working example in Bushel with that example working, which would be awesome. Celestra, same idea.","start":2526780,"end":2554870,"confidence":0.99853516,"words":[{"text":"Those","start":2526780,"end":2527100,"confidence":0.99853516,"speaker":"A"},{"text":"get","start":2527100,"end":2527300,"confidence":0.99902344,"speaker":"A"},{"text":"stored","start":2527300,"end":2527620,"confidence":0.99853516,"speaker":"A"},{"text":"as","start":2527620,"end":2527780,"confidence":0.9995117,"speaker":"A"},{"text":"well.","start":2527780,"end":2528060,"confidence":0.9995117,"speaker":"A"},{"text":"Had","start":2529420,"end":2529700,"confidence":0.89697266,"speaker":"A"},{"text":"to","start":2529700,"end":2529860,"confidence":0.9736328,"speaker":"A"},{"text":"rebuild","start":2529860,"end":2530180,"confidence":0.9995117,"speaker":"A"},{"text":"it,","start":2530180,"end":2530460,"confidence":0.9975586,"speaker":"A"},{"text":"but","start":2530630,"end":2530790,"confidence":0.99902344,"speaker":"A"},{"text":"here","start":2530790,"end":2531070,"confidence":1,"speaker":"A"},{"text":"is","start":2531070,"end":2531310,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":2531310,"end":2531510,"confidence":1,"speaker":"A"},{"text":"results.","start":2531510,"end":2531830,"confidence":0.98046875,"speaker":"A"},{"text":"I'm","start":2533750,"end":2534070,"confidence":0.9995117,"speaker":"A"},{"text":"not","start":2534070,"end":2534190,"confidence":0.9995117,"speaker":"A"},{"text":"going","start":2534190,"end":2534310,"confidence":0.9140625,"speaker":"A"},{"text":"to","start":2534310,"end":2534390,"confidence":0.9995117,"speaker":"A"},{"text":"pull","start":2534390,"end":2534590,"confidence":0.99975586,"speaker":"A"},{"text":"that","start":2534590,"end":2534750,"confidence":0.99853516,"speaker":"A"},{"text":"up,","start":2534750,"end":2535030,"confidence":0.9995117,"speaker":"A"},{"text":"but","start":2535830,"end":2536110,"confidence":0.9995117,"speaker":"A"},{"text":"it's","start":2536110,"end":2536350,"confidence":0.9944661,"speaker":"A"},{"text":"essentially","start":2536350,"end":2536950,"confidence":0.9980469,"speaker":"A"},{"text":"updated","start":2537270,"end":2537750,"confidence":0.99853516,"speaker":"A"},{"text":"my","start":2537750,"end":2537990,"confidence":0.99609375,"speaker":"A"},{"text":"CloudKit","start":2537990,"end":2538710,"confidence":0.9953613,"speaker":"A"},{"text":"database","start":2538790,"end":2539510,"confidence":0.99902344,"speaker":"A"},{"text":"and","start":2542070,"end":2542470,"confidence":0.99658203,"speaker":"A"},{"text":"that's","start":2542550,"end":2542950,"confidence":0.9998372,"speaker":"A"},{"text":"all","start":2542950,"end":2543070,"confidence":0.9995117,"speaker":"A"},{"text":"in","start":2543070,"end":2543190,"confidence":0.9892578,"speaker":"A"},{"text":"the","start":2543190,"end":2543310,"confidence":0.99902344,"speaker":"A"},{"text":"public","start":2543310,"end":2543510,"confidence":1,"speaker":"A"},{"text":"database.","start":2543510,"end":2544030,"confidence":0.9991862,"speaker":"A"},{"text":"And","start":2544030,"end":2544150,"confidence":0.9980469,"speaker":"A"},{"text":"then","start":2544150,"end":2544390,"confidence":0.9980469,"speaker":"A"},{"text":"maybe","start":2545110,"end":2545470,"confidence":0.99975586,"speaker":"A"},{"text":"even","start":2545470,"end":2545670,"confidence":0.9995117,"speaker":"A"},{"text":"by","start":2545670,"end":2545870,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2545870,"end":2546030,"confidence":0.9995117,"speaker":"A"},{"text":"time","start":2546030,"end":2546190,"confidence":1,"speaker":"A"},{"text":"I","start":2546190,"end":2546310,"confidence":0.99560547,"speaker":"A"},{"text":"present","start":2546310,"end":2546550,"confidence":0.9995117,"speaker":"A"},{"text":"this,","start":2546550,"end":2546869,"confidence":0.9995117,"speaker":"A"},{"text":"I'll","start":2546869,"end":2547110,"confidence":0.99902344,"speaker":"A"},{"text":"have","start":2547110,"end":2547310,"confidence":0.99853516,"speaker":"A"},{"text":"a","start":2547310,"end":2547550,"confidence":0.97314453,"speaker":"A"},{"text":"working","start":2547550,"end":2547830,"confidence":0.99902344,"speaker":"A"},{"text":"example","start":2547830,"end":2548350,"confidence":0.9814453,"speaker":"A"},{"text":"in","start":2548350,"end":2548510,"confidence":0.7578125,"speaker":"A"},{"text":"Bushel","start":2548510,"end":2548950,"confidence":0.9241536,"speaker":"A"},{"text":"with","start":2548950,"end":2549150,"confidence":1,"speaker":"A"},{"text":"that","start":2549150,"end":2549390,"confidence":0.9975586,"speaker":"A"},{"text":"example","start":2549390,"end":2549910,"confidence":0.9869792,"speaker":"A"},{"text":"working,","start":2549910,"end":2550230,"confidence":0.99902344,"speaker":"A"},{"text":"which","start":2550630,"end":2550910,"confidence":0.93310547,"speaker":"A"},{"text":"would","start":2550910,"end":2551070,"confidence":0.9277344,"speaker":"A"},{"text":"be","start":2551070,"end":2551230,"confidence":0.9995117,"speaker":"A"},{"text":"awesome.","start":2551230,"end":2551670,"confidence":0.99886066,"speaker":"A"},{"text":"Celestra,","start":2552870,"end":2553750,"confidence":0.7898763,"speaker":"A"},{"text":"same","start":2553990,"end":2554310,"confidence":0.99853516,"speaker":"A"},{"text":"idea.","start":2554310,"end":2554870,"confidence":0.998291,"speaker":"A"}]},{"text":"So this looks like it was a RSS update. We get the workflow file and. Oh, sorry, I should point out, because you're probably wondering where is all these. The stuff all these secrets stored? Yes, they are stored in Actions secrets right here.","start":2555030,"end":2573070,"confidence":0.9970703,"words":[{"text":"So","start":2555030,"end":2555310,"confidence":0.9970703,"speaker":"A"},{"text":"this","start":2555310,"end":2555470,"confidence":0.9916992,"speaker":"A"},{"text":"looks","start":2555470,"end":2555670,"confidence":0.99975586,"speaker":"A"},{"text":"like","start":2555670,"end":2555790,"confidence":0.9995117,"speaker":"A"},{"text":"it","start":2555790,"end":2555910,"confidence":0.9824219,"speaker":"A"},{"text":"was","start":2555910,"end":2555990,"confidence":0.9975586,"speaker":"A"},{"text":"a","start":2555990,"end":2556110,"confidence":0.80810547,"speaker":"A"},{"text":"RSS","start":2556110,"end":2556630,"confidence":0.72924805,"speaker":"A"},{"text":"update.","start":2556630,"end":2557190,"confidence":0.9975586,"speaker":"A"},{"text":"We","start":2558910,"end":2559030,"confidence":0.9663086,"speaker":"A"},{"text":"get","start":2559030,"end":2559150,"confidence":0.5415039,"speaker":"A"},{"text":"the","start":2559150,"end":2559270,"confidence":0.9970703,"speaker":"A"},{"text":"workflow","start":2559270,"end":2559790,"confidence":0.9992676,"speaker":"A"},{"text":"file","start":2559790,"end":2560190,"confidence":0.79589844,"speaker":"A"},{"text":"and.","start":2562510,"end":2562830,"confidence":0.8984375,"speaker":"A"},{"text":"Oh,","start":2562830,"end":2563150,"confidence":0.78930664,"speaker":"A"},{"text":"sorry,","start":2563150,"end":2563430,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":2563430,"end":2563590,"confidence":0.99902344,"speaker":"A"},{"text":"should","start":2563590,"end":2563830,"confidence":0.9995117,"speaker":"A"},{"text":"point","start":2563830,"end":2564070,"confidence":1,"speaker":"A"},{"text":"out,","start":2564070,"end":2564270,"confidence":1,"speaker":"A"},{"text":"because","start":2564270,"end":2564470,"confidence":0.96191406,"speaker":"A"},{"text":"you're","start":2564470,"end":2564670,"confidence":0.9991862,"speaker":"A"},{"text":"probably","start":2564670,"end":2564870,"confidence":1,"speaker":"A"},{"text":"wondering","start":2564870,"end":2565270,"confidence":0.99121094,"speaker":"A"},{"text":"where","start":2565270,"end":2565510,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":2565510,"end":2565670,"confidence":0.88183594,"speaker":"A"},{"text":"all","start":2565670,"end":2565830,"confidence":0.99121094,"speaker":"A"},{"text":"these.","start":2565830,"end":2566110,"confidence":0.8798828,"speaker":"A"},{"text":"The","start":2566110,"end":2566390,"confidence":0.8417969,"speaker":"A"},{"text":"stuff","start":2566390,"end":2566710,"confidence":0.99853516,"speaker":"A"},{"text":"all","start":2566710,"end":2566950,"confidence":0.9892578,"speaker":"A"},{"text":"these","start":2566950,"end":2567110,"confidence":0.7866211,"speaker":"A"},{"text":"secrets","start":2567110,"end":2567510,"confidence":0.97875977,"speaker":"A"},{"text":"stored?","start":2567510,"end":2567870,"confidence":0.98657227,"speaker":"A"},{"text":"Yes,","start":2567870,"end":2568150,"confidence":0.99975586,"speaker":"A"},{"text":"they","start":2568150,"end":2568310,"confidence":0.99902344,"speaker":"A"},{"text":"are","start":2568310,"end":2568510,"confidence":0.99902344,"speaker":"A"},{"text":"stored","start":2568510,"end":2568990,"confidence":0.99731445,"speaker":"A"},{"text":"in","start":2569790,"end":2570150,"confidence":0.9765625,"speaker":"A"},{"text":"Actions","start":2570150,"end":2570830,"confidence":0.9909668,"speaker":"A"},{"text":"secrets","start":2570990,"end":2571790,"confidence":0.998291,"speaker":"A"},{"text":"right","start":2572430,"end":2572750,"confidence":0.99853516,"speaker":"A"},{"text":"here.","start":2572750,"end":2573070,"confidence":0.9995117,"speaker":"A"}]},{"text":"So we have our private key ID API key from Virtual Buddy. So that's all stored there. Here is Celestra. It's for updating RSS feeds. So it just basically goes through.","start":2573310,"end":2588490,"confidence":0.94384766,"words":[{"text":"So","start":2573310,"end":2573589,"confidence":0.94384766,"speaker":"A"},{"text":"we","start":2573589,"end":2573750,"confidence":1,"speaker":"A"},{"text":"have","start":2573750,"end":2573910,"confidence":1,"speaker":"A"},{"text":"our","start":2573910,"end":2574070,"confidence":0.8671875,"speaker":"A"},{"text":"private","start":2574070,"end":2574310,"confidence":0.9995117,"speaker":"A"},{"text":"key","start":2574310,"end":2574670,"confidence":0.9980469,"speaker":"A"},{"text":"ID","start":2575310,"end":2575710,"confidence":0.8774414,"speaker":"A"},{"text":"API","start":2576510,"end":2577070,"confidence":0.98535156,"speaker":"A"},{"text":"key","start":2577070,"end":2577390,"confidence":0.9970703,"speaker":"A"},{"text":"from","start":2577790,"end":2578190,"confidence":0.9995117,"speaker":"A"},{"text":"Virtual","start":2578190,"end":2578670,"confidence":0.99975586,"speaker":"A"},{"text":"Buddy.","start":2578670,"end":2579150,"confidence":0.97786456,"speaker":"A"},{"text":"So","start":2579550,"end":2579950,"confidence":0.9667969,"speaker":"A"},{"text":"that's","start":2580030,"end":2580430,"confidence":0.99625653,"speaker":"A"},{"text":"all","start":2580430,"end":2580550,"confidence":0.98779297,"speaker":"A"},{"text":"stored","start":2580550,"end":2580950,"confidence":0.9921875,"speaker":"A"},{"text":"there.","start":2580950,"end":2581230,"confidence":0.99658203,"speaker":"A"},{"text":"Here","start":2581870,"end":2582270,"confidence":0.99853516,"speaker":"A"},{"text":"is","start":2582350,"end":2582750,"confidence":0.9975586,"speaker":"A"},{"text":"Celestra.","start":2583150,"end":2583950,"confidence":0.8902995,"speaker":"A"},{"text":"It's","start":2584270,"end":2584710,"confidence":0.99886066,"speaker":"A"},{"text":"for","start":2584710,"end":2584910,"confidence":0.99902344,"speaker":"A"},{"text":"updating","start":2584910,"end":2585350,"confidence":0.9995117,"speaker":"A"},{"text":"RSS","start":2585350,"end":2585830,"confidence":0.9616699,"speaker":"A"},{"text":"feeds.","start":2585830,"end":2586350,"confidence":0.9967448,"speaker":"A"},{"text":"So","start":2587050,"end":2587130,"confidence":0.97216797,"speaker":"A"},{"text":"it","start":2587130,"end":2587210,"confidence":0.9663086,"speaker":"A"},{"text":"just","start":2587210,"end":2587370,"confidence":0.9951172,"speaker":"A"},{"text":"basically","start":2587370,"end":2587810,"confidence":0.99975586,"speaker":"A"},{"text":"goes","start":2587810,"end":2588170,"confidence":0.9995117,"speaker":"A"},{"text":"through.","start":2588170,"end":2588490,"confidence":0.9995117,"speaker":"A"}]},{"text":"You can look at the Swift code it goes through, pulls RSS feeds and updates them into a CloudKit record or what do you call it? Yeah, record type. And I of course try to do it in such a way not to hammer people, but same idea, yeah, it goes ahead and it runs the binary it updates and then I also have like actual parameters that I take to to filter out, like which RSS feeds are high priority and which ones aren't based on the audience and etc. So yeah, so that's deployment. That's how you can get that working.","start":2588570,"end":2628410,"confidence":0.9995117,"words":[{"text":"You","start":2588570,"end":2588810,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":2588810,"end":2588930,"confidence":0.9995117,"speaker":"A"},{"text":"look","start":2588930,"end":2589090,"confidence":1,"speaker":"A"},{"text":"at","start":2589090,"end":2589210,"confidence":1,"speaker":"A"},{"text":"the","start":2589210,"end":2589290,"confidence":0.9951172,"speaker":"A"},{"text":"Swift","start":2589290,"end":2589610,"confidence":0.99902344,"speaker":"A"},{"text":"code","start":2589610,"end":2589930,"confidence":0.976888,"speaker":"A"},{"text":"it","start":2589930,"end":2590130,"confidence":0.9995117,"speaker":"A"},{"text":"goes","start":2590130,"end":2590370,"confidence":0.9995117,"speaker":"A"},{"text":"through,","start":2590370,"end":2590610,"confidence":0.9995117,"speaker":"A"},{"text":"pulls","start":2590610,"end":2590970,"confidence":0.97249347,"speaker":"A"},{"text":"RSS","start":2590970,"end":2591370,"confidence":0.98217773,"speaker":"A"},{"text":"feeds","start":2591370,"end":2591890,"confidence":0.9975586,"speaker":"A"},{"text":"and","start":2591890,"end":2592090,"confidence":0.9975586,"speaker":"A"},{"text":"updates","start":2592090,"end":2592650,"confidence":0.9995117,"speaker":"A"},{"text":"them","start":2593050,"end":2593370,"confidence":0.98876953,"speaker":"A"},{"text":"into","start":2593370,"end":2593650,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":2593650,"end":2593850,"confidence":0.9970703,"speaker":"A"},{"text":"CloudKit","start":2593850,"end":2594490,"confidence":0.9980469,"speaker":"A"},{"text":"record","start":2595530,"end":2595930,"confidence":0.99902344,"speaker":"A"},{"text":"or","start":2596410,"end":2596810,"confidence":0.9975586,"speaker":"A"},{"text":"what","start":2596890,"end":2597130,"confidence":0.9321289,"speaker":"A"},{"text":"do","start":2597130,"end":2597210,"confidence":0.8364258,"speaker":"A"},{"text":"you","start":2597210,"end":2597290,"confidence":0.9980469,"speaker":"A"},{"text":"call","start":2597290,"end":2597370,"confidence":1,"speaker":"A"},{"text":"it?","start":2597370,"end":2597490,"confidence":0.9951172,"speaker":"A"},{"text":"Yeah,","start":2597490,"end":2597730,"confidence":0.9558919,"speaker":"A"},{"text":"record","start":2597730,"end":2598010,"confidence":0.99853516,"speaker":"A"},{"text":"type.","start":2598010,"end":2598490,"confidence":0.9250488,"speaker":"A"},{"text":"And","start":2599850,"end":2600130,"confidence":0.9638672,"speaker":"A"},{"text":"I","start":2600130,"end":2600290,"confidence":0.9946289,"speaker":"A"},{"text":"of","start":2600290,"end":2600410,"confidence":0.64501953,"speaker":"A"},{"text":"course","start":2600410,"end":2600570,"confidence":0.9995117,"speaker":"A"},{"text":"try","start":2600570,"end":2600770,"confidence":0.9506836,"speaker":"A"},{"text":"to","start":2600770,"end":2600890,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":2600890,"end":2600970,"confidence":1,"speaker":"A"},{"text":"it","start":2600970,"end":2601050,"confidence":0.9980469,"speaker":"A"},{"text":"in","start":2601050,"end":2601130,"confidence":0.98876953,"speaker":"A"},{"text":"such","start":2601130,"end":2601250,"confidence":1,"speaker":"A"},{"text":"a","start":2601250,"end":2601370,"confidence":0.96777344,"speaker":"A"},{"text":"way","start":2601370,"end":2601530,"confidence":1,"speaker":"A"},{"text":"not","start":2601530,"end":2601730,"confidence":0.99365234,"speaker":"A"},{"text":"to","start":2601730,"end":2601890,"confidence":0.9980469,"speaker":"A"},{"text":"hammer","start":2601890,"end":2602210,"confidence":0.9998372,"speaker":"A"},{"text":"people,","start":2602210,"end":2602490,"confidence":0.9995117,"speaker":"A"},{"text":"but","start":2602970,"end":2603370,"confidence":0.9902344,"speaker":"A"},{"text":"same","start":2603370,"end":2603690,"confidence":0.9941406,"speaker":"A"},{"text":"idea,","start":2603690,"end":2604170,"confidence":0.9914551,"speaker":"A"},{"text":"yeah,","start":2607050,"end":2607410,"confidence":0.96761066,"speaker":"A"},{"text":"it","start":2607410,"end":2607570,"confidence":0.99902344,"speaker":"A"},{"text":"goes","start":2607570,"end":2607770,"confidence":1,"speaker":"A"},{"text":"ahead","start":2607770,"end":2608010,"confidence":0.99853516,"speaker":"A"},{"text":"and","start":2608010,"end":2608330,"confidence":0.9921875,"speaker":"A"},{"text":"it","start":2608330,"end":2608570,"confidence":0.98828125,"speaker":"A"},{"text":"runs","start":2608570,"end":2609130,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2610330,"end":2610610,"confidence":0.9995117,"speaker":"A"},{"text":"binary","start":2610610,"end":2611210,"confidence":0.9991862,"speaker":"A"},{"text":"it","start":2611210,"end":2611530,"confidence":0.9711914,"speaker":"A"},{"text":"updates","start":2611530,"end":2612010,"confidence":0.9992676,"speaker":"A"},{"text":"and","start":2612170,"end":2612410,"confidence":0.98828125,"speaker":"A"},{"text":"then","start":2612410,"end":2612570,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":2612570,"end":2612770,"confidence":0.9995117,"speaker":"A"},{"text":"also","start":2612770,"end":2612970,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":2612970,"end":2613290,"confidence":0.99902344,"speaker":"A"},{"text":"like","start":2613290,"end":2613650,"confidence":0.9321289,"speaker":"A"},{"text":"actual","start":2613650,"end":2614170,"confidence":0.99853516,"speaker":"A"},{"text":"parameters","start":2615370,"end":2615890,"confidence":0.99902344,"speaker":"A"},{"text":"that","start":2615890,"end":2616010,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":2616010,"end":2616130,"confidence":0.9995117,"speaker":"A"},{"text":"take","start":2616130,"end":2616330,"confidence":1,"speaker":"A"},{"text":"to","start":2616330,"end":2616570,"confidence":0.97314453,"speaker":"A"},{"text":"to","start":2616570,"end":2616810,"confidence":0.9995117,"speaker":"A"},{"text":"filter","start":2616810,"end":2617170,"confidence":0.9663086,"speaker":"A"},{"text":"out,","start":2617170,"end":2617410,"confidence":1,"speaker":"A"},{"text":"like","start":2617410,"end":2617610,"confidence":0.99658203,"speaker":"A"},{"text":"which","start":2617610,"end":2617890,"confidence":0.99902344,"speaker":"A"},{"text":"RSS","start":2617890,"end":2618410,"confidence":0.99853516,"speaker":"A"},{"text":"feeds","start":2618410,"end":2618970,"confidence":0.9991862,"speaker":"A"},{"text":"are","start":2619290,"end":2619610,"confidence":0.96240234,"speaker":"A"},{"text":"high","start":2619610,"end":2619810,"confidence":1,"speaker":"A"},{"text":"priority","start":2619810,"end":2620170,"confidence":1,"speaker":"A"},{"text":"and","start":2620170,"end":2620330,"confidence":0.92626953,"speaker":"A"},{"text":"which","start":2620330,"end":2620450,"confidence":1,"speaker":"A"},{"text":"ones","start":2620450,"end":2620690,"confidence":0.9995117,"speaker":"A"},{"text":"aren't","start":2620690,"end":2621010,"confidence":0.99768066,"speaker":"A"},{"text":"based","start":2621010,"end":2621170,"confidence":1,"speaker":"A"},{"text":"on","start":2621170,"end":2621330,"confidence":1,"speaker":"A"},{"text":"the","start":2621330,"end":2621490,"confidence":0.99365234,"speaker":"A"},{"text":"audience","start":2621490,"end":2621770,"confidence":0.99853516,"speaker":"A"},{"text":"and","start":2621770,"end":2621970,"confidence":0.9975586,"speaker":"A"},{"text":"etc.","start":2621970,"end":2622650,"confidence":0.90723,"speaker":"A"},{"text":"So","start":2622650,"end":2623050,"confidence":0.9946289,"speaker":"A"},{"text":"yeah,","start":2623850,"end":2624330,"confidence":0.95377606,"speaker":"A"},{"text":"so","start":2624890,"end":2625170,"confidence":0.99853516,"speaker":"A"},{"text":"that's","start":2625170,"end":2625450,"confidence":0.9946289,"speaker":"A"},{"text":"deployment.","start":2625450,"end":2626170,"confidence":0.9991862,"speaker":"A"},{"text":"That's","start":2627050,"end":2627450,"confidence":0.9998372,"speaker":"A"},{"text":"how","start":2627450,"end":2627530,"confidence":1,"speaker":"A"},{"text":"you","start":2627530,"end":2627650,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":2627650,"end":2627770,"confidence":1,"speaker":"A"},{"text":"get","start":2627770,"end":2627890,"confidence":1,"speaker":"A"},{"text":"that","start":2627890,"end":2628090,"confidence":1,"speaker":"A"},{"text":"working.","start":2628090,"end":2628410,"confidence":0.9995117,"speaker":"A"}]},{"text":"There's weird stuff with cloud with GitHub that I've noticed. If you haven't updated it in a while, it doesn't run these cron jobs. So I need to figure out a how to get around it or find another service to do it. This is all free because it's public and it is running on Ubuntu. So that's really great.","start":2628810,"end":2649870,"confidence":0.9996745,"words":[{"text":"There's","start":2628810,"end":2629250,"confidence":0.9996745,"speaker":"A"},{"text":"weird","start":2629250,"end":2629490,"confidence":1,"speaker":"A"},{"text":"stuff","start":2629490,"end":2629690,"confidence":1,"speaker":"A"},{"text":"with","start":2629690,"end":2629850,"confidence":0.99609375,"speaker":"A"},{"text":"cloud","start":2629850,"end":2630290,"confidence":0.8815918,"speaker":"A"},{"text":"with","start":2630290,"end":2630650,"confidence":0.9873047,"speaker":"A"},{"text":"GitHub","start":2630810,"end":2631530,"confidence":0.99853516,"speaker":"A"},{"text":"that","start":2632730,"end":2633130,"confidence":0.9975586,"speaker":"A"},{"text":"I've","start":2633690,"end":2634010,"confidence":1,"speaker":"A"},{"text":"noticed.","start":2634010,"end":2634330,"confidence":0.99869794,"speaker":"A"},{"text":"If","start":2634330,"end":2634530,"confidence":0.9975586,"speaker":"A"},{"text":"you","start":2634530,"end":2634730,"confidence":0.9995117,"speaker":"A"},{"text":"haven't","start":2634730,"end":2635010,"confidence":0.9984131,"speaker":"A"},{"text":"updated","start":2635010,"end":2635370,"confidence":0.9995117,"speaker":"A"},{"text":"it","start":2635370,"end":2635610,"confidence":0.96240234,"speaker":"A"},{"text":"in","start":2635610,"end":2635810,"confidence":0.99902344,"speaker":"A"},{"text":"a","start":2635810,"end":2635970,"confidence":0.99560547,"speaker":"A"},{"text":"while,","start":2635970,"end":2636250,"confidence":0.9995117,"speaker":"A"},{"text":"it","start":2636250,"end":2636530,"confidence":1,"speaker":"A"},{"text":"doesn't","start":2636530,"end":2636770,"confidence":0.9998372,"speaker":"A"},{"text":"run","start":2636770,"end":2636970,"confidence":0.99853516,"speaker":"A"},{"text":"these","start":2636970,"end":2637210,"confidence":0.96777344,"speaker":"A"},{"text":"cron","start":2637210,"end":2637490,"confidence":0.90527344,"speaker":"A"},{"text":"jobs.","start":2637490,"end":2637770,"confidence":0.99072266,"speaker":"A"},{"text":"So","start":2637770,"end":2637850,"confidence":0.9951172,"speaker":"A"},{"text":"I","start":2637850,"end":2637930,"confidence":1,"speaker":"A"},{"text":"need","start":2637930,"end":2638050,"confidence":1,"speaker":"A"},{"text":"to","start":2638050,"end":2638170,"confidence":0.99902344,"speaker":"A"},{"text":"figure","start":2638170,"end":2638330,"confidence":0.99975586,"speaker":"A"},{"text":"out","start":2638330,"end":2638490,"confidence":0.98828125,"speaker":"A"},{"text":"a","start":2638490,"end":2638690,"confidence":0.89941406,"speaker":"A"},{"text":"how","start":2638690,"end":2638850,"confidence":0.99853516,"speaker":"A"},{"text":"to","start":2638850,"end":2638970,"confidence":0.9995117,"speaker":"A"},{"text":"get","start":2638970,"end":2639050,"confidence":0.9995117,"speaker":"A"},{"text":"around","start":2639050,"end":2639210,"confidence":0.99853516,"speaker":"A"},{"text":"it","start":2639210,"end":2639410,"confidence":0.9238281,"speaker":"A"},{"text":"or","start":2639410,"end":2639570,"confidence":0.9995117,"speaker":"A"},{"text":"find","start":2639570,"end":2639730,"confidence":0.9995117,"speaker":"A"},{"text":"another","start":2639730,"end":2640010,"confidence":0.9477539,"speaker":"A"},{"text":"service","start":2640090,"end":2640450,"confidence":0.9819336,"speaker":"A"},{"text":"to","start":2640450,"end":2640650,"confidence":0.9970703,"speaker":"A"},{"text":"do","start":2640650,"end":2640730,"confidence":0.99902344,"speaker":"A"},{"text":"it.","start":2640730,"end":2640970,"confidence":0.9975586,"speaker":"A"},{"text":"This","start":2642830,"end":2642950,"confidence":0.9897461,"speaker":"A"},{"text":"is","start":2642950,"end":2643110,"confidence":0.9975586,"speaker":"A"},{"text":"all","start":2643110,"end":2643270,"confidence":0.9995117,"speaker":"A"},{"text":"free","start":2643270,"end":2643550,"confidence":1,"speaker":"A"},{"text":"because","start":2643630,"end":2644030,"confidence":0.9995117,"speaker":"A"},{"text":"it's","start":2644110,"end":2644590,"confidence":0.99934894,"speaker":"A"},{"text":"public","start":2644590,"end":2644870,"confidence":1,"speaker":"A"},{"text":"and","start":2644870,"end":2645230,"confidence":0.7548828,"speaker":"A"},{"text":"it","start":2646990,"end":2647310,"confidence":0.99902344,"speaker":"A"},{"text":"is","start":2647310,"end":2647550,"confidence":0.9995117,"speaker":"A"},{"text":"running","start":2647550,"end":2647870,"confidence":0.9987793,"speaker":"A"},{"text":"on","start":2647870,"end":2647990,"confidence":0.7963867,"speaker":"A"},{"text":"Ubuntu.","start":2647990,"end":2648590,"confidence":0.8631836,"speaker":"A"},{"text":"So","start":2648670,"end":2648910,"confidence":0.9980469,"speaker":"A"},{"text":"that's","start":2648910,"end":2649310,"confidence":0.99934894,"speaker":"A"},{"text":"really","start":2649310,"end":2649550,"confidence":1,"speaker":"A"},{"text":"great.","start":2649550,"end":2649870,"confidence":0.99902344,"speaker":"A"}]},{"text":"And the storage on CloudKit is dirt cheap, which is even more awesome.","start":2652350,"end":2656830,"confidence":0.9838867,"words":[{"text":"And","start":2652350,"end":2652750,"confidence":0.9838867,"speaker":"A"},{"text":"the","start":2652830,"end":2653110,"confidence":0.9995117,"speaker":"A"},{"text":"storage","start":2653110,"end":2653430,"confidence":1,"speaker":"A"},{"text":"on","start":2653430,"end":2653590,"confidence":0.9951172,"speaker":"A"},{"text":"CloudKit","start":2653590,"end":2654150,"confidence":0.94189453,"speaker":"A"},{"text":"is","start":2654150,"end":2654310,"confidence":0.99902344,"speaker":"A"},{"text":"dirt","start":2654310,"end":2654590,"confidence":0.8517253,"speaker":"A"},{"text":"cheap,","start":2654590,"end":2654990,"confidence":0.8378906,"speaker":"A"},{"text":"which","start":2655390,"end":2655670,"confidence":0.99902344,"speaker":"A"},{"text":"is","start":2655670,"end":2655830,"confidence":1,"speaker":"A"},{"text":"even","start":2655830,"end":2656070,"confidence":1,"speaker":"A"},{"text":"more","start":2656070,"end":2656310,"confidence":1,"speaker":"A"},{"text":"awesome.","start":2656310,"end":2656830,"confidence":0.99886066,"speaker":"A"}]},{"text":"Sorry, let's see what else. I just want to make sure I covered all my slides. The last thing I'm going to talk about is just what are my plans? Excuse me. So I don't know if you check.","start":2660030,"end":2672790,"confidence":0.99593097,"words":[{"text":"Sorry,","start":2660030,"end":2660590,"confidence":0.99593097,"speaker":"A"},{"text":"let's","start":2660990,"end":2661350,"confidence":0.89501953,"speaker":"A"},{"text":"see","start":2661350,"end":2661550,"confidence":0.9848633,"speaker":"A"},{"text":"what","start":2661550,"end":2661750,"confidence":0.99609375,"speaker":"A"},{"text":"else.","start":2661750,"end":2662110,"confidence":0.99975586,"speaker":"A"},{"text":"I","start":2663630,"end":2663870,"confidence":0.9682617,"speaker":"A"},{"text":"just","start":2663870,"end":2663990,"confidence":0.9824219,"speaker":"A"},{"text":"want","start":2663990,"end":2664110,"confidence":0.75878906,"speaker":"A"},{"text":"to","start":2664110,"end":2664230,"confidence":0.7807617,"speaker":"A"},{"text":"make","start":2664230,"end":2664350,"confidence":0.9995117,"speaker":"A"},{"text":"sure","start":2664350,"end":2664430,"confidence":1,"speaker":"A"},{"text":"I","start":2664430,"end":2664550,"confidence":0.98779297,"speaker":"A"},{"text":"covered","start":2664550,"end":2664870,"confidence":0.99975586,"speaker":"A"},{"text":"all","start":2664870,"end":2665070,"confidence":0.99902344,"speaker":"A"},{"text":"my","start":2665070,"end":2665390,"confidence":0.9970703,"speaker":"A"},{"text":"slides.","start":2665630,"end":2666150,"confidence":0.99975586,"speaker":"A"},{"text":"The","start":2666150,"end":2666390,"confidence":0.9995117,"speaker":"A"},{"text":"last","start":2666390,"end":2666590,"confidence":1,"speaker":"A"},{"text":"thing","start":2666590,"end":2666790,"confidence":1,"speaker":"A"},{"text":"I'm","start":2666790,"end":2666990,"confidence":0.9980469,"speaker":"A"},{"text":"going","start":2666990,"end":2667070,"confidence":0.96777344,"speaker":"A"},{"text":"to","start":2667070,"end":2667150,"confidence":0.9995117,"speaker":"A"},{"text":"talk","start":2667150,"end":2667270,"confidence":1,"speaker":"A"},{"text":"about","start":2667270,"end":2667470,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":2667470,"end":2667670,"confidence":0.9941406,"speaker":"A"},{"text":"just","start":2667670,"end":2667830,"confidence":0.9941406,"speaker":"A"},{"text":"what","start":2667830,"end":2667990,"confidence":0.99853516,"speaker":"A"},{"text":"are","start":2667990,"end":2668150,"confidence":0.99902344,"speaker":"A"},{"text":"my","start":2668150,"end":2668310,"confidence":1,"speaker":"A"},{"text":"plans?","start":2668310,"end":2668670,"confidence":0.92578125,"speaker":"A"},{"text":"Excuse","start":2670390,"end":2670750,"confidence":0.9793294,"speaker":"A"},{"text":"me.","start":2670750,"end":2671030,"confidence":1,"speaker":"A"},{"text":"So","start":2671510,"end":2671790,"confidence":0.9980469,"speaker":"A"},{"text":"I","start":2671790,"end":2671910,"confidence":0.9995117,"speaker":"A"},{"text":"don't","start":2671910,"end":2672070,"confidence":0.99934894,"speaker":"A"},{"text":"know","start":2672070,"end":2672150,"confidence":1,"speaker":"A"},{"text":"if","start":2672150,"end":2672230,"confidence":1,"speaker":"A"},{"text":"you","start":2672230,"end":2672390,"confidence":0.9995117,"speaker":"A"},{"text":"check.","start":2672390,"end":2672790,"confidence":0.7727051,"speaker":"A"}]},{"text":"Follow me. But I just released.","start":2672790,"end":2674550,"confidence":0.9663086,"words":[{"text":"Follow","start":2672790,"end":2673150,"confidence":0.9663086,"speaker":"A"},{"text":"me.","start":2673150,"end":2673390,"confidence":1,"speaker":"A"},{"text":"But","start":2673390,"end":2673550,"confidence":0.99853516,"speaker":"A"},{"text":"I","start":2673550,"end":2673710,"confidence":0.9995117,"speaker":"A"},{"text":"just","start":2673710,"end":2673910,"confidence":0.99902344,"speaker":"A"},{"text":"released.","start":2673910,"end":2674550,"confidence":0.99975586,"speaker":"A"}]},{"text":"I just released Alpha 5 that has lookup zones, fetch, record changes and upload assets. Upload the assets is pretty awesome. When I saw that work because I was like, cool, I can actually upload a binary to CloudKit, which is awesome. We got query filters to work for in and not in, so you could do that I have plans to continue working on this because I think there's a big future for something like this for a lot of people.","start":2681910,"end":2706990,"confidence":0.98876953,"words":[{"text":"I","start":2681910,"end":2682190,"confidence":0.98876953,"speaker":"A"},{"text":"just","start":2682190,"end":2682350,"confidence":1,"speaker":"A"},{"text":"released","start":2682350,"end":2682710,"confidence":0.99975586,"speaker":"A"},{"text":"Alpha","start":2682710,"end":2683150,"confidence":0.85091144,"speaker":"A"},{"text":"5","start":2683150,"end":2683430,"confidence":0.99414,"speaker":"A"},{"text":"that","start":2684310,"end":2684630,"confidence":1,"speaker":"A"},{"text":"has","start":2684630,"end":2684909,"confidence":0.9995117,"speaker":"A"},{"text":"lookup","start":2684909,"end":2685390,"confidence":0.89086914,"speaker":"A"},{"text":"zones,","start":2685390,"end":2685750,"confidence":0.9760742,"speaker":"A"},{"text":"fetch,","start":2685750,"end":2686150,"confidence":0.9900716,"speaker":"A"},{"text":"record","start":2686150,"end":2686430,"confidence":0.9995117,"speaker":"A"},{"text":"changes","start":2686430,"end":2686870,"confidence":0.99975586,"speaker":"A"},{"text":"and","start":2686870,"end":2687030,"confidence":0.6220703,"speaker":"A"},{"text":"upload","start":2687030,"end":2687430,"confidence":0.71809894,"speaker":"A"},{"text":"assets.","start":2687430,"end":2687990,"confidence":1,"speaker":"A"},{"text":"Upload","start":2688310,"end":2688750,"confidence":0.9840495,"speaker":"A"},{"text":"the","start":2688750,"end":2688910,"confidence":0.7114258,"speaker":"A"},{"text":"assets","start":2688910,"end":2689270,"confidence":0.99902344,"speaker":"A"},{"text":"is","start":2689270,"end":2689470,"confidence":0.9814453,"speaker":"A"},{"text":"pretty","start":2689470,"end":2689710,"confidence":1,"speaker":"A"},{"text":"awesome.","start":2689710,"end":2690150,"confidence":1,"speaker":"A"},{"text":"When","start":2690230,"end":2690510,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":2690510,"end":2690670,"confidence":1,"speaker":"A"},{"text":"saw","start":2690670,"end":2690830,"confidence":1,"speaker":"A"},{"text":"that","start":2690830,"end":2691030,"confidence":0.9995117,"speaker":"A"},{"text":"work","start":2691030,"end":2691310,"confidence":0.99902344,"speaker":"A"},{"text":"because","start":2691310,"end":2691590,"confidence":1,"speaker":"A"},{"text":"I","start":2691590,"end":2691750,"confidence":0.9536133,"speaker":"A"},{"text":"was","start":2691750,"end":2691870,"confidence":0.9975586,"speaker":"A"},{"text":"like,","start":2691870,"end":2691990,"confidence":0.9980469,"speaker":"A"},{"text":"cool,","start":2691990,"end":2692190,"confidence":0.99853516,"speaker":"A"},{"text":"I","start":2692190,"end":2692310,"confidence":0.9951172,"speaker":"A"},{"text":"can","start":2692310,"end":2692470,"confidence":0.9970703,"speaker":"A"},{"text":"actually","start":2692470,"end":2692670,"confidence":0.9995117,"speaker":"A"},{"text":"upload","start":2692670,"end":2693030,"confidence":1,"speaker":"A"},{"text":"a","start":2693030,"end":2693150,"confidence":0.9951172,"speaker":"A"},{"text":"binary","start":2693150,"end":2693750,"confidence":0.99853516,"speaker":"A"},{"text":"to","start":2694630,"end":2694910,"confidence":0.96728516,"speaker":"A"},{"text":"CloudKit,","start":2694910,"end":2695510,"confidence":0.98046875,"speaker":"A"},{"text":"which","start":2695510,"end":2695710,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":2695710,"end":2695830,"confidence":0.9995117,"speaker":"A"},{"text":"awesome.","start":2695830,"end":2696230,"confidence":0.9998372,"speaker":"A"},{"text":"We","start":2697310,"end":2697430,"confidence":0.99121094,"speaker":"A"},{"text":"got","start":2697430,"end":2697630,"confidence":0.9946289,"speaker":"A"},{"text":"query","start":2697630,"end":2697990,"confidence":0.9836426,"speaker":"A"},{"text":"filters","start":2697990,"end":2698470,"confidence":0.9889323,"speaker":"A"},{"text":"to","start":2698470,"end":2698630,"confidence":0.99853516,"speaker":"A"},{"text":"work","start":2698630,"end":2698790,"confidence":1,"speaker":"A"},{"text":"for","start":2698790,"end":2698950,"confidence":0.9980469,"speaker":"A"},{"text":"in","start":2698950,"end":2699150,"confidence":0.88183594,"speaker":"A"},{"text":"and","start":2699150,"end":2699310,"confidence":0.9741211,"speaker":"A"},{"text":"not","start":2699310,"end":2699510,"confidence":0.98339844,"speaker":"A"},{"text":"in,","start":2699510,"end":2699870,"confidence":0.8652344,"speaker":"A"},{"text":"so","start":2699870,"end":2700110,"confidence":0.99853516,"speaker":"A"},{"text":"you","start":2700110,"end":2700190,"confidence":0.99853516,"speaker":"A"},{"text":"could","start":2700190,"end":2700350,"confidence":0.95410156,"speaker":"A"},{"text":"do","start":2700350,"end":2700550,"confidence":1,"speaker":"A"},{"text":"that","start":2700550,"end":2700830,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":2701470,"end":2701790,"confidence":0.99902344,"speaker":"A"},{"text":"have","start":2701790,"end":2702110,"confidence":0.9995117,"speaker":"A"},{"text":"plans","start":2702110,"end":2702630,"confidence":0.95043945,"speaker":"A"},{"text":"to","start":2702630,"end":2702750,"confidence":0.95166016,"speaker":"A"},{"text":"continue","start":2702750,"end":2702950,"confidence":0.9980469,"speaker":"A"},{"text":"working","start":2702950,"end":2703230,"confidence":0.9238281,"speaker":"A"},{"text":"on","start":2703230,"end":2703430,"confidence":0.99853516,"speaker":"A"},{"text":"this","start":2703430,"end":2703630,"confidence":0.99902344,"speaker":"A"},{"text":"because","start":2703630,"end":2703830,"confidence":0.9555664,"speaker":"A"},{"text":"I","start":2703830,"end":2703990,"confidence":0.9995117,"speaker":"A"},{"text":"think","start":2703990,"end":2704230,"confidence":0.99902344,"speaker":"A"},{"text":"there's","start":2704230,"end":2704710,"confidence":0.9991862,"speaker":"A"},{"text":"a","start":2704710,"end":2704830,"confidence":0.9995117,"speaker":"A"},{"text":"big","start":2704830,"end":2704990,"confidence":0.99902344,"speaker":"A"},{"text":"future","start":2704990,"end":2705270,"confidence":0.9970703,"speaker":"A"},{"text":"for","start":2705270,"end":2705510,"confidence":0.9995117,"speaker":"A"},{"text":"something","start":2705510,"end":2705750,"confidence":0.99560547,"speaker":"A"},{"text":"like","start":2705750,"end":2705990,"confidence":0.9995117,"speaker":"A"},{"text":"this","start":2705990,"end":2706190,"confidence":0.9995117,"speaker":"A"},{"text":"for","start":2706190,"end":2706390,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":2706390,"end":2706510,"confidence":0.9995117,"speaker":"A"},{"text":"lot","start":2706510,"end":2706590,"confidence":1,"speaker":"A"},{"text":"of","start":2706590,"end":2706710,"confidence":0.9995117,"speaker":"A"},{"text":"people.","start":2706710,"end":2706990,"confidence":0.9995117,"speaker":"A"}]},{"text":"Yes, you can technically use this in Android or Windows because the Swift thing does compile in Android and Windows. You can see I already added support for that. This is the support I recently had. And then we're. I'm just kind of like going through each of these because as great as AI is, it's not perfect.","start":2709150,"end":2727000,"confidence":0.9716797,"words":[{"text":"Yes,","start":2709150,"end":2709590,"confidence":0.9716797,"speaker":"A"},{"text":"you","start":2709590,"end":2709830,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":2709830,"end":2709990,"confidence":0.93603516,"speaker":"A"},{"text":"technically","start":2709990,"end":2710350,"confidence":0.9992676,"speaker":"A"},{"text":"use","start":2710350,"end":2710590,"confidence":0.9995117,"speaker":"A"},{"text":"this","start":2710590,"end":2710790,"confidence":0.98095703,"speaker":"A"},{"text":"in","start":2710790,"end":2710950,"confidence":0.9633789,"speaker":"A"},{"text":"Android","start":2710950,"end":2711470,"confidence":0.99934894,"speaker":"A"},{"text":"or","start":2711470,"end":2711710,"confidence":0.9995117,"speaker":"A"},{"text":"Windows","start":2711710,"end":2712270,"confidence":0.9972331,"speaker":"A"},{"text":"because","start":2712670,"end":2713070,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2713230,"end":2713510,"confidence":0.9970703,"speaker":"A"},{"text":"Swift","start":2713510,"end":2713950,"confidence":0.998291,"speaker":"A"},{"text":"thing","start":2714270,"end":2714590,"confidence":0.99902344,"speaker":"A"},{"text":"does","start":2714590,"end":2714830,"confidence":0.9995117,"speaker":"A"},{"text":"compile","start":2714830,"end":2715190,"confidence":0.99487305,"speaker":"A"},{"text":"in","start":2715190,"end":2715350,"confidence":0.78271484,"speaker":"A"},{"text":"Android","start":2715350,"end":2715750,"confidence":0.99853516,"speaker":"A"},{"text":"and","start":2715750,"end":2715910,"confidence":0.72753906,"speaker":"A"},{"text":"Windows.","start":2715910,"end":2716230,"confidence":0.99934894,"speaker":"A"},{"text":"You","start":2716230,"end":2716350,"confidence":0.9970703,"speaker":"A"},{"text":"can","start":2716350,"end":2716430,"confidence":0.88623047,"speaker":"A"},{"text":"see","start":2716430,"end":2716550,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":2716550,"end":2716670,"confidence":0.63378906,"speaker":"A"},{"text":"already","start":2716670,"end":2716830,"confidence":0.99560547,"speaker":"A"},{"text":"added","start":2716830,"end":2717110,"confidence":0.9819336,"speaker":"A"},{"text":"support","start":2717110,"end":2717430,"confidence":1,"speaker":"A"},{"text":"for","start":2717430,"end":2717670,"confidence":1,"speaker":"A"},{"text":"that.","start":2717670,"end":2717950,"confidence":0.9995117,"speaker":"A"},{"text":"This","start":2718430,"end":2718710,"confidence":0.99609375,"speaker":"A"},{"text":"is","start":2718710,"end":2718870,"confidence":0.9975586,"speaker":"A"},{"text":"the","start":2718870,"end":2719030,"confidence":0.88720703,"speaker":"A"},{"text":"support","start":2719030,"end":2719270,"confidence":0.9970703,"speaker":"A"},{"text":"I","start":2719270,"end":2719510,"confidence":0.99658203,"speaker":"A"},{"text":"recently","start":2719510,"end":2719790,"confidence":1,"speaker":"A"},{"text":"had.","start":2719870,"end":2720270,"confidence":0.9995117,"speaker":"A"},{"text":"And","start":2720750,"end":2721030,"confidence":0.9814453,"speaker":"A"},{"text":"then","start":2721030,"end":2721310,"confidence":0.99121094,"speaker":"A"},{"text":"we're.","start":2722120,"end":2722360,"confidence":0.77229816,"speaker":"A"},{"text":"I'm","start":2722360,"end":2722600,"confidence":0.9868164,"speaker":"A"},{"text":"just","start":2722600,"end":2722720,"confidence":0.9995117,"speaker":"A"},{"text":"kind","start":2722720,"end":2722840,"confidence":0.9946289,"speaker":"A"},{"text":"of","start":2722840,"end":2722960,"confidence":0.9370117,"speaker":"A"},{"text":"like","start":2722960,"end":2723200,"confidence":0.99609375,"speaker":"A"},{"text":"going","start":2723200,"end":2723480,"confidence":0.99902344,"speaker":"A"},{"text":"through","start":2723480,"end":2723720,"confidence":1,"speaker":"A"},{"text":"each","start":2723720,"end":2723920,"confidence":0.9995117,"speaker":"A"},{"text":"of","start":2723920,"end":2724040,"confidence":0.9995117,"speaker":"A"},{"text":"these","start":2724040,"end":2724280,"confidence":0.99902344,"speaker":"A"},{"text":"because","start":2724280,"end":2724680,"confidence":0.7866211,"speaker":"A"},{"text":"as","start":2724680,"end":2725000,"confidence":1,"speaker":"A"},{"text":"great","start":2725000,"end":2725240,"confidence":0.9951172,"speaker":"A"},{"text":"as","start":2725240,"end":2725480,"confidence":0.9946289,"speaker":"A"},{"text":"AI","start":2725480,"end":2725880,"confidence":0.8781738,"speaker":"A"},{"text":"is,","start":2725880,"end":2726160,"confidence":0.9946289,"speaker":"A"},{"text":"it's","start":2726160,"end":2726440,"confidence":0.9995117,"speaker":"A"},{"text":"not","start":2726440,"end":2726600,"confidence":0.9995117,"speaker":"A"},{"text":"perfect.","start":2726600,"end":2727000,"confidence":0.9840495,"speaker":"A"}]},{"text":"So we're just kind of going through these piece by piece with each version and hammering these away and then this is actually done. I don't even know why that's there. But yeah, I think system field integration might already be there and there's a few other things. Eventually I'd like to add support. So there, there's a whole API for CloudKit schema management that I could.","start":2727080,"end":2753200,"confidence":0.99853516,"words":[{"text":"So","start":2727080,"end":2727480,"confidence":0.99853516,"speaker":"A"},{"text":"we're","start":2728040,"end":2728360,"confidence":0.99934894,"speaker":"A"},{"text":"just","start":2728360,"end":2728440,"confidence":1,"speaker":"A"},{"text":"kind","start":2728440,"end":2728560,"confidence":0.99365234,"speaker":"A"},{"text":"of","start":2728560,"end":2728680,"confidence":0.98828125,"speaker":"A"},{"text":"going","start":2728680,"end":2728880,"confidence":0.99365234,"speaker":"A"},{"text":"through","start":2728880,"end":2729120,"confidence":1,"speaker":"A"},{"text":"these","start":2729120,"end":2729400,"confidence":0.98779297,"speaker":"A"},{"text":"piece","start":2729720,"end":2730120,"confidence":0.9848633,"speaker":"A"},{"text":"by","start":2730120,"end":2730360,"confidence":0.99902344,"speaker":"A"},{"text":"piece","start":2730360,"end":2730760,"confidence":0.9983724,"speaker":"A"},{"text":"with","start":2730840,"end":2731120,"confidence":0.9995117,"speaker":"A"},{"text":"each","start":2731120,"end":2731400,"confidence":0.9995117,"speaker":"A"},{"text":"version","start":2731640,"end":2732080,"confidence":0.99975586,"speaker":"A"},{"text":"and","start":2732080,"end":2732240,"confidence":0.5917969,"speaker":"A"},{"text":"hammering","start":2732240,"end":2732560,"confidence":0.9977214,"speaker":"A"},{"text":"these","start":2732560,"end":2732760,"confidence":0.99609375,"speaker":"A"},{"text":"away","start":2732760,"end":2733080,"confidence":0.9980469,"speaker":"A"},{"text":"and","start":2735400,"end":2735720,"confidence":0.9951172,"speaker":"A"},{"text":"then","start":2735720,"end":2736040,"confidence":0.9975586,"speaker":"A"},{"text":"this","start":2736680,"end":2736960,"confidence":0.9980469,"speaker":"A"},{"text":"is","start":2736960,"end":2737120,"confidence":0.99365234,"speaker":"A"},{"text":"actually","start":2737120,"end":2737360,"confidence":0.9995117,"speaker":"A"},{"text":"done.","start":2737360,"end":2737640,"confidence":0.9980469,"speaker":"A"},{"text":"I","start":2737640,"end":2737840,"confidence":0.9995117,"speaker":"A"},{"text":"don't","start":2737840,"end":2738000,"confidence":0.98844403,"speaker":"A"},{"text":"even","start":2738000,"end":2738159,"confidence":0.99902344,"speaker":"A"},{"text":"know","start":2738159,"end":2738279,"confidence":1,"speaker":"A"},{"text":"why","start":2738279,"end":2738400,"confidence":0.99902344,"speaker":"A"},{"text":"that's","start":2738400,"end":2738680,"confidence":0.9995117,"speaker":"A"},{"text":"there.","start":2738680,"end":2738880,"confidence":0.99853516,"speaker":"A"},{"text":"But","start":2738880,"end":2739240,"confidence":0.99658203,"speaker":"A"},{"text":"yeah,","start":2739640,"end":2740160,"confidence":0.99934894,"speaker":"A"},{"text":"I","start":2740160,"end":2740400,"confidence":0.83203125,"speaker":"A"},{"text":"think","start":2740400,"end":2740680,"confidence":0.92529297,"speaker":"A"},{"text":"system","start":2740680,"end":2741080,"confidence":0.9995117,"speaker":"A"},{"text":"field","start":2741080,"end":2741480,"confidence":0.9916992,"speaker":"A"},{"text":"integration","start":2741640,"end":2742280,"confidence":0.93859863,"speaker":"A"},{"text":"might","start":2742280,"end":2742480,"confidence":0.9980469,"speaker":"A"},{"text":"already","start":2742480,"end":2742720,"confidence":0.9995117,"speaker":"A"},{"text":"be","start":2742720,"end":2742960,"confidence":1,"speaker":"A"},{"text":"there","start":2742960,"end":2743240,"confidence":1,"speaker":"A"},{"text":"and","start":2743400,"end":2743680,"confidence":0.9980469,"speaker":"A"},{"text":"there's","start":2743680,"end":2743960,"confidence":0.99853516,"speaker":"A"},{"text":"a","start":2743960,"end":2744040,"confidence":0.9995117,"speaker":"A"},{"text":"few","start":2744040,"end":2744160,"confidence":0.9995117,"speaker":"A"},{"text":"other","start":2744160,"end":2744400,"confidence":1,"speaker":"A"},{"text":"things.","start":2744400,"end":2744760,"confidence":0.9995117,"speaker":"A"},{"text":"Eventually","start":2745960,"end":2746520,"confidence":0.9992676,"speaker":"A"},{"text":"I'd","start":2746520,"end":2746800,"confidence":0.92122394,"speaker":"A"},{"text":"like","start":2746800,"end":2746960,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":2746960,"end":2747160,"confidence":0.99902344,"speaker":"A"},{"text":"add","start":2747160,"end":2747480,"confidence":0.9975586,"speaker":"A"},{"text":"support.","start":2747880,"end":2748120,"confidence":0.9902344,"speaker":"A"},{"text":"So","start":2748200,"end":2748480,"confidence":0.99902344,"speaker":"A"},{"text":"there,","start":2748480,"end":2748720,"confidence":0.38134766,"speaker":"A"},{"text":"there's","start":2748720,"end":2749080,"confidence":0.9998372,"speaker":"A"},{"text":"a","start":2749080,"end":2749200,"confidence":0.9995117,"speaker":"A"},{"text":"whole","start":2749200,"end":2749440,"confidence":0.99975586,"speaker":"A"},{"text":"API","start":2749440,"end":2749880,"confidence":0.9975586,"speaker":"A"},{"text":"for","start":2749880,"end":2750120,"confidence":0.9975586,"speaker":"A"},{"text":"CloudKit","start":2750120,"end":2750760,"confidence":0.99609375,"speaker":"A"},{"text":"schema","start":2750760,"end":2751200,"confidence":0.8933919,"speaker":"A"},{"text":"management","start":2751200,"end":2751480,"confidence":0.99121094,"speaker":"A"},{"text":"that","start":2752600,"end":2752880,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":2752880,"end":2753000,"confidence":0.9658203,"speaker":"A"},{"text":"could.","start":2753000,"end":2753200,"confidence":0.8144531,"speaker":"A"}]},{"text":"That would be awesome if I could figure out how to do that. If I could figure out how to do key path query filtering, that would be fantastic.","start":2753200,"end":2759400,"confidence":0.99902344,"words":[{"text":"That","start":2753200,"end":2753440,"confidence":0.99902344,"speaker":"A"},{"text":"would","start":2753440,"end":2753560,"confidence":0.9995117,"speaker":"A"},{"text":"be","start":2753560,"end":2753680,"confidence":0.9995117,"speaker":"A"},{"text":"awesome","start":2753680,"end":2754080,"confidence":0.9998372,"speaker":"A"},{"text":"if","start":2754080,"end":2754320,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":2754320,"end":2754440,"confidence":0.9995117,"speaker":"A"},{"text":"could","start":2754440,"end":2754640,"confidence":0.9863281,"speaker":"A"},{"text":"figure","start":2754640,"end":2754920,"confidence":1,"speaker":"A"},{"text":"out","start":2754920,"end":2755040,"confidence":0.9995117,"speaker":"A"},{"text":"how","start":2755040,"end":2755200,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":2755200,"end":2755320,"confidence":1,"speaker":"A"},{"text":"do","start":2755320,"end":2755440,"confidence":0.9995117,"speaker":"A"},{"text":"that.","start":2755440,"end":2755720,"confidence":0.9995117,"speaker":"A"},{"text":"If","start":2755720,"end":2756000,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":2756000,"end":2756120,"confidence":0.9995117,"speaker":"A"},{"text":"could","start":2756120,"end":2756240,"confidence":0.84375,"speaker":"A"},{"text":"figure","start":2756240,"end":2756440,"confidence":1,"speaker":"A"},{"text":"out","start":2756440,"end":2756520,"confidence":0.9995117,"speaker":"A"},{"text":"how","start":2756520,"end":2756600,"confidence":0.99853516,"speaker":"A"},{"text":"to","start":2756600,"end":2756680,"confidence":0.9975586,"speaker":"A"},{"text":"do","start":2756680,"end":2756800,"confidence":0.9921875,"speaker":"A"},{"text":"key","start":2756800,"end":2756960,"confidence":0.9682617,"speaker":"A"},{"text":"path","start":2756960,"end":2757280,"confidence":0.953125,"speaker":"A"},{"text":"query","start":2757280,"end":2757600,"confidence":0.9951172,"speaker":"A"},{"text":"filtering,","start":2757600,"end":2758120,"confidence":0.99934894,"speaker":"A"},{"text":"that","start":2758120,"end":2758320,"confidence":0.99902344,"speaker":"A"},{"text":"would","start":2758320,"end":2758480,"confidence":0.9995117,"speaker":"A"},{"text":"be","start":2758480,"end":2758640,"confidence":0.9995117,"speaker":"A"},{"text":"fantastic.","start":2758640,"end":2759400,"confidence":0.99890137,"speaker":"A"}]},{"text":"And yeah, but there's a. I mean the basics is there as far as if you want to do anything with a record, it's pretty much there. One thing with Celestra is I'd love to be able to do like test out subscriptions and see how that works. So yeah, that's really the bulk of my presentation today. Now is. Now it's time to ask me a ton of questions and make me feel dumb.","start":2761720,"end":2785480,"confidence":0.9951172,"words":[{"text":"And","start":2761720,"end":2762120,"confidence":0.9951172,"speaker":"A"},{"text":"yeah,","start":2762280,"end":2762760,"confidence":0.9998372,"speaker":"A"},{"text":"but","start":2762760,"end":2762960,"confidence":0.9995117,"speaker":"A"},{"text":"there's","start":2762960,"end":2763200,"confidence":0.87320966,"speaker":"A"},{"text":"a.","start":2763200,"end":2763400,"confidence":0.92626953,"speaker":"A"},{"text":"I","start":2763400,"end":2763560,"confidence":0.9980469,"speaker":"A"},{"text":"mean","start":2763560,"end":2763799,"confidence":0.79785156,"speaker":"A"},{"text":"the","start":2763799,"end":2764120,"confidence":0.9995117,"speaker":"A"},{"text":"basics","start":2764120,"end":2764520,"confidence":0.998291,"speaker":"A"},{"text":"is","start":2764520,"end":2764760,"confidence":0.9941406,"speaker":"A"},{"text":"there","start":2764760,"end":2765040,"confidence":0.9995117,"speaker":"A"},{"text":"as","start":2765040,"end":2765280,"confidence":0.9995117,"speaker":"A"},{"text":"far","start":2765280,"end":2765440,"confidence":1,"speaker":"A"},{"text":"as","start":2765440,"end":2765640,"confidence":0.9995117,"speaker":"A"},{"text":"if","start":2765640,"end":2765840,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":2765840,"end":2765960,"confidence":0.99902344,"speaker":"A"},{"text":"want","start":2765960,"end":2766080,"confidence":0.77685547,"speaker":"A"},{"text":"to","start":2766080,"end":2766240,"confidence":0.9946289,"speaker":"A"},{"text":"do","start":2766240,"end":2766400,"confidence":1,"speaker":"A"},{"text":"anything","start":2766400,"end":2766760,"confidence":0.99975586,"speaker":"A"},{"text":"with","start":2766760,"end":2766960,"confidence":1,"speaker":"A"},{"text":"a","start":2766960,"end":2767120,"confidence":0.99560547,"speaker":"A"},{"text":"record,","start":2767120,"end":2767400,"confidence":0.99902344,"speaker":"A"},{"text":"it's","start":2768040,"end":2768400,"confidence":0.9983724,"speaker":"A"},{"text":"pretty","start":2768400,"end":2768600,"confidence":0.9998372,"speaker":"A"},{"text":"much","start":2768600,"end":2768760,"confidence":0.99853516,"speaker":"A"},{"text":"there.","start":2768760,"end":2769080,"confidence":0.98583984,"speaker":"A"},{"text":"One","start":2769720,"end":2770000,"confidence":0.9848633,"speaker":"A"},{"text":"thing","start":2770000,"end":2770160,"confidence":0.99853516,"speaker":"A"},{"text":"with","start":2770160,"end":2770320,"confidence":0.9995117,"speaker":"A"},{"text":"Celestra","start":2770320,"end":2770880,"confidence":0.7967122,"speaker":"A"},{"text":"is","start":2770880,"end":2771040,"confidence":0.8798828,"speaker":"A"},{"text":"I'd","start":2771040,"end":2771240,"confidence":0.9977214,"speaker":"A"},{"text":"love","start":2771240,"end":2771400,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":2771400,"end":2771560,"confidence":0.9995117,"speaker":"A"},{"text":"be","start":2771560,"end":2771720,"confidence":0.99902344,"speaker":"A"},{"text":"able","start":2771720,"end":2771920,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":2771920,"end":2772080,"confidence":1,"speaker":"A"},{"text":"do","start":2772080,"end":2772280,"confidence":1,"speaker":"A"},{"text":"like","start":2772280,"end":2772560,"confidence":0.99902344,"speaker":"A"},{"text":"test","start":2772560,"end":2772880,"confidence":0.99853516,"speaker":"A"},{"text":"out","start":2772880,"end":2773160,"confidence":0.9970703,"speaker":"A"},{"text":"subscriptions","start":2773160,"end":2773880,"confidence":0.9428711,"speaker":"A"},{"text":"and","start":2774200,"end":2774320,"confidence":0.94921875,"speaker":"A"},{"text":"see","start":2774320,"end":2774480,"confidence":0.9995117,"speaker":"A"},{"text":"how","start":2774480,"end":2774640,"confidence":1,"speaker":"A"},{"text":"that","start":2774640,"end":2774800,"confidence":1,"speaker":"A"},{"text":"works.","start":2774800,"end":2775240,"confidence":1,"speaker":"A"},{"text":"So","start":2775880,"end":2776280,"confidence":0.99609375,"speaker":"A"},{"text":"yeah,","start":2777320,"end":2777840,"confidence":0.9996745,"speaker":"A"},{"text":"that's","start":2777840,"end":2778200,"confidence":1,"speaker":"A"},{"text":"really","start":2778200,"end":2778360,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2778360,"end":2778560,"confidence":1,"speaker":"A"},{"text":"bulk","start":2778560,"end":2778800,"confidence":0.9817708,"speaker":"A"},{"text":"of","start":2778800,"end":2778960,"confidence":0.9995117,"speaker":"A"},{"text":"my","start":2778960,"end":2779120,"confidence":0.9995117,"speaker":"A"},{"text":"presentation","start":2779120,"end":2779720,"confidence":0.9995117,"speaker":"A"},{"text":"today.","start":2779720,"end":2780040,"confidence":0.99902344,"speaker":"A"},{"text":"Now","start":2781800,"end":2782160,"confidence":0.95751953,"speaker":"A"},{"text":"is.","start":2782160,"end":2782480,"confidence":0.8334961,"speaker":"A"},{"text":"Now","start":2782480,"end":2782720,"confidence":0.99902344,"speaker":"A"},{"text":"it's","start":2782720,"end":2782920,"confidence":0.99869794,"speaker":"A"},{"text":"time","start":2782920,"end":2783040,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":2783040,"end":2783160,"confidence":0.9995117,"speaker":"A"},{"text":"ask","start":2783160,"end":2783280,"confidence":0.99902344,"speaker":"A"},{"text":"me","start":2783280,"end":2783440,"confidence":0.99658203,"speaker":"A"},{"text":"a","start":2783440,"end":2783560,"confidence":0.99902344,"speaker":"A"},{"text":"ton","start":2783560,"end":2783720,"confidence":0.9992676,"speaker":"A"},{"text":"of","start":2783720,"end":2783840,"confidence":0.9995117,"speaker":"A"},{"text":"questions","start":2783840,"end":2784200,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":2784200,"end":2784480,"confidence":0.9814453,"speaker":"A"},{"text":"make","start":2784480,"end":2784720,"confidence":0.9995117,"speaker":"A"},{"text":"me","start":2784720,"end":2784880,"confidence":0.9995117,"speaker":"A"},{"text":"feel","start":2784880,"end":2785040,"confidence":1,"speaker":"A"},{"text":"dumb.","start":2785040,"end":2785480,"confidence":0.98706055,"speaker":"A"}]},{"text":"Go for it. No, there's a lot there to. To absorb. But I, I like the concept and I know you've been working on this for a while and I always thought it was a pretty cool, pretty cool idea and implementation of this. Questions?","start":2785880,"end":2803470,"confidence":0.99121094,"words":[{"text":"Go","start":2785880,"end":2786160,"confidence":0.99121094,"speaker":"A"},{"text":"for","start":2786160,"end":2786320,"confidence":0.9995117,"speaker":"A"},{"text":"it.","start":2786320,"end":2786600,"confidence":0.99853516,"speaker":"A"},{"text":"No,","start":2788440,"end":2788840,"confidence":0.95751953,"speaker":"B"},{"text":"there's","start":2789880,"end":2790319,"confidence":0.9355469,"speaker":"B"},{"text":"a","start":2790319,"end":2790440,"confidence":0.9995117,"speaker":"B"},{"text":"lot","start":2790440,"end":2790600,"confidence":0.9995117,"speaker":"B"},{"text":"there","start":2790600,"end":2790840,"confidence":0.99902344,"speaker":"B"},{"text":"to.","start":2790840,"end":2791160,"confidence":0.98828125,"speaker":"B"},{"text":"To","start":2791400,"end":2791720,"confidence":0.99902344,"speaker":"B"},{"text":"absorb.","start":2791720,"end":2792160,"confidence":0.99938965,"speaker":"B"},{"text":"But","start":2792160,"end":2792320,"confidence":0.9995117,"speaker":"B"},{"text":"I,","start":2792320,"end":2792600,"confidence":0.99121094,"speaker":"B"},{"text":"I","start":2792760,"end":2793120,"confidence":0.99658203,"speaker":"B"},{"text":"like","start":2793120,"end":2793400,"confidence":0.99902344,"speaker":"B"},{"text":"the","start":2793400,"end":2793640,"confidence":0.9995117,"speaker":"B"},{"text":"concept","start":2793640,"end":2794200,"confidence":0.976888,"speaker":"B"},{"text":"and","start":2794440,"end":2794720,"confidence":0.99560547,"speaker":"B"},{"text":"I","start":2794720,"end":2794840,"confidence":0.9995117,"speaker":"B"},{"text":"know","start":2794840,"end":2794960,"confidence":1,"speaker":"B"},{"text":"you've","start":2794960,"end":2795280,"confidence":0.99820966,"speaker":"B"},{"text":"been","start":2795280,"end":2795440,"confidence":0.9995117,"speaker":"B"},{"text":"working","start":2795440,"end":2795640,"confidence":0.9995117,"speaker":"B"},{"text":"on","start":2795640,"end":2795840,"confidence":0.9995117,"speaker":"B"},{"text":"this","start":2795840,"end":2796000,"confidence":0.9995117,"speaker":"B"},{"text":"for","start":2796000,"end":2796120,"confidence":0.9995117,"speaker":"B"},{"text":"a","start":2796120,"end":2796240,"confidence":0.99560547,"speaker":"B"},{"text":"while","start":2796240,"end":2796400,"confidence":1,"speaker":"B"},{"text":"and","start":2796400,"end":2796560,"confidence":0.9458008,"speaker":"B"},{"text":"I","start":2796560,"end":2796680,"confidence":0.9975586,"speaker":"B"},{"text":"always","start":2796680,"end":2796840,"confidence":0.99316406,"speaker":"B"},{"text":"thought","start":2796840,"end":2797040,"confidence":0.99853516,"speaker":"B"},{"text":"it","start":2797040,"end":2797160,"confidence":0.9970703,"speaker":"B"},{"text":"was","start":2797160,"end":2797280,"confidence":0.9951172,"speaker":"B"},{"text":"a","start":2797280,"end":2797440,"confidence":0.9663086,"speaker":"B"},{"text":"pretty","start":2797440,"end":2797640,"confidence":0.99869794,"speaker":"B"},{"text":"cool,","start":2797640,"end":2797960,"confidence":0.9980469,"speaker":"B"},{"text":"pretty","start":2799240,"end":2799560,"confidence":0.9943034,"speaker":"B"},{"text":"cool","start":2799560,"end":2799720,"confidence":0.88549805,"speaker":"B"},{"text":"idea","start":2800030,"end":2800350,"confidence":0.72094727,"speaker":"B"},{"text":"and","start":2800590,"end":2800910,"confidence":0.89404297,"speaker":"B"},{"text":"implementation","start":2800910,"end":2801630,"confidence":0.9941406,"speaker":"B"},{"text":"of","start":2801630,"end":2801910,"confidence":0.9770508,"speaker":"B"},{"text":"this.","start":2801910,"end":2802190,"confidence":0.9897461,"speaker":"B"},{"text":"Questions?","start":2802750,"end":2803470,"confidence":0.9904785,"speaker":"A"}]},{"text":"So with something like.","start":2808990,"end":2810030,"confidence":0.95214844,"words":[{"text":"So","start":2808990,"end":2809270,"confidence":0.95214844,"speaker":"C"},{"text":"with","start":2809270,"end":2809470,"confidence":0.9628906,"speaker":"C"},{"text":"something","start":2809470,"end":2809710,"confidence":0.9995117,"speaker":"C"},{"text":"like.","start":2809710,"end":2810030,"confidence":0.99853516,"speaker":"C"}]},{"text":"Accessing CloudKit through the web, is this setup more ideal for having your server do the authentication to CloudKit with Miskit or is miskit something that you could put into even like a client side, you know, like non Swift application or I guess not non Swift but like non like app application. I'm thinking in the context of like. A.","start":2814110,"end":2842049,"confidence":0.78027344,"words":[{"text":"Accessing","start":2814110,"end":2814750,"confidence":0.78027344,"speaker":"C"},{"text":"CloudKit","start":2814830,"end":2815430,"confidence":0.94202,"speaker":"C"},{"text":"through","start":2815430,"end":2815550,"confidence":0.9946289,"speaker":"C"},{"text":"the","start":2815550,"end":2815709,"confidence":0.99902344,"speaker":"C"},{"text":"web,","start":2815709,"end":2816109,"confidence":0.9916992,"speaker":"C"},{"text":"is","start":2816430,"end":2816830,"confidence":0.9995117,"speaker":"C"},{"text":"this","start":2817150,"end":2817510,"confidence":0.99853516,"speaker":"C"},{"text":"setup","start":2817510,"end":2817910,"confidence":0.95092773,"speaker":"C"},{"text":"more","start":2817910,"end":2818110,"confidence":0.9995117,"speaker":"C"},{"text":"ideal","start":2818110,"end":2818590,"confidence":0.9970703,"speaker":"C"},{"text":"for","start":2818670,"end":2819070,"confidence":0.9995117,"speaker":"C"},{"text":"having","start":2820270,"end":2820630,"confidence":0.9995117,"speaker":"C"},{"text":"your","start":2820630,"end":2820990,"confidence":1,"speaker":"C"},{"text":"server","start":2820990,"end":2821630,"confidence":1,"speaker":"C"},{"text":"do","start":2821870,"end":2822270,"confidence":0.9995117,"speaker":"C"},{"text":"the","start":2822670,"end":2822990,"confidence":0.9980469,"speaker":"C"},{"text":"authentication","start":2822990,"end":2823710,"confidence":1,"speaker":"C"},{"text":"to","start":2823950,"end":2824230,"confidence":0.9970703,"speaker":"C"},{"text":"CloudKit","start":2824230,"end":2824790,"confidence":0.9939,"speaker":"C"},{"text":"with","start":2824790,"end":2824950,"confidence":0.99560547,"speaker":"C"},{"text":"Miskit","start":2824950,"end":2825550,"confidence":0.9923096,"speaker":"C"},{"text":"or","start":2825970,"end":2826210,"confidence":0.9921875,"speaker":"C"},{"text":"is","start":2826290,"end":2826650,"confidence":0.9980469,"speaker":"C"},{"text":"miskit","start":2826650,"end":2827250,"confidence":0.93859863,"speaker":"C"},{"text":"something","start":2827250,"end":2827490,"confidence":0.99853516,"speaker":"C"},{"text":"that","start":2827490,"end":2827650,"confidence":0.99658203,"speaker":"C"},{"text":"you","start":2827650,"end":2827770,"confidence":0.9995117,"speaker":"C"},{"text":"could","start":2827770,"end":2827970,"confidence":0.9970703,"speaker":"C"},{"text":"put","start":2827970,"end":2828210,"confidence":0.9995117,"speaker":"C"},{"text":"into","start":2828210,"end":2828530,"confidence":0.99902344,"speaker":"C"},{"text":"even","start":2828530,"end":2828850,"confidence":0.99560547,"speaker":"C"},{"text":"like","start":2828850,"end":2829050,"confidence":0.9765625,"speaker":"C"},{"text":"a","start":2829050,"end":2829330,"confidence":0.5620117,"speaker":"C"},{"text":"client","start":2829330,"end":2829890,"confidence":0.9987793,"speaker":"C"},{"text":"side,","start":2830130,"end":2830530,"confidence":0.52978516,"speaker":"C"},{"text":"you","start":2832850,"end":2833170,"confidence":0.95751953,"speaker":"C"},{"text":"know,","start":2833170,"end":2833370,"confidence":0.9995117,"speaker":"C"},{"text":"like","start":2833370,"end":2833650,"confidence":0.98583984,"speaker":"C"},{"text":"non","start":2834690,"end":2835090,"confidence":0.99658203,"speaker":"C"},{"text":"Swift","start":2835810,"end":2836290,"confidence":0.99780273,"speaker":"C"},{"text":"application","start":2836290,"end":2836770,"confidence":0.9995117,"speaker":"C"},{"text":"or","start":2836770,"end":2837010,"confidence":0.9140625,"speaker":"C"},{"text":"I","start":2837010,"end":2837210,"confidence":0.6401367,"speaker":"C"},{"text":"guess","start":2837210,"end":2837490,"confidence":0.99975586,"speaker":"C"},{"text":"not","start":2837490,"end":2837730,"confidence":0.9628906,"speaker":"C"},{"text":"non","start":2837730,"end":2837930,"confidence":0.8105469,"speaker":"C"},{"text":"Swift","start":2837930,"end":2838250,"confidence":0.9489746,"speaker":"C"},{"text":"but","start":2838250,"end":2838410,"confidence":0.98876953,"speaker":"C"},{"text":"like","start":2838410,"end":2838610,"confidence":0.98583984,"speaker":"C"},{"text":"non","start":2838610,"end":2838930,"confidence":0.9560547,"speaker":"C"},{"text":"like","start":2839090,"end":2839410,"confidence":0.79785156,"speaker":"C"},{"text":"app","start":2839410,"end":2839690,"confidence":0.99609375,"speaker":"C"},{"text":"application.","start":2839690,"end":2840170,"confidence":0.99853516,"speaker":"C"},{"text":"I'm","start":2840170,"end":2840410,"confidence":0.99397784,"speaker":"C"},{"text":"thinking","start":2840410,"end":2840730,"confidence":0.8215332,"speaker":"C"},{"text":"in","start":2840730,"end":2840970,"confidence":0.6489258,"speaker":"C"},{"text":"the","start":2840970,"end":2841130,"confidence":0.9946289,"speaker":"C"},{"text":"context","start":2841130,"end":2841450,"confidence":0.98502606,"speaker":"C"},{"text":"of","start":2841450,"end":2841570,"confidence":0.99902344,"speaker":"C"},{"text":"like.","start":2841570,"end":2841730,"confidence":0.98876953,"speaker":"C"},{"text":"A.","start":2841730,"end":2842049,"confidence":0.71728516,"speaker":"A"}]},{"text":"I guess if I wanted to create a something accessing CloudKit that is not your typical Mac or iOS app. Can you be more specific? I'm looking into one. One approach would be browser extensions.","start":2845730,"end":2862560,"confidence":0.99658203,"words":[{"text":"I","start":2845730,"end":2845970,"confidence":0.99658203,"speaker":"C"},{"text":"guess","start":2845970,"end":2846170,"confidence":1,"speaker":"C"},{"text":"if","start":2846170,"end":2846290,"confidence":0.9970703,"speaker":"C"},{"text":"I","start":2846290,"end":2846410,"confidence":0.9995117,"speaker":"C"},{"text":"wanted","start":2846410,"end":2846730,"confidence":0.9848633,"speaker":"C"},{"text":"to","start":2846730,"end":2846930,"confidence":1,"speaker":"C"},{"text":"create","start":2846930,"end":2847250,"confidence":0.9995117,"speaker":"C"},{"text":"a","start":2847330,"end":2847730,"confidence":0.87939453,"speaker":"C"},{"text":"something","start":2849970,"end":2850290,"confidence":0.9970703,"speaker":"C"},{"text":"accessing","start":2850290,"end":2850810,"confidence":0.96655273,"speaker":"C"},{"text":"CloudKit","start":2850810,"end":2851330,"confidence":0.99853516,"speaker":"C"},{"text":"that","start":2851330,"end":2851490,"confidence":0.9995117,"speaker":"C"},{"text":"is","start":2851490,"end":2851610,"confidence":0.99902344,"speaker":"C"},{"text":"not","start":2851610,"end":2851810,"confidence":0.9995117,"speaker":"C"},{"text":"your","start":2851810,"end":2852010,"confidence":0.9995117,"speaker":"C"},{"text":"typical","start":2852010,"end":2852370,"confidence":1,"speaker":"C"},{"text":"Mac","start":2852370,"end":2852610,"confidence":0.99780273,"speaker":"C"},{"text":"or","start":2852610,"end":2852730,"confidence":0.9863281,"speaker":"C"},{"text":"iOS","start":2852730,"end":2853090,"confidence":0.9980469,"speaker":"C"},{"text":"app.","start":2853090,"end":2853410,"confidence":0.99853516,"speaker":"C"},{"text":"Can","start":2854880,"end":2855000,"confidence":0.9609375,"speaker":"A"},{"text":"you","start":2855000,"end":2855160,"confidence":0.8486328,"speaker":"A"},{"text":"be","start":2855160,"end":2855400,"confidence":0.9951172,"speaker":"A"},{"text":"more","start":2855400,"end":2855680,"confidence":1,"speaker":"A"},{"text":"specific?","start":2855680,"end":2856160,"confidence":0.99975586,"speaker":"A"},{"text":"I'm","start":2857840,"end":2858200,"confidence":0.99104816,"speaker":"C"},{"text":"looking","start":2858200,"end":2858480,"confidence":0.99902344,"speaker":"C"},{"text":"into","start":2858720,"end":2859120,"confidence":0.99560547,"speaker":"C"},{"text":"one.","start":2859280,"end":2859640,"confidence":0.45483398,"speaker":"C"},{"text":"One","start":2859640,"end":2859880,"confidence":1,"speaker":"C"},{"text":"approach","start":2859880,"end":2860120,"confidence":1,"speaker":"C"},{"text":"would","start":2860120,"end":2860400,"confidence":0.99560547,"speaker":"C"},{"text":"be","start":2860400,"end":2860720,"confidence":0.99853516,"speaker":"C"},{"text":"browser","start":2861600,"end":2862040,"confidence":0.9998372,"speaker":"C"},{"text":"extensions.","start":2862040,"end":2862560,"confidence":0.99869794,"speaker":"C"}]},{"text":"So for like a non Safari browser. Yes.","start":2865040,"end":2868240,"confidence":0.67871094,"words":[{"text":"So","start":2865040,"end":2865440,"confidence":0.67871094,"speaker":"A"},{"text":"for","start":2865680,"end":2866000,"confidence":0.9926758,"speaker":"A"},{"text":"like","start":2866000,"end":2866200,"confidence":0.9321289,"speaker":"A"},{"text":"a","start":2866200,"end":2866320,"confidence":0.99121094,"speaker":"A"},{"text":"non","start":2866320,"end":2866520,"confidence":0.99560547,"speaker":"A"},{"text":"Safari","start":2866520,"end":2867080,"confidence":0.9980469,"speaker":"A"},{"text":"browser.","start":2867080,"end":2867680,"confidence":0.99609375,"speaker":"A"},{"text":"Yes.","start":2867760,"end":2868240,"confidence":0.99121094,"speaker":"C"}]},{"text":"Yeah, this would be great. So basically the way you'd want that to work, like the sticky part to me would be getting the web authentication token. Other than that, like have at it.","start":2870400,"end":2881090,"confidence":0.9814453,"words":[{"text":"Yeah,","start":2870400,"end":2870720,"confidence":0.9814453,"speaker":"A"},{"text":"this","start":2870720,"end":2870840,"confidence":0.9975586,"speaker":"A"},{"text":"would","start":2870840,"end":2871000,"confidence":0.9975586,"speaker":"A"},{"text":"be","start":2871000,"end":2871160,"confidence":0.9995117,"speaker":"A"},{"text":"great.","start":2871160,"end":2871400,"confidence":1,"speaker":"A"},{"text":"So","start":2871400,"end":2871600,"confidence":0.96240234,"speaker":"A"},{"text":"basically","start":2871600,"end":2872000,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":2873040,"end":2873320,"confidence":0.9995117,"speaker":"A"},{"text":"way","start":2873320,"end":2873560,"confidence":0.9995117,"speaker":"A"},{"text":"you'd","start":2873560,"end":2873960,"confidence":0.98860675,"speaker":"A"},{"text":"want","start":2873960,"end":2874120,"confidence":1,"speaker":"A"},{"text":"that","start":2874120,"end":2874320,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":2874320,"end":2874560,"confidence":0.99853516,"speaker":"A"},{"text":"work,","start":2874560,"end":2874880,"confidence":0.99902344,"speaker":"A"},{"text":"like","start":2875040,"end":2875400,"confidence":0.73095703,"speaker":"A"},{"text":"the","start":2875400,"end":2875640,"confidence":0.9980469,"speaker":"A"},{"text":"sticky","start":2875640,"end":2876040,"confidence":0.9973958,"speaker":"A"},{"text":"part","start":2876040,"end":2876200,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":2876200,"end":2876360,"confidence":0.9980469,"speaker":"A"},{"text":"me","start":2876360,"end":2876560,"confidence":0.9995117,"speaker":"A"},{"text":"would","start":2876560,"end":2876760,"confidence":0.9980469,"speaker":"A"},{"text":"be","start":2876760,"end":2876920,"confidence":0.9995117,"speaker":"A"},{"text":"getting","start":2876920,"end":2877120,"confidence":0.9980469,"speaker":"A"},{"text":"the","start":2877120,"end":2877320,"confidence":0.99902344,"speaker":"A"},{"text":"web","start":2877320,"end":2877560,"confidence":0.998291,"speaker":"A"},{"text":"authentication","start":2877560,"end":2878240,"confidence":0.92614746,"speaker":"A"},{"text":"token.","start":2878240,"end":2878640,"confidence":0.99934894,"speaker":"A"},{"text":"Other","start":2878640,"end":2878880,"confidence":0.99316406,"speaker":"A"},{"text":"than","start":2878880,"end":2879080,"confidence":0.99560547,"speaker":"A"},{"text":"that,","start":2879080,"end":2879360,"confidence":0.97509766,"speaker":"A"},{"text":"like","start":2879440,"end":2879840,"confidence":0.7050781,"speaker":"A"},{"text":"have","start":2880370,"end":2880530,"confidence":0.9765625,"speaker":"A"},{"text":"at","start":2880530,"end":2880770,"confidence":0.515625,"speaker":"A"},{"text":"it.","start":2880770,"end":2881090,"confidence":0.9980469,"speaker":"A"}]},{"text":"So I'm gonna, I'm gonna be devil's advocate. Why not just use the CloudKit JavaScript library. If it's an extension, my brain jumps to Swift first. Right. But it's the reason I'm asking that is like it's a, it's already a web extension.","start":2884610,"end":2900890,"confidence":0.97802734,"words":[{"text":"So","start":2884610,"end":2884890,"confidence":0.97802734,"speaker":"A"},{"text":"I'm","start":2884890,"end":2885050,"confidence":0.98339844,"speaker":"A"},{"text":"gonna,","start":2885050,"end":2885250,"confidence":0.8352051,"speaker":"A"},{"text":"I'm","start":2885250,"end":2885410,"confidence":0.9949544,"speaker":"A"},{"text":"gonna","start":2885410,"end":2885570,"confidence":0.9736328,"speaker":"A"},{"text":"be","start":2885570,"end":2885690,"confidence":0.99853516,"speaker":"A"},{"text":"devil's","start":2885690,"end":2886050,"confidence":0.9608154,"speaker":"A"},{"text":"advocate.","start":2886050,"end":2886610,"confidence":0.9995117,"speaker":"A"},{"text":"Why","start":2886690,"end":2887010,"confidence":0.99609375,"speaker":"A"},{"text":"not","start":2887010,"end":2887290,"confidence":1,"speaker":"A"},{"text":"just","start":2887290,"end":2887570,"confidence":0.9995117,"speaker":"A"},{"text":"use","start":2887570,"end":2887810,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2887810,"end":2888090,"confidence":0.9995117,"speaker":"A"},{"text":"CloudKit","start":2888090,"end":2888770,"confidence":0.87769,"speaker":"A"},{"text":"JavaScript","start":2888850,"end":2889730,"confidence":0.99454755,"speaker":"A"},{"text":"library.","start":2889730,"end":2890210,"confidence":0.8435872,"speaker":"A"},{"text":"If","start":2890210,"end":2890450,"confidence":0.5620117,"speaker":"C"},{"text":"it's","start":2890450,"end":2890690,"confidence":0.9998372,"speaker":"C"},{"text":"an","start":2890690,"end":2890890,"confidence":0.8232422,"speaker":"C"},{"text":"extension,","start":2890890,"end":2891490,"confidence":0.9998372,"speaker":"C"},{"text":"my","start":2892450,"end":2892770,"confidence":0.99853516,"speaker":"C"},{"text":"brain","start":2892770,"end":2893090,"confidence":1,"speaker":"C"},{"text":"jumps","start":2893090,"end":2893450,"confidence":0.9998372,"speaker":"C"},{"text":"to","start":2893450,"end":2893610,"confidence":0.9995117,"speaker":"C"},{"text":"Swift","start":2893610,"end":2893970,"confidence":0.9914551,"speaker":"C"},{"text":"first.","start":2893970,"end":2894290,"confidence":0.9975586,"speaker":"C"},{"text":"Right.","start":2895730,"end":2896129,"confidence":0.97021484,"speaker":"A"},{"text":"But","start":2896129,"end":2896410,"confidence":0.9995117,"speaker":"A"},{"text":"it's","start":2896410,"end":2896730,"confidence":0.96875,"speaker":"A"},{"text":"the","start":2896730,"end":2896970,"confidence":1,"speaker":"A"},{"text":"reason","start":2896970,"end":2897130,"confidence":0.99902344,"speaker":"A"},{"text":"I'm","start":2897130,"end":2897330,"confidence":0.9954427,"speaker":"A"},{"text":"asking","start":2897330,"end":2897610,"confidence":0.97094727,"speaker":"A"},{"text":"that","start":2897610,"end":2897810,"confidence":0.9765625,"speaker":"A"},{"text":"is","start":2897810,"end":2898090,"confidence":0.9980469,"speaker":"A"},{"text":"like","start":2898090,"end":2898370,"confidence":0.9921875,"speaker":"A"},{"text":"it's","start":2898370,"end":2898690,"confidence":0.9900716,"speaker":"A"},{"text":"a,","start":2898690,"end":2898930,"confidence":0.98291016,"speaker":"A"},{"text":"it's","start":2899410,"end":2899770,"confidence":0.9996745,"speaker":"A"},{"text":"already","start":2899770,"end":2899970,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":2899970,"end":2900130,"confidence":0.9995117,"speaker":"A"},{"text":"web","start":2900130,"end":2900410,"confidence":0.98535156,"speaker":"A"},{"text":"extension.","start":2900410,"end":2900890,"confidence":0.9998372,"speaker":"A"}]},{"text":"I would assume that is true. That it's 90 web based or JavaScript based. So that's where I'm just like, well, you may as well. Like, I would love. I don't want to.","start":2900890,"end":2911320,"confidence":0.98535156,"words":[{"text":"I","start":2900890,"end":2901010,"confidence":0.98535156,"speaker":"A"},{"text":"would","start":2901010,"end":2901130,"confidence":0.98095703,"speaker":"A"},{"text":"assume","start":2901130,"end":2901410,"confidence":0.8614909,"speaker":"A"},{"text":"that","start":2901410,"end":2901570,"confidence":0.5854492,"speaker":"A"},{"text":"is","start":2901570,"end":2901690,"confidence":0.80126953,"speaker":"A"},{"text":"true.","start":2901690,"end":2902050,"confidence":0.9968262,"speaker":"A"},{"text":"That","start":2902690,"end":2903090,"confidence":0.9941406,"speaker":"A"},{"text":"it's","start":2903090,"end":2903490,"confidence":0.98876953,"speaker":"A"},{"text":"90","start":2903490,"end":2903810,"confidence":0.99951,"speaker":"A"},{"text":"web","start":2904290,"end":2904650,"confidence":0.9995117,"speaker":"A"},{"text":"based","start":2904650,"end":2904930,"confidence":0.99902344,"speaker":"A"},{"text":"or","start":2905090,"end":2905410,"confidence":0.99853516,"speaker":"A"},{"text":"JavaScript","start":2905410,"end":2906010,"confidence":0.998291,"speaker":"A"},{"text":"based.","start":2906010,"end":2906290,"confidence":0.99902344,"speaker":"A"},{"text":"So","start":2907120,"end":2907200,"confidence":0.9707031,"speaker":"A"},{"text":"that's","start":2907200,"end":2907360,"confidence":0.99934894,"speaker":"A"},{"text":"where","start":2907360,"end":2907480,"confidence":0.9506836,"speaker":"A"},{"text":"I'm","start":2907480,"end":2907680,"confidence":0.99886066,"speaker":"A"},{"text":"just","start":2907680,"end":2907800,"confidence":0.99560547,"speaker":"A"},{"text":"like,","start":2907800,"end":2908000,"confidence":0.99121094,"speaker":"A"},{"text":"well,","start":2908000,"end":2908320,"confidence":0.9951172,"speaker":"A"},{"text":"you","start":2908320,"end":2908600,"confidence":0.99902344,"speaker":"A"},{"text":"may","start":2908600,"end":2908760,"confidence":0.9995117,"speaker":"A"},{"text":"as","start":2908760,"end":2908920,"confidence":0.9995117,"speaker":"A"},{"text":"well.","start":2908920,"end":2909200,"confidence":0.9995117,"speaker":"A"},{"text":"Like,","start":2909200,"end":2909600,"confidence":0.5307617,"speaker":"A"},{"text":"I","start":2909840,"end":2910120,"confidence":0.77685547,"speaker":"A"},{"text":"would","start":2910120,"end":2910280,"confidence":0.99609375,"speaker":"A"},{"text":"love.","start":2910280,"end":2910560,"confidence":0.99853516,"speaker":"A"},{"text":"I","start":2910640,"end":2910880,"confidence":0.97021484,"speaker":"A"},{"text":"don't","start":2910880,"end":2911000,"confidence":0.9313151,"speaker":"A"},{"text":"want","start":2911000,"end":2911120,"confidence":0.9394531,"speaker":"A"},{"text":"to.","start":2911120,"end":2911320,"confidence":0.94433594,"speaker":"A"}]},{"text":"Like, I love tooting my own horn. Right. But like, like why not just. Unless you're.","start":2911320,"end":2917120,"confidence":0.81689453,"words":[{"text":"Like,","start":2911320,"end":2911560,"confidence":0.81689453,"speaker":"A"},{"text":"I","start":2911560,"end":2911680,"confidence":0.99658203,"speaker":"A"},{"text":"love","start":2911680,"end":2911800,"confidence":0.99365234,"speaker":"A"},{"text":"tooting","start":2911800,"end":2912160,"confidence":0.8005371,"speaker":"A"},{"text":"my","start":2912160,"end":2912320,"confidence":1,"speaker":"A"},{"text":"own","start":2912320,"end":2912480,"confidence":1,"speaker":"A"},{"text":"horn.","start":2912480,"end":2912800,"confidence":0.9995117,"speaker":"A"},{"text":"Right.","start":2912800,"end":2913040,"confidence":0.9838867,"speaker":"A"},{"text":"But","start":2913040,"end":2913280,"confidence":0.9951172,"speaker":"A"},{"text":"like,","start":2913280,"end":2913600,"confidence":0.94628906,"speaker":"A"},{"text":"like","start":2914880,"end":2915280,"confidence":0.82666016,"speaker":"A"},{"text":"why","start":2915280,"end":2915560,"confidence":0.9951172,"speaker":"A"},{"text":"not","start":2915560,"end":2915800,"confidence":0.87939453,"speaker":"A"},{"text":"just.","start":2915800,"end":2916160,"confidence":0.9975586,"speaker":"A"},{"text":"Unless","start":2916320,"end":2916720,"confidence":0.92749023,"speaker":"A"},{"text":"you're.","start":2916720,"end":2917120,"confidence":0.9876302,"speaker":"A"}]},{"text":"Unless you're like building a executable, I guess, or an app. Ish. And I guess another application for this would be doing CloudKit stuff server side and then providing my own API layer over it. Yep, yep. So that's.","start":2920720,"end":2939860,"confidence":0.998291,"words":[{"text":"Unless","start":2920720,"end":2921080,"confidence":0.998291,"speaker":"A"},{"text":"you're","start":2921080,"end":2921440,"confidence":0.90478516,"speaker":"A"},{"text":"like","start":2921440,"end":2921840,"confidence":0.94628906,"speaker":"A"},{"text":"building","start":2922000,"end":2922400,"confidence":1,"speaker":"A"},{"text":"a","start":2922480,"end":2922879,"confidence":0.6621094,"speaker":"A"},{"text":"executable,","start":2923040,"end":2923840,"confidence":0.9987793,"speaker":"A"},{"text":"I","start":2924160,"end":2924440,"confidence":0.99316406,"speaker":"A"},{"text":"guess,","start":2924440,"end":2924800,"confidence":1,"speaker":"A"},{"text":"or","start":2924800,"end":2925080,"confidence":0.9970703,"speaker":"A"},{"text":"an","start":2925080,"end":2925240,"confidence":0.9628906,"speaker":"A"},{"text":"app.","start":2925240,"end":2925480,"confidence":0.93652344,"speaker":"A"},{"text":"Ish.","start":2925480,"end":2925920,"confidence":0.7595215,"speaker":"A"},{"text":"And","start":2927760,"end":2928080,"confidence":0.9038086,"speaker":"C"},{"text":"I","start":2928080,"end":2928400,"confidence":0.64697266,"speaker":"C"},{"text":"guess","start":2928400,"end":2928800,"confidence":1,"speaker":"C"},{"text":"another","start":2928800,"end":2929120,"confidence":1,"speaker":"C"},{"text":"application","start":2929120,"end":2929760,"confidence":1,"speaker":"C"},{"text":"for","start":2929760,"end":2930000,"confidence":1,"speaker":"C"},{"text":"this","start":2930000,"end":2930240,"confidence":1,"speaker":"C"},{"text":"would","start":2930240,"end":2930560,"confidence":0.9995117,"speaker":"C"},{"text":"be","start":2930560,"end":2930960,"confidence":0.9995117,"speaker":"C"},{"text":"doing","start":2931680,"end":2932040,"confidence":0.9995117,"speaker":"C"},{"text":"CloudKit","start":2932040,"end":2932680,"confidence":0.99902344,"speaker":"C"},{"text":"stuff","start":2932680,"end":2933000,"confidence":0.9954427,"speaker":"C"},{"text":"server","start":2933000,"end":2933360,"confidence":0.9074707,"speaker":"C"},{"text":"side","start":2933360,"end":2933640,"confidence":1,"speaker":"C"},{"text":"and","start":2933640,"end":2934000,"confidence":0.9243164,"speaker":"C"},{"text":"then","start":2934000,"end":2934400,"confidence":0.9995117,"speaker":"C"},{"text":"providing","start":2934400,"end":2934880,"confidence":0.8515625,"speaker":"C"},{"text":"my","start":2934880,"end":2935120,"confidence":0.9995117,"speaker":"C"},{"text":"own","start":2935120,"end":2935400,"confidence":1,"speaker":"C"},{"text":"API","start":2935400,"end":2935920,"confidence":1,"speaker":"C"},{"text":"layer","start":2935920,"end":2936280,"confidence":0.9995117,"speaker":"C"},{"text":"over","start":2936280,"end":2936480,"confidence":1,"speaker":"C"},{"text":"it.","start":2936480,"end":2936800,"confidence":0.99853516,"speaker":"C"},{"text":"Yep,","start":2937660,"end":2938060,"confidence":0.8959961,"speaker":"A"},{"text":"yep.","start":2938220,"end":2938700,"confidence":0.7453613,"speaker":"A"},{"text":"So","start":2938940,"end":2939340,"confidence":0.9946289,"speaker":"A"},{"text":"that's.","start":2939340,"end":2939860,"confidence":0.9943034,"speaker":"A"}]},{"text":"Yeah. Are we talking private database or public database? Private. So in that case, basically like you'd have to go the Hard Twitch route and you would have to provide a way to get their web authentication token, essentially, if that makes sense. And then store it in Postgres or whatever the hell you want to do.","start":2939860,"end":2963260,"confidence":0.99316406,"words":[{"text":"Yeah.","start":2939860,"end":2940300,"confidence":0.99316406,"speaker":"A"},{"text":"Are","start":2940460,"end":2940700,"confidence":0.99658203,"speaker":"A"},{"text":"we","start":2940700,"end":2940820,"confidence":0.9995117,"speaker":"A"},{"text":"talking","start":2940820,"end":2941180,"confidence":0.9992676,"speaker":"A"},{"text":"private","start":2941340,"end":2941660,"confidence":0.99902344,"speaker":"A"},{"text":"database","start":2941660,"end":2942180,"confidence":0.9998372,"speaker":"A"},{"text":"or","start":2942180,"end":2942340,"confidence":0.9970703,"speaker":"A"},{"text":"public","start":2942340,"end":2942540,"confidence":0.9995117,"speaker":"A"},{"text":"database?","start":2942540,"end":2943180,"confidence":0.9995117,"speaker":"A"},{"text":"Private.","start":2943340,"end":2943740,"confidence":0.99609375,"speaker":"C"},{"text":"So","start":2945580,"end":2945820,"confidence":0.99902344,"speaker":"A"},{"text":"in","start":2945820,"end":2945940,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":2945940,"end":2946140,"confidence":0.9995117,"speaker":"A"},{"text":"case,","start":2946140,"end":2946460,"confidence":1,"speaker":"A"},{"text":"basically","start":2946700,"end":2947340,"confidence":0.99975586,"speaker":"A"},{"text":"like","start":2948060,"end":2948340,"confidence":0.99853516,"speaker":"A"},{"text":"you'd","start":2948340,"end":2948660,"confidence":0.99690753,"speaker":"A"},{"text":"have","start":2948660,"end":2948780,"confidence":1,"speaker":"A"},{"text":"to","start":2948780,"end":2948900,"confidence":1,"speaker":"A"},{"text":"go","start":2948900,"end":2949140,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2949140,"end":2949380,"confidence":0.99902344,"speaker":"A"},{"text":"Hard","start":2949380,"end":2949580,"confidence":0.8798828,"speaker":"A"},{"text":"Twitch","start":2949580,"end":2949940,"confidence":0.9433594,"speaker":"A"},{"text":"route","start":2949940,"end":2950300,"confidence":0.9946289,"speaker":"A"},{"text":"and","start":2951100,"end":2951500,"confidence":0.9951172,"speaker":"A"},{"text":"you","start":2952460,"end":2952740,"confidence":0.99853516,"speaker":"A"},{"text":"would","start":2952740,"end":2952979,"confidence":0.8515625,"speaker":"A"},{"text":"have","start":2952979,"end":2953219,"confidence":1,"speaker":"A"},{"text":"to","start":2953219,"end":2953380,"confidence":1,"speaker":"A"},{"text":"provide","start":2953380,"end":2953660,"confidence":1,"speaker":"A"},{"text":"a","start":2953900,"end":2954180,"confidence":0.9760742,"speaker":"A"},{"text":"way","start":2954180,"end":2954460,"confidence":0.9975586,"speaker":"A"},{"text":"to","start":2955980,"end":2956260,"confidence":0.9975586,"speaker":"A"},{"text":"get","start":2956260,"end":2956420,"confidence":1,"speaker":"A"},{"text":"their","start":2956420,"end":2956580,"confidence":0.9921875,"speaker":"A"},{"text":"web","start":2956580,"end":2956820,"confidence":0.9992676,"speaker":"A"},{"text":"authentication","start":2956820,"end":2957420,"confidence":0.9996338,"speaker":"A"},{"text":"token,","start":2957420,"end":2957980,"confidence":0.99820966,"speaker":"A"},{"text":"essentially,","start":2958460,"end":2959060,"confidence":0.9316406,"speaker":"A"},{"text":"if","start":2959060,"end":2959260,"confidence":0.9770508,"speaker":"A"},{"text":"that","start":2959260,"end":2959380,"confidence":0.9995117,"speaker":"A"},{"text":"makes","start":2959380,"end":2959540,"confidence":0.9970703,"speaker":"A"},{"text":"sense.","start":2959540,"end":2959900,"confidence":0.99853516,"speaker":"A"},{"text":"And","start":2960540,"end":2960820,"confidence":0.9975586,"speaker":"A"},{"text":"then","start":2960820,"end":2961020,"confidence":0.99902344,"speaker":"A"},{"text":"store","start":2961020,"end":2961260,"confidence":0.99853516,"speaker":"A"},{"text":"it","start":2961260,"end":2961380,"confidence":0.9980469,"speaker":"A"},{"text":"in","start":2961380,"end":2961540,"confidence":0.9980469,"speaker":"A"},{"text":"Postgres","start":2961540,"end":2962020,"confidence":0.98046875,"speaker":"A"},{"text":"or","start":2962020,"end":2962180,"confidence":0.9970703,"speaker":"A"},{"text":"whatever","start":2962180,"end":2962380,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2962380,"end":2962500,"confidence":0.99902344,"speaker":"A"},{"text":"hell","start":2962500,"end":2962700,"confidence":0.99975586,"speaker":"A"},{"text":"you","start":2962700,"end":2962820,"confidence":0.9995117,"speaker":"A"},{"text":"want","start":2962820,"end":2962980,"confidence":0.97802734,"speaker":"A"},{"text":"to","start":2962980,"end":2963100,"confidence":0.9980469,"speaker":"A"},{"text":"do.","start":2963100,"end":2963260,"confidence":0.9995117,"speaker":"A"}]},{"text":"Like that's, that's the way I did it with Hard Twitch. But once you have that, you can do anything you want on the server with their private database, if that makes sense. It does. Yep. Yep.","start":2963260,"end":2975120,"confidence":0.99121094,"words":[{"text":"Like","start":2963260,"end":2963500,"confidence":0.99121094,"speaker":"A"},{"text":"that's,","start":2963500,"end":2963820,"confidence":0.98876953,"speaker":"A"},{"text":"that's","start":2963820,"end":2964060,"confidence":0.99658203,"speaker":"A"},{"text":"the","start":2964060,"end":2964140,"confidence":0.99902344,"speaker":"A"},{"text":"way","start":2964140,"end":2964220,"confidence":1,"speaker":"A"},{"text":"I","start":2964220,"end":2964340,"confidence":0.9995117,"speaker":"A"},{"text":"did","start":2964340,"end":2964460,"confidence":0.9941406,"speaker":"A"},{"text":"it","start":2964460,"end":2964540,"confidence":0.9946289,"speaker":"A"},{"text":"with","start":2964540,"end":2964660,"confidence":0.9995117,"speaker":"A"},{"text":"Hard","start":2964660,"end":2964820,"confidence":0.8378906,"speaker":"A"},{"text":"Twitch.","start":2964820,"end":2965260,"confidence":0.88256836,"speaker":"A"},{"text":"But","start":2966400,"end":2966480,"confidence":0.96484375,"speaker":"A"},{"text":"once","start":2966480,"end":2966600,"confidence":0.9897461,"speaker":"A"},{"text":"you","start":2966600,"end":2966760,"confidence":0.9946289,"speaker":"A"},{"text":"have","start":2966760,"end":2966880,"confidence":0.8364258,"speaker":"A"},{"text":"that,","start":2966880,"end":2967120,"confidence":0.5385742,"speaker":"A"},{"text":"you","start":2967120,"end":2967360,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":2967360,"end":2967440,"confidence":0.99902344,"speaker":"A"},{"text":"do","start":2967440,"end":2967520,"confidence":0.9995117,"speaker":"A"},{"text":"anything","start":2967520,"end":2967760,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":2967760,"end":2967880,"confidence":0.9970703,"speaker":"A"},{"text":"want","start":2967880,"end":2968080,"confidence":0.99658203,"speaker":"A"},{"text":"on","start":2968080,"end":2968280,"confidence":0.99853516,"speaker":"A"},{"text":"the","start":2968280,"end":2968440,"confidence":0.99316406,"speaker":"A"},{"text":"server","start":2968440,"end":2968880,"confidence":0.99975586,"speaker":"A"},{"text":"with","start":2969200,"end":2969520,"confidence":0.9980469,"speaker":"A"},{"text":"their","start":2969520,"end":2969840,"confidence":0.98583984,"speaker":"A"},{"text":"private","start":2970240,"end":2970600,"confidence":0.99853516,"speaker":"A"},{"text":"database,","start":2970600,"end":2971200,"confidence":0.9996745,"speaker":"A"},{"text":"if","start":2971200,"end":2971400,"confidence":0.99902344,"speaker":"A"},{"text":"that","start":2971400,"end":2971560,"confidence":0.9995117,"speaker":"A"},{"text":"makes","start":2971560,"end":2971720,"confidence":0.9970703,"speaker":"A"},{"text":"sense.","start":2971720,"end":2972080,"confidence":0.99902344,"speaker":"A"},{"text":"It","start":2972560,"end":2972840,"confidence":0.9692383,"speaker":"C"},{"text":"does.","start":2972840,"end":2973120,"confidence":0.9980469,"speaker":"C"},{"text":"Yep.","start":2973920,"end":2974480,"confidence":0.8156738,"speaker":"A"},{"text":"Yep.","start":2974560,"end":2975120,"confidence":0.7368164,"speaker":"A"}]},{"text":"A couple of things I wanted to bring up, so let's take a look.","start":2975920,"end":2979520,"confidence":0.5620117,"words":[{"text":"A","start":2975920,"end":2976160,"confidence":0.5620117,"speaker":"A"},{"text":"couple","start":2976160,"end":2976360,"confidence":0.99731445,"speaker":"A"},{"text":"of","start":2976360,"end":2976480,"confidence":0.9433594,"speaker":"A"},{"text":"things","start":2976480,"end":2976720,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":2977040,"end":2977320,"confidence":0.9980469,"speaker":"A"},{"text":"wanted","start":2977320,"end":2977560,"confidence":0.9992676,"speaker":"A"},{"text":"to","start":2977560,"end":2977720,"confidence":0.9995117,"speaker":"A"},{"text":"bring","start":2977720,"end":2977920,"confidence":1,"speaker":"A"},{"text":"up,","start":2977920,"end":2978240,"confidence":0.9995117,"speaker":"A"},{"text":"so","start":2978320,"end":2978640,"confidence":0.9765625,"speaker":"A"},{"text":"let's","start":2978640,"end":2978920,"confidence":0.99902344,"speaker":"A"},{"text":"take","start":2978920,"end":2979080,"confidence":1,"speaker":"A"},{"text":"a","start":2979080,"end":2979240,"confidence":1,"speaker":"A"},{"text":"look.","start":2979240,"end":2979520,"confidence":0.9995117,"speaker":"A"}]},{"text":"So part of my other presentation is working, talking about cross platform automation type stuff. And the one issue I've run into is. So it basically builds on everything. Right now.","start":2984000,"end":3001560,"confidence":0.95214844,"words":[{"text":"So","start":2984000,"end":2984400,"confidence":0.95214844,"speaker":"A"},{"text":"part","start":2986880,"end":2987160,"confidence":0.99902344,"speaker":"A"},{"text":"of","start":2987160,"end":2987280,"confidence":1,"speaker":"A"},{"text":"my","start":2987280,"end":2987400,"confidence":1,"speaker":"A"},{"text":"other","start":2987400,"end":2987640,"confidence":1,"speaker":"A"},{"text":"presentation","start":2987640,"end":2988400,"confidence":1,"speaker":"A"},{"text":"is","start":2988640,"end":2989040,"confidence":0.99853516,"speaker":"A"},{"text":"working,","start":2990000,"end":2990400,"confidence":0.87841797,"speaker":"A"},{"text":"talking","start":2990800,"end":2991160,"confidence":0.7766113,"speaker":"A"},{"text":"about","start":2991160,"end":2991440,"confidence":0.9951172,"speaker":"A"},{"text":"cross","start":2991640,"end":2991880,"confidence":0.998291,"speaker":"A"},{"text":"platform","start":2991880,"end":2992360,"confidence":0.8640137,"speaker":"A"},{"text":"automation","start":2992600,"end":2993320,"confidence":0.9996745,"speaker":"A"},{"text":"type","start":2993640,"end":2994000,"confidence":0.9980469,"speaker":"A"},{"text":"stuff.","start":2994000,"end":2994440,"confidence":1,"speaker":"A"},{"text":"And","start":2995560,"end":2995960,"confidence":0.9868164,"speaker":"A"},{"text":"the","start":2996440,"end":2996760,"confidence":0.9995117,"speaker":"A"},{"text":"one","start":2996760,"end":2997040,"confidence":1,"speaker":"A"},{"text":"issue","start":2997040,"end":2997400,"confidence":0.9995117,"speaker":"A"},{"text":"I've","start":2997400,"end":2997840,"confidence":0.9972331,"speaker":"A"},{"text":"run","start":2997840,"end":2998040,"confidence":0.9995117,"speaker":"A"},{"text":"into","start":2998040,"end":2998360,"confidence":1,"speaker":"A"},{"text":"is.","start":2998440,"end":2998840,"confidence":0.9926758,"speaker":"A"},{"text":"So","start":2998920,"end":2999200,"confidence":0.9921875,"speaker":"A"},{"text":"it","start":2999200,"end":2999360,"confidence":0.9916992,"speaker":"A"},{"text":"basically","start":2999360,"end":2999800,"confidence":0.99975586,"speaker":"A"},{"text":"builds","start":2999800,"end":3000160,"confidence":0.9992676,"speaker":"A"},{"text":"on","start":3000160,"end":3000360,"confidence":0.9995117,"speaker":"A"},{"text":"everything.","start":3000360,"end":3000680,"confidence":1,"speaker":"A"},{"text":"Right","start":3000920,"end":3001240,"confidence":0.9995117,"speaker":"A"},{"text":"now.","start":3001240,"end":3001560,"confidence":0.9995117,"speaker":"A"}]},{"text":"I'm going to share something. Hey guys, I got to drop. But it was good presentation, Leo. Thank you. Yeah, yeah.","start":3007560,"end":3015560,"confidence":0.9977214,"words":[{"text":"I'm","start":3007560,"end":3007880,"confidence":0.9977214,"speaker":"A"},{"text":"going","start":3007880,"end":3007960,"confidence":0.6772461,"speaker":"A"},{"text":"to","start":3007960,"end":3008080,"confidence":0.9975586,"speaker":"A"},{"text":"share","start":3008080,"end":3008320,"confidence":0.9995117,"speaker":"A"},{"text":"something.","start":3008320,"end":3008680,"confidence":0.9995117,"speaker":"A"},{"text":"Hey","start":3009880,"end":3010200,"confidence":0.99609375,"speaker":"B"},{"text":"guys,","start":3010200,"end":3010520,"confidence":0.99902344,"speaker":"B"},{"text":"I","start":3011000,"end":3011240,"confidence":0.9770508,"speaker":"B"},{"text":"got","start":3011240,"end":3011320,"confidence":0.99609375,"speaker":"B"},{"text":"to","start":3011320,"end":3011400,"confidence":0.44458008,"speaker":"B"},{"text":"drop.","start":3011400,"end":3011720,"confidence":0.9885254,"speaker":"B"},{"text":"But","start":3011800,"end":3012160,"confidence":0.98291016,"speaker":"B"},{"text":"it","start":3012160,"end":3012400,"confidence":0.9995117,"speaker":"B"},{"text":"was","start":3012400,"end":3012680,"confidence":0.9995117,"speaker":"B"},{"text":"good","start":3012680,"end":3013000,"confidence":0.9995117,"speaker":"B"},{"text":"presentation,","start":3013000,"end":3013480,"confidence":0.9995117,"speaker":"B"},{"text":"Leo.","start":3013480,"end":3014040,"confidence":0.9987793,"speaker":"B"},{"text":"Thank","start":3014040,"end":3014400,"confidence":0.99975586,"speaker":"B"},{"text":"you.","start":3014400,"end":3014680,"confidence":0.9975586,"speaker":"B"},{"text":"Yeah,","start":3014840,"end":3015240,"confidence":0.99088544,"speaker":"A"},{"text":"yeah.","start":3015240,"end":3015560,"confidence":0.9458008,"speaker":"A"}]},{"text":"If I have more questions, if you have any feedback, just hit me up on Slack. Sounds good. Cool, thank you. Thank you so much for helping me set this up. Yeah, talk to you later.","start":3015560,"end":3024710,"confidence":0.88964844,"words":[{"text":"If","start":3015560,"end":3015720,"confidence":0.88964844,"speaker":"A"},{"text":"I","start":3015720,"end":3015840,"confidence":0.98876953,"speaker":"A"},{"text":"have","start":3015840,"end":3015960,"confidence":0.9169922,"speaker":"A"},{"text":"more","start":3015960,"end":3016040,"confidence":0.97265625,"speaker":"A"},{"text":"questions,","start":3016040,"end":3016320,"confidence":0.95996094,"speaker":"A"},{"text":"if","start":3016320,"end":3016440,"confidence":0.9589844,"speaker":"A"},{"text":"you","start":3016440,"end":3016520,"confidence":0.9951172,"speaker":"A"},{"text":"have","start":3016520,"end":3016640,"confidence":0.9980469,"speaker":"A"},{"text":"any","start":3016640,"end":3016800,"confidence":0.9995117,"speaker":"A"},{"text":"feedback,","start":3016800,"end":3017160,"confidence":0.9996338,"speaker":"A"},{"text":"just","start":3017160,"end":3017360,"confidence":0.9995117,"speaker":"A"},{"text":"hit","start":3017360,"end":3017520,"confidence":1,"speaker":"A"},{"text":"me","start":3017520,"end":3017640,"confidence":1,"speaker":"A"},{"text":"up","start":3017640,"end":3017760,"confidence":1,"speaker":"A"},{"text":"on","start":3017760,"end":3018040,"confidence":0.99658203,"speaker":"A"},{"text":"Slack.","start":3018950,"end":3019350,"confidence":0.89697266,"speaker":"A"},{"text":"Sounds","start":3019590,"end":3019990,"confidence":0.9978841,"speaker":"B"},{"text":"good.","start":3019990,"end":3020150,"confidence":0.9980469,"speaker":"B"},{"text":"Cool,","start":3020150,"end":3020470,"confidence":0.9345703,"speaker":"A"},{"text":"thank","start":3020470,"end":3020750,"confidence":0.7890625,"speaker":"A"},{"text":"you.","start":3020750,"end":3020950,"confidence":0.99316406,"speaker":"A"},{"text":"Thank","start":3020950,"end":3021230,"confidence":0.94628906,"speaker":"A"},{"text":"you","start":3021230,"end":3021350,"confidence":0.9995117,"speaker":"A"},{"text":"so","start":3021350,"end":3021470,"confidence":0.99853516,"speaker":"A"},{"text":"much","start":3021470,"end":3021590,"confidence":1,"speaker":"A"},{"text":"for","start":3021590,"end":3021710,"confidence":0.9995117,"speaker":"A"},{"text":"helping","start":3021710,"end":3021950,"confidence":0.99975586,"speaker":"A"},{"text":"me","start":3021950,"end":3022150,"confidence":0.81103516,"speaker":"A"},{"text":"set","start":3022150,"end":3022350,"confidence":0.96240234,"speaker":"A"},{"text":"this","start":3022350,"end":3022510,"confidence":0.99365234,"speaker":"A"},{"text":"up.","start":3022510,"end":3022790,"confidence":0.99902344,"speaker":"A"},{"text":"Yeah,","start":3023590,"end":3023990,"confidence":0.95214844,"speaker":"A"},{"text":"talk","start":3023990,"end":3024190,"confidence":0.9824219,"speaker":"A"},{"text":"to","start":3024190,"end":3024350,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":3024350,"end":3024470,"confidence":0.99658203,"speaker":"A"},{"text":"later.","start":3024470,"end":3024710,"confidence":0.9838867,"speaker":"A"}]},{"text":"Thank you. Bye bye.","start":3024950,"end":3025910,"confidence":0.9968262,"words":[{"text":"Thank","start":3024950,"end":3025230,"confidence":0.9968262,"speaker":"B"},{"text":"you.","start":3025230,"end":3025350,"confidence":0.99902344,"speaker":"B"},{"text":"Bye","start":3025350,"end":3025590,"confidence":0.9824219,"speaker":"B"},{"text":"bye.","start":3025590,"end":3025910,"confidence":0.99316406,"speaker":"B"}]},{"text":"Yeah, so if you had something else to show, I'm happy to look for. I'm here for a few more minutes as well. Yeah, yeah, yeah.","start":3028870,"end":3034390,"confidence":0.88216144,"words":[{"text":"Yeah,","start":3028870,"end":3029190,"confidence":0.88216144,"speaker":"C"},{"text":"so","start":3029190,"end":3029310,"confidence":0.91308594,"speaker":"C"},{"text":"if","start":3029310,"end":3029430,"confidence":0.99609375,"speaker":"C"},{"text":"you","start":3029430,"end":3029510,"confidence":0.99365234,"speaker":"C"},{"text":"had","start":3029510,"end":3029630,"confidence":0.9638672,"speaker":"C"},{"text":"something","start":3029630,"end":3029830,"confidence":0.9995117,"speaker":"C"},{"text":"else","start":3029830,"end":3030070,"confidence":0.99975586,"speaker":"C"},{"text":"to","start":3030070,"end":3030190,"confidence":0.99853516,"speaker":"C"},{"text":"show,","start":3030190,"end":3030350,"confidence":0.99902344,"speaker":"C"},{"text":"I'm","start":3030350,"end":3030550,"confidence":0.99869794,"speaker":"C"},{"text":"happy","start":3030550,"end":3030750,"confidence":0.9995117,"speaker":"C"},{"text":"to","start":3030750,"end":3030990,"confidence":0.6503906,"speaker":"C"},{"text":"look","start":3030990,"end":3031230,"confidence":0.97021484,"speaker":"C"},{"text":"for.","start":3031230,"end":3031430,"confidence":0.79541016,"speaker":"C"},{"text":"I'm","start":3031430,"end":3031670,"confidence":0.99104816,"speaker":"C"},{"text":"here","start":3031670,"end":3031790,"confidence":0.9995117,"speaker":"C"},{"text":"for","start":3031790,"end":3031910,"confidence":0.9995117,"speaker":"C"},{"text":"a","start":3031910,"end":3031990,"confidence":0.9980469,"speaker":"C"},{"text":"few","start":3031990,"end":3032110,"confidence":0.9995117,"speaker":"C"},{"text":"more","start":3032110,"end":3032270,"confidence":0.9995117,"speaker":"C"},{"text":"minutes","start":3032270,"end":3032510,"confidence":0.9987793,"speaker":"C"},{"text":"as","start":3032510,"end":3032670,"confidence":0.99853516,"speaker":"C"},{"text":"well.","start":3032670,"end":3032950,"confidence":0.99902344,"speaker":"C"},{"text":"Yeah,","start":3033590,"end":3033910,"confidence":0.96402997,"speaker":"A"},{"text":"yeah,","start":3033910,"end":3034070,"confidence":0.90755206,"speaker":"A"},{"text":"yeah.","start":3034070,"end":3034390,"confidence":0.8152669,"speaker":"A"}]},{"text":"So I have the workflow working here and it does Ubuntu, it does Windows, it does Android. So all that stuff is available to you. I would never recommend using Miskit on an Apple platform for obvious reasons, like what's the point? True. Unless there's something special that I provide that CloudKit doesn't like, I don't get it.","start":3038790,"end":3060320,"confidence":0.94628906,"words":[{"text":"So","start":3038790,"end":3039110,"confidence":0.94628906,"speaker":"A"},{"text":"I","start":3039110,"end":3039350,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":3039350,"end":3039630,"confidence":1,"speaker":"A"},{"text":"the","start":3039630,"end":3039870,"confidence":0.9980469,"speaker":"A"},{"text":"workflow","start":3039870,"end":3040350,"confidence":0.9995117,"speaker":"A"},{"text":"working","start":3040350,"end":3040630,"confidence":0.9995117,"speaker":"A"},{"text":"here","start":3041190,"end":3041590,"confidence":0.99853516,"speaker":"A"},{"text":"and","start":3041670,"end":3041950,"confidence":0.9892578,"speaker":"A"},{"text":"it","start":3041950,"end":3042070,"confidence":0.9995117,"speaker":"A"},{"text":"does","start":3042070,"end":3042270,"confidence":0.99902344,"speaker":"A"},{"text":"Ubuntu,","start":3042270,"end":3043110,"confidence":0.9856445,"speaker":"A"},{"text":"it","start":3044080,"end":3044200,"confidence":0.97216797,"speaker":"A"},{"text":"does","start":3044200,"end":3044400,"confidence":0.99853516,"speaker":"A"},{"text":"Windows,","start":3044400,"end":3044960,"confidence":0.9944661,"speaker":"A"},{"text":"it","start":3045120,"end":3045400,"confidence":0.99365234,"speaker":"A"},{"text":"does","start":3045400,"end":3045600,"confidence":0.98779297,"speaker":"A"},{"text":"Android.","start":3045600,"end":3046120,"confidence":0.9943034,"speaker":"A"},{"text":"So","start":3046120,"end":3046360,"confidence":0.98046875,"speaker":"A"},{"text":"all","start":3046360,"end":3046480,"confidence":0.99853516,"speaker":"A"},{"text":"that","start":3046480,"end":3046600,"confidence":0.9975586,"speaker":"A"},{"text":"stuff","start":3046600,"end":3046880,"confidence":0.90494794,"speaker":"A"},{"text":"is","start":3046880,"end":3047080,"confidence":0.9995117,"speaker":"A"},{"text":"available","start":3047080,"end":3047360,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":3047440,"end":3047720,"confidence":0.99902344,"speaker":"A"},{"text":"you.","start":3047720,"end":3048000,"confidence":0.99853516,"speaker":"A"},{"text":"I","start":3048640,"end":3048960,"confidence":0.9995117,"speaker":"A"},{"text":"would","start":3048960,"end":3049200,"confidence":0.9995117,"speaker":"A"},{"text":"never","start":3049200,"end":3049440,"confidence":1,"speaker":"A"},{"text":"recommend","start":3049440,"end":3049920,"confidence":0.9998372,"speaker":"A"},{"text":"using","start":3049920,"end":3050240,"confidence":0.99902344,"speaker":"A"},{"text":"Miskit","start":3050240,"end":3050920,"confidence":0.9777832,"speaker":"A"},{"text":"on","start":3050920,"end":3051160,"confidence":0.99902344,"speaker":"A"},{"text":"an","start":3051160,"end":3051320,"confidence":0.99902344,"speaker":"A"},{"text":"Apple","start":3051320,"end":3051560,"confidence":1,"speaker":"A"},{"text":"platform","start":3051560,"end":3052040,"confidence":0.9992676,"speaker":"A"},{"text":"for","start":3052040,"end":3052280,"confidence":0.9995117,"speaker":"A"},{"text":"obvious","start":3052280,"end":3052640,"confidence":0.99975586,"speaker":"A"},{"text":"reasons,","start":3052640,"end":3053200,"confidence":0.9995117,"speaker":"A"},{"text":"like","start":3053280,"end":3053600,"confidence":0.9238281,"speaker":"A"},{"text":"what's","start":3053600,"end":3053840,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":3053840,"end":3053960,"confidence":0.9995117,"speaker":"A"},{"text":"point?","start":3053960,"end":3054240,"confidence":0.99902344,"speaker":"A"},{"text":"True.","start":3055600,"end":3056080,"confidence":0.9099121,"speaker":"C"},{"text":"Unless","start":3056080,"end":3056440,"confidence":0.99609375,"speaker":"A"},{"text":"there's","start":3056440,"end":3056720,"confidence":0.9946289,"speaker":"A"},{"text":"something","start":3056720,"end":3056920,"confidence":1,"speaker":"A"},{"text":"special","start":3056920,"end":3057240,"confidence":1,"speaker":"A"},{"text":"that","start":3057240,"end":3057480,"confidence":0.9970703,"speaker":"A"},{"text":"I","start":3057480,"end":3057640,"confidence":0.9995117,"speaker":"A"},{"text":"provide","start":3057640,"end":3057880,"confidence":1,"speaker":"A"},{"text":"that","start":3057880,"end":3058160,"confidence":0.9897461,"speaker":"A"},{"text":"CloudKit","start":3058160,"end":3058760,"confidence":0.89551,"speaker":"A"},{"text":"doesn't","start":3058760,"end":3059040,"confidence":0.96777344,"speaker":"A"},{"text":"like,","start":3059040,"end":3059360,"confidence":0.83496094,"speaker":"A"},{"text":"I","start":3059440,"end":3059680,"confidence":0.99560547,"speaker":"A"},{"text":"don't","start":3059680,"end":3059920,"confidence":0.8590495,"speaker":"A"},{"text":"get","start":3059920,"end":3060039,"confidence":0.9995117,"speaker":"A"},{"text":"it.","start":3060039,"end":3060320,"confidence":0.9980469,"speaker":"A"}]},{"text":"Right. But we have an issue. So I just started dabbling. I haven't really done anything with wasm, but I did definitely try. Like I added support for WASM in my, in my Swift build action.","start":3060480,"end":3074890,"confidence":0.8925781,"words":[{"text":"Right.","start":3060480,"end":3060880,"confidence":0.8925781,"speaker":"C"},{"text":"But","start":3061200,"end":3061600,"confidence":0.9941406,"speaker":"A"},{"text":"we","start":3062560,"end":3062880,"confidence":0.9926758,"speaker":"A"},{"text":"have","start":3062880,"end":3063200,"confidence":0.9995117,"speaker":"A"},{"text":"an","start":3063200,"end":3063520,"confidence":0.9770508,"speaker":"A"},{"text":"issue.","start":3063520,"end":3063840,"confidence":0.9765625,"speaker":"A"},{"text":"So","start":3063920,"end":3064200,"confidence":0.9794922,"speaker":"A"},{"text":"I","start":3064200,"end":3064360,"confidence":0.9995117,"speaker":"A"},{"text":"just","start":3064360,"end":3064560,"confidence":0.99902344,"speaker":"A"},{"text":"started","start":3064560,"end":3064840,"confidence":0.9995117,"speaker":"A"},{"text":"dabbling.","start":3064840,"end":3065440,"confidence":0.91918945,"speaker":"A"},{"text":"I","start":3066000,"end":3066280,"confidence":0.609375,"speaker":"A"},{"text":"haven't","start":3066280,"end":3066520,"confidence":0.9489746,"speaker":"A"},{"text":"really","start":3066520,"end":3066800,"confidence":0.9975586,"speaker":"A"},{"text":"done","start":3066960,"end":3067280,"confidence":1,"speaker":"A"},{"text":"anything","start":3067280,"end":3067640,"confidence":1,"speaker":"A"},{"text":"with","start":3067640,"end":3067840,"confidence":0.9995117,"speaker":"A"},{"text":"wasm,","start":3067840,"end":3068480,"confidence":0.6376953,"speaker":"A"},{"text":"but","start":3069450,"end":3069530,"confidence":0.9980469,"speaker":"A"},{"text":"I","start":3069530,"end":3069650,"confidence":0.9980469,"speaker":"A"},{"text":"did","start":3069650,"end":3069810,"confidence":0.99853516,"speaker":"A"},{"text":"definitely","start":3069810,"end":3070210,"confidence":0.83239746,"speaker":"A"},{"text":"try.","start":3070210,"end":3070570,"confidence":0.99902344,"speaker":"A"},{"text":"Like","start":3070570,"end":3070850,"confidence":0.9980469,"speaker":"A"},{"text":"I","start":3070850,"end":3071010,"confidence":0.99609375,"speaker":"A"},{"text":"added","start":3071010,"end":3071250,"confidence":0.99902344,"speaker":"A"},{"text":"support","start":3071250,"end":3071530,"confidence":0.99853516,"speaker":"A"},{"text":"for","start":3071530,"end":3071730,"confidence":0.99853516,"speaker":"A"},{"text":"WASM","start":3071730,"end":3072250,"confidence":0.5599365,"speaker":"A"},{"text":"in","start":3072250,"end":3072450,"confidence":0.9560547,"speaker":"A"},{"text":"my,","start":3072450,"end":3072730,"confidence":0.9975586,"speaker":"A"},{"text":"in","start":3072730,"end":3073050,"confidence":0.9980469,"speaker":"A"},{"text":"my","start":3073050,"end":3073370,"confidence":1,"speaker":"A"},{"text":"Swift","start":3073690,"end":3074210,"confidence":0.9980469,"speaker":"A"},{"text":"build","start":3074210,"end":3074530,"confidence":0.99609375,"speaker":"A"},{"text":"action.","start":3074530,"end":3074890,"confidence":0.99902344,"speaker":"A"}]},{"text":"The thing about WASA is it does not provide. It doesn't have a transport available. So we talked about transports, I think. Did you hear about that part about the Open API generator and transports? I think I was coming in at that point.","start":3077210,"end":3093690,"confidence":0.99121094,"words":[{"text":"The","start":3077210,"end":3077490,"confidence":0.99121094,"speaker":"A"},{"text":"thing","start":3077490,"end":3077650,"confidence":0.9980469,"speaker":"A"},{"text":"about","start":3077650,"end":3077930,"confidence":0.9995117,"speaker":"A"},{"text":"WASA","start":3077930,"end":3078650,"confidence":0.66918945,"speaker":"A"},{"text":"is","start":3078650,"end":3078850,"confidence":0.9995117,"speaker":"A"},{"text":"it","start":3078850,"end":3079010,"confidence":0.99853516,"speaker":"A"},{"text":"does","start":3079010,"end":3079210,"confidence":0.99853516,"speaker":"A"},{"text":"not","start":3079210,"end":3079410,"confidence":0.99560547,"speaker":"A"},{"text":"provide.","start":3079410,"end":3079690,"confidence":0.99902344,"speaker":"A"},{"text":"It","start":3079770,"end":3080050,"confidence":0.99609375,"speaker":"A"},{"text":"doesn't","start":3080050,"end":3080290,"confidence":0.9978841,"speaker":"A"},{"text":"have","start":3080290,"end":3080410,"confidence":1,"speaker":"A"},{"text":"a","start":3080410,"end":3080530,"confidence":0.99853516,"speaker":"A"},{"text":"transport","start":3080530,"end":3081050,"confidence":0.99853516,"speaker":"A"},{"text":"available.","start":3081130,"end":3081530,"confidence":0.9995117,"speaker":"A"},{"text":"So","start":3082570,"end":3082850,"confidence":0.99853516,"speaker":"A"},{"text":"we","start":3082850,"end":3083050,"confidence":0.99853516,"speaker":"A"},{"text":"talked","start":3083050,"end":3083290,"confidence":0.99975586,"speaker":"A"},{"text":"about","start":3083290,"end":3083490,"confidence":0.9995117,"speaker":"A"},{"text":"transports,","start":3083490,"end":3084410,"confidence":0.9938151,"speaker":"A"},{"text":"I","start":3086010,"end":3086250,"confidence":0.9770508,"speaker":"A"},{"text":"think.","start":3086250,"end":3086490,"confidence":0.9980469,"speaker":"A"},{"text":"Did","start":3086570,"end":3086850,"confidence":0.99853516,"speaker":"A"},{"text":"you","start":3086850,"end":3087010,"confidence":1,"speaker":"A"},{"text":"hear","start":3087010,"end":3087170,"confidence":0.9995117,"speaker":"A"},{"text":"about","start":3087170,"end":3087330,"confidence":0.99902344,"speaker":"A"},{"text":"that","start":3087330,"end":3087530,"confidence":0.9970703,"speaker":"A"},{"text":"part","start":3087530,"end":3087770,"confidence":0.9995117,"speaker":"A"},{"text":"about","start":3087770,"end":3087970,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":3087970,"end":3088090,"confidence":0.9995117,"speaker":"A"},{"text":"Open","start":3088090,"end":3088250,"confidence":0.99902344,"speaker":"A"},{"text":"API","start":3088250,"end":3088770,"confidence":0.7873535,"speaker":"A"},{"text":"generator","start":3088770,"end":3089170,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":3089170,"end":3089330,"confidence":0.95751953,"speaker":"A"},{"text":"transports?","start":3089330,"end":3090090,"confidence":0.8383789,"speaker":"A"},{"text":"I","start":3091370,"end":3091770,"confidence":0.9667969,"speaker":"C"},{"text":"think","start":3091850,"end":3092170,"confidence":0.9995117,"speaker":"C"},{"text":"I","start":3092170,"end":3092370,"confidence":0.9970703,"speaker":"C"},{"text":"was","start":3092370,"end":3092570,"confidence":1,"speaker":"C"},{"text":"coming","start":3092570,"end":3092810,"confidence":0.9995117,"speaker":"C"},{"text":"in","start":3092810,"end":3093010,"confidence":0.9980469,"speaker":"C"},{"text":"at","start":3093010,"end":3093130,"confidence":1,"speaker":"C"},{"text":"that","start":3093130,"end":3093330,"confidence":0.99560547,"speaker":"C"},{"text":"point.","start":3093330,"end":3093690,"confidence":0.9980469,"speaker":"C"}]},{"text":"Okay. When you create a client, so underneath the client you have what's called a client transport. This is so underneath this client, this is an abstraction layer above. So this is not the right one. Where's the public one?","start":3094410,"end":3113390,"confidence":0.92496747,"words":[{"text":"Okay.","start":3094410,"end":3094920,"confidence":0.92496747,"speaker":"A"},{"text":"When","start":3095630,"end":3095750,"confidence":0.71191406,"speaker":"A"},{"text":"you","start":3095750,"end":3095910,"confidence":0.93408203,"speaker":"A"},{"text":"create","start":3095910,"end":3096070,"confidence":0.99853516,"speaker":"A"},{"text":"a","start":3096070,"end":3096230,"confidence":0.9951172,"speaker":"A"},{"text":"client,","start":3096230,"end":3096670,"confidence":0.9995117,"speaker":"A"},{"text":"so","start":3097630,"end":3097910,"confidence":0.9794922,"speaker":"A"},{"text":"underneath","start":3097910,"end":3098310,"confidence":0.9996745,"speaker":"A"},{"text":"the","start":3098310,"end":3098470,"confidence":0.9995117,"speaker":"A"},{"text":"client","start":3098470,"end":3098910,"confidence":1,"speaker":"A"},{"text":"you","start":3102350,"end":3102630,"confidence":0.99902344,"speaker":"A"},{"text":"have","start":3102630,"end":3102910,"confidence":1,"speaker":"A"},{"text":"what's","start":3102910,"end":3103230,"confidence":0.99934894,"speaker":"A"},{"text":"called","start":3103230,"end":3103350,"confidence":1,"speaker":"A"},{"text":"a","start":3103350,"end":3103510,"confidence":0.7114258,"speaker":"A"},{"text":"client","start":3103510,"end":3103790,"confidence":0.81811523,"speaker":"A"},{"text":"transport.","start":3103790,"end":3104430,"confidence":0.9987793,"speaker":"A"},{"text":"This","start":3104670,"end":3104950,"confidence":0.8666992,"speaker":"A"},{"text":"is","start":3104950,"end":3105230,"confidence":0.99902344,"speaker":"A"},{"text":"so","start":3105630,"end":3105910,"confidence":0.9921875,"speaker":"A"},{"text":"underneath","start":3105910,"end":3106430,"confidence":0.90999347,"speaker":"A"},{"text":"this","start":3106670,"end":3106990,"confidence":0.99902344,"speaker":"A"},{"text":"client,","start":3106990,"end":3107310,"confidence":0.9941406,"speaker":"A"},{"text":"this","start":3107310,"end":3107510,"confidence":0.99902344,"speaker":"A"},{"text":"is","start":3107510,"end":3107630,"confidence":0.9995117,"speaker":"A"},{"text":"an","start":3107630,"end":3107750,"confidence":0.99902344,"speaker":"A"},{"text":"abstraction","start":3107750,"end":3108350,"confidence":0.99975586,"speaker":"A"},{"text":"layer","start":3108350,"end":3108750,"confidence":0.9995117,"speaker":"A"},{"text":"above.","start":3108750,"end":3109150,"confidence":0.8647461,"speaker":"A"},{"text":"So","start":3109870,"end":3110190,"confidence":0.58496094,"speaker":"A"},{"text":"this","start":3110190,"end":3110390,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":3110390,"end":3110550,"confidence":0.99902344,"speaker":"A"},{"text":"not","start":3110550,"end":3110829,"confidence":0.9921875,"speaker":"A"},{"text":"the","start":3110829,"end":3111109,"confidence":0.9995117,"speaker":"A"},{"text":"right","start":3111109,"end":3111270,"confidence":0.99609375,"speaker":"A"},{"text":"one.","start":3111270,"end":3111550,"confidence":0.98339844,"speaker":"A"},{"text":"Where's","start":3112190,"end":3112630,"confidence":0.98323566,"speaker":"A"},{"text":"the","start":3112630,"end":3112790,"confidence":1,"speaker":"A"},{"text":"public","start":3112790,"end":3113030,"confidence":0.9995117,"speaker":"A"},{"text":"one?","start":3113030,"end":3113390,"confidence":0.9916992,"speaker":"A"}]},{"text":"But anyway, there is here CloudKit service maybe.","start":3120680,"end":3126920,"confidence":0.99560547,"words":[{"text":"But","start":3120680,"end":3120800,"confidence":0.99560547,"speaker":"A"},{"text":"anyway,","start":3120800,"end":3121160,"confidence":0.9995117,"speaker":"A"},{"text":"there","start":3121160,"end":3121400,"confidence":0.9980469,"speaker":"A"},{"text":"is","start":3121400,"end":3121720,"confidence":0.9995117,"speaker":"A"},{"text":"here","start":3125080,"end":3125440,"confidence":0.97509766,"speaker":"A"},{"text":"CloudKit","start":3125440,"end":3126040,"confidence":0.98950195,"speaker":"A"},{"text":"service","start":3126040,"end":3126360,"confidence":0.9975586,"speaker":"A"},{"text":"maybe.","start":3126360,"end":3126920,"confidence":0.9958496,"speaker":"A"}]},{"text":"Yeah, here we go. So the CloudKit service has a client and part of the client is being able to say what transport you use in Open API. And there's two transports available right now. One is, one is your regular URL session for clients, which. That makes sense.","start":3129560,"end":3160930,"confidence":0.87158203,"words":[{"text":"Yeah,","start":3129560,"end":3129920,"confidence":0.87158203,"speaker":"A"},{"text":"here","start":3129920,"end":3130080,"confidence":0.99853516,"speaker":"A"},{"text":"we","start":3130080,"end":3130240,"confidence":1,"speaker":"A"},{"text":"go.","start":3130240,"end":3130520,"confidence":1,"speaker":"A"},{"text":"So","start":3131320,"end":3131560,"confidence":0.9921875,"speaker":"A"},{"text":"the","start":3131560,"end":3131640,"confidence":0.9995117,"speaker":"A"},{"text":"CloudKit","start":3131640,"end":3132280,"confidence":0.9147949,"speaker":"A"},{"text":"service","start":3132440,"end":3132840,"confidence":0.99609375,"speaker":"A"},{"text":"has","start":3133320,"end":3133640,"confidence":1,"speaker":"A"},{"text":"a","start":3133640,"end":3133840,"confidence":0.9995117,"speaker":"A"},{"text":"client","start":3133840,"end":3134360,"confidence":0.99975586,"speaker":"A"},{"text":"and","start":3135320,"end":3135640,"confidence":0.984375,"speaker":"A"},{"text":"part","start":3135640,"end":3135840,"confidence":1,"speaker":"A"},{"text":"of","start":3135840,"end":3136000,"confidence":1,"speaker":"A"},{"text":"the","start":3136000,"end":3136160,"confidence":1,"speaker":"A"},{"text":"client","start":3136160,"end":3136600,"confidence":0.99975586,"speaker":"A"},{"text":"is","start":3136920,"end":3137240,"confidence":0.99658203,"speaker":"A"},{"text":"being","start":3137240,"end":3137560,"confidence":0.9995117,"speaker":"A"},{"text":"able","start":3137560,"end":3137960,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":3139960,"end":3140360,"confidence":1,"speaker":"A"},{"text":"say","start":3140440,"end":3140760,"confidence":0.9951172,"speaker":"A"},{"text":"what","start":3140760,"end":3140960,"confidence":0.9975586,"speaker":"A"},{"text":"transport","start":3140960,"end":3141520,"confidence":0.99853516,"speaker":"A"},{"text":"you","start":3141520,"end":3141760,"confidence":0.99609375,"speaker":"A"},{"text":"use","start":3141760,"end":3142040,"confidence":0.9970703,"speaker":"A"},{"text":"in","start":3142360,"end":3142640,"confidence":0.9169922,"speaker":"A"},{"text":"Open","start":3142640,"end":3142840,"confidence":0.9995117,"speaker":"A"},{"text":"API.","start":3142840,"end":3143560,"confidence":0.7491455,"speaker":"A"},{"text":"And","start":3144760,"end":3145160,"confidence":0.9868164,"speaker":"A"},{"text":"there's","start":3148850,"end":3149330,"confidence":0.84521484,"speaker":"A"},{"text":"two","start":3149330,"end":3149650,"confidence":0.99609375,"speaker":"A"},{"text":"transports","start":3149970,"end":3150730,"confidence":0.9951172,"speaker":"A"},{"text":"available","start":3150730,"end":3151010,"confidence":0.9995117,"speaker":"A"},{"text":"right","start":3151010,"end":3151330,"confidence":0.9995117,"speaker":"A"},{"text":"now.","start":3151330,"end":3151650,"confidence":0.9970703,"speaker":"A"},{"text":"One","start":3152770,"end":3153170,"confidence":0.9663086,"speaker":"A"},{"text":"is,","start":3153330,"end":3153730,"confidence":0.9975586,"speaker":"A"},{"text":"one","start":3156850,"end":3157170,"confidence":0.9892578,"speaker":"A"},{"text":"is","start":3157170,"end":3157490,"confidence":0.99853516,"speaker":"A"},{"text":"your","start":3157490,"end":3157810,"confidence":0.99658203,"speaker":"A"},{"text":"regular","start":3157810,"end":3158210,"confidence":1,"speaker":"A"},{"text":"URL","start":3158210,"end":3158770,"confidence":0.9992676,"speaker":"A"},{"text":"session","start":3158770,"end":3159130,"confidence":0.99934894,"speaker":"A"},{"text":"for","start":3159130,"end":3159290,"confidence":0.99853516,"speaker":"A"},{"text":"clients,","start":3159290,"end":3159730,"confidence":0.78100586,"speaker":"A"},{"text":"which.","start":3159890,"end":3160210,"confidence":0.99853516,"speaker":"A"},{"text":"That","start":3160210,"end":3160410,"confidence":0.9916992,"speaker":"A"},{"text":"makes","start":3160410,"end":3160610,"confidence":0.9951172,"speaker":"A"},{"text":"sense.","start":3160610,"end":3160930,"confidence":0.9995117,"speaker":"A"}]},{"text":"Right. And then there's the Async HTTP client which is typically used like Swift NEO based for servers. The thing is that neither of those are available in wasp. Do you know what WASM is? I have no experience with it, but yes.","start":3160930,"end":3177810,"confidence":0.9897461,"words":[{"text":"Right.","start":3160930,"end":3161250,"confidence":0.9897461,"speaker":"A"},{"text":"And","start":3161570,"end":3161890,"confidence":0.9921875,"speaker":"A"},{"text":"then","start":3161890,"end":3162089,"confidence":0.9892578,"speaker":"A"},{"text":"there's","start":3162089,"end":3162410,"confidence":0.9840495,"speaker":"A"},{"text":"the","start":3162410,"end":3162570,"confidence":0.9584961,"speaker":"A"},{"text":"Async","start":3162570,"end":3163170,"confidence":0.9949951,"speaker":"A"},{"text":"HTTP","start":3163170,"end":3163810,"confidence":0.9881592,"speaker":"A"},{"text":"client","start":3163810,"end":3164170,"confidence":0.9968262,"speaker":"A"},{"text":"which","start":3164170,"end":3164410,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":3164410,"end":3164690,"confidence":0.9995117,"speaker":"A"},{"text":"typically","start":3164690,"end":3165090,"confidence":0.99975586,"speaker":"A"},{"text":"used","start":3165090,"end":3165410,"confidence":0.99658203,"speaker":"A"},{"text":"like","start":3165570,"end":3165850,"confidence":0.9838867,"speaker":"A"},{"text":"Swift","start":3165850,"end":3166130,"confidence":0.89575195,"speaker":"A"},{"text":"NEO","start":3166130,"end":3166530,"confidence":0.94506836,"speaker":"A"},{"text":"based","start":3166530,"end":3166850,"confidence":0.9980469,"speaker":"A"},{"text":"for","start":3167170,"end":3167490,"confidence":0.99560547,"speaker":"A"},{"text":"servers.","start":3167490,"end":3167970,"confidence":0.90649414,"speaker":"A"},{"text":"The","start":3169330,"end":3169610,"confidence":0.99853516,"speaker":"A"},{"text":"thing","start":3169610,"end":3169770,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":3169770,"end":3169970,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":3169970,"end":3170170,"confidence":0.52441406,"speaker":"A"},{"text":"neither","start":3170170,"end":3170410,"confidence":0.99902344,"speaker":"A"},{"text":"of","start":3170410,"end":3170530,"confidence":0.9916992,"speaker":"A"},{"text":"those","start":3170530,"end":3170770,"confidence":0.9980469,"speaker":"A"},{"text":"are","start":3170930,"end":3171250,"confidence":0.99902344,"speaker":"A"},{"text":"available","start":3171250,"end":3171570,"confidence":0.99365234,"speaker":"A"},{"text":"in","start":3171730,"end":3172130,"confidence":0.9638672,"speaker":"A"},{"text":"wasp.","start":3172610,"end":3173170,"confidence":0.58813477,"speaker":"A"},{"text":"Do","start":3174290,"end":3174530,"confidence":0.6435547,"speaker":"A"},{"text":"you","start":3174530,"end":3174610,"confidence":0.99853516,"speaker":"A"},{"text":"know","start":3174610,"end":3174690,"confidence":0.9995117,"speaker":"A"},{"text":"what","start":3174690,"end":3174810,"confidence":0.9980469,"speaker":"A"},{"text":"WASM","start":3174810,"end":3175210,"confidence":0.78027344,"speaker":"A"},{"text":"is?","start":3175210,"end":3175490,"confidence":0.99853516,"speaker":"A"},{"text":"I","start":3176050,"end":3176290,"confidence":0.99902344,"speaker":"C"},{"text":"have","start":3176290,"end":3176410,"confidence":0.9995117,"speaker":"C"},{"text":"no","start":3176410,"end":3176570,"confidence":1,"speaker":"C"},{"text":"experience","start":3176570,"end":3176850,"confidence":1,"speaker":"C"},{"text":"with","start":3176850,"end":3177130,"confidence":0.9995117,"speaker":"C"},{"text":"it,","start":3177130,"end":3177290,"confidence":0.99853516,"speaker":"C"},{"text":"but","start":3177290,"end":3177450,"confidence":0.8720703,"speaker":"C"},{"text":"yes.","start":3177450,"end":3177810,"confidence":0.9963379,"speaker":"C"}]},{"text":"Okay. It's. It's the web browser. Right. So.","start":3178850,"end":3182290,"confidence":0.9892578,"words":[{"text":"Okay.","start":3178850,"end":3179410,"confidence":0.9892578,"speaker":"A"},{"text":"It's.","start":3179490,"end":3179850,"confidence":0.96240234,"speaker":"A"},{"text":"It's","start":3179850,"end":3180290,"confidence":0.98811847,"speaker":"A"},{"text":"the","start":3180290,"end":3180570,"confidence":1,"speaker":"A"},{"text":"web","start":3180570,"end":3180810,"confidence":1,"speaker":"A"},{"text":"browser.","start":3180810,"end":3181210,"confidence":0.99869794,"speaker":"A"},{"text":"Right.","start":3181210,"end":3181490,"confidence":0.99853516,"speaker":"A"},{"text":"So.","start":3181890,"end":3182290,"confidence":0.98876953,"speaker":"A"}]},{"text":"So you really can't use Miskit in. In the. In WASM yet because there is no transport. Now having said that, why on earth would you use. Awesome.","start":3182690,"end":3193810,"confidence":0.9975586,"words":[{"text":"So","start":3182690,"end":3182970,"confidence":0.9975586,"speaker":"A"},{"text":"you","start":3182970,"end":3183130,"confidence":1,"speaker":"A"},{"text":"really","start":3183130,"end":3183290,"confidence":1,"speaker":"A"},{"text":"can't","start":3183290,"end":3183490,"confidence":0.9998372,"speaker":"A"},{"text":"use","start":3183490,"end":3183690,"confidence":0.9995117,"speaker":"A"},{"text":"Miskit","start":3183690,"end":3184370,"confidence":0.95788574,"speaker":"A"},{"text":"in.","start":3184450,"end":3184850,"confidence":0.921875,"speaker":"A"},{"text":"In","start":3186450,"end":3186730,"confidence":0.99609375,"speaker":"A"},{"text":"the.","start":3186730,"end":3186930,"confidence":0.99609375,"speaker":"A"},{"text":"In","start":3186930,"end":3187170,"confidence":0.99658203,"speaker":"A"},{"text":"WASM","start":3187170,"end":3187690,"confidence":0.7368164,"speaker":"A"},{"text":"yet","start":3187690,"end":3187890,"confidence":0.85009766,"speaker":"A"},{"text":"because","start":3187890,"end":3188090,"confidence":1,"speaker":"A"},{"text":"there","start":3188090,"end":3188250,"confidence":1,"speaker":"A"},{"text":"is","start":3188250,"end":3188450,"confidence":0.9975586,"speaker":"A"},{"text":"no","start":3188450,"end":3188649,"confidence":0.9995117,"speaker":"A"},{"text":"transport.","start":3188649,"end":3189170,"confidence":0.998291,"speaker":"A"},{"text":"Now","start":3189170,"end":3189450,"confidence":0.9995117,"speaker":"A"},{"text":"having","start":3189450,"end":3189650,"confidence":1,"speaker":"A"},{"text":"said","start":3189650,"end":3189890,"confidence":1,"speaker":"A"},{"text":"that,","start":3189890,"end":3190210,"confidence":1,"speaker":"A"},{"text":"why","start":3190530,"end":3190850,"confidence":0.99902344,"speaker":"A"},{"text":"on","start":3190850,"end":3191050,"confidence":0.99902344,"speaker":"A"},{"text":"earth","start":3191050,"end":3191290,"confidence":1,"speaker":"A"},{"text":"would","start":3191290,"end":3191450,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":3191450,"end":3191730,"confidence":0.9995117,"speaker":"A"},{"text":"use.","start":3192050,"end":3192450,"confidence":0.99658203,"speaker":"A"},{"text":"Awesome.","start":3193090,"end":3193810,"confidence":0.7972819,"speaker":"A"}]},{"text":"Why would you use Miskit in the browser? Why not just use CloudKit js? So that's essentially, you know, What other questions do you have?","start":3194050,"end":3210940,"confidence":0.7753906,"words":[{"text":"Why","start":3194050,"end":3194330,"confidence":0.7753906,"speaker":"A"},{"text":"would","start":3194330,"end":3194450,"confidence":0.9667969,"speaker":"A"},{"text":"you","start":3194450,"end":3194530,"confidence":0.8652344,"speaker":"A"},{"text":"use","start":3194530,"end":3194650,"confidence":0.9169922,"speaker":"A"},{"text":"Miskit","start":3194650,"end":3195130,"confidence":0.9088135,"speaker":"A"},{"text":"in","start":3195130,"end":3195250,"confidence":0.99609375,"speaker":"A"},{"text":"the","start":3195250,"end":3195330,"confidence":0.9995117,"speaker":"A"},{"text":"browser?","start":3195330,"end":3195690,"confidence":1,"speaker":"A"},{"text":"Why","start":3195690,"end":3195930,"confidence":0.9995117,"speaker":"A"},{"text":"not","start":3195930,"end":3196090,"confidence":0.9995117,"speaker":"A"},{"text":"just","start":3196090,"end":3196250,"confidence":0.9995117,"speaker":"A"},{"text":"use","start":3196250,"end":3196450,"confidence":0.9995117,"speaker":"A"},{"text":"CloudKit","start":3196450,"end":3196970,"confidence":0.99780273,"speaker":"A"},{"text":"js?","start":3196970,"end":3197410,"confidence":0.8005371,"speaker":"A"},{"text":"So","start":3198380,"end":3198620,"confidence":0.98828125,"speaker":"A"},{"text":"that's","start":3199660,"end":3200100,"confidence":0.9996745,"speaker":"A"},{"text":"essentially,","start":3200100,"end":3200700,"confidence":0.9996338,"speaker":"A"},{"text":"you","start":3201580,"end":3201820,"confidence":0.765625,"speaker":"A"},{"text":"know,","start":3201820,"end":3202060,"confidence":0.77685547,"speaker":"A"},{"text":"What","start":3209260,"end":3209540,"confidence":0.99902344,"speaker":"A"},{"text":"other","start":3209540,"end":3209780,"confidence":0.9975586,"speaker":"A"},{"text":"questions","start":3209780,"end":3210340,"confidence":0.99975586,"speaker":"A"},{"text":"do","start":3210340,"end":3210500,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":3210500,"end":3210660,"confidence":1,"speaker":"A"},{"text":"have?","start":3210660,"end":3210940,"confidence":1,"speaker":"A"}]},{"text":"My brain is mushy right now, so.","start":3215660,"end":3218300,"confidence":0.96240234,"words":[{"text":"My","start":3215660,"end":3216060,"confidence":0.96240234,"speaker":"C"},{"text":"brain","start":3216300,"end":3216780,"confidence":0.99975586,"speaker":"C"},{"text":"is","start":3216780,"end":3217020,"confidence":0.9995117,"speaker":"C"},{"text":"mushy","start":3217020,"end":3217460,"confidence":0.9998372,"speaker":"C"},{"text":"right","start":3217460,"end":3217620,"confidence":0.9995117,"speaker":"C"},{"text":"now,","start":3217620,"end":3217900,"confidence":1,"speaker":"C"},{"text":"so.","start":3217900,"end":3218300,"confidence":0.9770508,"speaker":"C"}]},{"text":"Because of my presentation or because other. Things, I got two hours of sleep. Oh, I'm so sorry. So I'm following as best as I can.","start":3221020,"end":3231450,"confidence":0.9970703,"words":[{"text":"Because","start":3221020,"end":3221340,"confidence":0.9970703,"speaker":"A"},{"text":"of","start":3221340,"end":3221540,"confidence":0.99609375,"speaker":"A"},{"text":"my","start":3221540,"end":3221700,"confidence":0.99853516,"speaker":"A"},{"text":"presentation","start":3221700,"end":3222300,"confidence":0.99975586,"speaker":"A"},{"text":"or","start":3222300,"end":3222540,"confidence":0.9902344,"speaker":"A"},{"text":"because","start":3222540,"end":3222860,"confidence":0.99853516,"speaker":"A"},{"text":"other.","start":3223020,"end":3223380,"confidence":0.99902344,"speaker":"A"},{"text":"Things,","start":3223380,"end":3223740,"confidence":0.9946289,"speaker":"C"},{"text":"I","start":3224570,"end":3224730,"confidence":0.98876953,"speaker":"C"},{"text":"got","start":3224730,"end":3224930,"confidence":0.9995117,"speaker":"C"},{"text":"two","start":3224930,"end":3225090,"confidence":0.9995117,"speaker":"C"},{"text":"hours","start":3225090,"end":3225290,"confidence":1,"speaker":"C"},{"text":"of","start":3225290,"end":3225450,"confidence":0.9873047,"speaker":"C"},{"text":"sleep.","start":3225450,"end":3225850,"confidence":0.9555664,"speaker":"C"},{"text":"Oh,","start":3226650,"end":3226970,"confidence":0.7734375,"speaker":"A"},{"text":"I'm","start":3226970,"end":3227130,"confidence":0.9970703,"speaker":"A"},{"text":"so","start":3227130,"end":3227290,"confidence":0.99365234,"speaker":"A"},{"text":"sorry.","start":3227290,"end":3227690,"confidence":0.9998372,"speaker":"A"},{"text":"So","start":3228170,"end":3228570,"confidence":0.95214844,"speaker":"C"},{"text":"I'm","start":3229770,"end":3230170,"confidence":0.97526044,"speaker":"C"},{"text":"following","start":3230170,"end":3230450,"confidence":0.99853516,"speaker":"C"},{"text":"as","start":3230450,"end":3230690,"confidence":0.9995117,"speaker":"C"},{"text":"best","start":3230690,"end":3230850,"confidence":0.9980469,"speaker":"C"},{"text":"as","start":3230850,"end":3231010,"confidence":0.9941406,"speaker":"C"},{"text":"I","start":3231010,"end":3231170,"confidence":0.9995117,"speaker":"C"},{"text":"can.","start":3231170,"end":3231450,"confidence":0.99902344,"speaker":"C"}]},{"text":"Snuggling. Yeah, the intro was basically how I originally built it for hard Twitch in 2020 for a private database login for the Apple Watch because I don't want to have a login screen. And so basically there's a way in the web browser to link your Apple Watch to your account and then from there you don't need to authenticate anymore. Nice. I built that all from hand and then in 23 they came out with the Open API generator which was like, oh wait, what if I can create an open API file out of Apple's 10 year old documentation?","start":3234330,"end":3270800,"confidence":0.87927246,"words":[{"text":"Snuggling.","start":3234330,"end":3235050,"confidence":0.87927246,"speaker":"A"},{"text":"Yeah,","start":3237050,"end":3237410,"confidence":0.96761066,"speaker":"A"},{"text":"the","start":3237410,"end":3237570,"confidence":0.99609375,"speaker":"A"},{"text":"intro","start":3237570,"end":3238010,"confidence":0.99975586,"speaker":"A"},{"text":"was","start":3238090,"end":3238410,"confidence":0.99853516,"speaker":"A"},{"text":"basically","start":3238410,"end":3238890,"confidence":0.9995117,"speaker":"A"},{"text":"how","start":3239290,"end":3239610,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":3239610,"end":3239930,"confidence":0.9946289,"speaker":"A"},{"text":"originally","start":3240490,"end":3241010,"confidence":0.9998372,"speaker":"A"},{"text":"built","start":3241010,"end":3241250,"confidence":0.992513,"speaker":"A"},{"text":"it","start":3241250,"end":3241410,"confidence":0.9814453,"speaker":"A"},{"text":"for","start":3241410,"end":3241570,"confidence":0.9995117,"speaker":"A"},{"text":"hard","start":3241570,"end":3241730,"confidence":0.4362793,"speaker":"A"},{"text":"Twitch","start":3241730,"end":3242050,"confidence":0.9111328,"speaker":"A"},{"text":"in","start":3242050,"end":3242210,"confidence":0.99316406,"speaker":"A"},{"text":"2020","start":3242210,"end":3242810,"confidence":0.99854,"speaker":"A"},{"text":"for","start":3243210,"end":3243490,"confidence":0.94628906,"speaker":"A"},{"text":"a","start":3243490,"end":3243650,"confidence":0.7871094,"speaker":"A"},{"text":"private","start":3243650,"end":3243890,"confidence":1,"speaker":"A"},{"text":"database","start":3243890,"end":3244570,"confidence":0.99576825,"speaker":"A"},{"text":"login","start":3244730,"end":3245450,"confidence":0.9367676,"speaker":"A"},{"text":"for","start":3245930,"end":3246210,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":3246210,"end":3246370,"confidence":0.9980469,"speaker":"A"},{"text":"Apple","start":3246370,"end":3246650,"confidence":0.99975586,"speaker":"A"},{"text":"Watch","start":3246650,"end":3246890,"confidence":0.8803711,"speaker":"A"},{"text":"because","start":3246890,"end":3247170,"confidence":0.99853516,"speaker":"A"},{"text":"I","start":3247170,"end":3247290,"confidence":0.9975586,"speaker":"A"},{"text":"don't","start":3247290,"end":3247450,"confidence":0.99658203,"speaker":"A"},{"text":"want","start":3247450,"end":3247530,"confidence":0.8720703,"speaker":"A"},{"text":"to","start":3247530,"end":3247610,"confidence":0.9980469,"speaker":"A"},{"text":"have","start":3247610,"end":3247690,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":3247690,"end":3247810,"confidence":0.99853516,"speaker":"A"},{"text":"login","start":3247810,"end":3248210,"confidence":0.99731445,"speaker":"A"},{"text":"screen.","start":3248210,"end":3248490,"confidence":0.99975586,"speaker":"A"},{"text":"And","start":3248490,"end":3248690,"confidence":0.98583984,"speaker":"A"},{"text":"so","start":3248690,"end":3248810,"confidence":0.99902344,"speaker":"A"},{"text":"basically","start":3248810,"end":3249210,"confidence":0.9995117,"speaker":"A"},{"text":"there's","start":3249210,"end":3249570,"confidence":0.99934894,"speaker":"A"},{"text":"a","start":3249570,"end":3249690,"confidence":0.99853516,"speaker":"A"},{"text":"way","start":3249690,"end":3249810,"confidence":0.99853516,"speaker":"A"},{"text":"in","start":3249810,"end":3249930,"confidence":0.9980469,"speaker":"A"},{"text":"the","start":3249930,"end":3250010,"confidence":0.99902344,"speaker":"A"},{"text":"web","start":3250010,"end":3250170,"confidence":0.9995117,"speaker":"A"},{"text":"browser","start":3250170,"end":3250450,"confidence":1,"speaker":"A"},{"text":"to","start":3250450,"end":3250610,"confidence":0.99902344,"speaker":"A"},{"text":"link","start":3250610,"end":3250810,"confidence":0.99975586,"speaker":"A"},{"text":"your","start":3250810,"end":3250970,"confidence":0.99902344,"speaker":"A"},{"text":"Apple","start":3250970,"end":3251290,"confidence":0.9333496,"speaker":"A"},{"text":"Watch","start":3251290,"end":3251610,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":3251770,"end":3252050,"confidence":0.9975586,"speaker":"A"},{"text":"your","start":3252050,"end":3252210,"confidence":0.99902344,"speaker":"A"},{"text":"account","start":3252210,"end":3252490,"confidence":1,"speaker":"A"},{"text":"and","start":3252490,"end":3252770,"confidence":0.99316406,"speaker":"A"},{"text":"then","start":3252770,"end":3252970,"confidence":0.8930664,"speaker":"A"},{"text":"from","start":3252970,"end":3253130,"confidence":1,"speaker":"A"},{"text":"there","start":3253130,"end":3253290,"confidence":1,"speaker":"A"},{"text":"you","start":3253290,"end":3253450,"confidence":1,"speaker":"A"},{"text":"don't","start":3253450,"end":3253610,"confidence":1,"speaker":"A"},{"text":"need","start":3253610,"end":3253730,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":3253730,"end":3253850,"confidence":0.95947266,"speaker":"A"},{"text":"authenticate","start":3253850,"end":3254370,"confidence":0.99975586,"speaker":"A"},{"text":"anymore.","start":3254370,"end":3254890,"confidence":0.991862,"speaker":"A"},{"text":"Nice.","start":3255280,"end":3255600,"confidence":0.94921875,"speaker":"A"},{"text":"I","start":3255760,"end":3256000,"confidence":0.9970703,"speaker":"A"},{"text":"built","start":3256000,"end":3256280,"confidence":0.8284505,"speaker":"A"},{"text":"that","start":3256280,"end":3256440,"confidence":0.9692383,"speaker":"A"},{"text":"all","start":3256440,"end":3256600,"confidence":0.99609375,"speaker":"A"},{"text":"from","start":3256600,"end":3256800,"confidence":1,"speaker":"A"},{"text":"hand","start":3256800,"end":3257120,"confidence":0.9951172,"speaker":"A"},{"text":"and","start":3258400,"end":3258680,"confidence":0.73095703,"speaker":"A"},{"text":"then","start":3258680,"end":3258960,"confidence":0.9941406,"speaker":"A"},{"text":"in","start":3259200,"end":3259520,"confidence":0.9970703,"speaker":"A"},{"text":"23","start":3259520,"end":3260040,"confidence":0.9939,"speaker":"A"},{"text":"they","start":3260040,"end":3260280,"confidence":0.9995117,"speaker":"A"},{"text":"came","start":3260280,"end":3260440,"confidence":0.9995117,"speaker":"A"},{"text":"out","start":3260440,"end":3260560,"confidence":0.94921875,"speaker":"A"},{"text":"with","start":3260560,"end":3260680,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":3260680,"end":3260800,"confidence":0.93652344,"speaker":"A"},{"text":"Open","start":3260800,"end":3261000,"confidence":0.9995117,"speaker":"A"},{"text":"API","start":3261000,"end":3261520,"confidence":0.9807129,"speaker":"A"},{"text":"generator","start":3261520,"end":3262160,"confidence":0.9995117,"speaker":"A"},{"text":"which","start":3262640,"end":3263000,"confidence":0.99609375,"speaker":"A"},{"text":"was","start":3263000,"end":3263280,"confidence":0.64746094,"speaker":"A"},{"text":"like,","start":3263280,"end":3263480,"confidence":0.97558594,"speaker":"A"},{"text":"oh","start":3263480,"end":3263760,"confidence":0.91674805,"speaker":"A"},{"text":"wait,","start":3263760,"end":3264160,"confidence":0.9980469,"speaker":"A"},{"text":"what","start":3264160,"end":3264440,"confidence":0.99121094,"speaker":"A"},{"text":"if","start":3264440,"end":3264720,"confidence":0.99853516,"speaker":"A"},{"text":"I","start":3264800,"end":3265040,"confidence":0.9980469,"speaker":"A"},{"text":"can","start":3265040,"end":3265160,"confidence":0.99658203,"speaker":"A"},{"text":"create","start":3265160,"end":3265320,"confidence":0.99902344,"speaker":"A"},{"text":"an","start":3265320,"end":3265480,"confidence":0.96777344,"speaker":"A"},{"text":"open","start":3265480,"end":3265720,"confidence":0.9995117,"speaker":"A"},{"text":"API","start":3265720,"end":3266320,"confidence":0.98046875,"speaker":"A"},{"text":"file","start":3266800,"end":3267280,"confidence":0.98046875,"speaker":"A"},{"text":"out","start":3267520,"end":3267840,"confidence":0.99560547,"speaker":"A"},{"text":"of","start":3267840,"end":3268160,"confidence":0.99853516,"speaker":"A"},{"text":"Apple's","start":3268320,"end":3269040,"confidence":0.9937744,"speaker":"A"},{"text":"10","start":3269280,"end":3269600,"confidence":0.99951,"speaker":"A"},{"text":"year","start":3269600,"end":3269800,"confidence":0.9995117,"speaker":"A"},{"text":"old","start":3269800,"end":3270000,"confidence":0.99902344,"speaker":"A"},{"text":"documentation?","start":3270000,"end":3270800,"confidence":0.9923828,"speaker":"A"}]},{"text":"That'd be a lot of work, but I could do it. And I don't know if you heard, but there was this thing that came out a couple years ago called AI and it's really good at creating documentation for your code, but it's also really good at creating code for your documentation. And so I was like, oh yeah, this is great. Like I can just, I can just Feed it the documentation and go from there. And, like, basically, I've been going step by step through.","start":3273120,"end":3305140,"confidence":0.8873698,"words":[{"text":"That'd","start":3273120,"end":3273520,"confidence":0.8873698,"speaker":"A"},{"text":"be","start":3273520,"end":3273640,"confidence":1,"speaker":"A"},{"text":"a","start":3273640,"end":3273760,"confidence":0.99902344,"speaker":"A"},{"text":"lot","start":3273760,"end":3273840,"confidence":1,"speaker":"A"},{"text":"of","start":3273840,"end":3273960,"confidence":0.9975586,"speaker":"A"},{"text":"work,","start":3273960,"end":3274160,"confidence":1,"speaker":"A"},{"text":"but","start":3274160,"end":3274400,"confidence":0.6777344,"speaker":"A"},{"text":"I","start":3274400,"end":3274600,"confidence":0.9995117,"speaker":"A"},{"text":"could","start":3274600,"end":3274760,"confidence":0.98876953,"speaker":"A"},{"text":"do","start":3274760,"end":3274920,"confidence":0.9995117,"speaker":"A"},{"text":"it.","start":3274920,"end":3275200,"confidence":0.9995117,"speaker":"A"},{"text":"And","start":3275520,"end":3275920,"confidence":0.8173828,"speaker":"A"},{"text":"I","start":3276000,"end":3276280,"confidence":0.99902344,"speaker":"A"},{"text":"don't","start":3276280,"end":3276480,"confidence":0.9949544,"speaker":"A"},{"text":"know","start":3276480,"end":3276560,"confidence":0.99902344,"speaker":"A"},{"text":"if","start":3276560,"end":3276640,"confidence":1,"speaker":"A"},{"text":"you","start":3276640,"end":3276760,"confidence":0.9995117,"speaker":"A"},{"text":"heard,","start":3276760,"end":3277120,"confidence":0.99902344,"speaker":"A"},{"text":"but","start":3277600,"end":3278000,"confidence":0.9921875,"speaker":"A"},{"text":"there","start":3278960,"end":3279240,"confidence":0.9995117,"speaker":"A"},{"text":"was","start":3279240,"end":3279400,"confidence":0.9589844,"speaker":"A"},{"text":"this","start":3279400,"end":3279560,"confidence":0.9746094,"speaker":"A"},{"text":"thing","start":3279560,"end":3279720,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":3279720,"end":3279840,"confidence":0.99902344,"speaker":"A"},{"text":"came","start":3279840,"end":3279960,"confidence":0.99853516,"speaker":"A"},{"text":"out","start":3279960,"end":3280240,"confidence":0.9980469,"speaker":"A"},{"text":"a","start":3280240,"end":3280480,"confidence":0.99853516,"speaker":"A"},{"text":"couple","start":3280480,"end":3280720,"confidence":0.9992676,"speaker":"A"},{"text":"years","start":3280720,"end":3280920,"confidence":0.9995117,"speaker":"A"},{"text":"ago","start":3280920,"end":3281200,"confidence":0.9980469,"speaker":"A"},{"text":"called","start":3281780,"end":3282020,"confidence":0.99609375,"speaker":"A"},{"text":"AI","start":3282580,"end":3283220,"confidence":0.95092773,"speaker":"A"},{"text":"and","start":3283940,"end":3284340,"confidence":0.9873047,"speaker":"A"},{"text":"it's","start":3284980,"end":3285340,"confidence":0.9996745,"speaker":"A"},{"text":"really","start":3285340,"end":3285500,"confidence":0.9995117,"speaker":"A"},{"text":"good","start":3285500,"end":3285700,"confidence":0.9995117,"speaker":"A"},{"text":"at","start":3285700,"end":3285900,"confidence":0.98095703,"speaker":"A"},{"text":"creating","start":3285900,"end":3286260,"confidence":0.9995117,"speaker":"A"},{"text":"documentation","start":3286260,"end":3286940,"confidence":0.99990237,"speaker":"A"},{"text":"for","start":3286940,"end":3287180,"confidence":1,"speaker":"A"},{"text":"your","start":3287180,"end":3287340,"confidence":0.9995117,"speaker":"A"},{"text":"code,","start":3287340,"end":3287660,"confidence":0.94222003,"speaker":"A"},{"text":"but","start":3287660,"end":3287900,"confidence":0.9975586,"speaker":"A"},{"text":"it's","start":3287900,"end":3288100,"confidence":0.9998372,"speaker":"A"},{"text":"also","start":3288100,"end":3288260,"confidence":0.9995117,"speaker":"A"},{"text":"really","start":3288260,"end":3288500,"confidence":0.5620117,"speaker":"A"},{"text":"good","start":3288500,"end":3288700,"confidence":0.9995117,"speaker":"A"},{"text":"at","start":3288700,"end":3288860,"confidence":0.9995117,"speaker":"A"},{"text":"creating","start":3288860,"end":3289140,"confidence":0.96777344,"speaker":"A"},{"text":"code","start":3289140,"end":3289420,"confidence":0.9996745,"speaker":"A"},{"text":"for","start":3289420,"end":3289620,"confidence":0.9995117,"speaker":"A"},{"text":"your","start":3289620,"end":3289820,"confidence":0.9995117,"speaker":"A"},{"text":"documentation.","start":3289820,"end":3290500,"confidence":0.99902344,"speaker":"A"},{"text":"And","start":3291300,"end":3291580,"confidence":0.8925781,"speaker":"A"},{"text":"so","start":3291580,"end":3291700,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":3291700,"end":3291820,"confidence":0.9975586,"speaker":"A"},{"text":"was","start":3291820,"end":3292020,"confidence":0.9995117,"speaker":"A"},{"text":"like,","start":3292020,"end":3292340,"confidence":0.99658203,"speaker":"A"},{"text":"oh","start":3292500,"end":3292980,"confidence":0.9580078,"speaker":"A"},{"text":"yeah,","start":3293460,"end":3293940,"confidence":0.9975586,"speaker":"A"},{"text":"this","start":3293940,"end":3294220,"confidence":0.9951172,"speaker":"A"},{"text":"is","start":3294220,"end":3294380,"confidence":0.99853516,"speaker":"A"},{"text":"great.","start":3294380,"end":3294660,"confidence":0.9980469,"speaker":"A"},{"text":"Like","start":3295060,"end":3295460,"confidence":0.9238281,"speaker":"A"},{"text":"I","start":3295460,"end":3295740,"confidence":0.9707031,"speaker":"A"},{"text":"can","start":3295740,"end":3295900,"confidence":0.99658203,"speaker":"A"},{"text":"just,","start":3295900,"end":3296180,"confidence":0.9980469,"speaker":"A"},{"text":"I","start":3296740,"end":3296980,"confidence":0.97753906,"speaker":"A"},{"text":"can","start":3296980,"end":3297140,"confidence":0.7270508,"speaker":"A"},{"text":"just","start":3297140,"end":3297420,"confidence":0.9995117,"speaker":"A"},{"text":"Feed","start":3297420,"end":3297739,"confidence":0.9968262,"speaker":"A"},{"text":"it","start":3297739,"end":3297900,"confidence":0.8671875,"speaker":"A"},{"text":"the","start":3297900,"end":3298060,"confidence":0.99853516,"speaker":"A"},{"text":"documentation","start":3298060,"end":3298740,"confidence":0.99921876,"speaker":"A"},{"text":"and","start":3298980,"end":3299380,"confidence":0.9238281,"speaker":"A"},{"text":"go","start":3301140,"end":3301420,"confidence":0.9970703,"speaker":"A"},{"text":"from","start":3301420,"end":3301620,"confidence":0.9995117,"speaker":"A"},{"text":"there.","start":3301620,"end":3301940,"confidence":0.9995117,"speaker":"A"},{"text":"And,","start":3302020,"end":3302340,"confidence":0.97998047,"speaker":"A"},{"text":"like,","start":3302340,"end":3302660,"confidence":0.9477539,"speaker":"A"},{"text":"basically,","start":3302820,"end":3303300,"confidence":0.99975586,"speaker":"A"},{"text":"I've","start":3303300,"end":3303540,"confidence":0.99072266,"speaker":"A"},{"text":"been","start":3303540,"end":3303660,"confidence":0.9902344,"speaker":"A"},{"text":"going","start":3303660,"end":3303860,"confidence":0.9995117,"speaker":"A"},{"text":"step","start":3303860,"end":3304060,"confidence":0.9995117,"speaker":"A"},{"text":"by","start":3304060,"end":3304260,"confidence":1,"speaker":"A"},{"text":"step","start":3304260,"end":3304580,"confidence":1,"speaker":"A"},{"text":"through.","start":3304740,"end":3305140,"confidence":0.98876953,"speaker":"A"}]},{"text":"Like I said, if you looked at the miskit repo, like, I'm going through step by step and adding new APIs based on what's available in the documentation, piece by piece. And I would say at this point, it's like most of the really, like 80% of that people use is there. There's like, stuff like subscriptions and zones that I'm still trying to figure out, but it's. It's pretty close to done at this point. Mm.","start":3305940,"end":3331900,"confidence":0.9980469,"words":[{"text":"Like","start":3305940,"end":3306260,"confidence":0.9980469,"speaker":"A"},{"text":"I","start":3306260,"end":3306460,"confidence":1,"speaker":"A"},{"text":"said,","start":3306460,"end":3306620,"confidence":1,"speaker":"A"},{"text":"if","start":3306620,"end":3306820,"confidence":0.6225586,"speaker":"A"},{"text":"you","start":3306820,"end":3306980,"confidence":1,"speaker":"A"},{"text":"looked","start":3306980,"end":3307220,"confidence":0.9802246,"speaker":"A"},{"text":"at","start":3307220,"end":3307340,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":3307340,"end":3307620,"confidence":0.94140625,"speaker":"A"},{"text":"miskit","start":3307700,"end":3308500,"confidence":0.876709,"speaker":"A"},{"text":"repo,","start":3308780,"end":3309300,"confidence":0.99072266,"speaker":"A"},{"text":"like,","start":3309300,"end":3309580,"confidence":0.9838867,"speaker":"A"},{"text":"I'm","start":3309580,"end":3309820,"confidence":0.9995117,"speaker":"A"},{"text":"going","start":3309820,"end":3309940,"confidence":0.9995117,"speaker":"A"},{"text":"through","start":3309940,"end":3310140,"confidence":0.9995117,"speaker":"A"},{"text":"step","start":3310140,"end":3310340,"confidence":0.9946289,"speaker":"A"},{"text":"by","start":3310340,"end":3310500,"confidence":0.99902344,"speaker":"A"},{"text":"step","start":3310500,"end":3310660,"confidence":1,"speaker":"A"},{"text":"and","start":3310660,"end":3310820,"confidence":0.93896484,"speaker":"A"},{"text":"adding","start":3310820,"end":3311260,"confidence":0.998291,"speaker":"A"},{"text":"new","start":3311660,"end":3312060,"confidence":0.9995117,"speaker":"A"},{"text":"APIs","start":3312380,"end":3313100,"confidence":0.98168945,"speaker":"A"},{"text":"based","start":3314300,"end":3314620,"confidence":0.9995117,"speaker":"A"},{"text":"on","start":3314620,"end":3314780,"confidence":0.9995117,"speaker":"A"},{"text":"what's","start":3314780,"end":3315020,"confidence":0.9996745,"speaker":"A"},{"text":"available","start":3315020,"end":3315220,"confidence":1,"speaker":"A"},{"text":"in","start":3315220,"end":3315460,"confidence":0.95654297,"speaker":"A"},{"text":"the","start":3315460,"end":3315580,"confidence":0.99902344,"speaker":"A"},{"text":"documentation,","start":3315580,"end":3316300,"confidence":0.99677736,"speaker":"A"},{"text":"piece","start":3316700,"end":3317060,"confidence":0.9938151,"speaker":"A"},{"text":"by","start":3317060,"end":3317220,"confidence":0.9291992,"speaker":"A"},{"text":"piece.","start":3317220,"end":3317500,"confidence":0.99332684,"speaker":"A"},{"text":"And","start":3317500,"end":3317660,"confidence":0.99121094,"speaker":"A"},{"text":"I","start":3317660,"end":3317740,"confidence":0.9995117,"speaker":"A"},{"text":"would","start":3317740,"end":3317820,"confidence":1,"speaker":"A"},{"text":"say","start":3317820,"end":3317940,"confidence":1,"speaker":"A"},{"text":"at","start":3317940,"end":3318060,"confidence":0.9995117,"speaker":"A"},{"text":"this","start":3318060,"end":3318180,"confidence":1,"speaker":"A"},{"text":"point,","start":3318180,"end":3318340,"confidence":0.99902344,"speaker":"A"},{"text":"it's","start":3318340,"end":3318580,"confidence":0.9899089,"speaker":"A"},{"text":"like","start":3318580,"end":3318860,"confidence":0.9975586,"speaker":"A"},{"text":"most","start":3319340,"end":3319660,"confidence":1,"speaker":"A"},{"text":"of","start":3319660,"end":3319820,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":3319820,"end":3320020,"confidence":0.99658203,"speaker":"A"},{"text":"really,","start":3320020,"end":3320380,"confidence":0.99658203,"speaker":"A"},{"text":"like","start":3320620,"end":3320940,"confidence":0.98876953,"speaker":"A"},{"text":"80%","start":3320940,"end":3321500,"confidence":0.96655,"speaker":"A"},{"text":"of","start":3321500,"end":3321780,"confidence":0.7285156,"speaker":"A"},{"text":"that","start":3321780,"end":3321940,"confidence":0.9941406,"speaker":"A"},{"text":"people","start":3321940,"end":3322140,"confidence":1,"speaker":"A"},{"text":"use","start":3322140,"end":3322420,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":3322420,"end":3322660,"confidence":0.98876953,"speaker":"A"},{"text":"there.","start":3322660,"end":3322940,"confidence":0.9951172,"speaker":"A"},{"text":"There's","start":3322940,"end":3323340,"confidence":0.9998372,"speaker":"A"},{"text":"like,","start":3323340,"end":3323500,"confidence":0.99121094,"speaker":"A"},{"text":"stuff","start":3323500,"end":3323780,"confidence":0.9995117,"speaker":"A"},{"text":"like","start":3323780,"end":3323980,"confidence":0.99902344,"speaker":"A"},{"text":"subscriptions","start":3323980,"end":3324619,"confidence":0.99501956,"speaker":"A"},{"text":"and","start":3324619,"end":3324940,"confidence":0.99658203,"speaker":"A"},{"text":"zones","start":3324940,"end":3325300,"confidence":0.95703125,"speaker":"A"},{"text":"that","start":3325300,"end":3325660,"confidence":0.99316406,"speaker":"A"},{"text":"I'm","start":3325980,"end":3326340,"confidence":0.9868164,"speaker":"A"},{"text":"still","start":3326340,"end":3326500,"confidence":0.9975586,"speaker":"A"},{"text":"trying","start":3326500,"end":3326700,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":3326700,"end":3326860,"confidence":0.9995117,"speaker":"A"},{"text":"figure","start":3326860,"end":3327140,"confidence":0.99975586,"speaker":"A"},{"text":"out,","start":3327140,"end":3327420,"confidence":0.99121094,"speaker":"A"},{"text":"but","start":3328460,"end":3328780,"confidence":0.9941406,"speaker":"A"},{"text":"it's.","start":3328780,"end":3329100,"confidence":0.9900716,"speaker":"A"},{"text":"It's","start":3329100,"end":3329340,"confidence":0.98746747,"speaker":"A"},{"text":"pretty","start":3329340,"end":3329540,"confidence":0.9991862,"speaker":"A"},{"text":"close","start":3329540,"end":3329740,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":3329740,"end":3329980,"confidence":0.9975586,"speaker":"A"},{"text":"done","start":3329980,"end":3330260,"confidence":0.95410156,"speaker":"A"},{"text":"at","start":3330260,"end":3330460,"confidence":0.99902344,"speaker":"A"},{"text":"this","start":3330460,"end":3330620,"confidence":0.95751953,"speaker":"A"},{"text":"point.","start":3330620,"end":3330940,"confidence":0.66552734,"speaker":"A"},{"text":"Mm.","start":3331260,"end":3331900,"confidence":0.62402344,"speaker":"B"}]},{"text":"If you use it. Yeah, it's one of those. Because I. Go ahead. Yeah.","start":3335110,"end":3338950,"confidence":0.56103516,"words":[{"text":"If","start":3335110,"end":3335230,"confidence":0.56103516,"speaker":"A"},{"text":"you","start":3335230,"end":3335350,"confidence":0.99902344,"speaker":"A"},{"text":"use","start":3335350,"end":3335510,"confidence":0.9975586,"speaker":"A"},{"text":"it.","start":3335510,"end":3335830,"confidence":0.5029297,"speaker":"A"},{"text":"Yeah,","start":3336230,"end":3336550,"confidence":0.9943034,"speaker":"C"},{"text":"it's","start":3336550,"end":3336630,"confidence":0.94905597,"speaker":"C"},{"text":"one","start":3336630,"end":3336750,"confidence":0.9902344,"speaker":"C"},{"text":"of","start":3336750,"end":3336870,"confidence":0.99853516,"speaker":"C"},{"text":"those.","start":3336870,"end":3337110,"confidence":0.9760742,"speaker":"C"},{"text":"Because","start":3337270,"end":3337630,"confidence":0.7348633,"speaker":"A"},{"text":"I.","start":3337630,"end":3337990,"confidence":0.86621094,"speaker":"A"},{"text":"Go","start":3338070,"end":3338350,"confidence":0.9902344,"speaker":"A"},{"text":"ahead.","start":3338350,"end":3338590,"confidence":0.9980469,"speaker":"A"},{"text":"Yeah.","start":3338590,"end":3338950,"confidence":0.99397784,"speaker":"C"}]},{"text":"I was gonna say it's one of those projects that makes me want to set up a. Like a vapor server or something just to do some Swift on the server. Yeah. Or just like, I wonder if there's like, something you do on a pie, like just hook it up to a CloudKit database. Like, there's a lot you could do here because all you need is decent os.","start":3338950,"end":3357510,"confidence":0.49267578,"words":[{"text":"I","start":3338950,"end":3339110,"confidence":0.49267578,"speaker":"C"},{"text":"was","start":3339110,"end":3339230,"confidence":0.9189453,"speaker":"C"},{"text":"gonna","start":3339230,"end":3339430,"confidence":0.83776855,"speaker":"C"},{"text":"say","start":3339430,"end":3339510,"confidence":1,"speaker":"C"},{"text":"it's","start":3339510,"end":3339670,"confidence":0.9998372,"speaker":"C"},{"text":"one","start":3339670,"end":3339750,"confidence":1,"speaker":"C"},{"text":"of","start":3339750,"end":3339830,"confidence":0.9995117,"speaker":"C"},{"text":"those","start":3339830,"end":3339950,"confidence":0.9995117,"speaker":"C"},{"text":"projects","start":3339950,"end":3340310,"confidence":0.99975586,"speaker":"C"},{"text":"that","start":3340310,"end":3340430,"confidence":1,"speaker":"C"},{"text":"makes","start":3340430,"end":3340590,"confidence":0.9995117,"speaker":"C"},{"text":"me","start":3340590,"end":3340750,"confidence":0.9995117,"speaker":"C"},{"text":"want","start":3340750,"end":3340910,"confidence":0.9604492,"speaker":"C"},{"text":"to","start":3340910,"end":3341070,"confidence":1,"speaker":"C"},{"text":"set","start":3341070,"end":3341230,"confidence":1,"speaker":"C"},{"text":"up","start":3341230,"end":3341390,"confidence":0.9995117,"speaker":"C"},{"text":"a.","start":3341390,"end":3341670,"confidence":0.96240234,"speaker":"C"},{"text":"Like","start":3342150,"end":3342470,"confidence":0.9941406,"speaker":"C"},{"text":"a","start":3342470,"end":3342750,"confidence":0.99902344,"speaker":"C"},{"text":"vapor","start":3342750,"end":3343310,"confidence":0.98551434,"speaker":"C"},{"text":"server","start":3343310,"end":3343630,"confidence":0.9995117,"speaker":"C"},{"text":"or","start":3343630,"end":3343790,"confidence":0.99853516,"speaker":"C"},{"text":"something","start":3343790,"end":3344030,"confidence":1,"speaker":"C"},{"text":"just","start":3344030,"end":3344270,"confidence":1,"speaker":"C"},{"text":"to","start":3344270,"end":3344390,"confidence":1,"speaker":"C"},{"text":"do","start":3344390,"end":3344510,"confidence":0.9995117,"speaker":"C"},{"text":"some","start":3344510,"end":3344670,"confidence":1,"speaker":"C"},{"text":"Swift","start":3344670,"end":3344990,"confidence":0.99975586,"speaker":"C"},{"text":"on","start":3344990,"end":3345110,"confidence":1,"speaker":"C"},{"text":"the","start":3345110,"end":3345230,"confidence":1,"speaker":"C"},{"text":"server.","start":3345230,"end":3345670,"confidence":0.99975586,"speaker":"C"},{"text":"Yeah.","start":3346630,"end":3347110,"confidence":0.9916992,"speaker":"A"},{"text":"Or","start":3347270,"end":3347590,"confidence":0.92041016,"speaker":"A"},{"text":"just","start":3347590,"end":3347830,"confidence":0.99902344,"speaker":"A"},{"text":"like,","start":3347830,"end":3348150,"confidence":0.99658203,"speaker":"A"},{"text":"I","start":3348870,"end":3349150,"confidence":0.9760742,"speaker":"A"},{"text":"wonder","start":3349150,"end":3349390,"confidence":0.9980469,"speaker":"A"},{"text":"if","start":3349390,"end":3349510,"confidence":0.6303711,"speaker":"A"},{"text":"there's","start":3349510,"end":3349710,"confidence":0.867513,"speaker":"A"},{"text":"like,","start":3349710,"end":3349830,"confidence":0.9819336,"speaker":"A"},{"text":"something","start":3349830,"end":3349990,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":3349990,"end":3350189,"confidence":0.9926758,"speaker":"A"},{"text":"do","start":3350189,"end":3350309,"confidence":0.99853516,"speaker":"A"},{"text":"on","start":3350309,"end":3350430,"confidence":0.9970703,"speaker":"A"},{"text":"a","start":3350430,"end":3350590,"confidence":0.9946289,"speaker":"A"},{"text":"pie,","start":3350590,"end":3350950,"confidence":0.7319336,"speaker":"A"},{"text":"like","start":3351750,"end":3352150,"confidence":0.97265625,"speaker":"A"},{"text":"just","start":3352230,"end":3352470,"confidence":0.99853516,"speaker":"A"},{"text":"hook","start":3352470,"end":3352630,"confidence":0.99902344,"speaker":"A"},{"text":"it","start":3352630,"end":3352750,"confidence":0.99853516,"speaker":"A"},{"text":"up","start":3352750,"end":3352870,"confidence":1,"speaker":"A"},{"text":"to","start":3352870,"end":3352990,"confidence":1,"speaker":"A"},{"text":"a","start":3352990,"end":3353110,"confidence":0.9946289,"speaker":"A"},{"text":"CloudKit","start":3353110,"end":3353550,"confidence":0.9953613,"speaker":"A"},{"text":"database.","start":3353550,"end":3353990,"confidence":1,"speaker":"A"},{"text":"Like,","start":3353990,"end":3354190,"confidence":0.99121094,"speaker":"A"},{"text":"there's","start":3354190,"end":3354430,"confidence":0.9998372,"speaker":"A"},{"text":"a","start":3354430,"end":3354550,"confidence":1,"speaker":"A"},{"text":"lot","start":3354550,"end":3354710,"confidence":1,"speaker":"A"},{"text":"you","start":3354710,"end":3354870,"confidence":1,"speaker":"A"},{"text":"could","start":3354870,"end":3354990,"confidence":0.98828125,"speaker":"A"},{"text":"do","start":3354990,"end":3355150,"confidence":1,"speaker":"A"},{"text":"here","start":3355150,"end":3355350,"confidence":1,"speaker":"A"},{"text":"because","start":3355350,"end":3355550,"confidence":0.8598633,"speaker":"A"},{"text":"all","start":3355550,"end":3355710,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":3355710,"end":3355870,"confidence":1,"speaker":"A"},{"text":"need","start":3355870,"end":3356030,"confidence":0.99902344,"speaker":"A"},{"text":"is","start":3356030,"end":3356310,"confidence":0.97314453,"speaker":"A"},{"text":"decent","start":3356710,"end":3357150,"confidence":0.9091797,"speaker":"A"},{"text":"os.","start":3357150,"end":3357510,"confidence":0.95581055,"speaker":"A"}]},{"text":"I don't know anything about sharing. I haven't done anything with sharing yet, so I still have to do that and a few other things, but. No, yeah,. It's an interesting idea. Thank you.","start":3358950,"end":3370460,"confidence":0.9995117,"words":[{"text":"I","start":3358950,"end":3359230,"confidence":0.9995117,"speaker":"A"},{"text":"don't","start":3359230,"end":3359430,"confidence":0.9998372,"speaker":"A"},{"text":"know","start":3359430,"end":3359550,"confidence":0.9995117,"speaker":"A"},{"text":"anything","start":3359550,"end":3359870,"confidence":0.99975586,"speaker":"A"},{"text":"about","start":3359870,"end":3360030,"confidence":0.9995117,"speaker":"A"},{"text":"sharing.","start":3360030,"end":3360430,"confidence":0.9663086,"speaker":"A"},{"text":"I","start":3360430,"end":3360670,"confidence":1,"speaker":"A"},{"text":"haven't","start":3360670,"end":3360870,"confidence":0.9992676,"speaker":"A"},{"text":"done","start":3360870,"end":3360990,"confidence":0.9995117,"speaker":"A"},{"text":"anything","start":3360990,"end":3361310,"confidence":0.99975586,"speaker":"A"},{"text":"with","start":3361310,"end":3361470,"confidence":0.8676758,"speaker":"A"},{"text":"sharing","start":3361470,"end":3361830,"confidence":0.99731445,"speaker":"A"},{"text":"yet,","start":3361830,"end":3362110,"confidence":0.98779297,"speaker":"A"},{"text":"so","start":3362110,"end":3362310,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":3362310,"end":3362430,"confidence":0.9663086,"speaker":"A"},{"text":"still","start":3362430,"end":3362590,"confidence":0.9589844,"speaker":"A"},{"text":"have","start":3362590,"end":3362750,"confidence":0.77441406,"speaker":"A"},{"text":"to","start":3362750,"end":3362870,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":3362870,"end":3362990,"confidence":0.9951172,"speaker":"A"},{"text":"that","start":3362990,"end":3363190,"confidence":1,"speaker":"A"},{"text":"and","start":3363190,"end":3363390,"confidence":0.99853516,"speaker":"A"},{"text":"a","start":3363390,"end":3363510,"confidence":0.9995117,"speaker":"A"},{"text":"few","start":3363510,"end":3363630,"confidence":1,"speaker":"A"},{"text":"other","start":3363630,"end":3363830,"confidence":0.99902344,"speaker":"A"},{"text":"things,","start":3363830,"end":3364070,"confidence":0.9995117,"speaker":"A"},{"text":"but.","start":3364070,"end":3364390,"confidence":0.98876953,"speaker":"A"},{"text":"No,","start":3364940,"end":3365180,"confidence":0.6020508,"speaker":"A"},{"text":"yeah,.","start":3365180,"end":3365740,"confidence":0.9869792,"speaker":"A"},{"text":"It's","start":3367740,"end":3368060,"confidence":0.97021484,"speaker":"C"},{"text":"an","start":3368060,"end":3368180,"confidence":0.99609375,"speaker":"C"},{"text":"interesting","start":3368180,"end":3368500,"confidence":0.99975586,"speaker":"C"},{"text":"idea.","start":3368500,"end":3368940,"confidence":0.98706055,"speaker":"C"},{"text":"Thank","start":3369900,"end":3370220,"confidence":0.9868164,"speaker":"A"},{"text":"you.","start":3370220,"end":3370460,"confidence":0.9975586,"speaker":"A"}]},{"text":"Yeah. Well, thank you for joining, Josh. Yeah. Thanks for hosting this and sharing this info. It's nice.","start":3371420,"end":3377340,"confidence":0.88997394,"words":[{"text":"Yeah.","start":3371420,"end":3371900,"confidence":0.88997394,"speaker":"B"},{"text":"Well,","start":3371900,"end":3372100,"confidence":0.9980469,"speaker":"A"},{"text":"thank","start":3372100,"end":3372300,"confidence":1,"speaker":"A"},{"text":"you","start":3372300,"end":3372420,"confidence":0.9995117,"speaker":"A"},{"text":"for","start":3372420,"end":3372580,"confidence":0.99902344,"speaker":"A"},{"text":"joining,","start":3372580,"end":3372860,"confidence":0.96809894,"speaker":"A"},{"text":"Josh.","start":3372860,"end":3373260,"confidence":0.98461914,"speaker":"A"},{"text":"Yeah.","start":3373660,"end":3374060,"confidence":0.81844074,"speaker":"C"},{"text":"Thanks","start":3374060,"end":3374300,"confidence":1,"speaker":"C"},{"text":"for","start":3374300,"end":3374460,"confidence":0.9995117,"speaker":"C"},{"text":"hosting","start":3374460,"end":3374820,"confidence":0.9995117,"speaker":"C"},{"text":"this","start":3374820,"end":3375020,"confidence":0.9707031,"speaker":"C"},{"text":"and","start":3375020,"end":3375340,"confidence":0.99902344,"speaker":"C"},{"text":"sharing","start":3375900,"end":3376340,"confidence":0.9934082,"speaker":"C"},{"text":"this","start":3376340,"end":3376500,"confidence":0.9995117,"speaker":"C"},{"text":"info.","start":3376500,"end":3376820,"confidence":0.9995117,"speaker":"C"},{"text":"It's","start":3376820,"end":3377020,"confidence":0.9941406,"speaker":"C"},{"text":"nice.","start":3377020,"end":3377340,"confidence":1,"speaker":"C"}]},{"text":"Yeah. If you ever run into anything, let me know. Will do. All right, talk to you later. All right, sounds good.","start":3378060,"end":3385180,"confidence":0.9866536,"words":[{"text":"Yeah.","start":3378060,"end":3378540,"confidence":0.9866536,"speaker":"A"},{"text":"If","start":3378620,"end":3378980,"confidence":0.9794922,"speaker":"A"},{"text":"you","start":3378980,"end":3379260,"confidence":0.9995117,"speaker":"A"},{"text":"ever","start":3379260,"end":3379500,"confidence":1,"speaker":"A"},{"text":"run","start":3379500,"end":3379700,"confidence":0.9995117,"speaker":"A"},{"text":"into","start":3379700,"end":3379860,"confidence":1,"speaker":"A"},{"text":"anything,","start":3379860,"end":3380180,"confidence":1,"speaker":"A"},{"text":"let","start":3380180,"end":3380300,"confidence":1,"speaker":"A"},{"text":"me","start":3380300,"end":3380459,"confidence":1,"speaker":"A"},{"text":"know.","start":3380459,"end":3380780,"confidence":0.9995117,"speaker":"A"},{"text":"Will","start":3381420,"end":3381740,"confidence":0.5800781,"speaker":"A"},{"text":"do.","start":3381740,"end":3382060,"confidence":0.99365234,"speaker":"A"},{"text":"All","start":3382940,"end":3383220,"confidence":0.9814453,"speaker":"A"},{"text":"right,","start":3383220,"end":3383500,"confidence":1,"speaker":"A"},{"text":"talk","start":3383660,"end":3383940,"confidence":1,"speaker":"A"},{"text":"to","start":3383940,"end":3384100,"confidence":1,"speaker":"A"},{"text":"you","start":3384100,"end":3384220,"confidence":0.9995117,"speaker":"A"},{"text":"later.","start":3384220,"end":3384420,"confidence":1,"speaker":"A"},{"text":"All","start":3384420,"end":3384620,"confidence":0.9223633,"speaker":"A"},{"text":"right,","start":3384620,"end":3384780,"confidence":0.9145508,"speaker":"A"},{"text":"sounds","start":3384780,"end":3385020,"confidence":1,"speaker":"A"},{"text":"good.","start":3385020,"end":3385180,"confidence":1,"speaker":"A"}]},{"text":"See you. Bye. Bye.","start":3385180,"end":3387340,"confidence":0.9975586,"words":[{"text":"See","start":3385180,"end":3385380,"confidence":0.9975586,"speaker":"C"},{"text":"you.","start":3385380,"end":3385660,"confidence":0.54296875,"speaker":"C"},{"text":"Bye.","start":3386220,"end":3386700,"confidence":0.9375,"speaker":"A"},{"text":"Bye.","start":3386860,"end":3387340,"confidence":0.9519043,"speaker":"C"}]}],"id":"8a542ac0-f58a-4b02-b801-9926da98bdd0","confidence":0.97097707,"audio_duration":3388} \ No newline at end of file diff --git a/docs/transcriptions/timestamps.json b/docs/transcriptions/timestamps.json new file mode 100644 index 00000000..f31f7d33 --- /dev/null +++ b/docs/transcriptions/timestamps.json @@ -0,0 +1 @@ +[{"text":"Hey,","start":262980,"end":263180,"confidence":0.99658203,"speaker":"A"},{"text":"Evan,","start":263180,"end":263580,"confidence":0.99609375,"speaker":"A"},{"text":"can","start":263580,"end":263700,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":263700,"end":263780,"confidence":0.99316406,"speaker":"A"},{"text":"hear","start":263780,"end":263900,"confidence":1,"speaker":"A"},{"text":"me","start":263900,"end":264020,"confidence":1,"speaker":"A"},{"text":"all","start":264020,"end":264140,"confidence":0.87158203,"speaker":"A"},{"text":"right?","start":264140,"end":264420,"confidence":0.96240234,"speaker":"A"},{"text":"Yeah,","start":264660,"end":265020,"confidence":0.9741211,"speaker":"B"},{"text":"I","start":265020,"end":265140,"confidence":1,"speaker":"B"},{"text":"can","start":265140,"end":265260,"confidence":1,"speaker":"B"},{"text":"hear","start":265260,"end":265420,"confidence":1,"speaker":"B"},{"text":"you.","start":265420,"end":265700,"confidence":0.99365234,"speaker":"B"},{"text":"Awesome.","start":266420,"end":267060,"confidence":0.9998372,"speaker":"A"},{"text":"How","start":267060,"end":267340,"confidence":1,"speaker":"A"},{"text":"do","start":267340,"end":267500,"confidence":1,"speaker":"A"},{"text":"I","start":267500,"end":267660,"confidence":1,"speaker":"A"},{"text":"sound?","start":267660,"end":268020,"confidence":0.99975586,"speaker":"A"},{"text":"Good.","start":268340,"end":268740,"confidence":0.99902344,"speaker":"A"},{"text":"I've","start":270260,"end":270740,"confidence":0.7714844,"speaker":"A"},{"text":"used","start":270740,"end":270940,"confidence":0.99316406,"speaker":"A"},{"text":"this","start":270940,"end":271140,"confidence":0.9736328,"speaker":"A"},{"text":"microphone","start":271140,"end":271660,"confidence":0.9484375,"speaker":"A"},{"text":"in","start":271660,"end":271820,"confidence":0.9946289,"speaker":"A"},{"text":"ages.","start":271820,"end":272340,"confidence":0.9995117,"speaker":"A"},{"text":"It's","start":273060,"end":273420,"confidence":0.99397784,"speaker":"A"},{"text":"like","start":273420,"end":273580,"confidence":0.99121094,"speaker":"A"},{"text":"all","start":273580,"end":273780,"confidence":0.98583984,"speaker":"A"},{"text":"dusty.","start":273780,"end":274420,"confidence":0.99934894,"speaker":"A"},{"text":"How","start":281140,"end":281500,"confidence":0.6699219,"speaker":"A"},{"text":"you","start":281500,"end":281700,"confidence":0.97021484,"speaker":"A"},{"text":"think","start":281700,"end":281820,"confidence":1,"speaker":"A"},{"text":"I","start":281820,"end":281940,"confidence":0.99853516,"speaker":"A"},{"text":"should","start":281940,"end":282060,"confidence":0.9995117,"speaker":"A"},{"text":"wait","start":282060,"end":282260,"confidence":0.99975586,"speaker":"A"},{"text":"like","start":282260,"end":282380,"confidence":0.99316406,"speaker":"A"},{"text":"five","start":282380,"end":282540,"confidence":0.9995117,"speaker":"A"},{"text":"minutes","start":282540,"end":282820,"confidence":1,"speaker":"A"},{"text":"for","start":282820,"end":283020,"confidence":0.9995117,"speaker":"A"},{"text":"people","start":283020,"end":283220,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":283220,"end":283380,"confidence":0.9916992,"speaker":"A"},{"text":"come","start":283380,"end":283540,"confidence":0.9995117,"speaker":"A"},{"text":"in","start":283540,"end":283780,"confidence":0.99902344,"speaker":"A"},{"text":"or.","start":283780,"end":284100,"confidence":0.9394531,"speaker":"A"},{"text":"Probably.","start":284260,"end":284740,"confidence":0.8670247,"speaker":"B"},{"text":"Yeah,","start":284980,"end":285460,"confidence":0.99316406,"speaker":"B"},{"text":"that","start":285770,"end":285970,"confidence":0.72314453,"speaker":"B"},{"text":"there's","start":285970,"end":286410,"confidence":0.8248698,"speaker":"B"},{"text":"if.","start":286490,"end":286890,"confidence":0.97558594,"speaker":"B"},{"text":"Yeah,","start":286970,"end":287530,"confidence":0.99869794,"speaker":"B"},{"text":"otherwise","start":288010,"end":288450,"confidence":0.98502606,"speaker":"B"},{"text":"you","start":288450,"end":288570,"confidence":0.99902344,"speaker":"B"},{"text":"can","start":288570,"end":288690,"confidence":0.99902344,"speaker":"B"},{"text":"just.","start":288690,"end":288890,"confidence":1,"speaker":"B"},{"text":"You","start":288890,"end":289090,"confidence":0.99609375,"speaker":"B"},{"text":"could","start":289090,"end":289290,"confidence":0.9824219,"speaker":"B"},{"text":"start,","start":289290,"end":289610,"confidence":0.9995117,"speaker":"B"},{"text":"but","start":289850,"end":290250,"confidence":0.99902344,"speaker":"B"},{"text":"that'll","start":291130,"end":291530,"confidence":0.96761066,"speaker":"B"},{"text":"be","start":291530,"end":291610,"confidence":0.9995117,"speaker":"B"},{"text":"interesting.","start":291610,"end":291930,"confidence":0.99609375,"speaker":"B"},{"text":"Do","start":291930,"end":292090,"confidence":0.7919922,"speaker":"A"},{"text":"you","start":292090,"end":292170,"confidence":0.99560547,"speaker":"A"},{"text":"mind","start":292170,"end":292290,"confidence":0.9995117,"speaker":"A"},{"text":"if","start":292290,"end":292450,"confidence":0.99560547,"speaker":"A"},{"text":"I","start":292450,"end":292650,"confidence":0.9995117,"speaker":"A"},{"text":"grab","start":292650,"end":292930,"confidence":1,"speaker":"A"},{"text":"a","start":292930,"end":293050,"confidence":0.9995117,"speaker":"A"},{"text":"cup","start":293050,"end":293170,"confidence":0.9995117,"speaker":"A"},{"text":"of","start":293170,"end":293330,"confidence":0.9970703,"speaker":"A"},{"text":"coffee","start":293330,"end":293650,"confidence":0.9998372,"speaker":"A"},{"text":"real","start":293650,"end":293810,"confidence":0.9995117,"speaker":"A"},{"text":"quick?","start":293810,"end":294010,"confidence":1,"speaker":"A"},{"text":"No,","start":294010,"end":294250,"confidence":0.9975586,"speaker":"B"},{"text":"not","start":294250,"end":294450,"confidence":1,"speaker":"B"},{"text":"at","start":294450,"end":294570,"confidence":0.9995117,"speaker":"B"},{"text":"all.","start":294570,"end":294730,"confidence":1,"speaker":"B"},{"text":"Not","start":294730,"end":294930,"confidence":0.71875,"speaker":"A"},{"text":"at","start":294930,"end":295010,"confidence":0.8486328,"speaker":"A"},{"text":"all.","start":295010,"end":295210,"confidence":0.9042969,"speaker":"A"},{"text":"Okay,","start":295530,"end":296090,"confidence":0.9946289,"speaker":"A"},{"text":"cool.","start":296730,"end":297210,"confidence":0.99609375,"speaker":"A"},{"text":"I'm","start":297210,"end":297570,"confidence":0.8929036,"speaker":"A"},{"text":"not","start":297570,"end":297730,"confidence":1,"speaker":"A"},{"text":"using","start":297730,"end":297930,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":297930,"end":298090,"confidence":0.99609375,"speaker":"A"},{"text":"AirPods","start":298090,"end":298610,"confidence":0.96594,"speaker":"A"},{"text":"mic,","start":298610,"end":298930,"confidence":0.9863281,"speaker":"A"},{"text":"so","start":298930,"end":299250,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":299250,"end":299490,"confidence":1,"speaker":"A"},{"text":"can","start":299490,"end":299650,"confidence":0.9995117,"speaker":"A"},{"text":"hear","start":299650,"end":299810,"confidence":1,"speaker":"A"},{"text":"you,","start":299810,"end":299970,"confidence":0.9995117,"speaker":"A"},{"text":"but","start":299970,"end":300130,"confidence":1,"speaker":"A"},{"text":"you","start":300130,"end":300290,"confidence":1,"speaker":"A"},{"text":"won't","start":300290,"end":300490,"confidence":0.9998372,"speaker":"A"},{"text":"be","start":300490,"end":300570,"confidence":1,"speaker":"A"},{"text":"able","start":300570,"end":300690,"confidence":1,"speaker":"A"},{"text":"to","start":300690,"end":300850,"confidence":1,"speaker":"A"},{"text":"hear","start":300850,"end":301050,"confidence":0.9995117,"speaker":"A"},{"text":"me.","start":301050,"end":301370,"confidence":0.9995117,"speaker":"A"},{"text":"Okay.","start":301690,"end":302250,"confidence":0.98746747,"speaker":"B"},{"text":"It's.","start":362440,"end":387820,"confidence":0.7732747,"speaker":"A"},{"text":"Thank","start":531699,"end":531940,"confidence":0.9851074,"speaker":"A"},{"text":"you","start":531940,"end":532260,"confidence":1,"speaker":"A"},{"text":"for","start":533860,"end":534220,"confidence":0.59277344,"speaker":"A"},{"text":"your","start":534220,"end":534500,"confidence":1,"speaker":"A"},{"text":"patience.","start":534500,"end":535060,"confidence":0.9992676,"speaker":"A"},{"text":"So","start":549010,"end":549130,"confidence":0.9873047,"speaker":"A"},{"text":"is","start":549130,"end":549290,"confidence":0.99365234,"speaker":"A"},{"text":"it","start":549290,"end":549450,"confidence":0.99902344,"speaker":"A"},{"text":"just","start":549450,"end":549650,"confidence":1,"speaker":"A"},{"text":"you?","start":549650,"end":549970,"confidence":0.9995117,"speaker":"A"},{"text":"It","start":551330,"end":551610,"confidence":0.95751953,"speaker":"B"},{"text":"looks","start":551610,"end":551810,"confidence":1,"speaker":"B"},{"text":"like","start":551810,"end":551930,"confidence":0.9995117,"speaker":"B"},{"text":"it's","start":551930,"end":552130,"confidence":0.9996745,"speaker":"B"},{"text":"just","start":552130,"end":552290,"confidence":1,"speaker":"B"},{"text":"me.","start":552290,"end":552570,"confidence":1,"speaker":"B"},{"text":"Josh","start":552570,"end":553010,"confidence":0.9995117,"speaker":"B"},{"text":"is","start":553010,"end":553290,"confidence":0.9970703,"speaker":"B"},{"text":"trying","start":553290,"end":553530,"confidence":0.9995117,"speaker":"B"},{"text":"to","start":553530,"end":553650,"confidence":1,"speaker":"B"},{"text":"get","start":553650,"end":553810,"confidence":1,"speaker":"B"},{"text":"in,","start":553810,"end":554010,"confidence":0.9995117,"speaker":"B"},{"text":"but","start":554010,"end":554170,"confidence":0.9995117,"speaker":"B"},{"text":"he's","start":554170,"end":554610,"confidence":0.92529297,"speaker":"B"},{"text":"trying","start":554610,"end":554930,"confidence":0.9995117,"speaker":"B"},{"text":"to","start":554930,"end":555090,"confidence":1,"speaker":"B"},{"text":"get","start":555090,"end":555210,"confidence":1,"speaker":"B"},{"text":"on","start":555210,"end":555490,"confidence":0.9272461,"speaker":"B"},{"text":"on","start":555650,"end":555970,"confidence":1,"speaker":"B"},{"text":"his","start":555970,"end":556210,"confidence":0.99902344,"speaker":"B"},{"text":"mobile","start":556210,"end":556530,"confidence":0.9998372,"speaker":"B"},{"text":"device","start":556530,"end":556810,"confidence":1,"speaker":"B"},{"text":"and","start":556810,"end":557010,"confidence":0.90478516,"speaker":"B"},{"text":"I","start":557010,"end":557210,"confidence":1,"speaker":"B"},{"text":"don't","start":557210,"end":557490,"confidence":0.98828125,"speaker":"B"},{"text":"think","start":557490,"end":557689,"confidence":1,"speaker":"B"},{"text":"that's","start":557689,"end":558010,"confidence":1,"speaker":"B"},{"text":"possible","start":558010,"end":558290,"confidence":1,"speaker":"B"},{"text":"with","start":558290,"end":558570,"confidence":0.9995117,"speaker":"B"},{"text":"Riverside.","start":558570,"end":559250,"confidence":0.9998372,"speaker":"B"},{"text":"Surprised?","start":563250,"end":563890,"confidence":0.9345703,"speaker":"A"},{"text":"I","start":564690,"end":564970,"confidence":0.9897461,"speaker":"A"},{"text":"mean,","start":564970,"end":565090,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":565090,"end":565210,"confidence":0.99902344,"speaker":"A"},{"text":"know","start":565210,"end":565370,"confidence":1,"speaker":"A"},{"text":"they","start":565370,"end":565530,"confidence":1,"speaker":"A"},{"text":"have","start":565530,"end":565690,"confidence":1,"speaker":"A"},{"text":"an","start":565690,"end":565850,"confidence":0.99902344,"speaker":"A"},{"text":"app.","start":565850,"end":566130,"confidence":0.9863281,"speaker":"A"},{"text":"Maybe","start":567590,"end":567790,"confidence":0.93359375,"speaker":"B"},{"text":"he's","start":567790,"end":567990,"confidence":0.9996745,"speaker":"B"},{"text":"using.","start":567990,"end":568190,"confidence":0.99902344,"speaker":"B"},{"text":"I'm","start":568190,"end":568430,"confidence":0.99934894,"speaker":"B"},{"text":"not","start":568430,"end":568510,"confidence":0.99902344,"speaker":"B"},{"text":"sure","start":568510,"end":568630,"confidence":1,"speaker":"B"},{"text":"if","start":568630,"end":568710,"confidence":0.9980469,"speaker":"B"},{"text":"he's","start":568710,"end":568790,"confidence":0.9189453,"speaker":"B"},{"text":"using.","start":568790,"end":569030,"confidence":0.98535156,"speaker":"B"},{"text":"Using","start":569110,"end":569430,"confidence":1,"speaker":"B"},{"text":"the","start":569430,"end":569630,"confidence":0.99902344,"speaker":"B"},{"text":"app","start":569630,"end":569790,"confidence":0.9995117,"speaker":"B"},{"text":"or","start":569790,"end":569910,"confidence":0.9995117,"speaker":"B"},{"text":"not.","start":569910,"end":570070,"confidence":0.9995117,"speaker":"B"},{"text":"Okay.","start":570070,"end":570550,"confidence":0.99820966,"speaker":"A"},{"text":"Should","start":575190,"end":575470,"confidence":0.99658203,"speaker":"A"},{"text":"I","start":575470,"end":575630,"confidence":0.8354492,"speaker":"A"},{"text":"just","start":575630,"end":575910,"confidence":1,"speaker":"A"},{"text":"go?","start":575910,"end":576310,"confidence":1,"speaker":"A"},{"text":"Sure.","start":578230,"end":578630,"confidence":1,"speaker":"B"},{"text":"Okay.","start":579830,"end":580470,"confidence":0.91015625,"speaker":"A"},{"text":"Well,","start":582390,"end":582710,"confidence":0.9980469,"speaker":"A"},{"text":"thanks","start":582710,"end":583030,"confidence":0.9926758,"speaker":"A"},{"text":"for","start":583030,"end":583230,"confidence":1,"speaker":"A"},{"text":"joining","start":583230,"end":583549,"confidence":0.75911456,"speaker":"A"},{"text":"me,","start":583549,"end":583830,"confidence":0.99902344,"speaker":"A"},{"text":"Evan.","start":583830,"end":584310,"confidence":0.9511719,"speaker":"A"},{"text":"I","start":584310,"end":584510,"confidence":0.9995117,"speaker":"A"},{"text":"really","start":584510,"end":584670,"confidence":0.9995117,"speaker":"A"},{"text":"appreciate","start":584670,"end":584990,"confidence":0.9088135,"speaker":"A"},{"text":"it.","start":584990,"end":585270,"confidence":0.99853516,"speaker":"A"},{"text":"I","start":587430,"end":587670,"confidence":0.8666992,"speaker":"A"},{"text":"would","start":587670,"end":587790,"confidence":0.67871094,"speaker":"A"},{"text":"say","start":587790,"end":588070,"confidence":0.9448242,"speaker":"A"},{"text":"no.","start":588390,"end":588630,"confidence":0.9951172,"speaker":"A"},{"text":"I","start":588630,"end":588710,"confidence":0.9995117,"speaker":"A"},{"text":"mean","start":588710,"end":588830,"confidence":0.95947266,"speaker":"A"},{"text":"I","start":588830,"end":588990,"confidence":0.99902344,"speaker":"A"},{"text":"do,","start":588990,"end":589270,"confidence":1,"speaker":"A"},{"text":"seriously.","start":589270,"end":589910,"confidence":0.99934894,"speaker":"A"},{"text":"So","start":591830,"end":592110,"confidence":0.9995117,"speaker":"A"},{"text":"yeah,","start":592110,"end":592470,"confidence":1,"speaker":"A"},{"text":"this","start":592630,"end":592910,"confidence":0.99902344,"speaker":"A"},{"text":"is","start":592910,"end":593030,"confidence":0.79296875,"speaker":"A"},{"text":"a","start":593030,"end":593150,"confidence":0.6645508,"speaker":"A"},{"text":"kind","start":593150,"end":593310,"confidence":0.99853516,"speaker":"A"},{"text":"of","start":593310,"end":593430,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":593430,"end":593550,"confidence":0.99609375,"speaker":"A"},{"text":"dry","start":593550,"end":593830,"confidence":0.8828125,"speaker":"A"},{"text":"run.","start":593830,"end":594150,"confidence":0.9970703,"speaker":"A"},{"text":"I","start":594710,"end":594830,"confidence":0.9941406,"speaker":"A"},{"text":"would","start":594830,"end":594950,"confidence":0.9980469,"speaker":"A"},{"text":"say","start":594950,"end":595070,"confidence":0.99560547,"speaker":"A"},{"text":"I'm","start":595070,"end":595270,"confidence":0.99869794,"speaker":"A"},{"text":"about","start":595270,"end":595470,"confidence":0.9995117,"speaker":"A"},{"text":"60%","start":595470,"end":596110,"confidence":0.92505,"speaker":"A"},{"text":"done","start":596110,"end":596350,"confidence":0.9995117,"speaker":"A"},{"text":"with","start":596350,"end":596510,"confidence":1,"speaker":"A"},{"text":"this","start":596510,"end":596710,"confidence":0.99853516,"speaker":"A"},{"text":"presentation","start":596710,"end":597350,"confidence":1,"speaker":"A"},{"text":"about","start":599270,"end":599670,"confidence":0.9975586,"speaker":"A"},{"text":"CloudKit","start":600310,"end":600990,"confidence":0.7687988,"speaker":"A"},{"text":"on","start":600990,"end":601150,"confidence":0.9980469,"speaker":"A"},{"text":"the","start":601150,"end":601310,"confidence":0.9946289,"speaker":"A"},{"text":"server","start":601310,"end":601750,"confidence":0.7963867,"speaker":"A"},{"text":"and","start":604070,"end":604470,"confidence":0.9892578,"speaker":"A"},{"text":"we'll","start":604870,"end":605230,"confidence":0.9514974,"speaker":"A"},{"text":"probably","start":605230,"end":605470,"confidence":1,"speaker":"A"},{"text":"hop","start":605470,"end":605710,"confidence":0.9946289,"speaker":"A"},{"text":"back","start":605710,"end":605950,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":605950,"end":606110,"confidence":1,"speaker":"A"},{"text":"forth","start":606110,"end":606350,"confidence":1,"speaker":"A"},{"text":"between","start":606350,"end":606630,"confidence":1,"speaker":"A"},{"text":"Keynote","start":606630,"end":607230,"confidence":0.88049316,"speaker":"A"},{"text":"and","start":607230,"end":607390,"confidence":0.9975586,"speaker":"A"},{"text":"not","start":607390,"end":607590,"confidence":0.9458008,"speaker":"A"},{"text":"Keynote,","start":607590,"end":608310,"confidence":0.99328613,"speaker":"A"},{"text":"but","start":608870,"end":609270,"confidence":0.9941406,"speaker":"A"},{"text":"yeah.","start":609510,"end":609990,"confidence":0.9737956,"speaker":"A"},{"text":"So","start":611670,"end":611950,"confidence":0.9946289,"speaker":"A"},{"text":"this","start":611950,"end":612110,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":612110,"end":612310,"confidence":0.9995117,"speaker":"A"},{"text":"CloudKit","start":612310,"end":612910,"confidence":0.92456055,"speaker":"A"},{"text":"as","start":612910,"end":613070,"confidence":0.9863281,"speaker":"A"},{"text":"your","start":613070,"end":613230,"confidence":0.94628906,"speaker":"A"},{"text":"backend","start":613230,"end":613750,"confidence":0.8310547,"speaker":"A"},{"text":"from","start":613910,"end":614310,"confidence":1,"speaker":"A"},{"text":"iOS","start":614310,"end":614870,"confidence":0.9992676,"speaker":"A"},{"text":"to","start":615030,"end":615390,"confidence":0.9941406,"speaker":"A"},{"text":"server","start":615390,"end":615830,"confidence":0.9873047,"speaker":"A"},{"text":"side","start":615830,"end":616070,"confidence":0.5727539,"speaker":"A"},{"text":"Swift.","start":616070,"end":616630,"confidence":0.9953613,"speaker":"A"},{"text":"So","start":627600,"end":627840,"confidence":0.9916992,"speaker":"A"},{"text":"what","start":628160,"end":628480,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":628480,"end":628720,"confidence":0.99902344,"speaker":"A"},{"text":"CloudKit?","start":628720,"end":629440,"confidence":0.88281,"speaker":"A"},{"text":"CloudKit","start":629600,"end":630320,"confidence":0.88281,"speaker":"A"},{"text":"is","start":630320,"end":630600,"confidence":0.9921875,"speaker":"A"},{"text":"a","start":630600,"end":630880,"confidence":0.99853516,"speaker":"A"},{"text":"service","start":630880,"end":631200,"confidence":0.9995117,"speaker":"A"},{"text":"launched","start":632240,"end":632680,"confidence":0.99731445,"speaker":"A"},{"text":"by","start":632680,"end":632840,"confidence":1,"speaker":"A"},{"text":"Apple","start":632840,"end":633360,"confidence":1,"speaker":"A"},{"text":"probably","start":633600,"end":634000,"confidence":0.99869794,"speaker":"A"},{"text":"a","start":634000,"end":634160,"confidence":0.9995117,"speaker":"A"},{"text":"decade","start":634160,"end":634520,"confidence":0.99975586,"speaker":"A"},{"text":"ago","start":634520,"end":634800,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":635920,"end":636279,"confidence":0.9848633,"speaker":"A"},{"text":"kind","start":636279,"end":636520,"confidence":0.8803711,"speaker":"A"},{"text":"of","start":636520,"end":636800,"confidence":0.98828125,"speaker":"A"},{"text":"give","start":636960,"end":637360,"confidence":0.9995117,"speaker":"A"},{"text":"developers","start":638880,"end":639680,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":639840,"end":640200,"confidence":0.99902344,"speaker":"A"},{"text":"built","start":640200,"end":640520,"confidence":0.9995117,"speaker":"A"},{"text":"in","start":640520,"end":640720,"confidence":0.99316406,"speaker":"A"},{"text":"back","start":640720,"end":641000,"confidence":0.9995117,"speaker":"A"},{"text":"end","start":641000,"end":641280,"confidence":0.58935547,"speaker":"A"},{"text":"for","start":641280,"end":641520,"confidence":0.99609375,"speaker":"A"},{"text":"storing","start":641520,"end":641960,"confidence":0.9946289,"speaker":"A"},{"text":"data","start":641960,"end":642240,"confidence":0.99902344,"speaker":"A"},{"text":"for","start":642640,"end":642920,"confidence":0.9995117,"speaker":"A"},{"text":"their","start":642920,"end":643160,"confidence":0.99853516,"speaker":"A"},{"text":"apps.","start":643160,"end":643680,"confidence":0.99902344,"speaker":"A"},{"text":"One","start":644480,"end":644760,"confidence":0.9995117,"speaker":"A"},{"text":"of","start":644760,"end":644880,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":644880,"end":645000,"confidence":0.99853516,"speaker":"A"},{"text":"biggest","start":645000,"end":645360,"confidence":1,"speaker":"A"},{"text":"benefits","start":645360,"end":646000,"confidence":0.99902344,"speaker":"A"},{"text":"is","start":646080,"end":646300,"confidence":0.84765625,"speaker":"A"},{"text":"is","start":646450,"end":646690,"confidence":0.9736328,"speaker":"A"},{"text":"how","start":646690,"end":647090,"confidence":0.9995117,"speaker":"A"},{"text":"cheap","start":647090,"end":647450,"confidence":0.9998372,"speaker":"A"},{"text":"it","start":647450,"end":647610,"confidence":0.9980469,"speaker":"A"},{"text":"is","start":647610,"end":647890,"confidence":0.9980469,"speaker":"A"},{"text":"to","start":647970,"end":648250,"confidence":0.99853516,"speaker":"A"},{"text":"use","start":648250,"end":648490,"confidence":0.9970703,"speaker":"A"},{"text":"for","start":648490,"end":648810,"confidence":0.9995117,"speaker":"A"},{"text":"iOS","start":648810,"end":649290,"confidence":0.9992676,"speaker":"A"},{"text":"developers.","start":649290,"end":649970,"confidence":0.998291,"speaker":"A"},{"text":"So","start":652450,"end":652850,"confidence":0.95751953,"speaker":"A"},{"text":"if","start":653570,"end":653850,"confidence":0.99853516,"speaker":"A"},{"text":"you","start":653850,"end":654130,"confidence":1,"speaker":"A"},{"text":"have","start":654450,"end":654850,"confidence":0.99902344,"speaker":"A"},{"text":"built","start":655330,"end":655690,"confidence":0.99934894,"speaker":"A"},{"text":"an","start":655690,"end":655850,"confidence":0.99560547,"speaker":"A"},{"text":"app,","start":655850,"end":656130,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":656290,"end":656570,"confidence":1,"speaker":"A"},{"text":"could","start":656570,"end":656730,"confidence":0.6508789,"speaker":"A"},{"text":"just","start":656730,"end":656930,"confidence":0.99902344,"speaker":"A"},{"text":"add","start":656930,"end":657250,"confidence":0.99853516,"speaker":"A"},{"text":"CloudKit","start":657410,"end":658290,"confidence":0.89294,"speaker":"A"},{"text":"right","start":658290,"end":658610,"confidence":0.99853516,"speaker":"A"},{"text":"here","start":658610,"end":658930,"confidence":0.9995117,"speaker":"A"},{"text":"within","start":659570,"end":659970,"confidence":0.9975586,"speaker":"A"},{"text":"the","start":661330,"end":661730,"confidence":0.9970703,"speaker":"A"},{"text":"Xcode","start":662209,"end":662770,"confidence":0.91137695,"speaker":"A"},{"text":"project","start":662770,"end":663090,"confidence":1,"speaker":"A"},{"text":"and","start":663490,"end":663890,"confidence":0.9975586,"speaker":"A"},{"text":"use","start":665330,"end":665690,"confidence":0.99853516,"speaker":"A"},{"text":"the","start":665690,"end":665970,"confidence":0.9995117,"speaker":"A"},{"text":"regular","start":665970,"end":666370,"confidence":0.9995117,"speaker":"A"},{"text":"CloudKit","start":666370,"end":666970,"confidence":0.9975586,"speaker":"A"},{"text":"API","start":666970,"end":667490,"confidence":0.99853516,"speaker":"A"},{"text":"in","start":667890,"end":668170,"confidence":0.5913086,"speaker":"A"},{"text":"Swift","start":668170,"end":668570,"confidence":0.9951172,"speaker":"A"},{"text":"to","start":668570,"end":668810,"confidence":0.99902344,"speaker":"A"},{"text":"go","start":668810,"end":668970,"confidence":0.9975586,"speaker":"A"},{"text":"ahead","start":668970,"end":669250,"confidence":0.9765625,"speaker":"A"},{"text":"and","start":669250,"end":669530,"confidence":0.99902344,"speaker":"A"},{"text":"start","start":669530,"end":669730,"confidence":1,"speaker":"A"},{"text":"using","start":669730,"end":669930,"confidence":1,"speaker":"A"},{"text":"it","start":669930,"end":670130,"confidence":0.9980469,"speaker":"A"},{"text":"in","start":670130,"end":670330,"confidence":0.99902344,"speaker":"A"},{"text":"your","start":670330,"end":670530,"confidence":1,"speaker":"A"},{"text":"app.","start":670530,"end":670850,"confidence":0.9975586,"speaker":"A"},{"text":"Here","start":673390,"end":673630,"confidence":0.9946289,"speaker":"A"},{"text":"is","start":673630,"end":674030,"confidence":0.9995117,"speaker":"A"},{"text":"what","start":674030,"end":674430,"confidence":0.9995117,"speaker":"A"},{"text":"it","start":674430,"end":674750,"confidence":0.9980469,"speaker":"A"},{"text":"looks","start":674750,"end":675110,"confidence":1,"speaker":"A"},{"text":"like","start":675110,"end":675390,"confidence":0.99902344,"speaker":"A"},{"text":"to","start":675390,"end":675750,"confidence":0.99902344,"speaker":"A"},{"text":"create","start":675750,"end":675990,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":675990,"end":676110,"confidence":0.9868164,"speaker":"A"},{"text":"new","start":676110,"end":676270,"confidence":0.99853516,"speaker":"A"},{"text":"record","start":676270,"end":676590,"confidence":0.9995117,"speaker":"A"},{"text":"type.","start":676590,"end":676990,"confidence":0.99194336,"speaker":"A"},{"text":"You","start":676990,"end":677150,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":677150,"end":677270,"confidence":1,"speaker":"A"},{"text":"do","start":677270,"end":677430,"confidence":1,"speaker":"A"},{"text":"all","start":677430,"end":677590,"confidence":0.9995117,"speaker":"A"},{"text":"this","start":677590,"end":677870,"confidence":0.99853516,"speaker":"A"},{"text":"through","start":677870,"end":678270,"confidence":1,"speaker":"A"},{"text":"the","start":678430,"end":678790,"confidence":0.99902344,"speaker":"A"},{"text":"CloudKit","start":678790,"end":679510,"confidence":0.9987793,"speaker":"A"},{"text":"dashboard.","start":679510,"end":680190,"confidence":0.99938965,"speaker":"A"},{"text":"In","start":684190,"end":684470,"confidence":0.7402344,"speaker":"A"},{"text":"CloudKit","start":684470,"end":685150,"confidence":0.9477539,"speaker":"A"},{"text":"you","start":685390,"end":685670,"confidence":0.9995117,"speaker":"A"},{"text":"could","start":685670,"end":685830,"confidence":0.8930664,"speaker":"A"},{"text":"also","start":685830,"end":686030,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":686030,"end":686230,"confidence":1,"speaker":"A"},{"text":"this","start":686230,"end":686470,"confidence":1,"speaker":"A"},{"text":"using","start":686470,"end":686830,"confidence":1,"speaker":"A"},{"text":"a","start":687150,"end":687430,"confidence":0.94921875,"speaker":"A"},{"text":"schema","start":687430,"end":687910,"confidence":0.9895833,"speaker":"A"},{"text":"file","start":687910,"end":688270,"confidence":0.8520508,"speaker":"A"},{"text":"too.","start":688670,"end":689070,"confidence":0.8598633,"speaker":"A"},{"text":"And","start":689390,"end":689670,"confidence":0.99316406,"speaker":"A"},{"text":"you","start":689670,"end":689830,"confidence":0.98583984,"speaker":"A"},{"text":"can","start":689830,"end":689990,"confidence":0.6220703,"speaker":"A"},{"text":"export","start":689990,"end":690310,"confidence":0.9975586,"speaker":"A"},{"text":"and","start":690310,"end":690470,"confidence":0.9692383,"speaker":"A"},{"text":"import","start":690470,"end":690750,"confidence":0.9970703,"speaker":"A"},{"text":"your","start":690830,"end":691150,"confidence":0.99902344,"speaker":"A"},{"text":"schema","start":691150,"end":691710,"confidence":0.92041016,"speaker":"A"},{"text":"that","start":691710,"end":692030,"confidence":0.99658203,"speaker":"A"},{"text":"way.","start":692030,"end":692350,"confidence":0.9975586,"speaker":"A"},{"text":"And","start":693230,"end":693630,"confidence":0.98046875,"speaker":"A"},{"text":"it's","start":693630,"end":694070,"confidence":0.9996745,"speaker":"A"},{"text":"not","start":694070,"end":694350,"confidence":0.9980469,"speaker":"A"},{"text":"a","start":694590,"end":694870,"confidence":0.9321289,"speaker":"A"},{"text":"SQL","start":694870,"end":695190,"confidence":0.9423828,"speaker":"A"},{"text":"based","start":695190,"end":695430,"confidence":0.99902344,"speaker":"A"},{"text":"database,","start":695430,"end":696030,"confidence":0.9995117,"speaker":"A"},{"text":"it's","start":696030,"end":696270,"confidence":0.97802734,"speaker":"A"},{"text":"much","start":696270,"end":696470,"confidence":0.9980469,"speaker":"A"},{"text":"more,","start":696470,"end":696830,"confidence":0.9892578,"speaker":"A"},{"text":"no","start":697310,"end":697670,"confidence":0.9902344,"speaker":"A"},{"text":"sequel","start":697670,"end":698110,"confidence":0.8517253,"speaker":"A"},{"text":"ish","start":698110,"end":698430,"confidence":0.9033203,"speaker":"A"},{"text":"or","start":698430,"end":698630,"confidence":0.9995117,"speaker":"A"},{"text":"an","start":698630,"end":698830,"confidence":0.9770508,"speaker":"A"},{"text":"abstract","start":698830,"end":699350,"confidence":0.9822591,"speaker":"A"},{"text":"layer","start":699350,"end":699910,"confidence":0.99886066,"speaker":"A"},{"text":"above","start":699910,"end":700230,"confidence":0.98461914,"speaker":"A"},{"text":"it.","start":700230,"end":700510,"confidence":0.99609375,"speaker":"A"},{"text":"But","start":701400,"end":701560,"confidence":0.99658203,"speaker":"A"},{"text":"essentially","start":701560,"end":702240,"confidence":0.97021484,"speaker":"A"},{"text":"you","start":702240,"end":702600,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":702680,"end":703080,"confidence":0.9995117,"speaker":"A"},{"text":"create","start":703080,"end":703440,"confidence":0.9970703,"speaker":"A"},{"text":"records","start":703440,"end":704120,"confidence":0.99658203,"speaker":"A"},{"text":"kind","start":704520,"end":704800,"confidence":0.99658203,"speaker":"A"},{"text":"of","start":704800,"end":704920,"confidence":0.9970703,"speaker":"A"},{"text":"like","start":704920,"end":705040,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":705040,"end":705200,"confidence":0.9995117,"speaker":"A"},{"text":"table","start":705200,"end":705480,"confidence":0.9995117,"speaker":"A"},{"text":"but","start":705480,"end":705680,"confidence":0.99902344,"speaker":"A"},{"text":"not","start":705680,"end":705880,"confidence":0.99853516,"speaker":"A"},{"text":"quite","start":705880,"end":706280,"confidence":0.99853516,"speaker":"A"},{"text":"in","start":707000,"end":707280,"confidence":0.98339844,"speaker":"A"},{"text":"your","start":707280,"end":707520,"confidence":0.9970703,"speaker":"A"},{"text":"records.","start":707520,"end":708200,"confidence":0.9963379,"speaker":"A"},{"text":"You","start":709400,"end":709680,"confidence":0.99902344,"speaker":"A"},{"text":"can","start":709680,"end":709960,"confidence":0.9995117,"speaker":"A"},{"text":"create","start":710360,"end":710760,"confidence":0.9824219,"speaker":"A"},{"text":"a","start":711400,"end":711760,"confidence":0.9980469,"speaker":"A"},{"text":"struct","start":711760,"end":712240,"confidence":0.83862305,"speaker":"A"},{"text":"for","start":712240,"end":712480,"confidence":0.99902344,"speaker":"A"},{"text":"it.","start":712480,"end":712680,"confidence":0.9980469,"speaker":"A"},{"text":"You","start":712680,"end":712880,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":712880,"end":713040,"confidence":0.9995117,"speaker":"A"},{"text":"just","start":713040,"end":713240,"confidence":1,"speaker":"A"},{"text":"use","start":713240,"end":713560,"confidence":0.99902344,"speaker":"A"},{"text":"CloudKit","start":713960,"end":714600,"confidence":0.982666,"speaker":"A"},{"text":"directly","start":714600,"end":715120,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":715120,"end":715360,"confidence":0.9995117,"speaker":"A"},{"text":"go","start":715360,"end":715520,"confidence":0.9995117,"speaker":"A"},{"text":"ahead","start":715520,"end":715800,"confidence":0.99853516,"speaker":"A"},{"text":"and","start":716440,"end":716760,"confidence":0.9951172,"speaker":"A"},{"text":"then","start":716760,"end":717039,"confidence":0.99072266,"speaker":"A"},{"text":"you","start":717039,"end":717280,"confidence":0.98535156,"speaker":"A"},{"text":"can","start":717280,"end":717480,"confidence":0.88964844,"speaker":"A"},{"text":"then","start":717480,"end":717760,"confidence":0.78759766,"speaker":"A"},{"text":"plug","start":717760,"end":718080,"confidence":0.9995117,"speaker":"A"},{"text":"it","start":718080,"end":718240,"confidence":0.99902344,"speaker":"A"},{"text":"into","start":718240,"end":718440,"confidence":0.99902344,"speaker":"A"},{"text":"your","start":718440,"end":718680,"confidence":0.9995117,"speaker":"A"},{"text":"app","start":718680,"end":718920,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":718920,"end":719240,"confidence":0.9628906,"speaker":"A"},{"text":"do","start":719240,"end":719520,"confidence":0.9995117,"speaker":"A"},{"text":"fun","start":719520,"end":719760,"confidence":0.99853516,"speaker":"A"},{"text":"stuff","start":719760,"end":720040,"confidence":1,"speaker":"A"},{"text":"like","start":720040,"end":720200,"confidence":0.9995117,"speaker":"A"},{"text":"this.","start":720200,"end":720520,"confidence":0.9946289,"speaker":"A"},{"text":"We","start":721560,"end":721880,"confidence":0.44580078,"speaker":"A"},{"text":"can","start":721880,"end":722080,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":722080,"end":722240,"confidence":1,"speaker":"A"},{"text":"things","start":722240,"end":722440,"confidence":1,"speaker":"A"},{"text":"like","start":722440,"end":722760,"confidence":0.9995117,"speaker":"A"},{"text":"queries","start":722840,"end":723520,"confidence":0.9477539,"speaker":"A"},{"text":"and","start":723520,"end":723880,"confidence":0.8354492,"speaker":"A"},{"text":"basic","start":724840,"end":725280,"confidence":0.99975586,"speaker":"A"},{"text":"database","start":725280,"end":725800,"confidence":0.99869794,"speaker":"A"},{"text":"stuff.","start":725800,"end":726200,"confidence":0.9996745,"speaker":"A"},{"text":"There's","start":726200,"end":726640,"confidence":0.99153644,"speaker":"A"},{"text":"a","start":726640,"end":726760,"confidence":0.99902344,"speaker":"A"},{"text":"lot","start":726760,"end":726840,"confidence":1,"speaker":"A"},{"text":"of","start":726840,"end":726960,"confidence":0.99902344,"speaker":"A"},{"text":"advantages","start":726960,"end":727520,"confidence":0.9991862,"speaker":"A"},{"text":"to","start":727520,"end":727760,"confidence":0.99853516,"speaker":"A"},{"text":"it.","start":727760,"end":728040,"confidence":0.99658203,"speaker":"A"},{"text":"For","start":729280,"end":729440,"confidence":0.9794922,"speaker":"A"},{"text":"one,","start":729440,"end":729760,"confidence":0.9667969,"speaker":"A"},{"text":"if","start":730080,"end":730400,"confidence":0.9995117,"speaker":"A"},{"text":"you're","start":730400,"end":730880,"confidence":0.95996094,"speaker":"A"},{"text":"doing","start":730960,"end":731360,"confidence":0.99902344,"speaker":"A"},{"text":"Apple","start":731840,"end":732320,"confidence":1,"speaker":"A"},{"text":"only,","start":732320,"end":732640,"confidence":0.9995117,"speaker":"A"},{"text":"then","start":733600,"end":734000,"confidence":0.99658203,"speaker":"A"},{"text":"it","start":734000,"end":734280,"confidence":0.9995117,"speaker":"A"},{"text":"definitely","start":734280,"end":734680,"confidence":0.99938965,"speaker":"A"},{"text":"makes","start":734680,"end":734880,"confidence":0.9980469,"speaker":"A"},{"text":"sense","start":734880,"end":735280,"confidence":0.99975586,"speaker":"A"},{"text":"to","start":735520,"end":735840,"confidence":0.99853516,"speaker":"A"},{"text":"look","start":735840,"end":736120,"confidence":0.98046875,"speaker":"A"},{"text":"into,","start":736120,"end":736440,"confidence":0.53515625,"speaker":"A"},{"text":"at","start":736440,"end":736640,"confidence":0.9995117,"speaker":"A"},{"text":"least","start":736640,"end":736800,"confidence":0.9995117,"speaker":"A"},{"text":"look","start":736800,"end":737040,"confidence":0.99902344,"speaker":"A"},{"text":"into","start":737040,"end":737320,"confidence":0.99902344,"speaker":"A"},{"text":"CloudKit.","start":737320,"end":738080,"confidence":0.9995117,"speaker":"A"},{"text":"If","start":742320,"end":742600,"confidence":0.9980469,"speaker":"A"},{"text":"you're","start":742600,"end":742800,"confidence":0.9996745,"speaker":"A"},{"text":"just","start":742800,"end":742920,"confidence":0.9995117,"speaker":"A"},{"text":"going","start":742920,"end":743040,"confidence":0.92333984,"speaker":"A"},{"text":"to","start":743040,"end":743120,"confidence":0.99902344,"speaker":"A"},{"text":"deploy","start":743120,"end":743480,"confidence":1,"speaker":"A"},{"text":"to","start":743480,"end":743840,"confidence":0.99316406,"speaker":"A"},{"text":"Apple","start":744480,"end":744960,"confidence":0.99975586,"speaker":"A"},{"text":"Devices.","start":744960,"end":745440,"confidence":1,"speaker":"A"},{"text":"If","start":746080,"end":746440,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":746440,"end":746800,"confidence":0.9995117,"speaker":"A"},{"text":"don't","start":747120,"end":747560,"confidence":0.9637044,"speaker":"A"},{"text":"mind","start":747560,"end":747920,"confidence":0.9995117,"speaker":"A"},{"text":"the,","start":748320,"end":748720,"confidence":0.9042969,"speaker":"A"},{"text":"the","start":749920,"end":750200,"confidence":0.9995117,"speaker":"A"},{"text":"fact","start":750200,"end":750360,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":750360,"end":750520,"confidence":1,"speaker":"A"},{"text":"it's","start":750520,"end":750720,"confidence":0.9996745,"speaker":"A"},{"text":"not","start":750720,"end":750920,"confidence":0.84814453,"speaker":"A"},{"text":"a","start":750920,"end":751160,"confidence":0.5908203,"speaker":"A"},{"text":"regular","start":751160,"end":751560,"confidence":0.9992676,"speaker":"A"},{"text":"SQL","start":751560,"end":751960,"confidence":0.98860675,"speaker":"A"},{"text":"database,","start":751960,"end":752640,"confidence":0.9998372,"speaker":"A"},{"text":"that's","start":754050,"end":754210,"confidence":0.9980469,"speaker":"A"},{"text":"something","start":754210,"end":754410,"confidence":0.9995117,"speaker":"A"},{"text":"too","start":754410,"end":754650,"confidence":0.68408203,"speaker":"A"},{"text":"to","start":754650,"end":754810,"confidence":0.99853516,"speaker":"A"},{"text":"think","start":754810,"end":754930,"confidence":1,"speaker":"A"},{"text":"about.","start":754930,"end":755090,"confidence":0.9995117,"speaker":"A"},{"text":"If","start":755090,"end":755290,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":755290,"end":755450,"confidence":1,"speaker":"A"},{"text":"like","start":755450,"end":755610,"confidence":0.92333984,"speaker":"A"},{"text":"need","start":755610,"end":755770,"confidence":0.9848633,"speaker":"A"},{"text":"a","start":755770,"end":755890,"confidence":0.9926758,"speaker":"A"},{"text":"SQL","start":755890,"end":756210,"confidence":0.96533203,"speaker":"A"},{"text":"database,","start":756210,"end":756650,"confidence":0.98063153,"speaker":"A"},{"text":"this","start":756650,"end":756850,"confidence":0.97998047,"speaker":"A"},{"text":"might","start":756850,"end":757050,"confidence":1,"speaker":"A"},{"text":"not","start":757050,"end":757210,"confidence":0.9995117,"speaker":"A"},{"text":"be","start":757210,"end":757490,"confidence":1,"speaker":"A"},{"text":"what","start":757730,"end":758050,"confidence":0.9819336,"speaker":"A"},{"text":"you","start":758050,"end":758370,"confidence":0.9995117,"speaker":"A"},{"text":"want.","start":758370,"end":758770,"confidence":0.9926758,"speaker":"A"},{"text":"And","start":759410,"end":759690,"confidence":0.95654297,"speaker":"A"},{"text":"then","start":759690,"end":759890,"confidence":0.9819336,"speaker":"A"},{"text":"if","start":759890,"end":760050,"confidence":1,"speaker":"A"},{"text":"you","start":760050,"end":760170,"confidence":1,"speaker":"A"},{"text":"don't","start":760170,"end":760370,"confidence":1,"speaker":"A"},{"text":"mind","start":760370,"end":760530,"confidence":1,"speaker":"A"},{"text":"working","start":760530,"end":760770,"confidence":1,"speaker":"A"},{"text":"with","start":760770,"end":761010,"confidence":0.9848633,"speaker":"A"},{"text":"a","start":761010,"end":761170,"confidence":0.99902344,"speaker":"A"},{"text":"lot","start":761170,"end":761290,"confidence":1,"speaker":"A"},{"text":"of","start":761290,"end":761410,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":761410,"end":761530,"confidence":0.9995117,"speaker":"A"},{"text":"abstraction","start":761530,"end":762130,"confidence":0.9991455,"speaker":"A"},{"text":"layers","start":762130,"end":762610,"confidence":0.99934894,"speaker":"A"},{"text":"that","start":763010,"end":763330,"confidence":0.99853516,"speaker":"A"},{"text":"CloudKit","start":763330,"end":763970,"confidence":0.99902344,"speaker":"A"},{"text":"provides,","start":763970,"end":764610,"confidence":0.9995117,"speaker":"A"},{"text":"then","start":766930,"end":767330,"confidence":0.99658203,"speaker":"A"},{"text":"this","start":767650,"end":767970,"confidence":0.9995117,"speaker":"A"},{"text":"might","start":767970,"end":768170,"confidence":0.99609375,"speaker":"A"},{"text":"be","start":768170,"end":768370,"confidence":1,"speaker":"A"},{"text":"good","start":768370,"end":768530,"confidence":1,"speaker":"A"},{"text":"for","start":768530,"end":768650,"confidence":0.87402344,"speaker":"A"},{"text":"you","start":768650,"end":768850,"confidence":1,"speaker":"A"},{"text":"to","start":768850,"end":769050,"confidence":1,"speaker":"A"},{"text":"get","start":769050,"end":769210,"confidence":1,"speaker":"A"},{"text":"started","start":769210,"end":769490,"confidence":0.9995117,"speaker":"A"},{"text":"or","start":770050,"end":770410,"confidence":0.99658203,"speaker":"A"},{"text":"especially","start":770410,"end":770730,"confidence":0.9995117,"speaker":"A"},{"text":"if","start":770730,"end":770930,"confidence":1,"speaker":"A"},{"text":"you","start":770930,"end":771050,"confidence":1,"speaker":"A"},{"text":"don't","start":771050,"end":771250,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":771250,"end":771370,"confidence":1,"speaker":"A"},{"text":"any","start":771370,"end":771570,"confidence":0.9995117,"speaker":"A"},{"text":"database","start":771570,"end":772130,"confidence":0.9998372,"speaker":"A"},{"text":"experience.","start":772130,"end":772450,"confidence":0.9995117,"speaker":"A"},{"text":"So","start":774130,"end":774410,"confidence":0.99316406,"speaker":"A"},{"text":"as","start":774410,"end":774570,"confidence":0.9995117,"speaker":"A"},{"text":"far","start":774570,"end":774730,"confidence":1,"speaker":"A"},{"text":"as","start":774730,"end":774930,"confidence":1,"speaker":"A"},{"text":"like","start":774930,"end":775250,"confidence":0.9770508,"speaker":"A"},{"text":"server","start":775570,"end":776090,"confidence":0.99975586,"speaker":"A"},{"text":"choices,","start":776090,"end":776650,"confidence":0.98291016,"speaker":"A"},{"text":"I","start":776650,"end":776850,"confidence":0.9995117,"speaker":"A"},{"text":"would","start":776850,"end":777010,"confidence":1,"speaker":"A"},{"text":"say","start":777010,"end":777290,"confidence":1,"speaker":"A"},{"text":"CloudKit","start":777290,"end":777970,"confidence":0.9926758,"speaker":"A"},{"text":"might","start":777970,"end":778170,"confidence":0.99365234,"speaker":"A"},{"text":"not","start":778170,"end":778330,"confidence":0.57714844,"speaker":"A"},{"text":"be","start":778330,"end":778490,"confidence":1,"speaker":"A"},{"text":"your","start":778490,"end":778690,"confidence":1,"speaker":"A"},{"text":"first","start":778690,"end":778930,"confidence":0.9995117,"speaker":"A"},{"text":"choice,","start":778930,"end":779330,"confidence":0.99975586,"speaker":"A"},{"text":"but","start":779970,"end":780090,"confidence":0.9970703,"speaker":"A"},{"text":"it","start":780090,"end":780250,"confidence":0.99902344,"speaker":"A"},{"text":"certainly","start":780250,"end":780610,"confidence":1,"speaker":"A"},{"text":"is","start":780610,"end":780930,"confidence":1,"speaker":"A"},{"text":"a","start":780930,"end":781210,"confidence":0.9995117,"speaker":"A"},{"text":"decent","start":781210,"end":781570,"confidence":1,"speaker":"A"},{"text":"choice","start":781570,"end":781970,"confidence":0.99975586,"speaker":"A"},{"text":"if","start":782290,"end":782610,"confidence":0.6225586,"speaker":"A"},{"text":"you're","start":782610,"end":782890,"confidence":0.9943034,"speaker":"A"},{"text":"going","start":782890,"end":783090,"confidence":0.99853516,"speaker":"A"},{"text":"the","start":783090,"end":783290,"confidence":0.9145508,"speaker":"A"},{"text":"Apple","start":783290,"end":783650,"confidence":0.9995117,"speaker":"A"},{"text":"only","start":783650,"end":783970,"confidence":0.9995117,"speaker":"A"},{"text":"route.","start":783970,"end":784450,"confidence":0.9938965,"speaker":"A"},{"text":"But","start":789970,"end":790250,"confidence":0.99658203,"speaker":"A"},{"text":"then","start":790250,"end":790410,"confidence":1,"speaker":"A"},{"text":"the","start":790410,"end":790530,"confidence":1,"speaker":"A"},{"text":"question","start":790530,"end":790730,"confidence":1,"speaker":"A"},{"text":"comes","start":790730,"end":791010,"confidence":0.9951172,"speaker":"A"},{"text":"in,","start":791010,"end":791250,"confidence":0.97216797,"speaker":"A"},{"text":"why","start":791250,"end":791450,"confidence":1,"speaker":"A"},{"text":"would","start":791450,"end":791610,"confidence":1,"speaker":"A"},{"text":"you","start":791610,"end":791770,"confidence":1,"speaker":"A"},{"text":"want","start":791770,"end":792010,"confidence":0.99902344,"speaker":"A"},{"text":"Cloud","start":792010,"end":792450,"confidence":0.954834,"speaker":"A"},{"text":"server","start":792450,"end":792850,"confidence":0.98461914,"speaker":"A"},{"text":"side","start":792850,"end":793050,"confidence":0.55859375,"speaker":"A"},{"text":"CloudKit?","start":793050,"end":793730,"confidence":0.98095703,"speaker":"A"},{"text":"Why","start":793890,"end":794170,"confidence":1,"speaker":"A"},{"text":"would","start":794170,"end":794330,"confidence":1,"speaker":"A"},{"text":"you","start":794330,"end":794490,"confidence":1,"speaker":"A"},{"text":"want","start":794490,"end":794610,"confidence":0.9941406,"speaker":"A"},{"text":"to","start":794610,"end":794690,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":794690,"end":794810,"confidence":1,"speaker":"A"},{"text":"anything","start":794810,"end":795090,"confidence":1,"speaker":"A"},{"text":"with","start":795090,"end":795250,"confidence":0.9995117,"speaker":"A"},{"text":"CloudKit","start":795250,"end":795810,"confidence":0.9885254,"speaker":"A"},{"text":"on","start":795810,"end":796009,"confidence":0.9980469,"speaker":"A"},{"text":"the","start":796009,"end":796170,"confidence":0.9995117,"speaker":"A"},{"text":"server?","start":796170,"end":796610,"confidence":1,"speaker":"A"},{"text":"So","start":797970,"end":798250,"confidence":0.99316406,"speaker":"A"},{"text":"here's,","start":798250,"end":798610,"confidence":0.9793294,"speaker":"A"},{"text":"here's","start":798610,"end":799090,"confidence":0.9996745,"speaker":"A"},{"text":"the","start":799250,"end":799530,"confidence":0.9995117,"speaker":"A"},{"text":"first","start":799530,"end":799810,"confidence":0.9995117,"speaker":"A"},{"text":"case.","start":799890,"end":800290,"confidence":0.9995117,"speaker":"A"},{"text":"Well,","start":800690,"end":801090,"confidence":0.96533203,"speaker":"A"},{"text":"this","start":801250,"end":801530,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":801530,"end":801690,"confidence":1,"speaker":"A"},{"text":"how","start":801690,"end":801890,"confidence":1,"speaker":"A"},{"text":"you","start":801890,"end":802090,"confidence":1,"speaker":"A"},{"text":"can","start":802090,"end":802290,"confidence":0.9995117,"speaker":"A"},{"text":"go","start":802290,"end":802490,"confidence":0.9995117,"speaker":"A"},{"text":"ahead","start":802490,"end":802650,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":802650,"end":802850,"confidence":0.97216797,"speaker":"A"},{"text":"do","start":802850,"end":803050,"confidence":1,"speaker":"A"},{"text":"that","start":803050,"end":803250,"confidence":0.99902344,"speaker":"A"},{"text":"is","start":803250,"end":803570,"confidence":0.90234375,"speaker":"A"},{"text":"they","start":803970,"end":804330,"confidence":0.99902344,"speaker":"A"},{"text":"provide","start":804330,"end":804690,"confidence":1,"speaker":"A"},{"text":"actually","start":804690,"end":805050,"confidence":0.9980469,"speaker":"A"},{"text":"a","start":805050,"end":805290,"confidence":0.91259766,"speaker":"A"},{"text":"REST","start":805290,"end":805490,"confidence":0.9995117,"speaker":"A"},{"text":"API","start":805490,"end":806090,"confidence":0.95166016,"speaker":"A"},{"text":"for","start":806090,"end":806450,"confidence":0.9946289,"speaker":"A"},{"text":"calls","start":806450,"end":806930,"confidence":0.9992676,"speaker":"A"},{"text":"to","start":806930,"end":807170,"confidence":0.9970703,"speaker":"A"},{"text":"CloudKit","start":807170,"end":807880,"confidence":0.9848633,"speaker":"A"},{"text":"using","start":808910,"end":809150,"confidence":0.95654297,"speaker":"A"},{"text":"the,","start":809310,"end":809710,"confidence":0.98828125,"speaker":"A"},{"text":"if","start":809950,"end":810230,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":810230,"end":810350,"confidence":1,"speaker":"A"},{"text":"go","start":810350,"end":810430,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":810430,"end":810550,"confidence":0.99853516,"speaker":"A"},{"text":"the","start":810550,"end":810670,"confidence":0.9995117,"speaker":"A"},{"text":"documentation,","start":810670,"end":811350,"confidence":0.99902344,"speaker":"A"},{"text":"I'll","start":811350,"end":811670,"confidence":0.99820966,"speaker":"A"},{"text":"provide","start":811670,"end":811910,"confidence":0.99658203,"speaker":"A"},{"text":"a","start":811910,"end":812110,"confidence":0.9067383,"speaker":"A"},{"text":"link","start":812110,"end":812350,"confidence":0.9992676,"speaker":"A"},{"text":"to","start":812350,"end":812550,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":812550,"end":812830,"confidence":0.8276367,"speaker":"A"},{"text":"CloudKit","start":812910,"end":813590,"confidence":0.87280273,"speaker":"A"},{"text":"Web","start":813590,"end":813830,"confidence":0.99658203,"speaker":"A"},{"text":"Services","start":813830,"end":814110,"confidence":0.9995117,"speaker":"A"},{"text":"which","start":815310,"end":815710,"confidence":0.99902344,"speaker":"A"},{"text":"provides","start":816510,"end":816990,"confidence":0.99975586,"speaker":"A"},{"text":"a","start":816990,"end":817070,"confidence":0.9995117,"speaker":"A"},{"text":"lot","start":817070,"end":817190,"confidence":1,"speaker":"A"},{"text":"of","start":817190,"end":817310,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":817310,"end":817430,"confidence":0.9980469,"speaker":"A"},{"text":"documentation","start":817430,"end":818070,"confidence":0.9998047,"speaker":"A"},{"text":"for","start":818070,"end":818270,"confidence":0.9995117,"speaker":"A"},{"text":"what","start":818270,"end":818390,"confidence":0.99902344,"speaker":"A"},{"text":"we'll","start":818390,"end":818630,"confidence":0.8699544,"speaker":"A"},{"text":"be","start":818630,"end":818790,"confidence":1,"speaker":"A"},{"text":"talking","start":818790,"end":819030,"confidence":0.97631836,"speaker":"A"},{"text":"about","start":819030,"end":819230,"confidence":0.9995117,"speaker":"A"},{"text":"today.","start":819230,"end":819550,"confidence":0.99902344,"speaker":"A"},{"text":"A","start":820910,"end":821150,"confidence":0.99658203,"speaker":"A"},{"text":"lot","start":821150,"end":821270,"confidence":1,"speaker":"A"},{"text":"of","start":821270,"end":821430,"confidence":0.9995117,"speaker":"A"},{"text":"this","start":821430,"end":821590,"confidence":0.99902344,"speaker":"A"},{"text":"is","start":821590,"end":821790,"confidence":0.99853516,"speaker":"A"},{"text":"abstracted","start":821790,"end":822390,"confidence":0.88964844,"speaker":"A"},{"text":"out","start":822390,"end":822550,"confidence":0.99902344,"speaker":"A"},{"text":"in","start":822550,"end":822670,"confidence":0.9980469,"speaker":"A"},{"text":"the","start":822670,"end":822750,"confidence":0.9995117,"speaker":"A"},{"text":"JavaScript","start":822750,"end":823350,"confidence":0.99698895,"speaker":"A"},{"text":"library.","start":823350,"end":823790,"confidence":0.9916992,"speaker":"A"},{"text":"So","start":823870,"end":824109,"confidence":0.9838867,"speaker":"A"},{"text":"if","start":824109,"end":824230,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":824230,"end":824350,"confidence":1,"speaker":"A"},{"text":"want","start":824350,"end":824510,"confidence":0.95166016,"speaker":"A"},{"text":"to","start":824510,"end":824670,"confidence":0.9980469,"speaker":"A"},{"text":"do","start":824670,"end":824790,"confidence":0.9995117,"speaker":"A"},{"text":"stuff","start":824790,"end":824990,"confidence":1,"speaker":"A"},{"text":"on","start":824990,"end":825110,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":825110,"end":825270,"confidence":0.98828125,"speaker":"A"},{"text":"website,","start":825270,"end":825550,"confidence":0.99609375,"speaker":"A"},{"text":"they","start":826430,"end":826790,"confidence":0.9995117,"speaker":"A"},{"text":"provide","start":826790,"end":827150,"confidence":1,"speaker":"A"},{"text":"a","start":827230,"end":827630,"confidence":0.99853516,"speaker":"A"},{"text":"CloudKit","start":827790,"end":828590,"confidence":0.99438477,"speaker":"A"},{"text":"JavaScript","start":828590,"end":829390,"confidence":0.9239909,"speaker":"A"},{"text":"library","start":830270,"end":830830,"confidence":0.9996745,"speaker":"A"},{"text":"for","start":830830,"end":831110,"confidence":0.99853516,"speaker":"A"},{"text":"that.","start":831110,"end":831470,"confidence":0.99609375,"speaker":"A"},{"text":"Sorry,","start":833150,"end":833710,"confidence":0.8925781,"speaker":"A"},{"text":"just","start":836190,"end":836310,"confidence":0.93847656,"speaker":"A"},{"text":"going","start":836310,"end":836510,"confidence":0.9814453,"speaker":"A"},{"text":"into","start":836510,"end":836790,"confidence":0.9121094,"speaker":"A"},{"text":"do","start":836790,"end":837030,"confidence":0.99560547,"speaker":"A"},{"text":"not","start":837030,"end":837230,"confidence":0.99902344,"speaker":"A"},{"text":"disturb","start":837230,"end":837870,"confidence":0.87369794,"speaker":"A"},{"text":"mode.","start":838670,"end":839230,"confidence":0.73999023,"speaker":"A"},{"text":"They","start":847950,"end":848270,"confidence":0.9404297,"speaker":"A"},{"text":"even","start":848270,"end":848590,"confidence":0.7373047,"speaker":"A"},{"text":"in","start":848750,"end":849030,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":849030,"end":849270,"confidence":0.99902344,"speaker":"A"},{"text":"web","start":849270,"end":849710,"confidence":0.9995117,"speaker":"A"},{"text":"references","start":849790,"end":850429,"confidence":0.9367676,"speaker":"A"},{"text":"documentation","start":850430,"end":851070,"confidence":0.97734374,"speaker":"A"},{"text":"they","start":851070,"end":851270,"confidence":0.9980469,"speaker":"A"},{"text":"provide","start":851270,"end":851510,"confidence":1,"speaker":"A"},{"text":"a","start":851510,"end":851710,"confidence":0.8413086,"speaker":"A"},{"text":"composing","start":851710,"end":852150,"confidence":0.92008466,"speaker":"A"},{"text":"web","start":852150,"end":852390,"confidence":0.998291,"speaker":"A"},{"text":"service","start":852390,"end":852630,"confidence":0.99902344,"speaker":"A"},{"text":"request","start":852630,"end":853150,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":853470,"end":853750,"confidence":0.9970703,"speaker":"A"},{"text":"all","start":853750,"end":853910,"confidence":0.9995117,"speaker":"A"},{"text":"these","start":853910,"end":854110,"confidence":0.99902344,"speaker":"A"},{"text":"instructions","start":854110,"end":854670,"confidence":0.9996745,"speaker":"A"},{"text":"about","start":854670,"end":854910,"confidence":1,"speaker":"A"},{"text":"how","start":854910,"end":855070,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":855070,"end":855190,"confidence":1,"speaker":"A"},{"text":"go","start":855190,"end":855310,"confidence":1,"speaker":"A"},{"text":"ahead","start":855310,"end":855470,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":855470,"end":855670,"confidence":1,"speaker":"A"},{"text":"do","start":855670,"end":855830,"confidence":1,"speaker":"A"},{"text":"that.","start":855830,"end":856110,"confidence":1,"speaker":"A"},{"text":"So","start":857470,"end":857870,"confidence":0.98876953,"speaker":"A"},{"text":"man,","start":858270,"end":858590,"confidence":0.9482422,"speaker":"A"},{"text":"was","start":858590,"end":858790,"confidence":0.99853516,"speaker":"A"},{"text":"it","start":858790,"end":858950,"confidence":0.9277344,"speaker":"A"},{"text":"like","start":858950,"end":859110,"confidence":0.9941406,"speaker":"A"},{"text":"half","start":859110,"end":859310,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":859310,"end":859470,"confidence":0.99902344,"speaker":"A"},{"text":"decade","start":859470,"end":859790,"confidence":0.99975586,"speaker":"A"},{"text":"ago","start":859790,"end":860110,"confidence":1,"speaker":"A"},{"text":"that","start":860880,"end":861120,"confidence":0.97216797,"speaker":"A"},{"text":"I","start":861280,"end":861680,"confidence":0.97314453,"speaker":"A"},{"text":"built","start":862960,"end":863320,"confidence":0.99153644,"speaker":"A"},{"text":"Heart","start":863320,"end":863520,"confidence":0.8129883,"speaker":"A"},{"text":"Twitch","start":863520,"end":864000,"confidence":0.98999023,"speaker":"A"},{"text":"and","start":864480,"end":864880,"confidence":0.9814453,"speaker":"A"},{"text":"at","start":865360,"end":865640,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":865640,"end":865840,"confidence":0.99853516,"speaker":"A"},{"text":"time","start":865840,"end":866080,"confidence":1,"speaker":"A"},{"text":"I","start":866080,"end":866280,"confidence":1,"speaker":"A"},{"text":"don't","start":866280,"end":866520,"confidence":0.99934894,"speaker":"A"},{"text":"think","start":866520,"end":866720,"confidence":1,"speaker":"A"},{"text":"there","start":866720,"end":866960,"confidence":0.99365234,"speaker":"A"},{"text":"was","start":866960,"end":867280,"confidence":0.9995117,"speaker":"A"},{"text":"anything,","start":867440,"end":868080,"confidence":0.99975586,"speaker":"A"},{"text":"there","start":870080,"end":870360,"confidence":0.99658203,"speaker":"A"},{"text":"was","start":870360,"end":870560,"confidence":0.99902344,"speaker":"A"},{"text":"anything","start":870560,"end":870960,"confidence":0.99975586,"speaker":"A"},{"text":"like","start":870960,"end":871200,"confidence":0.99902344,"speaker":"A"},{"text":"sign","start":871200,"end":871440,"confidence":0.99658203,"speaker":"A"},{"text":"in","start":871440,"end":871640,"confidence":0.9819336,"speaker":"A"},{"text":"with","start":871640,"end":871800,"confidence":1,"speaker":"A"},{"text":"Apple","start":871800,"end":872160,"confidence":0.9995117,"speaker":"A"},{"text":"even.","start":872160,"end":872480,"confidence":0.9970703,"speaker":"A"},{"text":"And","start":872880,"end":873280,"confidence":0.97265625,"speaker":"A"},{"text":"like","start":873520,"end":873840,"confidence":0.9399414,"speaker":"A"},{"text":"I","start":873840,"end":874160,"confidence":0.9995117,"speaker":"A"},{"text":"really","start":874160,"end":874560,"confidence":0.99902344,"speaker":"A"},{"text":"didn't","start":875120,"end":875640,"confidence":0.99348956,"speaker":"A"},{"text":"want","start":875640,"end":875920,"confidence":0.9995117,"speaker":"A"},{"text":"like","start":876880,"end":877280,"confidence":0.9794922,"speaker":"A"},{"text":"to","start":878160,"end":878480,"confidence":0.98291016,"speaker":"A"},{"text":"explain","start":878480,"end":878760,"confidence":0.99853516,"speaker":"A"},{"text":"how","start":878760,"end":878920,"confidence":0.9995117,"speaker":"A"},{"text":"harshwitch","start":878920,"end":879520,"confidence":0.62939453,"speaker":"A"},{"text":"works","start":879520,"end":879800,"confidence":0.99975586,"speaker":"A"},{"text":"is","start":879800,"end":879960,"confidence":0.91064453,"speaker":"A"},{"text":"you","start":879960,"end":880120,"confidence":0.99853516,"speaker":"A"},{"text":"have","start":880120,"end":880320,"confidence":1,"speaker":"A"},{"text":"like","start":880320,"end":880520,"confidence":0.9902344,"speaker":"A"},{"text":"a","start":880520,"end":880680,"confidence":0.9995117,"speaker":"A"},{"text":"watch","start":880680,"end":880960,"confidence":0.99902344,"speaker":"A"},{"text":"and","start":881360,"end":881720,"confidence":0.6225586,"speaker":"A"},{"text":"it","start":881720,"end":881960,"confidence":0.9995117,"speaker":"A"},{"text":"will","start":881960,"end":882200,"confidence":0.9995117,"speaker":"A"},{"text":"send","start":882200,"end":882600,"confidence":0.9291992,"speaker":"A"},{"text":"the","start":882600,"end":882840,"confidence":0.9995117,"speaker":"A"},{"text":"heart","start":882840,"end":883040,"confidence":0.9995117,"speaker":"A"},{"text":"rate","start":883040,"end":883280,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":883280,"end":883480,"confidence":1,"speaker":"A"},{"text":"the","start":883480,"end":883640,"confidence":1,"speaker":"A"},{"text":"server","start":883640,"end":884160,"confidence":0.99975586,"speaker":"A"},{"text":"and","start":885360,"end":885640,"confidence":0.9921875,"speaker":"A"},{"text":"then","start":885640,"end":885920,"confidence":0.9926758,"speaker":"A"},{"text":"the","start":887020,"end":887180,"confidence":0.99658203,"speaker":"A"},{"text":"server","start":887180,"end":887580,"confidence":1,"speaker":"A"},{"text":"will","start":887580,"end":887780,"confidence":0.99902344,"speaker":"A"},{"text":"then","start":887780,"end":888020,"confidence":0.9995117,"speaker":"A"},{"text":"use","start":888020,"end":888260,"confidence":1,"speaker":"A"},{"text":"a","start":888260,"end":888420,"confidence":0.99853516,"speaker":"A"},{"text":"web","start":888420,"end":888660,"confidence":0.7871094,"speaker":"A"},{"text":"socket","start":888660,"end":889180,"confidence":0.9996745,"speaker":"A"},{"text":"to","start":889180,"end":889540,"confidence":0.9995117,"speaker":"A"},{"text":"push","start":889540,"end":889860,"confidence":1,"speaker":"A"},{"text":"it","start":889860,"end":890020,"confidence":0.99902344,"speaker":"A"},{"text":"out","start":890020,"end":890180,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":890180,"end":890340,"confidence":1,"speaker":"A"},{"text":"a","start":890340,"end":890500,"confidence":0.99853516,"speaker":"A"},{"text":"web","start":890500,"end":890740,"confidence":0.99975586,"speaker":"A"},{"text":"page.","start":890740,"end":891100,"confidence":0.84643555,"speaker":"A"},{"text":"And","start":892060,"end":892340,"confidence":0.97558594,"speaker":"A"},{"text":"then","start":892340,"end":892620,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":892620,"end":892900,"confidence":0.99902344,"speaker":"A"},{"text":"would","start":892900,"end":893180,"confidence":0.9838867,"speaker":"A"},{"text":"point","start":893500,"end":893900,"confidence":0.9926758,"speaker":"A"},{"text":"OBS","start":893980,"end":894380,"confidence":0.9897461,"speaker":"A"},{"text":"or","start":894540,"end":894780,"confidence":0.99072266,"speaker":"A"},{"text":"some","start":894780,"end":894900,"confidence":0.9995117,"speaker":"A"},{"text":"sort","start":894900,"end":895100,"confidence":0.9926758,"speaker":"A"},{"text":"of","start":895100,"end":895260,"confidence":0.53027344,"speaker":"A"},{"text":"streaming","start":895260,"end":895700,"confidence":0.91813153,"speaker":"A"},{"text":"software","start":895700,"end":896020,"confidence":0.9998779,"speaker":"A"},{"text":"to","start":896020,"end":896180,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":896180,"end":896340,"confidence":1,"speaker":"A"},{"text":"URL","start":896340,"end":896860,"confidence":0.99487305,"speaker":"A"},{"text":"or","start":896860,"end":897060,"confidence":0.9980469,"speaker":"A"},{"text":"to","start":897060,"end":897220,"confidence":0.99609375,"speaker":"A"},{"text":"the","start":897220,"end":897340,"confidence":1,"speaker":"A"},{"text":"browser","start":897340,"end":897700,"confidence":0.9983724,"speaker":"A"},{"text":"window","start":897700,"end":898060,"confidence":1,"speaker":"A"},{"text":"and","start":898060,"end":898220,"confidence":0.99072266,"speaker":"A"},{"text":"then","start":898220,"end":898380,"confidence":0.8310547,"speaker":"A"},{"text":"that","start":898380,"end":898580,"confidence":0.9995117,"speaker":"A"},{"text":"way","start":898580,"end":898740,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":898740,"end":898860,"confidence":1,"speaker":"A"},{"text":"can","start":898860,"end":898980,"confidence":0.9995117,"speaker":"A"},{"text":"stream","start":898980,"end":899260,"confidence":0.99609375,"speaker":"A"},{"text":"your","start":899260,"end":899460,"confidence":0.99853516,"speaker":"A"},{"text":"heart","start":899460,"end":899660,"confidence":0.9980469,"speaker":"A"},{"text":"rate.","start":899660,"end":899940,"confidence":0.9951172,"speaker":"A"},{"text":"That's","start":899940,"end":900220,"confidence":0.9996745,"speaker":"A"},{"text":"how","start":900220,"end":900300,"confidence":0.9995117,"speaker":"A"},{"text":"it","start":900300,"end":900420,"confidence":0.99853516,"speaker":"A"},{"text":"works.","start":900420,"end":900860,"confidence":0.9946289,"speaker":"A"},{"text":"And","start":901500,"end":901780,"confidence":0.9711914,"speaker":"A"},{"text":"what","start":901780,"end":901940,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":901940,"end":902100,"confidence":1,"speaker":"A"},{"text":"really","start":902100,"end":902339,"confidence":0.9995117,"speaker":"A"},{"text":"didn't","start":902339,"end":902659,"confidence":0.9980469,"speaker":"A"},{"text":"want","start":902659,"end":902900,"confidence":1,"speaker":"A"},{"text":"is","start":902900,"end":903180,"confidence":0.99902344,"speaker":"A"},{"text":"a","start":903180,"end":903500,"confidence":0.9711914,"speaker":"A"},{"text":"difficult","start":903500,"end":903980,"confidence":0.9699707,"speaker":"A"},{"text":"way","start":903980,"end":904180,"confidence":0.9995117,"speaker":"A"},{"text":"for","start":904180,"end":904380,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":904380,"end":904580,"confidence":0.8876953,"speaker":"A"},{"text":"user","start":904580,"end":904900,"confidence":1,"speaker":"A"},{"text":"to","start":904900,"end":905100,"confidence":0.9995117,"speaker":"A"},{"text":"log","start":905100,"end":905420,"confidence":1,"speaker":"A"},{"text":"in","start":905420,"end":905820,"confidence":0.9838867,"speaker":"A"},{"text":"with","start":906540,"end":906820,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":906820,"end":906980,"confidence":0.7949219,"speaker":"A"},{"text":"username","start":906980,"end":907500,"confidence":0.9975586,"speaker":"A"},{"text":"and","start":907500,"end":907620,"confidence":0.99902344,"speaker":"A"},{"text":"password","start":907620,"end":908020,"confidence":0.90152997,"speaker":"A"},{"text":"on","start":908020,"end":908180,"confidence":0.6225586,"speaker":"A"},{"text":"the","start":908180,"end":908340,"confidence":0.9995117,"speaker":"A"},{"text":"watch","start":908340,"end":908620,"confidence":0.9995117,"speaker":"A"},{"text":"because","start":908620,"end":908900,"confidence":0.72558594,"speaker":"A"},{"text":"we","start":908900,"end":909020,"confidence":0.9995117,"speaker":"A"},{"text":"all","start":909020,"end":909140,"confidence":0.99902344,"speaker":"A"},{"text":"know","start":909140,"end":909300,"confidence":0.9980469,"speaker":"A"},{"text":"typing","start":909300,"end":909620,"confidence":0.8249512,"speaker":"A"},{"text":"on","start":909620,"end":909740,"confidence":0.9921875,"speaker":"A"},{"text":"the","start":909740,"end":909820,"confidence":0.9951172,"speaker":"A"},{"text":"watch","start":909820,"end":910020,"confidence":0.99902344,"speaker":"A"},{"text":"is","start":910020,"end":910380,"confidence":0.84472656,"speaker":"A"},{"text":"hell.","start":910780,"end":911260,"confidence":0.9157715,"speaker":"A"},{"text":"So","start":911900,"end":912300,"confidence":0.9770508,"speaker":"A"},{"text":"my,","start":912460,"end":912860,"confidence":0.70410156,"speaker":"A"},{"text":"my","start":912860,"end":913140,"confidence":0.9995117,"speaker":"A"},{"text":"thought","start":913140,"end":913340,"confidence":0.99902344,"speaker":"A"},{"text":"was","start":913340,"end":913620,"confidence":0.99853516,"speaker":"A"},{"text":"like,","start":913620,"end":913980,"confidence":0.9897461,"speaker":"A"},{"text":"and","start":914320,"end":914480,"confidence":0.6791992,"speaker":"A"},{"text":"I","start":914480,"end":914680,"confidence":1,"speaker":"A"},{"text":"didn't","start":914680,"end":914920,"confidence":0.9996745,"speaker":"A"},{"text":"have","start":914920,"end":915200,"confidence":0.9921875,"speaker":"A"},{"text":"sign","start":915280,"end":915600,"confidence":0.8886719,"speaker":"A"},{"text":"in","start":915600,"end":915800,"confidence":0.59814453,"speaker":"A"},{"text":"with","start":915800,"end":915960,"confidence":1,"speaker":"A"},{"text":"Apple,","start":915960,"end":916280,"confidence":1,"speaker":"A"},{"text":"right?","start":916280,"end":916560,"confidence":0.9970703,"speaker":"A"},{"text":"So","start":917440,"end":917720,"confidence":0.9995117,"speaker":"A"},{"text":"my","start":917720,"end":917880,"confidence":0.99902344,"speaker":"A"},{"text":"thought","start":917880,"end":918080,"confidence":0.9995117,"speaker":"A"},{"text":"was","start":918080,"end":918320,"confidence":0.99902344,"speaker":"A"},{"text":"why","start":918320,"end":918520,"confidence":1,"speaker":"A"},{"text":"don't","start":918520,"end":918720,"confidence":0.9972331,"speaker":"A"},{"text":"we","start":918720,"end":918840,"confidence":1,"speaker":"A"},{"text":"use","start":918840,"end":919000,"confidence":1,"speaker":"A"},{"text":"CloudKit?","start":919000,"end":919680,"confidence":0.9992676,"speaker":"A"},{"text":"Because","start":919840,"end":920120,"confidence":0.98095703,"speaker":"A"},{"text":"you're","start":920120,"end":920320,"confidence":0.9998372,"speaker":"A"},{"text":"already","start":920320,"end":920520,"confidence":1,"speaker":"A"},{"text":"signed","start":920520,"end":920880,"confidence":0.9963379,"speaker":"A"},{"text":"in","start":920880,"end":921000,"confidence":0.71728516,"speaker":"A"},{"text":"a","start":921000,"end":921120,"confidence":0.61376953,"speaker":"A"},{"text":"CloudKit","start":921120,"end":921640,"confidence":0.99658203,"speaker":"A"},{"text":"on","start":921640,"end":921800,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":921800,"end":921960,"confidence":1,"speaker":"A"},{"text":"Watch","start":921960,"end":922240,"confidence":0.99853516,"speaker":"A"},{"text":"with","start":922800,"end":923120,"confidence":0.99853516,"speaker":"A"},{"text":"your,","start":923120,"end":923440,"confidence":0.9980469,"speaker":"A"},{"text":"your","start":923440,"end":923760,"confidence":0.9995117,"speaker":"A"},{"text":"id.","start":923760,"end":924080,"confidence":0.9995117,"speaker":"A"},{"text":"And","start":926640,"end":926920,"confidence":0.99316406,"speaker":"A"},{"text":"what","start":926920,"end":927080,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":927080,"end":927320,"confidence":1,"speaker":"A"},{"text":"do","start":927320,"end":927680,"confidence":1,"speaker":"A"},{"text":"is","start":928320,"end":928720,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":929440,"end":929720,"confidence":0.9995117,"speaker":"A"},{"text":"log","start":929720,"end":929920,"confidence":1,"speaker":"A"},{"text":"in","start":929920,"end":930159,"confidence":0.9975586,"speaker":"A"},{"text":"with","start":930159,"end":930359,"confidence":1,"speaker":"A"},{"text":"a","start":930359,"end":930480,"confidence":0.9794922,"speaker":"A"},{"text":"regular","start":930480,"end":930760,"confidence":1,"speaker":"A"},{"text":"like","start":930760,"end":930960,"confidence":0.9975586,"speaker":"A"},{"text":"email","start":930960,"end":931240,"confidence":1,"speaker":"A"},{"text":"address","start":931240,"end":931520,"confidence":1,"speaker":"A"},{"text":"and","start":931520,"end":931760,"confidence":0.6791992,"speaker":"A"},{"text":"password","start":931760,"end":932320,"confidence":0.88378906,"speaker":"A"},{"text":"in","start":933040,"end":933440,"confidence":0.7763672,"speaker":"A"},{"text":"Heart","start":933680,"end":934000,"confidence":0.66796875,"speaker":"A"},{"text":"Twitch","start":934000,"end":934400,"confidence":0.9975586,"speaker":"A"},{"text":"on","start":934400,"end":934560,"confidence":1,"speaker":"A"},{"text":"the","start":934560,"end":934680,"confidence":1,"speaker":"A"},{"text":"website.","start":934680,"end":934960,"confidence":0.9995117,"speaker":"A"},{"text":"And","start":935840,"end":936120,"confidence":0.99902344,"speaker":"A"},{"text":"then","start":936120,"end":936280,"confidence":0.9995117,"speaker":"A"},{"text":"there's","start":936280,"end":936520,"confidence":0.8927409,"speaker":"A"},{"text":"a","start":936520,"end":936640,"confidence":0.9995117,"speaker":"A"},{"text":"little,","start":936640,"end":936840,"confidence":1,"speaker":"A"},{"text":"there's","start":936840,"end":937200,"confidence":0.9996745,"speaker":"A"},{"text":"a","start":937200,"end":937360,"confidence":0.9995117,"speaker":"A"},{"text":"site,","start":937360,"end":937640,"confidence":0.9995117,"speaker":"A"},{"text":"there's","start":937640,"end":937960,"confidence":0.99886066,"speaker":"A"},{"text":"a","start":937960,"end":938160,"confidence":0.9995117,"speaker":"A"},{"text":"part","start":938160,"end":938360,"confidence":1,"speaker":"A"},{"text":"of","start":938360,"end":938480,"confidence":1,"speaker":"A"},{"text":"the","start":938480,"end":938560,"confidence":1,"speaker":"A"},{"text":"site","start":938560,"end":938720,"confidence":1,"speaker":"A"},{"text":"where","start":938720,"end":938920,"confidence":1,"speaker":"A"},{"text":"you","start":938920,"end":939040,"confidence":1,"speaker":"A"},{"text":"can","start":939040,"end":939280,"confidence":1,"speaker":"A"},{"text":"sign","start":939840,"end":940120,"confidence":1,"speaker":"A"},{"text":"into","start":940120,"end":940360,"confidence":0.8144531,"speaker":"A"},{"text":"CloudKit","start":940360,"end":941120,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":942180,"end":942300,"confidence":0.94628906,"speaker":"A"},{"text":"then","start":942300,"end":942500,"confidence":0.99902344,"speaker":"A"},{"text":"from","start":942500,"end":942740,"confidence":1,"speaker":"A"},{"text":"there","start":942740,"end":943060,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":944180,"end":944540,"confidence":0.9526367,"speaker":"A"},{"text":"can,","start":944540,"end":944900,"confidence":1,"speaker":"A"},{"text":"because,","start":945860,"end":946260,"confidence":0.8623047,"speaker":"A"},{"text":"because","start":946260,"end":946540,"confidence":0.99853516,"speaker":"A"},{"text":"of","start":946540,"end":946700,"confidence":0.9897461,"speaker":"A"},{"text":"the","start":946700,"end":946820,"confidence":0.9980469,"speaker":"A"},{"text":"CloudKit","start":946820,"end":947340,"confidence":0.99438477,"speaker":"A"},{"text":"JavaScript","start":947340,"end":947980,"confidence":0.9984538,"speaker":"A"},{"text":"library,","start":947980,"end":948380,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":948380,"end":948540,"confidence":0.95751953,"speaker":"A"},{"text":"can","start":948540,"end":948660,"confidence":0.99902344,"speaker":"A"},{"text":"then","start":948660,"end":948820,"confidence":0.99853516,"speaker":"A"},{"text":"I","start":948820,"end":948980,"confidence":0.9951172,"speaker":"A"},{"text":"can","start":948980,"end":949100,"confidence":0.9975586,"speaker":"A"},{"text":"then","start":949100,"end":949300,"confidence":0.9951172,"speaker":"A"},{"text":"pull","start":949300,"end":949620,"confidence":0.99975586,"speaker":"A"},{"text":"the","start":949620,"end":949940,"confidence":0.9140625,"speaker":"A"},{"text":"all","start":952260,"end":952580,"confidence":0.99609375,"speaker":"A"},{"text":"the","start":952580,"end":952780,"confidence":0.99902344,"speaker":"A"},{"text":"devices","start":952780,"end":953220,"confidence":0.9992676,"speaker":"A"},{"text":"because","start":953220,"end":953540,"confidence":0.99902344,"speaker":"A"},{"text":"when","start":953540,"end":953740,"confidence":1,"speaker":"A"},{"text":"you","start":953740,"end":953900,"confidence":0.9995117,"speaker":"A"},{"text":"first","start":953900,"end":954100,"confidence":1,"speaker":"A"},{"text":"launch","start":954100,"end":954340,"confidence":1,"speaker":"A"},{"text":"the","start":954340,"end":954540,"confidence":0.9746094,"speaker":"A"},{"text":"app","start":954540,"end":954700,"confidence":0.9995117,"speaker":"A"},{"text":"on","start":954700,"end":954820,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":954820,"end":954900,"confidence":0.9995117,"speaker":"A"},{"text":"Watch,","start":954900,"end":955100,"confidence":0.9897461,"speaker":"A"},{"text":"it","start":955100,"end":955340,"confidence":0.93408203,"speaker":"A"},{"text":"adds","start":955340,"end":955580,"confidence":0.9987793,"speaker":"A"},{"text":"your","start":955580,"end":955740,"confidence":0.9980469,"speaker":"A"},{"text":"watch","start":955740,"end":956020,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":956340,"end":956620,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":956620,"end":956740,"confidence":0.9995117,"speaker":"A"},{"text":"CloudKit","start":956740,"end":957300,"confidence":0.99609375,"speaker":"A"},{"text":"database.","start":957300,"end":957940,"confidence":0.9998372,"speaker":"A"},{"text":"And","start":958260,"end":958540,"confidence":0.9921875,"speaker":"A"},{"text":"then","start":958540,"end":958660,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":958660,"end":958780,"confidence":0.99902344,"speaker":"A"},{"text":"could","start":958780,"end":958940,"confidence":0.66503906,"speaker":"A"},{"text":"pull","start":958940,"end":959140,"confidence":1,"speaker":"A"},{"text":"that","start":959140,"end":959300,"confidence":0.9975586,"speaker":"A"},{"text":"in","start":959300,"end":959540,"confidence":0.9980469,"speaker":"A"},{"text":"and","start":959540,"end":959740,"confidence":0.9995117,"speaker":"A"},{"text":"then","start":959740,"end":959900,"confidence":0.9970703,"speaker":"A"},{"text":"add","start":959900,"end":960060,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":960060,"end":960220,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":960220,"end":960380,"confidence":0.9995117,"speaker":"A"},{"text":"my","start":960380,"end":960540,"confidence":0.9995117,"speaker":"A"},{"text":"postgres","start":960540,"end":961140,"confidence":0.98583984,"speaker":"A"},{"text":"database.","start":961140,"end":961700,"confidence":1,"speaker":"A"},{"text":"So","start":961700,"end":961980,"confidence":0.99658203,"speaker":"A"},{"text":"then","start":961980,"end":962260,"confidence":0.9970703,"speaker":"A"},{"text":"there","start":962260,"end":962540,"confidence":1,"speaker":"A"},{"text":"is","start":962540,"end":962740,"confidence":0.9995117,"speaker":"A"},{"text":"no","start":962740,"end":962940,"confidence":0.9995117,"speaker":"A"},{"text":"need","start":962940,"end":963140,"confidence":1,"speaker":"A"},{"text":"for","start":963140,"end":963380,"confidence":0.9995117,"speaker":"A"},{"text":"authentication","start":963380,"end":964180,"confidence":0.9998779,"speaker":"A"},{"text":"because","start":964740,"end":965140,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":965220,"end":965500,"confidence":0.9980469,"speaker":"A"},{"text":"already","start":965500,"end":965700,"confidence":1,"speaker":"A"},{"text":"have","start":965700,"end":965900,"confidence":0.99853516,"speaker":"A"},{"text":"the","start":965900,"end":966060,"confidence":0.9995117,"speaker":"A"},{"text":"CloudKit,","start":966060,"end":966740,"confidence":0.99975586,"speaker":"A"},{"text":"the","start":967720,"end":967880,"confidence":0.9663086,"speaker":"A"},{"text":"device","start":967880,"end":968280,"confidence":0.9992676,"speaker":"A"},{"text":"added","start":968280,"end":968600,"confidence":0.9995117,"speaker":"A"},{"text":"in","start":969000,"end":969280,"confidence":0.9995117,"speaker":"A"},{"text":"my","start":969280,"end":969480,"confidence":0.9926758,"speaker":"A"},{"text":"postgres","start":969480,"end":970000,"confidence":0.89941406,"speaker":"A"},{"text":"database.","start":970000,"end":970400,"confidence":0.9998372,"speaker":"A"},{"text":"So","start":970400,"end":970520,"confidence":0.8930664,"speaker":"A"},{"text":"it's","start":970520,"end":970720,"confidence":0.87093097,"speaker":"A"},{"text":"kind","start":970720,"end":970840,"confidence":0.93603516,"speaker":"A"},{"text":"of","start":970840,"end":970960,"confidence":0.859375,"speaker":"A"},{"text":"like","start":970960,"end":971120,"confidence":0.9736328,"speaker":"A"},{"text":"knows,","start":971120,"end":971440,"confidence":0.94555664,"speaker":"A"},{"text":"oh","start":971440,"end":971680,"confidence":0.97143555,"speaker":"A"},{"text":"yeah,","start":971680,"end":972040,"confidence":0.9983724,"speaker":"A"},{"text":"this","start":972200,"end":972480,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":972480,"end":972720,"confidence":0.99902344,"speaker":"A"},{"text":"Leo's","start":972720,"end":973280,"confidence":0.9902344,"speaker":"A"},{"text":"watch,","start":973280,"end":973560,"confidence":0.99853516,"speaker":"A"},{"text":"he","start":974040,"end":974320,"confidence":0.99902344,"speaker":"A"},{"text":"doesn't","start":974320,"end":974520,"confidence":0.9996745,"speaker":"A"},{"text":"need","start":974520,"end":974640,"confidence":0.99902344,"speaker":"A"},{"text":"to","start":974640,"end":974840,"confidence":0.9863281,"speaker":"A"},{"text":"authenticate.","start":974840,"end":975520,"confidence":0.9996338,"speaker":"A"},{"text":"And","start":975520,"end":975760,"confidence":0.9116211,"speaker":"A"},{"text":"that","start":975760,"end":975920,"confidence":0.99365234,"speaker":"A"},{"text":"way","start":975920,"end":976120,"confidence":0.99853516,"speaker":"A"},{"text":"we","start":976120,"end":976320,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":976320,"end":976520,"confidence":0.9995117,"speaker":"A"},{"text":"link","start":976520,"end":976800,"confidence":0.99975586,"speaker":"A"},{"text":"devices","start":976800,"end":977240,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":977240,"end":977520,"confidence":0.9614258,"speaker":"A"},{"text":"accounts","start":977520,"end":978200,"confidence":0.9980469,"speaker":"A"},{"text":"without","start":978280,"end":978680,"confidence":0.9995117,"speaker":"A"},{"text":"having","start":978680,"end":978960,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":978960,"end":979120,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":979120,"end":979280,"confidence":0.9995117,"speaker":"A"},{"text":"any","start":979280,"end":979440,"confidence":0.9995117,"speaker":"A"},{"text":"sort","start":979440,"end":979640,"confidence":0.99625653,"speaker":"A"},{"text":"of","start":979640,"end":979760,"confidence":0.9951172,"speaker":"A"},{"text":"login","start":979760,"end":980200,"confidence":0.984375,"speaker":"A"},{"text":"process.","start":980200,"end":980520,"confidence":0.9995117,"speaker":"A"},{"text":"And","start":981080,"end":981360,"confidence":0.9008789,"speaker":"A"},{"text":"so","start":981360,"end":981600,"confidence":0.59228516,"speaker":"A"},{"text":"this","start":981600,"end":981840,"confidence":0.9995117,"speaker":"A"},{"text":"was","start":981840,"end":982000,"confidence":0.9951172,"speaker":"A"},{"text":"my","start":982000,"end":982200,"confidence":0.99902344,"speaker":"A"},{"text":"use","start":982200,"end":982440,"confidence":0.9916992,"speaker":"A"},{"text":"case","start":982440,"end":982760,"confidence":0.9995117,"speaker":"A"},{"text":"for","start":982919,"end":983320,"confidence":0.9995117,"speaker":"A"},{"text":"doing","start":983800,"end":984200,"confidence":0.99902344,"speaker":"A"},{"text":"server","start":985160,"end":985680,"confidence":0.71899414,"speaker":"A"},{"text":"side.","start":985680,"end":985960,"confidence":0.9086914,"speaker":"A"},{"text":"Essentially","start":986040,"end":986680,"confidence":0.9888916,"speaker":"A"},{"text":"CloudKit","start":987000,"end":987720,"confidence":0.87207,"speaker":"A"},{"text":"was","start":987720,"end":988000,"confidence":0.98583984,"speaker":"A"},{"text":"I","start":988000,"end":988240,"confidence":0.99902344,"speaker":"A"},{"text":"could","start":988240,"end":988400,"confidence":0.99365234,"speaker":"A"},{"text":"call","start":988400,"end":988600,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":988600,"end":988800,"confidence":0.99853516,"speaker":"A"},{"text":"CloudKit","start":988800,"end":989360,"confidence":0.9609375,"speaker":"A"},{"text":"web","start":989360,"end":989560,"confidence":0.9902344,"speaker":"A"},{"text":"server","start":989560,"end":990040,"confidence":0.99902344,"speaker":"A"},{"text":"based","start":993410,"end":993610,"confidence":0.98876953,"speaker":"A"},{"text":"on","start":993610,"end":993850,"confidence":1,"speaker":"A"},{"text":"that","start":993850,"end":994050,"confidence":0.9995117,"speaker":"A"},{"text":"person's","start":994050,"end":994690,"confidence":0.99690753,"speaker":"A"},{"text":"web","start":995570,"end":995970,"confidence":0.9992676,"speaker":"A"},{"text":"authentication","start":995970,"end":996610,"confidence":0.9998779,"speaker":"A"},{"text":"token,","start":996610,"end":996970,"confidence":0.9998372,"speaker":"A"},{"text":"which","start":996970,"end":997130,"confidence":0.9995117,"speaker":"A"},{"text":"we'll","start":997130,"end":997330,"confidence":0.9316406,"speaker":"A"},{"text":"get","start":997330,"end":997490,"confidence":0.99902344,"speaker":"A"},{"text":"all","start":997490,"end":997730,"confidence":0.74365234,"speaker":"A"},{"text":"into","start":997730,"end":998010,"confidence":0.99072266,"speaker":"A"},{"text":"later.","start":998010,"end":998370,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":998530,"end":998850,"confidence":0.5698242,"speaker":"A"},{"text":"then","start":998850,"end":999050,"confidence":0.91748047,"speaker":"A"},{"text":"pull","start":999050,"end":999250,"confidence":0.99975586,"speaker":"A"},{"text":"that","start":999250,"end":999410,"confidence":0.9980469,"speaker":"A"},{"text":"information","start":999410,"end":999730,"confidence":0.9995117,"speaker":"A"},{"text":"in.","start":999970,"end":1000370,"confidence":0.9824219,"speaker":"A"},{"text":"So.","start":1002050,"end":1002450,"confidence":0.8515625,"speaker":"A"},{"text":"Cool.","start":1007250,"end":1007730,"confidence":0.9333496,"speaker":"A"},{"text":"Just","start":1010770,"end":1011050,"confidence":0.99121094,"speaker":"A"},{"text":"checking","start":1011050,"end":1011370,"confidence":0.9980469,"speaker":"A"},{"text":"if","start":1011370,"end":1011530,"confidence":0.99853516,"speaker":"A"},{"text":"anybody's","start":1011530,"end":1012050,"confidence":0.94539386,"speaker":"A"},{"text":"having","start":1012050,"end":1012210,"confidence":0.9995117,"speaker":"A"},{"text":"issues.","start":1012210,"end":1012530,"confidence":0.99853516,"speaker":"A"},{"text":"It","start":1012530,"end":1012770,"confidence":0.5439453,"speaker":"A"},{"text":"doesn't","start":1012770,"end":1013050,"confidence":0.9983724,"speaker":"A"},{"text":"look","start":1013050,"end":1013210,"confidence":0.99902344,"speaker":"A"},{"text":"like","start":1013210,"end":1013370,"confidence":0.99853516,"speaker":"A"},{"text":"it.","start":1013370,"end":1013650,"confidence":0.9975586,"speaker":"A"},{"text":"So","start":1013650,"end":1014050,"confidence":0.8925781,"speaker":"A"},{"text":"that's","start":1014690,"end":1015050,"confidence":0.98014325,"speaker":"A"},{"text":"good","start":1015050,"end":1015210,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":1015210,"end":1015370,"confidence":0.9980469,"speaker":"A"},{"text":"know.","start":1015370,"end":1015650,"confidence":0.9975586,"speaker":"A"},{"text":"So","start":1017170,"end":1017410,"confidence":0.9707031,"speaker":"A"},{"text":"that","start":1017410,"end":1017530,"confidence":0.98779297,"speaker":"A"},{"text":"was","start":1017530,"end":1017690,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1017690,"end":1017850,"confidence":0.9995117,"speaker":"A"},{"text":"private","start":1017850,"end":1018090,"confidence":0.9995117,"speaker":"A"},{"text":"database","start":1018090,"end":1018690,"confidence":0.9998372,"speaker":"A"},{"text":"piece,","start":1018690,"end":1019090,"confidence":0.99576825,"speaker":"A"},{"text":"but","start":1019950,"end":1020070,"confidence":0.97558594,"speaker":"A"},{"text":"I","start":1020070,"end":1020230,"confidence":0.99853516,"speaker":"A"},{"text":"actually","start":1020230,"end":1020470,"confidence":0.9970703,"speaker":"A"},{"text":"think","start":1020470,"end":1020790,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":1020790,"end":1021030,"confidence":0.9921875,"speaker":"A"},{"text":"much","start":1021030,"end":1021230,"confidence":0.9946289,"speaker":"A"},{"text":"more","start":1021230,"end":1021470,"confidence":1,"speaker":"A"},{"text":"useful","start":1021470,"end":1021910,"confidence":0.99975586,"speaker":"A"},{"text":"case","start":1021910,"end":1022270,"confidence":0.9995117,"speaker":"A"},{"text":"would","start":1022670,"end":1022990,"confidence":1,"speaker":"A"},{"text":"be","start":1022990,"end":1023270,"confidence":1,"speaker":"A"},{"text":"the","start":1023270,"end":1023510,"confidence":0.9995117,"speaker":"A"},{"text":"public","start":1023510,"end":1023750,"confidence":0.9995117,"speaker":"A"},{"text":"database","start":1023750,"end":1024430,"confidence":0.99934894,"speaker":"A"},{"text":"because","start":1024990,"end":1025390,"confidence":0.9946289,"speaker":"A"},{"text":"the","start":1026830,"end":1027150,"confidence":0.99853516,"speaker":"A"},{"text":"idea","start":1027150,"end":1027550,"confidence":0.9758301,"speaker":"A"},{"text":"would","start":1027550,"end":1027750,"confidence":0.99658203,"speaker":"A"},{"text":"be","start":1027750,"end":1027950,"confidence":0.99902344,"speaker":"A"},{"text":"is","start":1027950,"end":1028150,"confidence":0.93359375,"speaker":"A"},{"text":"that","start":1028150,"end":1028310,"confidence":0.99853516,"speaker":"A"},{"text":"you'd","start":1028310,"end":1028630,"confidence":0.96516925,"speaker":"A"},{"text":"have","start":1028630,"end":1028910,"confidence":1,"speaker":"A"},{"text":"some","start":1029710,"end":1029990,"confidence":0.9995117,"speaker":"A"},{"text":"sort","start":1029990,"end":1030230,"confidence":0.99609375,"speaker":"A"},{"text":"of","start":1030230,"end":1030390,"confidence":0.9975586,"speaker":"A"},{"text":"app","start":1030390,"end":1030670,"confidence":0.99902344,"speaker":"A"},{"text":"that","start":1030670,"end":1030950,"confidence":0.9995117,"speaker":"A"},{"text":"would","start":1030950,"end":1031150,"confidence":0.9970703,"speaker":"A"},{"text":"use","start":1031150,"end":1031470,"confidence":0.99902344,"speaker":"A"},{"text":"central","start":1031550,"end":1031950,"confidence":0.9995117,"speaker":"A"},{"text":"repository","start":1031950,"end":1032790,"confidence":0.99694824,"speaker":"A"},{"text":"of","start":1032790,"end":1032990,"confidence":0.99853516,"speaker":"A"},{"text":"data","start":1032990,"end":1033310,"confidence":0.99902344,"speaker":"A"},{"text":"that","start":1035470,"end":1035790,"confidence":0.99902344,"speaker":"A"},{"text":"it","start":1035790,"end":1035950,"confidence":0.63134766,"speaker":"A"},{"text":"can","start":1035950,"end":1036070,"confidence":0.9980469,"speaker":"A"},{"text":"pull","start":1036070,"end":1036390,"confidence":0.99975586,"speaker":"A"},{"text":"information","start":1036390,"end":1036750,"confidence":1,"speaker":"A"},{"text":"from.","start":1036990,"end":1037390,"confidence":0.9995117,"speaker":"A"},{"text":"And","start":1037790,"end":1038110,"confidence":0.91259766,"speaker":"A"},{"text":"I'm","start":1038110,"end":1038390,"confidence":0.99104816,"speaker":"A"},{"text":"looking","start":1038390,"end":1038550,"confidence":0.9902344,"speaker":"A"},{"text":"at","start":1038550,"end":1038710,"confidence":0.99902344,"speaker":"A"},{"text":"both","start":1038710,"end":1038870,"confidence":1,"speaker":"A"},{"text":"of","start":1038870,"end":1039030,"confidence":0.9995117,"speaker":"A"},{"text":"these","start":1039030,"end":1039310,"confidence":0.9995117,"speaker":"A"},{"text":"with","start":1039310,"end":1039710,"confidence":0.99902344,"speaker":"A"},{"text":"Bushel","start":1039950,"end":1040590,"confidence":0.90722656,"speaker":"A"},{"text":"and","start":1040590,"end":1040790,"confidence":0.9975586,"speaker":"A"},{"text":"then","start":1040790,"end":1040950,"confidence":0.9584961,"speaker":"A"},{"text":"an","start":1040950,"end":1041190,"confidence":0.98291016,"speaker":"A"},{"text":"RSS","start":1041190,"end":1041670,"confidence":0.9987793,"speaker":"A"},{"text":"reader","start":1041670,"end":1042070,"confidence":0.9975586,"speaker":"A"},{"text":"I'm","start":1042070,"end":1042270,"confidence":0.93929034,"speaker":"A"},{"text":"building","start":1042270,"end":1042430,"confidence":0.9995117,"speaker":"A"},{"text":"called","start":1042430,"end":1042630,"confidence":0.9584961,"speaker":"A"},{"text":"Celestra","start":1042630,"end":1043310,"confidence":0.9358724,"speaker":"A"},{"text":"with","start":1044190,"end":1044510,"confidence":0.98535156,"speaker":"A"},{"text":"Bushel.","start":1044510,"end":1045150,"confidence":0.9350586,"speaker":"A"},{"text":"The.","start":1046199,"end":1046439,"confidence":0.84375,"speaker":"A"},{"text":"The","start":1046679,"end":1046959,"confidence":0.9980469,"speaker":"A"},{"text":"way","start":1046959,"end":1047119,"confidence":1,"speaker":"A"},{"text":"it's","start":1047119,"end":1047319,"confidence":0.9996745,"speaker":"A"},{"text":"built","start":1047319,"end":1047559,"confidence":0.8929036,"speaker":"A"},{"text":"right","start":1047559,"end":1047759,"confidence":0.9995117,"speaker":"A"},{"text":"now","start":1047759,"end":1047959,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1047959,"end":1048199,"confidence":0.9667969,"speaker":"A"},{"text":"I","start":1048199,"end":1048359,"confidence":0.99902344,"speaker":"A"},{"text":"have","start":1048359,"end":1048479,"confidence":0.9975586,"speaker":"A"},{"text":"this","start":1048479,"end":1048679,"confidence":0.9995117,"speaker":"A"},{"text":"concept","start":1048679,"end":1049079,"confidence":0.9786784,"speaker":"A"},{"text":"of","start":1049079,"end":1049319,"confidence":0.9995117,"speaker":"A"},{"text":"hubs","start":1049319,"end":1049719,"confidence":0.9838867,"speaker":"A"},{"text":"and","start":1050679,"end":1051079,"confidence":0.96240234,"speaker":"A"},{"text":"you","start":1051159,"end":1051439,"confidence":1,"speaker":"A"},{"text":"can","start":1051439,"end":1051599,"confidence":0.99902344,"speaker":"A"},{"text":"plug","start":1051599,"end":1051799,"confidence":1,"speaker":"A"},{"text":"in","start":1051799,"end":1051919,"confidence":0.9951172,"speaker":"A"},{"text":"a","start":1051919,"end":1052079,"confidence":0.99072266,"speaker":"A"},{"text":"URL","start":1052079,"end":1052639,"confidence":0.9992676,"speaker":"A"},{"text":"and","start":1052639,"end":1052839,"confidence":0.9628906,"speaker":"A"},{"text":"that","start":1052839,"end":1052959,"confidence":0.99902344,"speaker":"A"},{"text":"URL","start":1052959,"end":1053439,"confidence":0.9367676,"speaker":"A"},{"text":"would","start":1053439,"end":1053719,"confidence":0.99658203,"speaker":"A"},{"text":"provide","start":1053719,"end":1054039,"confidence":1,"speaker":"A"},{"text":"or","start":1054039,"end":1054399,"confidence":0.99902344,"speaker":"A"},{"text":"some","start":1054399,"end":1054679,"confidence":0.97216797,"speaker":"A"},{"text":"sort","start":1054679,"end":1054919,"confidence":0.9941406,"speaker":"A"},{"text":"of","start":1054919,"end":1055079,"confidence":0.99902344,"speaker":"A"},{"text":"service.","start":1055079,"end":1055399,"confidence":0.99902344,"speaker":"A"},{"text":"That","start":1055959,"end":1056359,"confidence":0.9980469,"speaker":"A"},{"text":"service","start":1056599,"end":1056999,"confidence":0.9980469,"speaker":"A"},{"text":"would","start":1056999,"end":1057279,"confidence":0.9941406,"speaker":"A"},{"text":"then","start":1057279,"end":1057479,"confidence":0.9916992,"speaker":"A"},{"text":"provide","start":1057479,"end":1057799,"confidence":1,"speaker":"A"},{"text":"the","start":1058359,"end":1058639,"confidence":0.9995117,"speaker":"A"},{"text":"Entire","start":1058639,"end":1058999,"confidence":0.99975586,"speaker":"A"},{"text":"List","start":1058999,"end":1059279,"confidence":0.9995117,"speaker":"A"},{"text":"of","start":1059279,"end":1059639,"confidence":0.99853516,"speaker":"A"},{"text":"macOS","start":1059719,"end":1060439,"confidence":0.76636,"speaker":"A"},{"text":"restore","start":1060439,"end":1060839,"confidence":0.98168945,"speaker":"A"},{"text":"images","start":1060839,"end":1061278,"confidence":0.9987793,"speaker":"A"},{"text":"that","start":1061278,"end":1061479,"confidence":0.9995117,"speaker":"A"},{"text":"are","start":1061479,"end":1061638,"confidence":0.9995117,"speaker":"A"},{"text":"available.","start":1061638,"end":1061959,"confidence":0.9995117,"speaker":"A"},{"text":"But","start":1064119,"end":1064399,"confidence":0.9941406,"speaker":"A"},{"text":"then","start":1064399,"end":1064559,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":1064559,"end":1064719,"confidence":0.9995117,"speaker":"A"},{"text":"realized","start":1064719,"end":1065079,"confidence":0.9863281,"speaker":"A"},{"text":"like","start":1065079,"end":1065319,"confidence":0.90283203,"speaker":"A"},{"text":"really","start":1065319,"end":1065559,"confidence":0.9970703,"speaker":"A"},{"text":"there's","start":1065559,"end":1065839,"confidence":0.9889323,"speaker":"A"},{"text":"only","start":1065839,"end":1065999,"confidence":0.9995117,"speaker":"A"},{"text":"one","start":1065999,"end":1066199,"confidence":0.9995117,"speaker":"A"},{"text":"location","start":1066199,"end":1066679,"confidence":1,"speaker":"A"},{"text":"for","start":1066679,"end":1066919,"confidence":0.9995117,"speaker":"A"},{"text":"those","start":1066919,"end":1067239,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":1067319,"end":1067719,"confidence":0.98876953,"speaker":"A"},{"text":"each","start":1067719,"end":1068079,"confidence":0.9824219,"speaker":"A"},{"text":"service","start":1068079,"end":1068399,"confidence":0.9951172,"speaker":"A"},{"text":"is","start":1068399,"end":1068639,"confidence":0.99853516,"speaker":"A"},{"text":"just","start":1068639,"end":1068799,"confidence":0.99609375,"speaker":"A"},{"text":"going","start":1068799,"end":1068919,"confidence":0.8798828,"speaker":"A"},{"text":"to","start":1068919,"end":1068999,"confidence":0.99902344,"speaker":"A"},{"text":"be","start":1068999,"end":1069079,"confidence":0.99853516,"speaker":"A"},{"text":"using","start":1069079,"end":1069319,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1069319,"end":1069559,"confidence":0.9995117,"speaker":"A"},{"text":"same","start":1069559,"end":1069719,"confidence":0.9995117,"speaker":"A"},{"text":"URLs","start":1069719,"end":1070359,"confidence":0.92261,"speaker":"A"},{"text":"anyway.","start":1070359,"end":1070839,"confidence":0.99731445,"speaker":"A"},{"text":"So","start":1071970,"end":1072050,"confidence":0.92822266,"speaker":"A"},{"text":"if","start":1072050,"end":1072170,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":1072170,"end":1072330,"confidence":0.9995117,"speaker":"A"},{"text":"had","start":1072330,"end":1072570,"confidence":0.9975586,"speaker":"A"},{"text":"one","start":1072570,"end":1072850,"confidence":0.9995117,"speaker":"A"},{"text":"central","start":1072850,"end":1073170,"confidence":1,"speaker":"A"},{"text":"repository","start":1073250,"end":1074050,"confidence":0.9127197,"speaker":"A"},{"text":"or","start":1074050,"end":1074250,"confidence":0.99853516,"speaker":"A"},{"text":"one","start":1074250,"end":1074450,"confidence":0.9970703,"speaker":"A"},{"text":"central","start":1074450,"end":1074770,"confidence":1,"speaker":"A"},{"text":"database","start":1074770,"end":1075490,"confidence":1,"speaker":"A"},{"text":"because","start":1076850,"end":1077170,"confidence":0.99365234,"speaker":"A"},{"text":"they","start":1077170,"end":1077370,"confidence":0.9975586,"speaker":"A"},{"text":"all","start":1077370,"end":1077530,"confidence":0.99902344,"speaker":"A"},{"text":"pull","start":1077530,"end":1077770,"confidence":0.99975586,"speaker":"A"},{"text":"from","start":1077770,"end":1077970,"confidence":0.9995117,"speaker":"A"},{"text":"Apple,","start":1077970,"end":1078450,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":1078690,"end":1079010,"confidence":0.99853516,"speaker":"A"},{"text":"can","start":1079010,"end":1079210,"confidence":0.99365234,"speaker":"A"},{"text":"then","start":1079210,"end":1079490,"confidence":0.98828125,"speaker":"A"},{"text":"parse","start":1079650,"end":1080250,"confidence":0.8129883,"speaker":"A"},{"text":"the","start":1080250,"end":1080490,"confidence":0.9995117,"speaker":"A"},{"text":"web","start":1080490,"end":1080850,"confidence":0.99975586,"speaker":"A"},{"text":"for","start":1081090,"end":1081410,"confidence":0.59033203,"speaker":"A"},{"text":"those","start":1081410,"end":1081690,"confidence":0.99902344,"speaker":"A"},{"text":"restore","start":1081690,"end":1082210,"confidence":0.98779297,"speaker":"A"},{"text":"images","start":1082210,"end":1082690,"confidence":0.99780273,"speaker":"A"},{"text":"and","start":1082690,"end":1082930,"confidence":0.99072266,"speaker":"A"},{"text":"then","start":1082930,"end":1083090,"confidence":0.99658203,"speaker":"A"},{"text":"store","start":1083090,"end":1083370,"confidence":0.9736328,"speaker":"A"},{"text":"them","start":1083370,"end":1083530,"confidence":0.9238281,"speaker":"A"},{"text":"in","start":1083530,"end":1083650,"confidence":0.98779297,"speaker":"A"},{"text":"CloudKit","start":1083650,"end":1084210,"confidence":0.94812,"speaker":"A"},{"text":"and","start":1084210,"end":1084370,"confidence":0.8354492,"speaker":"A"},{"text":"then","start":1084370,"end":1084530,"confidence":0.9873047,"speaker":"A"},{"text":"that","start":1084530,"end":1084770,"confidence":0.9980469,"speaker":"A"},{"text":"way","start":1084770,"end":1085090,"confidence":0.99853516,"speaker":"A"},{"text":"Bushel","start":1085410,"end":1086010,"confidence":0.8808594,"speaker":"A"},{"text":"can","start":1086010,"end":1086170,"confidence":0.9501953,"speaker":"A"},{"text":"then","start":1086170,"end":1086450,"confidence":0.95751953,"speaker":"A"},{"text":"pull","start":1087570,"end":1087930,"confidence":0.9995117,"speaker":"A"},{"text":"those","start":1087930,"end":1088210,"confidence":0.9975586,"speaker":"A"},{"text":"from","start":1088210,"end":1088530,"confidence":1,"speaker":"A"},{"text":"one","start":1088530,"end":1088770,"confidence":0.9995117,"speaker":"A"},{"text":"single","start":1088770,"end":1089090,"confidence":1,"speaker":"A"},{"text":"repository.","start":1089090,"end":1089970,"confidence":0.9998779,"speaker":"A"},{"text":"And","start":1090210,"end":1090490,"confidence":0.86572266,"speaker":"A"},{"text":"all","start":1090490,"end":1090650,"confidence":0.99853516,"speaker":"A"},{"text":"I","start":1090650,"end":1090770,"confidence":0.98291016,"speaker":"A"},{"text":"would","start":1090770,"end":1090930,"confidence":0.98583984,"speaker":"A"},{"text":"have","start":1090930,"end":1091090,"confidence":1,"speaker":"A"},{"text":"to","start":1091090,"end":1091210,"confidence":0.99902344,"speaker":"A"},{"text":"do,","start":1091210,"end":1091450,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":1091450,"end":1091770,"confidence":0.64404297,"speaker":"A"},{"text":"what","start":1091770,"end":1092010,"confidence":0.9995117,"speaker":"A"},{"text":"I'm","start":1092010,"end":1092210,"confidence":0.99934894,"speaker":"A"},{"text":"doing","start":1092210,"end":1092410,"confidence":1,"speaker":"A"},{"text":"now","start":1092410,"end":1092690,"confidence":0.99853516,"speaker":"A"},{"text":"is","start":1092690,"end":1092930,"confidence":0.99902344,"speaker":"A"},{"text":"running","start":1092930,"end":1093370,"confidence":0.99121094,"speaker":"A"},{"text":"basically","start":1093370,"end":1093850,"confidence":0.998291,"speaker":"A"},{"text":"a","start":1093850,"end":1094090,"confidence":0.9951172,"speaker":"A"},{"text":"GitHub","start":1094090,"end":1094490,"confidence":0.9991862,"speaker":"A"},{"text":"action","start":1094490,"end":1094690,"confidence":1,"speaker":"A"},{"text":"or","start":1094690,"end":1094850,"confidence":0.98828125,"speaker":"A"},{"text":"you","start":1094850,"end":1094930,"confidence":0.91503906,"speaker":"A"},{"text":"could","start":1094930,"end":1095050,"confidence":0.8876953,"speaker":"A"},{"text":"do","start":1095050,"end":1095210,"confidence":0.99853516,"speaker":"A"},{"text":"like","start":1095210,"end":1095370,"confidence":0.8642578,"speaker":"A"},{"text":"a","start":1095370,"end":1095490,"confidence":0.9868164,"speaker":"A"},{"text":"Cron","start":1095490,"end":1095770,"confidence":0.97875977,"speaker":"A"},{"text":"job","start":1095770,"end":1096050,"confidence":1,"speaker":"A"},{"text":"where","start":1096450,"end":1096850,"confidence":0.9995117,"speaker":"A"},{"text":"it","start":1096850,"end":1097130,"confidence":0.99560547,"speaker":"A"},{"text":"would","start":1097130,"end":1097290,"confidence":1,"speaker":"A"},{"text":"run","start":1097290,"end":1097450,"confidence":0.9995117,"speaker":"A"},{"text":"on","start":1097450,"end":1097610,"confidence":0.9824219,"speaker":"A"},{"text":"Ubuntu,","start":1097610,"end":1098090,"confidence":0.8498047,"speaker":"A"},{"text":"wouldn't","start":1098090,"end":1098370,"confidence":0.9715576,"speaker":"A"},{"text":"even","start":1098370,"end":1098490,"confidence":0.99853516,"speaker":"A"},{"text":"need","start":1098490,"end":1098650,"confidence":0.99853516,"speaker":"A"},{"text":"a","start":1098650,"end":1098810,"confidence":0.99853516,"speaker":"A"},{"text":"Mac","start":1098810,"end":1099090,"confidence":0.9992676,"speaker":"A"},{"text":"and","start":1099090,"end":1099290,"confidence":0.96240234,"speaker":"A"},{"text":"it","start":1099290,"end":1099450,"confidence":0.99853516,"speaker":"A"},{"text":"would","start":1099450,"end":1099730,"confidence":0.9995117,"speaker":"A"},{"text":"download","start":1099890,"end":1100490,"confidence":1,"speaker":"A"},{"text":"and","start":1100490,"end":1100730,"confidence":0.59228516,"speaker":"A"},{"text":"scrape","start":1100730,"end":1101130,"confidence":0.8902588,"speaker":"A"},{"text":"the","start":1101130,"end":1101290,"confidence":0.9995117,"speaker":"A"},{"text":"web","start":1101290,"end":1101530,"confidence":0.9995117,"speaker":"A"},{"text":"for","start":1101530,"end":1101770,"confidence":0.9970703,"speaker":"A"},{"text":"restore","start":1101770,"end":1102250,"confidence":0.9777832,"speaker":"A"},{"text":"images","start":1102250,"end":1102650,"confidence":0.99731445,"speaker":"A"},{"text":"and","start":1102650,"end":1103000,"confidence":0.52197266,"speaker":"A"},{"text":"storm","start":1103070,"end":1103350,"confidence":0.92749023,"speaker":"A"},{"text":"in","start":1103350,"end":1103470,"confidence":0.9951172,"speaker":"A"},{"text":"the","start":1103470,"end":1103590,"confidence":0.99902344,"speaker":"A"},{"text":"public","start":1103590,"end":1103790,"confidence":1,"speaker":"A"},{"text":"database.","start":1103790,"end":1104430,"confidence":0.99820966,"speaker":"A"},{"text":"It's","start":1106350,"end":1106710,"confidence":0.9967448,"speaker":"A"},{"text":"the","start":1106710,"end":1106830,"confidence":0.9995117,"speaker":"A"},{"text":"same","start":1106830,"end":1106950,"confidence":1,"speaker":"A"},{"text":"idea","start":1106950,"end":1107230,"confidence":0.99902344,"speaker":"A"},{"text":"with","start":1107230,"end":1107350,"confidence":0.98779297,"speaker":"A"},{"text":"Celestra.","start":1107350,"end":1107910,"confidence":0.9313151,"speaker":"A"},{"text":"It's","start":1107910,"end":1108110,"confidence":0.99283856,"speaker":"A"},{"text":"an","start":1108110,"end":1108190,"confidence":0.73876953,"speaker":"A"},{"text":"RSS","start":1108190,"end":1108630,"confidence":0.9946289,"speaker":"A"},{"text":"reader.","start":1108630,"end":1109110,"confidence":0.99902344,"speaker":"A"},{"text":"What","start":1109110,"end":1109270,"confidence":0.9995117,"speaker":"A"},{"text":"if","start":1109270,"end":1109430,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":1109430,"end":1109630,"confidence":0.9995117,"speaker":"A"},{"text":"took","start":1109630,"end":1109870,"confidence":0.99902344,"speaker":"A"},{"text":"those","start":1109870,"end":1110070,"confidence":0.9946289,"speaker":"A"},{"text":"RSS","start":1110070,"end":1110590,"confidence":0.98535156,"speaker":"A"},{"text":"RSS","start":1112750,"end":1113310,"confidence":0.94921875,"speaker":"A"},{"text":"files","start":1113310,"end":1113670,"confidence":0.95703125,"speaker":"A"},{"text":"in","start":1113670,"end":1113830,"confidence":0.99365234,"speaker":"A"},{"text":"the","start":1113830,"end":1113950,"confidence":1,"speaker":"A"},{"text":"web","start":1113950,"end":1114150,"confidence":0.99975586,"speaker":"A"},{"text":"and","start":1114150,"end":1114350,"confidence":0.8354492,"speaker":"A"},{"text":"just","start":1114350,"end":1114630,"confidence":0.99853516,"speaker":"A"},{"text":"scrape","start":1114630,"end":1115110,"confidence":0.8651123,"speaker":"A"},{"text":"them","start":1115110,"end":1115270,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":1115270,"end":1115430,"confidence":0.99902344,"speaker":"A"},{"text":"then","start":1115430,"end":1115630,"confidence":0.9970703,"speaker":"A"},{"text":"store","start":1115630,"end":1115950,"confidence":0.97753906,"speaker":"A"},{"text":"them","start":1115950,"end":1116070,"confidence":0.99902344,"speaker":"A"},{"text":"in","start":1116070,"end":1116190,"confidence":0.99902344,"speaker":"A"},{"text":"a","start":1116190,"end":1116270,"confidence":0.99902344,"speaker":"A"},{"text":"CloudKit","start":1116270,"end":1116830,"confidence":0.9890137,"speaker":"A"},{"text":"database","start":1116830,"end":1117470,"confidence":0.9996745,"speaker":"A"},{"text":"in","start":1118110,"end":1118430,"confidence":0.8745117,"speaker":"A"},{"text":"a","start":1118430,"end":1118590,"confidence":0.99902344,"speaker":"A"},{"text":"public","start":1118590,"end":1118750,"confidence":1,"speaker":"A"},{"text":"database","start":1118750,"end":1119390,"confidence":0.9998372,"speaker":"A"},{"text":"and","start":1119390,"end":1119550,"confidence":0.99316406,"speaker":"A"},{"text":"then","start":1119550,"end":1119710,"confidence":0.9741211,"speaker":"A"},{"text":"that","start":1119710,"end":1119910,"confidence":0.9995117,"speaker":"A"},{"text":"way","start":1119910,"end":1120110,"confidence":1,"speaker":"A"},{"text":"people","start":1120110,"end":1120390,"confidence":1,"speaker":"A"},{"text":"can","start":1120390,"end":1120750,"confidence":0.9995117,"speaker":"A"},{"text":"pull","start":1120750,"end":1121110,"confidence":1,"speaker":"A"},{"text":"that","start":1121110,"end":1121310,"confidence":0.99853516,"speaker":"A"},{"text":"up","start":1121310,"end":1121630,"confidence":0.99853516,"speaker":"A"},{"text":"all","start":1121630,"end":1121910,"confidence":0.9980469,"speaker":"A"},{"text":"through","start":1121910,"end":1122110,"confidence":1,"speaker":"A"},{"text":"CloudKit.","start":1122110,"end":1122910,"confidence":0.845459,"speaker":"A"},{"text":"So","start":1125150,"end":1125550,"confidence":0.9873047,"speaker":"A"},{"text":"the","start":1125630,"end":1125910,"confidence":0.99902344,"speaker":"A"},{"text":"idea","start":1125910,"end":1126270,"confidence":1,"speaker":"A"},{"text":"today","start":1126270,"end":1126550,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1126550,"end":1126790,"confidence":0.9980469,"speaker":"A"},{"text":"we're","start":1126790,"end":1127030,"confidence":0.9991862,"speaker":"A"},{"text":"going","start":1127030,"end":1127150,"confidence":0.88671875,"speaker":"A"},{"text":"to","start":1127150,"end":1127230,"confidence":1,"speaker":"A"},{"text":"talk","start":1127230,"end":1127390,"confidence":0.9995117,"speaker":"A"},{"text":"about","start":1127390,"end":1127710,"confidence":0.9975586,"speaker":"A"},{"text":"how","start":1128030,"end":1128350,"confidence":0.99365234,"speaker":"A"},{"text":"to","start":1128350,"end":1128550,"confidence":0.9707031,"speaker":"A"},{"text":"set","start":1128550,"end":1128750,"confidence":0.99853516,"speaker":"A"},{"text":"something,","start":1128750,"end":1129070,"confidence":0.95947266,"speaker":"A"},{"text":"how","start":1129070,"end":1129430,"confidence":0.9814453,"speaker":"A"},{"text":"I","start":1129430,"end":1129710,"confidence":0.99560547,"speaker":"A"},{"text":"set","start":1129710,"end":1129990,"confidence":0.99658203,"speaker":"A"},{"text":"something","start":1129990,"end":1130310,"confidence":1,"speaker":"A"},{"text":"like","start":1130310,"end":1130550,"confidence":0.99902344,"speaker":"A"},{"text":"this","start":1130550,"end":1130750,"confidence":0.9995117,"speaker":"A"},{"text":"up","start":1130750,"end":1131070,"confidence":0.99560547,"speaker":"A"},{"text":"and","start":1131860,"end":1132100,"confidence":0.9321289,"speaker":"A"},{"text":"how","start":1132100,"end":1132380,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1132380,"end":1132540,"confidence":0.99902344,"speaker":"A"},{"text":"could","start":1132540,"end":1132740,"confidence":0.99560547,"speaker":"A"},{"text":"use","start":1132740,"end":1133060,"confidence":0.9277344,"speaker":"A"},{"text":"use","start":1133300,"end":1133580,"confidence":1,"speaker":"A"},{"text":"my","start":1133580,"end":1133780,"confidence":0.99121094,"speaker":"A"},{"text":"library","start":1133780,"end":1134260,"confidence":0.9998372,"speaker":"A"},{"text":"to","start":1134260,"end":1134460,"confidence":0.9975586,"speaker":"A"},{"text":"then","start":1134460,"end":1134620,"confidence":0.9980469,"speaker":"A"},{"text":"go","start":1134620,"end":1134780,"confidence":0.99902344,"speaker":"A"},{"text":"ahead","start":1134780,"end":1134980,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":1134980,"end":1135220,"confidence":0.53125,"speaker":"A"},{"text":"do","start":1135220,"end":1135420,"confidence":1,"speaker":"A"},{"text":"this","start":1135420,"end":1135620,"confidence":1,"speaker":"A"},{"text":"yourself","start":1135620,"end":1136060,"confidence":0.99975586,"speaker":"A"},{"text":"for","start":1136060,"end":1136340,"confidence":0.9995117,"speaker":"A"},{"text":"any","start":1136340,"end":1136660,"confidence":0.9995117,"speaker":"A"},{"text":"sort","start":1136660,"end":1136980,"confidence":0.9975586,"speaker":"A"},{"text":"of","start":1136980,"end":1137100,"confidence":0.9995117,"speaker":"A"},{"text":"work","start":1137100,"end":1137340,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":1137340,"end":1137580,"confidence":0.99853516,"speaker":"A"},{"text":"you're","start":1137580,"end":1137780,"confidence":0.99886066,"speaker":"A"},{"text":"going","start":1137780,"end":1137860,"confidence":0.7861328,"speaker":"A"},{"text":"to","start":1137860,"end":1137940,"confidence":0.99853516,"speaker":"A"},{"text":"do","start":1137940,"end":1138060,"confidence":0.99902344,"speaker":"A"},{"text":"that","start":1138060,"end":1138260,"confidence":0.9140625,"speaker":"A"},{"text":"where","start":1138260,"end":1138460,"confidence":0.9970703,"speaker":"A"},{"text":"you","start":1138460,"end":1138580,"confidence":1,"speaker":"A"},{"text":"want","start":1138580,"end":1138700,"confidence":0.9140625,"speaker":"A"},{"text":"to","start":1138700,"end":1138860,"confidence":0.9941406,"speaker":"A"},{"text":"use","start":1138860,"end":1139100,"confidence":0.99609375,"speaker":"A"},{"text":"either","start":1139100,"end":1139420,"confidence":0.99975586,"speaker":"A"},{"text":"a","start":1139420,"end":1139580,"confidence":0.9238281,"speaker":"A"},{"text":"public","start":1139580,"end":1139780,"confidence":1,"speaker":"A"},{"text":"or","start":1139780,"end":1140020,"confidence":1,"speaker":"A"},{"text":"private","start":1140020,"end":1140300,"confidence":1,"speaker":"A"},{"text":"database","start":1140300,"end":1140980,"confidence":0.9995117,"speaker":"A"},{"text":"in","start":1141220,"end":1141500,"confidence":0.7890625,"speaker":"A"},{"text":"CloudKit.","start":1141500,"end":1142180,"confidence":0.99560547,"speaker":"A"},{"text":"So","start":1143300,"end":1143540,"confidence":0.9873047,"speaker":"A"},{"text":"this","start":1143540,"end":1143660,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1143660,"end":1143820,"confidence":1,"speaker":"A"},{"text":"where","start":1143820,"end":1143980,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":1143980,"end":1144140,"confidence":0.97509766,"speaker":"A"},{"text":"introduce","start":1144140,"end":1144580,"confidence":0.96435547,"speaker":"A"},{"text":"myself.","start":1144580,"end":1145060,"confidence":0.99487305,"speaker":"A"},{"text":"So","start":1145940,"end":1146180,"confidence":0.9741211,"speaker":"A"},{"text":"I'm","start":1146180,"end":1146340,"confidence":0.99690753,"speaker":"A"},{"text":"going","start":1146340,"end":1146420,"confidence":0.9428711,"speaker":"A"},{"text":"to","start":1146420,"end":1146500,"confidence":0.99853516,"speaker":"A"},{"text":"talk","start":1146500,"end":1146660,"confidence":0.9995117,"speaker":"A"},{"text":"today","start":1146660,"end":1146860,"confidence":0.99121094,"speaker":"A"},{"text":"about","start":1146860,"end":1147020,"confidence":1,"speaker":"A"},{"text":"building","start":1147020,"end":1147299,"confidence":0.9995117,"speaker":"A"},{"text":"Miskit,","start":1147299,"end":1148020,"confidence":0.82421875,"speaker":"A"},{"text":"which","start":1148260,"end":1148540,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1148540,"end":1148700,"confidence":0.99072266,"speaker":"A"},{"text":"my","start":1148700,"end":1148860,"confidence":0.9995117,"speaker":"A"},{"text":"library","start":1148860,"end":1149300,"confidence":1,"speaker":"A"},{"text":"I","start":1149300,"end":1149500,"confidence":0.99853516,"speaker":"A"},{"text":"built","start":1149500,"end":1149860,"confidence":0.96761066,"speaker":"A"},{"text":"for","start":1150340,"end":1150700,"confidence":0.9921875,"speaker":"A"},{"text":"doing","start":1150700,"end":1151060,"confidence":0.9995117,"speaker":"A"},{"text":"CloudKit","start":1151460,"end":1152100,"confidence":0.99609375,"speaker":"A"},{"text":"stuff","start":1152100,"end":1152580,"confidence":0.99886066,"speaker":"A"},{"text":"on","start":1152740,"end":1153020,"confidence":0.94628906,"speaker":"A"},{"text":"the","start":1153020,"end":1153180,"confidence":0.9995117,"speaker":"A"},{"text":"server","start":1153180,"end":1153540,"confidence":1,"speaker":"A"},{"text":"or","start":1153540,"end":1153740,"confidence":0.9951172,"speaker":"A"},{"text":"essentially","start":1153740,"end":1154180,"confidence":0.9970703,"speaker":"A"},{"text":"off","start":1154180,"end":1154420,"confidence":0.8652344,"speaker":"A"},{"text":"of,","start":1154420,"end":1154740,"confidence":0.9970703,"speaker":"A"},{"text":"not","start":1155380,"end":1155660,"confidence":0.99853516,"speaker":"A"},{"text":"off","start":1155660,"end":1155860,"confidence":0.9995117,"speaker":"A"},{"text":"of","start":1155860,"end":1156100,"confidence":0.9970703,"speaker":"A"},{"text":"Apple","start":1156100,"end":1156500,"confidence":0.99975586,"speaker":"A"},{"text":"platforms.","start":1156500,"end":1157140,"confidence":0.9978841,"speaker":"A"},{"text":"Evan,","start":1159770,"end":1160050,"confidence":0.9189453,"speaker":"A"},{"text":"do","start":1160050,"end":1160170,"confidence":0.9980469,"speaker":"A"},{"text":"you","start":1160170,"end":1160250,"confidence":0.9873047,"speaker":"A"},{"text":"have","start":1160250,"end":1160330,"confidence":0.9995117,"speaker":"A"},{"text":"any","start":1160330,"end":1160450,"confidence":0.99902344,"speaker":"A"},{"text":"questions","start":1160450,"end":1160850,"confidence":0.99975586,"speaker":"A"},{"text":"before","start":1160850,"end":1161010,"confidence":1,"speaker":"A"},{"text":"I","start":1161010,"end":1161170,"confidence":0.99853516,"speaker":"A"},{"text":"keep","start":1161170,"end":1161330,"confidence":0.99902344,"speaker":"A"},{"text":"going?","start":1161330,"end":1161610,"confidence":0.99902344,"speaker":"A"},{"text":"No,","start":1162730,"end":1163130,"confidence":0.9770508,"speaker":"B"},{"text":"it's","start":1163370,"end":1163730,"confidence":0.9757487,"speaker":"B"},{"text":"good.","start":1163730,"end":1163970,"confidence":0.6723633,"speaker":"B"},{"text":"Good","start":1163970,"end":1164250,"confidence":1,"speaker":"B"},{"text":"topic","start":1164250,"end":1164610,"confidence":0.9953613,"speaker":"B"},{"text":"though.","start":1164610,"end":1164890,"confidence":0.99072266,"speaker":"B"},{"text":"So","start":1166810,"end":1167090,"confidence":0.9042969,"speaker":"A"},{"text":"like","start":1167090,"end":1167250,"confidence":0.9951172,"speaker":"A"},{"text":"I","start":1167250,"end":1167410,"confidence":1,"speaker":"A"},{"text":"said,","start":1167410,"end":1167610,"confidence":1,"speaker":"A"},{"text":"we","start":1167610,"end":1167810,"confidence":1,"speaker":"A"},{"text":"have","start":1167810,"end":1167970,"confidence":1,"speaker":"A"},{"text":"CloudKit","start":1167970,"end":1168570,"confidence":0.86804,"speaker":"A"},{"text":"Web","start":1168570,"end":1168810,"confidence":0.99853516,"speaker":"A"},{"text":"Services","start":1168810,"end":1169050,"confidence":0.99853516,"speaker":"A"},{"text":"and","start":1170170,"end":1170530,"confidence":0.8461914,"speaker":"A"},{"text":"CloudKit","start":1170530,"end":1171090,"confidence":0.9489746,"speaker":"A"},{"text":"Web","start":1171090,"end":1171330,"confidence":0.9975586,"speaker":"A"},{"text":"Services.","start":1171330,"end":1171610,"confidence":0.99902344,"speaker":"A"},{"text":"We","start":1172330,"end":1172730,"confidence":0.53759766,"speaker":"A"},{"text":"provide","start":1172730,"end":1173090,"confidence":1,"speaker":"A"},{"text":"a","start":1173090,"end":1173329,"confidence":0.96240234,"speaker":"A"},{"text":"lot","start":1173329,"end":1173489,"confidence":1,"speaker":"A"},{"text":"of","start":1173489,"end":1173610,"confidence":0.99853516,"speaker":"A"},{"text":"documentation.","start":1173610,"end":1174210,"confidence":0.99990237,"speaker":"A"},{"text":"We","start":1174210,"end":1174450,"confidence":0.99902344,"speaker":"A"},{"text":"talked","start":1174450,"end":1174650,"confidence":0.9987793,"speaker":"A"},{"text":"about","start":1174650,"end":1174770,"confidence":0.99902344,"speaker":"A"},{"text":"CloudKit","start":1174770,"end":1175330,"confidence":0.9980469,"speaker":"A"},{"text":"JS","start":1175330,"end":1175770,"confidence":0.7067871,"speaker":"A"},{"text":"and","start":1175850,"end":1176170,"confidence":0.9921875,"speaker":"A"},{"text":"the","start":1176170,"end":1176370,"confidence":0.9819336,"speaker":"A"},{"text":"instructions","start":1176370,"end":1176890,"confidence":0.9773763,"speaker":"A"},{"text":"on","start":1176890,"end":1177090,"confidence":0.9995117,"speaker":"A"},{"text":"how","start":1177090,"end":1177290,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":1177290,"end":1177530,"confidence":0.9995117,"speaker":"A"},{"text":"compose","start":1177530,"end":1177930,"confidence":0.99853516,"speaker":"A"},{"text":"a","start":1177930,"end":1178090,"confidence":0.9926758,"speaker":"A"},{"text":"web","start":1178090,"end":1178410,"confidence":0.9980469,"speaker":"A"},{"text":"service","start":1178650,"end":1179050,"confidence":0.9902344,"speaker":"A"},{"text":"request","start":1179050,"end":1179570,"confidence":0.99853516,"speaker":"A"},{"text":"which","start":1179570,"end":1179810,"confidence":0.99902344,"speaker":"A"},{"text":"has","start":1179810,"end":1180090,"confidence":0.9975586,"speaker":"A"},{"text":"everything","start":1180090,"end":1180450,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":1180450,"end":1180730,"confidence":0.9980469,"speaker":"A"},{"text":"need","start":1180730,"end":1181050,"confidence":0.99853516,"speaker":"A"},{"text":"to","start":1181210,"end":1181490,"confidence":0.99853516,"speaker":"A"},{"text":"compose","start":1181490,"end":1181810,"confidence":0.99487305,"speaker":"A"},{"text":"one.","start":1181810,"end":1182050,"confidence":0.57421875,"speaker":"A"},{"text":"And","start":1182050,"end":1182370,"confidence":0.81640625,"speaker":"A"},{"text":"back","start":1182370,"end":1182610,"confidence":1,"speaker":"A"},{"text":"in","start":1182610,"end":1182810,"confidence":0.9995117,"speaker":"A"},{"text":"2020","start":1182810,"end":1183370,"confidence":0.9978,"speaker":"A"},{"text":"I","start":1183370,"end":1183610,"confidence":0.9995117,"speaker":"A"},{"text":"did","start":1183610,"end":1183730,"confidence":0.99902344,"speaker":"A"},{"text":"this","start":1183730,"end":1183890,"confidence":0.98535156,"speaker":"A"},{"text":"all","start":1183890,"end":1184090,"confidence":0.99316406,"speaker":"A"},{"text":"manually.","start":1184090,"end":1184570,"confidence":0.9992676,"speaker":"A"},{"text":"The","start":1186600,"end":1186760,"confidence":0.9946289,"speaker":"A"},{"text":"thing","start":1186760,"end":1187000,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1187000,"end":1187240,"confidence":0.99902344,"speaker":"A"},{"text":"at","start":1187240,"end":1187440,"confidence":0.99902344,"speaker":"A"},{"text":"this","start":1187440,"end":1187640,"confidence":0.9995117,"speaker":"A"},{"text":"point,","start":1187640,"end":1187960,"confidence":0.9995117,"speaker":"A"},{"text":"if","start":1188600,"end":1188880,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":1188880,"end":1189040,"confidence":0.9995117,"speaker":"A"},{"text":"look","start":1189040,"end":1189200,"confidence":0.9995117,"speaker":"A"},{"text":"at","start":1189200,"end":1189440,"confidence":0.9814453,"speaker":"A"},{"text":"right","start":1189440,"end":1189720,"confidence":0.99902344,"speaker":"A"},{"text":"there,","start":1189720,"end":1190040,"confidence":0.99902344,"speaker":"A"},{"text":"actually","start":1191000,"end":1191320,"confidence":0.99316406,"speaker":"A"},{"text":"if","start":1191320,"end":1191480,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1191480,"end":1191560,"confidence":0.9995117,"speaker":"A"},{"text":"look","start":1191560,"end":1191680,"confidence":1,"speaker":"A"},{"text":"at","start":1191680,"end":1191800,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1191800,"end":1191920,"confidence":0.9995117,"speaker":"A"},{"text":"top,","start":1191920,"end":1192120,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1192120,"end":1192280,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":1192280,"end":1192400,"confidence":1,"speaker":"A"},{"text":"see","start":1192400,"end":1192600,"confidence":0.9995117,"speaker":"A"},{"text":"it","start":1192600,"end":1192760,"confidence":0.98828125,"speaker":"A"},{"text":"hasn't","start":1192760,"end":1193080,"confidence":0.99768066,"speaker":"A"},{"text":"been","start":1193080,"end":1193200,"confidence":0.9995117,"speaker":"A"},{"text":"updated","start":1193200,"end":1193560,"confidence":0.99975586,"speaker":"A"},{"text":"in","start":1193560,"end":1193800,"confidence":0.96875,"speaker":"A"},{"text":"over","start":1193800,"end":1194120,"confidence":0.99902344,"speaker":"A"},{"text":"10","start":1194200,"end":1194480,"confidence":0.99951,"speaker":"A"},{"text":"years,","start":1194480,"end":1194760,"confidence":0.99902344,"speaker":"A"},{"text":"which","start":1196600,"end":1196880,"confidence":0.9975586,"speaker":"A"},{"text":"is","start":1196880,"end":1197160,"confidence":0.99853516,"speaker":"A"},{"text":"kind","start":1197160,"end":1197440,"confidence":0.88671875,"speaker":"A"},{"text":"of","start":1197440,"end":1197600,"confidence":0.9736328,"speaker":"A"},{"text":"crazy,","start":1197600,"end":1198120,"confidence":0.9996745,"speaker":"A"},{"text":"but","start":1198920,"end":1199200,"confidence":0.99609375,"speaker":"A"},{"text":"it","start":1199200,"end":1199360,"confidence":0.99902344,"speaker":"A"},{"text":"works.","start":1199360,"end":1199800,"confidence":0.99731445,"speaker":"A"},{"text":"And","start":1200999,"end":1201280,"confidence":0.7661133,"speaker":"A"},{"text":"then","start":1201280,"end":1201560,"confidence":0.9995117,"speaker":"A"},{"text":"we","start":1202040,"end":1202440,"confidence":0.9975586,"speaker":"A"},{"text":"got","start":1202840,"end":1203240,"confidence":0.96191406,"speaker":"A"},{"text":"introduced","start":1204200,"end":1204800,"confidence":0.9563802,"speaker":"A"},{"text":"to","start":1204800,"end":1204960,"confidence":0.9355469,"speaker":"A"},{"text":"something","start":1204960,"end":1205200,"confidence":0.9970703,"speaker":"A"},{"text":"back","start":1205200,"end":1205440,"confidence":0.9951172,"speaker":"A"},{"text":"in","start":1205440,"end":1205600,"confidence":0.9897461,"speaker":"A"},{"text":"WWDC","start":1205600,"end":1206520,"confidence":0.7050781,"speaker":"A"},{"text":"I","start":1206520,"end":1206760,"confidence":0.93896484,"speaker":"A"},{"text":"want","start":1206760,"end":1206840,"confidence":0.89404297,"speaker":"A"},{"text":"to","start":1206840,"end":1206920,"confidence":0.9980469,"speaker":"A"},{"text":"say","start":1206920,"end":1207040,"confidence":0.99609375,"speaker":"A"},{"text":"it","start":1207040,"end":1207160,"confidence":0.8076172,"speaker":"A"},{"text":"was","start":1207160,"end":1207400,"confidence":0.79248047,"speaker":"A"},{"text":"23.","start":1207480,"end":1208200,"confidence":0.99805,"speaker":"A"},{"text":"We","start":1210280,"end":1210600,"confidence":0.99853516,"speaker":"A"},{"text":"got","start":1210600,"end":1210840,"confidence":0.96240234,"speaker":"A"},{"text":"introduced","start":1210840,"end":1211360,"confidence":0.9744466,"speaker":"A"},{"text":"to","start":1211360,"end":1211520,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1211520,"end":1211680,"confidence":0.9995117,"speaker":"A"},{"text":"Open","start":1211680,"end":1211920,"confidence":0.9980469,"speaker":"A"},{"text":"API","start":1211920,"end":1212440,"confidence":0.97436523,"speaker":"A"},{"text":"generator","start":1212440,"end":1213000,"confidence":0.9851074,"speaker":"A"},{"text":"which","start":1213800,"end":1214000,"confidence":0.99365234,"speaker":"A"},{"text":"is","start":1214000,"end":1214320,"confidence":1,"speaker":"A"},{"text":"really","start":1214320,"end":1214600,"confidence":0.9995117,"speaker":"A"},{"text":"nice","start":1214600,"end":1215000,"confidence":1,"speaker":"A"},{"text":"because","start":1215000,"end":1215400,"confidence":0.99902344,"speaker":"A"},{"text":"then","start":1215960,"end":1216360,"confidence":0.9760742,"speaker":"A"},{"text":"we","start":1216840,"end":1217160,"confidence":0.6513672,"speaker":"A"},{"text":"have,","start":1217160,"end":1217480,"confidence":0.9902344,"speaker":"A"},{"text":"we","start":1217640,"end":1217920,"confidence":0.99609375,"speaker":"A"},{"text":"can","start":1217920,"end":1218080,"confidence":0.99902344,"speaker":"A"},{"text":"generate","start":1218080,"end":1218440,"confidence":0.99975586,"speaker":"A"},{"text":"the","start":1218440,"end":1218560,"confidence":0.9975586,"speaker":"A"},{"text":"Swift","start":1218560,"end":1218840,"confidence":0.7780762,"speaker":"A"},{"text":"code","start":1218840,"end":1219120,"confidence":0.96761066,"speaker":"A"},{"text":"if","start":1219120,"end":1219280,"confidence":1,"speaker":"A"},{"text":"we","start":1219280,"end":1219440,"confidence":0.99902344,"speaker":"A"},{"text":"know","start":1219440,"end":1219640,"confidence":0.98779297,"speaker":"A"},{"text":"what","start":1219640,"end":1219840,"confidence":0.99853516,"speaker":"A"},{"text":"the","start":1219840,"end":1220080,"confidence":0.9638672,"speaker":"A"},{"text":"Open","start":1220080,"end":1220400,"confidence":0.9980469,"speaker":"A"},{"text":"API","start":1220400,"end":1220880,"confidence":0.8979492,"speaker":"A"},{"text":"documentation","start":1220880,"end":1221720,"confidence":0.99970704,"speaker":"A"},{"text":"looks","start":1222200,"end":1222600,"confidence":1,"speaker":"A"},{"text":"like","start":1222600,"end":1222720,"confidence":0.99902344,"speaker":"A"},{"text":"it.","start":1222720,"end":1222880,"confidence":0.7519531,"speaker":"A"},{"text":"And","start":1222880,"end":1223040,"confidence":0.87597656,"speaker":"A"},{"text":"of","start":1223040,"end":1223160,"confidence":0.9980469,"speaker":"A"},{"text":"course","start":1223160,"end":1223280,"confidence":1,"speaker":"A"},{"text":"Apple","start":1223280,"end":1223600,"confidence":0.99975586,"speaker":"A"},{"text":"doesn't","start":1223600,"end":1223840,"confidence":0.99853516,"speaker":"A"},{"text":"provide","start":1223840,"end":1224080,"confidence":1,"speaker":"A"},{"text":"one","start":1224080,"end":1224320,"confidence":0.9926758,"speaker":"A"},{"text":"for","start":1224320,"end":1224480,"confidence":0.99902344,"speaker":"A"},{"text":"CloudKit","start":1224480,"end":1225240,"confidence":0.9314,"speaker":"A"},{"text":"but","start":1225960,"end":1226280,"confidence":0.9951172,"speaker":"A"},{"text":"they","start":1226280,"end":1226480,"confidence":0.88427734,"speaker":"A"},{"text":"did","start":1226480,"end":1226720,"confidence":0.98779297,"speaker":"A"},{"text":"provide","start":1226720,"end":1227040,"confidence":1,"speaker":"A"},{"text":"a","start":1227040,"end":1227280,"confidence":0.9995117,"speaker":"A"},{"text":"pretty","start":1227280,"end":1227520,"confidence":0.9998372,"speaker":"A"},{"text":"big","start":1227520,"end":1227720,"confidence":1,"speaker":"A"},{"text":"piece","start":1227720,"end":1228120,"confidence":0.99869794,"speaker":"A"},{"text":"open.","start":1229240,"end":1229639,"confidence":0.6689453,"speaker":"A"},{"text":"If","start":1229800,"end":1230040,"confidence":0.9873047,"speaker":"A"},{"text":"you","start":1230040,"end":1230120,"confidence":0.77490234,"speaker":"A"},{"text":"ever","start":1230120,"end":1230360,"confidence":0.91748047,"speaker":"A"},{"text":"you","start":1230360,"end":1230640,"confidence":0.7763672,"speaker":"A"},{"text":"looked","start":1230640,"end":1230920,"confidence":0.9987793,"speaker":"A"},{"text":"at","start":1230920,"end":1231000,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1231000,"end":1231120,"confidence":0.99902344,"speaker":"A"},{"text":"Open","start":1231120,"end":1231320,"confidence":0.99902344,"speaker":"A"},{"text":"API","start":1231320,"end":1231760,"confidence":0.9448242,"speaker":"A"},{"text":"generator,","start":1231760,"end":1232160,"confidence":0.9995117,"speaker":"A"},{"text":"it's","start":1232160,"end":1232400,"confidence":0.89192706,"speaker":"A"},{"text":"amazing.","start":1232400,"end":1232840,"confidence":0.9998372,"speaker":"A"},{"text":"Takes","start":1232840,"end":1233200,"confidence":0.7607422,"speaker":"A"},{"text":"the","start":1233200,"end":1233320,"confidence":0.46704102,"speaker":"A"},{"text":"Open","start":1233320,"end":1233520,"confidence":0.99902344,"speaker":"A"},{"text":"API","start":1233520,"end":1234080,"confidence":0.9501953,"speaker":"A"},{"text":"gamble","start":1234080,"end":1234640,"confidence":0.7845052,"speaker":"A"},{"text":"file","start":1234640,"end":1235000,"confidence":0.99121094,"speaker":"A"},{"text":"and","start":1235000,"end":1235320,"confidence":0.53125,"speaker":"A"},{"text":"generates","start":1235560,"end":1236160,"confidence":0.99975586,"speaker":"A"},{"text":"all","start":1236160,"end":1236400,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1236400,"end":1236560,"confidence":0.99609375,"speaker":"A"},{"text":"Swift","start":1236560,"end":1236840,"confidence":0.7429199,"speaker":"A"},{"text":"code","start":1236840,"end":1237080,"confidence":0.9991862,"speaker":"A"},{"text":"you","start":1237080,"end":1237240,"confidence":0.99853516,"speaker":"A"},{"text":"need.","start":1237240,"end":1237560,"confidence":1,"speaker":"A"},{"text":"One","start":1237880,"end":1238160,"confidence":0.99560547,"speaker":"A"},{"text":"of","start":1238160,"end":1238320,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1238320,"end":1238440,"confidence":1,"speaker":"A"},{"text":"other","start":1238440,"end":1238600,"confidence":0.99902344,"speaker":"A"},{"text":"issues","start":1238600,"end":1238880,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":1238880,"end":1239120,"confidence":0.99902344,"speaker":"A"},{"text":"had","start":1239120,"end":1239280,"confidence":0.99658203,"speaker":"A"},{"text":"with","start":1239280,"end":1239560,"confidence":0.98828125,"speaker":"A"},{"text":"first","start":1240880,"end":1241040,"confidence":0.98339844,"speaker":"A"},{"text":"developing","start":1241040,"end":1241480,"confidence":0.99902344,"speaker":"A"},{"text":"Miskit","start":1241480,"end":1242160,"confidence":0.90844727,"speaker":"A"},{"text":"in","start":1242160,"end":1242440,"confidence":0.99072266,"speaker":"A"},{"text":"2020","start":1242440,"end":1243120,"confidence":0.99658,"speaker":"A"},{"text":"was","start":1243600,"end":1243920,"confidence":0.99609375,"speaker":"A"},{"text":"that","start":1243920,"end":1244160,"confidence":0.9951172,"speaker":"A"},{"text":"there","start":1244160,"end":1244360,"confidence":1,"speaker":"A"},{"text":"was","start":1244360,"end":1244520,"confidence":0.9995117,"speaker":"A"},{"text":"no","start":1244520,"end":1244720,"confidence":1,"speaker":"A"},{"text":"way","start":1244720,"end":1245000,"confidence":1,"speaker":"A"},{"text":"to","start":1245000,"end":1245320,"confidence":0.99658203,"speaker":"A"},{"text":"like","start":1245320,"end":1245680,"confidence":0.99072266,"speaker":"A"},{"text":"there","start":1245840,"end":1246160,"confidence":0.9770508,"speaker":"A"},{"text":"was","start":1246160,"end":1246360,"confidence":0.9941406,"speaker":"A"},{"text":"no","start":1246360,"end":1246520,"confidence":0.95410156,"speaker":"A"},{"text":"abstraction","start":1246520,"end":1247120,"confidence":0.9992676,"speaker":"A"},{"text":"layer","start":1247120,"end":1247520,"confidence":0.99934894,"speaker":"A"},{"text":"which","start":1247520,"end":1247800,"confidence":0.99902344,"speaker":"A"},{"text":"could","start":1247800,"end":1248040,"confidence":0.99316406,"speaker":"A"},{"text":"differentiate","start":1248040,"end":1248640,"confidence":0.9992676,"speaker":"A"},{"text":"between","start":1248640,"end":1248920,"confidence":1,"speaker":"A"},{"text":"doing","start":1248920,"end":1249200,"confidence":0.99902344,"speaker":"A"},{"text":"something","start":1249200,"end":1249440,"confidence":1,"speaker":"A"},{"text":"on","start":1249440,"end":1249640,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":1249640,"end":1249800,"confidence":0.98876953,"speaker":"A"},{"text":"server","start":1249800,"end":1250320,"confidence":0.9995117,"speaker":"A"},{"text":"or","start":1250720,"end":1251080,"confidence":0.99902344,"speaker":"A"},{"text":"using","start":1251080,"end":1251440,"confidence":0.9975586,"speaker":"A"},{"text":"regular","start":1251760,"end":1252400,"confidence":0.99902344,"speaker":"A"},{"text":"like","start":1252480,"end":1252880,"confidence":0.9765625,"speaker":"A"},{"text":"URL","start":1253040,"end":1253680,"confidence":0.9951172,"speaker":"A"},{"text":"session","start":1253680,"end":1254040,"confidence":0.9991862,"speaker":"A"},{"text":"which","start":1254040,"end":1254200,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1254200,"end":1254360,"confidence":0.99658203,"speaker":"A"},{"text":"more","start":1254360,"end":1254600,"confidence":1,"speaker":"A"},{"text":"targeted","start":1254600,"end":1255080,"confidence":1,"speaker":"A"},{"text":"towards","start":1255080,"end":1255360,"confidence":0.9992676,"speaker":"A"},{"text":"client","start":1255360,"end":1255719,"confidence":0.9328613,"speaker":"A"},{"text":"side.","start":1255719,"end":1256080,"confidence":0.99853516,"speaker":"A"},{"text":"So","start":1258960,"end":1259360,"confidence":0.9970703,"speaker":"A"},{"text":"I","start":1259440,"end":1259720,"confidence":0.99121094,"speaker":"A"},{"text":"had","start":1259720,"end":1259880,"confidence":0.8510742,"speaker":"A"},{"text":"to","start":1259880,"end":1260000,"confidence":0.97216797,"speaker":"A"},{"text":"build","start":1260000,"end":1260120,"confidence":0.9970703,"speaker":"A"},{"text":"my","start":1260120,"end":1260280,"confidence":0.9995117,"speaker":"A"},{"text":"own","start":1260280,"end":1260440,"confidence":1,"speaker":"A"},{"text":"abstraction","start":1260440,"end":1261000,"confidence":0.90441895,"speaker":"A"},{"text":"for","start":1261000,"end":1261120,"confidence":1,"speaker":"A"},{"text":"that.","start":1261120,"end":1261280,"confidence":1,"speaker":"A"},{"text":"Luckily","start":1261280,"end":1261640,"confidence":0.99641925,"speaker":"A"},{"text":"Open","start":1261640,"end":1261840,"confidence":0.9995117,"speaker":"A"},{"text":"API","start":1261840,"end":1262440,"confidence":0.7475586,"speaker":"A"},{"text":"has,","start":1262440,"end":1262800,"confidence":0.99609375,"speaker":"A"},{"text":"there's","start":1264080,"end":1264560,"confidence":0.99820966,"speaker":"A"},{"text":"open","start":1264560,"end":1264880,"confidence":0.87109375,"speaker":"A"},{"text":"API","start":1264960,"end":1265600,"confidence":0.8029785,"speaker":"A"},{"text":"transport","start":1265600,"end":1266240,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":1266240,"end":1266520,"confidence":0.99658203,"speaker":"A"},{"text":"believe,","start":1266520,"end":1266800,"confidence":0.9995117,"speaker":"A"},{"text":"which","start":1266880,"end":1267240,"confidence":0.9995117,"speaker":"A"},{"text":"provides","start":1267240,"end":1267600,"confidence":0.9995117,"speaker":"A"},{"text":"an","start":1267600,"end":1267720,"confidence":0.99121094,"speaker":"A"},{"text":"abstraction","start":1267720,"end":1268400,"confidence":0.98132324,"speaker":"A"},{"text":"layer","start":1268480,"end":1268840,"confidence":0.96940106,"speaker":"A"},{"text":"where","start":1268840,"end":1269000,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1269000,"end":1269120,"confidence":1,"speaker":"A"},{"text":"can","start":1269120,"end":1269240,"confidence":0.9995117,"speaker":"A"},{"text":"then","start":1269240,"end":1269400,"confidence":0.9975586,"speaker":"A"},{"text":"plug","start":1269400,"end":1269640,"confidence":0.9992676,"speaker":"A"},{"text":"in","start":1269640,"end":1269840,"confidence":0.9946289,"speaker":"A"},{"text":"either","start":1269840,"end":1270120,"confidence":0.9980469,"speaker":"A"},{"text":"use","start":1270120,"end":1270400,"confidence":0.99316406,"speaker":"A"},{"text":"Async","start":1270980,"end":1271420,"confidence":0.94433594,"speaker":"A"},{"text":"HTTP","start":1271420,"end":1272100,"confidence":0.9790039,"speaker":"A"},{"text":"client,","start":1272100,"end":1272620,"confidence":0.9975586,"speaker":"A"},{"text":"which","start":1272620,"end":1272900,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1272900,"end":1273140,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1273140,"end":1273420,"confidence":0.9995117,"speaker":"A"},{"text":"server","start":1273420,"end":1273900,"confidence":0.99902344,"speaker":"A"},{"text":"way","start":1273900,"end":1274060,"confidence":0.98583984,"speaker":"A"},{"text":"of","start":1274060,"end":1274220,"confidence":1,"speaker":"A"},{"text":"doing","start":1274220,"end":1274380,"confidence":1,"speaker":"A"},{"text":"it,","start":1274380,"end":1274540,"confidence":0.9995117,"speaker":"A"},{"text":"or","start":1274540,"end":1274780,"confidence":0.59228516,"speaker":"A"},{"text":"you","start":1274780,"end":1275020,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":1275020,"end":1275180,"confidence":0.9995117,"speaker":"A"},{"text":"plug","start":1275180,"end":1275380,"confidence":0.99975586,"speaker":"A"},{"text":"in","start":1275380,"end":1275500,"confidence":0.99658203,"speaker":"A"},{"text":"a","start":1275500,"end":1275660,"confidence":0.99609375,"speaker":"A"},{"text":"URL","start":1275660,"end":1276180,"confidence":0.99853516,"speaker":"A"},{"text":"session","start":1276180,"end":1276660,"confidence":0.87906903,"speaker":"A"},{"text":"transport,","start":1277060,"end":1277780,"confidence":0.99902344,"speaker":"A"},{"text":"which","start":1277860,"end":1278180,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1278180,"end":1278500,"confidence":0.9995117,"speaker":"A"},{"text":"of","start":1278500,"end":1278780,"confidence":0.5307617,"speaker":"A"},{"text":"course","start":1278780,"end":1278940,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1278940,"end":1279100,"confidence":0.5600586,"speaker":"A"},{"text":"client","start":1279100,"end":1279380,"confidence":0.99487305,"speaker":"A"},{"text":"way","start":1279380,"end":1279580,"confidence":0.9941406,"speaker":"A"},{"text":"to","start":1279580,"end":1279700,"confidence":0.9995117,"speaker":"A"},{"text":"do,","start":1279700,"end":1279820,"confidence":0.9995117,"speaker":"A"},{"text":"provides","start":1282060,"end":1282420,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":1282420,"end":1282540,"confidence":0.9995117,"speaker":"A"},{"text":"really","start":1282540,"end":1282700,"confidence":0.9995117,"speaker":"A"},{"text":"great","start":1282700,"end":1282980,"confidence":0.9995117,"speaker":"A"},{"text":"tutorial.","start":1283060,"end":1283740,"confidence":0.9855957,"speaker":"A"},{"text":"I","start":1283740,"end":1283980,"confidence":0.96777344,"speaker":"A"},{"text":"highly","start":1283980,"end":1284300,"confidence":0.998291,"speaker":"A"},{"text":"recommend","start":1284300,"end":1284620,"confidence":1,"speaker":"A"},{"text":"checking","start":1284620,"end":1284900,"confidence":0.99934894,"speaker":"A"},{"text":"this","start":1284900,"end":1285060,"confidence":0.9951172,"speaker":"A"},{"text":"out","start":1285060,"end":1285380,"confidence":0.9970703,"speaker":"A"},{"text":"as","start":1286579,"end":1286859,"confidence":1,"speaker":"A"},{"text":"well","start":1286859,"end":1287020,"confidence":1,"speaker":"A"},{"text":"as","start":1287020,"end":1287300,"confidence":0.99853516,"speaker":"A"},{"text":"the","start":1287380,"end":1287740,"confidence":0.9975586,"speaker":"A"},{"text":"doxy","start":1287740,"end":1288340,"confidence":0.84684247,"speaker":"A"},{"text":"documentation","start":1288340,"end":1289060,"confidence":0.99990237,"speaker":"A"},{"text":"that","start":1289220,"end":1289500,"confidence":0.99853516,"speaker":"A"},{"text":"they","start":1289500,"end":1289700,"confidence":0.9995117,"speaker":"A"},{"text":"provide.","start":1289700,"end":1290020,"confidence":0.9970703,"speaker":"A"},{"text":"So","start":1291860,"end":1292220,"confidence":0.9667969,"speaker":"A"},{"text":"this","start":1292220,"end":1292460,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1292460,"end":1292660,"confidence":0.95654297,"speaker":"A"},{"text":"great.","start":1292660,"end":1292940,"confidence":1,"speaker":"A"},{"text":"But","start":1292940,"end":1293180,"confidence":0.99609375,"speaker":"A"},{"text":"then","start":1293180,"end":1293420,"confidence":0.99853516,"speaker":"A"},{"text":"I'd","start":1293420,"end":1293820,"confidence":0.99625653,"speaker":"A"},{"text":"have","start":1293820,"end":1293980,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":1293980,"end":1294100,"confidence":1,"speaker":"A"},{"text":"go","start":1294100,"end":1294220,"confidence":0.9995117,"speaker":"A"},{"text":"ahead","start":1294220,"end":1294500,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":1294660,"end":1294940,"confidence":0.99853516,"speaker":"A"},{"text":"I'd","start":1294940,"end":1295180,"confidence":0.8806966,"speaker":"A"},{"text":"have","start":1295180,"end":1295300,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":1295300,"end":1295420,"confidence":0.9995117,"speaker":"A"},{"text":"figure","start":1295420,"end":1295660,"confidence":0.7961426,"speaker":"A"},{"text":"out","start":1295660,"end":1295820,"confidence":0.99853516,"speaker":"A"},{"text":"a","start":1295820,"end":1295980,"confidence":0.9970703,"speaker":"A"},{"text":"way","start":1295980,"end":1296260,"confidence":0.99560547,"speaker":"A"},{"text":"to","start":1296900,"end":1297020,"confidence":0.9819336,"speaker":"A"},{"text":"convert","start":1297020,"end":1297300,"confidence":0.9992676,"speaker":"A"},{"text":"all","start":1297300,"end":1297540,"confidence":0.9995117,"speaker":"A"},{"text":"this","start":1297540,"end":1297740,"confidence":0.9975586,"speaker":"A"},{"text":"documentation","start":1297740,"end":1298500,"confidence":0.9995117,"speaker":"A"},{"text":"into","start":1298660,"end":1299060,"confidence":0.9995117,"speaker":"A"},{"text":"an","start":1299140,"end":1299420,"confidence":0.99853516,"speaker":"A"},{"text":"open","start":1299420,"end":1299700,"confidence":0.9995117,"speaker":"A"},{"text":"API","start":1299700,"end":1300340,"confidence":0.9458008,"speaker":"A"},{"text":"document.","start":1300420,"end":1301140,"confidence":0.9998779,"speaker":"A"},{"text":"I","start":1302420,"end":1302700,"confidence":0.5463867,"speaker":"A"},{"text":"mean,","start":1302700,"end":1302860,"confidence":0.9926758,"speaker":"A"},{"text":"can","start":1302860,"end":1303020,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1303020,"end":1303180,"confidence":0.99902344,"speaker":"A"},{"text":"guess","start":1303180,"end":1303540,"confidence":0.99975586,"speaker":"A"},{"text":"what","start":1303940,"end":1304260,"confidence":0.9995117,"speaker":"A"},{"text":"helped","start":1304260,"end":1304620,"confidence":0.76538086,"speaker":"A"},{"text":"me","start":1304620,"end":1304980,"confidence":0.9926758,"speaker":"A"},{"text":"to","start":1305540,"end":1305820,"confidence":0.9873047,"speaker":"A"},{"text":"get","start":1305820,"end":1306100,"confidence":0.6230469,"speaker":"A"},{"text":"build","start":1306180,"end":1306580,"confidence":0.95996094,"speaker":"A"},{"text":"an","start":1306820,"end":1307100,"confidence":0.9550781,"speaker":"A"},{"text":"open","start":1307100,"end":1307340,"confidence":0.9995117,"speaker":"A"},{"text":"API","start":1307340,"end":1307860,"confidence":0.90722656,"speaker":"A"},{"text":"document","start":1307860,"end":1308260,"confidence":0.9959717,"speaker":"A"},{"text":"from","start":1308260,"end":1308460,"confidence":0.99853516,"speaker":"A"},{"text":"all","start":1308460,"end":1308620,"confidence":0.9995117,"speaker":"A"},{"text":"this","start":1308620,"end":1308820,"confidence":0.9555664,"speaker":"A"},{"text":"documentation?","start":1308820,"end":1309540,"confidence":0.9988281,"speaker":"A"},{"text":"Some","start":1310340,"end":1310740,"confidence":0.62402344,"speaker":"B"},{"text":"of","start":1311060,"end":1311260,"confidence":0.25683594,"speaker":"B"},{"text":"the","start":1311260,"end":1311300,"confidence":0.56347656,"speaker":"B"},{"text":"tools,","start":1311300,"end":1311620,"confidence":0.72314453,"speaker":"B"},{"text":"some","start":1312659,"end":1312940,"confidence":0.9658203,"speaker":"B"},{"text":"AI","start":1312940,"end":1313260,"confidence":0.9914551,"speaker":"B"},{"text":"tool.","start":1313260,"end":1313540,"confidence":0.9716797,"speaker":"B"},{"text":"Yes.","start":1314500,"end":1314980,"confidence":0.9482422,"speaker":"A"},{"text":"AI","start":1316820,"end":1317340,"confidence":0.91967773,"speaker":"A"},{"text":"came","start":1317340,"end":1317620,"confidence":0.9980469,"speaker":"A"},{"text":"and","start":1317620,"end":1317900,"confidence":0.99853516,"speaker":"A"},{"text":"I'm","start":1317900,"end":1318140,"confidence":0.99934894,"speaker":"A"},{"text":"like,","start":1318140,"end":1318340,"confidence":0.9921875,"speaker":"A"},{"text":"holy","start":1318340,"end":1318620,"confidence":0.82543945,"speaker":"A"},{"text":"crap.","start":1318620,"end":1318980,"confidence":0.86450195,"speaker":"A"},{"text":"Like","start":1319460,"end":1319860,"confidence":0.6220703,"speaker":"A"},{"text":"AI","start":1320180,"end":1320660,"confidence":0.92407227,"speaker":"A"},{"text":"is","start":1320660,"end":1320860,"confidence":0.9946289,"speaker":"A"},{"text":"really","start":1320860,"end":1321020,"confidence":0.99902344,"speaker":"A"},{"text":"good","start":1321020,"end":1321180,"confidence":0.99902344,"speaker":"A"},{"text":"at","start":1321180,"end":1321340,"confidence":0.9995117,"speaker":"A"},{"text":"documenting","start":1321340,"end":1321820,"confidence":0.99990237,"speaker":"A"},{"text":"your","start":1321820,"end":1321980,"confidence":0.99902344,"speaker":"A"},{"text":"code,","start":1321980,"end":1322260,"confidence":0.9998372,"speaker":"A"},{"text":"but","start":1322260,"end":1322460,"confidence":0.96972656,"speaker":"A"},{"text":"it's","start":1322460,"end":1322660,"confidence":0.9749349,"speaker":"A"},{"text":"also","start":1322660,"end":1322820,"confidence":0.9995117,"speaker":"A"},{"text":"pretty","start":1322820,"end":1323060,"confidence":0.9996745,"speaker":"A"},{"text":"darn","start":1323060,"end":1323260,"confidence":0.90804034,"speaker":"A"},{"text":"good","start":1323260,"end":1323420,"confidence":1,"speaker":"A"},{"text":"at","start":1323420,"end":1323700,"confidence":0.9902344,"speaker":"A"},{"text":"taking","start":1324490,"end":1324690,"confidence":0.93066406,"speaker":"A"},{"text":"documentation","start":1324690,"end":1325370,"confidence":0.9998047,"speaker":"A"},{"text":"and","start":1325370,"end":1325570,"confidence":0.99609375,"speaker":"A"},{"text":"building","start":1325570,"end":1325810,"confidence":0.9995117,"speaker":"A"},{"text":"code.","start":1325810,"end":1326250,"confidence":0.8733724,"speaker":"A"},{"text":"So","start":1326890,"end":1327170,"confidence":0.9238281,"speaker":"A"},{"text":"then","start":1327170,"end":1327450,"confidence":0.99658203,"speaker":"A"},{"text":"I","start":1327930,"end":1328250,"confidence":0.9819336,"speaker":"A"},{"text":"would","start":1328250,"end":1328450,"confidence":0.9848633,"speaker":"A"},{"text":"just","start":1328450,"end":1328610,"confidence":0.99902344,"speaker":"A"},{"text":"plug","start":1328610,"end":1328850,"confidence":0.9938965,"speaker":"A"},{"text":"it.","start":1328850,"end":1329050,"confidence":0.8227539,"speaker":"A"},{"text":"I've","start":1329050,"end":1329290,"confidence":0.99397784,"speaker":"A"},{"text":"been","start":1329290,"end":1329410,"confidence":0.9975586,"speaker":"A"},{"text":"plugging","start":1329410,"end":1329730,"confidence":0.95751953,"speaker":"A"},{"text":"in","start":1329730,"end":1329890,"confidence":0.8691406,"speaker":"A"},{"text":"with","start":1329890,"end":1330050,"confidence":0.9995117,"speaker":"A"},{"text":"Claude","start":1330050,"end":1330650,"confidence":0.73999023,"speaker":"A"},{"text":"and","start":1331050,"end":1331330,"confidence":0.9667969,"speaker":"A"},{"text":"it","start":1331330,"end":1331490,"confidence":0.9975586,"speaker":"A"},{"text":"has","start":1331490,"end":1331650,"confidence":1,"speaker":"A"},{"text":"a","start":1331650,"end":1331850,"confidence":0.9995117,"speaker":"A"},{"text":"copy","start":1331850,"end":1332170,"confidence":1,"speaker":"A"},{"text":"of","start":1332170,"end":1332290,"confidence":1,"speaker":"A"},{"text":"all","start":1332290,"end":1332450,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1332450,"end":1332610,"confidence":0.9995117,"speaker":"A"},{"text":"documentation","start":1332610,"end":1333210,"confidence":0.99970704,"speaker":"A"},{"text":"in","start":1333210,"end":1333410,"confidence":0.9277344,"speaker":"A"},{"text":"my","start":1333410,"end":1333570,"confidence":1,"speaker":"A"},{"text":"repo","start":1333570,"end":1334090,"confidence":0.9848633,"speaker":"A"},{"text":"and","start":1334410,"end":1334730,"confidence":0.9682617,"speaker":"A"},{"text":"it","start":1334730,"end":1334930,"confidence":0.8828125,"speaker":"A"},{"text":"can","start":1334930,"end":1335090,"confidence":0.9995117,"speaker":"A"},{"text":"go","start":1335090,"end":1335250,"confidence":0.9995117,"speaker":"A"},{"text":"ahead","start":1335250,"end":1335410,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":1335410,"end":1335610,"confidence":0.99853516,"speaker":"A"},{"text":"edit","start":1335610,"end":1336090,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1336250,"end":1336490,"confidence":0.9824219,"speaker":"A"},{"text":"open","start":1336490,"end":1336690,"confidence":0.99316406,"speaker":"A"},{"text":"API.","start":1336690,"end":1337210,"confidence":0.9802246,"speaker":"A"},{"text":"It's","start":1337210,"end":1337490,"confidence":0.9817708,"speaker":"A"},{"text":"not","start":1337490,"end":1337690,"confidence":0.99853516,"speaker":"A"},{"text":"perfect","start":1337690,"end":1338010,"confidence":0.97998047,"speaker":"A"},{"text":"by","start":1338010,"end":1338250,"confidence":0.99853516,"speaker":"A"},{"text":"any","start":1338250,"end":1338490,"confidence":1,"speaker":"A"},{"text":"means,","start":1338490,"end":1338810,"confidence":1,"speaker":"A"},{"text":"of","start":1338810,"end":1339090,"confidence":0.99902344,"speaker":"A"},{"text":"course,","start":1339090,"end":1339370,"confidence":1,"speaker":"A"},{"text":"but","start":1339530,"end":1339849,"confidence":0.9970703,"speaker":"A"},{"text":"that's","start":1339849,"end":1340170,"confidence":0.9998372,"speaker":"A"},{"text":"what","start":1340170,"end":1340410,"confidence":0.9980469,"speaker":"A"},{"text":"unit","start":1340410,"end":1340850,"confidence":0.84521484,"speaker":"A"},{"text":"tests","start":1340850,"end":1341210,"confidence":0.9946289,"speaker":"A"},{"text":"are","start":1341210,"end":1341330,"confidence":0.99560547,"speaker":"A"},{"text":"for.","start":1341330,"end":1341610,"confidence":0.99658203,"speaker":"A"},{"text":"And","start":1343850,"end":1344170,"confidence":0.89697266,"speaker":"A"},{"text":"actually","start":1344170,"end":1344410,"confidence":0.99853516,"speaker":"A"},{"text":"having","start":1344410,"end":1344650,"confidence":0.87402344,"speaker":"A"},{"text":"integration","start":1344650,"end":1345210,"confidence":0.9769287,"speaker":"A"},{"text":"tests","start":1345210,"end":1345770,"confidence":0.9975586,"speaker":"A"},{"text":"in","start":1346250,"end":1346530,"confidence":0.99853516,"speaker":"A"},{"text":"order","start":1346530,"end":1346730,"confidence":1,"speaker":"A"},{"text":"to","start":1346730,"end":1346930,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":1346930,"end":1347130,"confidence":0.9995117,"speaker":"A"},{"text":"stuff","start":1347130,"end":1347530,"confidence":0.9998372,"speaker":"A"},{"text":"so","start":1347690,"end":1348090,"confidence":0.83496094,"speaker":"A"},{"text":"that.","start":1351460,"end":1351700,"confidence":0.9980469,"speaker":"A"},{"text":"Sorry,","start":1355380,"end":1355740,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":1355740,"end":1355860,"confidence":0.9995117,"speaker":"A"},{"text":"just","start":1355860,"end":1355980,"confidence":1,"speaker":"A"},{"text":"want","start":1355980,"end":1356140,"confidence":0.99560547,"speaker":"A"},{"text":"to","start":1356140,"end":1356300,"confidence":0.99365234,"speaker":"A"},{"text":"make","start":1356300,"end":1356460,"confidence":1,"speaker":"A"},{"text":"sure","start":1356460,"end":1356740,"confidence":1,"speaker":"A"},{"text":"nothing","start":1360660,"end":1361100,"confidence":0.88623047,"speaker":"A"},{"text":"important.","start":1361100,"end":1361460,"confidence":1,"speaker":"A"},{"text":"I","start":1366900,"end":1367180,"confidence":0.9951172,"speaker":"A"},{"text":"hate","start":1367180,"end":1367460,"confidence":0.9992676,"speaker":"A"},{"text":"teams.","start":1367460,"end":1368020,"confidence":0.9995117,"speaker":"A"},{"text":"Okay,","start":1373060,"end":1373620,"confidence":0.94677734,"speaker":"A"},{"text":"so","start":1374820,"end":1375100,"confidence":0.9980469,"speaker":"A"},{"text":"great.","start":1375100,"end":1375380,"confidence":0.9980469,"speaker":"A"},{"text":"So","start":1375700,"end":1375780,"confidence":0.9995117,"speaker":"A"},{"text":"let's","start":1375780,"end":1375980,"confidence":0.9996745,"speaker":"A"},{"text":"talk","start":1375980,"end":1376140,"confidence":0.9995117,"speaker":"A"},{"text":"about.","start":1376140,"end":1376420,"confidence":0.9980469,"speaker":"A"},{"text":"Sorry,","start":1379700,"end":1380180,"confidence":0.90966797,"speaker":"A"},{"text":"slides","start":1380500,"end":1380900,"confidence":0.76538086,"speaker":"A"},{"text":"are","start":1380900,"end":1381100,"confidence":0.9995117,"speaker":"A"},{"text":"still","start":1381100,"end":1381260,"confidence":1,"speaker":"A"},{"text":"not","start":1381260,"end":1381420,"confidence":1,"speaker":"A"},{"text":"done,","start":1381420,"end":1381620,"confidence":0.9980469,"speaker":"A"},{"text":"but","start":1381620,"end":1381940,"confidence":0.99316406,"speaker":"A"},{"text":"let's","start":1382100,"end":1382460,"confidence":0.9991862,"speaker":"A"},{"text":"talk","start":1382460,"end":1382620,"confidence":0.9995117,"speaker":"A"},{"text":"about","start":1382620,"end":1382900,"confidence":0.9980469,"speaker":"A"},{"text":"authentication","start":1384500,"end":1385380,"confidence":1,"speaker":"A"},{"text":"methods.","start":1385380,"end":1386020,"confidence":0.99975586,"speaker":"A"},{"text":"You","start":1386340,"end":1386620,"confidence":0.9970703,"speaker":"A"},{"text":"can","start":1386620,"end":1386780,"confidence":0.8959961,"speaker":"A"},{"text":"see","start":1386780,"end":1386940,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":1386940,"end":1387100,"confidence":0.99902344,"speaker":"A"},{"text":"have","start":1387100,"end":1387380,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1387460,"end":1387740,"confidence":0.99121094,"speaker":"A"},{"text":"logos","start":1387740,"end":1388140,"confidence":0.9980469,"speaker":"A"},{"text":"here,","start":1388140,"end":1388300,"confidence":0.9995117,"speaker":"A"},{"text":"but","start":1388300,"end":1388420,"confidence":1,"speaker":"A"},{"text":"I","start":1388420,"end":1388540,"confidence":0.9995117,"speaker":"A"},{"text":"haven't","start":1388540,"end":1388780,"confidence":0.99975586,"speaker":"A"},{"text":"quite","start":1388780,"end":1389020,"confidence":0.99975586,"speaker":"A"},{"text":"cleaned","start":1389020,"end":1389340,"confidence":0.79541016,"speaker":"A"},{"text":"this","start":1389340,"end":1389540,"confidence":0.9941406,"speaker":"A"},{"text":"up.","start":1389540,"end":1389860,"confidence":0.9970703,"speaker":"A"},{"text":"So","start":1390820,"end":1391220,"confidence":0.9770508,"speaker":"A"},{"text":"there's","start":1391940,"end":1392540,"confidence":0.9983724,"speaker":"A"},{"text":"really","start":1392540,"end":1392900,"confidence":0.99902344,"speaker":"A"},{"text":"two","start":1393780,"end":1394140,"confidence":1,"speaker":"A"},{"text":"and","start":1394140,"end":1394380,"confidence":0.87890625,"speaker":"A"},{"text":"a","start":1394380,"end":1394540,"confidence":0.9667969,"speaker":"A"},{"text":"half","start":1394540,"end":1394820,"confidence":0.9995117,"speaker":"A"},{"text":"authentication","start":1394820,"end":1395660,"confidence":0.99975586,"speaker":"A"},{"text":"methods","start":1395660,"end":1396140,"confidence":1,"speaker":"A"},{"text":"when","start":1396140,"end":1396300,"confidence":1,"speaker":"A"},{"text":"it","start":1396300,"end":1396420,"confidence":1,"speaker":"A"},{"text":"comes","start":1396420,"end":1396540,"confidence":1,"speaker":"A"},{"text":"to","start":1396540,"end":1396700,"confidence":1,"speaker":"A"},{"text":"CloudKit.","start":1396700,"end":1397380,"confidence":0.9552,"speaker":"A"},{"text":"So","start":1398420,"end":1398820,"confidence":0.9326172,"speaker":"A"},{"text":"here","start":1398900,"end":1399300,"confidence":0.99853516,"speaker":"A"},{"text":"is","start":1399460,"end":1399860,"confidence":0.9658203,"speaker":"A"},{"text":"the","start":1401150,"end":1401270,"confidence":0.95947266,"speaker":"A"},{"text":"miss","start":1401270,"end":1401470,"confidence":0.5654297,"speaker":"A"},{"text":"demo","start":1401470,"end":1401950,"confidence":0.7548828,"speaker":"A"},{"text":"database.","start":1401950,"end":1402630,"confidence":0.9996745,"speaker":"A"},{"text":"You","start":1402630,"end":1402870,"confidence":0.9995117,"speaker":"A"},{"text":"just","start":1402870,"end":1403030,"confidence":0.9995117,"speaker":"A"},{"text":"go","start":1403030,"end":1403230,"confidence":0.9995117,"speaker":"A"},{"text":"in","start":1403230,"end":1403430,"confidence":0.9995117,"speaker":"A"},{"text":"here","start":1403430,"end":1403710,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":1404270,"end":1404550,"confidence":0.99560547,"speaker":"A"},{"text":"you","start":1404550,"end":1404710,"confidence":0.99853516,"speaker":"A"},{"text":"can","start":1404710,"end":1404870,"confidence":0.99365234,"speaker":"A"},{"text":"go","start":1404870,"end":1404990,"confidence":1,"speaker":"A"},{"text":"to","start":1404990,"end":1405110,"confidence":0.9995117,"speaker":"A"},{"text":"tokens","start":1405110,"end":1405510,"confidence":0.99975586,"speaker":"A"},{"text":"and","start":1405510,"end":1405670,"confidence":0.9892578,"speaker":"A"},{"text":"keys","start":1405670,"end":1406070,"confidence":0.9992676,"speaker":"A"},{"text":"and","start":1406070,"end":1406310,"confidence":0.9975586,"speaker":"A"},{"text":"then","start":1406310,"end":1406470,"confidence":0.99902344,"speaker":"A"},{"text":"that","start":1406470,"end":1406630,"confidence":0.9995117,"speaker":"A"},{"text":"will","start":1406630,"end":1406790,"confidence":0.9995117,"speaker":"A"},{"text":"give","start":1406790,"end":1406950,"confidence":1,"speaker":"A"},{"text":"you","start":1406950,"end":1407150,"confidence":1,"speaker":"A"},{"text":"access","start":1407150,"end":1407470,"confidence":1,"speaker":"A"},{"text":"to","start":1407470,"end":1407750,"confidence":0.98339844,"speaker":"A"},{"text":"set","start":1407750,"end":1407950,"confidence":0.99658203,"speaker":"A"},{"text":"up","start":1407950,"end":1408270,"confidence":0.7631836,"speaker":"A"},{"text":"either","start":1408510,"end":1408990,"confidence":0.99975586,"speaker":"A"},{"text":"the","start":1408990,"end":1409390,"confidence":0.9995117,"speaker":"A"},{"text":"API","start":1409870,"end":1410550,"confidence":0.9995117,"speaker":"A"},{"text":"if","start":1410550,"end":1410750,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1410750,"end":1410870,"confidence":0.9243164,"speaker":"A"},{"text":"want","start":1410870,"end":1411030,"confidence":0.94921875,"speaker":"A"},{"text":"to","start":1411030,"end":1411150,"confidence":0.9980469,"speaker":"A"},{"text":"do","start":1411150,"end":1411390,"confidence":0.9970703,"speaker":"A"},{"text":"API","start":1411790,"end":1412430,"confidence":0.9926758,"speaker":"A"},{"text":"key","start":1412430,"end":1412830,"confidence":0.9995117,"speaker":"A"},{"text":"or","start":1412830,"end":1413110,"confidence":0.9980469,"speaker":"A"},{"text":"API","start":1413110,"end":1413470,"confidence":0.8027344,"speaker":"A"},{"text":"token","start":1413470,"end":1414030,"confidence":0.86376953,"speaker":"A"},{"text":"if","start":1414270,"end":1414550,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1414550,"end":1414710,"confidence":1,"speaker":"A"},{"text":"want","start":1414710,"end":1414830,"confidence":0.9394531,"speaker":"A"},{"text":"to","start":1414830,"end":1414910,"confidence":0.99902344,"speaker":"A"},{"text":"do","start":1414910,"end":1415070,"confidence":0.99902344,"speaker":"A"},{"text":"a","start":1415070,"end":1415270,"confidence":0.53125,"speaker":"A"},{"text":"private","start":1415270,"end":1415470,"confidence":1,"speaker":"A"},{"text":"database","start":1415470,"end":1416190,"confidence":0.9998372,"speaker":"A"},{"text":"or","start":1416190,"end":1416550,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":1416550,"end":1416790,"confidence":0.99853516,"speaker":"A"},{"text":"server","start":1416790,"end":1417109,"confidence":0.9946289,"speaker":"A"},{"text":"to","start":1417109,"end":1417310,"confidence":0.97753906,"speaker":"A"},{"text":"server","start":1417310,"end":1417630,"confidence":0.9992676,"speaker":"A"},{"text":"keyset","start":1417630,"end":1418190,"confidence":0.8388672,"speaker":"A"},{"text":"if","start":1418350,"end":1418630,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1418630,"end":1418750,"confidence":0.99902344,"speaker":"A"},{"text":"want","start":1418750,"end":1418870,"confidence":0.53808594,"speaker":"A"},{"text":"to","start":1418870,"end":1418990,"confidence":0.9951172,"speaker":"A"},{"text":"do","start":1418990,"end":1419150,"confidence":0.99902344,"speaker":"A"},{"text":"a","start":1419150,"end":1419310,"confidence":0.8515625,"speaker":"A"},{"text":"public","start":1419310,"end":1419470,"confidence":1,"speaker":"A"},{"text":"database.","start":1419470,"end":1420190,"confidence":0.9996745,"speaker":"A"},{"text":"So","start":1420190,"end":1420430,"confidence":0.98095703,"speaker":"A"},{"text":"let's","start":1420430,"end":1420590,"confidence":0.9998372,"speaker":"A"},{"text":"talk","start":1420590,"end":1420710,"confidence":0.99902344,"speaker":"A"},{"text":"about","start":1420710,"end":1420870,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":1420870,"end":1421030,"confidence":0.9980469,"speaker":"A"},{"text":"API","start":1421030,"end":1421430,"confidence":0.99902344,"speaker":"A"},{"text":"token.","start":1421430,"end":1421950,"confidence":0.9773763,"speaker":"A"},{"text":"Pretty","start":1422510,"end":1422870,"confidence":1,"speaker":"A"},{"text":"simple.","start":1422870,"end":1423310,"confidence":0.83935547,"speaker":"A"},{"text":"You","start":1423470,"end":1423750,"confidence":0.9995117,"speaker":"A"},{"text":"just","start":1423750,"end":1423870,"confidence":1,"speaker":"A"},{"text":"go","start":1423870,"end":1423990,"confidence":0.99609375,"speaker":"A"},{"text":"into","start":1423990,"end":1424190,"confidence":0.61572266,"speaker":"A"},{"text":"here,","start":1424190,"end":1424510,"confidence":0.9995117,"speaker":"A"},{"text":"click","start":1424750,"end":1425110,"confidence":0.9987793,"speaker":"A"},{"text":"the","start":1425110,"end":1425270,"confidence":0.9995117,"speaker":"A"},{"text":"plus","start":1425270,"end":1425550,"confidence":0.9980469,"speaker":"A"},{"text":"sign,","start":1425550,"end":1425870,"confidence":0.9980469,"speaker":"A"},{"text":"you","start":1426840,"end":1427000,"confidence":0.9980469,"speaker":"A"},{"text":"say","start":1427000,"end":1427200,"confidence":0.99853516,"speaker":"A"},{"text":"a","start":1427200,"end":1427320,"confidence":0.91064453,"speaker":"A"},{"text":"name","start":1427320,"end":1427560,"confidence":0.99609375,"speaker":"A"},{"text":"and","start":1428600,"end":1428920,"confidence":0.9975586,"speaker":"A"},{"text":"you","start":1428920,"end":1429120,"confidence":0.99902344,"speaker":"A"},{"text":"say","start":1429120,"end":1429280,"confidence":0.9980469,"speaker":"A"},{"text":"whether","start":1429280,"end":1429440,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1429440,"end":1429600,"confidence":1,"speaker":"A"},{"text":"want","start":1429600,"end":1429720,"confidence":0.99560547,"speaker":"A"},{"text":"to","start":1429720,"end":1429800,"confidence":0.99560547,"speaker":"A"},{"text":"do","start":1429800,"end":1429920,"confidence":0.99853516,"speaker":"A"},{"text":"a","start":1429920,"end":1430040,"confidence":0.9995117,"speaker":"A"},{"text":"post","start":1430040,"end":1430240,"confidence":0.9995117,"speaker":"A"},{"text":"message","start":1430240,"end":1430680,"confidence":0.99902344,"speaker":"A"},{"text":"or","start":1430680,"end":1430920,"confidence":0.9995117,"speaker":"A"},{"text":"URL","start":1430920,"end":1431440,"confidence":0.8330078,"speaker":"A"},{"text":"redirect.","start":1431440,"end":1432040,"confidence":1,"speaker":"A"},{"text":"We'll","start":1432280,"end":1432640,"confidence":0.9708659,"speaker":"A"},{"text":"get","start":1432640,"end":1432800,"confidence":1,"speaker":"A"},{"text":"into","start":1432800,"end":1432960,"confidence":1,"speaker":"A"},{"text":"that","start":1432960,"end":1433120,"confidence":1,"speaker":"A"},{"text":"in","start":1433120,"end":1433280,"confidence":0.8725586,"speaker":"A"},{"text":"a","start":1433280,"end":1433400,"confidence":0.99902344,"speaker":"A"},{"text":"little","start":1433400,"end":1433560,"confidence":0.9526367,"speaker":"A"},{"text":"bit","start":1433560,"end":1433760,"confidence":1,"speaker":"A"},{"text":"in","start":1433760,"end":1433920,"confidence":0.99609375,"speaker":"A"},{"text":"the","start":1433920,"end":1434040,"confidence":0.9995117,"speaker":"A"},{"text":"next","start":1434040,"end":1434200,"confidence":0.9995117,"speaker":"A"},{"text":"section.","start":1434200,"end":1434680,"confidence":0.9995117,"speaker":"A"},{"text":"And","start":1435960,"end":1436240,"confidence":0.98828125,"speaker":"A"},{"text":"then","start":1436240,"end":1436480,"confidence":0.89453125,"speaker":"A"},{"text":"whether","start":1436480,"end":1436760,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1436760,"end":1436960,"confidence":1,"speaker":"A"},{"text":"want","start":1436960,"end":1437120,"confidence":0.9975586,"speaker":"A"},{"text":"to","start":1437120,"end":1437280,"confidence":1,"speaker":"A"},{"text":"have","start":1437280,"end":1437560,"confidence":1,"speaker":"A"},{"text":"user","start":1437800,"end":1438280,"confidence":0.99902344,"speaker":"A"},{"text":"info","start":1438280,"end":1438760,"confidence":1,"speaker":"A"},{"text":"and","start":1438840,"end":1439240,"confidence":0.99609375,"speaker":"A"},{"text":"you","start":1439400,"end":1439720,"confidence":0.99609375,"speaker":"A"},{"text":"click","start":1439720,"end":1440040,"confidence":0.9995117,"speaker":"A"},{"text":"save","start":1440040,"end":1440360,"confidence":0.9987793,"speaker":"A"},{"text":"and","start":1440360,"end":1440640,"confidence":0.9326172,"speaker":"A"},{"text":"you'll","start":1440640,"end":1440920,"confidence":0.99934894,"speaker":"A"},{"text":"get","start":1440920,"end":1441040,"confidence":1,"speaker":"A"},{"text":"a","start":1441040,"end":1441160,"confidence":0.9995117,"speaker":"A"},{"text":"nice","start":1441160,"end":1441400,"confidence":0.99975586,"speaker":"A"},{"text":"little","start":1441400,"end":1441680,"confidence":0.9995117,"speaker":"A"},{"text":"API","start":1441680,"end":1442280,"confidence":0.86499023,"speaker":"A"},{"text":"token","start":1442519,"end":1442960,"confidence":0.9996745,"speaker":"A"},{"text":"you","start":1442960,"end":1443120,"confidence":0.9995117,"speaker":"A"},{"text":"could","start":1443120,"end":1443280,"confidence":0.9951172,"speaker":"A"},{"text":"use","start":1443280,"end":1443520,"confidence":1,"speaker":"A"},{"text":"in","start":1443520,"end":1443760,"confidence":0.99658203,"speaker":"A"},{"text":"your","start":1443760,"end":1444040,"confidence":0.9848633,"speaker":"A"},{"text":"web","start":1444120,"end":1444600,"confidence":0.99560547,"speaker":"A"},{"text":"your","start":1445240,"end":1445560,"confidence":0.9873047,"speaker":"A"},{"text":"web","start":1445560,"end":1445840,"confidence":0.9987793,"speaker":"A"},{"text":"calls","start":1445840,"end":1446160,"confidence":0.9831543,"speaker":"A"},{"text":"essentially.","start":1446160,"end":1446680,"confidence":0.9581299,"speaker":"A"},{"text":"API","start":1449000,"end":1449560,"confidence":0.8713379,"speaker":"A"},{"text":"doesn't","start":1449560,"end":1449800,"confidence":0.99886066,"speaker":"A"},{"text":"really.","start":1449800,"end":1450000,"confidence":0.9980469,"speaker":"A"},{"text":"The","start":1450000,"end":1450200,"confidence":0.88720703,"speaker":"A"},{"text":"API","start":1450200,"end":1450640,"confidence":0.954834,"speaker":"A"},{"text":"token","start":1450640,"end":1451000,"confidence":0.99934894,"speaker":"A"},{"text":"doesn't","start":1451000,"end":1451200,"confidence":0.9160156,"speaker":"A"},{"text":"really","start":1451200,"end":1451360,"confidence":0.9995117,"speaker":"A"},{"text":"give","start":1451360,"end":1451520,"confidence":1,"speaker":"A"},{"text":"you","start":1451520,"end":1451680,"confidence":0.99853516,"speaker":"A"},{"text":"a","start":1451680,"end":1451800,"confidence":0.99853516,"speaker":"A"},{"text":"lot","start":1451800,"end":1452040,"confidence":0.99560547,"speaker":"A"},{"text":"of.","start":1452100,"end":1452260,"confidence":0.515625,"speaker":"A"},{"text":"But","start":1452570,"end":1452690,"confidence":0.98535156,"speaker":"A"},{"text":"what","start":1452690,"end":1452850,"confidence":0.99658203,"speaker":"A"},{"text":"it","start":1452850,"end":1452970,"confidence":0.9902344,"speaker":"A"},{"text":"does","start":1452970,"end":1453130,"confidence":0.9980469,"speaker":"A"},{"text":"give","start":1453130,"end":1453290,"confidence":0.99853516,"speaker":"A"},{"text":"you","start":1453290,"end":1453410,"confidence":0.99853516,"speaker":"A"},{"text":"is","start":1453410,"end":1453570,"confidence":0.98779297,"speaker":"A"},{"text":"it","start":1453570,"end":1453690,"confidence":0.9951172,"speaker":"A"},{"text":"gives","start":1453690,"end":1453890,"confidence":0.9733887,"speaker":"A"},{"text":"you","start":1453890,"end":1454010,"confidence":1,"speaker":"A"},{"text":"an","start":1454010,"end":1454170,"confidence":1,"speaker":"A"},{"text":"entry","start":1454170,"end":1454530,"confidence":0.99975586,"speaker":"A"},{"text":"to","start":1454530,"end":1454850,"confidence":1,"speaker":"A"},{"text":"get","start":1454850,"end":1455130,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":1455130,"end":1455330,"confidence":0.9995117,"speaker":"A"},{"text":"web","start":1455330,"end":1455570,"confidence":1,"speaker":"A"},{"text":"authentication","start":1455570,"end":1456250,"confidence":0.8823242,"speaker":"A"},{"text":"token","start":1456250,"end":1456610,"confidence":0.9998372,"speaker":"A"},{"text":"for","start":1456610,"end":1456770,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":1456770,"end":1456930,"confidence":0.48901367,"speaker":"A"},{"text":"user.","start":1456930,"end":1457450,"confidence":0.99902344,"speaker":"A"},{"text":"So","start":1457850,"end":1458130,"confidence":0.99121094,"speaker":"A"},{"text":"basically","start":1458130,"end":1458570,"confidence":0.99853516,"speaker":"A"},{"text":"the","start":1458730,"end":1459010,"confidence":1,"speaker":"A"},{"text":"way","start":1459010,"end":1459210,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":1459210,"end":1459450,"confidence":1,"speaker":"A"},{"text":"works.","start":1459450,"end":1459930,"confidence":0.99731445,"speaker":"A"},{"text":"So","start":1460970,"end":1461370,"confidence":0.9580078,"speaker":"A"},{"text":"you'll","start":1461450,"end":1461810,"confidence":0.93896484,"speaker":"A"},{"text":"notice","start":1461810,"end":1462170,"confidence":0.99975586,"speaker":"A"},{"text":"here,","start":1462170,"end":1462490,"confidence":0.99902344,"speaker":"A"},{"text":"when","start":1463050,"end":1463370,"confidence":0.9941406,"speaker":"A"},{"text":"we","start":1463370,"end":1463570,"confidence":0.9995117,"speaker":"A"},{"text":"were","start":1463570,"end":1463770,"confidence":0.99853516,"speaker":"A"},{"text":"in","start":1463770,"end":1463970,"confidence":1,"speaker":"A"},{"text":"this","start":1463970,"end":1464250,"confidence":0.9995117,"speaker":"A"},{"text":"section,","start":1464330,"end":1464890,"confidence":0.99975586,"speaker":"A"},{"text":"we","start":1467050,"end":1467330,"confidence":0.9980469,"speaker":"A"},{"text":"have","start":1467330,"end":1467490,"confidence":0.9995117,"speaker":"A"},{"text":"this","start":1467490,"end":1467690,"confidence":1,"speaker":"A"},{"text":"piece","start":1467690,"end":1467970,"confidence":0.9998372,"speaker":"A"},{"text":"here","start":1467970,"end":1468250,"confidence":0.99902344,"speaker":"A"},{"text":"called","start":1468250,"end":1468569,"confidence":0.99902344,"speaker":"A"},{"text":"Sign","start":1468569,"end":1468770,"confidence":0.9926758,"speaker":"A"},{"text":"in","start":1468770,"end":1468970,"confidence":0.48339844,"speaker":"A"},{"text":"Callback.","start":1468970,"end":1469610,"confidence":0.9967448,"speaker":"A"},{"text":"So","start":1469770,"end":1470170,"confidence":0.9580078,"speaker":"A"},{"text":"you","start":1470330,"end":1470650,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":1470650,"end":1470930,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":1470930,"end":1471250,"confidence":0.98291016,"speaker":"A"},{"text":"either","start":1471250,"end":1471690,"confidence":1,"speaker":"A"},{"text":"call","start":1471690,"end":1472010,"confidence":0.9741211,"speaker":"A"},{"text":"a","start":1472010,"end":1472210,"confidence":0.96875,"speaker":"A"},{"text":"JavaScript,","start":1472210,"end":1472970,"confidence":0.9967448,"speaker":"A"},{"text":"it's","start":1473370,"end":1473730,"confidence":0.99593097,"speaker":"A"},{"text":"called","start":1473730,"end":1473930,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":1473930,"end":1474130,"confidence":0.9794922,"speaker":"A"},{"text":"message","start":1474130,"end":1474530,"confidence":0.9980469,"speaker":"A"},{"text":"event,","start":1474530,"end":1474810,"confidence":0.9897461,"speaker":"A"},{"text":"it","start":1475610,"end":1475890,"confidence":0.9941406,"speaker":"A"},{"text":"will","start":1475890,"end":1476090,"confidence":0.82177734,"speaker":"A"},{"text":"call","start":1476090,"end":1476330,"confidence":0.6923828,"speaker":"A"},{"text":"a","start":1476330,"end":1476530,"confidence":0.90625,"speaker":"A"},{"text":"Message","start":1476530,"end":1476850,"confidence":0.99902344,"speaker":"A"},{"text":"event","start":1476850,"end":1477090,"confidence":0.9897461,"speaker":"A"},{"text":"and","start":1477090,"end":1477450,"confidence":0.97265625,"speaker":"A"},{"text":"a","start":1477450,"end":1477730,"confidence":0.8847656,"speaker":"A"},{"text":"message","start":1477730,"end":1478050,"confidence":0.9987793,"speaker":"A"},{"text":"event","start":1478050,"end":1478250,"confidence":0.9951172,"speaker":"A"},{"text":"will","start":1478250,"end":1478450,"confidence":0.9921875,"speaker":"A"},{"text":"have","start":1478450,"end":1478610,"confidence":1,"speaker":"A"},{"text":"the","start":1478610,"end":1478730,"confidence":0.9975586,"speaker":"A"},{"text":"metadata","start":1478730,"end":1479250,"confidence":0.99886066,"speaker":"A"},{"text":"with","start":1479250,"end":1479410,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1479410,"end":1479530,"confidence":0.99560547,"speaker":"A"},{"text":"web","start":1479530,"end":1479730,"confidence":0.9992676,"speaker":"A"},{"text":"authentication","start":1479730,"end":1480410,"confidence":0.99975586,"speaker":"A"},{"text":"token","start":1480410,"end":1480770,"confidence":0.9998372,"speaker":"A"},{"text":"of","start":1480770,"end":1480930,"confidence":0.99902344,"speaker":"A"},{"text":"that","start":1480930,"end":1481090,"confidence":0.99902344,"speaker":"A"},{"text":"user.","start":1481090,"end":1481530,"confidence":0.99902344,"speaker":"A"},{"text":"Or","start":1482410,"end":1482530,"confidence":0.9902344,"speaker":"A"},{"text":"you","start":1482530,"end":1482650,"confidence":0.7363281,"speaker":"A"},{"text":"could","start":1482650,"end":1482770,"confidence":0.99072266,"speaker":"A"},{"text":"do","start":1482770,"end":1482930,"confidence":0.9946289,"speaker":"A"},{"text":"URL","start":1482930,"end":1483450,"confidence":0.99658203,"speaker":"A"},{"text":"redirect","start":1483450,"end":1484090,"confidence":0.99975586,"speaker":"A"},{"text":"where","start":1484170,"end":1484570,"confidence":0.99121094,"speaker":"A"},{"text":"on","start":1484810,"end":1485210,"confidence":0.8457031,"speaker":"A"},{"text":"authentication","start":1485290,"end":1486050,"confidence":0.99975586,"speaker":"A"},{"text":"the","start":1486050,"end":1486290,"confidence":0.9975586,"speaker":"A"},{"text":"user","start":1486290,"end":1486730,"confidence":0.99975586,"speaker":"A"},{"text":"has","start":1486970,"end":1487250,"confidence":0.99902344,"speaker":"A"},{"text":"a","start":1487250,"end":1487410,"confidence":0.9975586,"speaker":"A"},{"text":"URL","start":1487410,"end":1487930,"confidence":0.998291,"speaker":"A"},{"text":"and","start":1487930,"end":1488130,"confidence":0.99609375,"speaker":"A"},{"text":"then","start":1488130,"end":1488290,"confidence":0.9560547,"speaker":"A"},{"text":"part","start":1488290,"end":1488450,"confidence":1,"speaker":"A"},{"text":"of","start":1488450,"end":1488570,"confidence":1,"speaker":"A"},{"text":"that","start":1488570,"end":1488690,"confidence":0.9995117,"speaker":"A"},{"text":"URL","start":1488690,"end":1489170,"confidence":0.9980469,"speaker":"A"},{"text":"is","start":1489170,"end":1489330,"confidence":0.99609375,"speaker":"A"},{"text":"then","start":1489330,"end":1489530,"confidence":0.98291016,"speaker":"A"},{"text":"having","start":1489530,"end":1489850,"confidence":0.99658203,"speaker":"A"},{"text":"part","start":1490650,"end":1490930,"confidence":0.9921875,"speaker":"A"},{"text":"of","start":1490930,"end":1491090,"confidence":0.99853516,"speaker":"A"},{"text":"one","start":1491090,"end":1491210,"confidence":0.9995117,"speaker":"A"},{"text":"of","start":1491210,"end":1491290,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1491290,"end":1491370,"confidence":1,"speaker":"A"},{"text":"query","start":1491370,"end":1491690,"confidence":0.8486328,"speaker":"A"},{"text":"parameters","start":1491770,"end":1492570,"confidence":0.8824463,"speaker":"A"},{"text":"and","start":1492570,"end":1492850,"confidence":0.9814453,"speaker":"A"},{"text":"we'll","start":1492850,"end":1493050,"confidence":0.99934894,"speaker":"A"},{"text":"get","start":1493050,"end":1493130,"confidence":1,"speaker":"A"},{"text":"into","start":1493130,"end":1493290,"confidence":0.99902344,"speaker":"A"},{"text":"that.","start":1493290,"end":1493610,"confidence":0.9975586,"speaker":"A"},{"text":"We'll","start":1494250,"end":1494570,"confidence":0.89176434,"speaker":"A"},{"text":"then","start":1494570,"end":1494690,"confidence":0.9980469,"speaker":"A"},{"text":"have","start":1494690,"end":1494850,"confidence":1,"speaker":"A"},{"text":"the","start":1494850,"end":1495010,"confidence":0.9980469,"speaker":"A"},{"text":"web","start":1495010,"end":1495250,"confidence":0.9904785,"speaker":"A"},{"text":"authentication","start":1495250,"end":1495810,"confidence":0.9975586,"speaker":"A"},{"text":"token","start":1495810,"end":1496130,"confidence":0.9996745,"speaker":"A"},{"text":"in","start":1496130,"end":1496290,"confidence":0.99560547,"speaker":"A"},{"text":"the","start":1496290,"end":1496450,"confidence":1,"speaker":"A"},{"text":"URL.","start":1496450,"end":1497050,"confidence":0.99731445,"speaker":"A"},{"text":"So","start":1498570,"end":1498970,"confidence":0.9921875,"speaker":"A"},{"text":"you","start":1499050,"end":1499330,"confidence":0.9794922,"speaker":"A"},{"text":"put,","start":1499330,"end":1499610,"confidence":0.9970703,"speaker":"A"},{"text":"basically","start":1500010,"end":1500410,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1500410,"end":1500570,"confidence":0.71972656,"speaker":"A"},{"text":"have","start":1500570,"end":1500690,"confidence":0.99853516,"speaker":"A"},{"text":"your","start":1500690,"end":1500850,"confidence":1,"speaker":"A"},{"text":"website,","start":1500850,"end":1501130,"confidence":0.9980469,"speaker":"A"},{"text":"you","start":1501450,"end":1501850,"confidence":0.9995117,"speaker":"A"},{"text":"add","start":1501850,"end":1502130,"confidence":0.9980469,"speaker":"A"},{"text":"the","start":1502130,"end":1502290,"confidence":0.9995117,"speaker":"A"},{"text":"JavaScript,","start":1502290,"end":1503050,"confidence":0.9950358,"speaker":"A"},{"text":"you","start":1503210,"end":1503490,"confidence":0.99658203,"speaker":"A"},{"text":"need","start":1503490,"end":1503770,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":1504330,"end":1504730,"confidence":0.99902344,"speaker":"A"},{"text":"add","start":1504970,"end":1505330,"confidence":0.9892578,"speaker":"A"},{"text":"the","start":1505330,"end":1505570,"confidence":0.9975586,"speaker":"A"},{"text":"sign","start":1505570,"end":1505770,"confidence":0.99902344,"speaker":"A"},{"text":"in","start":1505770,"end":1505970,"confidence":0.99609375,"speaker":"A"},{"text":"with","start":1505970,"end":1506170,"confidence":1,"speaker":"A"},{"text":"Apple.","start":1506170,"end":1506650,"confidence":0.9987793,"speaker":"A"},{"text":"Oh,","start":1506970,"end":1507330,"confidence":0.8078613,"speaker":"A"},{"text":"here's","start":1507330,"end":1507650,"confidence":0.9991862,"speaker":"A"},{"text":"Josh.","start":1507650,"end":1508010,"confidence":0.9987793,"speaker":"A"},{"text":"Oh","start":1514310,"end":1514510,"confidence":0.9213867,"speaker":"A"},{"text":"cool.","start":1514510,"end":1514870,"confidence":0.99902344,"speaker":"A"},{"text":"Josh,","start":1514870,"end":1515350,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1515350,"end":1515590,"confidence":0.97265625,"speaker":"A"},{"text":"there?","start":1515590,"end":1515910,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":1518790,"end":1519110,"confidence":0.99853516,"speaker":"C"},{"text":"hope","start":1519110,"end":1519390,"confidence":1,"speaker":"C"},{"text":"so.","start":1519390,"end":1519750,"confidence":0.99902344,"speaker":"C"},{"text":"Good.","start":1520710,"end":1521070,"confidence":0.9868164,"speaker":"A"},{"text":"Okay.","start":1521070,"end":1521590,"confidence":0.97753906,"speaker":"A"},{"text":"Hey,","start":1521750,"end":1522110,"confidence":0.9992676,"speaker":"A"},{"text":"we","start":1522110,"end":1522230,"confidence":0.99902344,"speaker":"A"},{"text":"were","start":1522230,"end":1522350,"confidence":0.51660156,"speaker":"A"},{"text":"just","start":1522350,"end":1522510,"confidence":1,"speaker":"A"},{"text":"talking","start":1522510,"end":1522750,"confidence":0.99975586,"speaker":"A"},{"text":"about","start":1522750,"end":1522990,"confidence":0.9970703,"speaker":"A"},{"text":"how","start":1522990,"end":1523230,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":1523230,"end":1523430,"confidence":0.9902344,"speaker":"A"},{"text":"set","start":1523430,"end":1523630,"confidence":1,"speaker":"A"},{"text":"up.","start":1523630,"end":1523790,"confidence":0.984375,"speaker":"A"},{"text":"I'm","start":1523790,"end":1523990,"confidence":0.9970703,"speaker":"A"},{"text":"going","start":1523990,"end":1524070,"confidence":0.5854492,"speaker":"A"},{"text":"to","start":1524070,"end":1524150,"confidence":0.9951172,"speaker":"A"},{"text":"go","start":1524150,"end":1524269,"confidence":0.9975586,"speaker":"A"},{"text":"back","start":1524269,"end":1524429,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":1524429,"end":1524550,"confidence":0.99902344,"speaker":"A"},{"text":"little","start":1524550,"end":1524630,"confidence":1,"speaker":"A"},{"text":"bit","start":1524630,"end":1524750,"confidence":0.99853516,"speaker":"A"},{"text":"Evan,","start":1524750,"end":1525190,"confidence":0.86279297,"speaker":"A"},{"text":"but","start":1525510,"end":1525790,"confidence":0.98535156,"speaker":"A"},{"text":"not","start":1525790,"end":1525950,"confidence":0.99316406,"speaker":"A"},{"text":"too","start":1525950,"end":1526110,"confidence":0.9980469,"speaker":"A"},{"text":"far","start":1526110,"end":1526310,"confidence":1,"speaker":"A"},{"text":"back.","start":1526310,"end":1526630,"confidence":0.99853516,"speaker":"A"},{"text":"Yeah,","start":1527110,"end":1527430,"confidence":0.9895833,"speaker":"B"},{"text":"no","start":1527430,"end":1527550,"confidence":0.9824219,"speaker":"B"},{"text":"worries.","start":1527550,"end":1527910,"confidence":0.998291,"speaker":"B"},{"text":"That's","start":1527990,"end":1528310,"confidence":0.99625653,"speaker":"A"},{"text":"okay.","start":1528310,"end":1528710,"confidence":0.9635417,"speaker":"A"},{"text":"But","start":1530470,"end":1530750,"confidence":0.9370117,"speaker":"A"},{"text":"we","start":1530750,"end":1530910,"confidence":0.9995117,"speaker":"A"},{"text":"talked","start":1530910,"end":1531110,"confidence":0.97265625,"speaker":"A"},{"text":"about","start":1531110,"end":1531270,"confidence":0.9980469,"speaker":"A"},{"text":"setting","start":1531270,"end":1531510,"confidence":0.9995117,"speaker":"A"},{"text":"up","start":1531510,"end":1531750,"confidence":0.99902344,"speaker":"A"},{"text":"API","start":1531830,"end":1532390,"confidence":0.9980469,"speaker":"A"},{"text":"token","start":1532390,"end":1532950,"confidence":1,"speaker":"A"},{"text":"and","start":1533270,"end":1533590,"confidence":0.9946289,"speaker":"A"},{"text":"how","start":1533590,"end":1533790,"confidence":1,"speaker":"A"},{"text":"to","start":1533790,"end":1533910,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":1533910,"end":1534030,"confidence":1,"speaker":"A"},{"text":"that.","start":1534030,"end":1534310,"confidence":0.9995117,"speaker":"A"},{"text":"So","start":1535910,"end":1536150,"confidence":0.9707031,"speaker":"A"},{"text":"you","start":1536950,"end":1537350,"confidence":0.9169922,"speaker":"A"},{"text":"go","start":1537430,"end":1537710,"confidence":0.99072266,"speaker":"A"},{"text":"in","start":1537710,"end":1537870,"confidence":0.9941406,"speaker":"A"},{"text":"here,","start":1537870,"end":1538150,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1538150,"end":1538430,"confidence":0.9819336,"speaker":"A"},{"text":"just","start":1538430,"end":1538550,"confidence":0.9970703,"speaker":"A"},{"text":"click","start":1538550,"end":1538790,"confidence":0.9995117,"speaker":"A"},{"text":"plus,","start":1538790,"end":1539110,"confidence":0.9655762,"speaker":"A"},{"text":"you","start":1539110,"end":1539350,"confidence":0.9897461,"speaker":"A"},{"text":"select","start":1539350,"end":1539630,"confidence":0.9995117,"speaker":"A"},{"text":"your","start":1539630,"end":1539790,"confidence":0.9975586,"speaker":"A"},{"text":"sign","start":1539790,"end":1539990,"confidence":0.99658203,"speaker":"A"},{"text":"in","start":1539990,"end":1540190,"confidence":0.9428711,"speaker":"A"},{"text":"callback","start":1540190,"end":1540710,"confidence":0.9742839,"speaker":"A"},{"text":"and","start":1540710,"end":1540950,"confidence":0.99365234,"speaker":"A"},{"text":"you","start":1540950,"end":1541150,"confidence":0.98828125,"speaker":"A"},{"text":"put","start":1541150,"end":1541310,"confidence":1,"speaker":"A"},{"text":"in","start":1541310,"end":1541470,"confidence":0.9379883,"speaker":"A"},{"text":"a","start":1541470,"end":1541670,"confidence":0.9404297,"speaker":"A"},{"text":"name","start":1541670,"end":1541990,"confidence":0.99902344,"speaker":"A"},{"text":"and","start":1542630,"end":1542910,"confidence":0.90283203,"speaker":"A"},{"text":"it'll","start":1542910,"end":1543150,"confidence":0.84277344,"speaker":"A"},{"text":"give","start":1543150,"end":1543310,"confidence":1,"speaker":"A"},{"text":"you","start":1543310,"end":1543590,"confidence":0.9995117,"speaker":"A"},{"text":"an","start":1543750,"end":1544030,"confidence":0.9770508,"speaker":"A"},{"text":"API","start":1544030,"end":1544470,"confidence":0.8105469,"speaker":"A"},{"text":"token","start":1544470,"end":1544950,"confidence":0.9941406,"speaker":"A"},{"text":"once","start":1544950,"end":1545150,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":1545150,"end":1545310,"confidence":0.9995117,"speaker":"A"},{"text":"click","start":1545310,"end":1545550,"confidence":0.99975586,"speaker":"A"},{"text":"save.","start":1545550,"end":1545830,"confidence":0.9980469,"speaker":"A"},{"text":"Basically.","start":1545830,"end":1546310,"confidence":0.9953613,"speaker":"A"},{"text":"Come","start":1550549,"end":1550870,"confidence":0.9658203,"speaker":"A"},{"text":"on.","start":1550870,"end":1551190,"confidence":0.99853516,"speaker":"A"},{"text":"The","start":1554470,"end":1554710,"confidence":0.9975586,"speaker":"A"},{"text":"reason","start":1554710,"end":1554910,"confidence":1,"speaker":"A"},{"text":"you","start":1554910,"end":1555150,"confidence":0.84814453,"speaker":"A"},{"text":"want","start":1555150,"end":1555310,"confidence":0.99902344,"speaker":"A"},{"text":"an","start":1555310,"end":1555470,"confidence":0.99658203,"speaker":"A"},{"text":"API","start":1555470,"end":1555830,"confidence":0.79589844,"speaker":"A"},{"text":"token","start":1555830,"end":1556190,"confidence":0.9998372,"speaker":"A"},{"text":"is","start":1556190,"end":1556390,"confidence":0.9941406,"speaker":"A"},{"text":"this","start":1556390,"end":1556590,"confidence":0.99902344,"speaker":"A"},{"text":"allows","start":1556590,"end":1556990,"confidence":0.99975586,"speaker":"A"},{"text":"you","start":1556990,"end":1557190,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":1557190,"end":1557390,"confidence":0.9946289,"speaker":"A"},{"text":"then","start":1557390,"end":1557670,"confidence":0.95654297,"speaker":"A"},{"text":"have","start":1558550,"end":1558830,"confidence":0.9995117,"speaker":"A"},{"text":"users","start":1558830,"end":1559350,"confidence":0.99886066,"speaker":"A"},{"text":"Sign","start":1559350,"end":1559670,"confidence":1,"speaker":"A"},{"text":"in","start":1559670,"end":1559990,"confidence":0.9448242,"speaker":"A"},{"text":"to","start":1559990,"end":1560390,"confidence":0.9980469,"speaker":"A"},{"text":"CloudKit","start":1560390,"end":1561190,"confidence":0.97046,"speaker":"A"},{"text":"either","start":1562820,"end":1563060,"confidence":0.99902344,"speaker":"A"},{"text":"using,","start":1563060,"end":1563380,"confidence":0.9873047,"speaker":"A"},{"text":"using","start":1565140,"end":1565500,"confidence":1,"speaker":"A"},{"text":"the","start":1565500,"end":1565860,"confidence":0.9794922,"speaker":"A"},{"text":"the","start":1566420,"end":1566700,"confidence":0.99853516,"speaker":"A"},{"text":"web","start":1566700,"end":1567060,"confidence":0.99975586,"speaker":"A"},{"text":"service","start":1567140,"end":1567540,"confidence":0.9995117,"speaker":"A"},{"text":"like","start":1567620,"end":1567940,"confidence":0.9995117,"speaker":"A"},{"text":"Curl","start":1567940,"end":1568580,"confidence":0.8334961,"speaker":"A"},{"text":"or","start":1568900,"end":1569300,"confidence":1,"speaker":"A"},{"text":"you","start":1569300,"end":1569580,"confidence":0.9995117,"speaker":"A"},{"text":"could","start":1569580,"end":1569820,"confidence":0.99609375,"speaker":"A"},{"text":"also","start":1569820,"end":1570140,"confidence":1,"speaker":"A"},{"text":"do","start":1570140,"end":1570380,"confidence":1,"speaker":"A"},{"text":"it","start":1570380,"end":1570540,"confidence":1,"speaker":"A"},{"text":"through","start":1570540,"end":1570700,"confidence":1,"speaker":"A"},{"text":"a","start":1570700,"end":1570860,"confidence":1,"speaker":"A"},{"text":"website","start":1570860,"end":1571100,"confidence":0.9995117,"speaker":"A"},{"text":"using","start":1571100,"end":1571380,"confidence":0.9995117,"speaker":"A"},{"text":"CloudKit","start":1571380,"end":1571980,"confidence":0.998291,"speaker":"A"},{"text":"js.","start":1571980,"end":1572500,"confidence":0.83740234,"speaker":"A"},{"text":"So","start":1573780,"end":1574180,"confidence":0.99560547,"speaker":"A"},{"text":"web","start":1574420,"end":1574820,"confidence":0.97021484,"speaker":"A"},{"text":"authentication","start":1574820,"end":1575500,"confidence":0.9995117,"speaker":"A"},{"text":"token","start":1575500,"end":1576100,"confidence":0.9991862,"speaker":"A"},{"text":"we","start":1576100,"end":1576420,"confidence":0.9995117,"speaker":"A"},{"text":"talked","start":1576420,"end":1576700,"confidence":0.99975586,"speaker":"A"},{"text":"about","start":1576700,"end":1576900,"confidence":0.99902344,"speaker":"A"},{"text":"how","start":1576900,"end":1577219,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1577219,"end":1577460,"confidence":1,"speaker":"A"},{"text":"can","start":1577460,"end":1577539,"confidence":1,"speaker":"A"},{"text":"either","start":1577539,"end":1577740,"confidence":1,"speaker":"A"},{"text":"do","start":1577740,"end":1577900,"confidence":1,"speaker":"A"},{"text":"the","start":1577900,"end":1578060,"confidence":1,"speaker":"A"},{"text":"post","start":1578060,"end":1578300,"confidence":1,"speaker":"A"},{"text":"message","start":1578300,"end":1578780,"confidence":0.9995117,"speaker":"A"},{"text":"or","start":1578780,"end":1578980,"confidence":0.8930664,"speaker":"A"},{"text":"you","start":1578980,"end":1579140,"confidence":0.99902344,"speaker":"A"},{"text":"can","start":1579140,"end":1579260,"confidence":0.99853516,"speaker":"A"},{"text":"do","start":1579260,"end":1579380,"confidence":1,"speaker":"A"},{"text":"the","start":1579380,"end":1579500,"confidence":0.99853516,"speaker":"A"},{"text":"URL","start":1579500,"end":1579860,"confidence":0.77905273,"speaker":"A"},{"text":"redirect.","start":1579860,"end":1580420,"confidence":0.99975586,"speaker":"A"},{"text":"Basically","start":1581140,"end":1581700,"confidence":0.99975586,"speaker":"A"},{"text":"you","start":1581700,"end":1582100,"confidence":1,"speaker":"A"},{"text":"have","start":1582100,"end":1582380,"confidence":1,"speaker":"A"},{"text":"the","start":1582380,"end":1582540,"confidence":0.99121094,"speaker":"A"},{"text":"JavaScript","start":1582540,"end":1583020,"confidence":0.9979655,"speaker":"A"},{"text":"on","start":1583020,"end":1583180,"confidence":1,"speaker":"A"},{"text":"your","start":1583180,"end":1583380,"confidence":1,"speaker":"A"},{"text":"website","start":1583380,"end":1583700,"confidence":0.9951172,"speaker":"A"},{"text":"and","start":1584820,"end":1585180,"confidence":0.9980469,"speaker":"A"},{"text":"there","start":1585180,"end":1585420,"confidence":0.58447266,"speaker":"A"},{"text":"has","start":1585420,"end":1585580,"confidence":0.8017578,"speaker":"A"},{"text":"a","start":1585580,"end":1585700,"confidence":1,"speaker":"A"},{"text":"button,","start":1585700,"end":1585980,"confidence":0.998291,"speaker":"A"},{"text":"click","start":1585980,"end":1586260,"confidence":0.99975586,"speaker":"A"},{"text":"the","start":1586260,"end":1586380,"confidence":0.9995117,"speaker":"A"},{"text":"button,","start":1586380,"end":1586620,"confidence":0.99975586,"speaker":"A"},{"text":"you","start":1586620,"end":1586740,"confidence":0.99853516,"speaker":"A"},{"text":"get","start":1586740,"end":1586860,"confidence":0.99560547,"speaker":"A"},{"text":"this","start":1586860,"end":1587020,"confidence":0.9995117,"speaker":"A"},{"text":"nice","start":1587020,"end":1587260,"confidence":0.99975586,"speaker":"A"},{"text":"little","start":1587260,"end":1587460,"confidence":0.9995117,"speaker":"A"},{"text":"window","start":1587460,"end":1587820,"confidence":0.99975586,"speaker":"A"},{"text":"here","start":1587820,"end":1588100,"confidence":0.9951172,"speaker":"A"},{"text":"sign","start":1588780,"end":1588940,"confidence":0.95947266,"speaker":"A"},{"text":"in","start":1588940,"end":1589260,"confidence":0.99072266,"speaker":"A"},{"text":"and","start":1590860,"end":1591140,"confidence":0.9550781,"speaker":"A"},{"text":"then","start":1591140,"end":1591420,"confidence":0.9970703,"speaker":"A"},{"text":"when","start":1591820,"end":1592100,"confidence":1,"speaker":"A"},{"text":"you","start":1592100,"end":1592300,"confidence":0.9995117,"speaker":"A"},{"text":"sign","start":1592300,"end":1592540,"confidence":0.9995117,"speaker":"A"},{"text":"in","start":1592540,"end":1592820,"confidence":0.98583984,"speaker":"A"},{"text":"if","start":1592820,"end":1593060,"confidence":0.9980469,"speaker":"A"},{"text":"you","start":1593060,"end":1593340,"confidence":0.9995117,"speaker":"A"},{"text":"had","start":1593340,"end":1593660,"confidence":0.9121094,"speaker":"A"},{"text":"selected","start":1593660,"end":1594060,"confidence":0.9992676,"speaker":"A"},{"text":"post","start":1594060,"end":1594380,"confidence":0.9975586,"speaker":"A"},{"text":"message,","start":1594380,"end":1595020,"confidence":0.984375,"speaker":"A"},{"text":"you'll","start":1595340,"end":1595700,"confidence":0.9923503,"speaker":"A"},{"text":"get","start":1595700,"end":1595860,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1595860,"end":1596020,"confidence":0.9995117,"speaker":"A"},{"text":"web","start":1596020,"end":1596260,"confidence":0.9992676,"speaker":"A"},{"text":"authentication","start":1596260,"end":1597020,"confidence":0.96813965,"speaker":"A"},{"text":"token","start":1597020,"end":1597540,"confidence":0.9998372,"speaker":"A"},{"text":"and","start":1597540,"end":1597820,"confidence":0.5283203,"speaker":"A"},{"text":"the","start":1597820,"end":1598020,"confidence":0.9995117,"speaker":"A"},{"text":"data","start":1598020,"end":1598260,"confidence":0.9995117,"speaker":"A"},{"text":"of","start":1598260,"end":1598500,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1598500,"end":1598660,"confidence":0.9995117,"speaker":"A"},{"text":"event","start":1598660,"end":1598940,"confidence":0.99853516,"speaker":"A"},{"text":"in","start":1598940,"end":1599260,"confidence":0.9291992,"speaker":"A"},{"text":"JavaScript","start":1599260,"end":1600060,"confidence":0.99348956,"speaker":"A"},{"text":"or","start":1600540,"end":1600900,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":1600900,"end":1601140,"confidence":0.9995117,"speaker":"A"},{"text":"will","start":1601140,"end":1601300,"confidence":0.87109375,"speaker":"A"},{"text":"get","start":1601300,"end":1601460,"confidence":1,"speaker":"A"},{"text":"the","start":1601460,"end":1601580,"confidence":0.9995117,"speaker":"A"},{"text":"web","start":1601580,"end":1601780,"confidence":0.9980469,"speaker":"A"},{"text":"authentication","start":1601780,"end":1602460,"confidence":0.8979492,"speaker":"A"},{"text":"token","start":1602460,"end":1602860,"confidence":0.9996745,"speaker":"A"},{"text":"as","start":1602860,"end":1603060,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":1603060,"end":1603220,"confidence":0.98779297,"speaker":"A"},{"text":"URL","start":1603220,"end":1603820,"confidence":0.86157227,"speaker":"A"},{"text":"in","start":1604300,"end":1604579,"confidence":0.99853516,"speaker":"A"},{"text":"the","start":1604579,"end":1604739,"confidence":1,"speaker":"A"},{"text":"callback","start":1604739,"end":1605260,"confidence":0.9983724,"speaker":"A"},{"text":"URL","start":1605260,"end":1605780,"confidence":0.8745117,"speaker":"A"},{"text":"here.","start":1605780,"end":1606140,"confidence":0.9975586,"speaker":"A"},{"text":"Does","start":1606780,"end":1607060,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":1607060,"end":1607220,"confidence":0.9995117,"speaker":"A"},{"text":"make","start":1607220,"end":1607420,"confidence":0.9926758,"speaker":"A"},{"text":"sense?","start":1607420,"end":1607820,"confidence":0.9995117,"speaker":"A"},{"text":"Yep.","start":1610860,"end":1611420,"confidence":0.7561035,"speaker":"B"},{"text":"Yeah.","start":1612220,"end":1612860,"confidence":0.94124347,"speaker":"A"},{"text":"In","start":1613420,"end":1613740,"confidence":0.9975586,"speaker":"A"},{"text":"some","start":1613740,"end":1613940,"confidence":1,"speaker":"A"},{"text":"cases","start":1613940,"end":1614220,"confidence":0.9995117,"speaker":"A"},{"text":"if","start":1614380,"end":1614660,"confidence":0.99853516,"speaker":"A"},{"text":"you","start":1614660,"end":1614940,"confidence":1,"speaker":"A"},{"text":"scour","start":1615180,"end":1615620,"confidence":0.9921875,"speaker":"A"},{"text":"the","start":1615620,"end":1615860,"confidence":0.9995117,"speaker":"A"},{"text":"Internet","start":1615860,"end":1616295,"confidence":0.99780273,"speaker":"A"},{"text":"so","start":1616295,"end":1616450,"confidence":0.37280273,"speaker":"A"},{"text":"Stack","start":1616520,"end":1616720,"confidence":0.94799805,"speaker":"A"},{"text":"overflow","start":1616720,"end":1617120,"confidence":0.9749756,"speaker":"A"},{"text":"will","start":1617120,"end":1617280,"confidence":0.9916992,"speaker":"A"},{"text":"tell","start":1617280,"end":1617440,"confidence":1,"speaker":"A"},{"text":"you","start":1617440,"end":1617600,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":1617600,"end":1617800,"confidence":0.99658203,"speaker":"A"},{"text":"this","start":1617800,"end":1618000,"confidence":0.99902344,"speaker":"A"},{"text":"has","start":1618000,"end":1618200,"confidence":0.9765625,"speaker":"A"},{"text":"happened","start":1618200,"end":1618520,"confidence":0.99975586,"speaker":"A"},{"text":"to","start":1618520,"end":1618640,"confidence":0.9995117,"speaker":"A"},{"text":"me","start":1618640,"end":1618920,"confidence":0.9995117,"speaker":"A"},{"text":"sometimes","start":1619240,"end":1619720,"confidence":0.9998372,"speaker":"A"},{"text":"it","start":1619720,"end":1619800,"confidence":0.99902344,"speaker":"A"},{"text":"will","start":1619800,"end":1619920,"confidence":0.99853516,"speaker":"A"},{"text":"not","start":1619920,"end":1620080,"confidence":0.9995117,"speaker":"A"},{"text":"be","start":1620080,"end":1620360,"confidence":0.99902344,"speaker":"A"},{"text":"CK","start":1620360,"end":1620920,"confidence":0.89404297,"speaker":"A"},{"text":"web","start":1620920,"end":1621200,"confidence":0.9916992,"speaker":"A"},{"text":"authentication","start":1621200,"end":1621880,"confidence":0.9996338,"speaker":"A"},{"text":"token,","start":1621880,"end":1622360,"confidence":0.9995117,"speaker":"A"},{"text":"sometimes","start":1622360,"end":1622760,"confidence":0.9954427,"speaker":"A"},{"text":"it'll","start":1622760,"end":1623000,"confidence":0.8121745,"speaker":"A"},{"text":"be","start":1623000,"end":1623080,"confidence":0.9995117,"speaker":"A"},{"text":"CK","start":1623080,"end":1623480,"confidence":0.8876953,"speaker":"A"},{"text":"session","start":1623480,"end":1624040,"confidence":0.99902344,"speaker":"A"},{"text":"because","start":1624360,"end":1624760,"confidence":0.99853516,"speaker":"A"},{"text":"that's","start":1625240,"end":1625600,"confidence":0.9996745,"speaker":"A"},{"text":"what","start":1625600,"end":1625760,"confidence":0.99560547,"speaker":"A"},{"text":"Apple","start":1625760,"end":1626040,"confidence":0.99560547,"speaker":"A"},{"text":"likes","start":1626040,"end":1626280,"confidence":0.98999023,"speaker":"A"},{"text":"to","start":1626280,"end":1626360,"confidence":0.9995117,"speaker":"A"},{"text":"do.","start":1626360,"end":1626600,"confidence":0.9995117,"speaker":"A"},{"text":"But","start":1629080,"end":1629360,"confidence":0.99316406,"speaker":"A"},{"text":"it's","start":1629360,"end":1629560,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1629560,"end":1629680,"confidence":1,"speaker":"A"},{"text":"same","start":1629680,"end":1629840,"confidence":1,"speaker":"A"},{"text":"thing.","start":1629840,"end":1630120,"confidence":0.9995117,"speaker":"A"},{"text":"So","start":1630200,"end":1630480,"confidence":0.99853516,"speaker":"A"},{"text":"you","start":1630480,"end":1630640,"confidence":0.9980469,"speaker":"A"},{"text":"basically","start":1630640,"end":1630920,"confidence":0.99975586,"speaker":"A"},{"text":"want","start":1630920,"end":1631120,"confidence":0.8725586,"speaker":"A"},{"text":"to","start":1631120,"end":1631240,"confidence":1,"speaker":"A"},{"text":"look","start":1631240,"end":1631320,"confidence":1,"speaker":"A"},{"text":"for","start":1631320,"end":1631440,"confidence":1,"speaker":"A"},{"text":"either","start":1631440,"end":1631720,"confidence":0.99975586,"speaker":"A"},{"text":"property","start":1631720,"end":1632200,"confidence":0.99902344,"speaker":"A"},{"text":"or","start":1632200,"end":1632520,"confidence":0.9995117,"speaker":"A"},{"text":"query","start":1632680,"end":1633160,"confidence":0.97436523,"speaker":"A"},{"text":"parameter","start":1633240,"end":1633840,"confidence":0.9998372,"speaker":"A"},{"text":"name","start":1633840,"end":1634160,"confidence":0.99853516,"speaker":"A"},{"text":"and","start":1634160,"end":1634400,"confidence":0.99853516,"speaker":"A"},{"text":"you","start":1634400,"end":1634560,"confidence":0.9980469,"speaker":"A"},{"text":"should","start":1634560,"end":1634720,"confidence":1,"speaker":"A"},{"text":"be","start":1634720,"end":1634880,"confidence":1,"speaker":"A"},{"text":"good","start":1634880,"end":1635040,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":1635040,"end":1635200,"confidence":0.9980469,"speaker":"A"},{"text":"go","start":1635200,"end":1635480,"confidence":0.9975586,"speaker":"A"},{"text":"and","start":1636360,"end":1636640,"confidence":0.99560547,"speaker":"A"},{"text":"then","start":1636640,"end":1636760,"confidence":1,"speaker":"A"},{"text":"you'll","start":1636760,"end":1636960,"confidence":0.9902344,"speaker":"A"},{"text":"have","start":1636960,"end":1637080,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":1637080,"end":1637160,"confidence":0.99902344,"speaker":"A"},{"text":"user","start":1637160,"end":1637400,"confidence":0.99902344,"speaker":"A"},{"text":"as","start":1637400,"end":1637520,"confidence":0.4970703,"speaker":"A"},{"text":"well","start":1637520,"end":1637800,"confidence":0.99316406,"speaker":"A"},{"text":"authentication","start":1637800,"end":1638520,"confidence":0.99902344,"speaker":"A"},{"text":"token","start":1638520,"end":1639080,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1639960,"end":1640240,"confidence":0.98876953,"speaker":"A"},{"text":"could","start":1640240,"end":1640400,"confidence":0.9658203,"speaker":"A"},{"text":"do.","start":1640400,"end":1640680,"confidence":0.9926758,"speaker":"A"},{"text":"What","start":1640920,"end":1641240,"confidence":0.9736328,"speaker":"A"},{"text":"I,","start":1641240,"end":1641560,"confidence":0.9926758,"speaker":"A"},{"text":"what","start":1641720,"end":1642000,"confidence":0.9086914,"speaker":"A"},{"text":"I've","start":1642000,"end":1642200,"confidence":0.99527997,"speaker":"A"},{"text":"been","start":1642200,"end":1642360,"confidence":0.9995117,"speaker":"A"},{"text":"doing","start":1642360,"end":1642680,"confidence":0.9995117,"speaker":"A"},{"text":"is,","start":1643490,"end":1643730,"confidence":0.9863281,"speaker":"A"},{"text":"is","start":1645170,"end":1645490,"confidence":0.94628906,"speaker":"A"},{"text":"I've","start":1645490,"end":1645850,"confidence":0.9996745,"speaker":"A"},{"text":"been","start":1645850,"end":1646130,"confidence":0.99853516,"speaker":"A"},{"text":"take","start":1647330,"end":1647730,"confidence":0.9165039,"speaker":"A"},{"text":"like","start":1647730,"end":1648050,"confidence":0.99902344,"speaker":"A"},{"text":"making","start":1648050,"end":1648290,"confidence":0.99902344,"speaker":"A"},{"text":"a","start":1648290,"end":1648490,"confidence":0.9995117,"speaker":"A"},{"text":"call","start":1648490,"end":1648690,"confidence":1,"speaker":"A"},{"text":"to","start":1648690,"end":1648930,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":1648930,"end":1649130,"confidence":0.7597656,"speaker":"A"},{"text":"like","start":1649130,"end":1649370,"confidence":0.98779297,"speaker":"A"},{"text":"local","start":1649370,"end":1649690,"confidence":0.9995117,"speaker":"A"},{"text":"server","start":1649690,"end":1650170,"confidence":0.99975586,"speaker":"A"},{"text":"for","start":1650170,"end":1650330,"confidence":0.9995117,"speaker":"A"},{"text":"instance","start":1650330,"end":1650770,"confidence":0.99975586,"speaker":"A"},{"text":"and","start":1651330,"end":1651650,"confidence":0.99853516,"speaker":"A"},{"text":"then","start":1651650,"end":1651970,"confidence":0.99902344,"speaker":"A"},{"text":"essentially","start":1651970,"end":1652690,"confidence":0.9987793,"speaker":"A"},{"text":"then","start":1653410,"end":1653690,"confidence":0.8886719,"speaker":"A"},{"text":"I","start":1653690,"end":1653810,"confidence":1,"speaker":"A"},{"text":"could","start":1653810,"end":1653930,"confidence":0.6508789,"speaker":"A"},{"text":"do","start":1653930,"end":1654090,"confidence":0.9995117,"speaker":"A"},{"text":"whatever","start":1654090,"end":1654330,"confidence":1,"speaker":"A"},{"text":"I","start":1654330,"end":1654490,"confidence":0.9995117,"speaker":"A"},{"text":"want","start":1654490,"end":1654690,"confidence":0.9995117,"speaker":"A"},{"text":"with","start":1654690,"end":1654890,"confidence":0.99853516,"speaker":"A"},{"text":"that","start":1654890,"end":1655050,"confidence":0.9995117,"speaker":"A"},{"text":"web","start":1655050,"end":1655290,"confidence":0.9897461,"speaker":"A"},{"text":"authentication","start":1655290,"end":1655970,"confidence":0.9991455,"speaker":"A"},{"text":"token.","start":1655970,"end":1656330,"confidence":0.9996745,"speaker":"A"},{"text":"As","start":1656330,"end":1656490,"confidence":0.9995117,"speaker":"A"},{"text":"long","start":1656490,"end":1656610,"confidence":1,"speaker":"A"},{"text":"as","start":1656610,"end":1656690,"confidence":0.99853516,"speaker":"A"},{"text":"you","start":1656690,"end":1656770,"confidence":1,"speaker":"A"},{"text":"have","start":1656770,"end":1656890,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1656890,"end":1657010,"confidence":0.9995117,"speaker":"A"},{"text":"web","start":1657010,"end":1657210,"confidence":0.998291,"speaker":"A"},{"text":"authentication","start":1657210,"end":1657730,"confidence":0.99975586,"speaker":"A"},{"text":"token","start":1657730,"end":1658090,"confidence":0.99902344,"speaker":"A"},{"text":"and","start":1658090,"end":1658210,"confidence":0.9355469,"speaker":"A"},{"text":"the","start":1658210,"end":1658330,"confidence":0.99853516,"speaker":"A"},{"text":"API","start":1658330,"end":1658770,"confidence":0.9987793,"speaker":"A"},{"text":"token","start":1658770,"end":1659329,"confidence":0.9996745,"speaker":"A"},{"text":"you","start":1659570,"end":1659850,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":1659850,"end":1660010,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":1660010,"end":1660170,"confidence":1,"speaker":"A"},{"text":"anything","start":1660170,"end":1660570,"confidence":0.99975586,"speaker":"A"},{"text":"on","start":1660570,"end":1660730,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":1660730,"end":1660850,"confidence":0.99902344,"speaker":"A"},{"text":"private","start":1660850,"end":1661050,"confidence":1,"speaker":"A"},{"text":"database","start":1661050,"end":1661810,"confidence":0.99934894,"speaker":"A"},{"text":"that","start":1662530,"end":1662810,"confidence":0.9975586,"speaker":"A"},{"text":"the","start":1662810,"end":1662930,"confidence":0.9995117,"speaker":"A"},{"text":"user","start":1662930,"end":1663210,"confidence":1,"speaker":"A"},{"text":"has","start":1663210,"end":1663410,"confidence":0.99902344,"speaker":"A"},{"text":"rights","start":1663410,"end":1663690,"confidence":0.9975586,"speaker":"A"},{"text":"to.","start":1663690,"end":1664050,"confidence":0.9824219,"speaker":"A"},{"text":"So","start":1664450,"end":1664850,"confidence":0.9941406,"speaker":"A"},{"text":"you","start":1665890,"end":1666170,"confidence":0.98876953,"speaker":"A"},{"text":"can","start":1666170,"end":1666330,"confidence":0.95703125,"speaker":"A"},{"text":"go,","start":1666330,"end":1666570,"confidence":0.99853516,"speaker":"A"},{"text":"you","start":1666570,"end":1666810,"confidence":0.99560547,"speaker":"A"},{"text":"can","start":1666810,"end":1666970,"confidence":0.5966797,"speaker":"A"},{"text":"go","start":1666970,"end":1667130,"confidence":1,"speaker":"A"},{"text":"to","start":1667130,"end":1667250,"confidence":0.9980469,"speaker":"A"},{"text":"town","start":1667250,"end":1667410,"confidence":0.99902344,"speaker":"A"},{"text":"with","start":1667410,"end":1667610,"confidence":0.99609375,"speaker":"A"},{"text":"that","start":1667610,"end":1667890,"confidence":0.9848633,"speaker":"A"},{"text":"all","start":1669420,"end":1669540,"confidence":0.99365234,"speaker":"A"},{"text":"this","start":1669540,"end":1669700,"confidence":0.8154297,"speaker":"A"},{"text":"stuff","start":1669700,"end":1669900,"confidence":1,"speaker":"A"},{"text":"gets","start":1669900,"end":1670060,"confidence":0.99487305,"speaker":"A"},{"text":"Swift","start":1670060,"end":1670260,"confidence":0.99975586,"speaker":"A"},{"text":"in","start":1670260,"end":1670420,"confidence":0.99902344,"speaker":"A"},{"text":"a","start":1670420,"end":1670540,"confidence":0.9995117,"speaker":"A"},{"text":"cookie","start":1670540,"end":1671020,"confidence":1,"speaker":"A"},{"text":"too.","start":1671020,"end":1671420,"confidence":0.9838867,"speaker":"A"},{"text":"So","start":1671580,"end":1671820,"confidence":0.99658203,"speaker":"A"},{"text":"that","start":1671820,"end":1671940,"confidence":1,"speaker":"A"},{"text":"way","start":1671940,"end":1672180,"confidence":0.9995117,"speaker":"A"},{"text":"it'll","start":1672180,"end":1672540,"confidence":0.8470052,"speaker":"A"},{"text":"work.","start":1672540,"end":1672860,"confidence":1,"speaker":"A"},{"text":"When","start":1673740,"end":1674020,"confidence":1,"speaker":"A"},{"text":"you","start":1674020,"end":1674220,"confidence":0.9995117,"speaker":"A"},{"text":"go","start":1674220,"end":1674460,"confidence":1,"speaker":"A"},{"text":"back,","start":1674460,"end":1674700,"confidence":1,"speaker":"A"},{"text":"if","start":1674700,"end":1674940,"confidence":0.53125,"speaker":"A"},{"text":"you","start":1674940,"end":1675260,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":1675500,"end":1675900,"confidence":0.9995117,"speaker":"A"},{"text":"checked","start":1675900,"end":1676420,"confidence":0.99560547,"speaker":"A"},{"text":"the","start":1676420,"end":1676580,"confidence":1,"speaker":"A"},{"text":"box","start":1676580,"end":1676900,"confidence":0.9995117,"speaker":"A"},{"text":"for","start":1676900,"end":1677180,"confidence":0.99902344,"speaker":"A"},{"text":"allow,","start":1677180,"end":1677500,"confidence":0.99560547,"speaker":"A"},{"text":"it's","start":1678780,"end":1679100,"confidence":0.9899089,"speaker":"A"},{"text":"either","start":1679100,"end":1679340,"confidence":0.99975586,"speaker":"A"},{"text":"a","start":1679340,"end":1679540,"confidence":0.9995117,"speaker":"A"},{"text":"box","start":1679540,"end":1679780,"confidence":0.99975586,"speaker":"A"},{"text":"or","start":1679780,"end":1679980,"confidence":0.99902344,"speaker":"A"},{"text":"JavaScript","start":1679980,"end":1680580,"confidence":0.99934894,"speaker":"A"},{"text":"method","start":1680580,"end":1680900,"confidence":0.99348956,"speaker":"A"},{"text":"property","start":1680900,"end":1681260,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":1681260,"end":1681460,"confidence":0.9995117,"speaker":"A"},{"text":"will","start":1681460,"end":1681700,"confidence":0.9013672,"speaker":"A"},{"text":"say,","start":1681700,"end":1681940,"confidence":0.9975586,"speaker":"A"},{"text":"hey,","start":1681940,"end":1682180,"confidence":0.9992676,"speaker":"A"},{"text":"I","start":1682180,"end":1682300,"confidence":1,"speaker":"A"},{"text":"want","start":1682300,"end":1682420,"confidence":1,"speaker":"A"},{"text":"this","start":1682420,"end":1682580,"confidence":0.99902344,"speaker":"A"},{"text":"to","start":1682580,"end":1682740,"confidence":1,"speaker":"A"},{"text":"persist.","start":1682740,"end":1683260,"confidence":0.9992676,"speaker":"A"},{"text":"It'll","start":1683420,"end":1683780,"confidence":0.9715169,"speaker":"A"},{"text":"be","start":1683780,"end":1683900,"confidence":1,"speaker":"A"},{"text":"Swift","start":1683900,"end":1684100,"confidence":0.9980469,"speaker":"A"},{"text":"in","start":1684100,"end":1684260,"confidence":0.9121094,"speaker":"A"},{"text":"a,","start":1684260,"end":1684420,"confidence":0.7871094,"speaker":"A"},{"text":"in","start":1684420,"end":1684580,"confidence":0.71191406,"speaker":"A"},{"text":"a","start":1684580,"end":1684740,"confidence":0.9995117,"speaker":"A"},{"text":"cookie","start":1684740,"end":1685020,"confidence":0.99975586,"speaker":"A"},{"text":"as","start":1685020,"end":1685179,"confidence":1,"speaker":"A"},{"text":"well.","start":1685179,"end":1685460,"confidence":1,"speaker":"A"},{"text":"So","start":1685460,"end":1685700,"confidence":0.99658203,"speaker":"A"},{"text":"if","start":1685700,"end":1685820,"confidence":1,"speaker":"A"},{"text":"you","start":1685820,"end":1685940,"confidence":1,"speaker":"A"},{"text":"want","start":1685940,"end":1686060,"confidence":0.95751953,"speaker":"A"},{"text":"to","start":1686060,"end":1686220,"confidence":0.97314453,"speaker":"A"},{"text":"spelunk","start":1686220,"end":1686820,"confidence":0.9758301,"speaker":"A"},{"text":"your","start":1686820,"end":1686980,"confidence":0.99560547,"speaker":"A"},{"text":"cookies,","start":1686980,"end":1687260,"confidence":1,"speaker":"A"},{"text":"you","start":1687340,"end":1687580,"confidence":0.99853516,"speaker":"A"},{"text":"can","start":1687580,"end":1687820,"confidence":0.9995117,"speaker":"A"},{"text":"see","start":1687980,"end":1688300,"confidence":0.78027344,"speaker":"A"},{"text":"the","start":1688300,"end":1688500,"confidence":0.9995117,"speaker":"A"},{"text":"web","start":1688500,"end":1688740,"confidence":0.9992676,"speaker":"A"},{"text":"authentication","start":1688740,"end":1689340,"confidence":0.99938965,"speaker":"A"},{"text":"token","start":1689340,"end":1689740,"confidence":0.99902344,"speaker":"A"},{"text":"there.","start":1689740,"end":1690060,"confidence":0.99560547,"speaker":"A"},{"text":"So","start":1691500,"end":1691780,"confidence":0.9921875,"speaker":"A"},{"text":"that's","start":1691780,"end":1692100,"confidence":0.9995117,"speaker":"A"},{"text":"actually","start":1692100,"end":1692300,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1692300,"end":1692540,"confidence":0.99609375,"speaker":"A"},{"text":"easier","start":1692540,"end":1692900,"confidence":0.99975586,"speaker":"A"},{"text":"of","start":1692900,"end":1693020,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1693020,"end":1693180,"confidence":0.99902344,"speaker":"A"},{"text":"two.","start":1693180,"end":1693500,"confidence":0.9926758,"speaker":"A"},{"text":"So","start":1694380,"end":1694660,"confidence":0.99902344,"speaker":"A"},{"text":"that","start":1694660,"end":1694820,"confidence":1,"speaker":"A"},{"text":"gives","start":1694820,"end":1695020,"confidence":1,"speaker":"A"},{"text":"you","start":1695020,"end":1695100,"confidence":1,"speaker":"A"},{"text":"the","start":1695100,"end":1695220,"confidence":0.9995117,"speaker":"A"},{"text":"private","start":1695220,"end":1695420,"confidence":1,"speaker":"A"},{"text":"database","start":1695420,"end":1695940,"confidence":0.9998372,"speaker":"A"},{"text":"for","start":1695940,"end":1696100,"confidence":0.9975586,"speaker":"A"},{"text":"the","start":1696100,"end":1696220,"confidence":0.9995117,"speaker":"A"},{"text":"public","start":1696220,"end":1696380,"confidence":1,"speaker":"A"},{"text":"database","start":1696380,"end":1696940,"confidence":0.99886066,"speaker":"A"},{"text":"is","start":1696940,"end":1697140,"confidence":0.98876953,"speaker":"A"},{"text":"where","start":1697140,"end":1697300,"confidence":0.99902344,"speaker":"A"},{"text":"you're","start":1697300,"end":1697500,"confidence":0.9975586,"speaker":"A"},{"text":"going","start":1697500,"end":1697580,"confidence":0.9355469,"speaker":"A"},{"text":"to","start":1697580,"end":1697660,"confidence":0.9980469,"speaker":"A"},{"text":"need","start":1697660,"end":1697820,"confidence":0.99853516,"speaker":"A"},{"text":"a","start":1697820,"end":1697990,"confidence":0.55908203,"speaker":"A"},{"text":"server","start":1698220,"end":1698460,"confidence":0.9975586,"speaker":"A"},{"text":"to","start":1698460,"end":1698620,"confidence":0.9536133,"speaker":"A"},{"text":"server","start":1698620,"end":1699020,"confidence":0.99902344,"speaker":"A"},{"text":"authentication.","start":1699020,"end":1699820,"confidence":0.99938965,"speaker":"A"},{"text":"And","start":1701340,"end":1701700,"confidence":0.98876953,"speaker":"A"},{"text":"so","start":1701700,"end":1701940,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":1701940,"end":1702100,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":1702100,"end":1702300,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":1702300,"end":1702620,"confidence":0.9970703,"speaker":"A"},{"text":"it's","start":1703180,"end":1703540,"confidence":0.9996745,"speaker":"A"},{"text":"really","start":1703540,"end":1703820,"confidence":0.99853516,"speaker":"A"},{"text":"actually","start":1703820,"end":1704180,"confidence":0.99853516,"speaker":"A"},{"text":"not","start":1704180,"end":1704420,"confidence":1,"speaker":"A"},{"text":"as","start":1704420,"end":1704620,"confidence":0.99902344,"speaker":"A"},{"text":"bad","start":1704620,"end":1704820,"confidence":1,"speaker":"A"},{"text":"as","start":1704820,"end":1704980,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":1704980,"end":1705140,"confidence":1,"speaker":"A"},{"text":"thought","start":1705140,"end":1705260,"confidence":1,"speaker":"A"},{"text":"it","start":1705260,"end":1705340,"confidence":0.9975586,"speaker":"A"},{"text":"was","start":1705340,"end":1705460,"confidence":0.9995117,"speaker":"A"},{"text":"going","start":1705460,"end":1705580,"confidence":0.8984375,"speaker":"A"},{"text":"to","start":1705580,"end":1705660,"confidence":1,"speaker":"A"},{"text":"be.","start":1705660,"end":1705900,"confidence":1,"speaker":"A"},{"text":"But","start":1705900,"end":1706300,"confidence":0.9975586,"speaker":"A"},{"text":"you","start":1706620,"end":1706940,"confidence":0.9995117,"speaker":"A"},{"text":"go","start":1706940,"end":1707220,"confidence":0.99902344,"speaker":"A"},{"text":"to","start":1707220,"end":1707500,"confidence":1,"speaker":"A"},{"text":"the","start":1707500,"end":1707700,"confidence":0.9995117,"speaker":"A"},{"text":"new","start":1707700,"end":1707980,"confidence":0.9970703,"speaker":"A"},{"text":"server","start":1708220,"end":1708620,"confidence":0.99731445,"speaker":"A"},{"text":"to","start":1708620,"end":1708740,"confidence":0.8359375,"speaker":"A"},{"text":"server","start":1708740,"end":1709140,"confidence":0.99731445,"speaker":"A"},{"text":"key,","start":1709140,"end":1709420,"confidence":0.99121094,"speaker":"A"},{"text":"put","start":1709420,"end":1709700,"confidence":0.9951172,"speaker":"A"},{"text":"in","start":1709700,"end":1709900,"confidence":0.9526367,"speaker":"A"},{"text":"a","start":1709900,"end":1710100,"confidence":0.9555664,"speaker":"A"},{"text":"name","start":1710100,"end":1710300,"confidence":0.9941406,"speaker":"A"},{"text":"you","start":1710300,"end":1710500,"confidence":0.99072266,"speaker":"A"},{"text":"want,","start":1710500,"end":1710780,"confidence":0.70458984,"speaker":"A"},{"text":"it'll","start":1711020,"end":1711460,"confidence":0.9889323,"speaker":"A"},{"text":"actually","start":1711460,"end":1711660,"confidence":0.99902344,"speaker":"A"},{"text":"give","start":1711660,"end":1711860,"confidence":1,"speaker":"A"},{"text":"you","start":1711860,"end":1712020,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1712020,"end":1712180,"confidence":0.9995117,"speaker":"A"},{"text":"command","start":1712180,"end":1712500,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1712500,"end":1712660,"confidence":0.9970703,"speaker":"A"},{"text":"need","start":1712660,"end":1712820,"confidence":0.99902344,"speaker":"A"},{"text":"to","start":1712820,"end":1712980,"confidence":1,"speaker":"A"},{"text":"run","start":1712980,"end":1713260,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":1713340,"end":1713620,"confidence":0.99853516,"speaker":"A"},{"text":"then","start":1713620,"end":1713780,"confidence":0.9946289,"speaker":"A"},{"text":"you","start":1713780,"end":1713940,"confidence":0.99853516,"speaker":"A"},{"text":"just","start":1713940,"end":1714099,"confidence":0.9995117,"speaker":"A"},{"text":"paste","start":1714099,"end":1714420,"confidence":0.98950195,"speaker":"A"},{"text":"in","start":1714420,"end":1714580,"confidence":0.9951172,"speaker":"A"},{"text":"the","start":1714580,"end":1714700,"confidence":0.9995117,"speaker":"A"},{"text":"public","start":1714700,"end":1714900,"confidence":0.9995117,"speaker":"A"},{"text":"key","start":1714900,"end":1715180,"confidence":0.9995117,"speaker":"A"},{"text":"in","start":1715180,"end":1715380,"confidence":0.9169922,"speaker":"A"},{"text":"here.","start":1715380,"end":1715660,"confidence":0.9995117,"speaker":"A"},{"text":"That","start":1716380,"end":1716700,"confidence":0.9980469,"speaker":"A"},{"text":"gives","start":1716700,"end":1717060,"confidence":0.9995117,"speaker":"A"},{"text":"you.","start":1717060,"end":1717340,"confidence":0.9995117,"speaker":"A"},{"text":"That","start":1718780,"end":1719060,"confidence":0.8378906,"speaker":"A"},{"text":"will","start":1719060,"end":1719220,"confidence":0.9951172,"speaker":"A"},{"text":"give","start":1719220,"end":1719380,"confidence":1,"speaker":"A"},{"text":"you","start":1719380,"end":1719540,"confidence":1,"speaker":"A"},{"text":"everything","start":1719540,"end":1719780,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1719780,"end":1720020,"confidence":0.99902344,"speaker":"A"},{"text":"need.","start":1720020,"end":1720300,"confidence":0.9995117,"speaker":"A"},{"text":"So","start":1720860,"end":1721140,"confidence":0.9995117,"speaker":"A"},{"text":"here's","start":1721140,"end":1721540,"confidence":0.9949544,"speaker":"A"},{"text":"how","start":1721540,"end":1721780,"confidence":1,"speaker":"A"},{"text":"to","start":1721780,"end":1721940,"confidence":0.9995117,"speaker":"A"},{"text":"run","start":1721940,"end":1722100,"confidence":1,"speaker":"A"},{"text":"it.","start":1722100,"end":1722300,"confidence":0.99902344,"speaker":"A"},{"text":"Basically,","start":1722300,"end":1722780,"confidence":0.998291,"speaker":"A"},{"text":"sorry","start":1723990,"end":1724190,"confidence":0.9773763,"speaker":"A"},{"text":"about","start":1724190,"end":1724350,"confidence":0.9819336,"speaker":"A"},{"text":"that.","start":1724350,"end":1724630,"confidence":0.9941406,"speaker":"A"},{"text":"We","start":1737190,"end":1737470,"confidence":0.7998047,"speaker":"A"},{"text":"just","start":1737470,"end":1737670,"confidence":0.99853516,"speaker":"A"},{"text":"run","start":1737670,"end":1737870,"confidence":0.9975586,"speaker":"A"},{"text":"that.","start":1737870,"end":1738150,"confidence":0.9970703,"speaker":"A"},{"text":"That","start":1738470,"end":1738750,"confidence":0.9995117,"speaker":"A"},{"text":"gives","start":1738750,"end":1738950,"confidence":0.99975586,"speaker":"A"},{"text":"us","start":1738950,"end":1739070,"confidence":1,"speaker":"A"},{"text":"the","start":1739070,"end":1739230,"confidence":0.9995117,"speaker":"A"},{"text":"key.","start":1739230,"end":1739510,"confidence":0.9995117,"speaker":"A"},{"text":"We","start":1740710,"end":1740990,"confidence":0.99902344,"speaker":"A"},{"text":"can","start":1740990,"end":1741150,"confidence":0.9995117,"speaker":"A"},{"text":"go","start":1741150,"end":1741310,"confidence":0.99902344,"speaker":"A"},{"text":"ahead","start":1741310,"end":1741550,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":1741550,"end":1741910,"confidence":0.9970703,"speaker":"A"},{"text":"get","start":1742070,"end":1742350,"confidence":1,"speaker":"A"},{"text":"the","start":1742350,"end":1742510,"confidence":1,"speaker":"A"},{"text":"public","start":1742510,"end":1742750,"confidence":1,"speaker":"A"},{"text":"key.","start":1742750,"end":1743110,"confidence":0.9995117,"speaker":"A"},{"text":"We","start":1743190,"end":1743470,"confidence":0.9980469,"speaker":"A"},{"text":"can","start":1743470,"end":1743750,"confidence":0.9995117,"speaker":"A"},{"text":"also","start":1743910,"end":1744270,"confidence":0.99902344,"speaker":"A"},{"text":"pipe","start":1744270,"end":1744670,"confidence":0.9607747,"speaker":"A"},{"text":"it","start":1744670,"end":1744870,"confidence":0.9975586,"speaker":"A"},{"text":"to","start":1744870,"end":1745070,"confidence":0.9975586,"speaker":"A"},{"text":"PB","start":1745070,"end":1745390,"confidence":0.79541016,"speaker":"A"},{"text":"Copy","start":1745390,"end":1745990,"confidence":0.9637044,"speaker":"A"},{"text":"and","start":1746470,"end":1746750,"confidence":0.9321289,"speaker":"A"},{"text":"then","start":1746750,"end":1746910,"confidence":0.98779297,"speaker":"A"},{"text":"all","start":1746910,"end":1747070,"confidence":0.9995117,"speaker":"A"},{"text":"we","start":1747070,"end":1747190,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":1747190,"end":1747310,"confidence":0.95947266,"speaker":"A"},{"text":"to","start":1747310,"end":1747430,"confidence":0.99609375,"speaker":"A"},{"text":"do","start":1747430,"end":1747590,"confidence":0.99609375,"speaker":"A"},{"text":"is","start":1747590,"end":1747830,"confidence":0.99902344,"speaker":"A"},{"text":"paste","start":1747830,"end":1748110,"confidence":0.9172363,"speaker":"A"},{"text":"that","start":1748110,"end":1748310,"confidence":0.99560547,"speaker":"A"},{"text":"in","start":1748310,"end":1748510,"confidence":0.9970703,"speaker":"A"},{"text":"the","start":1748510,"end":1748670,"confidence":0.99853516,"speaker":"A"},{"text":"box","start":1748670,"end":1749030,"confidence":0.99780273,"speaker":"A"},{"text":"over","start":1750370,"end":1750570,"confidence":0.9951172,"speaker":"A"},{"text":"here.","start":1750570,"end":1750930,"confidence":0.9995117,"speaker":"A"},{"text":"There","start":1757970,"end":1758250,"confidence":0.98046875,"speaker":"A"},{"text":"we","start":1758250,"end":1758410,"confidence":0.5283203,"speaker":"A"},{"text":"go.","start":1758410,"end":1758690,"confidence":1,"speaker":"A"},{"text":"It's","start":1765890,"end":1766250,"confidence":0.9930013,"speaker":"A"},{"text":"pretty","start":1766250,"end":1766570,"confidence":0.9998372,"speaker":"A"},{"text":"complicated","start":1766570,"end":1767250,"confidence":1,"speaker":"A"},{"text":"to","start":1767250,"end":1767490,"confidence":0.9995117,"speaker":"A"},{"text":"use","start":1767490,"end":1767770,"confidence":1,"speaker":"A"},{"text":"the","start":1767770,"end":1768010,"confidence":0.9995117,"speaker":"A"},{"text":"server","start":1768010,"end":1768450,"confidence":0.99975586,"speaker":"A"},{"text":"key.","start":1768450,"end":1768770,"confidence":0.99560547,"speaker":"A"},{"text":"We","start":1770050,"end":1770330,"confidence":0.9951172,"speaker":"A"},{"text":"can","start":1770330,"end":1770490,"confidence":0.99902344,"speaker":"A"},{"text":"spell","start":1770490,"end":1770770,"confidence":0.9838867,"speaker":"A"},{"text":"on","start":1770770,"end":1771050,"confidence":0.8208008,"speaker":"A"},{"text":"the","start":1771050,"end":1771250,"confidence":0.99658203,"speaker":"A"},{"text":"miskit","start":1771250,"end":1771690,"confidence":0.9238281,"speaker":"A"},{"text":"code","start":1771690,"end":1771970,"confidence":0.99348956,"speaker":"A"},{"text":"on","start":1771970,"end":1772090,"confidence":0.9975586,"speaker":"A"},{"text":"how","start":1772090,"end":1772250,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":1772250,"end":1772410,"confidence":0.99902344,"speaker":"A"},{"text":"do","start":1772410,"end":1772570,"confidence":0.9995117,"speaker":"A"},{"text":"it","start":1772570,"end":1772850,"confidence":0.9995117,"speaker":"A"},{"text":"because","start":1773170,"end":1773450,"confidence":0.9663086,"speaker":"A"},{"text":"it","start":1773450,"end":1773610,"confidence":0.9995117,"speaker":"A"},{"text":"does","start":1773610,"end":1773810,"confidence":0.99902344,"speaker":"A"},{"text":"a","start":1773810,"end":1773970,"confidence":0.9995117,"speaker":"A"},{"text":"lot","start":1773970,"end":1774050,"confidence":1,"speaker":"A"},{"text":"of","start":1774050,"end":1774130,"confidence":0.9980469,"speaker":"A"},{"text":"that","start":1774130,"end":1774290,"confidence":0.99560547,"speaker":"A"},{"text":"work","start":1774290,"end":1774530,"confidence":1,"speaker":"A"},{"text":"for","start":1774530,"end":1774730,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":1774730,"end":1774930,"confidence":0.9995117,"speaker":"A"},{"text":"if","start":1774930,"end":1775170,"confidence":0.59228516,"speaker":"A"},{"text":"you","start":1775170,"end":1775330,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":1775330,"end":1775450,"confidence":0.9995117,"speaker":"A"},{"text":"it.","start":1775450,"end":1775730,"confidence":0.9916992,"speaker":"A"},{"text":"But","start":1776610,"end":1776730,"confidence":0.99121094,"speaker":"A"},{"text":"you","start":1776730,"end":1776890,"confidence":0.9995117,"speaker":"A"},{"text":"will","start":1776890,"end":1777090,"confidence":0.9995117,"speaker":"A"},{"text":"need","start":1777090,"end":1777410,"confidence":0.9995117,"speaker":"A"},{"text":"the,","start":1777650,"end":1778050,"confidence":0.8984375,"speaker":"A"},{"text":"the","start":1779170,"end":1779490,"confidence":0.98876953,"speaker":"A"},{"text":"private","start":1779490,"end":1779810,"confidence":0.9995117,"speaker":"A"},{"text":"key,","start":1779890,"end":1780290,"confidence":0.9975586,"speaker":"A"},{"text":"the","start":1780290,"end":1780570,"confidence":0.99121094,"speaker":"A"},{"text":"key","start":1780570,"end":1780810,"confidence":0.9946289,"speaker":"A"},{"text":"id,","start":1780810,"end":1781170,"confidence":0.98583984,"speaker":"A"},{"text":"I","start":1782290,"end":1782570,"confidence":0.90771484,"speaker":"A"},{"text":"think,","start":1782570,"end":1782850,"confidence":0.9980469,"speaker":"A"},{"text":"I","start":1783170,"end":1783450,"confidence":0.8652344,"speaker":"A"},{"text":"think","start":1783450,"end":1783610,"confidence":0.9868164,"speaker":"A"},{"text":"that's","start":1783610,"end":1783810,"confidence":0.9995117,"speaker":"A"},{"text":"it.","start":1783810,"end":1784050,"confidence":0.9941406,"speaker":"A"},{"text":"And","start":1784370,"end":1784650,"confidence":0.9921875,"speaker":"A"},{"text":"then","start":1784650,"end":1784890,"confidence":0.94677734,"speaker":"A"},{"text":"you","start":1784890,"end":1785130,"confidence":0.99658203,"speaker":"A"},{"text":"should","start":1785130,"end":1785290,"confidence":1,"speaker":"A"},{"text":"be","start":1785290,"end":1785490,"confidence":1,"speaker":"A"},{"text":"good","start":1785490,"end":1785810,"confidence":0.9995117,"speaker":"A"},{"text":"with","start":1786130,"end":1786490,"confidence":0.9975586,"speaker":"A"},{"text":"having","start":1786490,"end":1786810,"confidence":0.9555664,"speaker":"A"},{"text":"access","start":1786810,"end":1787170,"confidence":1,"speaker":"A"},{"text":"now","start":1787170,"end":1787490,"confidence":0.9975586,"speaker":"A"},{"text":"to","start":1787490,"end":1787770,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1787770,"end":1788010,"confidence":0.9995117,"speaker":"A"},{"text":"public","start":1788010,"end":1788290,"confidence":0.9995117,"speaker":"A"},{"text":"database.","start":1789330,"end":1790130,"confidence":0.99902344,"speaker":"A"},{"text":"So","start":1790850,"end":1791250,"confidence":0.98876953,"speaker":"A"},{"text":"just","start":1791570,"end":1791889,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":1791889,"end":1792050,"confidence":0.99853516,"speaker":"A"},{"text":"go","start":1792050,"end":1792209,"confidence":0.99902344,"speaker":"A"},{"text":"over,","start":1792209,"end":1792530,"confidence":1,"speaker":"A"},{"text":"there's","start":1792610,"end":1793050,"confidence":0.9892578,"speaker":"A"},{"text":"differences","start":1793050,"end":1793450,"confidence":0.9995117,"speaker":"A"},{"text":"between","start":1793450,"end":1793770,"confidence":1,"speaker":"A"},{"text":"the","start":1793770,"end":1793970,"confidence":0.9995117,"speaker":"A"},{"text":"public","start":1793970,"end":1794210,"confidence":1,"speaker":"A"},{"text":"and","start":1794210,"end":1794490,"confidence":0.99902344,"speaker":"A"},{"text":"private","start":1794490,"end":1794730,"confidence":1,"speaker":"A"},{"text":"database.","start":1794730,"end":1795490,"confidence":0.99820966,"speaker":"A"},{"text":"So","start":1797170,"end":1797570,"confidence":0.99609375,"speaker":"A"},{"text":"this","start":1797730,"end":1798050,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1798050,"end":1798370,"confidence":0.9995117,"speaker":"A"},{"text":"query.","start":1798530,"end":1799090,"confidence":0.9975586,"speaker":"A"},{"text":"You","start":1799570,"end":1799810,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":1799810,"end":1799930,"confidence":0.5439453,"speaker":"A"},{"text":"see","start":1799930,"end":1800090,"confidence":0.99609375,"speaker":"A"},{"text":"my","start":1800090,"end":1800250,"confidence":0.8847656,"speaker":"A"},{"text":"cursor,","start":1800250,"end":1800650,"confidence":0.9938151,"speaker":"A"},{"text":"right?","start":1800650,"end":1800930,"confidence":0.97265625,"speaker":"A"},{"text":"Query","start":1800930,"end":1801330,"confidence":0.9904785,"speaker":"A"},{"text":"and","start":1801330,"end":1801530,"confidence":0.53759766,"speaker":"A"},{"text":"lookup","start":1801530,"end":1802010,"confidence":0.94018555,"speaker":"A"},{"text":"of","start":1802010,"end":1802330,"confidence":0.9916992,"speaker":"A"},{"text":"records","start":1802330,"end":1803010,"confidence":0.99975586,"speaker":"A"},{"text":"is","start":1803010,"end":1803290,"confidence":0.9995117,"speaker":"A"},{"text":"available","start":1803290,"end":1803570,"confidence":0.9995117,"speaker":"A"},{"text":"on","start":1803650,"end":1803970,"confidence":0.99853516,"speaker":"A"},{"text":"all","start":1803970,"end":1804290,"confidence":0.99658203,"speaker":"A"},{"text":"but","start":1805270,"end":1805510,"confidence":0.9897461,"speaker":"A"},{"text":"file","start":1805590,"end":1806030,"confidence":0.9970703,"speaker":"A"},{"text":"changes","start":1806030,"end":1806630,"confidence":0.9992676,"speaker":"A"},{"text":"or,","start":1806790,"end":1807110,"confidence":0.97314453,"speaker":"A"},{"text":"excuse","start":1807110,"end":1807430,"confidence":0.99820966,"speaker":"A"},{"text":"me,","start":1807430,"end":1807670,"confidence":0.9995117,"speaker":"A"},{"text":"record","start":1807990,"end":1808350,"confidence":0.99609375,"speaker":"A"},{"text":"changes.","start":1808350,"end":1808830,"confidence":0.99975586,"speaker":"A"},{"text":"It's","start":1808830,"end":1809070,"confidence":0.8819987,"speaker":"A"},{"text":"not","start":1809070,"end":1809230,"confidence":1,"speaker":"A"},{"text":"available","start":1809230,"end":1809510,"confidence":0.99853516,"speaker":"A"},{"text":"on","start":1809830,"end":1810150,"confidence":0.9160156,"speaker":"A"},{"text":"public","start":1810150,"end":1810470,"confidence":0.9995117,"speaker":"A"},{"text":"zones,","start":1810950,"end":1811390,"confidence":0.9909668,"speaker":"A"},{"text":"aren't","start":1811390,"end":1811670,"confidence":0.9958496,"speaker":"A"},{"text":"really","start":1811670,"end":1811830,"confidence":1,"speaker":"A"},{"text":"available","start":1811830,"end":1812150,"confidence":0.99853516,"speaker":"A"},{"text":"in","start":1812150,"end":1812430,"confidence":0.9394531,"speaker":"A"},{"text":"public","start":1812430,"end":1812710,"confidence":1,"speaker":"A"},{"text":"zone","start":1812790,"end":1813190,"confidence":0.96240234,"speaker":"A"},{"text":"changes","start":1813190,"end":1813550,"confidence":0.8989258,"speaker":"A"},{"text":"aren't","start":1813550,"end":1813870,"confidence":0.9959717,"speaker":"A"},{"text":"available","start":1813870,"end":1814150,"confidence":1,"speaker":"A"},{"text":"in","start":1814470,"end":1814750,"confidence":0.9667969,"speaker":"A"},{"text":"public","start":1814750,"end":1815030,"confidence":1,"speaker":"A"},{"text":"notifications.","start":1815670,"end":1816470,"confidence":0.9949544,"speaker":"A"},{"text":"Zone","start":1816550,"end":1816950,"confidence":0.94677734,"speaker":"A"},{"text":"notifications","start":1816950,"end":1817630,"confidence":0.9996745,"speaker":"A"},{"text":"aren't","start":1817630,"end":1817950,"confidence":0.9765625,"speaker":"A"},{"text":"available","start":1817950,"end":1818230,"confidence":1,"speaker":"A"},{"text":"in","start":1818310,"end":1818590,"confidence":0.9941406,"speaker":"A"},{"text":"public,","start":1818590,"end":1818870,"confidence":1,"speaker":"A"},{"text":"but","start":1819670,"end":1820070,"confidence":0.9921875,"speaker":"A"},{"text":"query","start":1820070,"end":1820550,"confidence":0.82421875,"speaker":"A"},{"text":"notifications","start":1820709,"end":1821510,"confidence":0.9996745,"speaker":"A"},{"text":"are.","start":1821590,"end":1821990,"confidence":0.9902344,"speaker":"A"},{"text":"And","start":1821990,"end":1822390,"confidence":0.9921875,"speaker":"A"},{"text":"you","start":1822390,"end":1822630,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":1822630,"end":1822750,"confidence":0.9995117,"speaker":"A"},{"text":"also","start":1822750,"end":1822990,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":1822990,"end":1823350,"confidence":1,"speaker":"A"},{"text":"any","start":1823350,"end":1823750,"confidence":0.99853516,"speaker":"A"},{"text":"stuff","start":1823750,"end":1824150,"confidence":0.9996745,"speaker":"A"},{"text":"with","start":1824150,"end":1824470,"confidence":0.98876953,"speaker":"A"},{"text":"assets","start":1824710,"end":1825270,"confidence":0.7792969,"speaker":"A"},{"text":"which","start":1825350,"end":1825630,"confidence":0.99853516,"speaker":"A"},{"text":"are","start":1825630,"end":1825790,"confidence":1,"speaker":"A"},{"text":"basically","start":1825790,"end":1826190,"confidence":0.99975586,"speaker":"A"},{"text":"binary","start":1826190,"end":1826710,"confidence":0.9995117,"speaker":"A"},{"text":"files.","start":1826710,"end":1827030,"confidence":0.99194336,"speaker":"A"},{"text":"You","start":1827030,"end":1827190,"confidence":0.99853516,"speaker":"A"},{"text":"can","start":1827190,"end":1827310,"confidence":0.99853516,"speaker":"A"},{"text":"also","start":1827310,"end":1827470,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":1827470,"end":1827630,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":1827630,"end":1827910,"confidence":0.99902344,"speaker":"A"},{"text":"in","start":1828310,"end":1828670,"confidence":0.5600586,"speaker":"A"},{"text":"all","start":1828670,"end":1828910,"confidence":0.9995117,"speaker":"A"},{"text":"of","start":1828910,"end":1829070,"confidence":0.99902344,"speaker":"A"},{"text":"them.","start":1829070,"end":1829350,"confidence":0.9145508,"speaker":"A"},{"text":"You","start":1830630,"end":1830910,"confidence":0.99658203,"speaker":"A"},{"text":"can't","start":1830910,"end":1831230,"confidence":0.9586589,"speaker":"A"},{"text":"do","start":1831230,"end":1831590,"confidence":1,"speaker":"A"},{"text":"query","start":1831750,"end":1832190,"confidence":0.970459,"speaker":"A"},{"text":"notifications","start":1832190,"end":1832990,"confidence":0.99934894,"speaker":"A"},{"text":"on","start":1832990,"end":1833270,"confidence":0.98046875,"speaker":"A"},{"text":"shared.","start":1833270,"end":1833830,"confidence":0.99780273,"speaker":"A"},{"text":"Shared","start":1834470,"end":1834910,"confidence":0.9873047,"speaker":"A"},{"text":"would","start":1834910,"end":1835110,"confidence":0.5698242,"speaker":"A"},{"text":"essentially","start":1835110,"end":1835590,"confidence":0.99902344,"speaker":"A"},{"text":"work","start":1835590,"end":1835870,"confidence":1,"speaker":"A"},{"text":"like","start":1835870,"end":1836110,"confidence":0.9980469,"speaker":"A"},{"text":"private","start":1836110,"end":1836390,"confidence":0.99902344,"speaker":"A"},{"text":"essentially.","start":1836850,"end":1837410,"confidence":0.9968262,"speaker":"A"},{"text":"So","start":1837490,"end":1837890,"confidence":0.9946289,"speaker":"A"},{"text":"it's","start":1839090,"end":1839410,"confidence":0.9995117,"speaker":"A"},{"text":"just","start":1839410,"end":1839530,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":1839530,"end":1839650,"confidence":0.9995117,"speaker":"A"},{"text":"matter","start":1839650,"end":1839810,"confidence":1,"speaker":"A"},{"text":"of","start":1839810,"end":1840130,"confidence":0.99902344,"speaker":"A"},{"text":"who.","start":1840130,"end":1840530,"confidence":0.77685547,"speaker":"A"},{"text":"Who's","start":1840530,"end":1840930,"confidence":0.9977214,"speaker":"A"},{"text":"the","start":1840930,"end":1841050,"confidence":0.99853516,"speaker":"A"},{"text":"owner","start":1841050,"end":1841370,"confidence":1,"speaker":"A"},{"text":"and","start":1841370,"end":1841570,"confidence":0.99609375,"speaker":"A"},{"text":"how","start":1841570,"end":1841810,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1841810,"end":1841970,"confidence":0.94970703,"speaker":"A"},{"text":"it","start":1841970,"end":1842090,"confidence":0.99902344,"speaker":"A"},{"text":"shared.","start":1842090,"end":1842610,"confidence":0.9968262,"speaker":"A"},{"text":"So","start":1844690,"end":1844930,"confidence":0.99658203,"speaker":"A"},{"text":"one","start":1844930,"end":1845050,"confidence":0.9794922,"speaker":"A"},{"text":"of","start":1845050,"end":1845210,"confidence":1,"speaker":"A"},{"text":"the","start":1845210,"end":1845450,"confidence":0.9995117,"speaker":"A"},{"text":"big","start":1845450,"end":1845730,"confidence":1,"speaker":"A"},{"text":"challenges","start":1845730,"end":1846370,"confidence":0.96468097,"speaker":"A"},{"text":"I","start":1846450,"end":1846730,"confidence":0.99853516,"speaker":"A"},{"text":"think","start":1846730,"end":1846890,"confidence":1,"speaker":"A"},{"text":"we've","start":1846890,"end":1847170,"confidence":0.9977214,"speaker":"A"},{"text":"all","start":1847170,"end":1847330,"confidence":0.9995117,"speaker":"A"},{"text":"faced","start":1847330,"end":1847650,"confidence":0.95825195,"speaker":"A"},{"text":"this","start":1847650,"end":1847810,"confidence":0.99072266,"speaker":"A"},{"text":"when","start":1847810,"end":1848010,"confidence":0.99609375,"speaker":"A"},{"text":"we've","start":1848010,"end":1848370,"confidence":0.98095703,"speaker":"A"},{"text":"dealt","start":1848370,"end":1848650,"confidence":0.9992676,"speaker":"A"},{"text":"with","start":1848650,"end":1848810,"confidence":1,"speaker":"A"},{"text":"certain","start":1848810,"end":1849010,"confidence":0.9995117,"speaker":"A"},{"text":"web","start":1849010,"end":1849290,"confidence":0.99902344,"speaker":"A"},{"text":"services","start":1849290,"end":1849570,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1850530,"end":1850930,"confidence":0.98876953,"speaker":"A"},{"text":"field","start":1851410,"end":1851810,"confidence":0.9897461,"speaker":"A"},{"text":"type","start":1851970,"end":1852449,"confidence":0.810791,"speaker":"A"},{"text":"polymorphism.","start":1852449,"end":1853370,"confidence":0.9991862,"speaker":"A"},{"text":"If","start":1853370,"end":1853570,"confidence":1,"speaker":"A"},{"text":"you've","start":1853570,"end":1853730,"confidence":0.9998372,"speaker":"A"},{"text":"done","start":1853730,"end":1853890,"confidence":0.9975586,"speaker":"A"},{"text":"JSON","start":1853890,"end":1854370,"confidence":0.7998047,"speaker":"A"},{"text":"where","start":1854370,"end":1854650,"confidence":0.87939453,"speaker":"A"},{"text":"you","start":1854650,"end":1854850,"confidence":1,"speaker":"A"},{"text":"don't","start":1854850,"end":1855090,"confidence":0.9996745,"speaker":"A"},{"text":"know","start":1855090,"end":1855210,"confidence":0.99902344,"speaker":"A"},{"text":"what","start":1855210,"end":1855370,"confidence":0.9995117,"speaker":"A"},{"text":"type","start":1855370,"end":1855730,"confidence":0.9946289,"speaker":"A"},{"text":"you're","start":1855730,"end":1855970,"confidence":1,"speaker":"A"},{"text":"getting","start":1855970,"end":1856130,"confidence":0.9995117,"speaker":"A"},{"text":"back","start":1856130,"end":1856370,"confidence":0.9980469,"speaker":"A"},{"text":"or","start":1856370,"end":1856570,"confidence":0.9980469,"speaker":"A"},{"text":"what","start":1856570,"end":1856730,"confidence":0.98876953,"speaker":"A"},{"text":"data","start":1856730,"end":1856930,"confidence":0.9980469,"speaker":"A"},{"text":"you're","start":1856930,"end":1857170,"confidence":0.9995117,"speaker":"A"},{"text":"getting","start":1857170,"end":1857370,"confidence":0.9916992,"speaker":"A"},{"text":"back,","start":1857370,"end":1857730,"confidence":0.9526367,"speaker":"A"},{"text":"this","start":1858050,"end":1858330,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":1858330,"end":1858490,"confidence":0.99902344,"speaker":"A"},{"text":"Be","start":1858490,"end":1858610,"confidence":1,"speaker":"A"},{"text":"a","start":1858610,"end":1858690,"confidence":0.9995117,"speaker":"A"},{"text":"bit","start":1858690,"end":1858850,"confidence":0.99902344,"speaker":"A"},{"text":"challenging.","start":1858850,"end":1859410,"confidence":0.9601237,"speaker":"A"},{"text":"So","start":1860530,"end":1860930,"confidence":0.9951172,"speaker":"A"},{"text":"if","start":1861730,"end":1862050,"confidence":0.6791992,"speaker":"A"},{"text":"you","start":1862050,"end":1862250,"confidence":1,"speaker":"A"},{"text":"look","start":1862250,"end":1862410,"confidence":1,"speaker":"A"},{"text":"at","start":1862410,"end":1862610,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1862610,"end":1862850,"confidence":0.9980469,"speaker":"A"},{"text":"documentation","start":1862850,"end":1863650,"confidence":0.99902344,"speaker":"A"},{"text":"in","start":1864290,"end":1864490,"confidence":0.78466797,"speaker":"A"},{"text":"Web","start":1864490,"end":1864810,"confidence":0.9890137,"speaker":"A"},{"text":"Services","start":1864810,"end":1865090,"confidence":0.99902344,"speaker":"A"},{"text":"Reference,","start":1865090,"end":1865810,"confidence":0.9918213,"speaker":"A"},{"text":"there","start":1866850,"end":1867210,"confidence":0.9921875,"speaker":"A"},{"text":"is","start":1867210,"end":1867570,"confidence":0.99902344,"speaker":"A"},{"text":"a,","start":1867890,"end":1868290,"confidence":0.99853516,"speaker":"A"},{"text":"there's","start":1869090,"end":1869610,"confidence":0.9824219,"speaker":"A"},{"text":"a","start":1869610,"end":1869890,"confidence":0.99902344,"speaker":"A"},{"text":"page","start":1869890,"end":1870290,"confidence":0.9951172,"speaker":"A"},{"text":"called","start":1870290,"end":1870530,"confidence":0.9995117,"speaker":"A"},{"text":"types","start":1870530,"end":1870810,"confidence":0.87719727,"speaker":"A"},{"text":"and","start":1870810,"end":1870970,"confidence":0.9536133,"speaker":"A"},{"text":"dictionaries","start":1870970,"end":1871650,"confidence":0.99609375,"speaker":"A"},{"text":"and","start":1871650,"end":1872010,"confidence":0.99902344,"speaker":"A"},{"text":"there","start":1872010,"end":1872290,"confidence":0.9980469,"speaker":"A"},{"text":"is","start":1872290,"end":1872610,"confidence":0.99609375,"speaker":"A"},{"text":"types.","start":1872610,"end":1873170,"confidence":0.9255371,"speaker":"A"},{"text":"There's","start":1874050,"end":1874410,"confidence":0.98860675,"speaker":"A"},{"text":"different","start":1874410,"end":1874610,"confidence":1,"speaker":"A"},{"text":"type","start":1874610,"end":1875010,"confidence":0.83618164,"speaker":"A"},{"text":"values","start":1875010,"end":1875530,"confidence":0.9992676,"speaker":"A"},{"text":"for","start":1875530,"end":1875690,"confidence":1,"speaker":"A"},{"text":"each","start":1875690,"end":1875930,"confidence":1,"speaker":"A"},{"text":"field.","start":1875930,"end":1876250,"confidence":1,"speaker":"A"},{"text":"If","start":1876250,"end":1876450,"confidence":1,"speaker":"A"},{"text":"you're","start":1876450,"end":1876610,"confidence":1,"speaker":"A"},{"text":"familiar","start":1876610,"end":1876890,"confidence":1,"speaker":"A"},{"text":"with","start":1876890,"end":1877050,"confidence":0.9995117,"speaker":"A"},{"text":"CloudKit,","start":1877050,"end":1877530,"confidence":0.953125,"speaker":"A"},{"text":"you've","start":1877530,"end":1877730,"confidence":0.99886066,"speaker":"A"},{"text":"seen","start":1877730,"end":1877890,"confidence":0.9995117,"speaker":"A"},{"text":"this,","start":1877890,"end":1878130,"confidence":0.9980469,"speaker":"A"},{"text":"right?","start":1878130,"end":1878450,"confidence":0.99853516,"speaker":"A"},{"text":"So","start":1879170,"end":1879570,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":1879570,"end":1879850,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":1879850,"end":1880089,"confidence":1,"speaker":"A"},{"text":"an","start":1880089,"end":1880329,"confidence":0.99853516,"speaker":"A"},{"text":"asset","start":1880329,"end":1880650,"confidence":0.9995117,"speaker":"A"},{"text":"which","start":1880650,"end":1880850,"confidence":1,"speaker":"A"},{"text":"is","start":1880850,"end":1881050,"confidence":0.9995117,"speaker":"A"},{"text":"basically","start":1881050,"end":1881490,"confidence":1,"speaker":"A"},{"text":"a,","start":1882210,"end":1882610,"confidence":0.9838867,"speaker":"A"},{"text":"a","start":1884290,"end":1884690,"confidence":0.9995117,"speaker":"A"},{"text":"binary","start":1884690,"end":1885330,"confidence":0.9998372,"speaker":"A"},{"text":"file.","start":1885330,"end":1885810,"confidence":0.69873047,"speaker":"A"},{"text":"You","start":1886850,"end":1887170,"confidence":1,"speaker":"A"},{"text":"have","start":1887170,"end":1887490,"confidence":1,"speaker":"A"},{"text":"bytes","start":1887490,"end":1888210,"confidence":0.8411458,"speaker":"A"},{"text":"which","start":1889090,"end":1889410,"confidence":1,"speaker":"A"},{"text":"is","start":1889410,"end":1889650,"confidence":0.9995117,"speaker":"A"},{"text":"essentially","start":1889650,"end":1890130,"confidence":0.99902344,"speaker":"A"},{"text":"a","start":1890130,"end":1890450,"confidence":0.95996094,"speaker":"A"},{"text":"60","start":1890530,"end":1890930,"confidence":0.9458,"speaker":"A"},{"text":"byte","start":1891170,"end":1891650,"confidence":0.9658203,"speaker":"A"},{"text":"base","start":1891860,"end":1892100,"confidence":0.8461914,"speaker":"A"},{"text":"64","start":1892100,"end":1892580,"confidence":0.99829,"speaker":"A"},{"text":"encoded","start":1892580,"end":1893140,"confidence":0.9967448,"speaker":"A"},{"text":"string,","start":1893140,"end":1893620,"confidence":0.9970703,"speaker":"A"},{"text":"date","start":1894740,"end":1895140,"confidence":0.98095703,"speaker":"A"},{"text":"type","start":1895140,"end":1895580,"confidence":0.9716797,"speaker":"A"},{"text":"which","start":1895580,"end":1895820,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1895820,"end":1896060,"confidence":0.99658203,"speaker":"A"},{"text":"returned","start":1896060,"end":1896580,"confidence":0.98876953,"speaker":"A"},{"text":"as","start":1896580,"end":1896700,"confidence":0.99902344,"speaker":"A"},{"text":"a","start":1896700,"end":1896860,"confidence":0.9995117,"speaker":"A"},{"text":"number.","start":1896860,"end":1897140,"confidence":0.99560547,"speaker":"A"},{"text":"Double","start":1897780,"end":1898220,"confidence":0.9511719,"speaker":"A"},{"text":"is","start":1898220,"end":1898460,"confidence":0.98779297,"speaker":"A"},{"text":"returned","start":1898460,"end":1898860,"confidence":0.954834,"speaker":"A"},{"text":"as","start":1898860,"end":1899020,"confidence":0.9951172,"speaker":"A"},{"text":"a","start":1899020,"end":1899140,"confidence":0.99853516,"speaker":"A"},{"text":"number","start":1899140,"end":1899380,"confidence":0.99658203,"speaker":"A"},{"text":"because","start":1899940,"end":1900220,"confidence":0.7080078,"speaker":"A"},{"text":"These","start":1900220,"end":1900380,"confidence":0.99658203,"speaker":"A"},{"text":"are","start":1900380,"end":1900500,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":1900500,"end":1900620,"confidence":0.9995117,"speaker":"A"},{"text":"JavaScript","start":1900620,"end":1901220,"confidence":0.9517415,"speaker":"A"},{"text":"types.","start":1901220,"end":1901620,"confidence":0.76464844,"speaker":"A"},{"text":"Int","start":1902260,"end":1902660,"confidence":0.57714844,"speaker":"A"},{"text":"is","start":1902820,"end":1903220,"confidence":0.99609375,"speaker":"A"},{"text":"returned","start":1903540,"end":1904060,"confidence":0.9616699,"speaker":"A"},{"text":"as","start":1904060,"end":1904220,"confidence":0.99902344,"speaker":"A"},{"text":"a","start":1904220,"end":1904340,"confidence":0.99902344,"speaker":"A"},{"text":"number","start":1904340,"end":1904580,"confidence":0.99609375,"speaker":"A"},{"text":"and","start":1905700,"end":1905980,"confidence":0.9946289,"speaker":"A"},{"text":"then","start":1905980,"end":1906140,"confidence":0.99902344,"speaker":"A"},{"text":"there's","start":1906140,"end":1906420,"confidence":0.85302734,"speaker":"A"},{"text":"location","start":1906420,"end":1906980,"confidence":0.99902344,"speaker":"A"},{"text":"reference","start":1907540,"end":1908260,"confidence":0.8996582,"speaker":"A"},{"text":"and","start":1909300,"end":1909620,"confidence":0.9892578,"speaker":"A"},{"text":"then","start":1909620,"end":1909940,"confidence":0.9980469,"speaker":"A"},{"text":"string","start":1910020,"end":1910500,"confidence":0.9926758,"speaker":"A"},{"text":"and","start":1910500,"end":1910740,"confidence":0.98828125,"speaker":"A"},{"text":"list.","start":1910740,"end":1911060,"confidence":0.99658203,"speaker":"A"},{"text":"And","start":1911620,"end":1912020,"confidence":0.9951172,"speaker":"A"},{"text":"how","start":1912100,"end":1912420,"confidence":0.9980469,"speaker":"A"},{"text":"would","start":1912420,"end":1912620,"confidence":0.94873047,"speaker":"A"},{"text":"you","start":1912620,"end":1912900,"confidence":0.99902344,"speaker":"A"},{"text":"like,","start":1913060,"end":1913420,"confidence":0.9946289,"speaker":"A"},{"text":"how","start":1913420,"end":1913660,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":1913660,"end":1913820,"confidence":0.99658203,"speaker":"A"},{"text":"you","start":1913820,"end":1914020,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":1914020,"end":1914340,"confidence":0.99902344,"speaker":"A"},{"text":"adjacent","start":1914820,"end":1915620,"confidence":0.7462891,"speaker":"A"},{"text":"object","start":1915780,"end":1916220,"confidence":0.82470703,"speaker":"A"},{"text":"like","start":1916220,"end":1916460,"confidence":0.99902344,"speaker":"A"},{"text":"this?","start":1916460,"end":1916620,"confidence":0.99902344,"speaker":"A"},{"text":"How","start":1916620,"end":1916780,"confidence":0.9975586,"speaker":"A"},{"text":"would","start":1916780,"end":1916940,"confidence":0.99560547,"speaker":"A"},{"text":"you","start":1916940,"end":1917100,"confidence":0.9980469,"speaker":"A"},{"text":"even","start":1917100,"end":1917300,"confidence":0.9995117,"speaker":"A"},{"text":"represent","start":1917300,"end":1917620,"confidence":0.99853516,"speaker":"A"},{"text":"this","start":1917620,"end":1917900,"confidence":0.8857422,"speaker":"A"},{"text":"in","start":1917900,"end":1918060,"confidence":0.9404297,"speaker":"A"},{"text":"Swift?","start":1918060,"end":1918380,"confidence":0.9929199,"speaker":"A"},{"text":"Because","start":1918380,"end":1918580,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":1918580,"end":1918740,"confidence":0.9995117,"speaker":"A"},{"text":"don't","start":1918740,"end":1918900,"confidence":0.99934894,"speaker":"A"},{"text":"know","start":1918900,"end":1918980,"confidence":0.99902344,"speaker":"A"},{"text":"what","start":1918980,"end":1919100,"confidence":0.9970703,"speaker":"A"},{"text":"type","start":1919100,"end":1919300,"confidence":0.9980469,"speaker":"A"},{"text":"you're","start":1919300,"end":1919460,"confidence":0.99820966,"speaker":"A"},{"text":"going","start":1919460,"end":1919540,"confidence":0.72802734,"speaker":"A"},{"text":"to","start":1919540,"end":1919620,"confidence":0.99902344,"speaker":"A"},{"text":"get.","start":1919620,"end":1919860,"confidence":0.9980469,"speaker":"A"},{"text":"So","start":1921350,"end":1921590,"confidence":0.9604492,"speaker":"A"},{"text":"like","start":1922790,"end":1923070,"confidence":0.99609375,"speaker":"A"},{"text":"I","start":1923070,"end":1923230,"confidence":0.9995117,"speaker":"A"},{"text":"said,","start":1923230,"end":1923390,"confidence":0.9995117,"speaker":"A"},{"text":"this","start":1923390,"end":1923550,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":1923550,"end":1923710,"confidence":0.9975586,"speaker":"A"},{"text":"a","start":1923710,"end":1923830,"confidence":0.9980469,"speaker":"A"},{"text":"work","start":1923830,"end":1923950,"confidence":0.99853516,"speaker":"A"},{"text":"in","start":1923950,"end":1924110,"confidence":0.99902344,"speaker":"A"},{"text":"progress.","start":1924110,"end":1924510,"confidence":0.99975586,"speaker":"A"},{"text":"Sorry.","start":1924510,"end":1924950,"confidence":0.9889323,"speaker":"A"},{"text":"So","start":1925830,"end":1926150,"confidence":0.94628906,"speaker":"A"},{"text":"what","start":1926150,"end":1926350,"confidence":0.99609375,"speaker":"A"},{"text":"I","start":1926350,"end":1926550,"confidence":0.99853516,"speaker":"A"},{"text":"do,","start":1926550,"end":1926870,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":1927190,"end":1927430,"confidence":0.99853516,"speaker":"A"},{"text":"don't","start":1927430,"end":1927590,"confidence":0.9785156,"speaker":"A"},{"text":"know","start":1927590,"end":1927670,"confidence":0.9975586,"speaker":"A"},{"text":"how","start":1927670,"end":1927790,"confidence":0.99902344,"speaker":"A"},{"text":"much","start":1927790,"end":1927950,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":1927950,"end":1928110,"confidence":0.99853516,"speaker":"A"},{"text":"can","start":1928110,"end":1928270,"confidence":0.7426758,"speaker":"A"},{"text":"see","start":1928270,"end":1928430,"confidence":0.9995117,"speaker":"A"},{"text":"this.","start":1928430,"end":1928710,"confidence":0.9951172,"speaker":"A"},{"text":"I'm","start":1929110,"end":1929430,"confidence":0.99886066,"speaker":"A"},{"text":"going","start":1929430,"end":1929550,"confidence":0.71240234,"speaker":"A"},{"text":"to","start":1929550,"end":1929710,"confidence":0.99902344,"speaker":"A"},{"text":"actually","start":1929710,"end":1929910,"confidence":0.9975586,"speaker":"A"},{"text":"move","start":1929910,"end":1930150,"confidence":0.9995117,"speaker":"A"},{"text":"over","start":1930150,"end":1930430,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":1930430,"end":1930790,"confidence":0.99853516,"speaker":"A"},{"text":"my","start":1932470,"end":1932870,"confidence":0.99902344,"speaker":"A"},{"text":"documentation","start":1932950,"end":1933910,"confidence":0.99990237,"speaker":"A"},{"text":"here","start":1933910,"end":1934310,"confidence":0.99609375,"speaker":"A"},{"text":"at","start":1935270,"end":1935550,"confidence":0.9951172,"speaker":"A"},{"text":"this","start":1935550,"end":1935710,"confidence":1,"speaker":"A"},{"text":"point.","start":1935710,"end":1935990,"confidence":0.9995117,"speaker":"A"},{"text":"So","start":1936150,"end":1936550,"confidence":0.9145508,"speaker":"A"},{"text":"how","start":1938310,"end":1938590,"confidence":0.99853516,"speaker":"A"},{"text":"are","start":1938590,"end":1938710,"confidence":0.9394531,"speaker":"A"},{"text":"we","start":1938710,"end":1938830,"confidence":0.42895508,"speaker":"A"},{"text":"doing","start":1938830,"end":1938990,"confidence":0.9980469,"speaker":"A"},{"text":"on","start":1938990,"end":1939190,"confidence":0.99853516,"speaker":"A"},{"text":"time?","start":1939190,"end":1939510,"confidence":0.9995117,"speaker":"A"},{"text":"We","start":1939510,"end":1939790,"confidence":0.7001953,"speaker":"A"},{"text":"good?","start":1939790,"end":1940070,"confidence":0.98876953,"speaker":"A"},{"text":"Yeah,","start":1942550,"end":1942870,"confidence":0.9842122,"speaker":"B"},{"text":"I","start":1942870,"end":1942990,"confidence":0.59228516,"speaker":"B"},{"text":"think,","start":1942990,"end":1943190,"confidence":0.9770508,"speaker":"B"},{"text":"I","start":1943190,"end":1943350,"confidence":0.96240234,"speaker":"B"},{"text":"think","start":1943350,"end":1943470,"confidence":0.9975586,"speaker":"B"},{"text":"we're","start":1943470,"end":1943670,"confidence":0.99902344,"speaker":"B"},{"text":"doing","start":1943670,"end":1943790,"confidence":0.9980469,"speaker":"B"},{"text":"good.","start":1943790,"end":1944070,"confidence":0.9951172,"speaker":"B"},{"text":"Okay,","start":1944870,"end":1945310,"confidence":0.94189453,"speaker":"A"},{"text":"cool.","start":1945310,"end":1945590,"confidence":0.99780273,"speaker":"A"},{"text":"Any,","start":1945590,"end":1945910,"confidence":0.90234375,"speaker":"A"},{"text":"do","start":1946560,"end":1946640,"confidence":0.70996094,"speaker":"A"},{"text":"you","start":1946640,"end":1946760,"confidence":0.9946289,"speaker":"A"},{"text":"want","start":1946760,"end":1946880,"confidence":0.9321289,"speaker":"A"},{"text":"to","start":1946880,"end":1946960,"confidence":0.9980469,"speaker":"A"},{"text":"ask","start":1946960,"end":1947120,"confidence":0.9995117,"speaker":"A"},{"text":"questions?","start":1947120,"end":1947680,"confidence":0.99975586,"speaker":"A"},{"text":"I","start":1949680,"end":1949960,"confidence":0.9975586,"speaker":"B"},{"text":"don't","start":1949960,"end":1950240,"confidence":0.9991862,"speaker":"B"},{"text":"have","start":1950240,"end":1950480,"confidence":0.9995117,"speaker":"B"},{"text":"anything","start":1950480,"end":1950960,"confidence":0.99975586,"speaker":"B"},{"text":"right","start":1951440,"end":1951800,"confidence":0.99902344,"speaker":"B"},{"text":"now.","start":1951800,"end":1952160,"confidence":0.99853516,"speaker":"B"},{"text":"Same","start":1953760,"end":1954160,"confidence":0.98291016,"speaker":"C"},{"text":"nothing","start":1954240,"end":1954600,"confidence":0.99975586,"speaker":"C"},{"text":"right","start":1954600,"end":1954800,"confidence":0.9995117,"speaker":"C"},{"text":"now.","start":1954800,"end":1955040,"confidence":0.9995117,"speaker":"C"},{"text":"But","start":1955040,"end":1955240,"confidence":0.9980469,"speaker":"C"},{"text":"this","start":1955240,"end":1955440,"confidence":0.99853516,"speaker":"C"},{"text":"seems","start":1955440,"end":1955880,"confidence":0.99975586,"speaker":"C"},{"text":"applicable","start":1955880,"end":1956560,"confidence":0.99975586,"speaker":"C"},{"text":"to","start":1956560,"end":1956960,"confidence":0.9995117,"speaker":"C"},{"text":"things","start":1957280,"end":1957600,"confidence":1,"speaker":"C"},{"text":"I'll","start":1957600,"end":1957880,"confidence":0.98779297,"speaker":"C"},{"text":"be","start":1957880,"end":1958000,"confidence":0.9995117,"speaker":"C"},{"text":"doing","start":1958000,"end":1958200,"confidence":0.9995117,"speaker":"C"},{"text":"coming","start":1958200,"end":1958480,"confidence":0.99853516,"speaker":"C"},{"text":"up.","start":1958480,"end":1958800,"confidence":0.99609375,"speaker":"C"},{"text":"Okay,","start":1959360,"end":1960000,"confidence":0.88964844,"speaker":"A"},{"text":"cool.","start":1960000,"end":1960480,"confidence":0.99902344,"speaker":"A"},{"text":"So","start":1963200,"end":1963600,"confidence":0.8515625,"speaker":"A"},{"text":"we","start":1964480,"end":1964760,"confidence":0.9838867,"speaker":"A"},{"text":"have","start":1964760,"end":1964960,"confidence":0.59765625,"speaker":"A"},{"text":"set","start":1964960,"end":1965200,"confidence":0.99902344,"speaker":"A"},{"text":"up","start":1965200,"end":1965520,"confidence":0.9716797,"speaker":"A"},{"text":"in","start":1965920,"end":1966280,"confidence":0.85595703,"speaker":"A"},{"text":"the","start":1966280,"end":1966640,"confidence":0.98291016,"speaker":"A"},{"text":"open.","start":1966800,"end":1967200,"confidence":0.9916992,"speaker":"A"},{"text":"So","start":1967200,"end":1967440,"confidence":0.93896484,"speaker":"A"},{"text":"we","start":1967440,"end":1967520,"confidence":0.9980469,"speaker":"A"},{"text":"have","start":1967520,"end":1967640,"confidence":0.99902344,"speaker":"A"},{"text":"an","start":1967640,"end":1967760,"confidence":0.9116211,"speaker":"A"},{"text":"open","start":1967760,"end":1967960,"confidence":0.99853516,"speaker":"A"},{"text":"API","start":1967960,"end":1968480,"confidence":0.9958496,"speaker":"A"},{"text":"YAML","start":1968480,"end":1968920,"confidence":0.9547526,"speaker":"A"},{"text":"file","start":1968920,"end":1969360,"confidence":0.99731445,"speaker":"A"},{"text":"that","start":1969760,"end":1970040,"confidence":0.9980469,"speaker":"A"},{"text":"you","start":1970040,"end":1970240,"confidence":0.99902344,"speaker":"A"},{"text":"can","start":1970240,"end":1970400,"confidence":0.99853516,"speaker":"A"},{"text":"pull","start":1970400,"end":1970560,"confidence":0.99975586,"speaker":"A"},{"text":"up","start":1970560,"end":1970680,"confidence":0.9995117,"speaker":"A"},{"text":"in","start":1970680,"end":1970880,"confidence":0.9970703,"speaker":"A"},{"text":"Miskit,","start":1970880,"end":1971520,"confidence":0.98657227,"speaker":"A"},{"text":"which","start":1972250,"end":1972370,"confidence":0.9975586,"speaker":"A"},{"text":"is","start":1972370,"end":1972650,"confidence":0.99902344,"speaker":"A"},{"text":"basically","start":1972730,"end":1973370,"confidence":0.99975586,"speaker":"A"},{"text":"every","start":1973370,"end":1973770,"confidence":0.99365234,"speaker":"A"},{"text":"like","start":1973770,"end":1974170,"confidence":0.98828125,"speaker":"A"},{"text":"the","start":1975050,"end":1975370,"confidence":0.99902344,"speaker":"A"},{"text":"documentation","start":1975370,"end":1976170,"confidence":0.99912107,"speaker":"A"},{"text":"converted","start":1976330,"end":1977010,"confidence":0.9996745,"speaker":"A"},{"text":"to","start":1977010,"end":1977210,"confidence":0.9975586,"speaker":"A"},{"text":"YAML.","start":1977210,"end":1977850,"confidence":0.71435547,"speaker":"A"},{"text":"And","start":1978410,"end":1978770,"confidence":0.99072266,"speaker":"A"},{"text":"so","start":1978770,"end":1978970,"confidence":1,"speaker":"A"},{"text":"what","start":1978970,"end":1979090,"confidence":0.9995117,"speaker":"A"},{"text":"we","start":1979090,"end":1979290,"confidence":1,"speaker":"A"},{"text":"do","start":1979290,"end":1979570,"confidence":0.9980469,"speaker":"A"},{"text":"is","start":1979570,"end":1979930,"confidence":0.6928711,"speaker":"A"},{"text":"you","start":1980090,"end":1980410,"confidence":1,"speaker":"A"},{"text":"can","start":1980410,"end":1980690,"confidence":1,"speaker":"A"},{"text":"set","start":1980690,"end":1980930,"confidence":0.9995117,"speaker":"A"},{"text":"up","start":1980930,"end":1981210,"confidence":0.9975586,"speaker":"A"},{"text":"in","start":1982490,"end":1982770,"confidence":0.98095703,"speaker":"A"},{"text":"the","start":1982770,"end":1982930,"confidence":0.9951172,"speaker":"A"},{"text":"YAML","start":1982930,"end":1983250,"confidence":0.8038737,"speaker":"A"},{"text":"the","start":1983250,"end":1983410,"confidence":0.97753906,"speaker":"A"},{"text":"field","start":1983410,"end":1983690,"confidence":0.9980469,"speaker":"A"},{"text":"value","start":1983770,"end":1984130,"confidence":1,"speaker":"A"},{"text":"requests","start":1984130,"end":1984690,"confidence":0.8439128,"speaker":"A"},{"text":"and","start":1984690,"end":1984810,"confidence":0.9970703,"speaker":"A"},{"text":"they","start":1984810,"end":1984930,"confidence":1,"speaker":"A"},{"text":"have","start":1984930,"end":1985090,"confidence":1,"speaker":"A"},{"text":"an","start":1985090,"end":1985290,"confidence":0.9633789,"speaker":"A"},{"text":"enum","start":1985290,"end":1985770,"confidence":0.8808594,"speaker":"A"},{"text":"type","start":1985770,"end":1986090,"confidence":0.8652344,"speaker":"A"},{"text":"essentially","start":1986090,"end":1986650,"confidence":0.94311523,"speaker":"A"},{"text":"for,","start":1987930,"end":1988330,"confidence":0.96875,"speaker":"A"},{"text":"for","start":1992090,"end":1992450,"confidence":0.9995117,"speaker":"A"},{"text":"open","start":1992450,"end":1992810,"confidence":0.9995117,"speaker":"A"},{"text":"API.","start":1992970,"end":1993610,"confidence":0.9975586,"speaker":"A"},{"text":"So","start":1993690,"end":1994090,"confidence":0.98583984,"speaker":"A"},{"text":"and","start":1994970,"end":1995250,"confidence":0.9350586,"speaker":"A"},{"text":"then,","start":1995250,"end":1995490,"confidence":0.39233398,"speaker":"A"},{"text":"so","start":1995490,"end":1995770,"confidence":0.9975586,"speaker":"A"},{"text":"this","start":1995770,"end":1996010,"confidence":0.99902344,"speaker":"A"},{"text":"has,","start":1996010,"end":1996330,"confidence":0.99853516,"speaker":"A"},{"text":"you","start":1996330,"end":1996570,"confidence":0.6645508,"speaker":"A"},{"text":"know,","start":1996570,"end":1996690,"confidence":0.97998047,"speaker":"A"},{"text":"it","start":1996690,"end":1996810,"confidence":0.9975586,"speaker":"A"},{"text":"could","start":1996810,"end":1996930,"confidence":0.9838867,"speaker":"A"},{"text":"be","start":1996930,"end":1997090,"confidence":1,"speaker":"A"},{"text":"one","start":1997090,"end":1997210,"confidence":0.99853516,"speaker":"A"},{"text":"of","start":1997210,"end":1997410,"confidence":0.99902344,"speaker":"A"},{"text":"either","start":1997410,"end":1997770,"confidence":0.9968262,"speaker":"A"},{"text":"any","start":1997770,"end":1998010,"confidence":0.9995117,"speaker":"A"},{"text":"of","start":1998010,"end":1998170,"confidence":1,"speaker":"A"},{"text":"these","start":1998170,"end":1998370,"confidence":0.99902344,"speaker":"A"},{"text":"types","start":1998370,"end":1998810,"confidence":0.9453125,"speaker":"A"},{"text":"of.","start":1998860,"end":1999020,"confidence":0.5004883,"speaker":"A"},{"text":"And","start":2000050,"end":2000210,"confidence":0.97216797,"speaker":"A"},{"text":"then","start":2000210,"end":2000530,"confidence":0.9995117,"speaker":"A"},{"text":"there's","start":2000850,"end":2001210,"confidence":0.99560547,"speaker":"A"},{"text":"an","start":2001210,"end":2001370,"confidence":0.76220703,"speaker":"A"},{"text":"enum","start":2001370,"end":2001850,"confidence":0.92211914,"speaker":"A"},{"text":"in","start":2001850,"end":2002090,"confidence":0.9995117,"speaker":"A"},{"text":"case","start":2002090,"end":2002290,"confidence":1,"speaker":"A"},{"text":"you","start":2002290,"end":2002530,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":2002530,"end":2002730,"confidence":1,"speaker":"A"},{"text":"a","start":2002730,"end":2002890,"confidence":0.99902344,"speaker":"A"},{"text":"list.","start":2002890,"end":2003170,"confidence":0.9995117,"speaker":"A"},{"text":"So","start":2004050,"end":2004450,"confidence":0.99560547,"speaker":"A"},{"text":"if","start":2005250,"end":2005570,"confidence":0.9980469,"speaker":"A"},{"text":"you","start":2005570,"end":2005770,"confidence":1,"speaker":"A"},{"text":"have","start":2005770,"end":2005970,"confidence":1,"speaker":"A"},{"text":"a","start":2005970,"end":2006210,"confidence":0.99902344,"speaker":"A"},{"text":"list","start":2006210,"end":2006530,"confidence":0.9995117,"speaker":"A"},{"text":"value","start":2006850,"end":2007250,"confidence":0.9995117,"speaker":"A"},{"text":"type","start":2007330,"end":2007890,"confidence":0.99780273,"speaker":"A"},{"text":"there","start":2008530,"end":2008850,"confidence":1,"speaker":"A"},{"text":"is","start":2008850,"end":2009090,"confidence":1,"speaker":"A"},{"text":"an","start":2009090,"end":2009290,"confidence":0.9995117,"speaker":"A"},{"text":"extra","start":2009290,"end":2009690,"confidence":0.99975586,"speaker":"A"},{"text":"property","start":2009690,"end":2010290,"confidence":0.9995117,"speaker":"A"},{"text":"called","start":2010290,"end":2010690,"confidence":0.9995117,"speaker":"A"},{"text":"type","start":2011010,"end":2011450,"confidence":0.81103516,"speaker":"A"},{"text":"and","start":2011450,"end":2011690,"confidence":0.9951172,"speaker":"A"},{"text":"then","start":2011690,"end":2011850,"confidence":0.99365234,"speaker":"A"},{"text":"that","start":2011850,"end":2012010,"confidence":0.9995117,"speaker":"A"},{"text":"will","start":2012010,"end":2012210,"confidence":0.9995117,"speaker":"A"},{"text":"tell","start":2012210,"end":2012410,"confidence":1,"speaker":"A"},{"text":"you","start":2012410,"end":2012570,"confidence":1,"speaker":"A"},{"text":"what","start":2012570,"end":2012810,"confidence":0.59277344,"speaker":"A"},{"text":"type","start":2012810,"end":2013250,"confidence":0.8652344,"speaker":"A"},{"text":"the.","start":2013410,"end":2013810,"confidence":0.98876953,"speaker":"A"},{"text":"The","start":2014450,"end":2014730,"confidence":0.99853516,"speaker":"A"},{"text":"list","start":2014730,"end":2015010,"confidence":0.9995117,"speaker":"A"},{"text":"is.","start":2015010,"end":2015329,"confidence":0.9995117,"speaker":"A"},{"text":"And","start":2015329,"end":2015570,"confidence":0.99365234,"speaker":"A"},{"text":"it's","start":2015570,"end":2016050,"confidence":0.99397784,"speaker":"A"},{"text":"homo","start":2016530,"end":2017250,"confidence":0.8297526,"speaker":"A"},{"text":"homomorphic.","start":2017250,"end":2018450,"confidence":0.99763995,"speaker":"A"},{"text":"It's","start":2018690,"end":2019050,"confidence":0.9720052,"speaker":"A"},{"text":"all","start":2019050,"end":2019210,"confidence":0.99560547,"speaker":"A"},{"text":"the","start":2019210,"end":2019330,"confidence":0.9995117,"speaker":"A"},{"text":"same","start":2019330,"end":2019570,"confidence":0.99902344,"speaker":"A"},{"text":"list","start":2019890,"end":2020210,"confidence":0.97314453,"speaker":"A"},{"text":"type.","start":2020210,"end":2020490,"confidence":0.9848633,"speaker":"A"},{"text":"You","start":2020490,"end":2020610,"confidence":0.9995117,"speaker":"A"},{"text":"can't","start":2020610,"end":2020810,"confidence":0.98567706,"speaker":"A"},{"text":"have","start":2020810,"end":2021010,"confidence":1,"speaker":"A"},{"text":"lists","start":2021010,"end":2021330,"confidence":0.9987793,"speaker":"A"},{"text":"of","start":2021330,"end":2021450,"confidence":0.9995117,"speaker":"A"},{"text":"different","start":2021450,"end":2021690,"confidence":1,"speaker":"A"},{"text":"types.","start":2021690,"end":2022210,"confidence":0.92578125,"speaker":"A"},{"text":"And","start":2024050,"end":2024450,"confidence":0.95751953,"speaker":"A"},{"text":"then","start":2024610,"end":2025010,"confidence":0.9038086,"speaker":"A"},{"text":"we","start":2026030,"end":2026190,"confidence":0.9941406,"speaker":"A"},{"text":"have","start":2026190,"end":2026470,"confidence":0.9995117,"speaker":"A"},{"text":"here","start":2026470,"end":2026830,"confidence":0.99902344,"speaker":"A"},{"text":"again","start":2028830,"end":2029230,"confidence":0.99853516,"speaker":"A"},{"text":"field","start":2029230,"end":2029590,"confidence":0.9404297,"speaker":"A"},{"text":"value.","start":2029590,"end":2029950,"confidence":0.99902344,"speaker":"A"},{"text":"Sometimes","start":2031390,"end":2031910,"confidence":0.99886066,"speaker":"A"},{"text":"the","start":2031910,"end":2032070,"confidence":0.98876953,"speaker":"A"},{"text":"type","start":2032070,"end":2032310,"confidence":0.9086914,"speaker":"A"},{"text":"is","start":2032310,"end":2032470,"confidence":0.99853516,"speaker":"A"},{"text":"available,","start":2032470,"end":2032750,"confidence":0.9995117,"speaker":"A"},{"text":"sometimes","start":2032910,"end":2033430,"confidence":0.9996745,"speaker":"A"},{"text":"it's","start":2033430,"end":2033750,"confidence":0.99886066,"speaker":"A"},{"text":"not.","start":2033750,"end":2034030,"confidence":0.9995117,"speaker":"A"},{"text":"But","start":2034590,"end":2034910,"confidence":0.99658203,"speaker":"A"},{"text":"basically","start":2034910,"end":2035390,"confidence":0.99975586,"speaker":"A"},{"text":"we","start":2035390,"end":2035670,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":2035670,"end":2035910,"confidence":0.9995117,"speaker":"A"},{"text":"all","start":2035910,"end":2036150,"confidence":1,"speaker":"A"},{"text":"the","start":2036150,"end":2036310,"confidence":0.9995117,"speaker":"A"},{"text":"different","start":2036310,"end":2036590,"confidence":0.9995117,"speaker":"A"},{"text":"value","start":2036750,"end":2037150,"confidence":0.99902344,"speaker":"A"},{"text":"types","start":2037230,"end":2037710,"confidence":0.99975586,"speaker":"A"},{"text":"available","start":2037710,"end":2038030,"confidence":0.99902344,"speaker":"A"},{"text":"to","start":2038190,"end":2038470,"confidence":1,"speaker":"A"},{"text":"us","start":2038470,"end":2038750,"confidence":1,"speaker":"A"},{"text":"in","start":2038830,"end":2039110,"confidence":0.97802734,"speaker":"A"},{"text":"a","start":2039110,"end":2039270,"confidence":0.96728516,"speaker":"A"},{"text":"CK","start":2039270,"end":2039630,"confidence":0.9001465,"speaker":"A"},{"text":"value.","start":2039630,"end":2039950,"confidence":0.9091797,"speaker":"A"},{"text":"And","start":2041950,"end":2042230,"confidence":0.9848633,"speaker":"A"},{"text":"then","start":2042230,"end":2042510,"confidence":0.99902344,"speaker":"A"},{"text":"this","start":2042990,"end":2043310,"confidence":0.99853516,"speaker":"A"},{"text":"is.","start":2043310,"end":2043550,"confidence":0.99902344,"speaker":"A"},{"text":"Then","start":2043550,"end":2043870,"confidence":0.9848633,"speaker":"A"},{"text":"the","start":2044110,"end":2044430,"confidence":0.98828125,"speaker":"A"},{"text":"Open","start":2044430,"end":2044750,"confidence":0.9946289,"speaker":"A"},{"text":"API","start":2045150,"end":2045670,"confidence":0.99780273,"speaker":"A"},{"text":"generator","start":2045670,"end":2046190,"confidence":0.97143555,"speaker":"A"},{"text":"essentially","start":2046190,"end":2046870,"confidence":0.99902344,"speaker":"A"},{"text":"builds","start":2046870,"end":2047310,"confidence":0.9782715,"speaker":"A"},{"text":"this","start":2047310,"end":2047470,"confidence":0.9926758,"speaker":"A"},{"text":"for","start":2047470,"end":2047670,"confidence":0.9838867,"speaker":"A"},{"text":"me","start":2047670,"end":2047950,"confidence":0.99853516,"speaker":"A"},{"text":"which","start":2048510,"end":2048830,"confidence":0.9980469,"speaker":"A"},{"text":"is.","start":2048830,"end":2049150,"confidence":0.9873047,"speaker":"A"},{"text":"Has","start":2049710,"end":2049990,"confidence":0.9980469,"speaker":"A"},{"text":"an","start":2049990,"end":2050150,"confidence":0.47924805,"speaker":"A"},{"text":"enum","start":2050150,"end":2050670,"confidence":0.7680664,"speaker":"A"},{"text":"and","start":2050830,"end":2051110,"confidence":0.9902344,"speaker":"A"},{"text":"a","start":2051110,"end":2051270,"confidence":0.9863281,"speaker":"A"},{"text":"struck","start":2051270,"end":2051510,"confidence":0.7644043,"speaker":"A"},{"text":"for","start":2051510,"end":2051670,"confidence":0.5751953,"speaker":"A"},{"text":"field","start":2051670,"end":2051950,"confidence":0.7363281,"speaker":"A"},{"text":"field","start":2052110,"end":2052510,"confidence":1,"speaker":"A"},{"text":"value","start":2052670,"end":2053070,"confidence":0.99902344,"speaker":"A"},{"text":"request","start":2053070,"end":2053630,"confidence":0.7783203,"speaker":"A"},{"text":"and","start":2055329,"end":2055449,"confidence":0.9321289,"speaker":"A"},{"text":"then","start":2055449,"end":2055609,"confidence":0.9946289,"speaker":"A"},{"text":"it","start":2055609,"end":2055769,"confidence":1,"speaker":"A"},{"text":"does","start":2055769,"end":2055929,"confidence":0.9995117,"speaker":"A"},{"text":"all","start":2055929,"end":2056089,"confidence":0.9941406,"speaker":"A"},{"text":"the","start":2056089,"end":2056249,"confidence":0.9946289,"speaker":"A"},{"text":"decoding","start":2056249,"end":2056769,"confidence":0.99886066,"speaker":"A"},{"text":"for","start":2056769,"end":2056969,"confidence":0.99902344,"speaker":"A"},{"text":"me.","start":2056969,"end":2057249,"confidence":1,"speaker":"A"},{"text":"Thankfully","start":2057249,"end":2057849,"confidence":0.99523926,"speaker":"A"},{"text":"I","start":2057849,"end":2058089,"confidence":0.99560547,"speaker":"A"},{"text":"didn't","start":2058089,"end":2058289,"confidence":0.95670575,"speaker":"A"},{"text":"have","start":2058289,"end":2058369,"confidence":0.99902344,"speaker":"A"},{"text":"to","start":2058369,"end":2058449,"confidence":0.9980469,"speaker":"A"},{"text":"do","start":2058449,"end":2058569,"confidence":0.91845703,"speaker":"A"},{"text":"any","start":2058569,"end":2058769,"confidence":1,"speaker":"A"},{"text":"of","start":2058769,"end":2058929,"confidence":0.9995117,"speaker":"A"},{"text":"it.","start":2058929,"end":2059169,"confidence":0.9975586,"speaker":"A"},{"text":"And","start":2063089,"end":2063369,"confidence":0.97021484,"speaker":"A"},{"text":"then","start":2063369,"end":2063649,"confidence":0.99658203,"speaker":"A"},{"text":"yeah,","start":2065409,"end":2065809,"confidence":0.94091797,"speaker":"A"},{"text":"I","start":2065809,"end":2066009,"confidence":0.99902344,"speaker":"A"},{"text":"just","start":2066009,"end":2066169,"confidence":0.99902344,"speaker":"A"},{"text":"wanted","start":2066169,"end":2066409,"confidence":0.99780273,"speaker":"A"},{"text":"to","start":2066409,"end":2066569,"confidence":0.99902344,"speaker":"A"},{"text":"cover","start":2066569,"end":2066769,"confidence":1,"speaker":"A"},{"text":"that","start":2066769,"end":2067009,"confidence":0.9995117,"speaker":"A"},{"text":"piece","start":2067009,"end":2067409,"confidence":0.9667969,"speaker":"A"},{"text":"where","start":2067569,"end":2067929,"confidence":0.9995117,"speaker":"A"},{"text":"we","start":2067929,"end":2068249,"confidence":0.9995117,"speaker":"A"},{"text":"show","start":2068249,"end":2068609,"confidence":0.99902344,"speaker":"A"},{"text":"how","start":2068929,"end":2069249,"confidence":0.9995117,"speaker":"A"},{"text":"we","start":2069249,"end":2069449,"confidence":1,"speaker":"A"},{"text":"deal","start":2069449,"end":2069609,"confidence":1,"speaker":"A"},{"text":"with","start":2069609,"end":2069888,"confidence":0.9995117,"speaker":"A"},{"text":"these","start":2069888,"end":2070209,"confidence":0.99072266,"speaker":"A"},{"text":"kind","start":2070209,"end":2070369,"confidence":0.98876953,"speaker":"A"},{"text":"of","start":2070369,"end":2070529,"confidence":0.5283203,"speaker":"A"},{"text":"like","start":2070529,"end":2070729,"confidence":0.984375,"speaker":"A"},{"text":"polymorphic","start":2070729,"end":2071969,"confidence":0.9777832,"speaker":"A"},{"text":"types","start":2071969,"end":2072529,"confidence":0.76416016,"speaker":"A"},{"text":"and","start":2073249,"end":2073529,"confidence":0.99658203,"speaker":"A"},{"text":"how","start":2073529,"end":2073729,"confidence":0.9995117,"speaker":"A"},{"text":"those","start":2073729,"end":2073969,"confidence":0.99902344,"speaker":"A"},{"text":"work.","start":2073969,"end":2074289,"confidence":0.99853516,"speaker":"A"},{"text":"The","start":2075329,"end":2075569,"confidence":0.9746094,"speaker":"A"},{"text":"next","start":2075569,"end":2075729,"confidence":0.9902344,"speaker":"A"},{"text":"thing","start":2075729,"end":2075889,"confidence":0.9692383,"speaker":"A"},{"text":"I","start":2075889,"end":2075969,"confidence":0.89208984,"speaker":"A"},{"text":"want","start":2075969,"end":2076089,"confidence":0.79052734,"speaker":"A"},{"text":"to","start":2076089,"end":2076209,"confidence":0.99902344,"speaker":"A"},{"text":"cover","start":2076209,"end":2076409,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":2076409,"end":2076689,"confidence":0.99853516,"speaker":"A"},{"text":"error","start":2076689,"end":2077009,"confidence":0.914917,"speaker":"A"},{"text":"handling.","start":2077009,"end":2077489,"confidence":0.99902344,"speaker":"A"},{"text":"So","start":2079249,"end":2079529,"confidence":0.99121094,"speaker":"A"},{"text":"if","start":2079529,"end":2079729,"confidence":0.6791992,"speaker":"A"},{"text":"you","start":2079729,"end":2079929,"confidence":1,"speaker":"A"},{"text":"look","start":2079929,"end":2080049,"confidence":1,"speaker":"A"},{"text":"at","start":2080049,"end":2080169,"confidence":1,"speaker":"A"},{"text":"the","start":2080169,"end":2080289,"confidence":1,"speaker":"A"},{"text":"documentation","start":2080289,"end":2081009,"confidence":0.9964844,"speaker":"A"},{"text":"gives","start":2081569,"end":2081969,"confidence":0.9904785,"speaker":"A"},{"text":"you.","start":2081969,"end":2082209,"confidence":0.99658203,"speaker":"A"},{"text":"If","start":2083390,"end":2083510,"confidence":0.98876953,"speaker":"A"},{"text":"you","start":2083510,"end":2083630,"confidence":0.9975586,"speaker":"A"},{"text":"get","start":2083630,"end":2083750,"confidence":0.97509766,"speaker":"A"},{"text":"an","start":2083750,"end":2083910,"confidence":0.9604492,"speaker":"A"},{"text":"error","start":2083910,"end":2084270,"confidence":0.8522949,"speaker":"A"},{"text":"we","start":2085150,"end":2085430,"confidence":0.99121094,"speaker":"A"},{"text":"get","start":2085430,"end":2085630,"confidence":0.71777344,"speaker":"A"},{"text":"something","start":2085630,"end":2085870,"confidence":0.9995117,"speaker":"A"},{"text":"like","start":2085870,"end":2086070,"confidence":0.9995117,"speaker":"A"},{"text":"this","start":2086070,"end":2086350,"confidence":0.99902344,"speaker":"A"},{"text":"and","start":2088030,"end":2088350,"confidence":0.9238281,"speaker":"A"},{"text":"then","start":2088350,"end":2088630,"confidence":0.9921875,"speaker":"A"},{"text":"that","start":2088630,"end":2088910,"confidence":0.90283203,"speaker":"A"},{"text":"will","start":2088910,"end":2089150,"confidence":0.7714844,"speaker":"A"},{"text":"show","start":2089150,"end":2089350,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":2089350,"end":2089630,"confidence":0.99658203,"speaker":"A"},{"text":"in","start":2089870,"end":2090150,"confidence":0.7524414,"speaker":"A"},{"text":"the.","start":2090150,"end":2090350,"confidence":0.80615234,"speaker":"A"},{"text":"In","start":2090350,"end":2090590,"confidence":0.98876953,"speaker":"A"},{"text":"the","start":2090590,"end":2090750,"confidence":0.9995117,"speaker":"A"},{"text":"table","start":2090750,"end":2091070,"confidence":0.9995117,"speaker":"A"},{"text":"actually","start":2091070,"end":2091390,"confidence":0.99853516,"speaker":"A"},{"text":"shows","start":2091390,"end":2091710,"confidence":0.99975586,"speaker":"A"},{"text":"you","start":2091710,"end":2091830,"confidence":0.9995117,"speaker":"A"},{"text":"what","start":2091830,"end":2092030,"confidence":0.9995117,"speaker":"A"},{"text":"each","start":2092030,"end":2092350,"confidence":0.9995117,"speaker":"A"},{"text":"error","start":2092830,"end":2093270,"confidence":0.87854004,"speaker":"A"},{"text":"means.","start":2093270,"end":2093630,"confidence":0.99853516,"speaker":"A"},{"text":"So","start":2094830,"end":2095230,"confidence":0.9707031,"speaker":"A"},{"text":"again","start":2095230,"end":2095630,"confidence":0.9995117,"speaker":"A"},{"text":"we","start":2095710,"end":2095990,"confidence":1,"speaker":"A"},{"text":"do","start":2095990,"end":2096150,"confidence":0.9980469,"speaker":"A"},{"text":"like","start":2096150,"end":2096270,"confidence":0.9892578,"speaker":"A"},{"text":"an","start":2096270,"end":2096430,"confidence":0.9868164,"speaker":"A"},{"text":"enum","start":2096430,"end":2096990,"confidence":0.9489746,"speaker":"A"},{"text":"in","start":2097150,"end":2097470,"confidence":0.54541016,"speaker":"A"},{"text":"YAML.","start":2097470,"end":2098110,"confidence":0.94954425,"speaker":"A"},{"text":"It's","start":2098830,"end":2099190,"confidence":0.99853516,"speaker":"A"},{"text":"basically","start":2099190,"end":2099550,"confidence":0.99975586,"speaker":"A"},{"text":"a","start":2099550,"end":2099750,"confidence":0.9970703,"speaker":"A"},{"text":"string","start":2099750,"end":2100110,"confidence":0.99975586,"speaker":"A"},{"text":"and","start":2100110,"end":2100310,"confidence":0.99658203,"speaker":"A"},{"text":"then","start":2100310,"end":2100430,"confidence":0.9746094,"speaker":"A"},{"text":"we","start":2100430,"end":2100550,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":2100550,"end":2100710,"confidence":0.9995117,"speaker":"A"},{"text":"everything","start":2100710,"end":2100910,"confidence":0.9995117,"speaker":"A"},{"text":"else","start":2100910,"end":2101190,"confidence":0.99975586,"speaker":"A"},{"text":"be","start":2101190,"end":2101350,"confidence":0.98046875,"speaker":"A"},{"text":"a","start":2101350,"end":2101510,"confidence":0.99853516,"speaker":"A"},{"text":"string.","start":2101510,"end":2101950,"confidence":0.99902344,"speaker":"A"},{"text":"And","start":2102590,"end":2102870,"confidence":0.96240234,"speaker":"A"},{"text":"then","start":2102870,"end":2103150,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":2103310,"end":2103590,"confidence":0.9946289,"speaker":"A"},{"text":"open","start":2103590,"end":2103790,"confidence":0.9946289,"speaker":"A"},{"text":"API","start":2103790,"end":2104270,"confidence":0.95581055,"speaker":"A"},{"text":"generator","start":2104270,"end":2104790,"confidence":0.998291,"speaker":"A"},{"text":"will","start":2104790,"end":2105030,"confidence":0.9975586,"speaker":"A"},{"text":"automatically","start":2105030,"end":2105590,"confidence":0.8905029,"speaker":"A"},{"text":"generate","start":2105590,"end":2106110,"confidence":1,"speaker":"A"},{"text":"this","start":2106110,"end":2106430,"confidence":0.9970703,"speaker":"A"},{"text":"which","start":2107710,"end":2108110,"confidence":0.9975586,"speaker":"A"},{"text":"gives","start":2108110,"end":2108510,"confidence":0.9970703,"speaker":"A"},{"text":"us","start":2108510,"end":2108630,"confidence":0.99609375,"speaker":"A"},{"text":"the","start":2108630,"end":2108910,"confidence":0.53759766,"speaker":"A"},{"text":"server","start":2109500,"end":2109860,"confidence":0.9980469,"speaker":"A"},{"text":"error","start":2109860,"end":2110140,"confidence":0.986084,"speaker":"A"},{"text":"code","start":2110140,"end":2110500,"confidence":0.9977214,"speaker":"A"},{"text":"and","start":2110500,"end":2110740,"confidence":0.9145508,"speaker":"A"},{"text":"the","start":2110740,"end":2110980,"confidence":0.95751953,"speaker":"A"},{"text":"error","start":2110980,"end":2111220,"confidence":0.9855957,"speaker":"A"},{"text":"response.","start":2111220,"end":2111820,"confidence":0.89868164,"speaker":"A"},{"text":"It'll","start":2112380,"end":2112820,"confidence":0.9863281,"speaker":"A"},{"text":"also","start":2112820,"end":2113060,"confidence":1,"speaker":"A"},{"text":"do","start":2113060,"end":2113300,"confidence":1,"speaker":"A"},{"text":"all","start":2113300,"end":2113460,"confidence":1,"speaker":"A"},{"text":"this","start":2113460,"end":2113660,"confidence":0.61621094,"speaker":"A"},{"text":"stuff","start":2113660,"end":2113980,"confidence":1,"speaker":"A"},{"text":"here,","start":2113980,"end":2114260,"confidence":1,"speaker":"A"},{"text":"which","start":2114260,"end":2114580,"confidence":0.9399414,"speaker":"A"},{"text":"is","start":2114580,"end":2114820,"confidence":0.99658203,"speaker":"A"},{"text":"really","start":2114820,"end":2115060,"confidence":0.74316406,"speaker":"A"},{"text":"nice.","start":2115060,"end":2115500,"confidence":1,"speaker":"A"},{"text":"And","start":2117980,"end":2118260,"confidence":0.9970703,"speaker":"A"},{"text":"then","start":2118260,"end":2118540,"confidence":0.9995117,"speaker":"A"},{"text":"we've","start":2118620,"end":2119180,"confidence":0.9142253,"speaker":"A"},{"text":"then","start":2119180,"end":2119500,"confidence":0.953125,"speaker":"A"},{"text":"in","start":2119500,"end":2119700,"confidence":0.984375,"speaker":"A"},{"text":"our.","start":2119700,"end":2119980,"confidence":0.9980469,"speaker":"A"},{"text":"We've","start":2120140,"end":2120500,"confidence":0.9944661,"speaker":"A"},{"text":"abstracted","start":2120500,"end":2121220,"confidence":0.9979248,"speaker":"A"},{"text":"a","start":2121220,"end":2121340,"confidence":0.9995117,"speaker":"A"},{"text":"lot","start":2121340,"end":2121460,"confidence":1,"speaker":"A"},{"text":"of","start":2121460,"end":2121580,"confidence":1,"speaker":"A"},{"text":"this","start":2121580,"end":2121740,"confidence":0.99658203,"speaker":"A"},{"text":"in","start":2121740,"end":2121940,"confidence":0.72802734,"speaker":"A"},{"text":"miskit.","start":2121940,"end":2122620,"confidence":0.83813477,"speaker":"A"},{"text":"So","start":2122940,"end":2123180,"confidence":1,"speaker":"A"},{"text":"that","start":2123180,"end":2123340,"confidence":1,"speaker":"A"},{"text":"way","start":2123340,"end":2123660,"confidence":0.99902344,"speaker":"A"},{"text":"we","start":2123980,"end":2124260,"confidence":1,"speaker":"A"},{"text":"also","start":2124260,"end":2124460,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":2124460,"end":2124740,"confidence":1,"speaker":"A"},{"text":"now","start":2124740,"end":2125100,"confidence":0.99853516,"speaker":"A"},{"text":"a","start":2125580,"end":2125860,"confidence":0.99658203,"speaker":"A"},{"text":"cloud","start":2125860,"end":2126220,"confidence":0.9638672,"speaker":"A"},{"text":"cloud","start":2126540,"end":2127100,"confidence":0.9489746,"speaker":"A"},{"text":"error","start":2127100,"end":2127500,"confidence":0.94311523,"speaker":"A"},{"text":"type","start":2127500,"end":2127980,"confidence":0.99975586,"speaker":"A"},{"text":"which","start":2128540,"end":2128900,"confidence":1,"speaker":"A"},{"text":"gives","start":2128900,"end":2129220,"confidence":1,"speaker":"A"},{"text":"us","start":2129220,"end":2129380,"confidence":1,"speaker":"A"},{"text":"a","start":2129380,"end":2129500,"confidence":1,"speaker":"A"},{"text":"lot","start":2129500,"end":2129660,"confidence":1,"speaker":"A"},{"text":"more","start":2129660,"end":2129980,"confidence":0.9995117,"speaker":"A"},{"text":"info","start":2130060,"end":2130700,"confidence":0.99975586,"speaker":"A"},{"text":"regarding","start":2130860,"end":2131460,"confidence":0.87874347,"speaker":"A"},{"text":"that.","start":2131460,"end":2131820,"confidence":0.99853516,"speaker":"A"},{"text":"So","start":2133900,"end":2134220,"confidence":0.9975586,"speaker":"A"},{"text":"that's","start":2134220,"end":2134540,"confidence":0.9998372,"speaker":"A"},{"text":"how","start":2134540,"end":2134660,"confidence":1,"speaker":"A"},{"text":"we","start":2134660,"end":2134820,"confidence":1,"speaker":"A"},{"text":"handle","start":2134820,"end":2135180,"confidence":0.99975586,"speaker":"A"},{"text":"errors.","start":2135180,"end":2135740,"confidence":0.99912107,"speaker":"A"},{"text":"And","start":2135820,"end":2136140,"confidence":0.99658203,"speaker":"A"},{"text":"everything","start":2136140,"end":2136460,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":2137240,"end":2137360,"confidence":0.9736328,"speaker":"A"},{"text":"do","start":2137360,"end":2137520,"confidence":0.9995117,"speaker":"A"},{"text":"in","start":2137520,"end":2137680,"confidence":0.90283203,"speaker":"A"},{"text":"the","start":2137680,"end":2137800,"confidence":0.92822266,"speaker":"A"},{"text":"abs,","start":2137800,"end":2138080,"confidence":0.4827881,"speaker":"A"},{"text":"the","start":2138080,"end":2138360,"confidence":0.9897461,"speaker":"A"},{"text":"more","start":2138360,"end":2138600,"confidence":0.99072266,"speaker":"A"},{"text":"abstract","start":2138600,"end":2138960,"confidence":0.8538411,"speaker":"A"},{"text":"higher","start":2138960,"end":2139280,"confidence":0.99365234,"speaker":"A"},{"text":"up","start":2139280,"end":2139560,"confidence":0.9970703,"speaker":"A"},{"text":"stuff","start":2139560,"end":2139960,"confidence":0.9713542,"speaker":"A"},{"text":"is","start":2140280,"end":2140680,"confidence":0.99902344,"speaker":"A"},{"text":"done","start":2140680,"end":2141080,"confidence":0.9995117,"speaker":"A"},{"text":"using","start":2141800,"end":2142200,"confidence":1,"speaker":"A"},{"text":"type","start":2142360,"end":2142840,"confidence":0.77783203,"speaker":"A"},{"text":"throws","start":2142840,"end":2143320,"confidence":0.9947917,"speaker":"A"},{"text":"like","start":2143320,"end":2143560,"confidence":0.9794922,"speaker":"A"},{"text":"I","start":2143560,"end":2143760,"confidence":0.99902344,"speaker":"A"},{"text":"have","start":2143760,"end":2143960,"confidence":0.9995117,"speaker":"A"},{"text":"type","start":2143960,"end":2144240,"confidence":0.7751465,"speaker":"A"},{"text":"throws","start":2144240,"end":2144560,"confidence":0.9274089,"speaker":"A"},{"text":"and","start":2144560,"end":2144680,"confidence":0.5439453,"speaker":"A"},{"text":"everything.","start":2144680,"end":2144920,"confidence":0.9995117,"speaker":"A"},{"text":"So","start":2145160,"end":2145560,"confidence":0.9941406,"speaker":"A"},{"text":"that's","start":2145960,"end":2146360,"confidence":0.9996745,"speaker":"A"},{"text":"how","start":2146360,"end":2146440,"confidence":1,"speaker":"A"},{"text":"I","start":2146440,"end":2146560,"confidence":0.9995117,"speaker":"A"},{"text":"handle","start":2146560,"end":2146960,"confidence":0.9951172,"speaker":"A"},{"text":"that.","start":2146960,"end":2147240,"confidence":0.9970703,"speaker":"A"},{"text":"Let","start":2148600,"end":2148880,"confidence":0.97753906,"speaker":"A"},{"text":"me","start":2148880,"end":2149040,"confidence":0.9995117,"speaker":"A"},{"text":"check","start":2149040,"end":2149400,"confidence":0.99780273,"speaker":"A"},{"text":"one","start":2150600,"end":2150920,"confidence":0.99560547,"speaker":"A"},{"text":"last","start":2150920,"end":2151160,"confidence":0.99853516,"speaker":"A"},{"text":"piece","start":2151160,"end":2151440,"confidence":1,"speaker":"A"},{"text":"I","start":2151440,"end":2151560,"confidence":0.99853516,"speaker":"A"},{"text":"wanted","start":2151560,"end":2151800,"confidence":0.99902344,"speaker":"A"},{"text":"to","start":2151800,"end":2151920,"confidence":0.99902344,"speaker":"A"},{"text":"cover.","start":2151920,"end":2152200,"confidence":0.9980469,"speaker":"A"},{"text":"The","start":2154920,"end":2155200,"confidence":0.3737793,"speaker":"A"},{"text":"last","start":2155200,"end":2155360,"confidence":0.9980469,"speaker":"A"},{"text":"piece","start":2155360,"end":2155600,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":2155600,"end":2155720,"confidence":0.97998047,"speaker":"A"},{"text":"want","start":2155720,"end":2155840,"confidence":0.9321289,"speaker":"A"},{"text":"to","start":2155840,"end":2155960,"confidence":0.9916992,"speaker":"A"},{"text":"cover","start":2155960,"end":2156160,"confidence":1,"speaker":"A"},{"text":"is","start":2156160,"end":2156520,"confidence":0.99902344,"speaker":"A"},{"text":"really","start":2156760,"end":2157120,"confidence":0.9995117,"speaker":"A"},{"text":"cool.","start":2157120,"end":2157440,"confidence":0.99975586,"speaker":"A"},{"text":"And","start":2157440,"end":2157680,"confidence":0.7548828,"speaker":"A"},{"text":"that","start":2157680,"end":2157920,"confidence":1,"speaker":"A"},{"text":"is","start":2157920,"end":2158200,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2158200,"end":2158520,"confidence":1,"speaker":"A"},{"text":"authentication","start":2158520,"end":2159280,"confidence":0.9998779,"speaker":"A"},{"text":"layer.","start":2159280,"end":2159800,"confidence":0.9975586,"speaker":"A"},{"text":"So","start":2160200,"end":2160480,"confidence":0.9770508,"speaker":"A"},{"text":"Open","start":2160480,"end":2160720,"confidence":0.9995117,"speaker":"A"},{"text":"API","start":2160720,"end":2161320,"confidence":0.9436035,"speaker":"A"},{"text":"provides","start":2161320,"end":2161920,"confidence":0.99975586,"speaker":"A"},{"text":"what's","start":2161920,"end":2162240,"confidence":0.99902344,"speaker":"A"},{"text":"called","start":2162240,"end":2162480,"confidence":1,"speaker":"A"},{"text":"middleware","start":2162480,"end":2163160,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":2164440,"end":2164680,"confidence":0.9550781,"speaker":"A"},{"text":"that","start":2164760,"end":2165080,"confidence":0.99902344,"speaker":"A"},{"text":"allows","start":2165080,"end":2165440,"confidence":1,"speaker":"A"},{"text":"you","start":2165440,"end":2165640,"confidence":0.9995117,"speaker":"A"},{"text":"to,","start":2165640,"end":2165960,"confidence":0.99072266,"speaker":"A"},{"text":"when","start":2166200,"end":2166480,"confidence":0.99658203,"speaker":"A"},{"text":"you","start":2166480,"end":2166600,"confidence":0.9892578,"speaker":"A"},{"text":"create","start":2166600,"end":2166720,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":2166720,"end":2166880,"confidence":0.99902344,"speaker":"A"},{"text":"client","start":2166880,"end":2167120,"confidence":0.99975586,"speaker":"A"},{"text":"or","start":2167120,"end":2167320,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":2167320,"end":2167520,"confidence":0.9916992,"speaker":"A"},{"text":"server,","start":2167520,"end":2167840,"confidence":0.99975586,"speaker":"A"},{"text":"you","start":2167840,"end":2167960,"confidence":0.99902344,"speaker":"A"},{"text":"can","start":2167960,"end":2168080,"confidence":1,"speaker":"A"},{"text":"plug","start":2168080,"end":2168360,"confidence":0.99975586,"speaker":"A"},{"text":"that","start":2168360,"end":2168560,"confidence":0.9995117,"speaker":"A"},{"text":"in","start":2168560,"end":2168760,"confidence":0.9975586,"speaker":"A"},{"text":"and","start":2168760,"end":2168960,"confidence":0.9980469,"speaker":"A"},{"text":"it","start":2168960,"end":2169120,"confidence":0.99902344,"speaker":"A"},{"text":"will","start":2169120,"end":2169280,"confidence":0.99902344,"speaker":"A"},{"text":"handle","start":2169280,"end":2169800,"confidence":0.99902344,"speaker":"A"},{"text":"like","start":2169880,"end":2170240,"confidence":0.9291992,"speaker":"A"},{"text":"let's","start":2170240,"end":2170520,"confidence":0.99934894,"speaker":"A"},{"text":"say","start":2170520,"end":2170640,"confidence":1,"speaker":"A"},{"text":"you","start":2170640,"end":2170760,"confidence":1,"speaker":"A"},{"text":"need","start":2170760,"end":2170880,"confidence":1,"speaker":"A"},{"text":"to","start":2170880,"end":2171000,"confidence":1,"speaker":"A"},{"text":"make","start":2171000,"end":2171120,"confidence":1,"speaker":"A"},{"text":"modifications","start":2171120,"end":2171840,"confidence":0.9995117,"speaker":"A"},{"text":"with","start":2171840,"end":2172080,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":2172080,"end":2172240,"confidence":0.9951172,"speaker":"A"},{"text":"request","start":2172240,"end":2172600,"confidence":0.9995117,"speaker":"A"},{"text":"or","start":2172600,"end":2172800,"confidence":0.98779297,"speaker":"A"},{"text":"response.","start":2172800,"end":2173400,"confidence":0.9970703,"speaker":"A"},{"text":"When","start":2173640,"end":2173920,"confidence":1,"speaker":"A"},{"text":"it","start":2173920,"end":2174080,"confidence":0.99902344,"speaker":"A"},{"text":"comes","start":2174080,"end":2174280,"confidence":1,"speaker":"A"},{"text":"in,","start":2174280,"end":2174600,"confidence":0.99658203,"speaker":"A"},{"text":"you","start":2174680,"end":2174960,"confidence":1,"speaker":"A"},{"text":"can","start":2174960,"end":2175120,"confidence":0.9995117,"speaker":"A"},{"text":"intercept","start":2175120,"end":2175520,"confidence":0.8586426,"speaker":"A"},{"text":"it","start":2175520,"end":2175760,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":2175760,"end":2175880,"confidence":0.9995117,"speaker":"A"},{"text":"make","start":2175880,"end":2176040,"confidence":0.9995117,"speaker":"A"},{"text":"whatever","start":2176040,"end":2176360,"confidence":0.9995117,"speaker":"A"},{"text":"modifications","start":2176360,"end":2177040,"confidence":0.99886066,"speaker":"A"},{"text":"you","start":2177040,"end":2177280,"confidence":0.9995117,"speaker":"A"},{"text":"want","start":2177280,"end":2177440,"confidence":0.9277344,"speaker":"A"},{"text":"to","start":2177440,"end":2177560,"confidence":0.9980469,"speaker":"A"},{"text":"make.","start":2177560,"end":2177800,"confidence":0.9980469,"speaker":"A"},{"text":"And","start":2179239,"end":2179519,"confidence":0.9013672,"speaker":"A"},{"text":"in","start":2179519,"end":2179640,"confidence":1,"speaker":"A"},{"text":"this","start":2179640,"end":2179800,"confidence":1,"speaker":"A"},{"text":"case","start":2179800,"end":2180120,"confidence":1,"speaker":"A"},{"text":"what","start":2180840,"end":2181160,"confidence":0.9995117,"speaker":"A"},{"text":"we've","start":2181160,"end":2181440,"confidence":0.9941406,"speaker":"A"},{"text":"done","start":2181440,"end":2181720,"confidence":1,"speaker":"A"},{"text":"is","start":2181720,"end":2182120,"confidence":0.9970703,"speaker":"A"},{"text":"I've","start":2182520,"end":2182880,"confidence":0.9954427,"speaker":"A"},{"text":"created","start":2182880,"end":2183320,"confidence":0.99975586,"speaker":"A"},{"text":"an","start":2184520,"end":2184840,"confidence":0.9926758,"speaker":"A"},{"text":"authentication","start":2184840,"end":2185480,"confidence":1,"speaker":"A"},{"text":"middleware","start":2185480,"end":2186200,"confidence":0.9993164,"speaker":"A"},{"text":"which","start":2187480,"end":2187840,"confidence":0.99902344,"speaker":"A"},{"text":"then","start":2187840,"end":2188200,"confidence":0.99902344,"speaker":"A"},{"text":"sees","start":2188600,"end":2189080,"confidence":0.8354492,"speaker":"A"},{"text":"if","start":2189080,"end":2189280,"confidence":0.99853516,"speaker":"A"},{"text":"you","start":2189280,"end":2189480,"confidence":0.99365234,"speaker":"A"},{"text":"have","start":2189480,"end":2189800,"confidence":0.9946289,"speaker":"A"},{"text":"what's","start":2191430,"end":2191670,"confidence":0.9420573,"speaker":"A"},{"text":"called","start":2191670,"end":2191790,"confidence":1,"speaker":"A"},{"text":"a","start":2191790,"end":2191910,"confidence":0.9916992,"speaker":"A"},{"text":"token","start":2191910,"end":2192270,"confidence":0.9996745,"speaker":"A"},{"text":"manager","start":2192270,"end":2192870,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":2193990,"end":2194390,"confidence":0.98828125,"speaker":"A"},{"text":"an","start":2194390,"end":2194750,"confidence":0.7910156,"speaker":"A"},{"text":"authentic","start":2194750,"end":2195310,"confidence":0.97542316,"speaker":"A"},{"text":"you","start":2195310,"end":2195470,"confidence":0.9970703,"speaker":"A"},{"text":"have","start":2195470,"end":2195630,"confidence":1,"speaker":"A"},{"text":"that","start":2195630,"end":2195870,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":2195870,"end":2196190,"confidence":0.9975586,"speaker":"A"},{"text":"an","start":2196190,"end":2196430,"confidence":0.9980469,"speaker":"A"},{"text":"authentication","start":2196430,"end":2197070,"confidence":0.99938965,"speaker":"A"},{"text":"method.","start":2197070,"end":2197590,"confidence":0.9983724,"speaker":"A"},{"text":"And","start":2198070,"end":2198430,"confidence":0.9921875,"speaker":"A"},{"text":"the","start":2198430,"end":2198670,"confidence":1,"speaker":"A"},{"text":"way","start":2198670,"end":2198790,"confidence":1,"speaker":"A"},{"text":"it","start":2198790,"end":2198910,"confidence":0.99902344,"speaker":"A"},{"text":"works","start":2198910,"end":2199350,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":2199510,"end":2199910,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":2199910,"end":2200230,"confidence":1,"speaker":"A"},{"text":"pick","start":2200230,"end":2200550,"confidence":0.99853516,"speaker":"A"},{"text":"what","start":2201190,"end":2201550,"confidence":0.99365234,"speaker":"A"},{"text":"type","start":2201550,"end":2201830,"confidence":0.99975586,"speaker":"A"},{"text":"of","start":2201830,"end":2201990,"confidence":0.9995117,"speaker":"A"},{"text":"authentication","start":2201990,"end":2202550,"confidence":0.9998779,"speaker":"A"},{"text":"you","start":2202550,"end":2202710,"confidence":0.99902344,"speaker":"A"},{"text":"want","start":2202710,"end":2202830,"confidence":0.9165039,"speaker":"A"},{"text":"to","start":2202830,"end":2202950,"confidence":0.99609375,"speaker":"A"},{"text":"use.","start":2202950,"end":2203070,"confidence":1,"speaker":"A"},{"text":"If","start":2203070,"end":2203230,"confidence":1,"speaker":"A"},{"text":"you","start":2203230,"end":2203350,"confidence":1,"speaker":"A"},{"text":"already","start":2203350,"end":2203510,"confidence":0.99853516,"speaker":"A"},{"text":"have","start":2203510,"end":2203670,"confidence":1,"speaker":"A"},{"text":"like","start":2203670,"end":2203790,"confidence":0.99560547,"speaker":"A"},{"text":"a","start":2203790,"end":2203910,"confidence":0.9995117,"speaker":"A"},{"text":"pre","start":2203910,"end":2204030,"confidence":1,"speaker":"A"},{"text":"existing","start":2204030,"end":2204430,"confidence":0.98551434,"speaker":"A"},{"text":"web","start":2204430,"end":2204670,"confidence":0.99975586,"speaker":"A"},{"text":"token","start":2204670,"end":2205190,"confidence":0.9552409,"speaker":"A"},{"text":"or","start":2205590,"end":2205950,"confidence":0.99853516,"speaker":"A"},{"text":"you","start":2205950,"end":2206190,"confidence":0.99853516,"speaker":"A"},{"text":"already","start":2206190,"end":2206470,"confidence":0.99853516,"speaker":"A"},{"text":"have,","start":2206470,"end":2206789,"confidence":0.92626953,"speaker":"A"},{"text":"or","start":2206789,"end":2207070,"confidence":0.95996094,"speaker":"A"},{"text":"you,","start":2207070,"end":2207350,"confidence":0.9916992,"speaker":"A"},{"text":"you","start":2207350,"end":2207550,"confidence":0.9770508,"speaker":"A"},{"text":"know,","start":2207550,"end":2207710,"confidence":0.9716797,"speaker":"A"},{"text":"have","start":2207710,"end":2207910,"confidence":0.6328125,"speaker":"A"},{"text":"your","start":2207910,"end":2208110,"confidence":0.99853516,"speaker":"A"},{"text":"key","start":2208110,"end":2208310,"confidence":0.99609375,"speaker":"A"},{"text":"ID","start":2208310,"end":2208590,"confidence":0.97753906,"speaker":"A"},{"text":"and","start":2208590,"end":2208830,"confidence":0.99902344,"speaker":"A"},{"text":"your","start":2208830,"end":2208990,"confidence":0.99902344,"speaker":"A"},{"text":"private","start":2208990,"end":2209230,"confidence":1,"speaker":"A"},{"text":"key","start":2209230,"end":2209510,"confidence":0.9995117,"speaker":"A"},{"text":"already,","start":2209510,"end":2209830,"confidence":0.99560547,"speaker":"A"},{"text":"or","start":2209910,"end":2210190,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":2210190,"end":2210350,"confidence":0.9995117,"speaker":"A"},{"text":"just","start":2210350,"end":2210510,"confidence":1,"speaker":"A"},{"text":"have","start":2210510,"end":2210670,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2210670,"end":2210790,"confidence":0.98339844,"speaker":"A"},{"text":"API","start":2210790,"end":2211190,"confidence":0.9992676,"speaker":"A"},{"text":"token.","start":2211190,"end":2211750,"confidence":0.99934894,"speaker":"A"},{"text":"We've","start":2212390,"end":2212790,"confidence":0.9996745,"speaker":"A"},{"text":"created","start":2212790,"end":2213190,"confidence":0.9995117,"speaker":"A"},{"text":"basically","start":2213190,"end":2213590,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":2213590,"end":2213750,"confidence":0.99609375,"speaker":"A"},{"text":"middleware","start":2213750,"end":2214270,"confidence":0.99716794,"speaker":"A"},{"text":"that","start":2214270,"end":2214470,"confidence":0.99902344,"speaker":"A"},{"text":"uses","start":2214470,"end":2214870,"confidence":0.9992676,"speaker":"A"},{"text":"that.","start":2214870,"end":2215190,"confidence":0.98339844,"speaker":"A"},{"text":"So","start":2216560,"end":2216800,"confidence":0.7055664,"speaker":"A"},{"text":"this","start":2218880,"end":2219120,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":2219120,"end":2219280,"confidence":0.99902344,"speaker":"A"},{"text":"how","start":2219280,"end":2219560,"confidence":1,"speaker":"A"},{"text":"it","start":2219560,"end":2219840,"confidence":0.9995117,"speaker":"A"},{"text":"creates","start":2219840,"end":2220200,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":2220200,"end":2220360,"confidence":0.9995117,"speaker":"A"},{"text":"headers","start":2220360,"end":2220800,"confidence":0.99902344,"speaker":"A"},{"text":"for","start":2221040,"end":2221360,"confidence":0.98583984,"speaker":"A"},{"text":"server","start":2221360,"end":2221720,"confidence":0.9992676,"speaker":"A"},{"text":"to","start":2221720,"end":2221920,"confidence":0.96972656,"speaker":"A"},{"text":"server.","start":2221920,"end":2222400,"confidence":0.9992676,"speaker":"A"},{"text":"So","start":2222800,"end":2223040,"confidence":0.8354492,"speaker":"A"},{"text":"it","start":2223040,"end":2223160,"confidence":0.98583984,"speaker":"A"},{"text":"does","start":2223160,"end":2223320,"confidence":1,"speaker":"A"},{"text":"all","start":2223320,"end":2223480,"confidence":1,"speaker":"A"},{"text":"this","start":2223480,"end":2223640,"confidence":0.9970703,"speaker":"A"},{"text":"for","start":2223640,"end":2223840,"confidence":0.9995117,"speaker":"A"},{"text":"us.","start":2223840,"end":2224160,"confidence":0.99072266,"speaker":"A"},{"text":"And","start":2225760,"end":2226040,"confidence":0.6791992,"speaker":"A"},{"text":"then","start":2226040,"end":2226320,"confidence":0.9941406,"speaker":"A"},{"text":"what","start":2227520,"end":2227760,"confidence":0.9873047,"speaker":"A"},{"text":"I","start":2227760,"end":2227880,"confidence":0.9980469,"speaker":"A"},{"text":"added,","start":2227880,"end":2228160,"confidence":0.99658203,"speaker":"A"},{"text":"which","start":2228480,"end":2228760,"confidence":0.9970703,"speaker":"A"},{"text":"I","start":2228760,"end":2228920,"confidence":0.9995117,"speaker":"A"},{"text":"think","start":2228920,"end":2229040,"confidence":1,"speaker":"A"},{"text":"is","start":2229040,"end":2229160,"confidence":0.9975586,"speaker":"A"},{"text":"really","start":2229160,"end":2229320,"confidence":0.9995117,"speaker":"A"},{"text":"nice,","start":2229320,"end":2229600,"confidence":1,"speaker":"A"},{"text":"is","start":2229600,"end":2229800,"confidence":0.68310547,"speaker":"A"},{"text":"called","start":2229800,"end":2229960,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2229960,"end":2230120,"confidence":0.9975586,"speaker":"A"},{"text":"adaptive","start":2230120,"end":2230720,"confidence":0.9437256,"speaker":"A"},{"text":"token","start":2230720,"end":2231240,"confidence":0.84195966,"speaker":"A"},{"text":"manager.","start":2231240,"end":2231760,"confidence":0.9963379,"speaker":"A"},{"text":"And","start":2232240,"end":2232520,"confidence":0.6923828,"speaker":"A"},{"text":"the","start":2232520,"end":2232680,"confidence":0.9995117,"speaker":"A"},{"text":"idea","start":2232680,"end":2233000,"confidence":1,"speaker":"A"},{"text":"with","start":2233000,"end":2233160,"confidence":0.99609375,"speaker":"A"},{"text":"that","start":2233160,"end":2233360,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":2233360,"end":2233600,"confidence":0.9975586,"speaker":"A"},{"text":"like","start":2233600,"end":2233880,"confidence":0.8354492,"speaker":"A"},{"text":"let's","start":2233880,"end":2234240,"confidence":0.9013672,"speaker":"A"},{"text":"say","start":2234240,"end":2234560,"confidence":0.9995117,"speaker":"A"},{"text":"you're","start":2236960,"end":2237360,"confidence":0.9977214,"speaker":"A"},{"text":"using","start":2237360,"end":2237520,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":2237520,"end":2237720,"confidence":0.99902344,"speaker":"A"},{"text":"client","start":2237720,"end":2238160,"confidence":0.99975586,"speaker":"A"},{"text":"and","start":2238240,"end":2238560,"confidence":0.9926758,"speaker":"A"},{"text":"you","start":2238560,"end":2238880,"confidence":0.99902344,"speaker":"A"},{"text":"have","start":2238880,"end":2239280,"confidence":1,"speaker":"A"},{"text":"the","start":2239280,"end":2239560,"confidence":0.9995117,"speaker":"A"},{"text":"web","start":2239560,"end":2239800,"confidence":0.9995117,"speaker":"A"},{"text":"authentication","start":2239800,"end":2240480,"confidence":0.8408203,"speaker":"A"},{"text":"token","start":2240480,"end":2240920,"confidence":0.9995117,"speaker":"A"},{"text":"now","start":2240920,"end":2241200,"confidence":0.91308594,"speaker":"A"},{"text":"and","start":2241440,"end":2241720,"confidence":0.94628906,"speaker":"A"},{"text":"then","start":2241720,"end":2242000,"confidence":0.97216797,"speaker":"A"},{"text":"this","start":2242080,"end":2242360,"confidence":0.9975586,"speaker":"A"},{"text":"allows","start":2242360,"end":2242640,"confidence":1,"speaker":"A"},{"text":"you","start":2242640,"end":2242760,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":2242760,"end":2242920,"confidence":0.9980469,"speaker":"A"},{"text":"upgrade","start":2242920,"end":2243440,"confidence":0.9767253,"speaker":"A"},{"text":"with","start":2243810,"end":2243970,"confidence":0.9770508,"speaker":"A"},{"text":"that","start":2243970,"end":2244170,"confidence":0.9995117,"speaker":"A"},{"text":"web","start":2244170,"end":2244410,"confidence":0.998291,"speaker":"A"},{"text":"authentication","start":2244410,"end":2245090,"confidence":0.99938965,"speaker":"A"},{"text":"token","start":2245090,"end":2245450,"confidence":0.9991862,"speaker":"A"},{"text":"to","start":2245450,"end":2245610,"confidence":0.99560547,"speaker":"A"},{"text":"the","start":2245610,"end":2245770,"confidence":1,"speaker":"A"},{"text":"private","start":2245770,"end":2245970,"confidence":1,"speaker":"A"},{"text":"database","start":2245970,"end":2246490,"confidence":0.9998372,"speaker":"A"},{"text":"and","start":2246490,"end":2246690,"confidence":0.99853516,"speaker":"A"},{"text":"have","start":2246690,"end":2246930,"confidence":0.99560547,"speaker":"A"},{"text":"access","start":2246930,"end":2247210,"confidence":1,"speaker":"A"},{"text":"to","start":2247210,"end":2247450,"confidence":0.9995117,"speaker":"A"},{"text":"that.","start":2247450,"end":2247730,"confidence":0.9995117,"speaker":"A"},{"text":"So","start":2250530,"end":2250850,"confidence":0.97558594,"speaker":"A"},{"text":"and","start":2250850,"end":2251050,"confidence":0.97558594,"speaker":"A"},{"text":"then","start":2251050,"end":2251210,"confidence":0.97753906,"speaker":"A"},{"text":"all","start":2251210,"end":2251490,"confidence":0.9658203,"speaker":"A"},{"text":"the,","start":2251490,"end":2251890,"confidence":0.9921875,"speaker":"A"},{"text":"all","start":2252690,"end":2252970,"confidence":0.9013672,"speaker":"A"},{"text":"the","start":2252970,"end":2253170,"confidence":0.99609375,"speaker":"A"},{"text":"signing","start":2253170,"end":2253610,"confidence":0.99658203,"speaker":"A"},{"text":"is","start":2253610,"end":2253770,"confidence":0.9926758,"speaker":"A"},{"text":"done","start":2253770,"end":2253970,"confidence":1,"speaker":"A"},{"text":"before","start":2253970,"end":2254290,"confidence":0.86816406,"speaker":"A"},{"text":"you","start":2254290,"end":2254610,"confidence":0.99902344,"speaker":"A"},{"text":"in","start":2254610,"end":2254810,"confidence":0.9550781,"speaker":"A"},{"text":"miskit","start":2254810,"end":2255490,"confidence":0.8145752,"speaker":"A"},{"text":"for","start":2255650,"end":2256010,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":2256010,"end":2256250,"confidence":0.99902344,"speaker":"A"},{"text":"server","start":2256250,"end":2256530,"confidence":0.99902344,"speaker":"A"},{"text":"to","start":2256530,"end":2256690,"confidence":0.8510742,"speaker":"A"},{"text":"server","start":2256690,"end":2257050,"confidence":0.9995117,"speaker":"A"},{"text":"because","start":2257050,"end":2257250,"confidence":0.9995117,"speaker":"A"},{"text":"stuff","start":2257250,"end":2257490,"confidence":0.9991862,"speaker":"A"},{"text":"that","start":2257490,"end":2257650,"confidence":0.68603516,"speaker":"A"},{"text":"needs","start":2257650,"end":2257850,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":2257850,"end":2257970,"confidence":1,"speaker":"A"},{"text":"be","start":2257970,"end":2258090,"confidence":1,"speaker":"A"},{"text":"signed,","start":2258090,"end":2258330,"confidence":0.79589844,"speaker":"A"},{"text":"etc.","start":2258330,"end":2259010,"confidence":0.88311,"speaker":"A"},{"text":"And","start":2259570,"end":2259849,"confidence":0.99609375,"speaker":"A"},{"text":"it","start":2259849,"end":2260010,"confidence":0.99902344,"speaker":"A"},{"text":"takes","start":2260010,"end":2260250,"confidence":1,"speaker":"A"},{"text":"care","start":2260250,"end":2260410,"confidence":1,"speaker":"A"},{"text":"of","start":2260410,"end":2260610,"confidence":1,"speaker":"A"},{"text":"all","start":2260610,"end":2260850,"confidence":0.9951172,"speaker":"A"},{"text":"that.","start":2260850,"end":2261170,"confidence":0.99560547,"speaker":"A"},{"text":"All","start":2261570,"end":2261890,"confidence":0.9902344,"speaker":"A"},{"text":"stuff","start":2261890,"end":2262170,"confidence":0.9947917,"speaker":"A"},{"text":"that","start":2262170,"end":2262450,"confidence":0.99853516,"speaker":"A"},{"text":"Claude","start":2262690,"end":2263330,"confidence":0.7474365,"speaker":"A"},{"text":"was","start":2263330,"end":2263650,"confidence":0.9995117,"speaker":"A"},{"text":"essentially","start":2263650,"end":2264210,"confidence":0.9995117,"speaker":"A"},{"text":"able","start":2264210,"end":2264450,"confidence":0.9980469,"speaker":"A"},{"text":"to","start":2264450,"end":2264770,"confidence":1,"speaker":"A"},{"text":"decipher","start":2264850,"end":2265610,"confidence":0.99593097,"speaker":"A"},{"text":"from","start":2265610,"end":2265970,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2266610,"end":2267010,"confidence":0.99072266,"speaker":"A"},{"text":"documentation.","start":2269340,"end":2270060,"confidence":0.9116211,"speaker":"A"},{"text":"There's","start":2272620,"end":2273020,"confidence":0.9972331,"speaker":"A"},{"text":"one","start":2273020,"end":2273140,"confidence":1,"speaker":"A"},{"text":"more","start":2273140,"end":2273300,"confidence":1,"speaker":"A"},{"text":"thing","start":2273300,"end":2273460,"confidence":1,"speaker":"A"},{"text":"I","start":2273460,"end":2273620,"confidence":0.9995117,"speaker":"A"},{"text":"wanted","start":2273620,"end":2273860,"confidence":0.9975586,"speaker":"A"},{"text":"to","start":2273860,"end":2274020,"confidence":1,"speaker":"A"},{"text":"show.","start":2274020,"end":2274300,"confidence":0.99902344,"speaker":"A"},{"text":"If","start":2276380,"end":2276660,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":2276660,"end":2276780,"confidence":1,"speaker":"A"},{"text":"want","start":2276780,"end":2276860,"confidence":0.9921875,"speaker":"A"},{"text":"to","start":2276860,"end":2276980,"confidence":0.9995117,"speaker":"A"},{"text":"hop","start":2276980,"end":2277140,"confidence":0.99853516,"speaker":"A"},{"text":"in","start":2277140,"end":2277300,"confidence":0.9995117,"speaker":"A"},{"text":"with","start":2277300,"end":2277460,"confidence":1,"speaker":"A"},{"text":"a","start":2277460,"end":2277620,"confidence":0.9941406,"speaker":"A"},{"text":"question","start":2277620,"end":2277900,"confidence":1,"speaker":"A"},{"text":"while","start":2278380,"end":2278740,"confidence":0.9946289,"speaker":"A"},{"text":"I","start":2278740,"end":2279100,"confidence":0.99902344,"speaker":"A"},{"text":"pull","start":2279260,"end":2279620,"confidence":0.9995117,"speaker":"A"},{"text":"something","start":2279620,"end":2279860,"confidence":1,"speaker":"A"},{"text":"up,","start":2279860,"end":2280220,"confidence":0.99902344,"speaker":"A"},{"text":"feel","start":2280300,"end":2280620,"confidence":0.9995117,"speaker":"A"},{"text":"free.","start":2280620,"end":2280940,"confidence":1,"speaker":"A"},{"text":"No","start":2301190,"end":2301350,"confidence":0.9892578,"speaker":"A"},{"text":"questions.","start":2301350,"end":2301910,"confidence":0.9995117,"speaker":"A"},{"text":"Cool.","start":2303910,"end":2304390,"confidence":0.8347168,"speaker":"A"},{"text":"So","start":2304790,"end":2305030,"confidence":0.9921875,"speaker":"A"},{"text":"I'm","start":2305030,"end":2305190,"confidence":0.94905597,"speaker":"A"},{"text":"going","start":2305190,"end":2305270,"confidence":0.77441406,"speaker":"A"},{"text":"to","start":2305270,"end":2305350,"confidence":0.9980469,"speaker":"A"},{"text":"show","start":2305350,"end":2305510,"confidence":0.9975586,"speaker":"A"},{"text":"one","start":2305510,"end":2305710,"confidence":0.9995117,"speaker":"A"},{"text":"last","start":2305710,"end":2305950,"confidence":0.9995117,"speaker":"A"},{"text":"thing","start":2305950,"end":2306310,"confidence":0.99902344,"speaker":"A"},{"text":"and","start":2306950,"end":2307230,"confidence":0.9921875,"speaker":"A"},{"text":"that","start":2307230,"end":2307430,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":2307430,"end":2307750,"confidence":0.99609375,"speaker":"A"},{"text":"how","start":2308230,"end":2308630,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":2308710,"end":2308990,"confidence":0.99853516,"speaker":"A"},{"text":"we","start":2308990,"end":2309190,"confidence":1,"speaker":"A"},{"text":"actually","start":2309190,"end":2309470,"confidence":0.9970703,"speaker":"A"},{"text":"deploy","start":2309470,"end":2309990,"confidence":1,"speaker":"A"},{"text":"this?","start":2309990,"end":2310310,"confidence":0.9995117,"speaker":"A"},{"text":"Is","start":2313350,"end":2313630,"confidence":0.9980469,"speaker":"A"},{"text":"this","start":2313630,"end":2313830,"confidence":0.9995117,"speaker":"A"},{"text":"too","start":2313830,"end":2314070,"confidence":0.9975586,"speaker":"A"},{"text":"big,","start":2314070,"end":2314350,"confidence":1,"speaker":"A"},{"text":"too","start":2314350,"end":2314590,"confidence":0.98779297,"speaker":"A"},{"text":"small?","start":2314590,"end":2314870,"confidence":0.99853516,"speaker":"A"},{"text":"Looks","start":2316150,"end":2316510,"confidence":0.8227539,"speaker":"A"},{"text":"okay.","start":2316510,"end":2316950,"confidence":0.9710286,"speaker":"A"},{"text":"That","start":2317590,"end":2317870,"confidence":0.97265625,"speaker":"C"},{"text":"looks","start":2317870,"end":2318150,"confidence":0.99902344,"speaker":"C"},{"text":"good.","start":2318150,"end":2318390,"confidence":0.9921875,"speaker":"C"},{"text":"Yeah,","start":2318710,"end":2319030,"confidence":0.992513,"speaker":"B"},{"text":"it","start":2319030,"end":2319110,"confidence":0.79003906,"speaker":"B"},{"text":"looks","start":2319110,"end":2319270,"confidence":0.99902344,"speaker":"B"},{"text":"good.","start":2319270,"end":2319430,"confidence":0.9951172,"speaker":"B"},{"text":"Okay,","start":2319430,"end":2319750,"confidence":0.9550781,"speaker":"A"},{"text":"cool.","start":2319750,"end":2320070,"confidence":0.99121094,"speaker":"A"},{"text":"So","start":2323850,"end":2324050,"confidence":0.9604492,"speaker":"A"},{"text":"essentially","start":2324050,"end":2324530,"confidence":0.9962158,"speaker":"A"},{"text":"what","start":2324530,"end":2324690,"confidence":0.9995117,"speaker":"A"},{"text":"I've","start":2324690,"end":2324930,"confidence":0.99886066,"speaker":"A"},{"text":"done","start":2324930,"end":2325210,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":2325530,"end":2325930,"confidence":0.99365234,"speaker":"A"},{"text":"I'm","start":2326570,"end":2326930,"confidence":0.95214844,"speaker":"A"},{"text":"using","start":2326930,"end":2327210,"confidence":1,"speaker":"A"},{"text":"GitHub","start":2327370,"end":2327890,"confidence":0.9975586,"speaker":"A"},{"text":"Actions.","start":2327890,"end":2328490,"confidence":0.9992676,"speaker":"A"},{"text":"There's","start":2329290,"end":2329690,"confidence":0.9991862,"speaker":"A"},{"text":"a","start":2329690,"end":2329770,"confidence":0.9995117,"speaker":"A"},{"text":"way","start":2329770,"end":2329930,"confidence":1,"speaker":"A"},{"text":"you","start":2329930,"end":2330130,"confidence":0.99902344,"speaker":"A"},{"text":"can.","start":2330130,"end":2330410,"confidence":0.99902344,"speaker":"A"},{"text":"This","start":2333130,"end":2333410,"confidence":0.99902344,"speaker":"A"},{"text":"is","start":2333410,"end":2333530,"confidence":0.99853516,"speaker":"A"},{"text":"all","start":2333530,"end":2333770,"confidence":0.98876953,"speaker":"A"},{"text":"public","start":2334010,"end":2334370,"confidence":1,"speaker":"A"},{"text":"by","start":2334370,"end":2334570,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":2334570,"end":2334690,"confidence":0.9995117,"speaker":"A"},{"text":"way,","start":2334690,"end":2334970,"confidence":1,"speaker":"A"},{"text":"so","start":2335050,"end":2335450,"confidence":0.9321289,"speaker":"A"},{"text":"I","start":2335850,"end":2336130,"confidence":0.99902344,"speaker":"A"},{"text":"will","start":2336130,"end":2336370,"confidence":0.86621094,"speaker":"A"},{"text":"provide","start":2336370,"end":2336689,"confidence":1,"speaker":"A"},{"text":"URLs","start":2336689,"end":2337330,"confidence":0.94067,"speaker":"A"},{"text":"in","start":2337330,"end":2337490,"confidence":0.98828125,"speaker":"A"},{"text":"the","start":2337490,"end":2337650,"confidence":0.9897461,"speaker":"A"},{"text":"Slack","start":2337650,"end":2337970,"confidence":0.998291,"speaker":"A"},{"text":"or","start":2337970,"end":2338170,"confidence":0.9970703,"speaker":"A"},{"text":"something.","start":2338170,"end":2338490,"confidence":0.9995117,"speaker":"A"},{"text":"Let's","start":2339450,"end":2339890,"confidence":0.99853516,"speaker":"A"},{"text":"do","start":2339890,"end":2340050,"confidence":0.9790039,"speaker":"A"},{"text":"this","start":2340050,"end":2340250,"confidence":0.9975586,"speaker":"A"},{"text":"one.","start":2340250,"end":2340570,"confidence":0.99316406,"speaker":"A"},{"text":"So","start":2342410,"end":2342810,"confidence":0.8173828,"speaker":"A"},{"text":"this","start":2343930,"end":2344210,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":2344210,"end":2344370,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":2344370,"end":2344530,"confidence":0.9765625,"speaker":"A"},{"text":"Swift","start":2344530,"end":2344810,"confidence":0.9226074,"speaker":"A"},{"text":"package","start":2344810,"end":2345370,"confidence":0.99768066,"speaker":"A"},{"text":"for","start":2347060,"end":2347220,"confidence":0.97998047,"speaker":"A"},{"text":"Bushel.","start":2347220,"end":2347860,"confidence":0.9685872,"speaker":"A"},{"text":"It's","start":2347860,"end":2348180,"confidence":0.9995117,"speaker":"A"},{"text":"called","start":2348180,"end":2348340,"confidence":0.99853516,"speaker":"A"},{"text":"Bushel","start":2348340,"end":2348780,"confidence":0.90283203,"speaker":"A"},{"text":"Cloud.","start":2348780,"end":2349180,"confidence":0.99658203,"speaker":"A"},{"text":"It","start":2349180,"end":2349420,"confidence":0.9995117,"speaker":"A"},{"text":"pulls","start":2349420,"end":2349700,"confidence":1,"speaker":"A"},{"text":"the","start":2349700,"end":2349820,"confidence":0.98828125,"speaker":"A"},{"text":"stuff","start":2349820,"end":2350060,"confidence":1,"speaker":"A"},{"text":"up","start":2350060,"end":2350300,"confidence":0.9995117,"speaker":"A"},{"text":"from.","start":2350300,"end":2350660,"confidence":0.9970703,"speaker":"A"},{"text":"Uses","start":2351220,"end":2351740,"confidence":0.84887695,"speaker":"A"},{"text":"Miskit","start":2351740,"end":2352340,"confidence":0.9329834,"speaker":"A"},{"text":"to","start":2353540,"end":2353820,"confidence":0.9941406,"speaker":"A"},{"text":"go","start":2353820,"end":2353980,"confidence":1,"speaker":"A"},{"text":"ahead","start":2353980,"end":2354260,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":2354340,"end":2354740,"confidence":0.88720703,"speaker":"A"},{"text":"pull,","start":2356740,"end":2357220,"confidence":0.9621582,"speaker":"A"},{"text":"get","start":2357860,"end":2358140,"confidence":0.99902344,"speaker":"A"},{"text":"access","start":2358140,"end":2358380,"confidence":1,"speaker":"A"},{"text":"to","start":2358380,"end":2358700,"confidence":1,"speaker":"A"},{"text":"CloudKit","start":2358700,"end":2359460,"confidence":0.9325,"speaker":"A"},{"text":"and","start":2359940,"end":2360340,"confidence":0.98291016,"speaker":"A"},{"text":"let","start":2361060,"end":2361340,"confidence":0.99316406,"speaker":"A"},{"text":"me","start":2361340,"end":2361460,"confidence":1,"speaker":"A"},{"text":"go","start":2361460,"end":2361620,"confidence":0.9995117,"speaker":"A"},{"text":"back","start":2361620,"end":2361940,"confidence":1,"speaker":"A"},{"text":"to","start":2361940,"end":2362339,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2362339,"end":2362620,"confidence":1,"speaker":"A"},{"text":"workflow.","start":2362620,"end":2363300,"confidence":0.96276855,"speaker":"A"},{"text":"How","start":2364100,"end":2364420,"confidence":0.99853516,"speaker":"A"},{"text":"familiar","start":2364420,"end":2364860,"confidence":1,"speaker":"A"},{"text":"are","start":2364860,"end":2365020,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":2365020,"end":2365180,"confidence":0.9995117,"speaker":"A"},{"text":"with","start":2365180,"end":2365380,"confidence":1,"speaker":"A"},{"text":"GitHub","start":2365380,"end":2365860,"confidence":0.87939453,"speaker":"A"},{"text":"workflows?","start":2365860,"end":2366580,"confidence":0.9026367,"speaker":"A"},{"text":"Sadly","start":2369860,"end":2370300,"confidence":0.99576825,"speaker":"C"},{"text":"not","start":2370300,"end":2370500,"confidence":0.9951172,"speaker":"C"},{"text":"had","start":2370500,"end":2370660,"confidence":0.9980469,"speaker":"C"},{"text":"the","start":2370660,"end":2370780,"confidence":0.99658203,"speaker":"C"},{"text":"chance","start":2370780,"end":2371020,"confidence":0.99975586,"speaker":"C"},{"text":"to","start":2371020,"end":2371180,"confidence":0.9995117,"speaker":"C"},{"text":"work","start":2371180,"end":2371460,"confidence":1,"speaker":"C"},{"text":"too","start":2371780,"end":2372060,"confidence":0.99560547,"speaker":"C"},{"text":"deeply","start":2372060,"end":2372380,"confidence":0.9991862,"speaker":"C"},{"text":"with","start":2372380,"end":2372500,"confidence":0.9995117,"speaker":"C"},{"text":"them","start":2372500,"end":2372660,"confidence":0.97021484,"speaker":"C"},{"text":"yet.","start":2372660,"end":2372980,"confidence":0.98291016,"speaker":"C"},{"text":"Okay.","start":2373690,"end":2374090,"confidence":0.9503581,"speaker":"A"},{"text":"Basically","start":2375130,"end":2375610,"confidence":0.9987793,"speaker":"A"},{"text":"it's","start":2375610,"end":2375850,"confidence":0.99934894,"speaker":"A"},{"text":"like","start":2375850,"end":2375970,"confidence":0.99072266,"speaker":"A"},{"text":"for","start":2375970,"end":2376170,"confidence":0.9448242,"speaker":"A"},{"text":"CI,","start":2376170,"end":2376610,"confidence":0.97021484,"speaker":"A"},{"text":"but","start":2376610,"end":2376810,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":2376810,"end":2376930,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":2376930,"end":2377050,"confidence":0.9995117,"speaker":"A"},{"text":"also","start":2377050,"end":2377250,"confidence":0.9995117,"speaker":"A"},{"text":"set","start":2377250,"end":2377490,"confidence":1,"speaker":"A"},{"text":"it","start":2377490,"end":2377610,"confidence":0.9995117,"speaker":"A"},{"text":"up","start":2377610,"end":2377730,"confidence":0.9995117,"speaker":"A"},{"text":"on","start":2377730,"end":2377890,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":2377890,"end":2378050,"confidence":0.9980469,"speaker":"A"},{"text":"schedule.","start":2378050,"end":2378570,"confidence":0.8905029,"speaker":"A"},{"text":"So","start":2378890,"end":2379170,"confidence":0.9941406,"speaker":"A"},{"text":"I","start":2379170,"end":2379330,"confidence":1,"speaker":"A"},{"text":"did","start":2379330,"end":2379530,"confidence":0.99902344,"speaker":"A"},{"text":"that","start":2379530,"end":2379850,"confidence":0.99902344,"speaker":"A"},{"text":"and","start":2381290,"end":2381570,"confidence":0.9902344,"speaker":"A"},{"text":"then","start":2381570,"end":2381850,"confidence":0.9980469,"speaker":"A"},{"text":"it","start":2382890,"end":2383170,"confidence":0.99853516,"speaker":"A"},{"text":"runs","start":2383170,"end":2383490,"confidence":0.99975586,"speaker":"A"},{"text":"the","start":2383490,"end":2383610,"confidence":0.6640625,"speaker":"A"},{"text":"scheduled","start":2383610,"end":2384090,"confidence":0.89404297,"speaker":"A"},{"text":"job","start":2384090,"end":2384410,"confidence":1,"speaker":"A"},{"text":"and","start":2384810,"end":2385090,"confidence":0.9975586,"speaker":"A"},{"text":"then","start":2385090,"end":2385250,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":2385250,"end":2385450,"confidence":0.9995117,"speaker":"A"},{"text":"just","start":2385450,"end":2385730,"confidence":0.9995117,"speaker":"A"},{"text":"execute.","start":2385730,"end":2386490,"confidence":0.97875977,"speaker":"A"},{"text":"So","start":2390650,"end":2390930,"confidence":0.9941406,"speaker":"A"},{"text":"then","start":2390930,"end":2391170,"confidence":0.9975586,"speaker":"A"},{"text":"this","start":2391170,"end":2391410,"confidence":1,"speaker":"A"},{"text":"was","start":2391410,"end":2391610,"confidence":0.9995117,"speaker":"A"},{"text":"refactored","start":2391610,"end":2392490,"confidence":0.99283856,"speaker":"A"},{"text":"over","start":2393290,"end":2393690,"confidence":0.99560547,"speaker":"A"},{"text":"here","start":2393690,"end":2394090,"confidence":0.9995117,"speaker":"A"},{"text":"into","start":2394330,"end":2394650,"confidence":0.9741211,"speaker":"A"},{"text":"an","start":2394650,"end":2394890,"confidence":0.99902344,"speaker":"A"},{"text":"action.","start":2394890,"end":2395210,"confidence":0.9995117,"speaker":"A"},{"text":"There","start":2397770,"end":2398090,"confidence":0.89990234,"speaker":"A"},{"text":"we","start":2398090,"end":2398250,"confidence":0.99853516,"speaker":"A"},{"text":"go.","start":2398250,"end":2398490,"confidence":0.99853516,"speaker":"A"},{"text":"And","start":2399540,"end":2399780,"confidence":0.9848633,"speaker":"A"},{"text":"I","start":2401140,"end":2401420,"confidence":0.99658203,"speaker":"A"},{"text":"have","start":2401420,"end":2401580,"confidence":0.9995117,"speaker":"A"},{"text":"all","start":2401580,"end":2401740,"confidence":0.9995117,"speaker":"A"},{"text":"sorts","start":2401740,"end":2402020,"confidence":0.890625,"speaker":"A"},{"text":"of","start":2402020,"end":2402180,"confidence":1,"speaker":"A"},{"text":"stuff","start":2402180,"end":2402380,"confidence":1,"speaker":"A"},{"text":"here","start":2402380,"end":2402660,"confidence":0.9995117,"speaker":"A"},{"text":"for","start":2403060,"end":2403460,"confidence":0.9863281,"speaker":"A"},{"text":"like","start":2405380,"end":2405780,"confidence":0.97021484,"speaker":"A"},{"text":"this","start":2406660,"end":2406940,"confidence":0.9975586,"speaker":"A"},{"text":"is","start":2406940,"end":2407100,"confidence":0.99902344,"speaker":"A"},{"text":"generic","start":2407100,"end":2407700,"confidence":1,"speaker":"A"},{"text":"essentially,","start":2407700,"end":2408420,"confidence":0.9996338,"speaker":"A"},{"text":"but","start":2408500,"end":2408900,"confidence":0.9941406,"speaker":"A"},{"text":"all","start":2410020,"end":2410300,"confidence":0.98828125,"speaker":"A"},{"text":"these,","start":2410300,"end":2410580,"confidence":0.9868164,"speaker":"A"},{"text":"the","start":2410820,"end":2411140,"confidence":0.9223633,"speaker":"A"},{"text":"environment,","start":2411140,"end":2411460,"confidence":1,"speaker":"A"},{"text":"etc.","start":2411700,"end":2412500,"confidence":0.975,"speaker":"A"},{"text":"These","start":2413140,"end":2413420,"confidence":0.9995117,"speaker":"A"},{"text":"are","start":2413420,"end":2413540,"confidence":0.9995117,"speaker":"A"},{"text":"all","start":2413540,"end":2413700,"confidence":0.99853516,"speaker":"A"},{"text":"passed","start":2413700,"end":2414060,"confidence":0.93310547,"speaker":"A"},{"text":"from","start":2414060,"end":2414220,"confidence":1,"speaker":"A"},{"text":"that","start":2414220,"end":2414420,"confidence":0.99902344,"speaker":"A"},{"text":"workflow","start":2414420,"end":2414980,"confidence":0.9741211,"speaker":"A"},{"text":"into","start":2414980,"end":2415260,"confidence":0.99609375,"speaker":"A"},{"text":"here.","start":2415260,"end":2415620,"confidence":0.99902344,"speaker":"A"},{"text":"These","start":2415940,"end":2416220,"confidence":0.9975586,"speaker":"A"},{"text":"are","start":2416220,"end":2416380,"confidence":0.9995117,"speaker":"A"},{"text":"basically","start":2416380,"end":2416820,"confidence":0.9992676,"speaker":"A"},{"text":"either","start":2416820,"end":2417180,"confidence":0.9995117,"speaker":"A"},{"text":"API","start":2417180,"end":2417620,"confidence":0.85180664,"speaker":"A"},{"text":"keys","start":2417620,"end":2417980,"confidence":0.99975586,"speaker":"A"},{"text":"or","start":2417980,"end":2418180,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2418180,"end":2418420,"confidence":0.99902344,"speaker":"A"},{"text":"information","start":2418420,"end":2418740,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":2418820,"end":2419100,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":2419100,"end":2419260,"confidence":1,"speaker":"A"},{"text":"need","start":2419260,"end":2419540,"confidence":0.9995117,"speaker":"A"},{"text":"for","start":2419620,"end":2420020,"confidence":0.9995117,"speaker":"A"},{"text":"accessing","start":2420500,"end":2421100,"confidence":0.9953613,"speaker":"A"},{"text":"Cloud,","start":2421100,"end":2421460,"confidence":0.9243164,"speaker":"A"},{"text":"the","start":2421460,"end":2421780,"confidence":0.8491211,"speaker":"A"},{"text":"public,","start":2421780,"end":2422100,"confidence":0.765625,"speaker":"A"},{"text":"public","start":2424020,"end":2424380,"confidence":0.9995117,"speaker":"A"},{"text":"database.","start":2424380,"end":2425060,"confidence":0.99869794,"speaker":"A"},{"text":"Right.","start":2425840,"end":2426080,"confidence":0.9008789,"speaker":"A"},{"text":"And","start":2426480,"end":2426760,"confidence":0.9794922,"speaker":"A"},{"text":"then","start":2426760,"end":2427040,"confidence":0.9980469,"speaker":"A"},{"text":"I","start":2427840,"end":2428120,"confidence":0.96435547,"speaker":"A"},{"text":"already","start":2428120,"end":2428360,"confidence":0.99902344,"speaker":"A"},{"text":"pre","start":2428360,"end":2428680,"confidence":0.99853516,"speaker":"A"},{"text":"built","start":2428680,"end":2429200,"confidence":0.8404948,"speaker":"A"},{"text":"the","start":2429760,"end":2430160,"confidence":0.9970703,"speaker":"A"},{"text":"binary.","start":2430160,"end":2430880,"confidence":0.9977214,"speaker":"A"},{"text":"So","start":2431120,"end":2431520,"confidence":0.99316406,"speaker":"A"},{"text":"we","start":2431600,"end":2431880,"confidence":0.9995117,"speaker":"A"},{"text":"already","start":2431880,"end":2432040,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":2432040,"end":2432200,"confidence":0.99902344,"speaker":"A"},{"text":"that.","start":2432200,"end":2432360,"confidence":1,"speaker":"A"},{"text":"We're","start":2432360,"end":2432600,"confidence":0.9973958,"speaker":"A"},{"text":"running","start":2432600,"end":2432840,"confidence":1,"speaker":"A"},{"text":"this","start":2432840,"end":2433120,"confidence":0.99902344,"speaker":"A"},{"text":"on","start":2433200,"end":2433600,"confidence":0.9975586,"speaker":"A"},{"text":"Ubuntu","start":2434880,"end":2435720,"confidence":0.93408203,"speaker":"A"},{"text":"because","start":2435720,"end":2435960,"confidence":0.94970703,"speaker":"A"},{"text":"it's","start":2435960,"end":2436160,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":2436160,"end":2436280,"confidence":0.8647461,"speaker":"A"},{"text":"default.","start":2436280,"end":2436800,"confidence":0.9998779,"speaker":"A"},{"text":"Look","start":2437200,"end":2437480,"confidence":0.9970703,"speaker":"A"},{"text":"at","start":2437480,"end":2437640,"confidence":0.9995117,"speaker":"A"},{"text":"it.","start":2437640,"end":2437920,"confidence":0.9995117,"speaker":"A"},{"text":"If","start":2439200,"end":2439600,"confidence":0.9980469,"speaker":"A"},{"text":"there","start":2439920,"end":2440280,"confidence":1,"speaker":"A"},{"text":"is","start":2440280,"end":2440560,"confidence":0.9995117,"speaker":"A"},{"text":"no","start":2440560,"end":2440880,"confidence":0.9970703,"speaker":"A"},{"text":"binary,","start":2440960,"end":2441639,"confidence":0.9977214,"speaker":"A"},{"text":"it","start":2441639,"end":2441840,"confidence":0.9736328,"speaker":"A"},{"text":"goes","start":2441840,"end":2442000,"confidence":1,"speaker":"A"},{"text":"ahead","start":2442000,"end":2442120,"confidence":0.99853516,"speaker":"A"},{"text":"and","start":2442120,"end":2442320,"confidence":1,"speaker":"A"},{"text":"builds","start":2442320,"end":2442680,"confidence":0.99853516,"speaker":"A"},{"text":"the","start":2442680,"end":2442800,"confidence":1,"speaker":"A"},{"text":"binary","start":2442800,"end":2443280,"confidence":0.9991862,"speaker":"A"},{"text":"for","start":2443280,"end":2443520,"confidence":0.99853516,"speaker":"A"},{"text":"me.","start":2443520,"end":2443840,"confidence":0.9995117,"speaker":"A"},{"text":"So","start":2444000,"end":2444240,"confidence":0.95166016,"speaker":"A"},{"text":"that's","start":2444240,"end":2444400,"confidence":0.9991862,"speaker":"A"},{"text":"what","start":2444400,"end":2444520,"confidence":0.9995117,"speaker":"A"},{"text":"this","start":2444520,"end":2444680,"confidence":1,"speaker":"A"},{"text":"is","start":2444680,"end":2444880,"confidence":1,"speaker":"A"},{"text":"doing.","start":2444880,"end":2445200,"confidence":0.99902344,"speaker":"A"},{"text":"And","start":2447120,"end":2447440,"confidence":0.88671875,"speaker":"A"},{"text":"then","start":2447440,"end":2447760,"confidence":0.99902344,"speaker":"A"},{"text":"we","start":2448800,"end":2449080,"confidence":0.9995117,"speaker":"A"},{"text":"make","start":2449080,"end":2449280,"confidence":0.7973633,"speaker":"A"},{"text":"sure","start":2449280,"end":2449480,"confidence":1,"speaker":"A"},{"text":"the","start":2449480,"end":2449640,"confidence":0.9941406,"speaker":"A"},{"text":"binary","start":2449640,"end":2450080,"confidence":0.92838544,"speaker":"A"},{"text":"works.","start":2450080,"end":2450640,"confidence":0.9995117,"speaker":"A"},{"text":"We","start":2450880,"end":2451120,"confidence":0.41552734,"speaker":"A"},{"text":"make,","start":2451120,"end":2451180,"confidence":0.6088867,"speaker":"A"},{"text":"we","start":2451250,"end":2451330,"confidence":0.6176758,"speaker":"A"},{"text":"make","start":2451330,"end":2451450,"confidence":0.99902344,"speaker":"A"},{"text":"it","start":2451450,"end":2451610,"confidence":0.9550781,"speaker":"A"},{"text":"executable,","start":2451610,"end":2452210,"confidence":0.9968262,"speaker":"A"},{"text":"we","start":2452290,"end":2452650,"confidence":0.99658203,"speaker":"A"},{"text":"validate,","start":2452650,"end":2453290,"confidence":0.9996745,"speaker":"A"},{"text":"make","start":2453290,"end":2453530,"confidence":0.9951172,"speaker":"A"},{"text":"sure","start":2453530,"end":2453730,"confidence":1,"speaker":"A"},{"text":"all","start":2453730,"end":2454050,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":2454050,"end":2454450,"confidence":0.99902344,"speaker":"A"},{"text":"API","start":2455010,"end":2455570,"confidence":0.9987793,"speaker":"A"},{"text":"secrets","start":2455570,"end":2456050,"confidence":0.98339844,"speaker":"A"},{"text":"are","start":2456050,"end":2456250,"confidence":0.99902344,"speaker":"A"},{"text":"there.","start":2456250,"end":2456530,"confidence":0.99902344,"speaker":"A"},{"text":"We","start":2457650,"end":2457970,"confidence":0.9951172,"speaker":"A"},{"text":"then","start":2457970,"end":2458210,"confidence":0.99658203,"speaker":"A"},{"text":"go","start":2458210,"end":2458410,"confidence":0.99853516,"speaker":"A"},{"text":"ahead","start":2458410,"end":2458690,"confidence":0.99853516,"speaker":"A"},{"text":"and","start":2458930,"end":2459290,"confidence":0.9921875,"speaker":"A"},{"text":"this","start":2459290,"end":2459530,"confidence":0.9863281,"speaker":"A"},{"text":"validates","start":2459530,"end":2460010,"confidence":0.99690753,"speaker":"A"},{"text":"the","start":2460010,"end":2460170,"confidence":0.99902344,"speaker":"A"},{"text":"pim.","start":2460170,"end":2460530,"confidence":0.8864746,"speaker":"A"},{"text":"But","start":2460690,"end":2460970,"confidence":0.99853516,"speaker":"A"},{"text":"essentially","start":2460970,"end":2461370,"confidence":0.9954834,"speaker":"A"},{"text":"this","start":2461370,"end":2461530,"confidence":0.9902344,"speaker":"A"},{"text":"is","start":2461530,"end":2461650,"confidence":0.9814453,"speaker":"A"},{"text":"the","start":2461650,"end":2461770,"confidence":0.8173828,"speaker":"A"},{"text":"fun","start":2461770,"end":2462010,"confidence":0.9980469,"speaker":"A"},{"text":"part.","start":2462010,"end":2462370,"confidence":0.9995117,"speaker":"A"},{"text":"We","start":2463410,"end":2463690,"confidence":0.9995117,"speaker":"A"},{"text":"go","start":2463690,"end":2463810,"confidence":0.9995117,"speaker":"A"},{"text":"ahead,","start":2463810,"end":2464050,"confidence":0.99902344,"speaker":"A"},{"text":"we","start":2464050,"end":2464330,"confidence":0.9980469,"speaker":"A"},{"text":"have","start":2464330,"end":2464610,"confidence":0.99902344,"speaker":"A"},{"text":"all","start":2464930,"end":2465290,"confidence":0.99853516,"speaker":"A"},{"text":"our","start":2465290,"end":2465530,"confidence":0.99365234,"speaker":"A"},{"text":"inputs","start":2465530,"end":2466010,"confidence":0.88171387,"speaker":"A"},{"text":"for","start":2466010,"end":2466170,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":2466170,"end":2466290,"confidence":1,"speaker":"A"},{"text":"private","start":2466290,"end":2466490,"confidence":0.99902344,"speaker":"A"},{"text":"key,","start":2466490,"end":2466770,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2466770,"end":2467089,"confidence":0.9277344,"speaker":"A"},{"text":"key","start":2467089,"end":2467410,"confidence":0.98779297,"speaker":"A"},{"text":"id,","start":2467410,"end":2467730,"confidence":0.97021484,"speaker":"A"},{"text":"environment,","start":2467810,"end":2468210,"confidence":0.99902344,"speaker":"A"},{"text":"container","start":2468690,"end":2469290,"confidence":0.99902344,"speaker":"A"},{"text":"id.","start":2469290,"end":2469570,"confidence":0.99609375,"speaker":"A"},{"text":"And","start":2470610,"end":2470890,"confidence":0.9707031,"speaker":"A"},{"text":"then","start":2470890,"end":2471050,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":2471050,"end":2471170,"confidence":0.99902344,"speaker":"A"},{"text":"use","start":2471170,"end":2471370,"confidence":0.99658203,"speaker":"A"},{"text":"Virtual","start":2471370,"end":2471770,"confidence":0.9996338,"speaker":"A"},{"text":"Buddy","start":2471770,"end":2472090,"confidence":0.98583984,"speaker":"A"},{"text":"for","start":2472090,"end":2472250,"confidence":0.99902344,"speaker":"A"},{"text":"signing","start":2472250,"end":2472650,"confidence":0.9938965,"speaker":"A"},{"text":"verification.","start":2472650,"end":2473410,"confidence":0.99990237,"speaker":"A"},{"text":"And.","start":2474050,"end":2474450,"confidence":0.93603516,"speaker":"A"},{"text":"It","start":2478460,"end":2478580,"confidence":0.9707031,"speaker":"A"},{"text":"then","start":2478580,"end":2478740,"confidence":0.9980469,"speaker":"A"},{"text":"goes","start":2478740,"end":2479060,"confidence":0.99975586,"speaker":"A"},{"text":"in","start":2479060,"end":2479220,"confidence":0.99902344,"speaker":"A"},{"text":"and","start":2479220,"end":2479500,"confidence":0.8173828,"speaker":"A"},{"text":"it","start":2479900,"end":2480300,"confidence":0.99560547,"speaker":"A"},{"text":"runs","start":2481260,"end":2481740,"confidence":1,"speaker":"A"},{"text":"the","start":2481740,"end":2481940,"confidence":0.9995117,"speaker":"A"},{"text":"sync","start":2481940,"end":2482380,"confidence":0.9733073,"speaker":"A"},{"text":"and","start":2483500,"end":2483780,"confidence":0.96435547,"speaker":"A"},{"text":"then","start":2483780,"end":2484060,"confidence":0.97753906,"speaker":"A"},{"text":"we'll","start":2484860,"end":2485220,"confidence":0.8601888,"speaker":"A"},{"text":"go","start":2485220,"end":2485380,"confidence":0.99902344,"speaker":"A"},{"text":"in.","start":2485380,"end":2485660,"confidence":0.9980469,"speaker":"A"},{"text":"Basically","start":2485980,"end":2486460,"confidence":0.9995117,"speaker":"A"},{"text":"it","start":2486460,"end":2486620,"confidence":0.95996094,"speaker":"A"},{"text":"pulls","start":2486620,"end":2486900,"confidence":0.99902344,"speaker":"A"},{"text":"from","start":2486900,"end":2487060,"confidence":1,"speaker":"A"},{"text":"several","start":2487060,"end":2487340,"confidence":0.9995117,"speaker":"A"},{"text":"websites","start":2487340,"end":2488140,"confidence":0.99658203,"speaker":"A"},{"text":"information","start":2489100,"end":2489500,"confidence":1,"speaker":"A"},{"text":"about","start":2489580,"end":2489900,"confidence":0.9995117,"speaker":"A"},{"text":"macrosos,","start":2489900,"end":2490500,"confidence":0.85645,"speaker":"A"},{"text":"restore","start":2490500,"end":2490940,"confidence":0.85498047,"speaker":"A"},{"text":"images","start":2490940,"end":2491380,"confidence":0.998291,"speaker":"A"},{"text":"and","start":2491380,"end":2491620,"confidence":0.9980469,"speaker":"A"},{"text":"checks","start":2491620,"end":2491940,"confidence":0.9996745,"speaker":"A"},{"text":"whether","start":2491940,"end":2492100,"confidence":0.99902344,"speaker":"A"},{"text":"they're","start":2492100,"end":2492380,"confidence":0.98030597,"speaker":"A"},{"text":"signed.","start":2492380,"end":2492939,"confidence":0.80981445,"speaker":"A"},{"text":"And","start":2493340,"end":2493620,"confidence":0.94970703,"speaker":"A"},{"text":"then","start":2493620,"end":2493780,"confidence":0.9970703,"speaker":"A"},{"text":"it","start":2493780,"end":2493940,"confidence":1,"speaker":"A"},{"text":"goes","start":2493940,"end":2494140,"confidence":1,"speaker":"A"},{"text":"ahead","start":2494140,"end":2494340,"confidence":0.99902344,"speaker":"A"},{"text":"and","start":2494340,"end":2494700,"confidence":0.53125,"speaker":"A"},{"text":"it","start":2494780,"end":2495180,"confidence":0.86621094,"speaker":"A"},{"text":"adds","start":2496380,"end":2496900,"confidence":0.99853516,"speaker":"A"},{"text":"those","start":2496900,"end":2497180,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":2497260,"end":2497540,"confidence":1,"speaker":"A"},{"text":"the","start":2497540,"end":2497660,"confidence":1,"speaker":"A"},{"text":"database.","start":2497660,"end":2498260,"confidence":0.9998372,"speaker":"A"},{"text":"And","start":2498260,"end":2498500,"confidence":0.9238281,"speaker":"A"},{"text":"then","start":2498500,"end":2498700,"confidence":0.9902344,"speaker":"A"},{"text":"what","start":2498700,"end":2498900,"confidence":0.9995117,"speaker":"A"},{"text":"this","start":2498900,"end":2499060,"confidence":1,"speaker":"A"},{"text":"does","start":2499060,"end":2499260,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":2499260,"end":2499460,"confidence":0.99902344,"speaker":"A"},{"text":"it","start":2499460,"end":2499620,"confidence":0.86279297,"speaker":"A"},{"text":"exports","start":2499620,"end":2500140,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":2500620,"end":2500940,"confidence":0.99560547,"speaker":"A"},{"text":"information","start":2500940,"end":2501260,"confidence":1,"speaker":"A"},{"text":"in","start":2501500,"end":2501780,"confidence":0.9946289,"speaker":"A"},{"text":"a","start":2501780,"end":2501900,"confidence":0.98046875,"speaker":"A"},{"text":"run.","start":2501900,"end":2502100,"confidence":0.9926758,"speaker":"A"},{"text":"Let's,","start":2502100,"end":2502460,"confidence":0.7273763,"speaker":"A"},{"text":"let's","start":2502460,"end":2502700,"confidence":0.8728841,"speaker":"A"},{"text":"take","start":2502700,"end":2502820,"confidence":0.9921875,"speaker":"A"},{"text":"a","start":2502820,"end":2502940,"confidence":1,"speaker":"A"},{"text":"look,","start":2502940,"end":2503140,"confidence":0.9995117,"speaker":"A"},{"text":"see","start":2503140,"end":2503380,"confidence":0.99902344,"speaker":"A"},{"text":"if","start":2503380,"end":2503500,"confidence":1,"speaker":"A"},{"text":"I","start":2503500,"end":2503580,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":2503580,"end":2503740,"confidence":0.9995117,"speaker":"A"},{"text":"one.","start":2503740,"end":2504020,"confidence":0.9863281,"speaker":"A"},{"text":"I","start":2504020,"end":2504260,"confidence":0.99316406,"speaker":"A"},{"text":"can","start":2504260,"end":2504420,"confidence":0.9458008,"speaker":"A"},{"text":"show","start":2504420,"end":2504580,"confidence":0.9995117,"speaker":"A"},{"text":"you.","start":2504580,"end":2504860,"confidence":0.9970703,"speaker":"A"},{"text":"Oh,","start":2505980,"end":2506180,"confidence":0.8977051,"speaker":"A"},{"text":"there's","start":2506180,"end":2506460,"confidence":0.91503906,"speaker":"A"},{"text":"one","start":2506460,"end":2506700,"confidence":0.99853516,"speaker":"A"},{"text":"scheduled.","start":2506700,"end":2507420,"confidence":0.97436523,"speaker":"A"},{"text":"Yeah,","start":2510060,"end":2510460,"confidence":0.97347003,"speaker":"A"},{"text":"here","start":2510460,"end":2510660,"confidence":0.9995117,"speaker":"A"},{"text":"we","start":2510660,"end":2510780,"confidence":1,"speaker":"A"},{"text":"go.","start":2510780,"end":2511020,"confidence":0.9995117,"speaker":"A"},{"text":"So","start":2511260,"end":2511660,"confidence":0.8173828,"speaker":"A"},{"text":"there's","start":2512060,"end":2512700,"confidence":0.9090169,"speaker":"A"},{"text":"57","start":2513100,"end":2513700,"confidence":0.99829,"speaker":"A"},{"text":"new","start":2513700,"end":2514060,"confidence":0.98291016,"speaker":"A"},{"text":"restore","start":2514060,"end":2514580,"confidence":0.84936523,"speaker":"A"},{"text":"images","start":2514580,"end":2514980,"confidence":0.9980469,"speaker":"A"},{"text":"created,","start":2514980,"end":2515580,"confidence":0.9970703,"speaker":"A"},{"text":"177","start":2516300,"end":2517500,"confidence":0.95771,"speaker":"A"},{"text":"updated.","start":2517660,"end":2518300,"confidence":0.9980469,"speaker":"A"},{"text":"234","start":2518780,"end":2519900,"confidence":0.93447,"speaker":"A"},{"text":"total.","start":2519980,"end":2520380,"confidence":0.9995117,"speaker":"A"},{"text":"No","start":2521420,"end":2521740,"confidence":0.9970703,"speaker":"A"},{"text":"operations","start":2521740,"end":2522300,"confidence":0.9987793,"speaker":"A"},{"text":"failed.","start":2522380,"end":2523020,"confidence":0.9992676,"speaker":"A"},{"text":"I","start":2523100,"end":2523380,"confidence":0.9916992,"speaker":"A"},{"text":"also","start":2523380,"end":2523580,"confidence":0.99902344,"speaker":"A"},{"text":"store","start":2523580,"end":2523900,"confidence":0.77490234,"speaker":"A"},{"text":"Xcode","start":2523900,"end":2524340,"confidence":0.89245605,"speaker":"A"},{"text":"versions","start":2524340,"end":2524700,"confidence":0.9970703,"speaker":"A"},{"text":"and","start":2524700,"end":2524980,"confidence":0.9370117,"speaker":"A"},{"text":"Swift","start":2524980,"end":2525420,"confidence":0.9921875,"speaker":"A"},{"text":"versions.","start":2525420,"end":2525900,"confidence":0.9975586,"speaker":"A"},{"text":"Those","start":2526780,"end":2527100,"confidence":0.99853516,"speaker":"A"},{"text":"get","start":2527100,"end":2527300,"confidence":0.99902344,"speaker":"A"},{"text":"stored","start":2527300,"end":2527620,"confidence":0.99853516,"speaker":"A"},{"text":"as","start":2527620,"end":2527780,"confidence":0.9995117,"speaker":"A"},{"text":"well.","start":2527780,"end":2528060,"confidence":0.9995117,"speaker":"A"},{"text":"Had","start":2529420,"end":2529700,"confidence":0.89697266,"speaker":"A"},{"text":"to","start":2529700,"end":2529860,"confidence":0.9736328,"speaker":"A"},{"text":"rebuild","start":2529860,"end":2530180,"confidence":0.9995117,"speaker":"A"},{"text":"it,","start":2530180,"end":2530460,"confidence":0.9975586,"speaker":"A"},{"text":"but","start":2530630,"end":2530790,"confidence":0.99902344,"speaker":"A"},{"text":"here","start":2530790,"end":2531070,"confidence":1,"speaker":"A"},{"text":"is","start":2531070,"end":2531310,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":2531310,"end":2531510,"confidence":1,"speaker":"A"},{"text":"results.","start":2531510,"end":2531830,"confidence":0.98046875,"speaker":"A"},{"text":"I'm","start":2533750,"end":2534070,"confidence":0.9995117,"speaker":"A"},{"text":"not","start":2534070,"end":2534190,"confidence":0.9995117,"speaker":"A"},{"text":"going","start":2534190,"end":2534310,"confidence":0.9140625,"speaker":"A"},{"text":"to","start":2534310,"end":2534390,"confidence":0.9995117,"speaker":"A"},{"text":"pull","start":2534390,"end":2534590,"confidence":0.99975586,"speaker":"A"},{"text":"that","start":2534590,"end":2534750,"confidence":0.99853516,"speaker":"A"},{"text":"up,","start":2534750,"end":2535030,"confidence":0.9995117,"speaker":"A"},{"text":"but","start":2535830,"end":2536110,"confidence":0.9995117,"speaker":"A"},{"text":"it's","start":2536110,"end":2536350,"confidence":0.9944661,"speaker":"A"},{"text":"essentially","start":2536350,"end":2536950,"confidence":0.9980469,"speaker":"A"},{"text":"updated","start":2537270,"end":2537750,"confidence":0.99853516,"speaker":"A"},{"text":"my","start":2537750,"end":2537990,"confidence":0.99609375,"speaker":"A"},{"text":"CloudKit","start":2537990,"end":2538710,"confidence":0.9953613,"speaker":"A"},{"text":"database","start":2538790,"end":2539510,"confidence":0.99902344,"speaker":"A"},{"text":"and","start":2542070,"end":2542470,"confidence":0.99658203,"speaker":"A"},{"text":"that's","start":2542550,"end":2542950,"confidence":0.9998372,"speaker":"A"},{"text":"all","start":2542950,"end":2543070,"confidence":0.9995117,"speaker":"A"},{"text":"in","start":2543070,"end":2543190,"confidence":0.9892578,"speaker":"A"},{"text":"the","start":2543190,"end":2543310,"confidence":0.99902344,"speaker":"A"},{"text":"public","start":2543310,"end":2543510,"confidence":1,"speaker":"A"},{"text":"database.","start":2543510,"end":2544030,"confidence":0.9991862,"speaker":"A"},{"text":"And","start":2544030,"end":2544150,"confidence":0.9980469,"speaker":"A"},{"text":"then","start":2544150,"end":2544390,"confidence":0.9980469,"speaker":"A"},{"text":"maybe","start":2545110,"end":2545470,"confidence":0.99975586,"speaker":"A"},{"text":"even","start":2545470,"end":2545670,"confidence":0.9995117,"speaker":"A"},{"text":"by","start":2545670,"end":2545870,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2545870,"end":2546030,"confidence":0.9995117,"speaker":"A"},{"text":"time","start":2546030,"end":2546190,"confidence":1,"speaker":"A"},{"text":"I","start":2546190,"end":2546310,"confidence":0.99560547,"speaker":"A"},{"text":"present","start":2546310,"end":2546550,"confidence":0.9995117,"speaker":"A"},{"text":"this,","start":2546550,"end":2546869,"confidence":0.9995117,"speaker":"A"},{"text":"I'll","start":2546869,"end":2547110,"confidence":0.99902344,"speaker":"A"},{"text":"have","start":2547110,"end":2547310,"confidence":0.99853516,"speaker":"A"},{"text":"a","start":2547310,"end":2547550,"confidence":0.97314453,"speaker":"A"},{"text":"working","start":2547550,"end":2547830,"confidence":0.99902344,"speaker":"A"},{"text":"example","start":2547830,"end":2548350,"confidence":0.9814453,"speaker":"A"},{"text":"in","start":2548350,"end":2548510,"confidence":0.7578125,"speaker":"A"},{"text":"Bushel","start":2548510,"end":2548950,"confidence":0.9241536,"speaker":"A"},{"text":"with","start":2548950,"end":2549150,"confidence":1,"speaker":"A"},{"text":"that","start":2549150,"end":2549390,"confidence":0.9975586,"speaker":"A"},{"text":"example","start":2549390,"end":2549910,"confidence":0.9869792,"speaker":"A"},{"text":"working,","start":2549910,"end":2550230,"confidence":0.99902344,"speaker":"A"},{"text":"which","start":2550630,"end":2550910,"confidence":0.93310547,"speaker":"A"},{"text":"would","start":2550910,"end":2551070,"confidence":0.9277344,"speaker":"A"},{"text":"be","start":2551070,"end":2551230,"confidence":0.9995117,"speaker":"A"},{"text":"awesome.","start":2551230,"end":2551670,"confidence":0.99886066,"speaker":"A"},{"text":"Celestra,","start":2552870,"end":2553750,"confidence":0.7898763,"speaker":"A"},{"text":"same","start":2553990,"end":2554310,"confidence":0.99853516,"speaker":"A"},{"text":"idea.","start":2554310,"end":2554870,"confidence":0.998291,"speaker":"A"},{"text":"So","start":2555030,"end":2555310,"confidence":0.9970703,"speaker":"A"},{"text":"this","start":2555310,"end":2555470,"confidence":0.9916992,"speaker":"A"},{"text":"looks","start":2555470,"end":2555670,"confidence":0.99975586,"speaker":"A"},{"text":"like","start":2555670,"end":2555790,"confidence":0.9995117,"speaker":"A"},{"text":"it","start":2555790,"end":2555910,"confidence":0.9824219,"speaker":"A"},{"text":"was","start":2555910,"end":2555990,"confidence":0.9975586,"speaker":"A"},{"text":"a","start":2555990,"end":2556110,"confidence":0.80810547,"speaker":"A"},{"text":"RSS","start":2556110,"end":2556630,"confidence":0.72924805,"speaker":"A"},{"text":"update.","start":2556630,"end":2557190,"confidence":0.9975586,"speaker":"A"},{"text":"We","start":2558910,"end":2559030,"confidence":0.9663086,"speaker":"A"},{"text":"get","start":2559030,"end":2559150,"confidence":0.5415039,"speaker":"A"},{"text":"the","start":2559150,"end":2559270,"confidence":0.9970703,"speaker":"A"},{"text":"workflow","start":2559270,"end":2559790,"confidence":0.9992676,"speaker":"A"},{"text":"file","start":2559790,"end":2560190,"confidence":0.79589844,"speaker":"A"},{"text":"and.","start":2562510,"end":2562830,"confidence":0.8984375,"speaker":"A"},{"text":"Oh,","start":2562830,"end":2563150,"confidence":0.78930664,"speaker":"A"},{"text":"sorry,","start":2563150,"end":2563430,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":2563430,"end":2563590,"confidence":0.99902344,"speaker":"A"},{"text":"should","start":2563590,"end":2563830,"confidence":0.9995117,"speaker":"A"},{"text":"point","start":2563830,"end":2564070,"confidence":1,"speaker":"A"},{"text":"out,","start":2564070,"end":2564270,"confidence":1,"speaker":"A"},{"text":"because","start":2564270,"end":2564470,"confidence":0.96191406,"speaker":"A"},{"text":"you're","start":2564470,"end":2564670,"confidence":0.9991862,"speaker":"A"},{"text":"probably","start":2564670,"end":2564870,"confidence":1,"speaker":"A"},{"text":"wondering","start":2564870,"end":2565270,"confidence":0.99121094,"speaker":"A"},{"text":"where","start":2565270,"end":2565510,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":2565510,"end":2565670,"confidence":0.88183594,"speaker":"A"},{"text":"all","start":2565670,"end":2565830,"confidence":0.99121094,"speaker":"A"},{"text":"these.","start":2565830,"end":2566110,"confidence":0.8798828,"speaker":"A"},{"text":"The","start":2566110,"end":2566390,"confidence":0.8417969,"speaker":"A"},{"text":"stuff","start":2566390,"end":2566710,"confidence":0.99853516,"speaker":"A"},{"text":"all","start":2566710,"end":2566950,"confidence":0.9892578,"speaker":"A"},{"text":"these","start":2566950,"end":2567110,"confidence":0.7866211,"speaker":"A"},{"text":"secrets","start":2567110,"end":2567510,"confidence":0.97875977,"speaker":"A"},{"text":"stored?","start":2567510,"end":2567870,"confidence":0.98657227,"speaker":"A"},{"text":"Yes,","start":2567870,"end":2568150,"confidence":0.99975586,"speaker":"A"},{"text":"they","start":2568150,"end":2568310,"confidence":0.99902344,"speaker":"A"},{"text":"are","start":2568310,"end":2568510,"confidence":0.99902344,"speaker":"A"},{"text":"stored","start":2568510,"end":2568990,"confidence":0.99731445,"speaker":"A"},{"text":"in","start":2569790,"end":2570150,"confidence":0.9765625,"speaker":"A"},{"text":"Actions","start":2570150,"end":2570830,"confidence":0.9909668,"speaker":"A"},{"text":"secrets","start":2570990,"end":2571790,"confidence":0.998291,"speaker":"A"},{"text":"right","start":2572430,"end":2572750,"confidence":0.99853516,"speaker":"A"},{"text":"here.","start":2572750,"end":2573070,"confidence":0.9995117,"speaker":"A"},{"text":"So","start":2573310,"end":2573589,"confidence":0.94384766,"speaker":"A"},{"text":"we","start":2573589,"end":2573750,"confidence":1,"speaker":"A"},{"text":"have","start":2573750,"end":2573910,"confidence":1,"speaker":"A"},{"text":"our","start":2573910,"end":2574070,"confidence":0.8671875,"speaker":"A"},{"text":"private","start":2574070,"end":2574310,"confidence":0.9995117,"speaker":"A"},{"text":"key","start":2574310,"end":2574670,"confidence":0.9980469,"speaker":"A"},{"text":"ID","start":2575310,"end":2575710,"confidence":0.8774414,"speaker":"A"},{"text":"API","start":2576510,"end":2577070,"confidence":0.98535156,"speaker":"A"},{"text":"key","start":2577070,"end":2577390,"confidence":0.9970703,"speaker":"A"},{"text":"from","start":2577790,"end":2578190,"confidence":0.9995117,"speaker":"A"},{"text":"Virtual","start":2578190,"end":2578670,"confidence":0.99975586,"speaker":"A"},{"text":"Buddy.","start":2578670,"end":2579150,"confidence":0.97786456,"speaker":"A"},{"text":"So","start":2579550,"end":2579950,"confidence":0.9667969,"speaker":"A"},{"text":"that's","start":2580030,"end":2580430,"confidence":0.99625653,"speaker":"A"},{"text":"all","start":2580430,"end":2580550,"confidence":0.98779297,"speaker":"A"},{"text":"stored","start":2580550,"end":2580950,"confidence":0.9921875,"speaker":"A"},{"text":"there.","start":2580950,"end":2581230,"confidence":0.99658203,"speaker":"A"},{"text":"Here","start":2581870,"end":2582270,"confidence":0.99853516,"speaker":"A"},{"text":"is","start":2582350,"end":2582750,"confidence":0.9975586,"speaker":"A"},{"text":"Celestra.","start":2583150,"end":2583950,"confidence":0.8902995,"speaker":"A"},{"text":"It's","start":2584270,"end":2584710,"confidence":0.99886066,"speaker":"A"},{"text":"for","start":2584710,"end":2584910,"confidence":0.99902344,"speaker":"A"},{"text":"updating","start":2584910,"end":2585350,"confidence":0.9995117,"speaker":"A"},{"text":"RSS","start":2585350,"end":2585830,"confidence":0.9616699,"speaker":"A"},{"text":"feeds.","start":2585830,"end":2586350,"confidence":0.9967448,"speaker":"A"},{"text":"So","start":2587050,"end":2587130,"confidence":0.97216797,"speaker":"A"},{"text":"it","start":2587130,"end":2587210,"confidence":0.9663086,"speaker":"A"},{"text":"just","start":2587210,"end":2587370,"confidence":0.9951172,"speaker":"A"},{"text":"basically","start":2587370,"end":2587810,"confidence":0.99975586,"speaker":"A"},{"text":"goes","start":2587810,"end":2588170,"confidence":0.9995117,"speaker":"A"},{"text":"through.","start":2588170,"end":2588490,"confidence":0.9995117,"speaker":"A"},{"text":"You","start":2588570,"end":2588810,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":2588810,"end":2588930,"confidence":0.9995117,"speaker":"A"},{"text":"look","start":2588930,"end":2589090,"confidence":1,"speaker":"A"},{"text":"at","start":2589090,"end":2589210,"confidence":1,"speaker":"A"},{"text":"the","start":2589210,"end":2589290,"confidence":0.9951172,"speaker":"A"},{"text":"Swift","start":2589290,"end":2589610,"confidence":0.99902344,"speaker":"A"},{"text":"code","start":2589610,"end":2589930,"confidence":0.976888,"speaker":"A"},{"text":"it","start":2589930,"end":2590130,"confidence":0.9995117,"speaker":"A"},{"text":"goes","start":2590130,"end":2590370,"confidence":0.9995117,"speaker":"A"},{"text":"through,","start":2590370,"end":2590610,"confidence":0.9995117,"speaker":"A"},{"text":"pulls","start":2590610,"end":2590970,"confidence":0.97249347,"speaker":"A"},{"text":"RSS","start":2590970,"end":2591370,"confidence":0.98217773,"speaker":"A"},{"text":"feeds","start":2591370,"end":2591890,"confidence":0.9975586,"speaker":"A"},{"text":"and","start":2591890,"end":2592090,"confidence":0.9975586,"speaker":"A"},{"text":"updates","start":2592090,"end":2592650,"confidence":0.9995117,"speaker":"A"},{"text":"them","start":2593050,"end":2593370,"confidence":0.98876953,"speaker":"A"},{"text":"into","start":2593370,"end":2593650,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":2593650,"end":2593850,"confidence":0.9970703,"speaker":"A"},{"text":"CloudKit","start":2593850,"end":2594490,"confidence":0.9980469,"speaker":"A"},{"text":"record","start":2595530,"end":2595930,"confidence":0.99902344,"speaker":"A"},{"text":"or","start":2596410,"end":2596810,"confidence":0.9975586,"speaker":"A"},{"text":"what","start":2596890,"end":2597130,"confidence":0.9321289,"speaker":"A"},{"text":"do","start":2597130,"end":2597210,"confidence":0.8364258,"speaker":"A"},{"text":"you","start":2597210,"end":2597290,"confidence":0.9980469,"speaker":"A"},{"text":"call","start":2597290,"end":2597370,"confidence":1,"speaker":"A"},{"text":"it?","start":2597370,"end":2597490,"confidence":0.9951172,"speaker":"A"},{"text":"Yeah,","start":2597490,"end":2597730,"confidence":0.9558919,"speaker":"A"},{"text":"record","start":2597730,"end":2598010,"confidence":0.99853516,"speaker":"A"},{"text":"type.","start":2598010,"end":2598490,"confidence":0.9250488,"speaker":"A"},{"text":"And","start":2599850,"end":2600130,"confidence":0.9638672,"speaker":"A"},{"text":"I","start":2600130,"end":2600290,"confidence":0.9946289,"speaker":"A"},{"text":"of","start":2600290,"end":2600410,"confidence":0.64501953,"speaker":"A"},{"text":"course","start":2600410,"end":2600570,"confidence":0.9995117,"speaker":"A"},{"text":"try","start":2600570,"end":2600770,"confidence":0.9506836,"speaker":"A"},{"text":"to","start":2600770,"end":2600890,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":2600890,"end":2600970,"confidence":1,"speaker":"A"},{"text":"it","start":2600970,"end":2601050,"confidence":0.9980469,"speaker":"A"},{"text":"in","start":2601050,"end":2601130,"confidence":0.98876953,"speaker":"A"},{"text":"such","start":2601130,"end":2601250,"confidence":1,"speaker":"A"},{"text":"a","start":2601250,"end":2601370,"confidence":0.96777344,"speaker":"A"},{"text":"way","start":2601370,"end":2601530,"confidence":1,"speaker":"A"},{"text":"not","start":2601530,"end":2601730,"confidence":0.99365234,"speaker":"A"},{"text":"to","start":2601730,"end":2601890,"confidence":0.9980469,"speaker":"A"},{"text":"hammer","start":2601890,"end":2602210,"confidence":0.9998372,"speaker":"A"},{"text":"people,","start":2602210,"end":2602490,"confidence":0.9995117,"speaker":"A"},{"text":"but","start":2602970,"end":2603370,"confidence":0.9902344,"speaker":"A"},{"text":"same","start":2603370,"end":2603690,"confidence":0.9941406,"speaker":"A"},{"text":"idea,","start":2603690,"end":2604170,"confidence":0.9914551,"speaker":"A"},{"text":"yeah,","start":2607050,"end":2607410,"confidence":0.96761066,"speaker":"A"},{"text":"it","start":2607410,"end":2607570,"confidence":0.99902344,"speaker":"A"},{"text":"goes","start":2607570,"end":2607770,"confidence":1,"speaker":"A"},{"text":"ahead","start":2607770,"end":2608010,"confidence":0.99853516,"speaker":"A"},{"text":"and","start":2608010,"end":2608330,"confidence":0.9921875,"speaker":"A"},{"text":"it","start":2608330,"end":2608570,"confidence":0.98828125,"speaker":"A"},{"text":"runs","start":2608570,"end":2609130,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2610330,"end":2610610,"confidence":0.9995117,"speaker":"A"},{"text":"binary","start":2610610,"end":2611210,"confidence":0.9991862,"speaker":"A"},{"text":"it","start":2611210,"end":2611530,"confidence":0.9711914,"speaker":"A"},{"text":"updates","start":2611530,"end":2612010,"confidence":0.9992676,"speaker":"A"},{"text":"and","start":2612170,"end":2612410,"confidence":0.98828125,"speaker":"A"},{"text":"then","start":2612410,"end":2612570,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":2612570,"end":2612770,"confidence":0.9995117,"speaker":"A"},{"text":"also","start":2612770,"end":2612970,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":2612970,"end":2613290,"confidence":0.99902344,"speaker":"A"},{"text":"like","start":2613290,"end":2613650,"confidence":0.9321289,"speaker":"A"},{"text":"actual","start":2613650,"end":2614170,"confidence":0.99853516,"speaker":"A"},{"text":"parameters","start":2615370,"end":2615890,"confidence":0.99902344,"speaker":"A"},{"text":"that","start":2615890,"end":2616010,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":2616010,"end":2616130,"confidence":0.9995117,"speaker":"A"},{"text":"take","start":2616130,"end":2616330,"confidence":1,"speaker":"A"},{"text":"to","start":2616330,"end":2616570,"confidence":0.97314453,"speaker":"A"},{"text":"to","start":2616570,"end":2616810,"confidence":0.9995117,"speaker":"A"},{"text":"filter","start":2616810,"end":2617170,"confidence":0.9663086,"speaker":"A"},{"text":"out,","start":2617170,"end":2617410,"confidence":1,"speaker":"A"},{"text":"like","start":2617410,"end":2617610,"confidence":0.99658203,"speaker":"A"},{"text":"which","start":2617610,"end":2617890,"confidence":0.99902344,"speaker":"A"},{"text":"RSS","start":2617890,"end":2618410,"confidence":0.99853516,"speaker":"A"},{"text":"feeds","start":2618410,"end":2618970,"confidence":0.9991862,"speaker":"A"},{"text":"are","start":2619290,"end":2619610,"confidence":0.96240234,"speaker":"A"},{"text":"high","start":2619610,"end":2619810,"confidence":1,"speaker":"A"},{"text":"priority","start":2619810,"end":2620170,"confidence":1,"speaker":"A"},{"text":"and","start":2620170,"end":2620330,"confidence":0.92626953,"speaker":"A"},{"text":"which","start":2620330,"end":2620450,"confidence":1,"speaker":"A"},{"text":"ones","start":2620450,"end":2620690,"confidence":0.9995117,"speaker":"A"},{"text":"aren't","start":2620690,"end":2621010,"confidence":0.99768066,"speaker":"A"},{"text":"based","start":2621010,"end":2621170,"confidence":1,"speaker":"A"},{"text":"on","start":2621170,"end":2621330,"confidence":1,"speaker":"A"},{"text":"the","start":2621330,"end":2621490,"confidence":0.99365234,"speaker":"A"},{"text":"audience","start":2621490,"end":2621770,"confidence":0.99853516,"speaker":"A"},{"text":"and","start":2621770,"end":2621970,"confidence":0.9975586,"speaker":"A"},{"text":"etc.","start":2621970,"end":2622650,"confidence":0.90723,"speaker":"A"},{"text":"So","start":2622650,"end":2623050,"confidence":0.9946289,"speaker":"A"},{"text":"yeah,","start":2623850,"end":2624330,"confidence":0.95377606,"speaker":"A"},{"text":"so","start":2624890,"end":2625170,"confidence":0.99853516,"speaker":"A"},{"text":"that's","start":2625170,"end":2625450,"confidence":0.9946289,"speaker":"A"},{"text":"deployment.","start":2625450,"end":2626170,"confidence":0.9991862,"speaker":"A"},{"text":"That's","start":2627050,"end":2627450,"confidence":0.9998372,"speaker":"A"},{"text":"how","start":2627450,"end":2627530,"confidence":1,"speaker":"A"},{"text":"you","start":2627530,"end":2627650,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":2627650,"end":2627770,"confidence":1,"speaker":"A"},{"text":"get","start":2627770,"end":2627890,"confidence":1,"speaker":"A"},{"text":"that","start":2627890,"end":2628090,"confidence":1,"speaker":"A"},{"text":"working.","start":2628090,"end":2628410,"confidence":0.9995117,"speaker":"A"},{"text":"There's","start":2628810,"end":2629250,"confidence":0.9996745,"speaker":"A"},{"text":"weird","start":2629250,"end":2629490,"confidence":1,"speaker":"A"},{"text":"stuff","start":2629490,"end":2629690,"confidence":1,"speaker":"A"},{"text":"with","start":2629690,"end":2629850,"confidence":0.99609375,"speaker":"A"},{"text":"cloud","start":2629850,"end":2630290,"confidence":0.8815918,"speaker":"A"},{"text":"with","start":2630290,"end":2630650,"confidence":0.9873047,"speaker":"A"},{"text":"GitHub","start":2630810,"end":2631530,"confidence":0.99853516,"speaker":"A"},{"text":"that","start":2632730,"end":2633130,"confidence":0.9975586,"speaker":"A"},{"text":"I've","start":2633690,"end":2634010,"confidence":1,"speaker":"A"},{"text":"noticed.","start":2634010,"end":2634330,"confidence":0.99869794,"speaker":"A"},{"text":"If","start":2634330,"end":2634530,"confidence":0.9975586,"speaker":"A"},{"text":"you","start":2634530,"end":2634730,"confidence":0.9995117,"speaker":"A"},{"text":"haven't","start":2634730,"end":2635010,"confidence":0.9984131,"speaker":"A"},{"text":"updated","start":2635010,"end":2635370,"confidence":0.9995117,"speaker":"A"},{"text":"it","start":2635370,"end":2635610,"confidence":0.96240234,"speaker":"A"},{"text":"in","start":2635610,"end":2635810,"confidence":0.99902344,"speaker":"A"},{"text":"a","start":2635810,"end":2635970,"confidence":0.99560547,"speaker":"A"},{"text":"while,","start":2635970,"end":2636250,"confidence":0.9995117,"speaker":"A"},{"text":"it","start":2636250,"end":2636530,"confidence":1,"speaker":"A"},{"text":"doesn't","start":2636530,"end":2636770,"confidence":0.9998372,"speaker":"A"},{"text":"run","start":2636770,"end":2636970,"confidence":0.99853516,"speaker":"A"},{"text":"these","start":2636970,"end":2637210,"confidence":0.96777344,"speaker":"A"},{"text":"cron","start":2637210,"end":2637490,"confidence":0.90527344,"speaker":"A"},{"text":"jobs.","start":2637490,"end":2637770,"confidence":0.99072266,"speaker":"A"},{"text":"So","start":2637770,"end":2637850,"confidence":0.9951172,"speaker":"A"},{"text":"I","start":2637850,"end":2637930,"confidence":1,"speaker":"A"},{"text":"need","start":2637930,"end":2638050,"confidence":1,"speaker":"A"},{"text":"to","start":2638050,"end":2638170,"confidence":0.99902344,"speaker":"A"},{"text":"figure","start":2638170,"end":2638330,"confidence":0.99975586,"speaker":"A"},{"text":"out","start":2638330,"end":2638490,"confidence":0.98828125,"speaker":"A"},{"text":"a","start":2638490,"end":2638690,"confidence":0.89941406,"speaker":"A"},{"text":"how","start":2638690,"end":2638850,"confidence":0.99853516,"speaker":"A"},{"text":"to","start":2638850,"end":2638970,"confidence":0.9995117,"speaker":"A"},{"text":"get","start":2638970,"end":2639050,"confidence":0.9995117,"speaker":"A"},{"text":"around","start":2639050,"end":2639210,"confidence":0.99853516,"speaker":"A"},{"text":"it","start":2639210,"end":2639410,"confidence":0.9238281,"speaker":"A"},{"text":"or","start":2639410,"end":2639570,"confidence":0.9995117,"speaker":"A"},{"text":"find","start":2639570,"end":2639730,"confidence":0.9995117,"speaker":"A"},{"text":"another","start":2639730,"end":2640010,"confidence":0.9477539,"speaker":"A"},{"text":"service","start":2640090,"end":2640450,"confidence":0.9819336,"speaker":"A"},{"text":"to","start":2640450,"end":2640650,"confidence":0.9970703,"speaker":"A"},{"text":"do","start":2640650,"end":2640730,"confidence":0.99902344,"speaker":"A"},{"text":"it.","start":2640730,"end":2640970,"confidence":0.9975586,"speaker":"A"},{"text":"This","start":2642830,"end":2642950,"confidence":0.9897461,"speaker":"A"},{"text":"is","start":2642950,"end":2643110,"confidence":0.9975586,"speaker":"A"},{"text":"all","start":2643110,"end":2643270,"confidence":0.9995117,"speaker":"A"},{"text":"free","start":2643270,"end":2643550,"confidence":1,"speaker":"A"},{"text":"because","start":2643630,"end":2644030,"confidence":0.9995117,"speaker":"A"},{"text":"it's","start":2644110,"end":2644590,"confidence":0.99934894,"speaker":"A"},{"text":"public","start":2644590,"end":2644870,"confidence":1,"speaker":"A"},{"text":"and","start":2644870,"end":2645230,"confidence":0.7548828,"speaker":"A"},{"text":"it","start":2646990,"end":2647310,"confidence":0.99902344,"speaker":"A"},{"text":"is","start":2647310,"end":2647550,"confidence":0.9995117,"speaker":"A"},{"text":"running","start":2647550,"end":2647870,"confidence":0.9987793,"speaker":"A"},{"text":"on","start":2647870,"end":2647990,"confidence":0.7963867,"speaker":"A"},{"text":"Ubuntu.","start":2647990,"end":2648590,"confidence":0.8631836,"speaker":"A"},{"text":"So","start":2648670,"end":2648910,"confidence":0.9980469,"speaker":"A"},{"text":"that's","start":2648910,"end":2649310,"confidence":0.99934894,"speaker":"A"},{"text":"really","start":2649310,"end":2649550,"confidence":1,"speaker":"A"},{"text":"great.","start":2649550,"end":2649870,"confidence":0.99902344,"speaker":"A"},{"text":"And","start":2652350,"end":2652750,"confidence":0.9838867,"speaker":"A"},{"text":"the","start":2652830,"end":2653110,"confidence":0.9995117,"speaker":"A"},{"text":"storage","start":2653110,"end":2653430,"confidence":1,"speaker":"A"},{"text":"on","start":2653430,"end":2653590,"confidence":0.9951172,"speaker":"A"},{"text":"CloudKit","start":2653590,"end":2654150,"confidence":0.94189453,"speaker":"A"},{"text":"is","start":2654150,"end":2654310,"confidence":0.99902344,"speaker":"A"},{"text":"dirt","start":2654310,"end":2654590,"confidence":0.8517253,"speaker":"A"},{"text":"cheap,","start":2654590,"end":2654990,"confidence":0.8378906,"speaker":"A"},{"text":"which","start":2655390,"end":2655670,"confidence":0.99902344,"speaker":"A"},{"text":"is","start":2655670,"end":2655830,"confidence":1,"speaker":"A"},{"text":"even","start":2655830,"end":2656070,"confidence":1,"speaker":"A"},{"text":"more","start":2656070,"end":2656310,"confidence":1,"speaker":"A"},{"text":"awesome.","start":2656310,"end":2656830,"confidence":0.99886066,"speaker":"A"},{"text":"Sorry,","start":2660030,"end":2660590,"confidence":0.99593097,"speaker":"A"},{"text":"let's","start":2660990,"end":2661350,"confidence":0.89501953,"speaker":"A"},{"text":"see","start":2661350,"end":2661550,"confidence":0.9848633,"speaker":"A"},{"text":"what","start":2661550,"end":2661750,"confidence":0.99609375,"speaker":"A"},{"text":"else.","start":2661750,"end":2662110,"confidence":0.99975586,"speaker":"A"},{"text":"I","start":2663630,"end":2663870,"confidence":0.9682617,"speaker":"A"},{"text":"just","start":2663870,"end":2663990,"confidence":0.9824219,"speaker":"A"},{"text":"want","start":2663990,"end":2664110,"confidence":0.75878906,"speaker":"A"},{"text":"to","start":2664110,"end":2664230,"confidence":0.7807617,"speaker":"A"},{"text":"make","start":2664230,"end":2664350,"confidence":0.9995117,"speaker":"A"},{"text":"sure","start":2664350,"end":2664430,"confidence":1,"speaker":"A"},{"text":"I","start":2664430,"end":2664550,"confidence":0.98779297,"speaker":"A"},{"text":"covered","start":2664550,"end":2664870,"confidence":0.99975586,"speaker":"A"},{"text":"all","start":2664870,"end":2665070,"confidence":0.99902344,"speaker":"A"},{"text":"my","start":2665070,"end":2665390,"confidence":0.9970703,"speaker":"A"},{"text":"slides.","start":2665630,"end":2666150,"confidence":0.99975586,"speaker":"A"},{"text":"The","start":2666150,"end":2666390,"confidence":0.9995117,"speaker":"A"},{"text":"last","start":2666390,"end":2666590,"confidence":1,"speaker":"A"},{"text":"thing","start":2666590,"end":2666790,"confidence":1,"speaker":"A"},{"text":"I'm","start":2666790,"end":2666990,"confidence":0.9980469,"speaker":"A"},{"text":"going","start":2666990,"end":2667070,"confidence":0.96777344,"speaker":"A"},{"text":"to","start":2667070,"end":2667150,"confidence":0.9995117,"speaker":"A"},{"text":"talk","start":2667150,"end":2667270,"confidence":1,"speaker":"A"},{"text":"about","start":2667270,"end":2667470,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":2667470,"end":2667670,"confidence":0.9941406,"speaker":"A"},{"text":"just","start":2667670,"end":2667830,"confidence":0.9941406,"speaker":"A"},{"text":"what","start":2667830,"end":2667990,"confidence":0.99853516,"speaker":"A"},{"text":"are","start":2667990,"end":2668150,"confidence":0.99902344,"speaker":"A"},{"text":"my","start":2668150,"end":2668310,"confidence":1,"speaker":"A"},{"text":"plans?","start":2668310,"end":2668670,"confidence":0.92578125,"speaker":"A"},{"text":"Excuse","start":2670390,"end":2670750,"confidence":0.9793294,"speaker":"A"},{"text":"me.","start":2670750,"end":2671030,"confidence":1,"speaker":"A"},{"text":"So","start":2671510,"end":2671790,"confidence":0.9980469,"speaker":"A"},{"text":"I","start":2671790,"end":2671910,"confidence":0.9995117,"speaker":"A"},{"text":"don't","start":2671910,"end":2672070,"confidence":0.99934894,"speaker":"A"},{"text":"know","start":2672070,"end":2672150,"confidence":1,"speaker":"A"},{"text":"if","start":2672150,"end":2672230,"confidence":1,"speaker":"A"},{"text":"you","start":2672230,"end":2672390,"confidence":0.9995117,"speaker":"A"},{"text":"check.","start":2672390,"end":2672790,"confidence":0.7727051,"speaker":"A"},{"text":"Follow","start":2672790,"end":2673150,"confidence":0.9663086,"speaker":"A"},{"text":"me.","start":2673150,"end":2673390,"confidence":1,"speaker":"A"},{"text":"But","start":2673390,"end":2673550,"confidence":0.99853516,"speaker":"A"},{"text":"I","start":2673550,"end":2673710,"confidence":0.9995117,"speaker":"A"},{"text":"just","start":2673710,"end":2673910,"confidence":0.99902344,"speaker":"A"},{"text":"released.","start":2673910,"end":2674550,"confidence":0.99975586,"speaker":"A"},{"text":"I","start":2681910,"end":2682190,"confidence":0.98876953,"speaker":"A"},{"text":"just","start":2682190,"end":2682350,"confidence":1,"speaker":"A"},{"text":"released","start":2682350,"end":2682710,"confidence":0.99975586,"speaker":"A"},{"text":"Alpha","start":2682710,"end":2683150,"confidence":0.85091144,"speaker":"A"},{"text":"5","start":2683150,"end":2683430,"confidence":0.99414,"speaker":"A"},{"text":"that","start":2684310,"end":2684630,"confidence":1,"speaker":"A"},{"text":"has","start":2684630,"end":2684909,"confidence":0.9995117,"speaker":"A"},{"text":"lookup","start":2684909,"end":2685390,"confidence":0.89086914,"speaker":"A"},{"text":"zones,","start":2685390,"end":2685750,"confidence":0.9760742,"speaker":"A"},{"text":"fetch,","start":2685750,"end":2686150,"confidence":0.9900716,"speaker":"A"},{"text":"record","start":2686150,"end":2686430,"confidence":0.9995117,"speaker":"A"},{"text":"changes","start":2686430,"end":2686870,"confidence":0.99975586,"speaker":"A"},{"text":"and","start":2686870,"end":2687030,"confidence":0.6220703,"speaker":"A"},{"text":"upload","start":2687030,"end":2687430,"confidence":0.71809894,"speaker":"A"},{"text":"assets.","start":2687430,"end":2687990,"confidence":1,"speaker":"A"},{"text":"Upload","start":2688310,"end":2688750,"confidence":0.9840495,"speaker":"A"},{"text":"the","start":2688750,"end":2688910,"confidence":0.7114258,"speaker":"A"},{"text":"assets","start":2688910,"end":2689270,"confidence":0.99902344,"speaker":"A"},{"text":"is","start":2689270,"end":2689470,"confidence":0.9814453,"speaker":"A"},{"text":"pretty","start":2689470,"end":2689710,"confidence":1,"speaker":"A"},{"text":"awesome.","start":2689710,"end":2690150,"confidence":1,"speaker":"A"},{"text":"When","start":2690230,"end":2690510,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":2690510,"end":2690670,"confidence":1,"speaker":"A"},{"text":"saw","start":2690670,"end":2690830,"confidence":1,"speaker":"A"},{"text":"that","start":2690830,"end":2691030,"confidence":0.9995117,"speaker":"A"},{"text":"work","start":2691030,"end":2691310,"confidence":0.99902344,"speaker":"A"},{"text":"because","start":2691310,"end":2691590,"confidence":1,"speaker":"A"},{"text":"I","start":2691590,"end":2691750,"confidence":0.9536133,"speaker":"A"},{"text":"was","start":2691750,"end":2691870,"confidence":0.9975586,"speaker":"A"},{"text":"like,","start":2691870,"end":2691990,"confidence":0.9980469,"speaker":"A"},{"text":"cool,","start":2691990,"end":2692190,"confidence":0.99853516,"speaker":"A"},{"text":"I","start":2692190,"end":2692310,"confidence":0.9951172,"speaker":"A"},{"text":"can","start":2692310,"end":2692470,"confidence":0.9970703,"speaker":"A"},{"text":"actually","start":2692470,"end":2692670,"confidence":0.9995117,"speaker":"A"},{"text":"upload","start":2692670,"end":2693030,"confidence":1,"speaker":"A"},{"text":"a","start":2693030,"end":2693150,"confidence":0.9951172,"speaker":"A"},{"text":"binary","start":2693150,"end":2693750,"confidence":0.99853516,"speaker":"A"},{"text":"to","start":2694630,"end":2694910,"confidence":0.96728516,"speaker":"A"},{"text":"CloudKit,","start":2694910,"end":2695510,"confidence":0.98046875,"speaker":"A"},{"text":"which","start":2695510,"end":2695710,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":2695710,"end":2695830,"confidence":0.9995117,"speaker":"A"},{"text":"awesome.","start":2695830,"end":2696230,"confidence":0.9998372,"speaker":"A"},{"text":"We","start":2697310,"end":2697430,"confidence":0.99121094,"speaker":"A"},{"text":"got","start":2697430,"end":2697630,"confidence":0.9946289,"speaker":"A"},{"text":"query","start":2697630,"end":2697990,"confidence":0.9836426,"speaker":"A"},{"text":"filters","start":2697990,"end":2698470,"confidence":0.9889323,"speaker":"A"},{"text":"to","start":2698470,"end":2698630,"confidence":0.99853516,"speaker":"A"},{"text":"work","start":2698630,"end":2698790,"confidence":1,"speaker":"A"},{"text":"for","start":2698790,"end":2698950,"confidence":0.9980469,"speaker":"A"},{"text":"in","start":2698950,"end":2699150,"confidence":0.88183594,"speaker":"A"},{"text":"and","start":2699150,"end":2699310,"confidence":0.9741211,"speaker":"A"},{"text":"not","start":2699310,"end":2699510,"confidence":0.98339844,"speaker":"A"},{"text":"in,","start":2699510,"end":2699870,"confidence":0.8652344,"speaker":"A"},{"text":"so","start":2699870,"end":2700110,"confidence":0.99853516,"speaker":"A"},{"text":"you","start":2700110,"end":2700190,"confidence":0.99853516,"speaker":"A"},{"text":"could","start":2700190,"end":2700350,"confidence":0.95410156,"speaker":"A"},{"text":"do","start":2700350,"end":2700550,"confidence":1,"speaker":"A"},{"text":"that","start":2700550,"end":2700830,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":2701470,"end":2701790,"confidence":0.99902344,"speaker":"A"},{"text":"have","start":2701790,"end":2702110,"confidence":0.9995117,"speaker":"A"},{"text":"plans","start":2702110,"end":2702630,"confidence":0.95043945,"speaker":"A"},{"text":"to","start":2702630,"end":2702750,"confidence":0.95166016,"speaker":"A"},{"text":"continue","start":2702750,"end":2702950,"confidence":0.9980469,"speaker":"A"},{"text":"working","start":2702950,"end":2703230,"confidence":0.9238281,"speaker":"A"},{"text":"on","start":2703230,"end":2703430,"confidence":0.99853516,"speaker":"A"},{"text":"this","start":2703430,"end":2703630,"confidence":0.99902344,"speaker":"A"},{"text":"because","start":2703630,"end":2703830,"confidence":0.9555664,"speaker":"A"},{"text":"I","start":2703830,"end":2703990,"confidence":0.9995117,"speaker":"A"},{"text":"think","start":2703990,"end":2704230,"confidence":0.99902344,"speaker":"A"},{"text":"there's","start":2704230,"end":2704710,"confidence":0.9991862,"speaker":"A"},{"text":"a","start":2704710,"end":2704830,"confidence":0.9995117,"speaker":"A"},{"text":"big","start":2704830,"end":2704990,"confidence":0.99902344,"speaker":"A"},{"text":"future","start":2704990,"end":2705270,"confidence":0.9970703,"speaker":"A"},{"text":"for","start":2705270,"end":2705510,"confidence":0.9995117,"speaker":"A"},{"text":"something","start":2705510,"end":2705750,"confidence":0.99560547,"speaker":"A"},{"text":"like","start":2705750,"end":2705990,"confidence":0.9995117,"speaker":"A"},{"text":"this","start":2705990,"end":2706190,"confidence":0.9995117,"speaker":"A"},{"text":"for","start":2706190,"end":2706390,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":2706390,"end":2706510,"confidence":0.9995117,"speaker":"A"},{"text":"lot","start":2706510,"end":2706590,"confidence":1,"speaker":"A"},{"text":"of","start":2706590,"end":2706710,"confidence":0.9995117,"speaker":"A"},{"text":"people.","start":2706710,"end":2706990,"confidence":0.9995117,"speaker":"A"},{"text":"Yes,","start":2709150,"end":2709590,"confidence":0.9716797,"speaker":"A"},{"text":"you","start":2709590,"end":2709830,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":2709830,"end":2709990,"confidence":0.93603516,"speaker":"A"},{"text":"technically","start":2709990,"end":2710350,"confidence":0.9992676,"speaker":"A"},{"text":"use","start":2710350,"end":2710590,"confidence":0.9995117,"speaker":"A"},{"text":"this","start":2710590,"end":2710790,"confidence":0.98095703,"speaker":"A"},{"text":"in","start":2710790,"end":2710950,"confidence":0.9633789,"speaker":"A"},{"text":"Android","start":2710950,"end":2711470,"confidence":0.99934894,"speaker":"A"},{"text":"or","start":2711470,"end":2711710,"confidence":0.9995117,"speaker":"A"},{"text":"Windows","start":2711710,"end":2712270,"confidence":0.9972331,"speaker":"A"},{"text":"because","start":2712670,"end":2713070,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2713230,"end":2713510,"confidence":0.9970703,"speaker":"A"},{"text":"Swift","start":2713510,"end":2713950,"confidence":0.998291,"speaker":"A"},{"text":"thing","start":2714270,"end":2714590,"confidence":0.99902344,"speaker":"A"},{"text":"does","start":2714590,"end":2714830,"confidence":0.9995117,"speaker":"A"},{"text":"compile","start":2714830,"end":2715190,"confidence":0.99487305,"speaker":"A"},{"text":"in","start":2715190,"end":2715350,"confidence":0.78271484,"speaker":"A"},{"text":"Android","start":2715350,"end":2715750,"confidence":0.99853516,"speaker":"A"},{"text":"and","start":2715750,"end":2715910,"confidence":0.72753906,"speaker":"A"},{"text":"Windows.","start":2715910,"end":2716230,"confidence":0.99934894,"speaker":"A"},{"text":"You","start":2716230,"end":2716350,"confidence":0.9970703,"speaker":"A"},{"text":"can","start":2716350,"end":2716430,"confidence":0.88623047,"speaker":"A"},{"text":"see","start":2716430,"end":2716550,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":2716550,"end":2716670,"confidence":0.63378906,"speaker":"A"},{"text":"already","start":2716670,"end":2716830,"confidence":0.99560547,"speaker":"A"},{"text":"added","start":2716830,"end":2717110,"confidence":0.9819336,"speaker":"A"},{"text":"support","start":2717110,"end":2717430,"confidence":1,"speaker":"A"},{"text":"for","start":2717430,"end":2717670,"confidence":1,"speaker":"A"},{"text":"that.","start":2717670,"end":2717950,"confidence":0.9995117,"speaker":"A"},{"text":"This","start":2718430,"end":2718710,"confidence":0.99609375,"speaker":"A"},{"text":"is","start":2718710,"end":2718870,"confidence":0.9975586,"speaker":"A"},{"text":"the","start":2718870,"end":2719030,"confidence":0.88720703,"speaker":"A"},{"text":"support","start":2719030,"end":2719270,"confidence":0.9970703,"speaker":"A"},{"text":"I","start":2719270,"end":2719510,"confidence":0.99658203,"speaker":"A"},{"text":"recently","start":2719510,"end":2719790,"confidence":1,"speaker":"A"},{"text":"had.","start":2719870,"end":2720270,"confidence":0.9995117,"speaker":"A"},{"text":"And","start":2720750,"end":2721030,"confidence":0.9814453,"speaker":"A"},{"text":"then","start":2721030,"end":2721310,"confidence":0.99121094,"speaker":"A"},{"text":"we're.","start":2722120,"end":2722360,"confidence":0.77229816,"speaker":"A"},{"text":"I'm","start":2722360,"end":2722600,"confidence":0.9868164,"speaker":"A"},{"text":"just","start":2722600,"end":2722720,"confidence":0.9995117,"speaker":"A"},{"text":"kind","start":2722720,"end":2722840,"confidence":0.9946289,"speaker":"A"},{"text":"of","start":2722840,"end":2722960,"confidence":0.9370117,"speaker":"A"},{"text":"like","start":2722960,"end":2723200,"confidence":0.99609375,"speaker":"A"},{"text":"going","start":2723200,"end":2723480,"confidence":0.99902344,"speaker":"A"},{"text":"through","start":2723480,"end":2723720,"confidence":1,"speaker":"A"},{"text":"each","start":2723720,"end":2723920,"confidence":0.9995117,"speaker":"A"},{"text":"of","start":2723920,"end":2724040,"confidence":0.9995117,"speaker":"A"},{"text":"these","start":2724040,"end":2724280,"confidence":0.99902344,"speaker":"A"},{"text":"because","start":2724280,"end":2724680,"confidence":0.7866211,"speaker":"A"},{"text":"as","start":2724680,"end":2725000,"confidence":1,"speaker":"A"},{"text":"great","start":2725000,"end":2725240,"confidence":0.9951172,"speaker":"A"},{"text":"as","start":2725240,"end":2725480,"confidence":0.9946289,"speaker":"A"},{"text":"AI","start":2725480,"end":2725880,"confidence":0.8781738,"speaker":"A"},{"text":"is,","start":2725880,"end":2726160,"confidence":0.9946289,"speaker":"A"},{"text":"it's","start":2726160,"end":2726440,"confidence":0.9995117,"speaker":"A"},{"text":"not","start":2726440,"end":2726600,"confidence":0.9995117,"speaker":"A"},{"text":"perfect.","start":2726600,"end":2727000,"confidence":0.9840495,"speaker":"A"},{"text":"So","start":2727080,"end":2727480,"confidence":0.99853516,"speaker":"A"},{"text":"we're","start":2728040,"end":2728360,"confidence":0.99934894,"speaker":"A"},{"text":"just","start":2728360,"end":2728440,"confidence":1,"speaker":"A"},{"text":"kind","start":2728440,"end":2728560,"confidence":0.99365234,"speaker":"A"},{"text":"of","start":2728560,"end":2728680,"confidence":0.98828125,"speaker":"A"},{"text":"going","start":2728680,"end":2728880,"confidence":0.99365234,"speaker":"A"},{"text":"through","start":2728880,"end":2729120,"confidence":1,"speaker":"A"},{"text":"these","start":2729120,"end":2729400,"confidence":0.98779297,"speaker":"A"},{"text":"piece","start":2729720,"end":2730120,"confidence":0.9848633,"speaker":"A"},{"text":"by","start":2730120,"end":2730360,"confidence":0.99902344,"speaker":"A"},{"text":"piece","start":2730360,"end":2730760,"confidence":0.9983724,"speaker":"A"},{"text":"with","start":2730840,"end":2731120,"confidence":0.9995117,"speaker":"A"},{"text":"each","start":2731120,"end":2731400,"confidence":0.9995117,"speaker":"A"},{"text":"version","start":2731640,"end":2732080,"confidence":0.99975586,"speaker":"A"},{"text":"and","start":2732080,"end":2732240,"confidence":0.5917969,"speaker":"A"},{"text":"hammering","start":2732240,"end":2732560,"confidence":0.9977214,"speaker":"A"},{"text":"these","start":2732560,"end":2732760,"confidence":0.99609375,"speaker":"A"},{"text":"away","start":2732760,"end":2733080,"confidence":0.9980469,"speaker":"A"},{"text":"and","start":2735400,"end":2735720,"confidence":0.9951172,"speaker":"A"},{"text":"then","start":2735720,"end":2736040,"confidence":0.9975586,"speaker":"A"},{"text":"this","start":2736680,"end":2736960,"confidence":0.9980469,"speaker":"A"},{"text":"is","start":2736960,"end":2737120,"confidence":0.99365234,"speaker":"A"},{"text":"actually","start":2737120,"end":2737360,"confidence":0.9995117,"speaker":"A"},{"text":"done.","start":2737360,"end":2737640,"confidence":0.9980469,"speaker":"A"},{"text":"I","start":2737640,"end":2737840,"confidence":0.9995117,"speaker":"A"},{"text":"don't","start":2737840,"end":2738000,"confidence":0.98844403,"speaker":"A"},{"text":"even","start":2738000,"end":2738159,"confidence":0.99902344,"speaker":"A"},{"text":"know","start":2738159,"end":2738279,"confidence":1,"speaker":"A"},{"text":"why","start":2738279,"end":2738400,"confidence":0.99902344,"speaker":"A"},{"text":"that's","start":2738400,"end":2738680,"confidence":0.9995117,"speaker":"A"},{"text":"there.","start":2738680,"end":2738880,"confidence":0.99853516,"speaker":"A"},{"text":"But","start":2738880,"end":2739240,"confidence":0.99658203,"speaker":"A"},{"text":"yeah,","start":2739640,"end":2740160,"confidence":0.99934894,"speaker":"A"},{"text":"I","start":2740160,"end":2740400,"confidence":0.83203125,"speaker":"A"},{"text":"think","start":2740400,"end":2740680,"confidence":0.92529297,"speaker":"A"},{"text":"system","start":2740680,"end":2741080,"confidence":0.9995117,"speaker":"A"},{"text":"field","start":2741080,"end":2741480,"confidence":0.9916992,"speaker":"A"},{"text":"integration","start":2741640,"end":2742280,"confidence":0.93859863,"speaker":"A"},{"text":"might","start":2742280,"end":2742480,"confidence":0.9980469,"speaker":"A"},{"text":"already","start":2742480,"end":2742720,"confidence":0.9995117,"speaker":"A"},{"text":"be","start":2742720,"end":2742960,"confidence":1,"speaker":"A"},{"text":"there","start":2742960,"end":2743240,"confidence":1,"speaker":"A"},{"text":"and","start":2743400,"end":2743680,"confidence":0.9980469,"speaker":"A"},{"text":"there's","start":2743680,"end":2743960,"confidence":0.99853516,"speaker":"A"},{"text":"a","start":2743960,"end":2744040,"confidence":0.9995117,"speaker":"A"},{"text":"few","start":2744040,"end":2744160,"confidence":0.9995117,"speaker":"A"},{"text":"other","start":2744160,"end":2744400,"confidence":1,"speaker":"A"},{"text":"things.","start":2744400,"end":2744760,"confidence":0.9995117,"speaker":"A"},{"text":"Eventually","start":2745960,"end":2746520,"confidence":0.9992676,"speaker":"A"},{"text":"I'd","start":2746520,"end":2746800,"confidence":0.92122394,"speaker":"A"},{"text":"like","start":2746800,"end":2746960,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":2746960,"end":2747160,"confidence":0.99902344,"speaker":"A"},{"text":"add","start":2747160,"end":2747480,"confidence":0.9975586,"speaker":"A"},{"text":"support.","start":2747880,"end":2748120,"confidence":0.9902344,"speaker":"A"},{"text":"So","start":2748200,"end":2748480,"confidence":0.99902344,"speaker":"A"},{"text":"there,","start":2748480,"end":2748720,"confidence":0.38134766,"speaker":"A"},{"text":"there's","start":2748720,"end":2749080,"confidence":0.9998372,"speaker":"A"},{"text":"a","start":2749080,"end":2749200,"confidence":0.9995117,"speaker":"A"},{"text":"whole","start":2749200,"end":2749440,"confidence":0.99975586,"speaker":"A"},{"text":"API","start":2749440,"end":2749880,"confidence":0.9975586,"speaker":"A"},{"text":"for","start":2749880,"end":2750120,"confidence":0.9975586,"speaker":"A"},{"text":"CloudKit","start":2750120,"end":2750760,"confidence":0.99609375,"speaker":"A"},{"text":"schema","start":2750760,"end":2751200,"confidence":0.8933919,"speaker":"A"},{"text":"management","start":2751200,"end":2751480,"confidence":0.99121094,"speaker":"A"},{"text":"that","start":2752600,"end":2752880,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":2752880,"end":2753000,"confidence":0.9658203,"speaker":"A"},{"text":"could.","start":2753000,"end":2753200,"confidence":0.8144531,"speaker":"A"},{"text":"That","start":2753200,"end":2753440,"confidence":0.99902344,"speaker":"A"},{"text":"would","start":2753440,"end":2753560,"confidence":0.9995117,"speaker":"A"},{"text":"be","start":2753560,"end":2753680,"confidence":0.9995117,"speaker":"A"},{"text":"awesome","start":2753680,"end":2754080,"confidence":0.9998372,"speaker":"A"},{"text":"if","start":2754080,"end":2754320,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":2754320,"end":2754440,"confidence":0.9995117,"speaker":"A"},{"text":"could","start":2754440,"end":2754640,"confidence":0.9863281,"speaker":"A"},{"text":"figure","start":2754640,"end":2754920,"confidence":1,"speaker":"A"},{"text":"out","start":2754920,"end":2755040,"confidence":0.9995117,"speaker":"A"},{"text":"how","start":2755040,"end":2755200,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":2755200,"end":2755320,"confidence":1,"speaker":"A"},{"text":"do","start":2755320,"end":2755440,"confidence":0.9995117,"speaker":"A"},{"text":"that.","start":2755440,"end":2755720,"confidence":0.9995117,"speaker":"A"},{"text":"If","start":2755720,"end":2756000,"confidence":0.9995117,"speaker":"A"},{"text":"I","start":2756000,"end":2756120,"confidence":0.9995117,"speaker":"A"},{"text":"could","start":2756120,"end":2756240,"confidence":0.84375,"speaker":"A"},{"text":"figure","start":2756240,"end":2756440,"confidence":1,"speaker":"A"},{"text":"out","start":2756440,"end":2756520,"confidence":0.9995117,"speaker":"A"},{"text":"how","start":2756520,"end":2756600,"confidence":0.99853516,"speaker":"A"},{"text":"to","start":2756600,"end":2756680,"confidence":0.9975586,"speaker":"A"},{"text":"do","start":2756680,"end":2756800,"confidence":0.9921875,"speaker":"A"},{"text":"key","start":2756800,"end":2756960,"confidence":0.9682617,"speaker":"A"},{"text":"path","start":2756960,"end":2757280,"confidence":0.953125,"speaker":"A"},{"text":"query","start":2757280,"end":2757600,"confidence":0.9951172,"speaker":"A"},{"text":"filtering,","start":2757600,"end":2758120,"confidence":0.99934894,"speaker":"A"},{"text":"that","start":2758120,"end":2758320,"confidence":0.99902344,"speaker":"A"},{"text":"would","start":2758320,"end":2758480,"confidence":0.9995117,"speaker":"A"},{"text":"be","start":2758480,"end":2758640,"confidence":0.9995117,"speaker":"A"},{"text":"fantastic.","start":2758640,"end":2759400,"confidence":0.99890137,"speaker":"A"},{"text":"And","start":2761720,"end":2762120,"confidence":0.9951172,"speaker":"A"},{"text":"yeah,","start":2762280,"end":2762760,"confidence":0.9998372,"speaker":"A"},{"text":"but","start":2762760,"end":2762960,"confidence":0.9995117,"speaker":"A"},{"text":"there's","start":2762960,"end":2763200,"confidence":0.87320966,"speaker":"A"},{"text":"a.","start":2763200,"end":2763400,"confidence":0.92626953,"speaker":"A"},{"text":"I","start":2763400,"end":2763560,"confidence":0.9980469,"speaker":"A"},{"text":"mean","start":2763560,"end":2763799,"confidence":0.79785156,"speaker":"A"},{"text":"the","start":2763799,"end":2764120,"confidence":0.9995117,"speaker":"A"},{"text":"basics","start":2764120,"end":2764520,"confidence":0.998291,"speaker":"A"},{"text":"is","start":2764520,"end":2764760,"confidence":0.9941406,"speaker":"A"},{"text":"there","start":2764760,"end":2765040,"confidence":0.9995117,"speaker":"A"},{"text":"as","start":2765040,"end":2765280,"confidence":0.9995117,"speaker":"A"},{"text":"far","start":2765280,"end":2765440,"confidence":1,"speaker":"A"},{"text":"as","start":2765440,"end":2765640,"confidence":0.9995117,"speaker":"A"},{"text":"if","start":2765640,"end":2765840,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":2765840,"end":2765960,"confidence":0.99902344,"speaker":"A"},{"text":"want","start":2765960,"end":2766080,"confidence":0.77685547,"speaker":"A"},{"text":"to","start":2766080,"end":2766240,"confidence":0.9946289,"speaker":"A"},{"text":"do","start":2766240,"end":2766400,"confidence":1,"speaker":"A"},{"text":"anything","start":2766400,"end":2766760,"confidence":0.99975586,"speaker":"A"},{"text":"with","start":2766760,"end":2766960,"confidence":1,"speaker":"A"},{"text":"a","start":2766960,"end":2767120,"confidence":0.99560547,"speaker":"A"},{"text":"record,","start":2767120,"end":2767400,"confidence":0.99902344,"speaker":"A"},{"text":"it's","start":2768040,"end":2768400,"confidence":0.9983724,"speaker":"A"},{"text":"pretty","start":2768400,"end":2768600,"confidence":0.9998372,"speaker":"A"},{"text":"much","start":2768600,"end":2768760,"confidence":0.99853516,"speaker":"A"},{"text":"there.","start":2768760,"end":2769080,"confidence":0.98583984,"speaker":"A"},{"text":"One","start":2769720,"end":2770000,"confidence":0.9848633,"speaker":"A"},{"text":"thing","start":2770000,"end":2770160,"confidence":0.99853516,"speaker":"A"},{"text":"with","start":2770160,"end":2770320,"confidence":0.9995117,"speaker":"A"},{"text":"Celestra","start":2770320,"end":2770880,"confidence":0.7967122,"speaker":"A"},{"text":"is","start":2770880,"end":2771040,"confidence":0.8798828,"speaker":"A"},{"text":"I'd","start":2771040,"end":2771240,"confidence":0.9977214,"speaker":"A"},{"text":"love","start":2771240,"end":2771400,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":2771400,"end":2771560,"confidence":0.9995117,"speaker":"A"},{"text":"be","start":2771560,"end":2771720,"confidence":0.99902344,"speaker":"A"},{"text":"able","start":2771720,"end":2771920,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":2771920,"end":2772080,"confidence":1,"speaker":"A"},{"text":"do","start":2772080,"end":2772280,"confidence":1,"speaker":"A"},{"text":"like","start":2772280,"end":2772560,"confidence":0.99902344,"speaker":"A"},{"text":"test","start":2772560,"end":2772880,"confidence":0.99853516,"speaker":"A"},{"text":"out","start":2772880,"end":2773160,"confidence":0.9970703,"speaker":"A"},{"text":"subscriptions","start":2773160,"end":2773880,"confidence":0.9428711,"speaker":"A"},{"text":"and","start":2774200,"end":2774320,"confidence":0.94921875,"speaker":"A"},{"text":"see","start":2774320,"end":2774480,"confidence":0.9995117,"speaker":"A"},{"text":"how","start":2774480,"end":2774640,"confidence":1,"speaker":"A"},{"text":"that","start":2774640,"end":2774800,"confidence":1,"speaker":"A"},{"text":"works.","start":2774800,"end":2775240,"confidence":1,"speaker":"A"},{"text":"So","start":2775880,"end":2776280,"confidence":0.99609375,"speaker":"A"},{"text":"yeah,","start":2777320,"end":2777840,"confidence":0.9996745,"speaker":"A"},{"text":"that's","start":2777840,"end":2778200,"confidence":1,"speaker":"A"},{"text":"really","start":2778200,"end":2778360,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2778360,"end":2778560,"confidence":1,"speaker":"A"},{"text":"bulk","start":2778560,"end":2778800,"confidence":0.9817708,"speaker":"A"},{"text":"of","start":2778800,"end":2778960,"confidence":0.9995117,"speaker":"A"},{"text":"my","start":2778960,"end":2779120,"confidence":0.9995117,"speaker":"A"},{"text":"presentation","start":2779120,"end":2779720,"confidence":0.9995117,"speaker":"A"},{"text":"today.","start":2779720,"end":2780040,"confidence":0.99902344,"speaker":"A"},{"text":"Now","start":2781800,"end":2782160,"confidence":0.95751953,"speaker":"A"},{"text":"is.","start":2782160,"end":2782480,"confidence":0.8334961,"speaker":"A"},{"text":"Now","start":2782480,"end":2782720,"confidence":0.99902344,"speaker":"A"},{"text":"it's","start":2782720,"end":2782920,"confidence":0.99869794,"speaker":"A"},{"text":"time","start":2782920,"end":2783040,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":2783040,"end":2783160,"confidence":0.9995117,"speaker":"A"},{"text":"ask","start":2783160,"end":2783280,"confidence":0.99902344,"speaker":"A"},{"text":"me","start":2783280,"end":2783440,"confidence":0.99658203,"speaker":"A"},{"text":"a","start":2783440,"end":2783560,"confidence":0.99902344,"speaker":"A"},{"text":"ton","start":2783560,"end":2783720,"confidence":0.9992676,"speaker":"A"},{"text":"of","start":2783720,"end":2783840,"confidence":0.9995117,"speaker":"A"},{"text":"questions","start":2783840,"end":2784200,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":2784200,"end":2784480,"confidence":0.9814453,"speaker":"A"},{"text":"make","start":2784480,"end":2784720,"confidence":0.9995117,"speaker":"A"},{"text":"me","start":2784720,"end":2784880,"confidence":0.9995117,"speaker":"A"},{"text":"feel","start":2784880,"end":2785040,"confidence":1,"speaker":"A"},{"text":"dumb.","start":2785040,"end":2785480,"confidence":0.98706055,"speaker":"A"},{"text":"Go","start":2785880,"end":2786160,"confidence":0.99121094,"speaker":"A"},{"text":"for","start":2786160,"end":2786320,"confidence":0.9995117,"speaker":"A"},{"text":"it.","start":2786320,"end":2786600,"confidence":0.99853516,"speaker":"A"},{"text":"No,","start":2788440,"end":2788840,"confidence":0.95751953,"speaker":"B"},{"text":"there's","start":2789880,"end":2790319,"confidence":0.9355469,"speaker":"B"},{"text":"a","start":2790319,"end":2790440,"confidence":0.9995117,"speaker":"B"},{"text":"lot","start":2790440,"end":2790600,"confidence":0.9995117,"speaker":"B"},{"text":"there","start":2790600,"end":2790840,"confidence":0.99902344,"speaker":"B"},{"text":"to.","start":2790840,"end":2791160,"confidence":0.98828125,"speaker":"B"},{"text":"To","start":2791400,"end":2791720,"confidence":0.99902344,"speaker":"B"},{"text":"absorb.","start":2791720,"end":2792160,"confidence":0.99938965,"speaker":"B"},{"text":"But","start":2792160,"end":2792320,"confidence":0.9995117,"speaker":"B"},{"text":"I,","start":2792320,"end":2792600,"confidence":0.99121094,"speaker":"B"},{"text":"I","start":2792760,"end":2793120,"confidence":0.99658203,"speaker":"B"},{"text":"like","start":2793120,"end":2793400,"confidence":0.99902344,"speaker":"B"},{"text":"the","start":2793400,"end":2793640,"confidence":0.9995117,"speaker":"B"},{"text":"concept","start":2793640,"end":2794200,"confidence":0.976888,"speaker":"B"},{"text":"and","start":2794440,"end":2794720,"confidence":0.99560547,"speaker":"B"},{"text":"I","start":2794720,"end":2794840,"confidence":0.9995117,"speaker":"B"},{"text":"know","start":2794840,"end":2794960,"confidence":1,"speaker":"B"},{"text":"you've","start":2794960,"end":2795280,"confidence":0.99820966,"speaker":"B"},{"text":"been","start":2795280,"end":2795440,"confidence":0.9995117,"speaker":"B"},{"text":"working","start":2795440,"end":2795640,"confidence":0.9995117,"speaker":"B"},{"text":"on","start":2795640,"end":2795840,"confidence":0.9995117,"speaker":"B"},{"text":"this","start":2795840,"end":2796000,"confidence":0.9995117,"speaker":"B"},{"text":"for","start":2796000,"end":2796120,"confidence":0.9995117,"speaker":"B"},{"text":"a","start":2796120,"end":2796240,"confidence":0.99560547,"speaker":"B"},{"text":"while","start":2796240,"end":2796400,"confidence":1,"speaker":"B"},{"text":"and","start":2796400,"end":2796560,"confidence":0.9458008,"speaker":"B"},{"text":"I","start":2796560,"end":2796680,"confidence":0.9975586,"speaker":"B"},{"text":"always","start":2796680,"end":2796840,"confidence":0.99316406,"speaker":"B"},{"text":"thought","start":2796840,"end":2797040,"confidence":0.99853516,"speaker":"B"},{"text":"it","start":2797040,"end":2797160,"confidence":0.9970703,"speaker":"B"},{"text":"was","start":2797160,"end":2797280,"confidence":0.9951172,"speaker":"B"},{"text":"a","start":2797280,"end":2797440,"confidence":0.9663086,"speaker":"B"},{"text":"pretty","start":2797440,"end":2797640,"confidence":0.99869794,"speaker":"B"},{"text":"cool,","start":2797640,"end":2797960,"confidence":0.9980469,"speaker":"B"},{"text":"pretty","start":2799240,"end":2799560,"confidence":0.9943034,"speaker":"B"},{"text":"cool","start":2799560,"end":2799720,"confidence":0.88549805,"speaker":"B"},{"text":"idea","start":2800030,"end":2800350,"confidence":0.72094727,"speaker":"B"},{"text":"and","start":2800590,"end":2800910,"confidence":0.89404297,"speaker":"B"},{"text":"implementation","start":2800910,"end":2801630,"confidence":0.9941406,"speaker":"B"},{"text":"of","start":2801630,"end":2801910,"confidence":0.9770508,"speaker":"B"},{"text":"this.","start":2801910,"end":2802190,"confidence":0.9897461,"speaker":"B"},{"text":"Questions?","start":2802750,"end":2803470,"confidence":0.9904785,"speaker":"A"},{"text":"So","start":2808990,"end":2809270,"confidence":0.95214844,"speaker":"C"},{"text":"with","start":2809270,"end":2809470,"confidence":0.9628906,"speaker":"C"},{"text":"something","start":2809470,"end":2809710,"confidence":0.9995117,"speaker":"C"},{"text":"like.","start":2809710,"end":2810030,"confidence":0.99853516,"speaker":"C"},{"text":"Accessing","start":2814110,"end":2814750,"confidence":0.78027344,"speaker":"C"},{"text":"CloudKit","start":2814830,"end":2815430,"confidence":0.94202,"speaker":"C"},{"text":"through","start":2815430,"end":2815550,"confidence":0.9946289,"speaker":"C"},{"text":"the","start":2815550,"end":2815709,"confidence":0.99902344,"speaker":"C"},{"text":"web,","start":2815709,"end":2816109,"confidence":0.9916992,"speaker":"C"},{"text":"is","start":2816430,"end":2816830,"confidence":0.9995117,"speaker":"C"},{"text":"this","start":2817150,"end":2817510,"confidence":0.99853516,"speaker":"C"},{"text":"setup","start":2817510,"end":2817910,"confidence":0.95092773,"speaker":"C"},{"text":"more","start":2817910,"end":2818110,"confidence":0.9995117,"speaker":"C"},{"text":"ideal","start":2818110,"end":2818590,"confidence":0.9970703,"speaker":"C"},{"text":"for","start":2818670,"end":2819070,"confidence":0.9995117,"speaker":"C"},{"text":"having","start":2820270,"end":2820630,"confidence":0.9995117,"speaker":"C"},{"text":"your","start":2820630,"end":2820990,"confidence":1,"speaker":"C"},{"text":"server","start":2820990,"end":2821630,"confidence":1,"speaker":"C"},{"text":"do","start":2821870,"end":2822270,"confidence":0.9995117,"speaker":"C"},{"text":"the","start":2822670,"end":2822990,"confidence":0.9980469,"speaker":"C"},{"text":"authentication","start":2822990,"end":2823710,"confidence":1,"speaker":"C"},{"text":"to","start":2823950,"end":2824230,"confidence":0.9970703,"speaker":"C"},{"text":"CloudKit","start":2824230,"end":2824790,"confidence":0.9939,"speaker":"C"},{"text":"with","start":2824790,"end":2824950,"confidence":0.99560547,"speaker":"C"},{"text":"Miskit","start":2824950,"end":2825550,"confidence":0.9923096,"speaker":"C"},{"text":"or","start":2825970,"end":2826210,"confidence":0.9921875,"speaker":"C"},{"text":"is","start":2826290,"end":2826650,"confidence":0.9980469,"speaker":"C"},{"text":"miskit","start":2826650,"end":2827250,"confidence":0.93859863,"speaker":"C"},{"text":"something","start":2827250,"end":2827490,"confidence":0.99853516,"speaker":"C"},{"text":"that","start":2827490,"end":2827650,"confidence":0.99658203,"speaker":"C"},{"text":"you","start":2827650,"end":2827770,"confidence":0.9995117,"speaker":"C"},{"text":"could","start":2827770,"end":2827970,"confidence":0.9970703,"speaker":"C"},{"text":"put","start":2827970,"end":2828210,"confidence":0.9995117,"speaker":"C"},{"text":"into","start":2828210,"end":2828530,"confidence":0.99902344,"speaker":"C"},{"text":"even","start":2828530,"end":2828850,"confidence":0.99560547,"speaker":"C"},{"text":"like","start":2828850,"end":2829050,"confidence":0.9765625,"speaker":"C"},{"text":"a","start":2829050,"end":2829330,"confidence":0.5620117,"speaker":"C"},{"text":"client","start":2829330,"end":2829890,"confidence":0.9987793,"speaker":"C"},{"text":"side,","start":2830130,"end":2830530,"confidence":0.52978516,"speaker":"C"},{"text":"you","start":2832850,"end":2833170,"confidence":0.95751953,"speaker":"C"},{"text":"know,","start":2833170,"end":2833370,"confidence":0.9995117,"speaker":"C"},{"text":"like","start":2833370,"end":2833650,"confidence":0.98583984,"speaker":"C"},{"text":"non","start":2834690,"end":2835090,"confidence":0.99658203,"speaker":"C"},{"text":"Swift","start":2835810,"end":2836290,"confidence":0.99780273,"speaker":"C"},{"text":"application","start":2836290,"end":2836770,"confidence":0.9995117,"speaker":"C"},{"text":"or","start":2836770,"end":2837010,"confidence":0.9140625,"speaker":"C"},{"text":"I","start":2837010,"end":2837210,"confidence":0.6401367,"speaker":"C"},{"text":"guess","start":2837210,"end":2837490,"confidence":0.99975586,"speaker":"C"},{"text":"not","start":2837490,"end":2837730,"confidence":0.9628906,"speaker":"C"},{"text":"non","start":2837730,"end":2837930,"confidence":0.8105469,"speaker":"C"},{"text":"Swift","start":2837930,"end":2838250,"confidence":0.9489746,"speaker":"C"},{"text":"but","start":2838250,"end":2838410,"confidence":0.98876953,"speaker":"C"},{"text":"like","start":2838410,"end":2838610,"confidence":0.98583984,"speaker":"C"},{"text":"non","start":2838610,"end":2838930,"confidence":0.9560547,"speaker":"C"},{"text":"like","start":2839090,"end":2839410,"confidence":0.79785156,"speaker":"C"},{"text":"app","start":2839410,"end":2839690,"confidence":0.99609375,"speaker":"C"},{"text":"application.","start":2839690,"end":2840170,"confidence":0.99853516,"speaker":"C"},{"text":"I'm","start":2840170,"end":2840410,"confidence":0.99397784,"speaker":"C"},{"text":"thinking","start":2840410,"end":2840730,"confidence":0.8215332,"speaker":"C"},{"text":"in","start":2840730,"end":2840970,"confidence":0.6489258,"speaker":"C"},{"text":"the","start":2840970,"end":2841130,"confidence":0.9946289,"speaker":"C"},{"text":"context","start":2841130,"end":2841450,"confidence":0.98502606,"speaker":"C"},{"text":"of","start":2841450,"end":2841570,"confidence":0.99902344,"speaker":"C"},{"text":"like","start":2841570,"end":2841730,"confidence":0.98876953,"speaker":"C"},{"text":"a.","start":2841730,"end":2842049,"confidence":0.71728516,"speaker":"A"},{"text":"I","start":2845730,"end":2845970,"confidence":0.99658203,"speaker":"C"},{"text":"guess","start":2845970,"end":2846170,"confidence":1,"speaker":"C"},{"text":"if","start":2846170,"end":2846290,"confidence":0.9970703,"speaker":"C"},{"text":"I","start":2846290,"end":2846410,"confidence":0.9995117,"speaker":"C"},{"text":"wanted","start":2846410,"end":2846730,"confidence":0.9848633,"speaker":"C"},{"text":"to","start":2846730,"end":2846930,"confidence":1,"speaker":"C"},{"text":"create","start":2846930,"end":2847250,"confidence":0.9995117,"speaker":"C"},{"text":"a","start":2847330,"end":2847730,"confidence":0.87939453,"speaker":"C"},{"text":"something","start":2849970,"end":2850290,"confidence":0.9970703,"speaker":"C"},{"text":"accessing","start":2850290,"end":2850810,"confidence":0.96655273,"speaker":"C"},{"text":"CloudKit","start":2850810,"end":2851330,"confidence":0.99853516,"speaker":"C"},{"text":"that","start":2851330,"end":2851490,"confidence":0.9995117,"speaker":"C"},{"text":"is","start":2851490,"end":2851610,"confidence":0.99902344,"speaker":"C"},{"text":"not","start":2851610,"end":2851810,"confidence":0.9995117,"speaker":"C"},{"text":"your","start":2851810,"end":2852010,"confidence":0.9995117,"speaker":"C"},{"text":"typical","start":2852010,"end":2852370,"confidence":1,"speaker":"C"},{"text":"Mac","start":2852370,"end":2852610,"confidence":0.99780273,"speaker":"C"},{"text":"or","start":2852610,"end":2852730,"confidence":0.9863281,"speaker":"C"},{"text":"iOS","start":2852730,"end":2853090,"confidence":0.9980469,"speaker":"C"},{"text":"app.","start":2853090,"end":2853410,"confidence":0.99853516,"speaker":"C"},{"text":"Can","start":2854880,"end":2855000,"confidence":0.9609375,"speaker":"A"},{"text":"you","start":2855000,"end":2855160,"confidence":0.8486328,"speaker":"A"},{"text":"be","start":2855160,"end":2855400,"confidence":0.9951172,"speaker":"A"},{"text":"more","start":2855400,"end":2855680,"confidence":1,"speaker":"A"},{"text":"specific?","start":2855680,"end":2856160,"confidence":0.99975586,"speaker":"A"},{"text":"I'm","start":2857840,"end":2858200,"confidence":0.99104816,"speaker":"C"},{"text":"looking","start":2858200,"end":2858480,"confidence":0.99902344,"speaker":"C"},{"text":"into","start":2858720,"end":2859120,"confidence":0.99560547,"speaker":"C"},{"text":"one.","start":2859280,"end":2859640,"confidence":0.45483398,"speaker":"C"},{"text":"One","start":2859640,"end":2859880,"confidence":1,"speaker":"C"},{"text":"approach","start":2859880,"end":2860120,"confidence":1,"speaker":"C"},{"text":"would","start":2860120,"end":2860400,"confidence":0.99560547,"speaker":"C"},{"text":"be","start":2860400,"end":2860720,"confidence":0.99853516,"speaker":"C"},{"text":"browser","start":2861600,"end":2862040,"confidence":0.9998372,"speaker":"C"},{"text":"extensions.","start":2862040,"end":2862560,"confidence":0.99869794,"speaker":"C"},{"text":"So","start":2865040,"end":2865440,"confidence":0.67871094,"speaker":"A"},{"text":"for","start":2865680,"end":2866000,"confidence":0.9926758,"speaker":"A"},{"text":"like","start":2866000,"end":2866200,"confidence":0.9321289,"speaker":"A"},{"text":"a","start":2866200,"end":2866320,"confidence":0.99121094,"speaker":"A"},{"text":"non","start":2866320,"end":2866520,"confidence":0.99560547,"speaker":"A"},{"text":"Safari","start":2866520,"end":2867080,"confidence":0.9980469,"speaker":"A"},{"text":"browser.","start":2867080,"end":2867680,"confidence":0.99609375,"speaker":"A"},{"text":"Yes.","start":2867760,"end":2868240,"confidence":0.99121094,"speaker":"C"},{"text":"Yeah,","start":2870400,"end":2870720,"confidence":0.9814453,"speaker":"A"},{"text":"this","start":2870720,"end":2870840,"confidence":0.9975586,"speaker":"A"},{"text":"would","start":2870840,"end":2871000,"confidence":0.9975586,"speaker":"A"},{"text":"be","start":2871000,"end":2871160,"confidence":0.9995117,"speaker":"A"},{"text":"great.","start":2871160,"end":2871400,"confidence":1,"speaker":"A"},{"text":"So","start":2871400,"end":2871600,"confidence":0.96240234,"speaker":"A"},{"text":"basically","start":2871600,"end":2872000,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":2873040,"end":2873320,"confidence":0.9995117,"speaker":"A"},{"text":"way","start":2873320,"end":2873560,"confidence":0.9995117,"speaker":"A"},{"text":"you'd","start":2873560,"end":2873960,"confidence":0.98860675,"speaker":"A"},{"text":"want","start":2873960,"end":2874120,"confidence":1,"speaker":"A"},{"text":"that","start":2874120,"end":2874320,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":2874320,"end":2874560,"confidence":0.99853516,"speaker":"A"},{"text":"work,","start":2874560,"end":2874880,"confidence":0.99902344,"speaker":"A"},{"text":"like","start":2875040,"end":2875400,"confidence":0.73095703,"speaker":"A"},{"text":"the","start":2875400,"end":2875640,"confidence":0.9980469,"speaker":"A"},{"text":"sticky","start":2875640,"end":2876040,"confidence":0.9973958,"speaker":"A"},{"text":"part","start":2876040,"end":2876200,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":2876200,"end":2876360,"confidence":0.9980469,"speaker":"A"},{"text":"me","start":2876360,"end":2876560,"confidence":0.9995117,"speaker":"A"},{"text":"would","start":2876560,"end":2876760,"confidence":0.9980469,"speaker":"A"},{"text":"be","start":2876760,"end":2876920,"confidence":0.9995117,"speaker":"A"},{"text":"getting","start":2876920,"end":2877120,"confidence":0.9980469,"speaker":"A"},{"text":"the","start":2877120,"end":2877320,"confidence":0.99902344,"speaker":"A"},{"text":"web","start":2877320,"end":2877560,"confidence":0.998291,"speaker":"A"},{"text":"authentication","start":2877560,"end":2878240,"confidence":0.92614746,"speaker":"A"},{"text":"token.","start":2878240,"end":2878640,"confidence":0.99934894,"speaker":"A"},{"text":"Other","start":2878640,"end":2878880,"confidence":0.99316406,"speaker":"A"},{"text":"than","start":2878880,"end":2879080,"confidence":0.99560547,"speaker":"A"},{"text":"that,","start":2879080,"end":2879360,"confidence":0.97509766,"speaker":"A"},{"text":"like","start":2879440,"end":2879840,"confidence":0.7050781,"speaker":"A"},{"text":"have","start":2880370,"end":2880530,"confidence":0.9765625,"speaker":"A"},{"text":"at","start":2880530,"end":2880770,"confidence":0.515625,"speaker":"A"},{"text":"it.","start":2880770,"end":2881090,"confidence":0.9980469,"speaker":"A"},{"text":"So","start":2884610,"end":2884890,"confidence":0.97802734,"speaker":"A"},{"text":"I'm","start":2884890,"end":2885050,"confidence":0.98339844,"speaker":"A"},{"text":"gonna,","start":2885050,"end":2885250,"confidence":0.8352051,"speaker":"A"},{"text":"I'm","start":2885250,"end":2885410,"confidence":0.9949544,"speaker":"A"},{"text":"gonna","start":2885410,"end":2885570,"confidence":0.9736328,"speaker":"A"},{"text":"be","start":2885570,"end":2885690,"confidence":0.99853516,"speaker":"A"},{"text":"devil's","start":2885690,"end":2886050,"confidence":0.9608154,"speaker":"A"},{"text":"advocate.","start":2886050,"end":2886610,"confidence":0.9995117,"speaker":"A"},{"text":"Why","start":2886690,"end":2887010,"confidence":0.99609375,"speaker":"A"},{"text":"not","start":2887010,"end":2887290,"confidence":1,"speaker":"A"},{"text":"just","start":2887290,"end":2887570,"confidence":0.9995117,"speaker":"A"},{"text":"use","start":2887570,"end":2887810,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2887810,"end":2888090,"confidence":0.9995117,"speaker":"A"},{"text":"CloudKit","start":2888090,"end":2888770,"confidence":0.87769,"speaker":"A"},{"text":"JavaScript","start":2888850,"end":2889730,"confidence":0.99454755,"speaker":"A"},{"text":"library.","start":2889730,"end":2890210,"confidence":0.8435872,"speaker":"A"},{"text":"If","start":2890210,"end":2890450,"confidence":0.5620117,"speaker":"C"},{"text":"it's","start":2890450,"end":2890690,"confidence":0.9998372,"speaker":"C"},{"text":"an","start":2890690,"end":2890890,"confidence":0.8232422,"speaker":"C"},{"text":"extension,","start":2890890,"end":2891490,"confidence":0.9998372,"speaker":"C"},{"text":"my","start":2892450,"end":2892770,"confidence":0.99853516,"speaker":"C"},{"text":"brain","start":2892770,"end":2893090,"confidence":1,"speaker":"C"},{"text":"jumps","start":2893090,"end":2893450,"confidence":0.9998372,"speaker":"C"},{"text":"to","start":2893450,"end":2893610,"confidence":0.9995117,"speaker":"C"},{"text":"Swift","start":2893610,"end":2893970,"confidence":0.9914551,"speaker":"C"},{"text":"first.","start":2893970,"end":2894290,"confidence":0.9975586,"speaker":"C"},{"text":"Right.","start":2895730,"end":2896129,"confidence":0.97021484,"speaker":"A"},{"text":"But","start":2896129,"end":2896410,"confidence":0.9995117,"speaker":"A"},{"text":"it's","start":2896410,"end":2896730,"confidence":0.96875,"speaker":"A"},{"text":"the","start":2896730,"end":2896970,"confidence":1,"speaker":"A"},{"text":"reason","start":2896970,"end":2897130,"confidence":0.99902344,"speaker":"A"},{"text":"I'm","start":2897130,"end":2897330,"confidence":0.9954427,"speaker":"A"},{"text":"asking","start":2897330,"end":2897610,"confidence":0.97094727,"speaker":"A"},{"text":"that","start":2897610,"end":2897810,"confidence":0.9765625,"speaker":"A"},{"text":"is","start":2897810,"end":2898090,"confidence":0.9980469,"speaker":"A"},{"text":"like","start":2898090,"end":2898370,"confidence":0.9921875,"speaker":"A"},{"text":"it's","start":2898370,"end":2898690,"confidence":0.9900716,"speaker":"A"},{"text":"a,","start":2898690,"end":2898930,"confidence":0.98291016,"speaker":"A"},{"text":"it's","start":2899410,"end":2899770,"confidence":0.9996745,"speaker":"A"},{"text":"already","start":2899770,"end":2899970,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":2899970,"end":2900130,"confidence":0.9995117,"speaker":"A"},{"text":"web","start":2900130,"end":2900410,"confidence":0.98535156,"speaker":"A"},{"text":"extension.","start":2900410,"end":2900890,"confidence":0.9998372,"speaker":"A"},{"text":"I","start":2900890,"end":2901010,"confidence":0.98535156,"speaker":"A"},{"text":"would","start":2901010,"end":2901130,"confidence":0.98095703,"speaker":"A"},{"text":"assume","start":2901130,"end":2901410,"confidence":0.8614909,"speaker":"A"},{"text":"that","start":2901410,"end":2901570,"confidence":0.5854492,"speaker":"A"},{"text":"is","start":2901570,"end":2901690,"confidence":0.80126953,"speaker":"A"},{"text":"true.","start":2901690,"end":2902050,"confidence":0.9968262,"speaker":"A"},{"text":"That","start":2902690,"end":2903090,"confidence":0.9941406,"speaker":"A"},{"text":"it's","start":2903090,"end":2903490,"confidence":0.98876953,"speaker":"A"},{"text":"90","start":2903490,"end":2903810,"confidence":0.99951,"speaker":"A"},{"text":"web","start":2904290,"end":2904650,"confidence":0.9995117,"speaker":"A"},{"text":"based","start":2904650,"end":2904930,"confidence":0.99902344,"speaker":"A"},{"text":"or","start":2905090,"end":2905410,"confidence":0.99853516,"speaker":"A"},{"text":"JavaScript","start":2905410,"end":2906010,"confidence":0.998291,"speaker":"A"},{"text":"based.","start":2906010,"end":2906290,"confidence":0.99902344,"speaker":"A"},{"text":"So","start":2907120,"end":2907200,"confidence":0.9707031,"speaker":"A"},{"text":"that's","start":2907200,"end":2907360,"confidence":0.99934894,"speaker":"A"},{"text":"where","start":2907360,"end":2907480,"confidence":0.9506836,"speaker":"A"},{"text":"I'm","start":2907480,"end":2907680,"confidence":0.99886066,"speaker":"A"},{"text":"just","start":2907680,"end":2907800,"confidence":0.99560547,"speaker":"A"},{"text":"like,","start":2907800,"end":2908000,"confidence":0.99121094,"speaker":"A"},{"text":"well,","start":2908000,"end":2908320,"confidence":0.9951172,"speaker":"A"},{"text":"you","start":2908320,"end":2908600,"confidence":0.99902344,"speaker":"A"},{"text":"may","start":2908600,"end":2908760,"confidence":0.9995117,"speaker":"A"},{"text":"as","start":2908760,"end":2908920,"confidence":0.9995117,"speaker":"A"},{"text":"well.","start":2908920,"end":2909200,"confidence":0.9995117,"speaker":"A"},{"text":"Like,","start":2909200,"end":2909600,"confidence":0.5307617,"speaker":"A"},{"text":"I","start":2909840,"end":2910120,"confidence":0.77685547,"speaker":"A"},{"text":"would","start":2910120,"end":2910280,"confidence":0.99609375,"speaker":"A"},{"text":"love.","start":2910280,"end":2910560,"confidence":0.99853516,"speaker":"A"},{"text":"I","start":2910640,"end":2910880,"confidence":0.97021484,"speaker":"A"},{"text":"don't","start":2910880,"end":2911000,"confidence":0.9313151,"speaker":"A"},{"text":"want","start":2911000,"end":2911120,"confidence":0.9394531,"speaker":"A"},{"text":"to.","start":2911120,"end":2911320,"confidence":0.94433594,"speaker":"A"},{"text":"Like,","start":2911320,"end":2911560,"confidence":0.81689453,"speaker":"A"},{"text":"I","start":2911560,"end":2911680,"confidence":0.99658203,"speaker":"A"},{"text":"love","start":2911680,"end":2911800,"confidence":0.99365234,"speaker":"A"},{"text":"tooting","start":2911800,"end":2912160,"confidence":0.8005371,"speaker":"A"},{"text":"my","start":2912160,"end":2912320,"confidence":1,"speaker":"A"},{"text":"own","start":2912320,"end":2912480,"confidence":1,"speaker":"A"},{"text":"horn.","start":2912480,"end":2912800,"confidence":0.9995117,"speaker":"A"},{"text":"Right.","start":2912800,"end":2913040,"confidence":0.9838867,"speaker":"A"},{"text":"But","start":2913040,"end":2913280,"confidence":0.9951172,"speaker":"A"},{"text":"like,","start":2913280,"end":2913600,"confidence":0.94628906,"speaker":"A"},{"text":"like","start":2914880,"end":2915280,"confidence":0.82666016,"speaker":"A"},{"text":"why","start":2915280,"end":2915560,"confidence":0.9951172,"speaker":"A"},{"text":"not","start":2915560,"end":2915800,"confidence":0.87939453,"speaker":"A"},{"text":"just.","start":2915800,"end":2916160,"confidence":0.9975586,"speaker":"A"},{"text":"Unless","start":2916320,"end":2916720,"confidence":0.92749023,"speaker":"A"},{"text":"you're.","start":2916720,"end":2917120,"confidence":0.9876302,"speaker":"A"},{"text":"Unless","start":2920720,"end":2921080,"confidence":0.998291,"speaker":"A"},{"text":"you're","start":2921080,"end":2921440,"confidence":0.90478516,"speaker":"A"},{"text":"like","start":2921440,"end":2921840,"confidence":0.94628906,"speaker":"A"},{"text":"building","start":2922000,"end":2922400,"confidence":1,"speaker":"A"},{"text":"a","start":2922480,"end":2922879,"confidence":0.6621094,"speaker":"A"},{"text":"executable,","start":2923040,"end":2923840,"confidence":0.9987793,"speaker":"A"},{"text":"I","start":2924160,"end":2924440,"confidence":0.99316406,"speaker":"A"},{"text":"guess,","start":2924440,"end":2924800,"confidence":1,"speaker":"A"},{"text":"or","start":2924800,"end":2925080,"confidence":0.9970703,"speaker":"A"},{"text":"an","start":2925080,"end":2925240,"confidence":0.9628906,"speaker":"A"},{"text":"app.","start":2925240,"end":2925480,"confidence":0.93652344,"speaker":"A"},{"text":"Ish.","start":2925480,"end":2925920,"confidence":0.7595215,"speaker":"A"},{"text":"And","start":2927760,"end":2928080,"confidence":0.9038086,"speaker":"C"},{"text":"I","start":2928080,"end":2928400,"confidence":0.64697266,"speaker":"C"},{"text":"guess","start":2928400,"end":2928800,"confidence":1,"speaker":"C"},{"text":"another","start":2928800,"end":2929120,"confidence":1,"speaker":"C"},{"text":"application","start":2929120,"end":2929760,"confidence":1,"speaker":"C"},{"text":"for","start":2929760,"end":2930000,"confidence":1,"speaker":"C"},{"text":"this","start":2930000,"end":2930240,"confidence":1,"speaker":"C"},{"text":"would","start":2930240,"end":2930560,"confidence":0.9995117,"speaker":"C"},{"text":"be","start":2930560,"end":2930960,"confidence":0.9995117,"speaker":"C"},{"text":"doing","start":2931680,"end":2932040,"confidence":0.9995117,"speaker":"C"},{"text":"CloudKit","start":2932040,"end":2932680,"confidence":0.99902344,"speaker":"C"},{"text":"stuff","start":2932680,"end":2933000,"confidence":0.9954427,"speaker":"C"},{"text":"server","start":2933000,"end":2933360,"confidence":0.9074707,"speaker":"C"},{"text":"side","start":2933360,"end":2933640,"confidence":1,"speaker":"C"},{"text":"and","start":2933640,"end":2934000,"confidence":0.9243164,"speaker":"C"},{"text":"then","start":2934000,"end":2934400,"confidence":0.9995117,"speaker":"C"},{"text":"providing","start":2934400,"end":2934880,"confidence":0.8515625,"speaker":"C"},{"text":"my","start":2934880,"end":2935120,"confidence":0.9995117,"speaker":"C"},{"text":"own","start":2935120,"end":2935400,"confidence":1,"speaker":"C"},{"text":"API","start":2935400,"end":2935920,"confidence":1,"speaker":"C"},{"text":"layer","start":2935920,"end":2936280,"confidence":0.9995117,"speaker":"C"},{"text":"over","start":2936280,"end":2936480,"confidence":1,"speaker":"C"},{"text":"it.","start":2936480,"end":2936800,"confidence":0.99853516,"speaker":"C"},{"text":"Yep,","start":2937660,"end":2938060,"confidence":0.8959961,"speaker":"A"},{"text":"yep.","start":2938220,"end":2938700,"confidence":0.7453613,"speaker":"A"},{"text":"So","start":2938940,"end":2939340,"confidence":0.9946289,"speaker":"A"},{"text":"that's.","start":2939340,"end":2939860,"confidence":0.9943034,"speaker":"A"},{"text":"Yeah.","start":2939860,"end":2940300,"confidence":0.99316406,"speaker":"A"},{"text":"Are","start":2940460,"end":2940700,"confidence":0.99658203,"speaker":"A"},{"text":"we","start":2940700,"end":2940820,"confidence":0.9995117,"speaker":"A"},{"text":"talking","start":2940820,"end":2941180,"confidence":0.9992676,"speaker":"A"},{"text":"private","start":2941340,"end":2941660,"confidence":0.99902344,"speaker":"A"},{"text":"database","start":2941660,"end":2942180,"confidence":0.9998372,"speaker":"A"},{"text":"or","start":2942180,"end":2942340,"confidence":0.9970703,"speaker":"A"},{"text":"public","start":2942340,"end":2942540,"confidence":0.9995117,"speaker":"A"},{"text":"database?","start":2942540,"end":2943180,"confidence":0.9995117,"speaker":"A"},{"text":"Private.","start":2943340,"end":2943740,"confidence":0.99609375,"speaker":"C"},{"text":"So","start":2945580,"end":2945820,"confidence":0.99902344,"speaker":"A"},{"text":"in","start":2945820,"end":2945940,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":2945940,"end":2946140,"confidence":0.9995117,"speaker":"A"},{"text":"case,","start":2946140,"end":2946460,"confidence":1,"speaker":"A"},{"text":"basically","start":2946700,"end":2947340,"confidence":0.99975586,"speaker":"A"},{"text":"like","start":2948060,"end":2948340,"confidence":0.99853516,"speaker":"A"},{"text":"you'd","start":2948340,"end":2948660,"confidence":0.99690753,"speaker":"A"},{"text":"have","start":2948660,"end":2948780,"confidence":1,"speaker":"A"},{"text":"to","start":2948780,"end":2948900,"confidence":1,"speaker":"A"},{"text":"go","start":2948900,"end":2949140,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2949140,"end":2949380,"confidence":0.99902344,"speaker":"A"},{"text":"Hard","start":2949380,"end":2949580,"confidence":0.8798828,"speaker":"A"},{"text":"Twitch","start":2949580,"end":2949940,"confidence":0.9433594,"speaker":"A"},{"text":"route","start":2949940,"end":2950300,"confidence":0.9946289,"speaker":"A"},{"text":"and","start":2951100,"end":2951500,"confidence":0.9951172,"speaker":"A"},{"text":"you","start":2952460,"end":2952740,"confidence":0.99853516,"speaker":"A"},{"text":"would","start":2952740,"end":2952979,"confidence":0.8515625,"speaker":"A"},{"text":"have","start":2952979,"end":2953219,"confidence":1,"speaker":"A"},{"text":"to","start":2953219,"end":2953380,"confidence":1,"speaker":"A"},{"text":"provide","start":2953380,"end":2953660,"confidence":1,"speaker":"A"},{"text":"a","start":2953900,"end":2954180,"confidence":0.9760742,"speaker":"A"},{"text":"way","start":2954180,"end":2954460,"confidence":0.9975586,"speaker":"A"},{"text":"to","start":2955980,"end":2956260,"confidence":0.9975586,"speaker":"A"},{"text":"get","start":2956260,"end":2956420,"confidence":1,"speaker":"A"},{"text":"their","start":2956420,"end":2956580,"confidence":0.9921875,"speaker":"A"},{"text":"web","start":2956580,"end":2956820,"confidence":0.9992676,"speaker":"A"},{"text":"authentication","start":2956820,"end":2957420,"confidence":0.9996338,"speaker":"A"},{"text":"token,","start":2957420,"end":2957980,"confidence":0.99820966,"speaker":"A"},{"text":"essentially,","start":2958460,"end":2959060,"confidence":0.9316406,"speaker":"A"},{"text":"if","start":2959060,"end":2959260,"confidence":0.9770508,"speaker":"A"},{"text":"that","start":2959260,"end":2959380,"confidence":0.9995117,"speaker":"A"},{"text":"makes","start":2959380,"end":2959540,"confidence":0.9970703,"speaker":"A"},{"text":"sense.","start":2959540,"end":2959900,"confidence":0.99853516,"speaker":"A"},{"text":"And","start":2960540,"end":2960820,"confidence":0.9975586,"speaker":"A"},{"text":"then","start":2960820,"end":2961020,"confidence":0.99902344,"speaker":"A"},{"text":"store","start":2961020,"end":2961260,"confidence":0.99853516,"speaker":"A"},{"text":"it","start":2961260,"end":2961380,"confidence":0.9980469,"speaker":"A"},{"text":"in","start":2961380,"end":2961540,"confidence":0.9980469,"speaker":"A"},{"text":"Postgres","start":2961540,"end":2962020,"confidence":0.98046875,"speaker":"A"},{"text":"or","start":2962020,"end":2962180,"confidence":0.9970703,"speaker":"A"},{"text":"whatever","start":2962180,"end":2962380,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":2962380,"end":2962500,"confidence":0.99902344,"speaker":"A"},{"text":"hell","start":2962500,"end":2962700,"confidence":0.99975586,"speaker":"A"},{"text":"you","start":2962700,"end":2962820,"confidence":0.9995117,"speaker":"A"},{"text":"want","start":2962820,"end":2962980,"confidence":0.97802734,"speaker":"A"},{"text":"to","start":2962980,"end":2963100,"confidence":0.9980469,"speaker":"A"},{"text":"do.","start":2963100,"end":2963260,"confidence":0.9995117,"speaker":"A"},{"text":"Like","start":2963260,"end":2963500,"confidence":0.99121094,"speaker":"A"},{"text":"that's,","start":2963500,"end":2963820,"confidence":0.98876953,"speaker":"A"},{"text":"that's","start":2963820,"end":2964060,"confidence":0.99658203,"speaker":"A"},{"text":"the","start":2964060,"end":2964140,"confidence":0.99902344,"speaker":"A"},{"text":"way","start":2964140,"end":2964220,"confidence":1,"speaker":"A"},{"text":"I","start":2964220,"end":2964340,"confidence":0.9995117,"speaker":"A"},{"text":"did","start":2964340,"end":2964460,"confidence":0.9941406,"speaker":"A"},{"text":"it","start":2964460,"end":2964540,"confidence":0.9946289,"speaker":"A"},{"text":"with","start":2964540,"end":2964660,"confidence":0.9995117,"speaker":"A"},{"text":"Hard","start":2964660,"end":2964820,"confidence":0.8378906,"speaker":"A"},{"text":"Twitch.","start":2964820,"end":2965260,"confidence":0.88256836,"speaker":"A"},{"text":"But","start":2966400,"end":2966480,"confidence":0.96484375,"speaker":"A"},{"text":"once","start":2966480,"end":2966600,"confidence":0.9897461,"speaker":"A"},{"text":"you","start":2966600,"end":2966760,"confidence":0.9946289,"speaker":"A"},{"text":"have","start":2966760,"end":2966880,"confidence":0.8364258,"speaker":"A"},{"text":"that,","start":2966880,"end":2967120,"confidence":0.5385742,"speaker":"A"},{"text":"you","start":2967120,"end":2967360,"confidence":0.9995117,"speaker":"A"},{"text":"can","start":2967360,"end":2967440,"confidence":0.99902344,"speaker":"A"},{"text":"do","start":2967440,"end":2967520,"confidence":0.9995117,"speaker":"A"},{"text":"anything","start":2967520,"end":2967760,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":2967760,"end":2967880,"confidence":0.9970703,"speaker":"A"},{"text":"want","start":2967880,"end":2968080,"confidence":0.99658203,"speaker":"A"},{"text":"on","start":2968080,"end":2968280,"confidence":0.99853516,"speaker":"A"},{"text":"the","start":2968280,"end":2968440,"confidence":0.99316406,"speaker":"A"},{"text":"server","start":2968440,"end":2968880,"confidence":0.99975586,"speaker":"A"},{"text":"with","start":2969200,"end":2969520,"confidence":0.9980469,"speaker":"A"},{"text":"their","start":2969520,"end":2969840,"confidence":0.98583984,"speaker":"A"},{"text":"private","start":2970240,"end":2970600,"confidence":0.99853516,"speaker":"A"},{"text":"database,","start":2970600,"end":2971200,"confidence":0.9996745,"speaker":"A"},{"text":"if","start":2971200,"end":2971400,"confidence":0.99902344,"speaker":"A"},{"text":"that","start":2971400,"end":2971560,"confidence":0.9995117,"speaker":"A"},{"text":"makes","start":2971560,"end":2971720,"confidence":0.9970703,"speaker":"A"},{"text":"sense.","start":2971720,"end":2972080,"confidence":0.99902344,"speaker":"A"},{"text":"It","start":2972560,"end":2972840,"confidence":0.9692383,"speaker":"C"},{"text":"does.","start":2972840,"end":2973120,"confidence":0.9980469,"speaker":"C"},{"text":"Yep.","start":2973920,"end":2974480,"confidence":0.8156738,"speaker":"A"},{"text":"Yep.","start":2974560,"end":2975120,"confidence":0.7368164,"speaker":"A"},{"text":"A","start":2975920,"end":2976160,"confidence":0.5620117,"speaker":"A"},{"text":"couple","start":2976160,"end":2976360,"confidence":0.99731445,"speaker":"A"},{"text":"of","start":2976360,"end":2976480,"confidence":0.9433594,"speaker":"A"},{"text":"things","start":2976480,"end":2976720,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":2977040,"end":2977320,"confidence":0.9980469,"speaker":"A"},{"text":"wanted","start":2977320,"end":2977560,"confidence":0.9992676,"speaker":"A"},{"text":"to","start":2977560,"end":2977720,"confidence":0.9995117,"speaker":"A"},{"text":"bring","start":2977720,"end":2977920,"confidence":1,"speaker":"A"},{"text":"up,","start":2977920,"end":2978240,"confidence":0.9995117,"speaker":"A"},{"text":"so","start":2978320,"end":2978640,"confidence":0.9765625,"speaker":"A"},{"text":"let's","start":2978640,"end":2978920,"confidence":0.99902344,"speaker":"A"},{"text":"take","start":2978920,"end":2979080,"confidence":1,"speaker":"A"},{"text":"a","start":2979080,"end":2979240,"confidence":1,"speaker":"A"},{"text":"look.","start":2979240,"end":2979520,"confidence":0.9995117,"speaker":"A"},{"text":"So","start":2984000,"end":2984400,"confidence":0.95214844,"speaker":"A"},{"text":"part","start":2986880,"end":2987160,"confidence":0.99902344,"speaker":"A"},{"text":"of","start":2987160,"end":2987280,"confidence":1,"speaker":"A"},{"text":"my","start":2987280,"end":2987400,"confidence":1,"speaker":"A"},{"text":"other","start":2987400,"end":2987640,"confidence":1,"speaker":"A"},{"text":"presentation","start":2987640,"end":2988400,"confidence":1,"speaker":"A"},{"text":"is","start":2988640,"end":2989040,"confidence":0.99853516,"speaker":"A"},{"text":"working,","start":2990000,"end":2990400,"confidence":0.87841797,"speaker":"A"},{"text":"talking","start":2990800,"end":2991160,"confidence":0.7766113,"speaker":"A"},{"text":"about","start":2991160,"end":2991440,"confidence":0.9951172,"speaker":"A"},{"text":"cross","start":2991640,"end":2991880,"confidence":0.998291,"speaker":"A"},{"text":"platform","start":2991880,"end":2992360,"confidence":0.8640137,"speaker":"A"},{"text":"automation","start":2992600,"end":2993320,"confidence":0.9996745,"speaker":"A"},{"text":"type","start":2993640,"end":2994000,"confidence":0.9980469,"speaker":"A"},{"text":"stuff.","start":2994000,"end":2994440,"confidence":1,"speaker":"A"},{"text":"And","start":2995560,"end":2995960,"confidence":0.9868164,"speaker":"A"},{"text":"the","start":2996440,"end":2996760,"confidence":0.9995117,"speaker":"A"},{"text":"one","start":2996760,"end":2997040,"confidence":1,"speaker":"A"},{"text":"issue","start":2997040,"end":2997400,"confidence":0.9995117,"speaker":"A"},{"text":"I've","start":2997400,"end":2997840,"confidence":0.9972331,"speaker":"A"},{"text":"run","start":2997840,"end":2998040,"confidence":0.9995117,"speaker":"A"},{"text":"into","start":2998040,"end":2998360,"confidence":1,"speaker":"A"},{"text":"is.","start":2998440,"end":2998840,"confidence":0.9926758,"speaker":"A"},{"text":"So","start":2998920,"end":2999200,"confidence":0.9921875,"speaker":"A"},{"text":"it","start":2999200,"end":2999360,"confidence":0.9916992,"speaker":"A"},{"text":"basically","start":2999360,"end":2999800,"confidence":0.99975586,"speaker":"A"},{"text":"builds","start":2999800,"end":3000160,"confidence":0.9992676,"speaker":"A"},{"text":"on","start":3000160,"end":3000360,"confidence":0.9995117,"speaker":"A"},{"text":"everything.","start":3000360,"end":3000680,"confidence":1,"speaker":"A"},{"text":"Right","start":3000920,"end":3001240,"confidence":0.9995117,"speaker":"A"},{"text":"now.","start":3001240,"end":3001560,"confidence":0.9995117,"speaker":"A"},{"text":"I'm","start":3007560,"end":3007880,"confidence":0.9977214,"speaker":"A"},{"text":"going","start":3007880,"end":3007960,"confidence":0.6772461,"speaker":"A"},{"text":"to","start":3007960,"end":3008080,"confidence":0.9975586,"speaker":"A"},{"text":"share","start":3008080,"end":3008320,"confidence":0.9995117,"speaker":"A"},{"text":"something.","start":3008320,"end":3008680,"confidence":0.9995117,"speaker":"A"},{"text":"Hey","start":3009880,"end":3010200,"confidence":0.99609375,"speaker":"B"},{"text":"guys,","start":3010200,"end":3010520,"confidence":0.99902344,"speaker":"B"},{"text":"I","start":3011000,"end":3011240,"confidence":0.9770508,"speaker":"B"},{"text":"got","start":3011240,"end":3011320,"confidence":0.99609375,"speaker":"B"},{"text":"to","start":3011320,"end":3011400,"confidence":0.44458008,"speaker":"B"},{"text":"drop.","start":3011400,"end":3011720,"confidence":0.9885254,"speaker":"B"},{"text":"But","start":3011800,"end":3012160,"confidence":0.98291016,"speaker":"B"},{"text":"it","start":3012160,"end":3012400,"confidence":0.9995117,"speaker":"B"},{"text":"was","start":3012400,"end":3012680,"confidence":0.9995117,"speaker":"B"},{"text":"good","start":3012680,"end":3013000,"confidence":0.9995117,"speaker":"B"},{"text":"presentation,","start":3013000,"end":3013480,"confidence":0.9995117,"speaker":"B"},{"text":"Leo.","start":3013480,"end":3014040,"confidence":0.9987793,"speaker":"B"},{"text":"Thank","start":3014040,"end":3014400,"confidence":0.99975586,"speaker":"B"},{"text":"you.","start":3014400,"end":3014680,"confidence":0.9975586,"speaker":"B"},{"text":"Yeah,","start":3014840,"end":3015240,"confidence":0.99088544,"speaker":"A"},{"text":"yeah.","start":3015240,"end":3015560,"confidence":0.9458008,"speaker":"A"},{"text":"If","start":3015560,"end":3015720,"confidence":0.88964844,"speaker":"A"},{"text":"I","start":3015720,"end":3015840,"confidence":0.98876953,"speaker":"A"},{"text":"have","start":3015840,"end":3015960,"confidence":0.9169922,"speaker":"A"},{"text":"more","start":3015960,"end":3016040,"confidence":0.97265625,"speaker":"A"},{"text":"questions,","start":3016040,"end":3016320,"confidence":0.95996094,"speaker":"A"},{"text":"if","start":3016320,"end":3016440,"confidence":0.9589844,"speaker":"A"},{"text":"you","start":3016440,"end":3016520,"confidence":0.9951172,"speaker":"A"},{"text":"have","start":3016520,"end":3016640,"confidence":0.9980469,"speaker":"A"},{"text":"any","start":3016640,"end":3016800,"confidence":0.9995117,"speaker":"A"},{"text":"feedback,","start":3016800,"end":3017160,"confidence":0.9996338,"speaker":"A"},{"text":"just","start":3017160,"end":3017360,"confidence":0.9995117,"speaker":"A"},{"text":"hit","start":3017360,"end":3017520,"confidence":1,"speaker":"A"},{"text":"me","start":3017520,"end":3017640,"confidence":1,"speaker":"A"},{"text":"up","start":3017640,"end":3017760,"confidence":1,"speaker":"A"},{"text":"on","start":3017760,"end":3018040,"confidence":0.99658203,"speaker":"A"},{"text":"Slack.","start":3018950,"end":3019350,"confidence":0.89697266,"speaker":"A"},{"text":"Sounds","start":3019590,"end":3019990,"confidence":0.9978841,"speaker":"B"},{"text":"good.","start":3019990,"end":3020150,"confidence":0.9980469,"speaker":"B"},{"text":"Cool,","start":3020150,"end":3020470,"confidence":0.9345703,"speaker":"A"},{"text":"thank","start":3020470,"end":3020750,"confidence":0.7890625,"speaker":"A"},{"text":"you.","start":3020750,"end":3020950,"confidence":0.99316406,"speaker":"A"},{"text":"Thank","start":3020950,"end":3021230,"confidence":0.94628906,"speaker":"A"},{"text":"you","start":3021230,"end":3021350,"confidence":0.9995117,"speaker":"A"},{"text":"so","start":3021350,"end":3021470,"confidence":0.99853516,"speaker":"A"},{"text":"much","start":3021470,"end":3021590,"confidence":1,"speaker":"A"},{"text":"for","start":3021590,"end":3021710,"confidence":0.9995117,"speaker":"A"},{"text":"helping","start":3021710,"end":3021950,"confidence":0.99975586,"speaker":"A"},{"text":"me","start":3021950,"end":3022150,"confidence":0.81103516,"speaker":"A"},{"text":"set","start":3022150,"end":3022350,"confidence":0.96240234,"speaker":"A"},{"text":"this","start":3022350,"end":3022510,"confidence":0.99365234,"speaker":"A"},{"text":"up.","start":3022510,"end":3022790,"confidence":0.99902344,"speaker":"A"},{"text":"Yeah,","start":3023590,"end":3023990,"confidence":0.95214844,"speaker":"A"},{"text":"talk","start":3023990,"end":3024190,"confidence":0.9824219,"speaker":"A"},{"text":"to","start":3024190,"end":3024350,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":3024350,"end":3024470,"confidence":0.99658203,"speaker":"A"},{"text":"later.","start":3024470,"end":3024710,"confidence":0.9838867,"speaker":"A"},{"text":"Thank","start":3024950,"end":3025230,"confidence":0.9968262,"speaker":"B"},{"text":"you.","start":3025230,"end":3025350,"confidence":0.99902344,"speaker":"B"},{"text":"Bye","start":3025350,"end":3025590,"confidence":0.9824219,"speaker":"B"},{"text":"bye.","start":3025590,"end":3025910,"confidence":0.99316406,"speaker":"B"},{"text":"Yeah,","start":3028870,"end":3029190,"confidence":0.88216144,"speaker":"C"},{"text":"so","start":3029190,"end":3029310,"confidence":0.91308594,"speaker":"C"},{"text":"if","start":3029310,"end":3029430,"confidence":0.99609375,"speaker":"C"},{"text":"you","start":3029430,"end":3029510,"confidence":0.99365234,"speaker":"C"},{"text":"had","start":3029510,"end":3029630,"confidence":0.9638672,"speaker":"C"},{"text":"something","start":3029630,"end":3029830,"confidence":0.9995117,"speaker":"C"},{"text":"else","start":3029830,"end":3030070,"confidence":0.99975586,"speaker":"C"},{"text":"to","start":3030070,"end":3030190,"confidence":0.99853516,"speaker":"C"},{"text":"show,","start":3030190,"end":3030350,"confidence":0.99902344,"speaker":"C"},{"text":"I'm","start":3030350,"end":3030550,"confidence":0.99869794,"speaker":"C"},{"text":"happy","start":3030550,"end":3030750,"confidence":0.9995117,"speaker":"C"},{"text":"to","start":3030750,"end":3030990,"confidence":0.6503906,"speaker":"C"},{"text":"look","start":3030990,"end":3031230,"confidence":0.97021484,"speaker":"C"},{"text":"for.","start":3031230,"end":3031430,"confidence":0.79541016,"speaker":"C"},{"text":"I'm","start":3031430,"end":3031670,"confidence":0.99104816,"speaker":"C"},{"text":"here","start":3031670,"end":3031790,"confidence":0.9995117,"speaker":"C"},{"text":"for","start":3031790,"end":3031910,"confidence":0.9995117,"speaker":"C"},{"text":"a","start":3031910,"end":3031990,"confidence":0.9980469,"speaker":"C"},{"text":"few","start":3031990,"end":3032110,"confidence":0.9995117,"speaker":"C"},{"text":"more","start":3032110,"end":3032270,"confidence":0.9995117,"speaker":"C"},{"text":"minutes","start":3032270,"end":3032510,"confidence":0.9987793,"speaker":"C"},{"text":"as","start":3032510,"end":3032670,"confidence":0.99853516,"speaker":"C"},{"text":"well.","start":3032670,"end":3032950,"confidence":0.99902344,"speaker":"C"},{"text":"Yeah,","start":3033590,"end":3033910,"confidence":0.96402997,"speaker":"A"},{"text":"yeah,","start":3033910,"end":3034070,"confidence":0.90755206,"speaker":"A"},{"text":"yeah.","start":3034070,"end":3034390,"confidence":0.8152669,"speaker":"A"},{"text":"So","start":3038790,"end":3039110,"confidence":0.94628906,"speaker":"A"},{"text":"I","start":3039110,"end":3039350,"confidence":0.9995117,"speaker":"A"},{"text":"have","start":3039350,"end":3039630,"confidence":1,"speaker":"A"},{"text":"the","start":3039630,"end":3039870,"confidence":0.9980469,"speaker":"A"},{"text":"workflow","start":3039870,"end":3040350,"confidence":0.9995117,"speaker":"A"},{"text":"working","start":3040350,"end":3040630,"confidence":0.9995117,"speaker":"A"},{"text":"here","start":3041190,"end":3041590,"confidence":0.99853516,"speaker":"A"},{"text":"and","start":3041670,"end":3041950,"confidence":0.9892578,"speaker":"A"},{"text":"it","start":3041950,"end":3042070,"confidence":0.9995117,"speaker":"A"},{"text":"does","start":3042070,"end":3042270,"confidence":0.99902344,"speaker":"A"},{"text":"Ubuntu,","start":3042270,"end":3043110,"confidence":0.9856445,"speaker":"A"},{"text":"it","start":3044080,"end":3044200,"confidence":0.97216797,"speaker":"A"},{"text":"does","start":3044200,"end":3044400,"confidence":0.99853516,"speaker":"A"},{"text":"Windows,","start":3044400,"end":3044960,"confidence":0.9944661,"speaker":"A"},{"text":"it","start":3045120,"end":3045400,"confidence":0.99365234,"speaker":"A"},{"text":"does","start":3045400,"end":3045600,"confidence":0.98779297,"speaker":"A"},{"text":"Android.","start":3045600,"end":3046120,"confidence":0.9943034,"speaker":"A"},{"text":"So","start":3046120,"end":3046360,"confidence":0.98046875,"speaker":"A"},{"text":"all","start":3046360,"end":3046480,"confidence":0.99853516,"speaker":"A"},{"text":"that","start":3046480,"end":3046600,"confidence":0.9975586,"speaker":"A"},{"text":"stuff","start":3046600,"end":3046880,"confidence":0.90494794,"speaker":"A"},{"text":"is","start":3046880,"end":3047080,"confidence":0.9995117,"speaker":"A"},{"text":"available","start":3047080,"end":3047360,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":3047440,"end":3047720,"confidence":0.99902344,"speaker":"A"},{"text":"you.","start":3047720,"end":3048000,"confidence":0.99853516,"speaker":"A"},{"text":"I","start":3048640,"end":3048960,"confidence":0.9995117,"speaker":"A"},{"text":"would","start":3048960,"end":3049200,"confidence":0.9995117,"speaker":"A"},{"text":"never","start":3049200,"end":3049440,"confidence":1,"speaker":"A"},{"text":"recommend","start":3049440,"end":3049920,"confidence":0.9998372,"speaker":"A"},{"text":"using","start":3049920,"end":3050240,"confidence":0.99902344,"speaker":"A"},{"text":"Miskit","start":3050240,"end":3050920,"confidence":0.9777832,"speaker":"A"},{"text":"on","start":3050920,"end":3051160,"confidence":0.99902344,"speaker":"A"},{"text":"an","start":3051160,"end":3051320,"confidence":0.99902344,"speaker":"A"},{"text":"Apple","start":3051320,"end":3051560,"confidence":1,"speaker":"A"},{"text":"platform","start":3051560,"end":3052040,"confidence":0.9992676,"speaker":"A"},{"text":"for","start":3052040,"end":3052280,"confidence":0.9995117,"speaker":"A"},{"text":"obvious","start":3052280,"end":3052640,"confidence":0.99975586,"speaker":"A"},{"text":"reasons,","start":3052640,"end":3053200,"confidence":0.9995117,"speaker":"A"},{"text":"like","start":3053280,"end":3053600,"confidence":0.9238281,"speaker":"A"},{"text":"what's","start":3053600,"end":3053840,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":3053840,"end":3053960,"confidence":0.9995117,"speaker":"A"},{"text":"point?","start":3053960,"end":3054240,"confidence":0.99902344,"speaker":"A"},{"text":"True.","start":3055600,"end":3056080,"confidence":0.9099121,"speaker":"C"},{"text":"Unless","start":3056080,"end":3056440,"confidence":0.99609375,"speaker":"A"},{"text":"there's","start":3056440,"end":3056720,"confidence":0.9946289,"speaker":"A"},{"text":"something","start":3056720,"end":3056920,"confidence":1,"speaker":"A"},{"text":"special","start":3056920,"end":3057240,"confidence":1,"speaker":"A"},{"text":"that","start":3057240,"end":3057480,"confidence":0.9970703,"speaker":"A"},{"text":"I","start":3057480,"end":3057640,"confidence":0.9995117,"speaker":"A"},{"text":"provide","start":3057640,"end":3057880,"confidence":1,"speaker":"A"},{"text":"that","start":3057880,"end":3058160,"confidence":0.9897461,"speaker":"A"},{"text":"CloudKit","start":3058160,"end":3058760,"confidence":0.89551,"speaker":"A"},{"text":"doesn't","start":3058760,"end":3059040,"confidence":0.96777344,"speaker":"A"},{"text":"like,","start":3059040,"end":3059360,"confidence":0.83496094,"speaker":"A"},{"text":"I","start":3059440,"end":3059680,"confidence":0.99560547,"speaker":"A"},{"text":"don't","start":3059680,"end":3059920,"confidence":0.8590495,"speaker":"A"},{"text":"get","start":3059920,"end":3060039,"confidence":0.9995117,"speaker":"A"},{"text":"it.","start":3060039,"end":3060320,"confidence":0.9980469,"speaker":"A"},{"text":"Right.","start":3060480,"end":3060880,"confidence":0.8925781,"speaker":"C"},{"text":"But","start":3061200,"end":3061600,"confidence":0.9941406,"speaker":"A"},{"text":"we","start":3062560,"end":3062880,"confidence":0.9926758,"speaker":"A"},{"text":"have","start":3062880,"end":3063200,"confidence":0.9995117,"speaker":"A"},{"text":"an","start":3063200,"end":3063520,"confidence":0.9770508,"speaker":"A"},{"text":"issue.","start":3063520,"end":3063840,"confidence":0.9765625,"speaker":"A"},{"text":"So","start":3063920,"end":3064200,"confidence":0.9794922,"speaker":"A"},{"text":"I","start":3064200,"end":3064360,"confidence":0.9995117,"speaker":"A"},{"text":"just","start":3064360,"end":3064560,"confidence":0.99902344,"speaker":"A"},{"text":"started","start":3064560,"end":3064840,"confidence":0.9995117,"speaker":"A"},{"text":"dabbling.","start":3064840,"end":3065440,"confidence":0.91918945,"speaker":"A"},{"text":"I","start":3066000,"end":3066280,"confidence":0.609375,"speaker":"A"},{"text":"haven't","start":3066280,"end":3066520,"confidence":0.9489746,"speaker":"A"},{"text":"really","start":3066520,"end":3066800,"confidence":0.9975586,"speaker":"A"},{"text":"done","start":3066960,"end":3067280,"confidence":1,"speaker":"A"},{"text":"anything","start":3067280,"end":3067640,"confidence":1,"speaker":"A"},{"text":"with","start":3067640,"end":3067840,"confidence":0.9995117,"speaker":"A"},{"text":"wasm,","start":3067840,"end":3068480,"confidence":0.6376953,"speaker":"A"},{"text":"but","start":3069450,"end":3069530,"confidence":0.9980469,"speaker":"A"},{"text":"I","start":3069530,"end":3069650,"confidence":0.9980469,"speaker":"A"},{"text":"did","start":3069650,"end":3069810,"confidence":0.99853516,"speaker":"A"},{"text":"definitely","start":3069810,"end":3070210,"confidence":0.83239746,"speaker":"A"},{"text":"try.","start":3070210,"end":3070570,"confidence":0.99902344,"speaker":"A"},{"text":"Like","start":3070570,"end":3070850,"confidence":0.9980469,"speaker":"A"},{"text":"I","start":3070850,"end":3071010,"confidence":0.99609375,"speaker":"A"},{"text":"added","start":3071010,"end":3071250,"confidence":0.99902344,"speaker":"A"},{"text":"support","start":3071250,"end":3071530,"confidence":0.99853516,"speaker":"A"},{"text":"for","start":3071530,"end":3071730,"confidence":0.99853516,"speaker":"A"},{"text":"WASM","start":3071730,"end":3072250,"confidence":0.5599365,"speaker":"A"},{"text":"in","start":3072250,"end":3072450,"confidence":0.9560547,"speaker":"A"},{"text":"my,","start":3072450,"end":3072730,"confidence":0.9975586,"speaker":"A"},{"text":"in","start":3072730,"end":3073050,"confidence":0.9980469,"speaker":"A"},{"text":"my","start":3073050,"end":3073370,"confidence":1,"speaker":"A"},{"text":"Swift","start":3073690,"end":3074210,"confidence":0.9980469,"speaker":"A"},{"text":"build","start":3074210,"end":3074530,"confidence":0.99609375,"speaker":"A"},{"text":"action.","start":3074530,"end":3074890,"confidence":0.99902344,"speaker":"A"},{"text":"The","start":3077210,"end":3077490,"confidence":0.99121094,"speaker":"A"},{"text":"thing","start":3077490,"end":3077650,"confidence":0.9980469,"speaker":"A"},{"text":"about","start":3077650,"end":3077930,"confidence":0.9995117,"speaker":"A"},{"text":"WASA","start":3077930,"end":3078650,"confidence":0.66918945,"speaker":"A"},{"text":"is","start":3078650,"end":3078850,"confidence":0.9995117,"speaker":"A"},{"text":"it","start":3078850,"end":3079010,"confidence":0.99853516,"speaker":"A"},{"text":"does","start":3079010,"end":3079210,"confidence":0.99853516,"speaker":"A"},{"text":"not","start":3079210,"end":3079410,"confidence":0.99560547,"speaker":"A"},{"text":"provide.","start":3079410,"end":3079690,"confidence":0.99902344,"speaker":"A"},{"text":"It","start":3079770,"end":3080050,"confidence":0.99609375,"speaker":"A"},{"text":"doesn't","start":3080050,"end":3080290,"confidence":0.9978841,"speaker":"A"},{"text":"have","start":3080290,"end":3080410,"confidence":1,"speaker":"A"},{"text":"a","start":3080410,"end":3080530,"confidence":0.99853516,"speaker":"A"},{"text":"transport","start":3080530,"end":3081050,"confidence":0.99853516,"speaker":"A"},{"text":"available.","start":3081130,"end":3081530,"confidence":0.9995117,"speaker":"A"},{"text":"So","start":3082570,"end":3082850,"confidence":0.99853516,"speaker":"A"},{"text":"we","start":3082850,"end":3083050,"confidence":0.99853516,"speaker":"A"},{"text":"talked","start":3083050,"end":3083290,"confidence":0.99975586,"speaker":"A"},{"text":"about","start":3083290,"end":3083490,"confidence":0.9995117,"speaker":"A"},{"text":"transports,","start":3083490,"end":3084410,"confidence":0.9938151,"speaker":"A"},{"text":"I","start":3086010,"end":3086250,"confidence":0.9770508,"speaker":"A"},{"text":"think.","start":3086250,"end":3086490,"confidence":0.9980469,"speaker":"A"},{"text":"Did","start":3086570,"end":3086850,"confidence":0.99853516,"speaker":"A"},{"text":"you","start":3086850,"end":3087010,"confidence":1,"speaker":"A"},{"text":"hear","start":3087010,"end":3087170,"confidence":0.9995117,"speaker":"A"},{"text":"about","start":3087170,"end":3087330,"confidence":0.99902344,"speaker":"A"},{"text":"that","start":3087330,"end":3087530,"confidence":0.9970703,"speaker":"A"},{"text":"part","start":3087530,"end":3087770,"confidence":0.9995117,"speaker":"A"},{"text":"about","start":3087770,"end":3087970,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":3087970,"end":3088090,"confidence":0.9995117,"speaker":"A"},{"text":"Open","start":3088090,"end":3088250,"confidence":0.99902344,"speaker":"A"},{"text":"API","start":3088250,"end":3088770,"confidence":0.7873535,"speaker":"A"},{"text":"generator","start":3088770,"end":3089170,"confidence":0.9995117,"speaker":"A"},{"text":"and","start":3089170,"end":3089330,"confidence":0.95751953,"speaker":"A"},{"text":"transports?","start":3089330,"end":3090090,"confidence":0.8383789,"speaker":"A"},{"text":"I","start":3091370,"end":3091770,"confidence":0.9667969,"speaker":"C"},{"text":"think","start":3091850,"end":3092170,"confidence":0.9995117,"speaker":"C"},{"text":"I","start":3092170,"end":3092370,"confidence":0.9970703,"speaker":"C"},{"text":"was","start":3092370,"end":3092570,"confidence":1,"speaker":"C"},{"text":"coming","start":3092570,"end":3092810,"confidence":0.9995117,"speaker":"C"},{"text":"in","start":3092810,"end":3093010,"confidence":0.9980469,"speaker":"C"},{"text":"at","start":3093010,"end":3093130,"confidence":1,"speaker":"C"},{"text":"that","start":3093130,"end":3093330,"confidence":0.99560547,"speaker":"C"},{"text":"point.","start":3093330,"end":3093690,"confidence":0.9980469,"speaker":"C"},{"text":"Okay.","start":3094410,"end":3094920,"confidence":0.92496747,"speaker":"A"},{"text":"When","start":3095630,"end":3095750,"confidence":0.71191406,"speaker":"A"},{"text":"you","start":3095750,"end":3095910,"confidence":0.93408203,"speaker":"A"},{"text":"create","start":3095910,"end":3096070,"confidence":0.99853516,"speaker":"A"},{"text":"a","start":3096070,"end":3096230,"confidence":0.9951172,"speaker":"A"},{"text":"client,","start":3096230,"end":3096670,"confidence":0.9995117,"speaker":"A"},{"text":"so","start":3097630,"end":3097910,"confidence":0.9794922,"speaker":"A"},{"text":"underneath","start":3097910,"end":3098310,"confidence":0.9996745,"speaker":"A"},{"text":"the","start":3098310,"end":3098470,"confidence":0.9995117,"speaker":"A"},{"text":"client","start":3098470,"end":3098910,"confidence":1,"speaker":"A"},{"text":"you","start":3102350,"end":3102630,"confidence":0.99902344,"speaker":"A"},{"text":"have","start":3102630,"end":3102910,"confidence":1,"speaker":"A"},{"text":"what's","start":3102910,"end":3103230,"confidence":0.99934894,"speaker":"A"},{"text":"called","start":3103230,"end":3103350,"confidence":1,"speaker":"A"},{"text":"a","start":3103350,"end":3103510,"confidence":0.7114258,"speaker":"A"},{"text":"client","start":3103510,"end":3103790,"confidence":0.81811523,"speaker":"A"},{"text":"transport.","start":3103790,"end":3104430,"confidence":0.9987793,"speaker":"A"},{"text":"This","start":3104670,"end":3104950,"confidence":0.8666992,"speaker":"A"},{"text":"is","start":3104950,"end":3105230,"confidence":0.99902344,"speaker":"A"},{"text":"so","start":3105630,"end":3105910,"confidence":0.9921875,"speaker":"A"},{"text":"underneath","start":3105910,"end":3106430,"confidence":0.90999347,"speaker":"A"},{"text":"this","start":3106670,"end":3106990,"confidence":0.99902344,"speaker":"A"},{"text":"client,","start":3106990,"end":3107310,"confidence":0.9941406,"speaker":"A"},{"text":"this","start":3107310,"end":3107510,"confidence":0.99902344,"speaker":"A"},{"text":"is","start":3107510,"end":3107630,"confidence":0.9995117,"speaker":"A"},{"text":"an","start":3107630,"end":3107750,"confidence":0.99902344,"speaker":"A"},{"text":"abstraction","start":3107750,"end":3108350,"confidence":0.99975586,"speaker":"A"},{"text":"layer","start":3108350,"end":3108750,"confidence":0.9995117,"speaker":"A"},{"text":"above.","start":3108750,"end":3109150,"confidence":0.8647461,"speaker":"A"},{"text":"So","start":3109870,"end":3110190,"confidence":0.58496094,"speaker":"A"},{"text":"this","start":3110190,"end":3110390,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":3110390,"end":3110550,"confidence":0.99902344,"speaker":"A"},{"text":"not","start":3110550,"end":3110829,"confidence":0.9921875,"speaker":"A"},{"text":"the","start":3110829,"end":3111109,"confidence":0.9995117,"speaker":"A"},{"text":"right","start":3111109,"end":3111270,"confidence":0.99609375,"speaker":"A"},{"text":"one.","start":3111270,"end":3111550,"confidence":0.98339844,"speaker":"A"},{"text":"Where's","start":3112190,"end":3112630,"confidence":0.98323566,"speaker":"A"},{"text":"the","start":3112630,"end":3112790,"confidence":1,"speaker":"A"},{"text":"public","start":3112790,"end":3113030,"confidence":0.9995117,"speaker":"A"},{"text":"one?","start":3113030,"end":3113390,"confidence":0.9916992,"speaker":"A"},{"text":"But","start":3120680,"end":3120800,"confidence":0.99560547,"speaker":"A"},{"text":"anyway,","start":3120800,"end":3121160,"confidence":0.9995117,"speaker":"A"},{"text":"there","start":3121160,"end":3121400,"confidence":0.9980469,"speaker":"A"},{"text":"is","start":3121400,"end":3121720,"confidence":0.9995117,"speaker":"A"},{"text":"here","start":3125080,"end":3125440,"confidence":0.97509766,"speaker":"A"},{"text":"CloudKit","start":3125440,"end":3126040,"confidence":0.98950195,"speaker":"A"},{"text":"service","start":3126040,"end":3126360,"confidence":0.9975586,"speaker":"A"},{"text":"maybe.","start":3126360,"end":3126920,"confidence":0.9958496,"speaker":"A"},{"text":"Yeah,","start":3129560,"end":3129920,"confidence":0.87158203,"speaker":"A"},{"text":"here","start":3129920,"end":3130080,"confidence":0.99853516,"speaker":"A"},{"text":"we","start":3130080,"end":3130240,"confidence":1,"speaker":"A"},{"text":"go.","start":3130240,"end":3130520,"confidence":1,"speaker":"A"},{"text":"So","start":3131320,"end":3131560,"confidence":0.9921875,"speaker":"A"},{"text":"the","start":3131560,"end":3131640,"confidence":0.9995117,"speaker":"A"},{"text":"CloudKit","start":3131640,"end":3132280,"confidence":0.9147949,"speaker":"A"},{"text":"service","start":3132440,"end":3132840,"confidence":0.99609375,"speaker":"A"},{"text":"has","start":3133320,"end":3133640,"confidence":1,"speaker":"A"},{"text":"a","start":3133640,"end":3133840,"confidence":0.9995117,"speaker":"A"},{"text":"client","start":3133840,"end":3134360,"confidence":0.99975586,"speaker":"A"},{"text":"and","start":3135320,"end":3135640,"confidence":0.984375,"speaker":"A"},{"text":"part","start":3135640,"end":3135840,"confidence":1,"speaker":"A"},{"text":"of","start":3135840,"end":3136000,"confidence":1,"speaker":"A"},{"text":"the","start":3136000,"end":3136160,"confidence":1,"speaker":"A"},{"text":"client","start":3136160,"end":3136600,"confidence":0.99975586,"speaker":"A"},{"text":"is","start":3136920,"end":3137240,"confidence":0.99658203,"speaker":"A"},{"text":"being","start":3137240,"end":3137560,"confidence":0.9995117,"speaker":"A"},{"text":"able","start":3137560,"end":3137960,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":3139960,"end":3140360,"confidence":1,"speaker":"A"},{"text":"say","start":3140440,"end":3140760,"confidence":0.9951172,"speaker":"A"},{"text":"what","start":3140760,"end":3140960,"confidence":0.9975586,"speaker":"A"},{"text":"transport","start":3140960,"end":3141520,"confidence":0.99853516,"speaker":"A"},{"text":"you","start":3141520,"end":3141760,"confidence":0.99609375,"speaker":"A"},{"text":"use","start":3141760,"end":3142040,"confidence":0.9970703,"speaker":"A"},{"text":"in","start":3142360,"end":3142640,"confidence":0.9169922,"speaker":"A"},{"text":"Open","start":3142640,"end":3142840,"confidence":0.9995117,"speaker":"A"},{"text":"API.","start":3142840,"end":3143560,"confidence":0.7491455,"speaker":"A"},{"text":"And","start":3144760,"end":3145160,"confidence":0.9868164,"speaker":"A"},{"text":"there's","start":3148850,"end":3149330,"confidence":0.84521484,"speaker":"A"},{"text":"two","start":3149330,"end":3149650,"confidence":0.99609375,"speaker":"A"},{"text":"transports","start":3149970,"end":3150730,"confidence":0.9951172,"speaker":"A"},{"text":"available","start":3150730,"end":3151010,"confidence":0.9995117,"speaker":"A"},{"text":"right","start":3151010,"end":3151330,"confidence":0.9995117,"speaker":"A"},{"text":"now.","start":3151330,"end":3151650,"confidence":0.9970703,"speaker":"A"},{"text":"One","start":3152770,"end":3153170,"confidence":0.9663086,"speaker":"A"},{"text":"is,","start":3153330,"end":3153730,"confidence":0.9975586,"speaker":"A"},{"text":"one","start":3156850,"end":3157170,"confidence":0.9892578,"speaker":"A"},{"text":"is","start":3157170,"end":3157490,"confidence":0.99853516,"speaker":"A"},{"text":"your","start":3157490,"end":3157810,"confidence":0.99658203,"speaker":"A"},{"text":"regular","start":3157810,"end":3158210,"confidence":1,"speaker":"A"},{"text":"URL","start":3158210,"end":3158770,"confidence":0.9992676,"speaker":"A"},{"text":"session","start":3158770,"end":3159130,"confidence":0.99934894,"speaker":"A"},{"text":"for","start":3159130,"end":3159290,"confidence":0.99853516,"speaker":"A"},{"text":"clients,","start":3159290,"end":3159730,"confidence":0.78100586,"speaker":"A"},{"text":"which.","start":3159890,"end":3160210,"confidence":0.99853516,"speaker":"A"},{"text":"That","start":3160210,"end":3160410,"confidence":0.9916992,"speaker":"A"},{"text":"makes","start":3160410,"end":3160610,"confidence":0.9951172,"speaker":"A"},{"text":"sense.","start":3160610,"end":3160930,"confidence":0.9995117,"speaker":"A"},{"text":"Right.","start":3160930,"end":3161250,"confidence":0.9897461,"speaker":"A"},{"text":"And","start":3161570,"end":3161890,"confidence":0.9921875,"speaker":"A"},{"text":"then","start":3161890,"end":3162089,"confidence":0.9892578,"speaker":"A"},{"text":"there's","start":3162089,"end":3162410,"confidence":0.9840495,"speaker":"A"},{"text":"the","start":3162410,"end":3162570,"confidence":0.9584961,"speaker":"A"},{"text":"Async","start":3162570,"end":3163170,"confidence":0.9949951,"speaker":"A"},{"text":"HTTP","start":3163170,"end":3163810,"confidence":0.9881592,"speaker":"A"},{"text":"client","start":3163810,"end":3164170,"confidence":0.9968262,"speaker":"A"},{"text":"which","start":3164170,"end":3164410,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":3164410,"end":3164690,"confidence":0.9995117,"speaker":"A"},{"text":"typically","start":3164690,"end":3165090,"confidence":0.99975586,"speaker":"A"},{"text":"used","start":3165090,"end":3165410,"confidence":0.99658203,"speaker":"A"},{"text":"like","start":3165570,"end":3165850,"confidence":0.9838867,"speaker":"A"},{"text":"Swift","start":3165850,"end":3166130,"confidence":0.89575195,"speaker":"A"},{"text":"NEO","start":3166130,"end":3166530,"confidence":0.94506836,"speaker":"A"},{"text":"based","start":3166530,"end":3166850,"confidence":0.9980469,"speaker":"A"},{"text":"for","start":3167170,"end":3167490,"confidence":0.99560547,"speaker":"A"},{"text":"servers.","start":3167490,"end":3167970,"confidence":0.90649414,"speaker":"A"},{"text":"The","start":3169330,"end":3169610,"confidence":0.99853516,"speaker":"A"},{"text":"thing","start":3169610,"end":3169770,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":3169770,"end":3169970,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":3169970,"end":3170170,"confidence":0.52441406,"speaker":"A"},{"text":"neither","start":3170170,"end":3170410,"confidence":0.99902344,"speaker":"A"},{"text":"of","start":3170410,"end":3170530,"confidence":0.9916992,"speaker":"A"},{"text":"those","start":3170530,"end":3170770,"confidence":0.9980469,"speaker":"A"},{"text":"are","start":3170930,"end":3171250,"confidence":0.99902344,"speaker":"A"},{"text":"available","start":3171250,"end":3171570,"confidence":0.99365234,"speaker":"A"},{"text":"in","start":3171730,"end":3172130,"confidence":0.9638672,"speaker":"A"},{"text":"wasp.","start":3172610,"end":3173170,"confidence":0.58813477,"speaker":"A"},{"text":"Do","start":3174290,"end":3174530,"confidence":0.6435547,"speaker":"A"},{"text":"you","start":3174530,"end":3174610,"confidence":0.99853516,"speaker":"A"},{"text":"know","start":3174610,"end":3174690,"confidence":0.9995117,"speaker":"A"},{"text":"what","start":3174690,"end":3174810,"confidence":0.9980469,"speaker":"A"},{"text":"WASM","start":3174810,"end":3175210,"confidence":0.78027344,"speaker":"A"},{"text":"is?","start":3175210,"end":3175490,"confidence":0.99853516,"speaker":"A"},{"text":"I","start":3176050,"end":3176290,"confidence":0.99902344,"speaker":"C"},{"text":"have","start":3176290,"end":3176410,"confidence":0.9995117,"speaker":"C"},{"text":"no","start":3176410,"end":3176570,"confidence":1,"speaker":"C"},{"text":"experience","start":3176570,"end":3176850,"confidence":1,"speaker":"C"},{"text":"with","start":3176850,"end":3177130,"confidence":0.9995117,"speaker":"C"},{"text":"it,","start":3177130,"end":3177290,"confidence":0.99853516,"speaker":"C"},{"text":"but","start":3177290,"end":3177450,"confidence":0.8720703,"speaker":"C"},{"text":"yes.","start":3177450,"end":3177810,"confidence":0.9963379,"speaker":"C"},{"text":"Okay.","start":3178850,"end":3179410,"confidence":0.9892578,"speaker":"A"},{"text":"It's.","start":3179490,"end":3179850,"confidence":0.96240234,"speaker":"A"},{"text":"It's","start":3179850,"end":3180290,"confidence":0.98811847,"speaker":"A"},{"text":"the","start":3180290,"end":3180570,"confidence":1,"speaker":"A"},{"text":"web","start":3180570,"end":3180810,"confidence":1,"speaker":"A"},{"text":"browser.","start":3180810,"end":3181210,"confidence":0.99869794,"speaker":"A"},{"text":"Right.","start":3181210,"end":3181490,"confidence":0.99853516,"speaker":"A"},{"text":"So.","start":3181890,"end":3182290,"confidence":0.98876953,"speaker":"A"},{"text":"So","start":3182690,"end":3182970,"confidence":0.9975586,"speaker":"A"},{"text":"you","start":3182970,"end":3183130,"confidence":1,"speaker":"A"},{"text":"really","start":3183130,"end":3183290,"confidence":1,"speaker":"A"},{"text":"can't","start":3183290,"end":3183490,"confidence":0.9998372,"speaker":"A"},{"text":"use","start":3183490,"end":3183690,"confidence":0.9995117,"speaker":"A"},{"text":"Miskit","start":3183690,"end":3184370,"confidence":0.95788574,"speaker":"A"},{"text":"in.","start":3184450,"end":3184850,"confidence":0.921875,"speaker":"A"},{"text":"In","start":3186450,"end":3186730,"confidence":0.99609375,"speaker":"A"},{"text":"the.","start":3186730,"end":3186930,"confidence":0.99609375,"speaker":"A"},{"text":"In","start":3186930,"end":3187170,"confidence":0.99658203,"speaker":"A"},{"text":"WASM","start":3187170,"end":3187690,"confidence":0.7368164,"speaker":"A"},{"text":"yet","start":3187690,"end":3187890,"confidence":0.85009766,"speaker":"A"},{"text":"because","start":3187890,"end":3188090,"confidence":1,"speaker":"A"},{"text":"there","start":3188090,"end":3188250,"confidence":1,"speaker":"A"},{"text":"is","start":3188250,"end":3188450,"confidence":0.9975586,"speaker":"A"},{"text":"no","start":3188450,"end":3188649,"confidence":0.9995117,"speaker":"A"},{"text":"transport.","start":3188649,"end":3189170,"confidence":0.998291,"speaker":"A"},{"text":"Now","start":3189170,"end":3189450,"confidence":0.9995117,"speaker":"A"},{"text":"having","start":3189450,"end":3189650,"confidence":1,"speaker":"A"},{"text":"said","start":3189650,"end":3189890,"confidence":1,"speaker":"A"},{"text":"that,","start":3189890,"end":3190210,"confidence":1,"speaker":"A"},{"text":"why","start":3190530,"end":3190850,"confidence":0.99902344,"speaker":"A"},{"text":"on","start":3190850,"end":3191050,"confidence":0.99902344,"speaker":"A"},{"text":"earth","start":3191050,"end":3191290,"confidence":1,"speaker":"A"},{"text":"would","start":3191290,"end":3191450,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":3191450,"end":3191730,"confidence":0.9995117,"speaker":"A"},{"text":"use.","start":3192050,"end":3192450,"confidence":0.99658203,"speaker":"A"},{"text":"Awesome.","start":3193090,"end":3193810,"confidence":0.7972819,"speaker":"A"},{"text":"Why","start":3194050,"end":3194330,"confidence":0.7753906,"speaker":"A"},{"text":"would","start":3194330,"end":3194450,"confidence":0.9667969,"speaker":"A"},{"text":"you","start":3194450,"end":3194530,"confidence":0.8652344,"speaker":"A"},{"text":"use","start":3194530,"end":3194650,"confidence":0.9169922,"speaker":"A"},{"text":"Miskit","start":3194650,"end":3195130,"confidence":0.9088135,"speaker":"A"},{"text":"in","start":3195130,"end":3195250,"confidence":0.99609375,"speaker":"A"},{"text":"the","start":3195250,"end":3195330,"confidence":0.9995117,"speaker":"A"},{"text":"browser?","start":3195330,"end":3195690,"confidence":1,"speaker":"A"},{"text":"Why","start":3195690,"end":3195930,"confidence":0.9995117,"speaker":"A"},{"text":"not","start":3195930,"end":3196090,"confidence":0.9995117,"speaker":"A"},{"text":"just","start":3196090,"end":3196250,"confidence":0.9995117,"speaker":"A"},{"text":"use","start":3196250,"end":3196450,"confidence":0.9995117,"speaker":"A"},{"text":"CloudKit","start":3196450,"end":3196970,"confidence":0.99780273,"speaker":"A"},{"text":"js?","start":3196970,"end":3197410,"confidence":0.8005371,"speaker":"A"},{"text":"So","start":3198380,"end":3198620,"confidence":0.98828125,"speaker":"A"},{"text":"that's","start":3199660,"end":3200100,"confidence":0.9996745,"speaker":"A"},{"text":"essentially,","start":3200100,"end":3200700,"confidence":0.9996338,"speaker":"A"},{"text":"you","start":3201580,"end":3201820,"confidence":0.765625,"speaker":"A"},{"text":"know,","start":3201820,"end":3202060,"confidence":0.77685547,"speaker":"A"},{"text":"What","start":3209260,"end":3209540,"confidence":0.99902344,"speaker":"A"},{"text":"other","start":3209540,"end":3209780,"confidence":0.9975586,"speaker":"A"},{"text":"questions","start":3209780,"end":3210340,"confidence":0.99975586,"speaker":"A"},{"text":"do","start":3210340,"end":3210500,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":3210500,"end":3210660,"confidence":1,"speaker":"A"},{"text":"have?","start":3210660,"end":3210940,"confidence":1,"speaker":"A"},{"text":"My","start":3215660,"end":3216060,"confidence":0.96240234,"speaker":"C"},{"text":"brain","start":3216300,"end":3216780,"confidence":0.99975586,"speaker":"C"},{"text":"is","start":3216780,"end":3217020,"confidence":0.9995117,"speaker":"C"},{"text":"mushy","start":3217020,"end":3217460,"confidence":0.9998372,"speaker":"C"},{"text":"right","start":3217460,"end":3217620,"confidence":0.9995117,"speaker":"C"},{"text":"now,","start":3217620,"end":3217900,"confidence":1,"speaker":"C"},{"text":"so","start":3217900,"end":3218300,"confidence":0.9770508,"speaker":"C"},{"text":"because","start":3221020,"end":3221340,"confidence":0.9970703,"speaker":"A"},{"text":"of","start":3221340,"end":3221540,"confidence":0.99609375,"speaker":"A"},{"text":"my","start":3221540,"end":3221700,"confidence":0.99853516,"speaker":"A"},{"text":"presentation","start":3221700,"end":3222300,"confidence":0.99975586,"speaker":"A"},{"text":"or","start":3222300,"end":3222540,"confidence":0.9902344,"speaker":"A"},{"text":"because","start":3222540,"end":3222860,"confidence":0.99853516,"speaker":"A"},{"text":"other","start":3223020,"end":3223380,"confidence":0.99902344,"speaker":"A"},{"text":"things,","start":3223380,"end":3223740,"confidence":0.9946289,"speaker":"C"},{"text":"I","start":3224570,"end":3224730,"confidence":0.98876953,"speaker":"C"},{"text":"got","start":3224730,"end":3224930,"confidence":0.9995117,"speaker":"C"},{"text":"two","start":3224930,"end":3225090,"confidence":0.9995117,"speaker":"C"},{"text":"hours","start":3225090,"end":3225290,"confidence":1,"speaker":"C"},{"text":"of","start":3225290,"end":3225450,"confidence":0.9873047,"speaker":"C"},{"text":"sleep.","start":3225450,"end":3225850,"confidence":0.9555664,"speaker":"C"},{"text":"Oh,","start":3226650,"end":3226970,"confidence":0.7734375,"speaker":"A"},{"text":"I'm","start":3226970,"end":3227130,"confidence":0.9970703,"speaker":"A"},{"text":"so","start":3227130,"end":3227290,"confidence":0.99365234,"speaker":"A"},{"text":"sorry.","start":3227290,"end":3227690,"confidence":0.9998372,"speaker":"A"},{"text":"So","start":3228170,"end":3228570,"confidence":0.95214844,"speaker":"C"},{"text":"I'm","start":3229770,"end":3230170,"confidence":0.97526044,"speaker":"C"},{"text":"following","start":3230170,"end":3230450,"confidence":0.99853516,"speaker":"C"},{"text":"as","start":3230450,"end":3230690,"confidence":0.9995117,"speaker":"C"},{"text":"best","start":3230690,"end":3230850,"confidence":0.9980469,"speaker":"C"},{"text":"as","start":3230850,"end":3231010,"confidence":0.9941406,"speaker":"C"},{"text":"I","start":3231010,"end":3231170,"confidence":0.9995117,"speaker":"C"},{"text":"can.","start":3231170,"end":3231450,"confidence":0.99902344,"speaker":"C"},{"text":"Snuggling.","start":3234330,"end":3235050,"confidence":0.87927246,"speaker":"A"},{"text":"Yeah,","start":3237050,"end":3237410,"confidence":0.96761066,"speaker":"A"},{"text":"the","start":3237410,"end":3237570,"confidence":0.99609375,"speaker":"A"},{"text":"intro","start":3237570,"end":3238010,"confidence":0.99975586,"speaker":"A"},{"text":"was","start":3238090,"end":3238410,"confidence":0.99853516,"speaker":"A"},{"text":"basically","start":3238410,"end":3238890,"confidence":0.9995117,"speaker":"A"},{"text":"how","start":3239290,"end":3239610,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":3239610,"end":3239930,"confidence":0.9946289,"speaker":"A"},{"text":"originally","start":3240490,"end":3241010,"confidence":0.9998372,"speaker":"A"},{"text":"built","start":3241010,"end":3241250,"confidence":0.992513,"speaker":"A"},{"text":"it","start":3241250,"end":3241410,"confidence":0.9814453,"speaker":"A"},{"text":"for","start":3241410,"end":3241570,"confidence":0.9995117,"speaker":"A"},{"text":"hard","start":3241570,"end":3241730,"confidence":0.4362793,"speaker":"A"},{"text":"Twitch","start":3241730,"end":3242050,"confidence":0.9111328,"speaker":"A"},{"text":"in","start":3242050,"end":3242210,"confidence":0.99316406,"speaker":"A"},{"text":"2020","start":3242210,"end":3242810,"confidence":0.99854,"speaker":"A"},{"text":"for","start":3243210,"end":3243490,"confidence":0.94628906,"speaker":"A"},{"text":"a","start":3243490,"end":3243650,"confidence":0.7871094,"speaker":"A"},{"text":"private","start":3243650,"end":3243890,"confidence":1,"speaker":"A"},{"text":"database","start":3243890,"end":3244570,"confidence":0.99576825,"speaker":"A"},{"text":"login","start":3244730,"end":3245450,"confidence":0.9367676,"speaker":"A"},{"text":"for","start":3245930,"end":3246210,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":3246210,"end":3246370,"confidence":0.9980469,"speaker":"A"},{"text":"Apple","start":3246370,"end":3246650,"confidence":0.99975586,"speaker":"A"},{"text":"Watch","start":3246650,"end":3246890,"confidence":0.8803711,"speaker":"A"},{"text":"because","start":3246890,"end":3247170,"confidence":0.99853516,"speaker":"A"},{"text":"I","start":3247170,"end":3247290,"confidence":0.9975586,"speaker":"A"},{"text":"don't","start":3247290,"end":3247450,"confidence":0.99658203,"speaker":"A"},{"text":"want","start":3247450,"end":3247530,"confidence":0.8720703,"speaker":"A"},{"text":"to","start":3247530,"end":3247610,"confidence":0.9980469,"speaker":"A"},{"text":"have","start":3247610,"end":3247690,"confidence":0.9995117,"speaker":"A"},{"text":"a","start":3247690,"end":3247810,"confidence":0.99853516,"speaker":"A"},{"text":"login","start":3247810,"end":3248210,"confidence":0.99731445,"speaker":"A"},{"text":"screen.","start":3248210,"end":3248490,"confidence":0.99975586,"speaker":"A"},{"text":"And","start":3248490,"end":3248690,"confidence":0.98583984,"speaker":"A"},{"text":"so","start":3248690,"end":3248810,"confidence":0.99902344,"speaker":"A"},{"text":"basically","start":3248810,"end":3249210,"confidence":0.9995117,"speaker":"A"},{"text":"there's","start":3249210,"end":3249570,"confidence":0.99934894,"speaker":"A"},{"text":"a","start":3249570,"end":3249690,"confidence":0.99853516,"speaker":"A"},{"text":"way","start":3249690,"end":3249810,"confidence":0.99853516,"speaker":"A"},{"text":"in","start":3249810,"end":3249930,"confidence":0.9980469,"speaker":"A"},{"text":"the","start":3249930,"end":3250010,"confidence":0.99902344,"speaker":"A"},{"text":"web","start":3250010,"end":3250170,"confidence":0.9995117,"speaker":"A"},{"text":"browser","start":3250170,"end":3250450,"confidence":1,"speaker":"A"},{"text":"to","start":3250450,"end":3250610,"confidence":0.99902344,"speaker":"A"},{"text":"link","start":3250610,"end":3250810,"confidence":0.99975586,"speaker":"A"},{"text":"your","start":3250810,"end":3250970,"confidence":0.99902344,"speaker":"A"},{"text":"Apple","start":3250970,"end":3251290,"confidence":0.9333496,"speaker":"A"},{"text":"Watch","start":3251290,"end":3251610,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":3251770,"end":3252050,"confidence":0.9975586,"speaker":"A"},{"text":"your","start":3252050,"end":3252210,"confidence":0.99902344,"speaker":"A"},{"text":"account","start":3252210,"end":3252490,"confidence":1,"speaker":"A"},{"text":"and","start":3252490,"end":3252770,"confidence":0.99316406,"speaker":"A"},{"text":"then","start":3252770,"end":3252970,"confidence":0.8930664,"speaker":"A"},{"text":"from","start":3252970,"end":3253130,"confidence":1,"speaker":"A"},{"text":"there","start":3253130,"end":3253290,"confidence":1,"speaker":"A"},{"text":"you","start":3253290,"end":3253450,"confidence":1,"speaker":"A"},{"text":"don't","start":3253450,"end":3253610,"confidence":1,"speaker":"A"},{"text":"need","start":3253610,"end":3253730,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":3253730,"end":3253850,"confidence":0.95947266,"speaker":"A"},{"text":"authenticate","start":3253850,"end":3254370,"confidence":0.99975586,"speaker":"A"},{"text":"anymore.","start":3254370,"end":3254890,"confidence":0.991862,"speaker":"A"},{"text":"Nice.","start":3255280,"end":3255600,"confidence":0.94921875,"speaker":"A"},{"text":"I","start":3255760,"end":3256000,"confidence":0.9970703,"speaker":"A"},{"text":"built","start":3256000,"end":3256280,"confidence":0.8284505,"speaker":"A"},{"text":"that","start":3256280,"end":3256440,"confidence":0.9692383,"speaker":"A"},{"text":"all","start":3256440,"end":3256600,"confidence":0.99609375,"speaker":"A"},{"text":"from","start":3256600,"end":3256800,"confidence":1,"speaker":"A"},{"text":"hand","start":3256800,"end":3257120,"confidence":0.9951172,"speaker":"A"},{"text":"and","start":3258400,"end":3258680,"confidence":0.73095703,"speaker":"A"},{"text":"then","start":3258680,"end":3258960,"confidence":0.9941406,"speaker":"A"},{"text":"in","start":3259200,"end":3259520,"confidence":0.9970703,"speaker":"A"},{"text":"23","start":3259520,"end":3260040,"confidence":0.9939,"speaker":"A"},{"text":"they","start":3260040,"end":3260280,"confidence":0.9995117,"speaker":"A"},{"text":"came","start":3260280,"end":3260440,"confidence":0.9995117,"speaker":"A"},{"text":"out","start":3260440,"end":3260560,"confidence":0.94921875,"speaker":"A"},{"text":"with","start":3260560,"end":3260680,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":3260680,"end":3260800,"confidence":0.93652344,"speaker":"A"},{"text":"Open","start":3260800,"end":3261000,"confidence":0.9995117,"speaker":"A"},{"text":"API","start":3261000,"end":3261520,"confidence":0.9807129,"speaker":"A"},{"text":"generator","start":3261520,"end":3262160,"confidence":0.9995117,"speaker":"A"},{"text":"which","start":3262640,"end":3263000,"confidence":0.99609375,"speaker":"A"},{"text":"was","start":3263000,"end":3263280,"confidence":0.64746094,"speaker":"A"},{"text":"like,","start":3263280,"end":3263480,"confidence":0.97558594,"speaker":"A"},{"text":"oh","start":3263480,"end":3263760,"confidence":0.91674805,"speaker":"A"},{"text":"wait,","start":3263760,"end":3264160,"confidence":0.9980469,"speaker":"A"},{"text":"what","start":3264160,"end":3264440,"confidence":0.99121094,"speaker":"A"},{"text":"if","start":3264440,"end":3264720,"confidence":0.99853516,"speaker":"A"},{"text":"I","start":3264800,"end":3265040,"confidence":0.9980469,"speaker":"A"},{"text":"can","start":3265040,"end":3265160,"confidence":0.99658203,"speaker":"A"},{"text":"create","start":3265160,"end":3265320,"confidence":0.99902344,"speaker":"A"},{"text":"an","start":3265320,"end":3265480,"confidence":0.96777344,"speaker":"A"},{"text":"open","start":3265480,"end":3265720,"confidence":0.9995117,"speaker":"A"},{"text":"API","start":3265720,"end":3266320,"confidence":0.98046875,"speaker":"A"},{"text":"file","start":3266800,"end":3267280,"confidence":0.98046875,"speaker":"A"},{"text":"out","start":3267520,"end":3267840,"confidence":0.99560547,"speaker":"A"},{"text":"of","start":3267840,"end":3268160,"confidence":0.99853516,"speaker":"A"},{"text":"Apple's","start":3268320,"end":3269040,"confidence":0.9937744,"speaker":"A"},{"text":"10","start":3269280,"end":3269600,"confidence":0.99951,"speaker":"A"},{"text":"year","start":3269600,"end":3269800,"confidence":0.9995117,"speaker":"A"},{"text":"old","start":3269800,"end":3270000,"confidence":0.99902344,"speaker":"A"},{"text":"documentation?","start":3270000,"end":3270800,"confidence":0.9923828,"speaker":"A"},{"text":"That'd","start":3273120,"end":3273520,"confidence":0.8873698,"speaker":"A"},{"text":"be","start":3273520,"end":3273640,"confidence":1,"speaker":"A"},{"text":"a","start":3273640,"end":3273760,"confidence":0.99902344,"speaker":"A"},{"text":"lot","start":3273760,"end":3273840,"confidence":1,"speaker":"A"},{"text":"of","start":3273840,"end":3273960,"confidence":0.9975586,"speaker":"A"},{"text":"work,","start":3273960,"end":3274160,"confidence":1,"speaker":"A"},{"text":"but","start":3274160,"end":3274400,"confidence":0.6777344,"speaker":"A"},{"text":"I","start":3274400,"end":3274600,"confidence":0.9995117,"speaker":"A"},{"text":"could","start":3274600,"end":3274760,"confidence":0.98876953,"speaker":"A"},{"text":"do","start":3274760,"end":3274920,"confidence":0.9995117,"speaker":"A"},{"text":"it.","start":3274920,"end":3275200,"confidence":0.9995117,"speaker":"A"},{"text":"And","start":3275520,"end":3275920,"confidence":0.8173828,"speaker":"A"},{"text":"I","start":3276000,"end":3276280,"confidence":0.99902344,"speaker":"A"},{"text":"don't","start":3276280,"end":3276480,"confidence":0.9949544,"speaker":"A"},{"text":"know","start":3276480,"end":3276560,"confidence":0.99902344,"speaker":"A"},{"text":"if","start":3276560,"end":3276640,"confidence":1,"speaker":"A"},{"text":"you","start":3276640,"end":3276760,"confidence":0.9995117,"speaker":"A"},{"text":"heard,","start":3276760,"end":3277120,"confidence":0.99902344,"speaker":"A"},{"text":"but","start":3277600,"end":3278000,"confidence":0.9921875,"speaker":"A"},{"text":"there","start":3278960,"end":3279240,"confidence":0.9995117,"speaker":"A"},{"text":"was","start":3279240,"end":3279400,"confidence":0.9589844,"speaker":"A"},{"text":"this","start":3279400,"end":3279560,"confidence":0.9746094,"speaker":"A"},{"text":"thing","start":3279560,"end":3279720,"confidence":0.9995117,"speaker":"A"},{"text":"that","start":3279720,"end":3279840,"confidence":0.99902344,"speaker":"A"},{"text":"came","start":3279840,"end":3279960,"confidence":0.99853516,"speaker":"A"},{"text":"out","start":3279960,"end":3280240,"confidence":0.9980469,"speaker":"A"},{"text":"a","start":3280240,"end":3280480,"confidence":0.99853516,"speaker":"A"},{"text":"couple","start":3280480,"end":3280720,"confidence":0.9992676,"speaker":"A"},{"text":"years","start":3280720,"end":3280920,"confidence":0.9995117,"speaker":"A"},{"text":"ago","start":3280920,"end":3281200,"confidence":0.9980469,"speaker":"A"},{"text":"called","start":3281780,"end":3282020,"confidence":0.99609375,"speaker":"A"},{"text":"AI","start":3282580,"end":3283220,"confidence":0.95092773,"speaker":"A"},{"text":"and","start":3283940,"end":3284340,"confidence":0.9873047,"speaker":"A"},{"text":"it's","start":3284980,"end":3285340,"confidence":0.9996745,"speaker":"A"},{"text":"really","start":3285340,"end":3285500,"confidence":0.9995117,"speaker":"A"},{"text":"good","start":3285500,"end":3285700,"confidence":0.9995117,"speaker":"A"},{"text":"at","start":3285700,"end":3285900,"confidence":0.98095703,"speaker":"A"},{"text":"creating","start":3285900,"end":3286260,"confidence":0.9995117,"speaker":"A"},{"text":"documentation","start":3286260,"end":3286940,"confidence":0.99990237,"speaker":"A"},{"text":"for","start":3286940,"end":3287180,"confidence":1,"speaker":"A"},{"text":"your","start":3287180,"end":3287340,"confidence":0.9995117,"speaker":"A"},{"text":"code,","start":3287340,"end":3287660,"confidence":0.94222003,"speaker":"A"},{"text":"but","start":3287660,"end":3287900,"confidence":0.9975586,"speaker":"A"},{"text":"it's","start":3287900,"end":3288100,"confidence":0.9998372,"speaker":"A"},{"text":"also","start":3288100,"end":3288260,"confidence":0.9995117,"speaker":"A"},{"text":"really","start":3288260,"end":3288500,"confidence":0.5620117,"speaker":"A"},{"text":"good","start":3288500,"end":3288700,"confidence":0.9995117,"speaker":"A"},{"text":"at","start":3288700,"end":3288860,"confidence":0.9995117,"speaker":"A"},{"text":"creating","start":3288860,"end":3289140,"confidence":0.96777344,"speaker":"A"},{"text":"code","start":3289140,"end":3289420,"confidence":0.9996745,"speaker":"A"},{"text":"for","start":3289420,"end":3289620,"confidence":0.9995117,"speaker":"A"},{"text":"your","start":3289620,"end":3289820,"confidence":0.9995117,"speaker":"A"},{"text":"documentation.","start":3289820,"end":3290500,"confidence":0.99902344,"speaker":"A"},{"text":"And","start":3291300,"end":3291580,"confidence":0.8925781,"speaker":"A"},{"text":"so","start":3291580,"end":3291700,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":3291700,"end":3291820,"confidence":0.9975586,"speaker":"A"},{"text":"was","start":3291820,"end":3292020,"confidence":0.9995117,"speaker":"A"},{"text":"like,","start":3292020,"end":3292340,"confidence":0.99658203,"speaker":"A"},{"text":"oh","start":3292500,"end":3292980,"confidence":0.9580078,"speaker":"A"},{"text":"yeah,","start":3293460,"end":3293940,"confidence":0.9975586,"speaker":"A"},{"text":"this","start":3293940,"end":3294220,"confidence":0.9951172,"speaker":"A"},{"text":"is","start":3294220,"end":3294380,"confidence":0.99853516,"speaker":"A"},{"text":"great.","start":3294380,"end":3294660,"confidence":0.9980469,"speaker":"A"},{"text":"Like","start":3295060,"end":3295460,"confidence":0.9238281,"speaker":"A"},{"text":"I","start":3295460,"end":3295740,"confidence":0.9707031,"speaker":"A"},{"text":"can","start":3295740,"end":3295900,"confidence":0.99658203,"speaker":"A"},{"text":"just,","start":3295900,"end":3296180,"confidence":0.9980469,"speaker":"A"},{"text":"I","start":3296740,"end":3296980,"confidence":0.97753906,"speaker":"A"},{"text":"can","start":3296980,"end":3297140,"confidence":0.7270508,"speaker":"A"},{"text":"just","start":3297140,"end":3297420,"confidence":0.9995117,"speaker":"A"},{"text":"Feed","start":3297420,"end":3297739,"confidence":0.9968262,"speaker":"A"},{"text":"it","start":3297739,"end":3297900,"confidence":0.8671875,"speaker":"A"},{"text":"the","start":3297900,"end":3298060,"confidence":0.99853516,"speaker":"A"},{"text":"documentation","start":3298060,"end":3298740,"confidence":0.99921876,"speaker":"A"},{"text":"and","start":3298980,"end":3299380,"confidence":0.9238281,"speaker":"A"},{"text":"go","start":3301140,"end":3301420,"confidence":0.9970703,"speaker":"A"},{"text":"from","start":3301420,"end":3301620,"confidence":0.9995117,"speaker":"A"},{"text":"there.","start":3301620,"end":3301940,"confidence":0.9995117,"speaker":"A"},{"text":"And,","start":3302020,"end":3302340,"confidence":0.97998047,"speaker":"A"},{"text":"like,","start":3302340,"end":3302660,"confidence":0.9477539,"speaker":"A"},{"text":"basically,","start":3302820,"end":3303300,"confidence":0.99975586,"speaker":"A"},{"text":"I've","start":3303300,"end":3303540,"confidence":0.99072266,"speaker":"A"},{"text":"been","start":3303540,"end":3303660,"confidence":0.9902344,"speaker":"A"},{"text":"going","start":3303660,"end":3303860,"confidence":0.9995117,"speaker":"A"},{"text":"step","start":3303860,"end":3304060,"confidence":0.9995117,"speaker":"A"},{"text":"by","start":3304060,"end":3304260,"confidence":1,"speaker":"A"},{"text":"step","start":3304260,"end":3304580,"confidence":1,"speaker":"A"},{"text":"through.","start":3304740,"end":3305140,"confidence":0.98876953,"speaker":"A"},{"text":"Like","start":3305940,"end":3306260,"confidence":0.9980469,"speaker":"A"},{"text":"I","start":3306260,"end":3306460,"confidence":1,"speaker":"A"},{"text":"said,","start":3306460,"end":3306620,"confidence":1,"speaker":"A"},{"text":"if","start":3306620,"end":3306820,"confidence":0.6225586,"speaker":"A"},{"text":"you","start":3306820,"end":3306980,"confidence":1,"speaker":"A"},{"text":"looked","start":3306980,"end":3307220,"confidence":0.9802246,"speaker":"A"},{"text":"at","start":3307220,"end":3307340,"confidence":0.9995117,"speaker":"A"},{"text":"the","start":3307340,"end":3307620,"confidence":0.94140625,"speaker":"A"},{"text":"miskit","start":3307700,"end":3308500,"confidence":0.876709,"speaker":"A"},{"text":"repo,","start":3308780,"end":3309300,"confidence":0.99072266,"speaker":"A"},{"text":"like,","start":3309300,"end":3309580,"confidence":0.9838867,"speaker":"A"},{"text":"I'm","start":3309580,"end":3309820,"confidence":0.9995117,"speaker":"A"},{"text":"going","start":3309820,"end":3309940,"confidence":0.9995117,"speaker":"A"},{"text":"through","start":3309940,"end":3310140,"confidence":0.9995117,"speaker":"A"},{"text":"step","start":3310140,"end":3310340,"confidence":0.9946289,"speaker":"A"},{"text":"by","start":3310340,"end":3310500,"confidence":0.99902344,"speaker":"A"},{"text":"step","start":3310500,"end":3310660,"confidence":1,"speaker":"A"},{"text":"and","start":3310660,"end":3310820,"confidence":0.93896484,"speaker":"A"},{"text":"adding","start":3310820,"end":3311260,"confidence":0.998291,"speaker":"A"},{"text":"new","start":3311660,"end":3312060,"confidence":0.9995117,"speaker":"A"},{"text":"APIs","start":3312380,"end":3313100,"confidence":0.98168945,"speaker":"A"},{"text":"based","start":3314300,"end":3314620,"confidence":0.9995117,"speaker":"A"},{"text":"on","start":3314620,"end":3314780,"confidence":0.9995117,"speaker":"A"},{"text":"what's","start":3314780,"end":3315020,"confidence":0.9996745,"speaker":"A"},{"text":"available","start":3315020,"end":3315220,"confidence":1,"speaker":"A"},{"text":"in","start":3315220,"end":3315460,"confidence":0.95654297,"speaker":"A"},{"text":"the","start":3315460,"end":3315580,"confidence":0.99902344,"speaker":"A"},{"text":"documentation,","start":3315580,"end":3316300,"confidence":0.99677736,"speaker":"A"},{"text":"piece","start":3316700,"end":3317060,"confidence":0.9938151,"speaker":"A"},{"text":"by","start":3317060,"end":3317220,"confidence":0.9291992,"speaker":"A"},{"text":"piece.","start":3317220,"end":3317500,"confidence":0.99332684,"speaker":"A"},{"text":"And","start":3317500,"end":3317660,"confidence":0.99121094,"speaker":"A"},{"text":"I","start":3317660,"end":3317740,"confidence":0.9995117,"speaker":"A"},{"text":"would","start":3317740,"end":3317820,"confidence":1,"speaker":"A"},{"text":"say","start":3317820,"end":3317940,"confidence":1,"speaker":"A"},{"text":"at","start":3317940,"end":3318060,"confidence":0.9995117,"speaker":"A"},{"text":"this","start":3318060,"end":3318180,"confidence":1,"speaker":"A"},{"text":"point,","start":3318180,"end":3318340,"confidence":0.99902344,"speaker":"A"},{"text":"it's","start":3318340,"end":3318580,"confidence":0.9899089,"speaker":"A"},{"text":"like","start":3318580,"end":3318860,"confidence":0.9975586,"speaker":"A"},{"text":"most","start":3319340,"end":3319660,"confidence":1,"speaker":"A"},{"text":"of","start":3319660,"end":3319820,"confidence":0.99902344,"speaker":"A"},{"text":"the","start":3319820,"end":3320020,"confidence":0.99658203,"speaker":"A"},{"text":"really,","start":3320020,"end":3320380,"confidence":0.99658203,"speaker":"A"},{"text":"like","start":3320620,"end":3320940,"confidence":0.98876953,"speaker":"A"},{"text":"80%","start":3320940,"end":3321500,"confidence":0.96655,"speaker":"A"},{"text":"of","start":3321500,"end":3321780,"confidence":0.7285156,"speaker":"A"},{"text":"that","start":3321780,"end":3321940,"confidence":0.9941406,"speaker":"A"},{"text":"people","start":3321940,"end":3322140,"confidence":1,"speaker":"A"},{"text":"use","start":3322140,"end":3322420,"confidence":0.9995117,"speaker":"A"},{"text":"is","start":3322420,"end":3322660,"confidence":0.98876953,"speaker":"A"},{"text":"there.","start":3322660,"end":3322940,"confidence":0.9951172,"speaker":"A"},{"text":"There's","start":3322940,"end":3323340,"confidence":0.9998372,"speaker":"A"},{"text":"like,","start":3323340,"end":3323500,"confidence":0.99121094,"speaker":"A"},{"text":"stuff","start":3323500,"end":3323780,"confidence":0.9995117,"speaker":"A"},{"text":"like","start":3323780,"end":3323980,"confidence":0.99902344,"speaker":"A"},{"text":"subscriptions","start":3323980,"end":3324619,"confidence":0.99501956,"speaker":"A"},{"text":"and","start":3324619,"end":3324940,"confidence":0.99658203,"speaker":"A"},{"text":"zones","start":3324940,"end":3325300,"confidence":0.95703125,"speaker":"A"},{"text":"that","start":3325300,"end":3325660,"confidence":0.99316406,"speaker":"A"},{"text":"I'm","start":3325980,"end":3326340,"confidence":0.9868164,"speaker":"A"},{"text":"still","start":3326340,"end":3326500,"confidence":0.9975586,"speaker":"A"},{"text":"trying","start":3326500,"end":3326700,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":3326700,"end":3326860,"confidence":0.9995117,"speaker":"A"},{"text":"figure","start":3326860,"end":3327140,"confidence":0.99975586,"speaker":"A"},{"text":"out,","start":3327140,"end":3327420,"confidence":0.99121094,"speaker":"A"},{"text":"but","start":3328460,"end":3328780,"confidence":0.9941406,"speaker":"A"},{"text":"it's.","start":3328780,"end":3329100,"confidence":0.9900716,"speaker":"A"},{"text":"It's","start":3329100,"end":3329340,"confidence":0.98746747,"speaker":"A"},{"text":"pretty","start":3329340,"end":3329540,"confidence":0.9991862,"speaker":"A"},{"text":"close","start":3329540,"end":3329740,"confidence":0.9995117,"speaker":"A"},{"text":"to","start":3329740,"end":3329980,"confidence":0.9975586,"speaker":"A"},{"text":"done","start":3329980,"end":3330260,"confidence":0.95410156,"speaker":"A"},{"text":"at","start":3330260,"end":3330460,"confidence":0.99902344,"speaker":"A"},{"text":"this","start":3330460,"end":3330620,"confidence":0.95751953,"speaker":"A"},{"text":"point.","start":3330620,"end":3330940,"confidence":0.66552734,"speaker":"A"},{"text":"Mm.","start":3331260,"end":3331900,"confidence":0.62402344,"speaker":"B"},{"text":"If","start":3335110,"end":3335230,"confidence":0.56103516,"speaker":"A"},{"text":"you","start":3335230,"end":3335350,"confidence":0.99902344,"speaker":"A"},{"text":"use","start":3335350,"end":3335510,"confidence":0.9975586,"speaker":"A"},{"text":"it.","start":3335510,"end":3335830,"confidence":0.5029297,"speaker":"A"},{"text":"Yeah,","start":3336230,"end":3336550,"confidence":0.9943034,"speaker":"C"},{"text":"it's","start":3336550,"end":3336630,"confidence":0.94905597,"speaker":"C"},{"text":"one","start":3336630,"end":3336750,"confidence":0.9902344,"speaker":"C"},{"text":"of","start":3336750,"end":3336870,"confidence":0.99853516,"speaker":"C"},{"text":"those.","start":3336870,"end":3337110,"confidence":0.9760742,"speaker":"C"},{"text":"Because","start":3337270,"end":3337630,"confidence":0.7348633,"speaker":"A"},{"text":"I.","start":3337630,"end":3337990,"confidence":0.86621094,"speaker":"A"},{"text":"Go","start":3338070,"end":3338350,"confidence":0.9902344,"speaker":"A"},{"text":"ahead.","start":3338350,"end":3338590,"confidence":0.9980469,"speaker":"A"},{"text":"Yeah.","start":3338590,"end":3338950,"confidence":0.99397784,"speaker":"C"},{"text":"I","start":3338950,"end":3339110,"confidence":0.49267578,"speaker":"C"},{"text":"was","start":3339110,"end":3339230,"confidence":0.9189453,"speaker":"C"},{"text":"gonna","start":3339230,"end":3339430,"confidence":0.83776855,"speaker":"C"},{"text":"say","start":3339430,"end":3339510,"confidence":1,"speaker":"C"},{"text":"it's","start":3339510,"end":3339670,"confidence":0.9998372,"speaker":"C"},{"text":"one","start":3339670,"end":3339750,"confidence":1,"speaker":"C"},{"text":"of","start":3339750,"end":3339830,"confidence":0.9995117,"speaker":"C"},{"text":"those","start":3339830,"end":3339950,"confidence":0.9995117,"speaker":"C"},{"text":"projects","start":3339950,"end":3340310,"confidence":0.99975586,"speaker":"C"},{"text":"that","start":3340310,"end":3340430,"confidence":1,"speaker":"C"},{"text":"makes","start":3340430,"end":3340590,"confidence":0.9995117,"speaker":"C"},{"text":"me","start":3340590,"end":3340750,"confidence":0.9995117,"speaker":"C"},{"text":"want","start":3340750,"end":3340910,"confidence":0.9604492,"speaker":"C"},{"text":"to","start":3340910,"end":3341070,"confidence":1,"speaker":"C"},{"text":"set","start":3341070,"end":3341230,"confidence":1,"speaker":"C"},{"text":"up","start":3341230,"end":3341390,"confidence":0.9995117,"speaker":"C"},{"text":"a.","start":3341390,"end":3341670,"confidence":0.96240234,"speaker":"C"},{"text":"Like","start":3342150,"end":3342470,"confidence":0.9941406,"speaker":"C"},{"text":"a","start":3342470,"end":3342750,"confidence":0.99902344,"speaker":"C"},{"text":"vapor","start":3342750,"end":3343310,"confidence":0.98551434,"speaker":"C"},{"text":"server","start":3343310,"end":3343630,"confidence":0.9995117,"speaker":"C"},{"text":"or","start":3343630,"end":3343790,"confidence":0.99853516,"speaker":"C"},{"text":"something","start":3343790,"end":3344030,"confidence":1,"speaker":"C"},{"text":"just","start":3344030,"end":3344270,"confidence":1,"speaker":"C"},{"text":"to","start":3344270,"end":3344390,"confidence":1,"speaker":"C"},{"text":"do","start":3344390,"end":3344510,"confidence":0.9995117,"speaker":"C"},{"text":"some","start":3344510,"end":3344670,"confidence":1,"speaker":"C"},{"text":"Swift","start":3344670,"end":3344990,"confidence":0.99975586,"speaker":"C"},{"text":"on","start":3344990,"end":3345110,"confidence":1,"speaker":"C"},{"text":"the","start":3345110,"end":3345230,"confidence":1,"speaker":"C"},{"text":"server.","start":3345230,"end":3345670,"confidence":0.99975586,"speaker":"C"},{"text":"Yeah.","start":3346630,"end":3347110,"confidence":0.9916992,"speaker":"A"},{"text":"Or","start":3347270,"end":3347590,"confidence":0.92041016,"speaker":"A"},{"text":"just","start":3347590,"end":3347830,"confidence":0.99902344,"speaker":"A"},{"text":"like,","start":3347830,"end":3348150,"confidence":0.99658203,"speaker":"A"},{"text":"I","start":3348870,"end":3349150,"confidence":0.9760742,"speaker":"A"},{"text":"wonder","start":3349150,"end":3349390,"confidence":0.9980469,"speaker":"A"},{"text":"if","start":3349390,"end":3349510,"confidence":0.6303711,"speaker":"A"},{"text":"there's","start":3349510,"end":3349710,"confidence":0.867513,"speaker":"A"},{"text":"like,","start":3349710,"end":3349830,"confidence":0.9819336,"speaker":"A"},{"text":"something","start":3349830,"end":3349990,"confidence":0.99902344,"speaker":"A"},{"text":"you","start":3349990,"end":3350189,"confidence":0.9926758,"speaker":"A"},{"text":"do","start":3350189,"end":3350309,"confidence":0.99853516,"speaker":"A"},{"text":"on","start":3350309,"end":3350430,"confidence":0.9970703,"speaker":"A"},{"text":"a","start":3350430,"end":3350590,"confidence":0.9946289,"speaker":"A"},{"text":"pie,","start":3350590,"end":3350950,"confidence":0.7319336,"speaker":"A"},{"text":"like","start":3351750,"end":3352150,"confidence":0.97265625,"speaker":"A"},{"text":"just","start":3352230,"end":3352470,"confidence":0.99853516,"speaker":"A"},{"text":"hook","start":3352470,"end":3352630,"confidence":0.99902344,"speaker":"A"},{"text":"it","start":3352630,"end":3352750,"confidence":0.99853516,"speaker":"A"},{"text":"up","start":3352750,"end":3352870,"confidence":1,"speaker":"A"},{"text":"to","start":3352870,"end":3352990,"confidence":1,"speaker":"A"},{"text":"a","start":3352990,"end":3353110,"confidence":0.9946289,"speaker":"A"},{"text":"CloudKit","start":3353110,"end":3353550,"confidence":0.9953613,"speaker":"A"},{"text":"database.","start":3353550,"end":3353990,"confidence":1,"speaker":"A"},{"text":"Like,","start":3353990,"end":3354190,"confidence":0.99121094,"speaker":"A"},{"text":"there's","start":3354190,"end":3354430,"confidence":0.9998372,"speaker":"A"},{"text":"a","start":3354430,"end":3354550,"confidence":1,"speaker":"A"},{"text":"lot","start":3354550,"end":3354710,"confidence":1,"speaker":"A"},{"text":"you","start":3354710,"end":3354870,"confidence":1,"speaker":"A"},{"text":"could","start":3354870,"end":3354990,"confidence":0.98828125,"speaker":"A"},{"text":"do","start":3354990,"end":3355150,"confidence":1,"speaker":"A"},{"text":"here","start":3355150,"end":3355350,"confidence":1,"speaker":"A"},{"text":"because","start":3355350,"end":3355550,"confidence":0.8598633,"speaker":"A"},{"text":"all","start":3355550,"end":3355710,"confidence":0.9995117,"speaker":"A"},{"text":"you","start":3355710,"end":3355870,"confidence":1,"speaker":"A"},{"text":"need","start":3355870,"end":3356030,"confidence":0.99902344,"speaker":"A"},{"text":"is","start":3356030,"end":3356310,"confidence":0.97314453,"speaker":"A"},{"text":"decent","start":3356710,"end":3357150,"confidence":0.9091797,"speaker":"A"},{"text":"os.","start":3357150,"end":3357510,"confidence":0.95581055,"speaker":"A"},{"text":"I","start":3358950,"end":3359230,"confidence":0.9995117,"speaker":"A"},{"text":"don't","start":3359230,"end":3359430,"confidence":0.9998372,"speaker":"A"},{"text":"know","start":3359430,"end":3359550,"confidence":0.9995117,"speaker":"A"},{"text":"anything","start":3359550,"end":3359870,"confidence":0.99975586,"speaker":"A"},{"text":"about","start":3359870,"end":3360030,"confidence":0.9995117,"speaker":"A"},{"text":"sharing.","start":3360030,"end":3360430,"confidence":0.9663086,"speaker":"A"},{"text":"I","start":3360430,"end":3360670,"confidence":1,"speaker":"A"},{"text":"haven't","start":3360670,"end":3360870,"confidence":0.9992676,"speaker":"A"},{"text":"done","start":3360870,"end":3360990,"confidence":0.9995117,"speaker":"A"},{"text":"anything","start":3360990,"end":3361310,"confidence":0.99975586,"speaker":"A"},{"text":"with","start":3361310,"end":3361470,"confidence":0.8676758,"speaker":"A"},{"text":"sharing","start":3361470,"end":3361830,"confidence":0.99731445,"speaker":"A"},{"text":"yet,","start":3361830,"end":3362110,"confidence":0.98779297,"speaker":"A"},{"text":"so","start":3362110,"end":3362310,"confidence":0.99902344,"speaker":"A"},{"text":"I","start":3362310,"end":3362430,"confidence":0.9663086,"speaker":"A"},{"text":"still","start":3362430,"end":3362590,"confidence":0.9589844,"speaker":"A"},{"text":"have","start":3362590,"end":3362750,"confidence":0.77441406,"speaker":"A"},{"text":"to","start":3362750,"end":3362870,"confidence":0.9995117,"speaker":"A"},{"text":"do","start":3362870,"end":3362990,"confidence":0.9951172,"speaker":"A"},{"text":"that","start":3362990,"end":3363190,"confidence":1,"speaker":"A"},{"text":"and","start":3363190,"end":3363390,"confidence":0.99853516,"speaker":"A"},{"text":"a","start":3363390,"end":3363510,"confidence":0.9995117,"speaker":"A"},{"text":"few","start":3363510,"end":3363630,"confidence":1,"speaker":"A"},{"text":"other","start":3363630,"end":3363830,"confidence":0.99902344,"speaker":"A"},{"text":"things,","start":3363830,"end":3364070,"confidence":0.9995117,"speaker":"A"},{"text":"but.","start":3364070,"end":3364390,"confidence":0.98876953,"speaker":"A"},{"text":"No,","start":3364940,"end":3365180,"confidence":0.6020508,"speaker":"A"},{"text":"yeah,","start":3365180,"end":3365740,"confidence":0.9869792,"speaker":"A"},{"text":"it's","start":3367740,"end":3368060,"confidence":0.97021484,"speaker":"C"},{"text":"an","start":3368060,"end":3368180,"confidence":0.99609375,"speaker":"C"},{"text":"interesting","start":3368180,"end":3368500,"confidence":0.99975586,"speaker":"C"},{"text":"idea.","start":3368500,"end":3368940,"confidence":0.98706055,"speaker":"C"},{"text":"Thank","start":3369900,"end":3370220,"confidence":0.9868164,"speaker":"A"},{"text":"you.","start":3370220,"end":3370460,"confidence":0.9975586,"speaker":"A"},{"text":"Yeah.","start":3371420,"end":3371900,"confidence":0.88997394,"speaker":"B"},{"text":"Well,","start":3371900,"end":3372100,"confidence":0.9980469,"speaker":"A"},{"text":"thank","start":3372100,"end":3372300,"confidence":1,"speaker":"A"},{"text":"you","start":3372300,"end":3372420,"confidence":0.9995117,"speaker":"A"},{"text":"for","start":3372420,"end":3372580,"confidence":0.99902344,"speaker":"A"},{"text":"joining,","start":3372580,"end":3372860,"confidence":0.96809894,"speaker":"A"},{"text":"Josh.","start":3372860,"end":3373260,"confidence":0.98461914,"speaker":"A"},{"text":"Yeah.","start":3373660,"end":3374060,"confidence":0.81844074,"speaker":"C"},{"text":"Thanks","start":3374060,"end":3374300,"confidence":1,"speaker":"C"},{"text":"for","start":3374300,"end":3374460,"confidence":0.9995117,"speaker":"C"},{"text":"hosting","start":3374460,"end":3374820,"confidence":0.9995117,"speaker":"C"},{"text":"this","start":3374820,"end":3375020,"confidence":0.9707031,"speaker":"C"},{"text":"and","start":3375020,"end":3375340,"confidence":0.99902344,"speaker":"C"},{"text":"sharing","start":3375900,"end":3376340,"confidence":0.9934082,"speaker":"C"},{"text":"this","start":3376340,"end":3376500,"confidence":0.9995117,"speaker":"C"},{"text":"info.","start":3376500,"end":3376820,"confidence":0.9995117,"speaker":"C"},{"text":"It's","start":3376820,"end":3377020,"confidence":0.9941406,"speaker":"C"},{"text":"nice.","start":3377020,"end":3377340,"confidence":1,"speaker":"C"},{"text":"Yeah.","start":3378060,"end":3378540,"confidence":0.9866536,"speaker":"A"},{"text":"If","start":3378620,"end":3378980,"confidence":0.9794922,"speaker":"A"},{"text":"you","start":3378980,"end":3379260,"confidence":0.9995117,"speaker":"A"},{"text":"ever","start":3379260,"end":3379500,"confidence":1,"speaker":"A"},{"text":"run","start":3379500,"end":3379700,"confidence":0.9995117,"speaker":"A"},{"text":"into","start":3379700,"end":3379860,"confidence":1,"speaker":"A"},{"text":"anything,","start":3379860,"end":3380180,"confidence":1,"speaker":"A"},{"text":"let","start":3380180,"end":3380300,"confidence":1,"speaker":"A"},{"text":"me","start":3380300,"end":3380459,"confidence":1,"speaker":"A"},{"text":"know.","start":3380459,"end":3380780,"confidence":0.9995117,"speaker":"A"},{"text":"Will","start":3381420,"end":3381740,"confidence":0.5800781,"speaker":"A"},{"text":"do.","start":3381740,"end":3382060,"confidence":0.99365234,"speaker":"A"},{"text":"All","start":3382940,"end":3383220,"confidence":0.9814453,"speaker":"A"},{"text":"right,","start":3383220,"end":3383500,"confidence":1,"speaker":"A"},{"text":"talk","start":3383660,"end":3383940,"confidence":1,"speaker":"A"},{"text":"to","start":3383940,"end":3384100,"confidence":1,"speaker":"A"},{"text":"you","start":3384100,"end":3384220,"confidence":0.9995117,"speaker":"A"},{"text":"later.","start":3384220,"end":3384420,"confidence":1,"speaker":"A"},{"text":"All","start":3384420,"end":3384620,"confidence":0.9223633,"speaker":"A"},{"text":"right,","start":3384620,"end":3384780,"confidence":0.9145508,"speaker":"A"},{"text":"sounds","start":3384780,"end":3385020,"confidence":1,"speaker":"A"},{"text":"good.","start":3385020,"end":3385180,"confidence":1,"speaker":"A"},{"text":"See","start":3385180,"end":3385380,"confidence":0.9975586,"speaker":"C"},{"text":"you.","start":3385380,"end":3385660,"confidence":0.54296875,"speaker":"C"},{"text":"Bye.","start":3386220,"end":3386700,"confidence":0.9375,"speaker":"A"},{"text":"Bye.","start":3386860,"end":3387340,"confidence":0.9519043,"speaker":"C"}] \ No newline at end of file diff --git a/docs/transcriptions/transcript.srt b/docs/transcriptions/transcript.srt new file mode 100644 index 00000000..77d702ca --- /dev/null +++ b/docs/transcriptions/transcript.srt @@ -0,0 +1,2708 @@ +1 +00:04:22,980 --> 00:04:25,700 +Hey, Evan, can you hear me all right? Yeah, I can hear you. + +2 +00:04:26,420 --> 00:04:28,740 +Awesome. How do I sound? Good. + +3 +00:04:30,260 --> 00:04:33,780 +I've used this microphone in ages. It's like all + +4 +00:04:34,280 --> 00:04:34,420 +dusty. + +5 +00:04:41,140 --> 00:04:44,100 +How you think I should wait like five minutes for people to come in or. + +6 +00:04:44,260 --> 00:04:47,530 +Probably. Yeah, that there's if. Yeah, + +7 +00:04:48,010 --> 00:04:51,610 +otherwise you can just. You could start, but that'll be + +8 +00:04:52,110 --> 00:04:54,250 +interesting. Do you mind if I grab a cup of coffee real quick? No, + +9 +00:04:54,750 --> 00:04:58,610 +not at all. Not at all. Okay, cool. I'm not using the AirPods + +10 +00:04:59,110 --> 00:05:01,370 +mic, so I can hear you, but you won't be able to hear me. + +11 +00:05:01,690 --> 00:05:02,250 +Okay. + +12 +00:06:02,440 --> 00:06:27,820 +It's. + +13 +00:08:51,699 --> 00:08:55,060 +Thank you for your patience. + +14 +00:09:09,010 --> 00:09:12,570 +So is it just you? It looks like it's just me. + +15 +00:09:13,070 --> 00:09:16,530 +Josh is trying to get in, but he's trying to get on on his mobile + +16 +00:09:17,030 --> 00:09:19,250 +device and I don't think that's possible with Riverside. + +17 +00:09:23,250 --> 00:09:26,130 +Surprised? I mean, I know they have an app. + +18 +00:09:27,590 --> 00:09:30,070 +Maybe he's using. I'm not sure if he's using. Using the app or not. + +19 +00:09:35,190 --> 00:09:38,630 +Should I just go? Sure. + +20 +00:09:39,830 --> 00:09:43,830 +Okay. Well, thanks for joining me, + +21 +00:09:44,330 --> 00:09:47,790 +Evan. I really appreciate it. I would + +22 +00:09:48,290 --> 00:09:49,910 +say no. I mean I do, seriously. + +23 +00:09:51,830 --> 00:09:55,070 +So yeah, this is a kind of a dry run. I would say + +24 +00:09:55,570 --> 00:09:59,670 +I'm about 60% done with this presentation about + +25 +00:10:00,310 --> 00:10:04,470 +CloudKit on the server and + +26 +00:10:04,870 --> 00:10:08,310 +we'll probably hop back and forth between Keynote and not Keynote, + +27 +00:10:08,870 --> 00:10:12,310 +but yeah. So this is + +28 +00:10:12,810 --> 00:10:16,630 +CloudKit as your backend from iOS to server side Swift. + +29 +00:10:27,600 --> 00:10:31,200 +So what is CloudKit? CloudKit is a service + +30 +00:10:32,240 --> 00:10:36,279 +launched by Apple probably a decade ago to + +31 +00:10:36,779 --> 00:10:40,520 +kind of give developers a built + +32 +00:10:41,020 --> 00:10:43,680 +in back end for storing data for their apps. + +33 +00:10:44,480 --> 00:10:48,250 +One of the biggest benefits is is how cheap it is to + +34 +00:10:48,750 --> 00:10:49,970 +use for iOS developers. + +35 +00:10:52,450 --> 00:10:55,850 +So if you have built an + +36 +00:10:56,350 --> 00:11:01,730 +app, you could just add CloudKit right here within the + +37 +00:11:02,209 --> 00:11:05,970 +Xcode project and use the + +38 +00:11:06,470 --> 00:11:10,130 +regular CloudKit API in Swift to go ahead and start using it + +39 +00:11:10,630 --> 00:11:14,430 +in your app. Here is what + +40 +00:11:14,930 --> 00:11:18,270 +it looks like to create a new record type. You can do all this through + +41 +00:11:18,430 --> 00:11:20,190 +the CloudKit dashboard. + +42 +00:11:24,190 --> 00:11:27,910 +In CloudKit you could also do this using a schema + +43 +00:11:28,410 --> 00:11:32,030 +file too. And you can export and import your schema that + +44 +00:11:32,530 --> 00:11:36,030 +way. And it's not a SQL based database, + +45 +00:11:36,530 --> 00:11:39,910 +it's much more, no sequel ish or an abstract layer + +46 +00:11:40,410 --> 00:11:44,120 +above it. But essentially you can create records + +47 +00:11:44,520 --> 00:11:48,200 +kind of like a table but not quite in your records. + +48 +00:11:49,400 --> 00:11:52,680 +You can create a struct for it. + +49 +00:11:53,180 --> 00:11:56,760 +You can just use CloudKit directly to go ahead and + +50 +00:11:57,260 --> 00:12:00,520 +then you can then plug it into your app and do fun stuff like this. + +51 +00:12:01,560 --> 00:12:05,280 +We can do things like queries and basic + +52 +00:12:05,780 --> 00:12:08,040 +database stuff. There's a lot of advantages to it. + +53 +00:12:09,280 --> 00:12:12,640 +For one, if you're doing Apple only, + +54 +00:12:13,600 --> 00:12:17,040 +then it definitely makes sense to look into, at least look + +55 +00:12:17,540 --> 00:12:18,080 +into CloudKit. + +56 +00:12:22,320 --> 00:12:25,440 +If you're just going to deploy to Apple Devices. + +57 +00:12:26,080 --> 00:12:28,720 +If you don't mind the, + +58 +00:12:29,920 --> 00:12:32,640 +the fact that it's not a regular SQL database, + +59 +00:12:34,050 --> 00:12:37,050 +that's something too to think about. If you like need a SQL database, this might + +60 +00:12:37,550 --> 00:12:41,010 +not be what you want. And then if you don't mind working with + +61 +00:12:41,510 --> 00:12:44,610 +a lot of the abstraction layers that CloudKit provides, + +62 +00:12:46,930 --> 00:12:50,730 +then this might be good for you to get started or especially + +63 +00:12:51,230 --> 00:12:54,930 +if you don't have any database experience. So as far as + +64 +00:12:55,430 --> 00:12:58,690 +like server choices, I would say CloudKit might not be your + +65 +00:12:59,190 --> 00:13:02,890 +first choice, but it certainly is a decent choice if you're + +66 +00:13:03,390 --> 00:13:04,450 +going the Apple only route. + +67 +00:13:09,970 --> 00:13:13,730 +But then the question comes in, why would you want Cloud server side CloudKit? + +68 +00:13:13,890 --> 00:13:16,610 +Why would you want to do anything with CloudKit on the server? + +69 +00:13:17,970 --> 00:13:21,690 +So here's, here's the first case. Well, this is + +70 +00:13:22,190 --> 00:13:26,090 +how you can go ahead and do that is they provide actually a REST API + +71 +00:13:26,590 --> 00:13:30,350 +for calls to CloudKit using the, if you + +72 +00:13:30,850 --> 00:13:35,710 +go to the documentation, I'll provide a link to that CloudKit Web Services which + +73 +00:13:36,510 --> 00:13:39,550 +provides a lot of the documentation for what we'll be talking about today. + +74 +00:13:40,910 --> 00:13:43,790 +A lot of this is abstracted out in the JavaScript library. + +75 +00:13:43,870 --> 00:13:47,150 +So if you want to do stuff on a website, they provide + +76 +00:13:47,230 --> 00:13:51,110 +a CloudKit JavaScript library for + +77 +00:13:51,610 --> 00:13:53,710 +that. Sorry, + +78 +00:13:56,190 --> 00:13:59,230 +just going into do not disturb mode. + +79 +00:14:07,950 --> 00:14:11,070 +They even in that web references documentation + +80 +00:14:11,570 --> 00:14:15,310 +they provide a composing web service request and all these instructions about how to go + +81 +00:14:15,810 --> 00:14:19,110 +ahead and do that. So man, was it like + +82 +00:14:19,610 --> 00:14:23,320 +half a decade ago that I built + +83 +00:14:23,820 --> 00:14:27,280 +Heart Twitch and at the time I don't think there was + +84 +00:14:27,440 --> 00:14:30,560 +anything, there was + +85 +00:14:31,060 --> 00:14:35,640 +anything like sign in with Apple even. And like I really didn't + +86 +00:14:36,140 --> 00:14:39,520 +want like to explain how harshwitch + +87 +00:14:40,020 --> 00:14:43,280 +works is you have like a watch and it will send the heart rate + +88 +00:14:43,780 --> 00:14:47,180 +to the server and then the + +89 +00:14:47,680 --> 00:14:51,100 +server will then use a web socket to push it out to a web page. + +90 +00:14:52,060 --> 00:14:55,100 +And then you would point OBS or some sort + +91 +00:14:55,600 --> 00:14:58,740 +of streaming software to the URL or to the browser window and then that way + +92 +00:14:59,240 --> 00:15:02,659 +you can stream your heart rate. That's how it works. And what I really didn't + +93 +00:15:03,159 --> 00:15:06,820 +want is a difficult way for a user to log in with + +94 +00:15:07,320 --> 00:15:10,020 +a username and password on the watch because we all know typing on the watch + +95 +00:15:10,520 --> 00:15:13,980 +is hell. So my, my thought was like, + +96 +00:15:14,320 --> 00:15:16,560 +and I didn't have sign in with Apple, right? + +97 +00:15:17,440 --> 00:15:20,880 +So my thought was why don't we use CloudKit? Because you're already signed + +98 +00:15:21,380 --> 00:15:24,080 +in a CloudKit on the Watch with your, your id. + +99 +00:15:26,640 --> 00:15:30,359 +And what you do is you log in with + +100 +00:15:30,859 --> 00:15:34,560 +a regular like email address and password in Heart Twitch on + +101 +00:15:35,060 --> 00:15:38,480 +the website. And then there's a little, there's a site, there's a part of + +102 +00:15:38,980 --> 00:15:43,060 +the site where you can sign into CloudKit and then from there + +103 +00:15:44,180 --> 00:15:47,980 +you can, because, because of the CloudKit JavaScript + +104 +00:15:48,480 --> 00:15:52,580 +library, you can then I can then pull the all + +105 +00:15:53,080 --> 00:15:55,740 +the devices because when you first launch the app on the Watch, it adds your + +106 +00:15:56,240 --> 00:15:59,740 +watch to the CloudKit database. And then I could pull that in and + +107 +00:16:00,240 --> 00:16:03,380 +then add that to my postgres database. So then there is no need for + +108 +00:16:03,880 --> 00:16:06,740 +authentication because I already have the CloudKit, + +109 +00:16:07,720 --> 00:16:11,120 +the device added in my postgres database. So it's kind of like + +110 +00:16:11,620 --> 00:16:15,520 +knows, oh yeah, this is Leo's watch, he doesn't need to authenticate. + +111 +00:16:16,020 --> 00:16:19,120 +And that way we can link devices to accounts without having to + +112 +00:16:19,620 --> 00:16:22,760 +do any sort of login process. And so this was my use case + +113 +00:16:22,919 --> 00:16:25,960 +for doing server side. + +114 +00:16:26,040 --> 00:16:29,560 +Essentially CloudKit was I could call the CloudKit web + +115 +00:16:30,060 --> 00:16:33,610 +server based + +116 +00:16:34,110 --> 00:16:37,490 +on that person's web authentication token, which we'll get + +117 +00:16:37,990 --> 00:16:40,370 +all into later. I then pull that information in. + +118 +00:16:42,050 --> 00:16:42,450 +So. + +119 +00:16:47,250 --> 00:16:47,730 +Cool. + +120 +00:16:50,770 --> 00:16:55,050 +Just checking if anybody's having issues. It doesn't look like it. So that's + +121 +00:16:55,550 --> 00:16:58,690 +good to know. So that was the private database + +122 +00:16:59,190 --> 00:17:02,990 +piece, but I actually think a much more useful case would + +123 +00:17:03,490 --> 00:17:07,150 +be the public database because the + +124 +00:17:07,650 --> 00:17:10,950 +idea would be is that you'd have some sort of app that + +125 +00:17:11,450 --> 00:17:15,790 +would use central repository of data that + +126 +00:17:16,290 --> 00:17:19,710 +it can pull information from. And I'm looking at both of these with + +127 +00:17:19,950 --> 00:17:23,310 +Bushel and then an RSS reader I'm building called Celestra + +128 +00:17:24,190 --> 00:17:27,319 +with Bushel. The. The way it's + +129 +00:17:27,819 --> 00:17:31,079 +built right now is I have this concept of hubs and + +130 +00:17:31,159 --> 00:17:34,399 +you can plug in a URL and that URL would provide or + +131 +00:17:34,899 --> 00:17:38,639 +some sort of service. That service would then provide the + +132 +00:17:39,139 --> 00:17:41,959 +Entire List of macOS restore images that are available. + +133 +00:17:44,119 --> 00:17:47,719 +But then I realized like really there's only one location for those and + +134 +00:17:48,219 --> 00:17:50,839 +each service is just going to be using the same URLs anyway. + +135 +00:17:51,970 --> 00:17:55,490 +So if I had one central repository or one central database + +136 +00:17:56,850 --> 00:18:00,250 +because they all pull from Apple, I can then parse + +137 +00:18:00,750 --> 00:18:04,530 +the web for those restore images and then store them in CloudKit and then + +138 +00:18:05,030 --> 00:18:08,770 +that way Bushel can then pull those from one + +139 +00:18:09,270 --> 00:18:12,930 +single repository. And all I would have to do, and what I'm doing now is + +140 +00:18:13,430 --> 00:18:17,130 +running basically a GitHub action or you could do like a Cron job where it + +141 +00:18:17,630 --> 00:18:21,130 +would run on Ubuntu, wouldn't even need a Mac and it would download and scrape + +142 +00:18:21,630 --> 00:18:24,430 +the web for restore images and storm in the public database. + +143 +00:18:26,350 --> 00:18:29,870 +It's the same idea with Celestra. It's an RSS reader. What if I took + +144 +00:18:30,370 --> 00:18:33,670 +those RSS RSS files + +145 +00:18:34,170 --> 00:18:37,470 +in the web and just scrape them and then store them in a CloudKit database + +146 +00:18:38,110 --> 00:18:41,310 +in a public database and then that way people can pull that + +147 +00:18:41,810 --> 00:18:42,910 +up all through CloudKit. + +148 +00:18:45,150 --> 00:18:48,550 +So the idea today is we're going to talk about how to + +149 +00:18:49,050 --> 00:18:52,380 +set something, how I set something like this up and how + +150 +00:18:52,880 --> 00:18:56,340 +you could use use my library to then go ahead and do this yourself for + +151 +00:18:56,840 --> 00:18:59,100 +any sort of work that you're going to do that where you want to use + +152 +00:18:59,600 --> 00:19:02,180 +either a public or private database in CloudKit. + +153 +00:19:03,300 --> 00:19:07,020 +So this is where I introduce myself. So I'm going to talk today about + +154 +00:19:07,520 --> 00:19:10,700 +building Miskit, which is my library I built for + +155 +00:19:11,200 --> 00:19:14,740 +doing CloudKit stuff on the server or essentially off of, + +156 +00:19:15,380 --> 00:19:17,140 +not off of Apple platforms. + +157 +00:19:19,770 --> 00:19:23,130 +Evan, do you have any questions before I keep going? No, + +158 +00:19:23,370 --> 00:19:24,890 +it's good. Good topic though. + +159 +00:19:26,810 --> 00:19:31,090 +So like I said, we have CloudKit Web Services and CloudKit + +160 +00:19:31,590 --> 00:19:35,770 +Web Services. We provide a lot of documentation. We talked about CloudKit JS + +161 +00:19:35,850 --> 00:19:39,570 +and the instructions on how to compose a web service request + +162 +00:19:40,070 --> 00:19:43,610 +which has everything I need to compose one. And back in 2020 I + +163 +00:19:44,110 --> 00:19:47,640 +did this all manually. The thing is at this + +164 +00:19:48,140 --> 00:19:51,480 +point, if you look at right there, actually if + +165 +00:19:51,980 --> 00:19:54,480 +you look at the top, you can see it hasn't been updated in over 10 + +166 +00:19:54,980 --> 00:19:58,120 +years, which is kind of crazy, + +167 +00:19:58,920 --> 00:20:02,440 +but it works. And then we + +168 +00:20:02,840 --> 00:20:06,760 +got introduced to something back in WWDC I + +169 +00:20:07,260 --> 00:20:10,840 +want to say it was 23. We got + +170 +00:20:11,340 --> 00:20:14,600 +introduced to the Open API generator which is really + +171 +00:20:15,100 --> 00:20:19,120 +nice because then we have, we can generate the Swift code + +172 +00:20:19,620 --> 00:20:23,280 +if we know what the Open API documentation looks like it. And of course + +173 +00:20:23,780 --> 00:20:27,280 +Apple doesn't provide one for CloudKit but they did provide a + +174 +00:20:27,780 --> 00:20:30,920 +pretty big piece open. If you ever you looked + +175 +00:20:31,420 --> 00:20:35,320 +at the Open API generator, it's amazing. Takes the Open API gamble file and + +176 +00:20:35,560 --> 00:20:38,880 +generates all the Swift code you need. One of the other issues + +177 +00:20:39,380 --> 00:20:43,120 +I had with first developing Miskit in 2020 + +178 +00:20:43,600 --> 00:20:47,120 +was that there was no way to like there was no abstraction + +179 +00:20:47,620 --> 00:20:51,080 +layer which could differentiate between doing something on the server or + +180 +00:20:51,580 --> 00:20:55,719 +using regular like URL session which is more targeted towards client + +181 +00:20:56,219 --> 00:20:59,880 +side. So I had + +182 +00:21:00,380 --> 00:21:02,800 +to build my own abstraction for that. Luckily Open API has, + +183 +00:21:04,080 --> 00:21:07,600 +there's open API transport I believe, which provides + +184 +00:21:08,100 --> 00:21:12,100 +an abstraction layer where you can then plug in either use Async HTTP + +185 +00:21:12,600 --> 00:21:15,660 +client, which is the server way of doing it, or you can plug in a + +186 +00:21:16,160 --> 00:21:19,380 +URL session transport, which is of course the client + +187 +00:21:19,880 --> 00:21:23,740 +way to do, provides a really great tutorial. + +188 +00:21:24,240 --> 00:21:27,740 +I highly recommend checking this out as well as the + +189 +00:21:28,240 --> 00:21:30,020 +doxy documentation that they provide. + +190 +00:21:31,860 --> 00:21:35,420 +So this is great. But then I'd have to go ahead and I'd have to + +191 +00:21:35,920 --> 00:21:39,700 +figure out a way to convert all this documentation into an open + +192 +00:21:40,200 --> 00:21:44,260 +API document. I mean, can you guess what + +193 +00:21:44,760 --> 00:21:48,260 +helped me to get build an open API document + +194 +00:21:48,760 --> 00:21:51,620 +from all this documentation? Some of the tools, + +195 +00:21:52,659 --> 00:21:54,980 +some AI tool. Yes. + +196 +00:21:56,820 --> 00:22:00,860 +AI came and I'm like, holy crap. Like AI is + +197 +00:22:01,360 --> 00:22:04,690 +really good at documenting your code, but it's also pretty darn good at taking + +198 +00:22:05,190 --> 00:22:08,450 +documentation and building code. So then I would + +199 +00:22:08,950 --> 00:22:12,290 +just plug it. I've been plugging in with Claude and it has a copy of + +200 +00:22:12,790 --> 00:22:16,490 +all the documentation in my repo and it can go ahead and edit the + +201 +00:22:16,990 --> 00:22:20,850 +open API. It's not perfect by any means, of course, but that's what unit + +202 +00:22:21,350 --> 00:22:25,770 +tests are for. And actually having integration tests + +203 +00:22:26,250 --> 00:22:31,700 +in order to do stuff so that. + +204 +00:22:35,380 --> 00:22:41,100 +Sorry, I just want to make sure nothing + +205 +00:22:46,900 --> 00:22:48,020 +I hate teams. + +206 +00:22:53,060 --> 00:22:56,420 +Okay, so great. So let's talk about. + +207 +00:22:59,700 --> 00:23:05,380 +Sorry, slides are still not done, but let's talk about authentication + +208 +00:23:05,880 --> 00:23:09,340 +methods. You can see I have the logos here, but I haven't quite cleaned + +209 +00:23:09,840 --> 00:23:14,140 +this up. So there's really two + +210 +00:23:14,640 --> 00:23:17,380 +and a half authentication methods when it comes to CloudKit. + +211 +00:23:18,420 --> 00:23:21,950 +So here is the miss demo + +212 +00:23:22,450 --> 00:23:26,070 +database. You just go in here and you can go to tokens and keys + +213 +00:23:26,570 --> 00:23:30,550 +and then that will give you access to set up either the API + +214 +00:23:31,050 --> 00:23:34,550 +if you want to do API key or API token if + +215 +00:23:35,050 --> 00:23:38,630 +you want to do a private database or a server to server keyset if + +216 +00:23:39,130 --> 00:23:41,950 +you want to do a public database. So let's talk about the API token. + +217 +00:23:42,510 --> 00:23:45,870 +Pretty simple. You just go into here, click the plus sign, + +218 +00:23:46,840 --> 00:23:49,920 +you say a name and you say whether you want to do + +219 +00:23:50,420 --> 00:23:53,920 +a post message or URL redirect. We'll get into that in a little bit in + +220 +00:23:54,420 --> 00:23:58,280 +the next section. And then whether you want to have user + +221 +00:23:58,780 --> 00:24:02,960 +info and you click save and you'll get a nice little API token + +222 +00:24:03,460 --> 00:24:06,680 +you could use in your web your web calls essentially. + +223 +00:24:09,000 --> 00:24:12,260 +API doesn't really. The API token doesn't really give you a lot of. + +224 +00:24:12,570 --> 00:24:15,330 +But what it does give you is it gives you an entry to get a + +225 +00:24:15,830 --> 00:24:19,450 +web authentication token for a user. So basically the way that + +226 +00:24:19,950 --> 00:24:22,490 +works. So you'll notice here, + +227 +00:24:23,050 --> 00:24:24,890 +when we were in this section, + +228 +00:24:27,050 --> 00:24:30,650 +we have this piece here called Sign in Callback. So you + +229 +00:24:31,150 --> 00:24:34,530 +can have either call a JavaScript, it's called a message + +230 +00:24:35,030 --> 00:24:38,730 +event, it will call a Message event and a message event will have the + +231 +00:24:39,230 --> 00:24:42,770 +metadata with the web authentication token of that user. Or you could + +232 +00:24:43,270 --> 00:24:47,250 +do URL redirect where on authentication the user has + +233 +00:24:47,750 --> 00:24:51,090 +a URL and then part of that URL is then having part of + +234 +00:24:51,590 --> 00:24:55,250 +one of the query parameters and we'll get into that. We'll then have the web + +235 +00:24:55,750 --> 00:24:59,330 +authentication token in the URL. So you + +236 +00:24:59,830 --> 00:25:03,770 +put, basically you have your website, you add the JavaScript, you need + +237 +00:25:04,330 --> 00:25:08,010 +to add the sign in with Apple. Oh, here's Josh. + +238 +00:25:14,310 --> 00:25:15,910 +Oh cool. Josh, you there? + +239 +00:25:18,790 --> 00:25:21,590 +I hope so. Good. Okay. + +240 +00:25:21,750 --> 00:25:24,429 +Hey, we were just talking about how to set up. I'm going to go back + +241 +00:25:24,929 --> 00:25:28,710 +a little bit Evan, but not too far back. Yeah, no worries. That's okay. + +242 +00:25:30,470 --> 00:25:33,790 +But we talked about setting up API token and how + +243 +00:25:34,290 --> 00:25:37,870 +to do that. So you go in + +244 +00:25:38,370 --> 00:25:41,470 +here, you just click plus, you select your sign in callback and you put in + +245 +00:25:41,970 --> 00:25:45,550 +a name and it'll give you an API token once you click + +246 +00:25:46,050 --> 00:25:46,310 +save. Basically. + +247 +00:25:50,549 --> 00:25:51,190 +Come on. + +248 +00:25:54,470 --> 00:25:58,830 +The reason you want an API token is this allows you to then have + +249 +00:25:59,330 --> 00:26:03,060 +users Sign in to CloudKit either + +250 +00:26:03,560 --> 00:26:07,540 +using, using the the web service + +251 +00:26:07,620 --> 00:26:11,380 +like Curl or you could also do it through a website using + +252 +00:26:11,880 --> 00:26:15,500 +CloudKit js. So web authentication + +253 +00:26:16,000 --> 00:26:19,260 +token we talked about how you can either do the post message or you can + +254 +00:26:19,760 --> 00:26:23,180 +do the URL redirect. Basically you have the JavaScript on + +255 +00:26:23,680 --> 00:26:26,620 +your website and there has a button, click the button, + +256 +00:26:27,120 --> 00:26:31,140 +you get this nice little window here sign in and + +257 +00:26:31,640 --> 00:26:35,020 +then when you sign in if you had selected post message, + +258 +00:26:35,340 --> 00:26:39,260 +you'll get the web authentication token and the data of the event in + +259 +00:26:39,760 --> 00:26:43,820 +JavaScript or you will get the web authentication token as a URL + +260 +00:26:44,300 --> 00:26:47,820 +in the callback URL here. Does that make sense? + +261 +00:26:50,860 --> 00:26:54,660 +Yep. Yeah. In some cases if + +262 +00:26:55,160 --> 00:26:58,520 +you scour the Internet so Stack overflow will tell you and this has happened + +263 +00:26:59,020 --> 00:27:02,360 +to me sometimes it will not be CK web authentication token, + +264 +00:27:02,860 --> 00:27:06,280 +sometimes it'll be CK session because that's what Apple likes + +265 +00:27:06,780 --> 00:27:10,120 +to do. But it's the same thing. + +266 +00:27:10,200 --> 00:27:14,160 +So you basically want to look for either property or query parameter name + +267 +00:27:14,660 --> 00:27:17,800 +and you should be good to go and then you'll have that user as well + +268 +00:27:18,300 --> 00:27:22,200 +authentication token you could do. What I, what I've + +269 +00:27:22,700 --> 00:27:27,730 +been doing is, is I've been take + +270 +00:27:28,230 --> 00:27:31,970 +like making a call to a like local server for instance and then + +271 +00:27:32,470 --> 00:27:36,330 +essentially then I could do whatever I want with that web authentication token. + +272 +00:27:36,830 --> 00:27:40,010 +As long as you have the web authentication token and the API token you can + +273 +00:27:40,510 --> 00:27:43,690 +do anything on a private database that the user has rights + +274 +00:27:44,190 --> 00:27:47,610 +to. So you can go, you can go to town with + +275 +00:27:48,110 --> 00:27:51,420 +that all this stuff gets Swift in a cookie too. + +276 +00:27:51,580 --> 00:27:54,700 +So that way it'll work. When you go back, + +277 +00:27:55,200 --> 00:27:57,500 +if you have checked the box for allow, + +278 +00:27:58,780 --> 00:28:02,180 +it's either a box or JavaScript method property that will say, hey, + +279 +00:28:02,680 --> 00:28:05,460 +I want this to persist. It'll be Swift in a, in a cookie as well. + +280 +00:28:05,960 --> 00:28:09,340 +So if you want to spelunk your cookies, you can see the web authentication + +281 +00:28:09,840 --> 00:28:13,180 +token there. So that's actually the easier of the + +282 +00:28:13,680 --> 00:28:17,300 +two. So that gives you the private database for the public database is where + +283 +00:28:17,800 --> 00:28:19,820 +you're going to need a server to server authentication. + +284 +00:28:21,340 --> 00:28:24,820 +And so to do that it's really actually not as bad + +285 +00:28:25,320 --> 00:28:28,620 +as I thought it was going to be. But you go to the new server + +286 +00:28:29,120 --> 00:28:32,500 +to server key, put in a name you want, it'll actually give you the command + +287 +00:28:33,000 --> 00:28:35,660 +you need to run and then you just paste in the public key in here. + +288 +00:28:36,380 --> 00:28:40,020 +That gives you. That will give you everything you + +289 +00:28:40,520 --> 00:28:42,780 +need. So here's how to run it. Basically, + +290 +00:28:43,990 --> 00:28:44,630 +sorry about that. + +291 +00:28:57,190 --> 00:28:59,510 +We just run that. That gives us the key. + +292 +00:29:00,710 --> 00:29:04,670 +We can go ahead and get the public key. We can also pipe + +293 +00:29:05,170 --> 00:29:08,510 +it to PB Copy and then all we have to do is paste that in + +294 +00:29:09,010 --> 00:29:10,930 +the box over here. + +295 +00:29:17,970 --> 00:29:18,690 +There we go. + +296 +00:29:25,890 --> 00:29:28,770 +It's pretty complicated to use the server key. + +297 +00:29:30,050 --> 00:29:33,450 +We can spell on the miskit code on how to do it because + +298 +00:29:33,950 --> 00:29:36,890 +it does a lot of that work for you if you have it. But you + +299 +00:29:37,390 --> 00:29:41,170 +will need the, the private key, the key id, + +300 +00:29:42,290 --> 00:29:45,490 +I think, I think that's it. And then you should be + +301 +00:29:45,990 --> 00:29:50,130 +good with having access now to the public database. + +302 +00:29:50,850 --> 00:29:54,210 +So just to go over, there's differences between the public + +303 +00:29:54,710 --> 00:29:58,050 +and private database. So this + +304 +00:29:58,550 --> 00:30:02,010 +is query. You can see my cursor, right? Query and lookup + +305 +00:30:02,510 --> 00:30:06,030 +of records is available on all but file + +306 +00:30:06,530 --> 00:30:10,150 +changes or, excuse me, record changes. It's not available on + +307 +00:30:10,650 --> 00:30:14,750 +public zones, aren't really available in public zone changes aren't available in + +308 +00:30:15,250 --> 00:30:18,870 +public notifications. Zone notifications aren't available in public, + +309 +00:30:19,670 --> 00:30:23,350 +but query notifications are. And you can also do + +310 +00:30:23,850 --> 00:30:27,310 +any stuff with assets which are basically binary files. You can + +311 +00:30:27,810 --> 00:30:32,190 +also do that in all of them. You can't do query + +312 +00:30:32,690 --> 00:30:36,110 +notifications on shared. Shared would essentially work like + +313 +00:30:36,610 --> 00:30:39,810 +private essentially. So it's just a matter + +314 +00:30:40,310 --> 00:30:42,610 +of who. Who's the owner and how is it shared. + +315 +00:30:44,690 --> 00:30:48,370 +So one of the big challenges I think we've all faced this when we've + +316 +00:30:48,870 --> 00:30:53,370 +dealt with certain web services is field type polymorphism. + +317 +00:30:53,870 --> 00:30:56,730 +If you've done JSON where you don't know what type you're getting back or what + +318 +00:30:57,230 --> 00:30:59,410 +data you're getting back, this can Be a bit challenging. + +319 +00:31:00,530 --> 00:31:03,650 +So if you look at the documentation + +320 +00:31:04,290 --> 00:31:08,290 +in Web Services Reference, there is a, + +321 +00:31:09,090 --> 00:31:12,610 +there's a page called types and dictionaries and there is + +322 +00:31:13,110 --> 00:31:16,890 +types. There's different type values for each field. If you're familiar + +323 +00:31:17,390 --> 00:31:20,650 +with CloudKit, you've seen this, right? So you have an asset + +324 +00:31:21,150 --> 00:31:25,330 +which is basically a, a binary + +325 +00:31:25,830 --> 00:31:29,650 +file. You have bytes which is + +326 +00:31:30,150 --> 00:31:33,620 +essentially a 60 byte base 64 encoded string, + +327 +00:31:34,740 --> 00:31:38,460 +date type which is returned as a number. Double is + +328 +00:31:38,960 --> 00:31:41,620 +returned as a number because These are the JavaScript types. + +329 +00:31:42,260 --> 00:31:46,140 +Int is returned as a number and then + +330 +00:31:46,640 --> 00:31:49,940 +there's location reference and then + +331 +00:31:50,020 --> 00:31:53,420 +string and list. And how would you like, + +332 +00:31:53,920 --> 00:31:57,100 +how do you do adjacent object like this? How would you + +333 +00:31:57,600 --> 00:31:59,860 +even represent this in Swift? Because you don't know what type you're going to get. + +334 +00:32:01,350 --> 00:32:04,510 +So like I said, this is a work in progress. + +335 +00:32:05,010 --> 00:32:08,710 +Sorry. So what I do, I don't know how much you can see this. + +336 +00:32:09,110 --> 00:32:13,910 +I'm going to actually move over to my documentation + +337 +00:32:14,410 --> 00:32:18,590 +here at this point. So how + +338 +00:32:19,090 --> 00:32:20,070 +are we doing on time? We good? + +339 +00:32:22,550 --> 00:32:25,590 +Yeah, I think, I think we're doing good. Okay, cool. + +340 +00:32:26,090 --> 00:32:30,240 +Any, do you want to ask questions? I don't + +341 +00:32:30,740 --> 00:32:32,160 +have anything right now. + +342 +00:32:33,760 --> 00:32:37,880 +Same nothing right now. But this seems applicable to things I'll + +343 +00:32:38,380 --> 00:32:40,480 +be doing coming up. Okay, cool. + +344 +00:32:43,200 --> 00:32:46,640 +So we have set up in the + +345 +00:32:46,800 --> 00:32:50,400 +open. So we have an open API YAML file that you can + +346 +00:32:50,900 --> 00:32:55,370 +pull up in Miskit, which is basically every like the + +347 +00:32:55,870 --> 00:32:59,290 +documentation converted to YAML. And so what we + +348 +00:32:59,790 --> 00:33:03,410 +do is you can set up in the YAML the + +349 +00:33:03,910 --> 00:33:08,330 +field value requests and they have an enum type essentially for, + +350 +00:33:12,090 --> 00:33:15,490 +for open API. So and then, + +351 +00:33:15,990 --> 00:33:18,810 +so this has, you know, it could be one of either any of these types + +352 +00:33:18,860 --> 00:33:22,090 +of. And then there's an enum in + +353 +00:33:22,590 --> 00:33:26,210 +case you have a list. So if you have a + +354 +00:33:26,710 --> 00:33:30,690 +list value type there is an extra property called + +355 +00:33:31,010 --> 00:33:33,810 +type and then that will tell you what type the. + +356 +00:33:34,450 --> 00:33:38,450 +The list is. And it's homo homomorphic. + +357 +00:33:38,690 --> 00:33:42,210 +It's all the same list type. You can't have lists of different types. + +358 +00:33:44,050 --> 00:33:49,230 +And then we have here again + +359 +00:33:49,730 --> 00:33:52,750 +field value. Sometimes the type is available, + +360 +00:33:52,910 --> 00:33:56,590 +sometimes it's not. But basically we have all the different + +361 +00:33:56,750 --> 00:33:59,950 +value types available to us in a CK value. + +362 +00:34:01,950 --> 00:34:05,670 +And then this is. Then the Open API + +363 +00:34:06,170 --> 00:34:09,150 +generator essentially builds this for me which is. + +364 +00:34:09,710 --> 00:34:13,630 +Has an enum and a struck for field field value request + +365 +00:34:15,329 --> 00:34:18,569 +and then it does all the decoding for me. Thankfully I didn't have to do + +366 +00:34:19,069 --> 00:34:19,169 +any of it. + +367 +00:34:23,089 --> 00:34:26,569 +And then yeah, I just wanted to + +368 +00:34:27,069 --> 00:34:31,969 +cover that piece where we show how we deal with these kind of like polymorphic + +369 +00:34:32,469 --> 00:34:35,969 +types and how those work. The next thing I + +370 +00:34:36,469 --> 00:34:39,929 +want to cover is error handling. So if you + +371 +00:34:40,429 --> 00:34:43,750 +look at the documentation gives you. If you get + +372 +00:34:44,250 --> 00:34:48,350 +an error we get something like this and + +373 +00:34:48,850 --> 00:34:52,030 +then that will show you in the. In the table actually shows you what + +374 +00:34:52,530 --> 00:34:56,150 +each error means. So again we do + +375 +00:34:56,650 --> 00:35:00,430 +like an enum in YAML. It's basically a string and then + +376 +00:35:00,930 --> 00:35:05,030 +we have everything else be a string. And then the open API generator will + +377 +00:35:05,530 --> 00:35:09,860 +automatically generate this which gives us the server + +378 +00:35:10,360 --> 00:35:13,980 +error code and the error response. It'll also do all this stuff + +379 +00:35:14,480 --> 00:35:18,540 +here, which is really nice. And then + +380 +00:35:18,620 --> 00:35:22,620 +we've then in our. We've abstracted a lot of this in miskit. + +381 +00:35:22,940 --> 00:35:27,100 +So that way we also have now a cloud cloud + +382 +00:35:27,600 --> 00:35:31,820 +error type which gives us a lot more info regarding that. + +383 +00:35:33,900 --> 00:35:37,360 +So that's how we handle errors. And everything I + +384 +00:35:37,860 --> 00:35:42,200 +do in the abs, the more abstract higher up stuff is done using + +385 +00:35:42,360 --> 00:35:46,360 +type throws like I have type throws and everything. So that's + +386 +00:35:46,860 --> 00:35:50,920 +how I handle that. Let me check one + +387 +00:35:51,420 --> 00:35:52,200 +last piece I wanted to cover. + +388 +00:35:54,920 --> 00:35:58,520 +The last piece I want to cover is really cool. And that is the + +389 +00:35:59,020 --> 00:36:03,160 +authentication layer. So Open API provides what's called middleware + +390 +00:36:04,440 --> 00:36:08,080 +and that allows you to, when you create a client or a server, you can + +391 +00:36:08,580 --> 00:36:11,840 +plug that in and it will handle like let's say you need to make modifications + +392 +00:36:12,340 --> 00:36:15,760 +with the request or response. When it comes in, you can intercept it + +393 +00:36:16,260 --> 00:36:17,800 +and make whatever modifications you want to make. + +394 +00:36:19,239 --> 00:36:22,880 +And in this case what we've done is I've + +395 +00:36:23,380 --> 00:36:27,840 +created an authentication middleware which + +396 +00:36:28,340 --> 00:36:31,790 +then sees if you have what's called + +397 +00:36:32,290 --> 00:36:35,630 +a token manager and an authentic you have + +398 +00:36:36,130 --> 00:36:39,910 +that and an authentication method. And the way it works is + +399 +00:36:40,410 --> 00:36:43,790 +you pick what type of authentication you want to use. If you already have like + +400 +00:36:44,290 --> 00:36:47,710 +a pre existing web token or you already have, or you, you know, + +401 +00:36:48,210 --> 00:36:51,190 +have your key ID and your private key already, or you just have the API + +402 +00:36:51,690 --> 00:36:54,870 +token. We've created basically a middleware that uses + +403 +00:36:55,370 --> 00:36:59,120 +that. So this + +404 +00:36:59,620 --> 00:37:03,320 +is how it creates the headers for server to server. So it does + +405 +00:37:03,820 --> 00:37:07,760 +all this for us. And then what + +406 +00:37:08,260 --> 00:37:11,760 +I added, which I think is really nice, is called the adaptive token manager. + +407 +00:37:12,240 --> 00:37:17,360 +And the idea with that is like let's say you're + +408 +00:37:17,860 --> 00:37:21,200 +using a client and you have the web authentication token now + +409 +00:37:21,440 --> 00:37:25,090 +and then this allows you to upgrade with that web authentication + +410 +00:37:25,590 --> 00:37:27,730 +token to the private database and have access to that. + +411 +00:37:30,530 --> 00:37:33,970 +So and then all the, all the signing is done + +412 +00:37:34,470 --> 00:37:37,650 +before you in miskit for the server to server because stuff that + +413 +00:37:38,150 --> 00:37:41,170 +needs to be signed, etc. And it takes care of all that. + +414 +00:37:41,570 --> 00:37:45,610 +All stuff that Claude was essentially able to decipher + +415 +00:37:46,110 --> 00:37:50,060 +from the documentation. + +416 +00:37:52,620 --> 00:37:54,300 +There's one more thing I wanted to show. + +417 +00:37:56,380 --> 00:38:00,220 +If you want to hop in with a question while I pull something up, + +418 +00:38:00,300 --> 00:38:00,940 +feel free. + +419 +00:38:21,190 --> 00:38:24,390 +No questions. Cool. + +420 +00:38:24,790 --> 00:38:28,630 +So I'm going to show one last thing and that is how + +421 +00:38:28,710 --> 00:38:30,310 +do we actually deploy this? + +422 +00:38:33,350 --> 00:38:36,950 +Is this too big, too small? Looks okay. + +423 +00:38:37,590 --> 00:38:40,070 +That looks good. Yeah, it looks good. Okay, cool. + +424 +00:38:43,850 --> 00:38:47,890 +So essentially what I've done is I'm using GitHub + +425 +00:38:48,390 --> 00:38:50,410 +Actions. There's a way you can. + +426 +00:38:53,130 --> 00:38:56,689 +This is all public by the way, so I will provide + +427 +00:38:57,189 --> 00:39:00,570 +URLs in the Slack or something. Let's do this one. + +428 +00:39:02,410 --> 00:39:07,220 +So this is a Swift package for + +429 +00:39:07,720 --> 00:39:10,660 +Bushel. It's called Bushel Cloud. It pulls the stuff up from. + +430 +00:39:11,220 --> 00:39:14,740 +Uses Miskit to go ahead and + +431 +00:39:16,740 --> 00:39:20,340 +pull, get access to CloudKit and + +432 +00:39:21,060 --> 00:39:24,860 +let me go back to the workflow. How familiar + +433 +00:39:25,360 --> 00:39:26,580 +are you with GitHub workflows? + +434 +00:39:29,860 --> 00:39:32,980 +Sadly not had the chance to work too deeply with them yet. + +435 +00:39:33,690 --> 00:39:37,490 +Okay. Basically it's like for CI, but you can also set + +436 +00:39:37,990 --> 00:39:41,850 +it up on a schedule. So I did that and then + +437 +00:39:42,890 --> 00:39:46,490 +it runs the scheduled job and then I just execute. + +438 +00:39:50,650 --> 00:39:54,650 +So then this was refactored over here into + +439 +00:39:55,150 --> 00:39:58,490 +an action. There we go. + +440 +00:39:59,540 --> 00:40:03,460 +And I have all sorts of stuff here for + +441 +00:40:05,380 --> 00:40:10,300 +like this is generic essentially, but all + +442 +00:40:10,800 --> 00:40:14,220 +these, the environment, etc. These are all passed from + +443 +00:40:14,720 --> 00:40:17,980 +that workflow into here. These are basically either API keys + +444 +00:40:18,480 --> 00:40:22,100 +or the information that I need for accessing Cloud, the public, + +445 +00:40:24,020 --> 00:40:28,120 +public database. Right. And then I + +446 +00:40:28,620 --> 00:40:31,880 +already pre built the binary. So we + +447 +00:40:32,380 --> 00:40:35,960 +already have that. We're running this on Ubuntu because + +448 +00:40:36,460 --> 00:40:40,280 +it's the default. Look at it. If there + +449 +00:40:40,780 --> 00:40:43,840 +is no binary, it goes ahead and builds the binary for me. + +450 +00:40:44,000 --> 00:40:45,200 +So that's what this is doing. + +451 +00:40:47,120 --> 00:40:50,640 +And then we make sure the binary works. + +452 +00:40:50,880 --> 00:40:54,450 +We make, we make it executable, we validate, make sure all the + +453 +00:40:55,010 --> 00:40:58,690 +API secrets are there. We then go ahead + +454 +00:40:58,930 --> 00:41:02,370 +and this validates the pim. But essentially this is the fun part. + +455 +00:41:03,410 --> 00:41:06,770 +We go ahead, we have all our inputs for the private key, + +456 +00:41:07,270 --> 00:41:09,570 +the key id, environment, container id. + +457 +00:41:10,610 --> 00:41:13,410 +And then I use Virtual Buddy for signing verification. + +458 +00:41:14,050 --> 00:41:14,450 +And. + +459 +00:41:18,460 --> 00:41:21,940 +It then goes in and it runs the + +460 +00:41:22,440 --> 00:41:25,660 +sync and then we'll go in. + +461 +00:41:25,980 --> 00:41:29,500 +Basically it pulls from several websites information + +462 +00:41:29,580 --> 00:41:32,939 +about macrosos, restore images and checks whether they're signed. + +463 +00:41:33,340 --> 00:41:37,540 +And then it goes ahead and it adds those to + +464 +00:41:38,040 --> 00:41:41,780 +the database. And then what this does is it exports the information in + +465 +00:41:42,280 --> 00:41:44,580 +a run. Let's, let's take a look, see if I have one. I can show + +466 +00:41:45,080 --> 00:41:47,420 +you. Oh, there's one scheduled. + +467 +00:41:50,060 --> 00:41:53,700 +Yeah, here we go. So there's 57 + +468 +00:41:54,200 --> 00:41:55,580 +new restore images created, + +469 +00:41:56,300 --> 00:41:58,300 +177 updated. + +470 +00:41:58,780 --> 00:42:02,300 +234 total. No operations + +471 +00:42:02,380 --> 00:42:05,900 +failed. I also store Xcode versions and Swift versions. + +472 +00:42:06,780 --> 00:42:10,460 +Those get stored as well. Had to rebuild it, + +473 +00:42:10,630 --> 00:42:11,830 +but here is the results. + +474 +00:42:13,750 --> 00:42:17,750 +I'm not going to pull that up, but it's essentially updated + +475 +00:42:18,250 --> 00:42:22,470 +my CloudKit database and + +476 +00:42:22,550 --> 00:42:25,870 +that's all in the public database. And then maybe even by + +477 +00:42:26,370 --> 00:42:29,910 +the time I present this, I'll have a working example in Bushel with that example + +478 +00:42:30,410 --> 00:42:33,750 +working, which would be awesome. Celestra, + +479 +00:42:33,990 --> 00:42:37,190 +same idea. So this looks like it was a RSS update. + +480 +00:42:38,910 --> 00:42:42,830 +We get the workflow file and. + +481 +00:42:43,330 --> 00:42:46,110 +Oh, sorry, I should point out, because you're probably wondering where is all these. + +482 +00:42:46,610 --> 00:42:50,150 +The stuff all these secrets stored? Yes, they are stored in + +483 +00:42:50,650 --> 00:42:53,910 +Actions secrets right here. So we have + +484 +00:42:54,410 --> 00:42:58,190 +our private key ID API key from + +485 +00:42:58,690 --> 00:43:01,230 +Virtual Buddy. So that's all stored there. + +486 +00:43:01,870 --> 00:43:05,830 +Here is Celestra. It's for updating RSS + +487 +00:43:06,330 --> 00:43:09,930 +feeds. So it just basically goes through. You can look at the Swift code + +488 +00:43:10,430 --> 00:43:14,490 +it goes through, pulls RSS feeds and updates them into a CloudKit + +489 +00:43:15,530 --> 00:43:18,490 +record or what do you call it? Yeah, record type. + +490 +00:43:19,850 --> 00:43:22,210 +And I of course try to do it in such a way not to hammer + +491 +00:43:22,710 --> 00:43:24,170 +people, but same idea, + +492 +00:43:27,050 --> 00:43:30,610 +yeah, it goes ahead and it runs the + +493 +00:43:31,110 --> 00:43:35,890 +binary it updates and then I also have like actual parameters + +494 +00:43:36,390 --> 00:43:40,170 +that I take to to filter out, like which RSS feeds are high priority + +495 +00:43:40,670 --> 00:43:44,330 +and which ones aren't based on the audience and etc. So yeah, + +496 +00:43:44,890 --> 00:43:48,410 +so that's deployment. That's how you can get that working. + +497 +00:43:48,810 --> 00:43:53,130 +There's weird stuff with cloud with GitHub that + +498 +00:43:53,690 --> 00:43:57,210 +I've noticed. If you haven't updated it in a while, it doesn't run these + +499 +00:43:57,710 --> 00:43:59,570 +cron jobs. So I need to figure out a how to get around it or + +500 +00:44:00,070 --> 00:44:04,030 +find another service to do it. This is all free because + +501 +00:44:04,110 --> 00:44:07,870 +it's public and it is running + +502 +00:44:08,370 --> 00:44:09,870 +on Ubuntu. So that's really great. + +503 +00:44:12,350 --> 00:44:16,070 +And the storage on CloudKit is dirt cheap, which is even + +504 +00:44:16,570 --> 00:44:16,830 +more awesome. + +505 +00:44:20,030 --> 00:44:23,990 +Sorry, let's see what else. I just + +506 +00:44:24,490 --> 00:44:27,150 +want to make sure I covered all my slides. The last thing I'm going to + +507 +00:44:27,650 --> 00:44:28,670 +talk about is just what are my plans? + +508 +00:44:30,390 --> 00:44:33,390 +Excuse me. So I don't know if you check. Follow me. + +509 +00:44:33,890 --> 00:44:34,550 +But I just released. + +510 +00:44:41,910 --> 00:44:45,750 +I just released Alpha 5 that has lookup zones, + +511 +00:44:46,250 --> 00:44:50,150 +fetch, record changes and upload assets. Upload the assets is pretty awesome. + +512 +00:44:50,230 --> 00:44:53,150 +When I saw that work because I was like, cool, I can actually upload a + +513 +00:44:53,650 --> 00:44:57,630 +binary to CloudKit, which is awesome. We got + +514 +00:44:58,130 --> 00:45:01,790 +query filters to work for in and not in, so you could do that I + +515 +00:45:02,290 --> 00:45:05,510 +have plans to continue working on this because I think there's a big future for + +516 +00:45:06,010 --> 00:45:09,590 +something like this for a lot of people. Yes, + +517 +00:45:10,090 --> 00:45:13,950 +you can technically use this in Android or Windows because the Swift + +518 +00:45:14,270 --> 00:45:17,670 +thing does compile in Android and Windows. You can see I already added support for + +519 +00:45:18,170 --> 00:45:22,360 +that. This is the support I recently had. And then we're. + +520 +00:45:22,860 --> 00:45:25,880 +I'm just kind of like going through each of these because as great as AI + +521 +00:45:26,380 --> 00:45:30,120 +is, it's not perfect. So we're just kind of going through these piece + +522 +00:45:30,620 --> 00:45:35,720 +by piece with each version and hammering these away and + +523 +00:45:36,220 --> 00:45:40,160 +then this is actually done. I don't even know why that's there. But yeah, + +524 +00:45:40,660 --> 00:45:43,960 +I think system field integration might already be there and there's + +525 +00:45:44,460 --> 00:45:48,120 +a few other things. Eventually I'd like to add support. + +526 +00:45:48,200 --> 00:45:52,880 +So there, there's a whole API for CloudKit schema management that + +527 +00:45:53,380 --> 00:45:55,720 +I could. That would be awesome if I could figure out how to do that. + +528 +00:45:56,220 --> 00:45:58,640 +If I could figure out how to do key path query filtering, that would be + +529 +00:45:59,140 --> 00:46:02,760 +fantastic. And yeah, + +530 +00:46:03,260 --> 00:46:06,080 +but there's a. I mean the basics is there as far as if you want + +531 +00:46:06,580 --> 00:46:09,080 +to do anything with a record, it's pretty much there. + +532 +00:46:09,720 --> 00:46:13,160 +One thing with Celestra is I'd love to be able to do like test out + +533 +00:46:13,660 --> 00:46:17,840 +subscriptions and see how that works. So yeah, + +534 +00:46:18,340 --> 00:46:20,040 +that's really the bulk of my presentation today. + +535 +00:46:21,800 --> 00:46:24,880 +Now is. Now it's time to ask me a ton of questions and make me + +536 +00:46:25,380 --> 00:46:26,600 +feel dumb. Go for it. + +537 +00:46:28,440 --> 00:46:32,160 +No, there's a lot there to. To absorb. + +538 +00:46:32,660 --> 00:46:36,000 +But I, I like the concept and I know you've been working on this + +539 +00:46:36,500 --> 00:46:39,720 +for a while and I always thought it was a pretty cool, pretty cool + +540 +00:46:40,030 --> 00:46:42,190 +idea and implementation of this. + +541 +00:46:42,750 --> 00:46:43,470 +Questions? + +542 +00:46:48,990 --> 00:46:50,030 +So with something like. + +543 +00:46:54,110 --> 00:46:58,110 +Accessing CloudKit through the web, is this setup more + +544 +00:46:58,610 --> 00:47:02,270 +ideal for having your server do + +545 +00:47:02,670 --> 00:47:06,650 +the authentication to CloudKit with Miskit or is + +546 +00:47:07,150 --> 00:47:10,530 +miskit something that you could put into even like a client side, + +547 +00:47:12,850 --> 00:47:17,010 +you know, like non Swift application or + +548 +00:47:17,510 --> 00:47:20,970 +I guess not non Swift but like non like app application. I'm thinking in + +549 +00:47:21,470 --> 00:47:22,049 +the context of like a. + +550 +00:47:25,730 --> 00:47:30,290 +I guess if I wanted to create a something + +551 +00:47:30,790 --> 00:47:33,410 +accessing CloudKit that is not your typical Mac or iOS app. + +552 +00:47:34,880 --> 00:47:36,160 +Can you be more specific? + +553 +00:47:37,840 --> 00:47:42,040 +I'm looking into one. One approach would be browser + +554 +00:47:42,540 --> 00:47:46,000 +extensions. So for + +555 +00:47:46,500 --> 00:47:48,240 +like a non Safari browser. Yes. + +556 +00:47:50,400 --> 00:47:54,120 +Yeah, this would be great. So basically the way you'd want + +557 +00:47:54,620 --> 00:47:58,240 +that to work, like the sticky part to me would be getting the web authentication + +558 +00:47:58,740 --> 00:48:01,090 +token. Other than that, like have at it. + +559 +00:48:04,610 --> 00:48:07,810 +So I'm gonna, I'm gonna be devil's advocate. Why not just use + +560 +00:48:08,310 --> 00:48:11,490 +the CloudKit JavaScript library. If it's an extension, + +561 +00:48:12,450 --> 00:48:14,290 +my brain jumps to Swift first. + +562 +00:48:15,730 --> 00:48:18,930 +Right. But it's the reason I'm asking that is like it's a, + +563 +00:48:19,410 --> 00:48:23,490 +it's already a web extension. I would assume that is true. That it's + +564 +00:48:23,990 --> 00:48:26,290 +90 web based or JavaScript based. + +565 +00:48:27,120 --> 00:48:30,560 +So that's where I'm just like, well, you may as well. Like, I would love. + +566 +00:48:30,640 --> 00:48:33,600 +I don't want to. Like, I love tooting my own horn. Right. But like, + +567 +00:48:34,880 --> 00:48:37,120 +like why not just. Unless you're. + +568 +00:48:40,720 --> 00:48:43,840 +Unless you're like building a executable, + +569 +00:48:44,160 --> 00:48:45,920 +I guess, or an app. Ish. + +570 +00:48:47,760 --> 00:48:52,040 +And I guess another application for this would be doing + +571 +00:48:52,540 --> 00:48:56,280 +CloudKit stuff server side and then providing my own API layer + +572 +00:48:56,780 --> 00:48:59,860 +over it. Yep, yep. So that's. + +573 +00:49:00,360 --> 00:49:03,740 +Yeah. Are we talking private database or public database? Private. + +574 +00:49:05,580 --> 00:49:09,140 +So in that case, basically like you'd have to go + +575 +00:49:09,640 --> 00:49:13,380 +the Hard Twitch route and you would have to + +576 +00:49:13,880 --> 00:49:17,420 +provide a way to get their web authentication + +577 +00:49:17,920 --> 00:49:21,260 +token, essentially, if that makes sense. And then store + +578 +00:49:21,760 --> 00:49:24,140 +it in Postgres or whatever the hell you want to do. Like that's, that's the + +579 +00:49:24,640 --> 00:49:27,520 +way I did it with Hard Twitch. But once you have that, you can do + +580 +00:49:28,020 --> 00:49:31,200 +anything you want on the server with their private database, + +581 +00:49:31,700 --> 00:49:34,480 +if that makes sense. It does. Yep. + +582 +00:49:34,560 --> 00:49:38,240 +Yep. A couple of things I wanted to bring up, + +583 +00:49:38,320 --> 00:49:39,520 +so let's take a look. + +584 +00:49:44,000 --> 00:49:47,400 +So part of my + +585 +00:49:47,900 --> 00:49:51,880 +other presentation is working, talking about cross + +586 +00:49:52,380 --> 00:49:56,760 +platform automation type stuff. And the + +587 +00:49:57,260 --> 00:50:00,680 +one issue I've run into is. So it basically builds on everything. + +588 +00:50:00,920 --> 00:50:01,560 +Right now. + +589 +00:50:07,560 --> 00:50:10,520 +I'm going to share something. Hey guys, + +590 +00:50:11,000 --> 00:50:14,680 +I got to drop. But it was good presentation, Leo. Thank you. + +591 +00:50:14,840 --> 00:50:17,640 +Yeah, yeah. If I have more questions, if you have any feedback, just hit me + +592 +00:50:18,140 --> 00:50:21,590 +up on Slack. Sounds good. Cool, thank you. Thank you so much + +593 +00:50:22,090 --> 00:50:25,910 +for helping me set this up. Yeah, talk to you later. Thank you. Bye bye. + +594 +00:50:28,870 --> 00:50:31,430 +Yeah, so if you had something else to show, I'm happy to look for. + +595 +00:50:31,930 --> 00:50:34,390 +I'm here for a few more minutes as well. Yeah, yeah, yeah. + +596 +00:50:38,790 --> 00:50:42,070 +So I have the workflow working here and it + +597 +00:50:42,570 --> 00:50:46,120 +does Ubuntu, it does Windows, it does Android. + +598 +00:50:46,620 --> 00:50:50,920 +So all that stuff is available to you. I would never recommend using Miskit + +599 +00:50:51,420 --> 00:50:54,240 +on an Apple platform for obvious reasons, like what's the point? + +600 +00:50:55,600 --> 00:50:59,360 +True. Unless there's something special that I provide that CloudKit doesn't like, + +601 +00:50:59,440 --> 00:51:03,520 +I don't get it. Right. But we have an + +602 +00:51:04,020 --> 00:51:07,640 +issue. So I just started dabbling. I haven't really done anything + +603 +00:51:08,140 --> 00:51:11,730 +with wasm, but I did definitely try. Like I added support for + +604 +00:51:12,230 --> 00:51:14,890 +WASM in my, in my Swift build action. + +605 +00:51:17,210 --> 00:51:21,050 +The thing about WASA is it does not provide. It doesn't have a transport + +606 +00:51:21,130 --> 00:51:24,410 +available. So we talked about transports, + +607 +00:51:26,010 --> 00:51:30,090 +I think. Did you hear about that part about the Open API generator and transports? + +608 +00:51:31,370 --> 00:51:33,690 +I think I was coming in at that point. + +609 +00:51:34,410 --> 00:51:36,670 +Okay. When you create a client, + +610 +00:51:37,630 --> 00:51:42,630 +so underneath the client you + +611 +00:51:43,130 --> 00:51:46,990 +have what's called a client transport. This is so underneath this + +612 +00:51:47,490 --> 00:51:51,270 +client, this is an abstraction layer above. So this is not the right + +613 +00:51:51,770 --> 00:51:53,390 +one. Where's the public one? + +614 +00:52:00,680 --> 00:52:05,440 +But anyway, there is here + +615 +00:52:05,940 --> 00:52:06,920 +CloudKit service maybe. + +616 +00:52:09,560 --> 00:52:13,640 +Yeah, here we go. So the CloudKit service has + +617 +00:52:14,140 --> 00:52:17,960 +a client and part of the client is being able + +618 +00:52:19,960 --> 00:52:23,560 +to say what transport you use in Open API. + +619 +00:52:24,760 --> 00:52:29,330 +And there's + +620 +00:52:29,830 --> 00:52:33,730 +two transports available right now. One is, + +621 +00:52:36,850 --> 00:52:40,210 +one is your regular URL session for clients, which. + +622 +00:52:40,710 --> 00:52:43,810 +That makes sense. Right. And then there's the Async HTTP + +623 +00:52:44,310 --> 00:52:47,970 +client which is typically used like Swift NEO based for servers. + +624 +00:52:49,330 --> 00:52:53,170 +The thing is that neither of those are available in wasp. + +625 +00:52:54,290 --> 00:52:57,810 +Do you know what WASM is? I have no experience with it, but yes. + +626 +00:52:58,850 --> 00:53:02,290 +Okay. It's. It's the web browser. Right. So. + +627 +00:53:02,690 --> 00:53:04,850 +So you really can't use Miskit in. + +628 +00:53:06,450 --> 00:53:10,210 +In the. In WASM yet because there is no transport. Now having said that, + +629 +00:53:10,530 --> 00:53:12,450 +why on earth would you use. + +630 +00:53:13,090 --> 00:53:16,970 +Awesome. Why would you use Miskit in the browser? Why not just use CloudKit + +631 +00:53:17,470 --> 00:53:20,700 +js? So that's essentially, + +632 +00:53:21,580 --> 00:53:22,060 +you know, + +633 +00:53:29,260 --> 00:53:30,940 +What other questions do you have? + +634 +00:53:35,660 --> 00:53:41,340 +My brain is mushy right now, so because + +635 +00:53:41,840 --> 00:53:45,450 +of my presentation or because other things, I got two hours of + +636 +00:53:45,950 --> 00:53:50,170 +sleep. Oh, I'm so sorry. So I'm + +637 +00:53:50,670 --> 00:53:51,450 +following as best as I can. + +638 +00:53:54,330 --> 00:53:57,410 +Snuggling. Yeah, + +639 +00:53:57,910 --> 00:54:01,410 +the intro was basically how I originally built it + +640 +00:54:01,910 --> 00:54:06,210 +for hard Twitch in 2020 for a private database login for + +641 +00:54:06,710 --> 00:54:09,210 +the Apple Watch because I don't want to have a login screen. And so basically + +642 +00:54:09,710 --> 00:54:12,490 +there's a way in the web browser to link your Apple Watch to your account + +643 +00:54:12,990 --> 00:54:16,280 +and then from there you don't need to authenticate anymore. Nice. I built + +644 +00:54:16,780 --> 00:54:20,280 +that all from hand and then in 23 they + +645 +00:54:20,780 --> 00:54:24,720 +came out with the Open API generator which was like, oh wait, what if + +646 +00:54:24,800 --> 00:54:28,160 +I can create an open API file out of + +647 +00:54:28,320 --> 00:54:30,800 +Apple's 10 year old documentation? + +648 +00:54:33,120 --> 00:54:36,280 +That'd be a lot of work, but I could do it. And I + +649 +00:54:36,780 --> 00:54:40,480 +don't know if you heard, but there was this thing that came out a + +650 +00:54:40,980 --> 00:54:45,340 +couple years ago called AI and it's + +651 +00:54:45,840 --> 00:54:49,140 +really good at creating documentation for your code, but it's also really good at creating + +652 +00:54:49,640 --> 00:54:53,940 +code for your documentation. And so I was like, oh yeah, + +653 +00:54:54,440 --> 00:54:57,900 +this is great. Like I can just, I can just Feed it + +654 +00:54:58,400 --> 00:55:01,940 +the documentation and go from there. + +655 +00:55:02,020 --> 00:55:05,140 +And, like, basically, I've been going step by step through. + +656 +00:55:05,940 --> 00:55:09,300 +Like I said, if you looked at the miskit repo, + +657 +00:55:09,800 --> 00:55:14,620 +like, I'm going through step by step and adding new APIs based + +658 +00:55:15,120 --> 00:55:18,180 +on what's available in the documentation, piece by piece. And I would say at this + +659 +00:55:18,680 --> 00:55:22,420 +point, it's like most of the really, like 80% of that people use + +660 +00:55:22,920 --> 00:55:26,700 +is there. There's like, stuff like subscriptions and zones that I'm still trying + +661 +00:55:27,200 --> 00:55:30,940 +to figure out, but it's. It's pretty close to done at this point. + +662 +00:55:31,260 --> 00:55:31,900 +Mm. + +663 +00:55:35,110 --> 00:55:38,590 +If you use it. Yeah, it's one of those. Because I. Go ahead. + +664 +00:55:39,090 --> 00:55:41,070 +Yeah. I was gonna say it's one of those projects that makes me want to + +665 +00:55:41,570 --> 00:55:45,110 +set up a. Like a vapor server or something just to do some Swift on + +666 +00:55:45,610 --> 00:55:48,150 +the server. Yeah. Or just like, + +667 +00:55:48,870 --> 00:55:52,470 +I wonder if there's like, something you do on a pie, like just + +668 +00:55:52,970 --> 00:55:55,350 +hook it up to a CloudKit database. Like, there's a lot you could do here + +669 +00:55:55,850 --> 00:55:57,510 +because all you need is decent os. + +670 +00:55:58,950 --> 00:56:02,110 +I don't know anything about sharing. I haven't done anything with sharing yet, + +671 +00:56:02,610 --> 00:56:05,180 +so I still have to do that and a few other things, but. No, + +672 +00:56:05,680 --> 00:56:08,940 +yeah, it's an interesting idea. + +673 +00:56:09,900 --> 00:56:12,860 +Thank you. Yeah. Well, thank you for joining, + +674 +00:56:13,360 --> 00:56:17,340 +Josh. Yeah. Thanks for hosting this and sharing this info. It's nice. + +675 +00:56:18,060 --> 00:56:20,780 +Yeah. If you ever run into anything, let me know. + +676 +00:56:21,420 --> 00:56:24,780 +Will do. All right, talk to you later. All right, + +677 +00:56:25,280 --> 00:56:26,700 +sounds good. See you. Bye. + diff --git a/docs/transcriptions/transcript.txt b/docs/transcriptions/transcript.txt new file mode 100644 index 00000000..408179fe --- /dev/null +++ b/docs/transcriptions/transcript.txt @@ -0,0 +1,177 @@ +Speaker A: Hey, Evan, can you hear me all right? + +Speaker B: Yeah, I can hear you. + +Speaker A: Awesome. How do I sound? Good. I've used this microphone in ages. It's like all dusty. How you think I should wait like five minutes for people to come in or. + +Speaker B: Probably. Yeah, that there's if. Yeah, otherwise you can just. You could start, but that'll be interesting. + +Speaker A: Do you mind if I grab a cup of coffee real quick? + +Speaker B: No, not at all. + +Speaker A: Not at all. Okay, cool. I'm not using the AirPods mic, so I can hear you, but you won't be able to hear me. + +Speaker B: Okay. + +Speaker A: It's. Thank you for your patience. So is it just you? + +Speaker B: It looks like it's just me. Josh is trying to get in, but he's trying to get on on his mobile device and I don't think that's possible with Riverside. + +Speaker A: Surprised? I mean, I know they have an app. + +Speaker B: Maybe he's using. I'm not sure if he's using. Using the app or not. + +Speaker A: Okay. Should I just go? + +Speaker B: Sure. + +Speaker A: Okay. Well, thanks for joining me, Evan. I really appreciate it. I would say no. I mean I do, seriously. So yeah, this is a kind of a dry run. I would say I'm about 60% done with this presentation about CloudKit on the server and we'll probably hop back and forth between Keynote and not Keynote, but yeah. So this is CloudKit as your backend from iOS to server side Swift. So what is CloudKit? CloudKit is a service launched by Apple probably a decade ago to kind of give developers a built in back end for storing data for their apps. One of the biggest benefits is is how cheap it is to use for iOS developers. So if you have built an app, you could just add CloudKit right here within the Xcode project and use the regular CloudKit API in Swift to go ahead and start using it in your app. Here is what it looks like to create a new record type. You can do all this through the CloudKit dashboard. In CloudKit you could also do this using a schema file too. And you can export and import your schema that way. And it's not a SQL based database, it's much more, no sequel ish or an abstract layer above it. But essentially you can create records kind of like a table but not quite in your records. You can create a struct for it. You can just use CloudKit directly to go ahead and then you can then plug it into your app and do fun stuff like this. We can do things like queries and basic database stuff. There's a lot of advantages to it. For one, if you're doing Apple only, then it definitely makes sense to look into, at least look into CloudKit. If you're just going to deploy to Apple Devices. If you don't mind the, the fact that it's not a regular SQL database, that's something too to think about. If you like need a SQL database, this might not be what you want. And then if you don't mind working with a lot of the abstraction layers that CloudKit provides, then this might be good for you to get started or especially if you don't have any database experience. So as far as like server choices, I would say CloudKit might not be your first choice, but it certainly is a decent choice if you're going the Apple only route. But then the question comes in, why would you want Cloud server side CloudKit? Why would you want to do anything with CloudKit on the server? So here's, here's the first case. Well, this is how you can go ahead and do that is they provide actually a REST API for calls to CloudKit using the, if you go to the documentation, I'll provide a link to that CloudKit Web Services which provides a lot of the documentation for what we'll be talking about today. A lot of this is abstracted out in the JavaScript library. So if you want to do stuff on a website, they provide a CloudKit JavaScript library for that. Sorry, just going into do not disturb mode. They even in that web references documentation they provide a composing web service request and all these instructions about how to go ahead and do that. So man, was it like half a decade ago that I built Heart Twitch and at the time I don't think there was anything, there was anything like sign in with Apple even. And like I really didn't want like to explain how harshwitch works is you have like a watch and it will send the heart rate to the server and then the server will then use a web socket to push it out to a web page. And then you would point OBS or some sort of streaming software to the URL or to the browser window and then that way you can stream your heart rate. That's how it works. And what I really didn't want is a difficult way for a user to log in with a username and password on the watch because we all know typing on the watch is hell. So my, my thought was like, and I didn't have sign in with Apple, right? So my thought was why don't we use CloudKit? Because you're already signed in a CloudKit on the Watch with your, your id. And what you do is you log in with a regular like email address and password in Heart Twitch on the website. And then there's a little, there's a site, there's a part of the site where you can sign into CloudKit and then from there you can, because, because of the CloudKit JavaScript library, you can then I can then pull the all the devices because when you first launch the app on the Watch, it adds your watch to the CloudKit database. And then I could pull that in and then add that to my postgres database. So then there is no need for authentication because I already have the CloudKit, the device added in my postgres database. So it's kind of like knows, oh yeah, this is Leo's watch, he doesn't need to authenticate. And that way we can link devices to accounts without having to do any sort of login process. And so this was my use case for doing server side. Essentially CloudKit was I could call the CloudKit web server based on that person's web authentication token, which we'll get all into later. I then pull that information in. So. Cool. Just checking if anybody's having issues. It doesn't look like it. So that's good to know. So that was the private database piece, but I actually think a much more useful case would be the public database because the idea would be is that you'd have some sort of app that would use central repository of data that it can pull information from. And I'm looking at both of these with Bushel and then an RSS reader I'm building called Celestra with Bushel. The. The way it's built right now is I have this concept of hubs and you can plug in a URL and that URL would provide or some sort of service. That service would then provide the Entire List of macOS restore images that are available. But then I realized like really there's only one location for those and each service is just going to be using the same URLs anyway. So if I had one central repository or one central database because they all pull from Apple, I can then parse the web for those restore images and then store them in CloudKit and then that way Bushel can then pull those from one single repository. And all I would have to do, and what I'm doing now is running basically a GitHub action or you could do like a Cron job where it would run on Ubuntu, wouldn't even need a Mac and it would download and scrape the web for restore images and storm in the public database. It's the same idea with Celestra. It's an RSS reader. What if I took those RSS RSS files in the web and just scrape them and then store them in a CloudKit database in a public database and then that way people can pull that up all through CloudKit. So the idea today is we're going to talk about how to set something, how I set something like this up and how you could use use my library to then go ahead and do this yourself for any sort of work that you're going to do that where you want to use either a public or private database in CloudKit. So this is where I introduce myself. So I'm going to talk today about building Miskit, which is my library I built for doing CloudKit stuff on the server or essentially off of, not off of Apple platforms. Evan, do you have any questions before I keep going? + +Speaker B: No, it's good. Good topic though. + +Speaker A: So like I said, we have CloudKit Web Services and CloudKit Web Services. We provide a lot of documentation. We talked about CloudKit JS and the instructions on how to compose a web service request which has everything I need to compose one. And back in 2020 I did this all manually. The thing is at this point, if you look at right there, actually if you look at the top, you can see it hasn't been updated in over 10 years, which is kind of crazy, but it works. And then we got introduced to something back in WWDC I want to say it was 23. We got introduced to the Open API generator which is really nice because then we have, we can generate the Swift code if we know what the Open API documentation looks like it. And of course Apple doesn't provide one for CloudKit but they did provide a pretty big piece open. If you ever you looked at the Open API generator, it's amazing. Takes the Open API gamble file and generates all the Swift code you need. One of the other issues I had with first developing Miskit in 2020 was that there was no way to like there was no abstraction layer which could differentiate between doing something on the server or using regular like URL session which is more targeted towards client side. So I had to build my own abstraction for that. Luckily Open API has, there's open API transport I believe, which provides an abstraction layer where you can then plug in either use Async HTTP client, which is the server way of doing it, or you can plug in a URL session transport, which is of course the client way to do, provides a really great tutorial. I highly recommend checking this out as well as the doxy documentation that they provide. So this is great. But then I'd have to go ahead and I'd have to figure out a way to convert all this documentation into an open API document. I mean, can you guess what helped me to get build an open API document from all this documentation? + +Speaker B: Some of the tools, some AI tool. + +Speaker A: Yes. AI came and I'm like, holy crap. Like AI is really good at documenting your code, but it's also pretty darn good at taking documentation and building code. So then I would just plug it. I've been plugging in with Claude and it has a copy of all the documentation in my repo and it can go ahead and edit the open API. It's not perfect by any means, of course, but that's what unit tests are for. And actually having integration tests in order to do stuff so that. Sorry, I just want to make sure nothing important. I hate teams. Okay, so great. So let's talk about. Sorry, slides are still not done, but let's talk about authentication methods. You can see I have the logos here, but I haven't quite cleaned this up. So there's really two and a half authentication methods when it comes to CloudKit. So here is the miss demo database. You just go in here and you can go to tokens and keys and then that will give you access to set up either the API if you want to do API key or API token if you want to do a private database or a server to server keyset if you want to do a public database. So let's talk about the API token. Pretty simple. You just go into here, click the plus sign, you say a name and you say whether you want to do a post message or URL redirect. We'll get into that in a little bit in the next section. And then whether you want to have user info and you click save and you'll get a nice little API token you could use in your web your web calls essentially. API doesn't really. The API token doesn't really give you a lot of. But what it does give you is it gives you an entry to get a web authentication token for a user. So basically the way that works. So you'll notice here, when we were in this section, we have this piece here called Sign in Callback. So you can have either call a JavaScript, it's called a message event, it will call a Message event and a message event will have the metadata with the web authentication token of that user. Or you could do URL redirect where on authentication the user has a URL and then part of that URL is then having part of one of the query parameters and we'll get into that. We'll then have the web authentication token in the URL. So you put, basically you have your website, you add the JavaScript, you need to add the sign in with Apple. Oh, here's Josh. Oh cool. Josh, you there? + +Speaker C: I hope so. + +Speaker A: Good. Okay. Hey, we were just talking about how to set up. I'm going to go back a little bit Evan, but not too far back. + +Speaker B: Yeah, no worries. + +Speaker A: That's okay. But we talked about setting up API token and how to do that. So you go in here, you just click plus, you select your sign in callback and you put in a name and it'll give you an API token once you click save. Basically. Come on. The reason you want an API token is this allows you to then have users Sign in to CloudKit either using, using the the web service like Curl or you could also do it through a website using CloudKit js. So web authentication token we talked about how you can either do the post message or you can do the URL redirect. Basically you have the JavaScript on your website and there has a button, click the button, you get this nice little window here sign in and then when you sign in if you had selected post message, you'll get the web authentication token and the data of the event in JavaScript or you will get the web authentication token as a URL in the callback URL here. Does that make sense? + +Speaker B: Yep. + +Speaker A: Yeah. In some cases if you scour the Internet so Stack overflow will tell you and this has happened to me sometimes it will not be CK web authentication token, sometimes it'll be CK session because that's what Apple likes to do. But it's the same thing. So you basically want to look for either property or query parameter name and you should be good to go and then you'll have that user as well authentication token you could do. What I, what I've been doing is, is I've been take like making a call to a like local server for instance and then essentially then I could do whatever I want with that web authentication token. As long as you have the web authentication token and the API token you can do anything on a private database that the user has rights to. So you can go, you can go to town with that all this stuff gets Swift in a cookie too. So that way it'll work. When you go back, if you have checked the box for allow, it's either a box or JavaScript method property that will say, hey, I want this to persist. It'll be Swift in a, in a cookie as well. So if you want to spelunk your cookies, you can see the web authentication token there. So that's actually the easier of the two. So that gives you the private database for the public database is where you're going to need a server to server authentication. And so to do that it's really actually not as bad as I thought it was going to be. But you go to the new server to server key, put in a name you want, it'll actually give you the command you need to run and then you just paste in the public key in here. That gives you. That will give you everything you need. So here's how to run it. Basically, sorry about that. We just run that. That gives us the key. We can go ahead and get the public key. We can also pipe it to PB Copy and then all we have to do is paste that in the box over here. There we go. It's pretty complicated to use the server key. We can spell on the miskit code on how to do it because it does a lot of that work for you if you have it. But you will need the, the private key, the key id, I think, I think that's it. And then you should be good with having access now to the public database. So just to go over, there's differences between the public and private database. So this is query. You can see my cursor, right? Query and lookup of records is available on all but file changes or, excuse me, record changes. It's not available on public zones, aren't really available in public zone changes aren't available in public notifications. Zone notifications aren't available in public, but query notifications are. And you can also do any stuff with assets which are basically binary files. You can also do that in all of them. You can't do query notifications on shared. Shared would essentially work like private essentially. So it's just a matter of who. Who's the owner and how is it shared. So one of the big challenges I think we've all faced this when we've dealt with certain web services is field type polymorphism. If you've done JSON where you don't know what type you're getting back or what data you're getting back, this can Be a bit challenging. So if you look at the documentation in Web Services Reference, there is a, there's a page called types and dictionaries and there is types. There's different type values for each field. If you're familiar with CloudKit, you've seen this, right? So you have an asset which is basically a, a binary file. You have bytes which is essentially a 60 byte base 64 encoded string, date type which is returned as a number. Double is returned as a number because These are the JavaScript types. Int is returned as a number and then there's location reference and then string and list. And how would you like, how do you do adjacent object like this? How would you even represent this in Swift? Because you don't know what type you're going to get. So like I said, this is a work in progress. Sorry. So what I do, I don't know how much you can see this. I'm going to actually move over to my documentation here at this point. So how are we doing on time? We good? + +Speaker B: Yeah, I think, I think we're doing good. + +Speaker A: Okay, cool. Any, do you want to ask questions? + +Speaker B: I don't have anything right now. + +Speaker C: Same nothing right now. But this seems applicable to things I'll be doing coming up. + +Speaker A: Okay, cool. So we have set up in the open. So we have an open API YAML file that you can pull up in Miskit, which is basically every like the documentation converted to YAML. And so what we do is you can set up in the YAML the field value requests and they have an enum type essentially for, for open API. So and then, so this has, you know, it could be one of either any of these types of. And then there's an enum in case you have a list. So if you have a list value type there is an extra property called type and then that will tell you what type the. The list is. And it's homo homomorphic. It's all the same list type. You can't have lists of different types. And then we have here again field value. Sometimes the type is available, sometimes it's not. But basically we have all the different value types available to us in a CK value. And then this is. Then the Open API generator essentially builds this for me which is. Has an enum and a struck for field field value request and then it does all the decoding for me. Thankfully I didn't have to do any of it. And then yeah, I just wanted to cover that piece where we show how we deal with these kind of like polymorphic types and how those work. The next thing I want to cover is error handling. So if you look at the documentation gives you. If you get an error we get something like this and then that will show you in the. In the table actually shows you what each error means. So again we do like an enum in YAML. It's basically a string and then we have everything else be a string. And then the open API generator will automatically generate this which gives us the server error code and the error response. It'll also do all this stuff here, which is really nice. And then we've then in our. We've abstracted a lot of this in miskit. So that way we also have now a cloud cloud error type which gives us a lot more info regarding that. So that's how we handle errors. And everything I do in the abs, the more abstract higher up stuff is done using type throws like I have type throws and everything. So that's how I handle that. Let me check one last piece I wanted to cover. The last piece I want to cover is really cool. And that is the authentication layer. So Open API provides what's called middleware and that allows you to, when you create a client or a server, you can plug that in and it will handle like let's say you need to make modifications with the request or response. When it comes in, you can intercept it and make whatever modifications you want to make. And in this case what we've done is I've created an authentication middleware which then sees if you have what's called a token manager and an authentic you have that and an authentication method. And the way it works is you pick what type of authentication you want to use. If you already have like a pre existing web token or you already have, or you, you know, have your key ID and your private key already, or you just have the API token. We've created basically a middleware that uses that. So this is how it creates the headers for server to server. So it does all this for us. And then what I added, which I think is really nice, is called the adaptive token manager. And the idea with that is like let's say you're using a client and you have the web authentication token now and then this allows you to upgrade with that web authentication token to the private database and have access to that. So and then all the, all the signing is done before you in miskit for the server to server because stuff that needs to be signed, etc. And it takes care of all that. All stuff that Claude was essentially able to decipher from the documentation. There's one more thing I wanted to show. If you want to hop in with a question while I pull something up, feel free. No questions. Cool. So I'm going to show one last thing and that is how do we actually deploy this? Is this too big, too small? Looks okay. + +Speaker C: That looks good. + +Speaker B: Yeah, it looks good. + +Speaker A: Okay, cool. So essentially what I've done is I'm using GitHub Actions. There's a way you can. This is all public by the way, so I will provide URLs in the Slack or something. Let's do this one. So this is a Swift package for Bushel. It's called Bushel Cloud. It pulls the stuff up from. Uses Miskit to go ahead and pull, get access to CloudKit and let me go back to the workflow. How familiar are you with GitHub workflows? + +Speaker C: Sadly not had the chance to work too deeply with them yet. + +Speaker A: Okay. Basically it's like for CI, but you can also set it up on a schedule. So I did that and then it runs the scheduled job and then I just execute. So then this was refactored over here into an action. There we go. And I have all sorts of stuff here for like this is generic essentially, but all these, the environment, etc. These are all passed from that workflow into here. These are basically either API keys or the information that I need for accessing Cloud, the public, public database. Right. And then I already pre built the binary. So we already have that. We're running this on Ubuntu because it's the default. Look at it. If there is no binary, it goes ahead and builds the binary for me. So that's what this is doing. And then we make sure the binary works. We make, we make it executable, we validate, make sure all the API secrets are there. We then go ahead and this validates the pim. But essentially this is the fun part. We go ahead, we have all our inputs for the private key, the key id, environment, container id. And then I use Virtual Buddy for signing verification. And. It then goes in and it runs the sync and then we'll go in. Basically it pulls from several websites information about macrosos, restore images and checks whether they're signed. And then it goes ahead and it adds those to the database. And then what this does is it exports the information in a run. Let's, let's take a look, see if I have one. I can show you. Oh, there's one scheduled. Yeah, here we go. So there's 57 new restore images created, 177 updated. 234 total. No operations failed. I also store Xcode versions and Swift versions. Those get stored as well. Had to rebuild it, but here is the results. I'm not going to pull that up, but it's essentially updated my CloudKit database and that's all in the public database. And then maybe even by the time I present this, I'll have a working example in Bushel with that example working, which would be awesome. Celestra, same idea. So this looks like it was a RSS update. We get the workflow file and. Oh, sorry, I should point out, because you're probably wondering where is all these. The stuff all these secrets stored? Yes, they are stored in Actions secrets right here. So we have our private key ID API key from Virtual Buddy. So that's all stored there. Here is Celestra. It's for updating RSS feeds. So it just basically goes through. You can look at the Swift code it goes through, pulls RSS feeds and updates them into a CloudKit record or what do you call it? Yeah, record type. And I of course try to do it in such a way not to hammer people, but same idea, yeah, it goes ahead and it runs the binary it updates and then I also have like actual parameters that I take to to filter out, like which RSS feeds are high priority and which ones aren't based on the audience and etc. So yeah, so that's deployment. That's how you can get that working. There's weird stuff with cloud with GitHub that I've noticed. If you haven't updated it in a while, it doesn't run these cron jobs. So I need to figure out a how to get around it or find another service to do it. This is all free because it's public and it is running on Ubuntu. So that's really great. And the storage on CloudKit is dirt cheap, which is even more awesome. Sorry, let's see what else. I just want to make sure I covered all my slides. The last thing I'm going to talk about is just what are my plans? Excuse me. So I don't know if you check. Follow me. But I just released. I just released Alpha 5 that has lookup zones, fetch, record changes and upload assets. Upload the assets is pretty awesome. When I saw that work because I was like, cool, I can actually upload a binary to CloudKit, which is awesome. We got query filters to work for in and not in, so you could do that I have plans to continue working on this because I think there's a big future for something like this for a lot of people. Yes, you can technically use this in Android or Windows because the Swift thing does compile in Android and Windows. You can see I already added support for that. This is the support I recently had. And then we're. I'm just kind of like going through each of these because as great as AI is, it's not perfect. So we're just kind of going through these piece by piece with each version and hammering these away and then this is actually done. I don't even know why that's there. But yeah, I think system field integration might already be there and there's a few other things. Eventually I'd like to add support. So there, there's a whole API for CloudKit schema management that I could. That would be awesome if I could figure out how to do that. If I could figure out how to do key path query filtering, that would be fantastic. And yeah, but there's a. I mean the basics is there as far as if you want to do anything with a record, it's pretty much there. One thing with Celestra is I'd love to be able to do like test out subscriptions and see how that works. So yeah, that's really the bulk of my presentation today. Now is. Now it's time to ask me a ton of questions and make me feel dumb. Go for it. + +Speaker B: No, there's a lot there to. To absorb. But I, I like the concept and I know you've been working on this for a while and I always thought it was a pretty cool, pretty cool idea and implementation of this. + +Speaker A: Questions? + +Speaker C: So with something like. Accessing CloudKit through the web, is this setup more ideal for having your server do the authentication to CloudKit with Miskit or is miskit something that you could put into even like a client side, you know, like non Swift application or I guess not non Swift but like non like app application. I'm thinking in the context of like + +Speaker A: a. + +Speaker C: I guess if I wanted to create a something accessing CloudKit that is not your typical Mac or iOS app. + +Speaker A: Can you be more specific? + +Speaker C: I'm looking into one. One approach would be browser extensions. + +Speaker A: So for like a non Safari browser. + +Speaker C: Yes. + +Speaker A: Yeah, this would be great. So basically the way you'd want that to work, like the sticky part to me would be getting the web authentication token. Other than that, like have at it. So I'm gonna, I'm gonna be devil's advocate. Why not just use the CloudKit JavaScript library. + +Speaker C: If it's an extension, my brain jumps to Swift first. + +Speaker A: Right. But it's the reason I'm asking that is like it's a, it's already a web extension. I would assume that is true. That it's 90 web based or JavaScript based. So that's where I'm just like, well, you may as well. Like, I would love. I don't want to. Like, I love tooting my own horn. Right. But like, like why not just. Unless you're. Unless you're like building a executable, I guess, or an app. Ish. + +Speaker C: And I guess another application for this would be doing CloudKit stuff server side and then providing my own API layer over it. + +Speaker A: Yep, yep. So that's. Yeah. Are we talking private database or public database? + +Speaker C: Private. + +Speaker A: So in that case, basically like you'd have to go the Hard Twitch route and you would have to provide a way to get their web authentication token, essentially, if that makes sense. And then store it in Postgres or whatever the hell you want to do. Like that's, that's the way I did it with Hard Twitch. But once you have that, you can do anything you want on the server with their private database, if that makes sense. + +Speaker C: It does. + +Speaker A: Yep. Yep. A couple of things I wanted to bring up, so let's take a look. So part of my other presentation is working, talking about cross platform automation type stuff. And the one issue I've run into is. So it basically builds on everything. Right now. I'm going to share something. + +Speaker B: Hey guys, I got to drop. But it was good presentation, Leo. Thank you. + +Speaker A: Yeah, yeah. If I have more questions, if you have any feedback, just hit me up on Slack. + +Speaker B: Sounds good. + +Speaker A: Cool, thank you. Thank you so much for helping me set this up. Yeah, talk to you later. + +Speaker B: Thank you. Bye bye. + +Speaker C: Yeah, so if you had something else to show, I'm happy to look for. I'm here for a few more minutes as well. + +Speaker A: Yeah, yeah, yeah. So I have the workflow working here and it does Ubuntu, it does Windows, it does Android. So all that stuff is available to you. I would never recommend using Miskit on an Apple platform for obvious reasons, like what's the point? + +Speaker C: True. + +Speaker A: Unless there's something special that I provide that CloudKit doesn't like, I don't get it. + +Speaker C: Right. + +Speaker A: But we have an issue. So I just started dabbling. I haven't really done anything with wasm, but I did definitely try. Like I added support for WASM in my, in my Swift build action. The thing about WASA is it does not provide. It doesn't have a transport available. So we talked about transports, I think. Did you hear about that part about the Open API generator and transports? + +Speaker C: I think I was coming in at that point. + +Speaker A: Okay. When you create a client, so underneath the client you have what's called a client transport. This is so underneath this client, this is an abstraction layer above. So this is not the right one. Where's the public one? But anyway, there is here CloudKit service maybe. Yeah, here we go. So the CloudKit service has a client and part of the client is being able to say what transport you use in Open API. And there's two transports available right now. One is, one is your regular URL session for clients, which. That makes sense. Right. And then there's the Async HTTP client which is typically used like Swift NEO based for servers. The thing is that neither of those are available in wasp. Do you know what WASM is? + +Speaker C: I have no experience with it, but yes. + +Speaker A: Okay. It's. It's the web browser. Right. So. So you really can't use Miskit in. In the. In WASM yet because there is no transport. Now having said that, why on earth would you use. Awesome. Why would you use Miskit in the browser? Why not just use CloudKit js? So that's essentially, you know, What other questions do you have? + +Speaker C: My brain is mushy right now, so + +Speaker A: because of my presentation or because other + +Speaker C: things, I got two hours of sleep. + +Speaker A: Oh, I'm so sorry. + +Speaker C: So I'm following as best as I can. + +Speaker A: Snuggling. Yeah, the intro was basically how I originally built it for hard Twitch in 2020 for a private database login for the Apple Watch because I don't want to have a login screen. And so basically there's a way in the web browser to link your Apple Watch to your account and then from there you don't need to authenticate anymore. Nice. I built that all from hand and then in 23 they came out with the Open API generator which was like, oh wait, what if I can create an open API file out of Apple's 10 year old documentation? That'd be a lot of work, but I could do it. And I don't know if you heard, but there was this thing that came out a couple years ago called AI and it's really good at creating documentation for your code, but it's also really good at creating code for your documentation. And so I was like, oh yeah, this is great. Like I can just, I can just Feed it the documentation and go from there. And, like, basically, I've been going step by step through. Like I said, if you looked at the miskit repo, like, I'm going through step by step and adding new APIs based on what's available in the documentation, piece by piece. And I would say at this point, it's like most of the really, like 80% of that people use is there. There's like, stuff like subscriptions and zones that I'm still trying to figure out, but it's. It's pretty close to done at this point. + +Speaker B: Mm. + +Speaker A: If you use it. + +Speaker C: Yeah, it's one of those. + +Speaker A: Because I. Go ahead. + +Speaker C: Yeah. I was gonna say it's one of those projects that makes me want to set up a. Like a vapor server or something just to do some Swift on the server. + +Speaker A: Yeah. Or just like, I wonder if there's like, something you do on a pie, like just hook it up to a CloudKit database. Like, there's a lot you could do here because all you need is decent os. I don't know anything about sharing. I haven't done anything with sharing yet, so I still have to do that and a few other things, but. No, yeah, + +Speaker C: it's an interesting idea. + +Speaker A: Thank you. + +Speaker B: Yeah. + +Speaker A: Well, thank you for joining, Josh. + +Speaker C: Yeah. Thanks for hosting this and sharing this info. It's nice. + +Speaker A: Yeah. If you ever run into anything, let me know. Will do. All right, talk to you later. All right, sounds good. + +Speaker C: See you. + +Speaker A: Bye. + +Speaker C: Bye. \ No newline at end of file diff --git a/docs/transcriptions/transcript.vtt b/docs/transcriptions/transcript.vtt new file mode 100644 index 00000000..0ac16ceb --- /dev/null +++ b/docs/transcriptions/transcript.vtt @@ -0,0 +1,2023 @@ +WEBVTT + +04:22.980 --> 04:25.700 +Hey, Evan, can you hear me all right? Yeah, I can hear you. + +04:26.420 --> 04:28.740 +Awesome. How do I sound? Good. + +04:30.260 --> 04:33.580 +I've used this microphone in ages. It's like + +04:34.080 --> 04:34.420 +all dusty. + +04:41.140 --> 04:44.100 +How you think I should wait like five minutes for people to come in or. + +04:44.260 --> 04:47.530 +Probably. Yeah, that there's if. Yeah, + +04:48.010 --> 04:51.930 +otherwise you can just. You could start, but that'll be interesting. + +04:52.430 --> 04:54.570 +Do you mind if I grab a cup of coffee real quick? No, not at + +04:55.070 --> 04:58.930 +all. Not at all. Okay, cool. I'm not using the AirPods mic, + +04:59.430 --> 05:02.250 +so I can hear you, but you won't be able to hear me. Okay. + +06:02.440 --> 06:27.820 +It's. + +08:51.699 --> 08:55.060 +Thank you for your patience. + +09:09.010 --> 09:12.130 +So is it just you? It looks like it's + +09:12.630 --> 09:15.970 +just me. Josh is trying to get in, but he's trying to get on on + +09:16.470 --> 09:19.250 +his mobile device and I don't think that's possible with Riverside. + +09:23.250 --> 09:26.130 +Surprised? I mean, I know they have an app. + +09:27.590 --> 09:30.070 +Maybe he's using. I'm not sure if he's using. Using the app or not. + +09:35.190 --> 09:36.310 +Should I just go? + +09:38.230 --> 09:40.470 +Sure. Okay. + +09:42.390 --> 09:45.270 +Well, thanks for joining me, Evan. I really appreciate it. + +09:47.430 --> 09:49.910 +I would say no. I mean I do, seriously. + +09:51.830 --> 09:55.470 +So yeah, this is a kind of a dry run. I would say I'm about + +09:55.970 --> 10:00.990 +60% done with this presentation about CloudKit + +10:01.490 --> 10:05.470 +on the server and we'll probably + +10:05.970 --> 10:09.990 +hop back and forth between Keynote and not Keynote, but yeah. + +10:11.670 --> 10:14.870 +So this is CloudKit as your backend from iOS + +10:15.030 --> 10:16.630 +to server side Swift. + +10:27.600 --> 10:31.200 +So what is CloudKit? CloudKit is a service + +10:32.240 --> 10:36.279 +launched by Apple probably a decade ago to + +10:36.779 --> 10:40.200 +kind of give developers a + +10:40.700 --> 10:43.680 +built in back end for storing data for their apps. + +10:44.480 --> 10:47.890 +One of the biggest benefits is is how cheap it is + +10:47.970 --> 10:49.970 +to use for iOS developers. + +10:52.450 --> 10:55.690 +So if you have built + +10:56.190 --> 10:59.970 +an app, you could just add CloudKit right here within + +11:01.330 --> 11:05.690 +the Xcode project and use + +11:06.190 --> 11:09.530 +the regular CloudKit API in Swift to go ahead and + +11:10.030 --> 11:10.850 +start using it in your app. + +11:13.390 --> 11:16.990 +Here is what it looks like to create a new record type. + +11:17.490 --> 11:20.190 +You can do all this through the CloudKit dashboard. + +11:24.190 --> 11:27.430 +In CloudKit you could also do this using a + +11:27.930 --> 11:31.710 +schema file too. And you can export and import your schema + +11:32.210 --> 11:36.030 +that way. And it's not a SQL based database, + +11:36.530 --> 11:39.910 +it's much more, no sequel ish or an abstract layer + +11:40.410 --> 11:44.120 +above it. But essentially you can create records + +11:44.520 --> 11:48.200 +kind of like a table but not quite in your records. + +11:49.400 --> 11:52.680 +You can create a struct for it. + +11:53.180 --> 11:57.039 +You can just use CloudKit directly to go ahead and then + +11:57.539 --> 12:00.520 +you can then plug it into your app and do fun stuff like this. + +12:01.560 --> 12:05.280 +We can do things like queries and basic + +12:05.780 --> 12:09.760 +database stuff. There's a lot of advantages to it. For one, + +12:10.080 --> 12:12.640 +if you're doing Apple only, + +12:13.600 --> 12:16.800 +then it definitely makes sense to look into, at least + +12:17.300 --> 12:18.080 +look into CloudKit. + +12:22.320 --> 12:25.440 +If you're just going to deploy to Apple Devices. + +12:26.080 --> 12:28.720 +If you don't mind the, + +12:29.920 --> 12:32.640 +the fact that it's not a regular SQL database, + +12:34.050 --> 12:37.050 +that's something too to think about. If you like need a SQL database, this might + +12:37.550 --> 12:40.770 +not be what you want. And then if you don't mind working + +12:41.270 --> 12:44.610 +with a lot of the abstraction layers that CloudKit provides, + +12:46.930 --> 12:50.730 +then this might be good for you to get started or especially + +12:51.230 --> 12:52.450 +if you don't have any database experience. + +12:54.130 --> 12:57.970 +So as far as like server choices, I would say CloudKit + +12:58.470 --> 13:01.970 +might not be your first choice, but it certainly is a decent choice + +13:02.290 --> 13:04.450 +if you're going the Apple only route. + +13:09.970 --> 13:13.050 +But then the question comes in, why would you want Cloud server side + +13:13.550 --> 13:16.610 +CloudKit? Why would you want to do anything with CloudKit on the server? + +13:17.970 --> 13:20.290 +So here's, here's the first case. + +13:20.690 --> 13:24.330 +Well, this is how you can go ahead and do that is they + +13:24.830 --> 13:27.880 +provide actually a REST API for calls to CloudKit + +13:28.910 --> 13:32.830 +using the, if you go to the documentation, I'll provide a link to that + +13:32.910 --> 13:36.990 +CloudKit Web Services which provides + +13:37.490 --> 13:41.270 +a lot of the documentation for what we'll be talking about today. A lot + +13:41.770 --> 13:44.790 +of this is abstracted out in the JavaScript library. So if you want to do + +13:45.290 --> 13:49.390 +stuff on a website, they provide a CloudKit JavaScript + +13:50.270 --> 13:53.710 +library for that. Sorry, + +13:56.190 --> 13:59.230 +just going into do not disturb mode. + +14:07.950 --> 14:11.710 +They even in that web references documentation they provide a + +14:12.210 --> 14:15.670 +composing web service request and all these instructions about how to go ahead and + +14:16.170 --> 14:20.110 +do that. So man, was it like half a decade ago + +14:20.880 --> 14:24.880 +that I built Heart Twitch and + +14:25.360 --> 14:28.080 +at the time I don't think there was anything, + +14:30.080 --> 14:33.840 +there was anything like sign in with Apple even. And like + +14:34.340 --> 14:38.480 +I really didn't want like to + +14:38.980 --> 14:42.600 +explain how harshwitch works is you have like a watch and it will send + +14:43.100 --> 14:47.180 +the heart rate to the server and then the + +14:47.680 --> 14:51.100 +server will then use a web socket to push it out to a web page. + +14:52.060 --> 14:55.260 +And then you would point OBS or some sort of + +14:55.760 --> 14:58.860 +streaming software to the URL or to the browser window and then that way you + +14:59.360 --> 15:02.900 +can stream your heart rate. That's how it works. And what I really didn't want + +15:03.400 --> 15:07.500 +is a difficult way for a user to log in with a username + +15:08.000 --> 15:11.260 +and password on the watch because we all know typing on the watch is hell. + +15:11.900 --> 15:15.600 +So my, my thought was like, and I didn't have sign + +15:16.100 --> 15:19.680 +in with Apple, right? So my thought was why don't we use CloudKit? + +15:19.840 --> 15:23.120 +Because you're already signed in a CloudKit on the Watch with + +15:23.620 --> 15:27.080 +your, your id. And what + +15:27.580 --> 15:31.520 +you do is you log in with a regular like email address + +15:32.020 --> 15:34.960 +and password in Heart Twitch on the website. + +15:35.840 --> 15:38.920 +And then there's a little, there's a site, there's a part of the site where + +15:39.420 --> 15:42.740 +you can sign into CloudKit and then from + +15:43.240 --> 15:46.260 +there you can, because, + +15:46.760 --> 15:52.580 +because of the CloudKit JavaScript library, you can then I can then pull the all + +15:53.080 --> 15:55.740 +the devices because when you first launch the app on the Watch, it adds your + +15:56.240 --> 15:59.540 +watch to the CloudKit database. And then I could pull that in + +16:00.040 --> 16:03.380 +and then add that to my postgres database. So then there is no need for + +16:03.880 --> 16:06.740 +authentication because I already have the CloudKit, + +16:07.720 --> 16:11.120 +the device added in my postgres database. So it's kind of like + +16:11.620 --> 16:15.520 +knows, oh yeah, this is Leo's watch, he doesn't need to authenticate. + +16:16.020 --> 16:19.440 +And that way we can link devices to accounts without having to do any + +16:19.940 --> 16:23.320 +sort of login process. And so this was my use case for + +16:23.800 --> 16:27.720 +doing server side. Essentially CloudKit + +16:28.220 --> 16:33.610 +was I could call the CloudKit web server based + +16:34.110 --> 16:37.730 +on that person's web authentication token, which we'll get all + +16:38.230 --> 16:40.370 +into later. I then pull that information in. + +16:42.050 --> 16:42.450 +So. + +16:47.250 --> 16:47.730 +Cool. + +16:50.770 --> 16:55.050 +Just checking if anybody's having issues. It doesn't look like it. So that's + +16:55.550 --> 16:59.090 +good to know. So that was the private database piece, + +16:59.950 --> 17:03.510 +but I actually think a much more useful case would be the + +17:04.010 --> 17:07.550 +public database because the idea + +17:08.050 --> 17:11.950 +would be is that you'd have some sort of app that would use central + +17:12.450 --> 17:15.950 +repository of data that it + +17:16.450 --> 17:19.710 +can pull information from. And I'm looking at both of these with + +17:19.950 --> 17:24.510 +Bushel and then an RSS reader I'm building called Celestra with + +17:25.010 --> 17:28.479 +Bushel. The. The way it's built right now is I have + +17:28.979 --> 17:32.639 +this concept of hubs and you can plug in a URL + +17:33.139 --> 17:36.999 +and that URL would provide or some sort of service. That service + +17:37.499 --> 17:41.479 +would then provide the Entire List of macOS restore images that + +17:41.979 --> 17:45.319 +are available. But then I realized like + +17:45.819 --> 17:48.919 +really there's only one location for those and each service is just going + +17:49.419 --> 17:52.850 +to be using the same URLs anyway. So if I had one + +17:53.350 --> 17:57.170 +central repository or one central database because + +17:57.670 --> 18:01.690 +they all pull from Apple, I can then parse the web for those + +18:02.190 --> 18:06.010 +restore images and then store them in CloudKit and then that way Bushel + +18:06.510 --> 18:09.970 +can then pull those from one single repository. + +18:10.210 --> 18:13.850 +And all I would have to do, and what I'm doing now is running basically + +18:14.350 --> 18:17.450 +a GitHub action or you could do like a Cron job where it would run + +18:17.950 --> 18:21.290 +on Ubuntu, wouldn't even need a Mac and it would download and scrape the + +18:21.790 --> 18:24.430 +web for restore images and storm in the public database. + +18:26.350 --> 18:29.870 +It's the same idea with Celestra. It's an RSS reader. What if I took + +18:30.370 --> 18:33.950 +those RSS RSS files in the + +18:34.450 --> 18:38.430 +web and just scrape them and then store them in a CloudKit database in + +18:38.930 --> 18:42.110 +a public database and then that way people can pull that up all through + +18:42.610 --> 18:46.550 +CloudKit. So the idea today + +18:47.050 --> 18:50.550 +is we're going to talk about how to set something, how I set something like + +18:51.050 --> 18:54.460 +this up and how you could use use my library to + +18:54.960 --> 18:57.860 +then go ahead and do this yourself for any sort of work that you're going + +18:58.360 --> 19:01.500 +to do that where you want to use either a public or private database in + +19:02.000 --> 19:05.060 +CloudKit. So this is where I introduce myself. + +19:05.940 --> 19:09.300 +So I'm going to talk today about building Miskit, which is my library + +19:09.800 --> 19:13.180 +I built for doing CloudKit stuff on the + +19:13.680 --> 19:17.140 +server or essentially off of, not off of Apple platforms. + +19:19.770 --> 19:23.130 +Evan, do you have any questions before I keep going? No, + +19:23.370 --> 19:24.890 +it's good. Good topic though. + +19:26.810 --> 19:31.090 +So like I said, we have CloudKit Web Services and CloudKit + +19:31.590 --> 19:35.330 +Web Services. We provide a lot of documentation. We talked about CloudKit + +19:35.830 --> 19:39.570 +JS and the instructions on how to compose a web service request + +19:40.070 --> 19:43.730 +which has everything I need to compose one. And back in 2020 I did + +19:44.230 --> 19:47.240 +this all manually. The thing is + +19:47.740 --> 19:50.040 +at this point, if you look at right there, + +19:51.000 --> 19:53.800 +actually if you look at the top, you can see it hasn't been updated in + +19:54.300 --> 19:58.120 +over 10 years, which is kind of crazy, + +19:58.920 --> 20:03.240 +but it works. And then we got + +20:04.200 --> 20:07.400 +introduced to something back in WWDC I want to say it was + +20:07.480 --> 20:11.360 +23. We got introduced + +20:11.860 --> 20:16.360 +to the Open API generator which is really nice because then + +20:16.840 --> 20:20.080 +we have, we can generate the Swift code if we know what the + +20:20.580 --> 20:24.080 +Open API documentation looks like it. And of course Apple doesn't provide + +20:24.580 --> 20:29.639 +one for CloudKit but they did provide a pretty big piece open. + +20:29.800 --> 20:33.320 +If you ever you looked at the Open API generator, it's amazing. Takes the + +20:33.820 --> 20:37.560 +Open API gamble file and generates all the Swift code you need. + +20:37.880 --> 20:42.160 +One of the other issues I had with first developing Miskit + +20:42.660 --> 20:46.160 +in 2020 was that there was no way to like there + +20:46.660 --> 20:50.320 +was no abstraction layer which could differentiate between doing something on the server + +20:50.720 --> 20:54.040 +or using regular like URL session + +20:54.540 --> 20:56.080 +which is more targeted towards client side. + +20:58.960 --> 21:02.800 +So I had to build my own abstraction for that. Luckily Open API has, + +21:04.080 --> 21:07.720 +there's open API transport I believe, which provides an + +21:08.220 --> 21:12.100 +abstraction layer where you can then plug in either use Async HTTP + +21:12.600 --> 21:15.660 +client, which is the server way of doing it, or you can plug in a + +21:16.160 --> 21:19.580 +URL session transport, which is of course the client way + +21:20.080 --> 21:23.740 +to do, provides a really great tutorial. + +21:24.240 --> 21:27.740 +I highly recommend checking this out as well as the + +21:28.240 --> 21:30.020 +doxy documentation that they provide. + +21:31.860 --> 21:35.180 +So this is great. But then I'd have to go ahead and I'd + +21:35.680 --> 21:39.700 +have to figure out a way to convert all this documentation into an open + +21:40.200 --> 21:44.260 +API document. I mean, can you guess what + +21:44.760 --> 21:48.260 +helped me to get build an open API document + +21:48.760 --> 21:51.620 +from all this documentation? Some of the tools, + +21:52.659 --> 21:54.980 +some AI tool. Yes. + +21:56.820 --> 21:58.980 +AI came and I'm like, holy crap. + +21:59.460 --> 22:03.060 +Like AI is really good at documenting your code, but it's also pretty + +22:03.560 --> 22:06.250 +darn good at taking documentation and building code. + +22:06.890 --> 22:10.650 +So then I would just plug it. I've been plugging in with Claude + +22:11.050 --> 22:14.730 +and it has a copy of all the documentation in my repo and + +22:15.230 --> 22:18.810 +it can go ahead and edit the open API. It's not perfect by any means, + +22:19.310 --> 22:21.610 +of course, but that's what unit tests are for. + +22:23.850 --> 22:28.090 +And actually having integration tests in order to do stuff so + +22:31.460 --> 22:31.700 +that. + +22:35.380 --> 22:41.100 +Sorry, I just want to make sure nothing + +22:46.900 --> 22:48.020 +I hate teams. + +22:53.060 --> 22:56.420 +Okay, so great. So let's talk about. + +22:59.700 --> 23:05.380 +Sorry, slides are still not done, but let's talk about authentication + +23:05.880 --> 23:09.540 +methods. You can see I have the logos here, but I haven't quite cleaned this + +23:10.040 --> 23:14.140 +up. So there's really two + +23:14.640 --> 23:17.380 +and a half authentication methods when it comes to CloudKit. + +23:18.420 --> 23:21.950 +So here is the miss demo + +23:22.450 --> 23:26.070 +database. You just go in here and you can go to tokens and keys + +23:26.570 --> 23:30.550 +and then that will give you access to set up either the API + +23:31.050 --> 23:34.550 +if you want to do API key or API token if + +23:35.050 --> 23:38.750 +you want to do a private database or a server to server keyset if you + +23:39.250 --> 23:41.950 +want to do a public database. So let's talk about the API token. + +23:42.510 --> 23:45.870 +Pretty simple. You just go into here, click the plus sign, + +23:46.840 --> 23:50.240 +you say a name and you say whether you want to do a post + +23:50.740 --> 23:54.200 +message or URL redirect. We'll get into that in a little bit in the next + +23:54.700 --> 23:58.760 +section. And then whether you want to have user info + +23:58.840 --> 24:02.960 +and you click save and you'll get a nice little API token + +24:03.460 --> 24:06.680 +you could use in your web your web calls essentially. + +24:09.000 --> 24:12.260 +API doesn't really. The API token doesn't really give you a lot of. + +24:12.570 --> 24:15.330 +But what it does give you is it gives you an entry to get a + +24:15.830 --> 24:19.450 +web authentication token for a user. So basically the way that + +24:19.950 --> 24:22.490 +works. So you'll notice here, + +24:23.050 --> 24:24.890 +when we were in this section, + +24:27.050 --> 24:30.650 +we have this piece here called Sign in Callback. So you + +24:31.150 --> 24:34.530 +can have either call a JavaScript, it's called a message + +24:35.030 --> 24:38.730 +event, it will call a Message event and a message event will have the + +24:39.230 --> 24:42.650 +metadata with the web authentication token of that user. Or you + +24:43.150 --> 24:46.730 +could do URL redirect where on authentication the user + +24:46.970 --> 24:50.930 +has a URL and then part of that URL is then having part + +24:51.430 --> 24:55.010 +of one of the query parameters and we'll get into that. We'll then have the + +24:55.510 --> 24:57.050 +web authentication token in the URL. + +24:58.570 --> 25:02.130 +So you put, basically you have your website, you add + +25:02.630 --> 25:05.970 +the JavaScript, you need to add the sign in + +25:06.470 --> 25:08.010 +with Apple. Oh, here's Josh. + +25:14.310 --> 25:15.910 +Oh cool. Josh, you there? + +25:18.790 --> 25:21.590 +I hope so. Good. Okay. + +25:21.750 --> 25:24.429 +Hey, we were just talking about how to set up. I'm going to go back + +25:24.929 --> 25:27.910 +a little bit Evan, but not too far back. Yeah, no worries. + +25:27.990 --> 25:31.270 +That's okay. But we talked about + +25:31.770 --> 25:34.310 +setting up API token and how to do that. + +25:35.910 --> 25:39.110 +So you go in here, you just click plus, + +25:39.610 --> 25:43.150 +you select your sign in callback and you put in a name and it'll + +25:43.650 --> 25:46.310 +give you an API token once you click save. Basically. + +25:50.549 --> 25:51.190 +Come on. + +25:54.470 --> 25:58.830 +The reason you want an API token is this allows you to then have + +25:59.330 --> 26:03.060 +users Sign in to CloudKit either + +26:03.560 --> 26:06.700 +using, using the the + +26:07.200 --> 26:10.860 +web service like Curl or you could also do it through a + +26:11.360 --> 26:15.500 +website using CloudKit js. So web authentication + +26:16.000 --> 26:19.140 +token we talked about how you can either do the post message or you + +26:19.640 --> 26:23.020 +can do the URL redirect. Basically you have the JavaScript + +26:23.520 --> 26:27.020 +on your website and there has a button, click the button, you get this + +26:27.520 --> 26:31.140 +nice little window here sign in and + +26:31.640 --> 26:35.020 +then when you sign in if you had selected post message, + +26:35.340 --> 26:38.500 +you'll get the web authentication token and the data of + +26:39.000 --> 26:42.460 +the event in JavaScript or you will get the web authentication + +26:42.960 --> 26:46.140 +token as a URL in the callback URL here. + +26:46.780 --> 26:47.820 +Does that make sense? + +26:50.860 --> 26:54.220 +Yep. Yeah. In some cases + +26:54.380 --> 26:58.000 +if you scour the Internet so Stack overflow will tell you and this + +26:58.500 --> 27:02.360 +has happened to me sometimes it will not be CK web authentication token, + +27:02.860 --> 27:06.040 +sometimes it'll be CK session because that's what Apple + +27:06.540 --> 27:10.120 +likes to do. But it's the same thing. + +27:10.200 --> 27:13.840 +So you basically want to look for either property or query parameter + +27:14.340 --> 27:17.520 +name and you should be good to go and then you'll have that user as + +27:18.020 --> 27:20.680 +well authentication token you could do. + +27:20.920 --> 27:23.730 +What I, what I've been doing is, + +27:25.170 --> 27:28.690 +is I've been take like making a call + +27:29.190 --> 27:32.690 +to a like local server for instance and then essentially + +27:33.410 --> 27:36.690 +then I could do whatever I want with that web authentication token. As long as + +27:37.190 --> 27:40.730 +you have the web authentication token and the API token you can do anything on + +27:41.230 --> 27:44.050 +a private database that the user has rights to. + +27:44.450 --> 27:47.610 +So you can go, you can go to town with + +27:48.110 --> 27:51.420 +that all this stuff gets Swift in a cookie too. + +27:51.580 --> 27:55.260 +So that way it'll work. When you go back, if you + +27:55.500 --> 27:57.500 +have checked the box for allow, + +27:58.780 --> 28:01.940 +it's either a box or JavaScript method property that will say, + +28:02.440 --> 28:05.179 +hey, I want this to persist. It'll be Swift in a, in a cookie as + +28:05.679 --> 28:09.340 +well. So if you want to spelunk your cookies, you can see the web authentication + +28:09.840 --> 28:13.180 +token there. So that's actually the easier of the + +28:13.680 --> 28:16.940 +two. So that gives you the private database for the public database + +28:17.440 --> 28:19.820 +is where you're going to need a server to server authentication. + +28:21.340 --> 28:24.620 +And so to do that it's really actually not as + +28:25.120 --> 28:27.980 +bad as I thought it was going to be. But you go to the new + +28:28.220 --> 28:32.020 +server to server key, put in a name you want, it'll actually give you + +28:32.520 --> 28:35.180 +the command you need to run and then you just paste in the public key + +28:35.680 --> 28:37.340 +in here. That gives you. + +28:38.780 --> 28:42.300 +That will give you everything you need. So here's how to run it. + +28:42.800 --> 28:44.630 +Basically, sorry about that. + +28:57.190 --> 28:59.510 +We just run that. That gives us the key. + +29:00.710 --> 29:04.670 +We can go ahead and get the public key. We can also pipe + +29:05.170 --> 29:08.510 +it to PB Copy and then all we have to do is paste that in + +29:09.010 --> 29:10.930 +the box over here. + +29:17.970 --> 29:18.690 +There we go. + +29:25.890 --> 29:28.770 +It's pretty complicated to use the server key. + +29:30.050 --> 29:33.610 +We can spell on the miskit code on how to do it because it + +29:34.110 --> 29:37.090 +does a lot of that work for you if you have it. But you will + +29:37.590 --> 29:41.170 +need the, the private key, the key id, + +29:42.290 --> 29:46.490 +I think, I think that's it. And then you should be good with + +29:46.990 --> 29:50.130 +having access now to the public database. + +29:50.850 --> 29:54.730 +So just to go over, there's differences between the public and private + +29:55.230 --> 29:59.090 +database. So this is query. + +29:59.570 --> 30:03.010 +You can see my cursor, right? Query and lookup of records + +30:03.510 --> 30:07.110 +is available on all but file changes or, + +30:07.610 --> 30:11.390 +excuse me, record changes. It's not available on public zones, + +30:11.890 --> 30:16.470 +aren't really available in public zone changes aren't available in public notifications. + +30:16.550 --> 30:18.870 +Zone notifications aren't available in public, + +30:19.670 --> 30:23.350 +but query notifications are. And you can also do + +30:23.850 --> 30:27.470 +any stuff with assets which are basically binary files. You can also + +30:27.970 --> 30:32.190 +do that in all of them. You can't do query + +30:32.690 --> 30:36.390 +notifications on shared. Shared would essentially work like private + +30:36.850 --> 30:40.530 +essentially. So it's just a matter of who. + +30:41.030 --> 30:42.610 +Who's the owner and how is it shared. + +30:44.690 --> 30:47.810 +So one of the big challenges I think we've all faced this + +30:48.310 --> 30:52.449 +when we've dealt with certain web services is field type + +30:52.949 --> 30:56.570 +polymorphism. If you've done JSON where you don't know what type you're getting back or + +30:57.070 --> 30:59.410 +what data you're getting back, this can Be a bit challenging. + +31:00.530 --> 31:04.490 +So if you look at the documentation in + +31:04.990 --> 31:08.290 +Web Services Reference, there is a, + +31:09.090 --> 31:13.170 +there's a page called types and dictionaries and there is types. + +31:14.050 --> 31:17.890 +There's different type values for each field. If you're familiar with CloudKit, you've seen + +31:18.390 --> 31:22.610 +this, right? So you have an asset which is basically a, + +31:24.290 --> 31:28.210 +a binary file. You have bytes + +31:29.090 --> 31:33.140 +which is essentially a 60 byte base 64 encoded + +31:33.640 --> 31:36.860 +string, date type which is returned as a + +31:37.360 --> 31:40.620 +number. Double is returned as a number because These are the + +31:41.120 --> 31:44.580 +JavaScript types. Int is returned as a number + +31:45.700 --> 31:49.620 +and then there's location reference and + +31:50.120 --> 31:53.420 +then string and list. And how would you like, + +31:53.920 --> 31:57.300 +how do you do adjacent object like this? How would you even + +31:57.800 --> 31:59.860 +represent this in Swift? Because you don't know what type you're going to get. + +32:01.350 --> 32:04.510 +So like I said, this is a work in progress. + +32:05.010 --> 32:08.710 +Sorry. So what I do, I don't know how much you can see this. + +32:09.110 --> 32:13.910 +I'm going to actually move over to my documentation + +32:14.410 --> 32:18.590 +here at this point. So how + +32:19.090 --> 32:22.870 +are we doing on time? We good? Yeah, + +32:23.370 --> 32:25.910 +I think, I think we're doing good. Okay, cool. Any, + +32:26.560 --> 32:30.240 +do you want to ask questions? I don't + +32:30.740 --> 32:32.160 +have anything right now. + +32:33.760 --> 32:37.600 +Same nothing right now. But this seems applicable to things + +32:38.100 --> 32:40.480 +I'll be doing coming up. Okay, cool. + +32:43.200 --> 32:46.640 +So we have set up in the + +32:46.800 --> 32:50.240 +open. So we have an open API YAML file that you + +32:50.740 --> 32:55.370 +can pull up in Miskit, which is basically every like the + +32:55.870 --> 32:59.570 +documentation converted to YAML. And so what we do + +33:00.070 --> 33:03.410 +is you can set up in the YAML the + +33:03.910 --> 33:08.330 +field value requests and they have an enum type essentially for, + +33:12.090 --> 33:15.490 +for open API. So and then, + +33:15.990 --> 33:18.810 +so this has, you know, it could be one of either any of these types + +33:18.860 --> 33:22.730 +of. And then there's an enum in case you have + +33:23.230 --> 33:27.250 +a list. So if you have a list value + +33:27.330 --> 33:31.450 +type there is an extra property called type + +33:31.950 --> 33:36.050 +and then that will tell you what type the. The list is. And it's + +33:36.530 --> 33:40.210 +homo homomorphic. It's all the same list + +33:40.710 --> 33:42.210 +type. You can't have lists of different types. + +33:44.050 --> 33:49.230 +And then we have here again + +33:49.730 --> 33:52.750 +field value. Sometimes the type is available, + +33:52.910 --> 33:56.150 +sometimes it's not. But basically we have all + +33:56.650 --> 33:59.950 +the different value types available to us in a CK value. + +34:01.950 --> 34:05.670 +And then this is. Then the Open API + +34:06.170 --> 34:09.150 +generator essentially builds this for me which is. + +34:09.710 --> 34:13.630 +Has an enum and a struck for field field value request + +34:15.329 --> 34:18.449 +and then it does all the decoding for me. Thankfully I didn't have to + +34:18.949 --> 34:19.169 +do any of it. + +34:23.089 --> 34:26.569 +And then yeah, I just wanted to + +34:27.069 --> 34:30.209 +cover that piece where we show how we deal with these + +34:30.709 --> 34:34.289 +kind of like polymorphic types and how those work. + +34:35.329 --> 34:37.489 +The next thing I want to cover is error handling. + +34:39.249 --> 34:42.209 +So if you look at the documentation gives you. + +34:43.390 --> 34:48.350 +If you get an error we get something like this and + +34:48.850 --> 34:52.350 +then that will show you in the. In the table actually shows you what each + +34:52.830 --> 34:56.150 +error means. So again we do + +34:56.650 --> 35:00.110 +like an enum in YAML. It's basically a string + +35:00.610 --> 35:04.270 +and then we have everything else be a string. And then the open API + +35:04.770 --> 35:08.110 +generator will automatically generate this which + +35:08.610 --> 35:11.820 +gives us the server error code and the error response. + +35:12.380 --> 35:15.500 +It'll also do all this stuff here, which is really nice. + +35:17.980 --> 35:21.580 +And then we've then in our. We've abstracted a lot of + +35:22.080 --> 35:25.860 +this in miskit. So that way we also have now a + +35:26.360 --> 35:29.980 +cloud cloud error type which gives us a lot more + +35:30.060 --> 35:31.820 +info regarding that. + +35:33.900 --> 35:37.520 +So that's how we handle errors. And everything I do + +35:38.020 --> 35:42.200 +in the abs, the more abstract higher up stuff is done using + +35:42.360 --> 35:44.920 +type throws like I have type throws and everything. + +35:45.160 --> 35:47.240 +So that's how I handle that. + +35:48.600 --> 35:52.200 +Let me check one last piece I wanted to cover. + +35:54.920 --> 35:58.200 +The last piece I want to cover is really cool. And that is + +35:58.700 --> 36:01.920 +the authentication layer. So Open API provides + +36:02.420 --> 36:05.960 +what's called middleware and that allows you to, + +36:06.200 --> 36:09.120 +when you create a client or a server, you can plug that in and it + +36:09.620 --> 36:13.400 +will handle like let's say you need to make modifications with the request or response. + +36:13.640 --> 36:17.040 +When it comes in, you can intercept it and make whatever modifications + +36:17.540 --> 36:21.160 +you want to make. And in this case what + +36:21.660 --> 36:25.480 +we've done is I've created an authentication + +36:25.980 --> 36:29.800 +middleware which then sees if you have + +36:31.430 --> 36:35.310 +what's called a token manager and an authentic + +36:35.810 --> 36:39.350 +you have that and an authentication method. And the way it works + +36:39.510 --> 36:42.950 +is you pick what type of authentication you want to + +36:43.450 --> 36:46.789 +use. If you already have like a pre existing web token or you already have, + +36:47.289 --> 36:50.350 +or you, you know, have your key ID and your private key already, or you + +36:50.850 --> 36:54.470 +just have the API token. We've created basically a middleware that + +36:54.970 --> 36:59.120 +uses that. So this + +36:59.620 --> 37:03.160 +is how it creates the headers for server to server. So it + +37:03.660 --> 37:07.760 +does all this for us. And then what + +37:08.260 --> 37:11.760 +I added, which I think is really nice, is called the adaptive token manager. + +37:12.240 --> 37:17.360 +And the idea with that is like let's say you're + +37:17.860 --> 37:20.920 +using a client and you have the web authentication token + +37:21.420 --> 37:25.450 +now and then this allows you to upgrade with that web authentication token + +37:25.950 --> 37:27.730 +to the private database and have access to that. + +37:30.530 --> 37:33.970 +So and then all the, all the signing is done + +37:34.470 --> 37:38.090 +before you in miskit for the server to server because stuff that needs to be + +37:38.590 --> 37:42.170 +signed, etc. And it takes care of all that. All stuff + +37:42.670 --> 37:45.970 +that Claude was essentially able to decipher from + +37:46.610 --> 37:50.060 +the documentation. + +37:52.620 --> 37:54.300 +There's one more thing I wanted to show. + +37:56.380 --> 37:59.860 +If you want to hop in with a question while I pull something + +38:00.360 --> 38:00.940 +up, feel free. + +38:21.190 --> 38:24.390 +No questions. Cool. + +38:24.790 --> 38:28.630 +So I'm going to show one last thing and that is how + +38:28.710 --> 38:30.310 +do we actually deploy this? + +38:33.350 --> 38:36.950 +Is this too big, too small? Looks okay. + +38:37.590 --> 38:40.070 +That looks good. Yeah, it looks good. Okay, cool. + +38:43.850 --> 38:47.210 +So essentially what I've done is I'm using + +38:47.370 --> 38:50.410 +GitHub Actions. There's a way you can. + +38:53.130 --> 38:57.330 +This is all public by the way, so I will provide URLs + +38:57.830 --> 39:00.570 +in the Slack or something. Let's do this one. + +39:02.410 --> 39:07.220 +So this is a Swift package for + +39:07.720 --> 39:10.660 +Bushel. It's called Bushel Cloud. It pulls the stuff up from. + +39:11.220 --> 39:14.740 +Uses Miskit to go ahead and + +39:16.740 --> 39:20.340 +pull, get access to CloudKit and + +39:21.060 --> 39:24.860 +let me go back to the workflow. How familiar + +39:25.360 --> 39:26.580 +are you with GitHub workflows? + +39:29.860 --> 39:32.980 +Sadly not had the chance to work too deeply with them yet. + +39:33.690 --> 39:37.050 +Okay. Basically it's like for CI, but you can + +39:37.550 --> 39:41.570 +also set it up on a schedule. So I did that and + +39:42.070 --> 39:45.730 +then it runs the scheduled job and then I just + +39:46.230 --> 39:46.490 +execute. + +39:50.650 --> 39:54.650 +So then this was refactored over here into + +39:55.150 --> 39:58.490 +an action. There we go. + +39:59.540 --> 40:03.460 +And I have all sorts of stuff here for + +40:05.380 --> 40:10.300 +like this is generic essentially, but all + +40:10.800 --> 40:14.060 +these, the environment, etc. These are all passed + +40:14.560 --> 40:18.180 +from that workflow into here. These are basically either API keys or + +40:18.680 --> 40:22.100 +the information that I need for accessing Cloud, the public, + +40:24.020 --> 40:28.120 +public database. Right. And then I + +40:28.620 --> 40:32.040 +already pre built the binary. So we already + +40:32.540 --> 40:35.960 +have that. We're running this on Ubuntu because + +40:36.460 --> 40:40.280 +it's the default. Look at it. If there + +40:40.780 --> 40:44.400 +is no binary, it goes ahead and builds the binary for me. So that's + +40:44.900 --> 40:49.080 +what this is doing. And then we + +40:49.580 --> 40:53.290 +make sure the binary works. We make, we make it executable, we validate, + +40:53.790 --> 40:56.530 +make sure all the API secrets are there. + +40:57.650 --> 41:00.530 +We then go ahead and this validates the pim. + +41:00.690 --> 41:04.050 +But essentially this is the fun part. We go ahead, + +41:04.550 --> 41:07.730 +we have all our inputs for the private key, the key id, + +41:07.810 --> 41:11.050 +environment, container id. And then + +41:11.550 --> 41:14.450 +I use Virtual Buddy for signing verification. And. + +41:18.460 --> 41:21.940 +It then goes in and it runs the + +41:22.440 --> 41:25.660 +sync and then we'll go in. + +41:25.980 --> 41:29.900 +Basically it pulls from several websites information about + +41:30.400 --> 41:33.780 +macrosos, restore images and checks whether they're signed. And then + +41:34.280 --> 41:38.260 +it goes ahead and it adds those to the database. + +41:38.760 --> 41:42.100 +And then what this does is it exports the information in a run. + +41:42.600 --> 41:44.860 +Let's, let's take a look, see if I have one. I can show you. + +41:45.980 --> 41:47.420 +Oh, there's one scheduled. + +41:50.060 --> 41:54.060 +Yeah, here we go. So there's 57 new + +41:54.560 --> 41:58.300 +restore images created, 177 updated. + +41:58.780 --> 42:03.020 +234 total. No operations failed. + +42:03.100 --> 42:05.900 +I also store Xcode versions and Swift versions. + +42:06.780 --> 42:10.460 +Those get stored as well. Had to rebuild it, + +42:10.630 --> 42:11.830 +but here is the results. + +42:13.750 --> 42:17.750 +I'm not going to pull that up, but it's essentially updated + +42:18.250 --> 42:22.470 +my CloudKit database and + +42:22.550 --> 42:26.190 +that's all in the public database. And then maybe even by the time + +42:26.690 --> 42:30.230 +I present this, I'll have a working example in Bushel with that example working, + +42:30.630 --> 42:31.670 +which would be awesome. + +42:32.870 --> 42:36.630 +Celestra, same idea. So this looks like it was a RSS + +42:37.130 --> 42:42.830 +update. We get the workflow file and. + +42:43.330 --> 42:46.110 +Oh, sorry, I should point out, because you're probably wondering where is all these. + +42:46.610 --> 42:50.150 +The stuff all these secrets stored? Yes, they are stored in + +42:50.650 --> 42:53.910 +Actions secrets right here. So we have + +42:54.410 --> 42:58.190 +our private key ID API key from + +42:58.690 --> 43:02.750 +Virtual Buddy. So that's all stored there. Here is + +43:03.150 --> 43:06.350 +Celestra. It's for updating RSS feeds. + +43:07.050 --> 43:10.370 +So it just basically goes through. You can look at the Swift code it goes + +43:10.870 --> 43:15.930 +through, pulls RSS feeds and updates them into a CloudKit record + +43:16.410 --> 43:18.490 +or what do you call it? Yeah, record type. + +43:19.850 --> 43:22.210 +And I of course try to do it in such a way not to hammer + +43:22.710 --> 43:24.170 +people, but same idea, + +43:27.050 --> 43:30.610 +yeah, it goes ahead and it runs the + +43:31.110 --> 43:35.890 +binary it updates and then I also have like actual parameters + +43:36.390 --> 43:39.810 +that I take to to filter out, like which RSS feeds are high + +43:40.310 --> 43:44.330 +priority and which ones aren't based on the audience and etc. So yeah, + +43:44.890 --> 43:48.410 +so that's deployment. That's how you can get that working. + +43:48.810 --> 43:53.130 +There's weird stuff with cloud with GitHub that + +43:53.690 --> 43:57.210 +I've noticed. If you haven't updated it in a while, it doesn't run these + +43:57.710 --> 43:59.570 +cron jobs. So I need to figure out a how to get around it or + +44:00.070 --> 44:03.550 +find another service to do it. This is all free + +44:03.630 --> 44:07.310 +because it's public and it + +44:07.810 --> 44:09.870 +is running on Ubuntu. So that's really great. + +44:12.350 --> 44:16.310 +And the storage on CloudKit is dirt cheap, which is even more + +44:16.810 --> 44:16.830 +awesome. + +44:20.030 --> 44:23.990 +Sorry, let's see what else. I just + +44:24.490 --> 44:27.150 +want to make sure I covered all my slides. The last thing I'm going to + +44:27.650 --> 44:31.030 +talk about is just what are my plans? Excuse me. + +44:31.510 --> 44:34.550 +So I don't know if you check. Follow me. But I just released. + +44:41.910 --> 44:45.390 +I just released Alpha 5 that has lookup + +44:45.890 --> 44:49.270 +zones, fetch, record changes and upload assets. Upload the assets + +44:49.770 --> 44:52.470 +is pretty awesome. When I saw that work because I was like, cool, I can + +44:52.970 --> 44:56.230 +actually upload a binary to CloudKit, which is awesome. + +44:57.310 --> 45:00.550 +We got query filters to work for in and not in, so you could do + +45:01.050 --> 45:04.230 +that I have plans to continue working on this because I think + +45:04.730 --> 45:06.990 +there's a big future for something like this for a lot of people. + +45:09.150 --> 45:12.270 +Yes, you can technically use this in Android or Windows + +45:12.670 --> 45:16.230 +because the Swift thing does compile in Android and Windows. + +45:16.730 --> 45:19.790 +You can see I already added support for that. This is the support I recently + +45:19.870 --> 45:23.200 +had. And then we're. I'm just kind of like + +45:23.700 --> 45:27.000 +going through each of these because as great as AI is, it's not perfect. + +45:27.080 --> 45:30.760 +So we're just kind of going through these piece by piece + +45:30.840 --> 45:35.720 +with each version and hammering these away and + +45:36.220 --> 45:40.160 +then this is actually done. I don't even know why that's there. But yeah, + +45:40.660 --> 45:44.760 +I think system field integration might already be there and there's a few other things. + +45:45.960 --> 45:49.200 +Eventually I'd like to add support. So there, there's a + +45:49.700 --> 45:53.200 +whole API for CloudKit schema management that I could. + +45:53.700 --> 45:56.120 +That would be awesome if I could figure out how to do that. If I + +45:56.620 --> 45:59.400 +could figure out how to do key path query filtering, that would be fantastic. + +46:01.720 --> 46:05.280 +And yeah, but there's a. I mean the basics is there as + +46:05.780 --> 46:09.080 +far as if you want to do anything with a record, it's pretty much there. + +46:09.720 --> 46:13.160 +One thing with Celestra is I'd love to be able to do like test out + +46:13.660 --> 46:17.840 +subscriptions and see how that works. So yeah, + +46:18.340 --> 46:20.040 +that's really the bulk of my presentation today. + +46:21.800 --> 46:24.880 +Now is. Now it's time to ask me a ton of questions and make me + +46:25.380 --> 46:28.840 +feel dumb. Go for it. No, + +46:29.880 --> 46:33.400 +there's a lot there to. To absorb. But I, I like + +46:33.900 --> 46:36.680 +the concept and I know you've been working on this for a while and I + +46:37.180 --> 46:41.630 +always thought it was a pretty cool, pretty cool idea and implementation + +46:42.130 --> 46:43.470 +of this. Questions? + +46:48.990 --> 46:50.030 +So with something like. + +46:54.110 --> 46:57.510 +Accessing CloudKit through the web, is this + +46:58.010 --> 47:01.630 +setup more ideal for having your server + +47:01.870 --> 47:05.550 +do the authentication to CloudKit with Miskit + +47:05.970 --> 47:09.890 +or is miskit something that you could put into even like a client + +47:10.130 --> 47:15.090 +side, you know, like non + +47:15.810 --> 47:19.410 +Swift application or I guess not non Swift but like non like + +47:19.910 --> 47:22.049 +app application. I'm thinking in the context of like a. + +47:25.730 --> 47:30.290 +I guess if I wanted to create a something + +47:30.790 --> 47:33.410 +accessing CloudKit that is not your typical Mac or iOS app. + +47:34.880 --> 47:38.480 +Can you be more specific? I'm looking + +47:38.720 --> 47:42.040 +into one. One approach would be browser + +47:42.540 --> 47:46.000 +extensions. So for + +47:46.500 --> 47:48.240 +like a non Safari browser. Yes. + +47:50.400 --> 47:54.120 +Yeah, this would be great. So basically the way you'd want + +47:54.620 --> 47:58.240 +that to work, like the sticky part to me would be getting the web authentication + +47:58.740 --> 48:01.090 +token. Other than that, like have at it. + +48:04.610 --> 48:08.770 +So I'm gonna, I'm gonna be devil's advocate. Why not just use the CloudKit + +48:08.850 --> 48:11.490 +JavaScript library. If it's an extension, + +48:12.450 --> 48:16.129 +my brain jumps to Swift first. Right. + +48:16.629 --> 48:18.930 +But it's the reason I'm asking that is like it's a, + +48:19.410 --> 48:22.050 +it's already a web extension. I would assume that is true. + +48:22.690 --> 48:26.010 +That it's 90 web based or JavaScript + +48:26.510 --> 48:29.600 +based. So that's where I'm just like, well, you may as well. Like, + +48:29.840 --> 48:32.800 +I would love. I don't want to. Like, I love tooting my own horn. + +48:33.300 --> 48:37.120 +Right. But like, like why not just. Unless you're. + +48:40.720 --> 48:43.840 +Unless you're like building a executable, + +48:44.160 --> 48:45.920 +I guess, or an app. Ish. + +48:47.760 --> 48:50.960 +And I guess another application for this would be + +48:51.680 --> 48:55.920 +doing CloudKit stuff server side and then providing my own API + +48:56.420 --> 48:59.860 +layer over it. Yep, yep. So that's. + +49:00.360 --> 49:03.740 +Yeah. Are we talking private database or public database? Private. + +49:05.580 --> 49:09.380 +So in that case, basically like you'd have to go the + +49:09.880 --> 49:12.979 +Hard Twitch route and you would + +49:13.479 --> 49:16.820 +have to provide a way to get their web + +49:17.320 --> 49:19.900 +authentication token, essentially, if that makes sense. + +49:20.540 --> 49:23.260 +And then store it in Postgres or whatever the hell you want to do. + +49:23.760 --> 49:26.880 +Like that's, that's the way I did it with Hard Twitch. But once you have + +49:27.380 --> 49:31.200 +that, you can do anything you want on the server with their private database, + +49:31.700 --> 49:34.480 +if that makes sense. It does. Yep. + +49:34.560 --> 49:37.920 +Yep. A couple of things I wanted to bring + +49:38.420 --> 49:39.520 +up, so let's take a look. + +49:44.000 --> 49:48.400 +So part of my other presentation + +49:48.640 --> 49:51.880 +is working, talking about cross + +49:52.380 --> 49:54.440 +platform automation type stuff. + +49:55.560 --> 49:58.840 +And the one issue I've run into is. + +49:58.920 --> 50:01.560 +So it basically builds on everything. Right now. + +50:07.560 --> 50:11.320 +I'm going to share something. Hey guys, I got + +50:11.820 --> 50:15.240 +to drop. But it was good presentation, Leo. Thank you. Yeah, + +50:15.740 --> 50:17.760 +yeah. If I have more questions, if you have any feedback, just hit me up + +50:18.260 --> 50:21.710 +on Slack. Sounds good. Cool, thank you. Thank you so much for + +50:22.210 --> 50:25.350 +helping me set this up. Yeah, talk to you later. Thank you. + +50:25.850 --> 50:29.190 +Bye bye. Yeah, + +50:29.690 --> 50:31.790 +so if you had something else to show, I'm happy to look for. I'm here + +50:32.290 --> 50:34.390 +for a few more minutes as well. Yeah, yeah, yeah. + +50:38.790 --> 50:43.110 +So I have the workflow working here and it does Ubuntu, + +50:44.080 --> 50:48.000 +it does Windows, it does Android. So all that stuff is available to you. + +50:48.640 --> 50:52.040 +I would never recommend using Miskit on an Apple platform + +50:52.540 --> 50:56.080 +for obvious reasons, like what's the point? True. + +50:56.580 --> 50:59.920 +Unless there's something special that I provide that CloudKit doesn't like, I don't + +51:00.420 --> 51:03.840 +get it. Right. But we have an issue. + +51:03.920 --> 51:07.640 +So I just started dabbling. I haven't really done anything + +51:08.140 --> 51:11.730 +with wasm, but I did definitely try. Like I added support for + +51:12.230 --> 51:14.890 +WASM in my, in my Swift build action. + +51:17.210 --> 51:21.530 +The thing about WASA is it does not provide. It doesn't have a transport available. + +51:22.570 --> 51:24.410 +So we talked about transports, + +51:26.010 --> 51:30.090 +I think. Did you hear about that part about the Open API generator and transports? + +51:31.370 --> 51:33.690 +I think I was coming in at that point. + +51:34.410 --> 51:38.310 +Okay. When you create a client, so underneath + +51:38.810 --> 51:42.630 +the client you + +51:43.130 --> 51:46.990 +have what's called a client transport. This is so underneath this + +51:47.490 --> 51:50.829 +client, this is an abstraction layer above. So this is not + +51:51.329 --> 51:53.390 +the right one. Where's the public one? + +52:00.680 --> 52:05.440 +But anyway, there is here + +52:05.940 --> 52:06.920 +CloudKit service maybe. + +52:09.560 --> 52:13.640 +Yeah, here we go. So the CloudKit service has + +52:14.140 --> 52:17.960 +a client and part of the client is being able + +52:19.960 --> 52:23.560 +to say what transport you use in Open API. + +52:24.760 --> 52:29.330 +And there's + +52:29.830 --> 52:33.730 +two transports available right now. One is, + +52:36.850 --> 52:40.930 +one is your regular URL session for clients, which. That makes sense. + +52:41.430 --> 52:45.410 +Right. And then there's the Async HTTP client which is typically used + +52:45.570 --> 52:47.970 +like Swift NEO based for servers. + +52:49.330 --> 52:53.170 +The thing is that neither of those are available in wasp. + +52:54.290 --> 52:57.810 +Do you know what WASM is? I have no experience with it, but yes. + +52:58.850 --> 53:01.490 +Okay. It's. It's the web browser. Right. + +53:01.890 --> 53:04.850 +So. So you really can't use Miskit in. + +53:06.450 --> 53:09.650 +In the. In WASM yet because there is no transport. Now having + +53:10.150 --> 53:12.450 +said that, why on earth would you use. + +53:13.090 --> 53:16.970 +Awesome. Why would you use Miskit in the browser? Why not just use CloudKit + +53:17.470 --> 53:20.700 +js? So that's essentially, + +53:21.580 --> 53:22.060 +you know, + +53:29.260 --> 53:30.940 +What other questions do you have? + +53:35.660 --> 53:41.340 +My brain is mushy right now, so because + +53:41.840 --> 53:45.850 +of my presentation or because other things, I got two hours of sleep. + +53:46.650 --> 53:50.170 +Oh, I'm so sorry. So I'm + +53:50.670 --> 53:51.450 +following as best as I can. + +53:54.330 --> 53:58.010 +Snuggling. Yeah, the intro + +53:58.090 --> 54:01.570 +was basically how I originally built it for + +54:02.070 --> 54:06.210 +hard Twitch in 2020 for a private database login for + +54:06.710 --> 54:09.210 +the Apple Watch because I don't want to have a login screen. And so basically + +54:09.710 --> 54:12.490 +there's a way in the web browser to link your Apple Watch to your account + +54:12.990 --> 54:16.280 +and then from there you don't need to authenticate anymore. Nice. I built + +54:16.780 --> 54:20.560 +that all from hand and then in 23 they came out + +54:21.060 --> 54:24.160 +with the Open API generator which was like, oh wait, + +54:24.660 --> 54:29.040 +what if I can create an open API file out of Apple's + +54:29.280 --> 54:30.800 +10 year old documentation? + +54:33.120 --> 54:36.560 +That'd be a lot of work, but I could do it. And I don't know + +54:37.060 --> 54:40.720 +if you heard, but there was this thing that came out a couple + +54:41.220 --> 54:45.340 +years ago called AI and it's + +54:45.840 --> 54:49.140 +really good at creating documentation for your code, but it's also really good at creating + +54:49.640 --> 54:53.940 +code for your documentation. And so I was like, oh yeah, + +54:54.440 --> 54:57.739 +this is great. Like I can just, I can just Feed + +54:58.239 --> 55:01.620 +it the documentation and go from + +55:02.120 --> 55:05.140 +there. And, like, basically, I've been going step by step through. + +55:05.940 --> 55:09.300 +Like I said, if you looked at the miskit repo, + +55:09.800 --> 55:14.620 +like, I'm going through step by step and adding new APIs based + +55:15.120 --> 55:18.180 +on what's available in the documentation, piece by piece. And I would say at this + +55:18.680 --> 55:21.940 +point, it's like most of the really, like 80% of that + +55:22.440 --> 55:26.340 +people use is there. There's like, stuff like subscriptions and zones that I'm + +55:26.840 --> 55:30.260 +still trying to figure out, but it's. It's pretty close to done + +55:30.760 --> 55:31.900 +at this point. Mm. + +55:35.110 --> 55:38.590 +If you use it. Yeah, it's one of those. Because I. Go ahead. + +55:39.090 --> 55:41.070 +Yeah. I was gonna say it's one of those projects that makes me want to + +55:41.570 --> 55:45.110 +set up a. Like a vapor server or something just to do some Swift on + +55:45.610 --> 55:49.390 +the server. Yeah. Or just like, I wonder + +55:49.890 --> 55:52.990 +if there's like, something you do on a pie, like just hook it up to + +55:53.490 --> 55:56.030 +a CloudKit database. Like, there's a lot you could do here because all you need + +55:56.530 --> 56:00.430 +is decent os. I don't know anything about sharing. + +56:00.930 --> 56:03.390 +I haven't done anything with sharing yet, so I still have to do that and + +56:03.890 --> 56:05.740 +a few other things, but. No, yeah, + +56:07.740 --> 56:10.460 +it's an interesting idea. Thank you. + +56:11.420 --> 56:15.340 +Yeah. Well, thank you for joining, Josh. Yeah. Thanks for hosting this and + +56:15.900 --> 56:19.260 +sharing this info. It's nice. Yeah. If you + +56:19.760 --> 56:22.060 +ever run into anything, let me know. Will do. + +56:22.940 --> 56:25.660 +All right, talk to you later. All right, sounds good. See you. + +56:26.220 --> 56:26.700 +Bye. diff --git a/docs/why-mistkit.md b/docs/why-mistkit.md new file mode 100644 index 00000000..02971ab8 --- /dev/null +++ b/docs/why-mistkit.md @@ -0,0 +1,60 @@ +# Why do I need MistKit? + +Apple's CloudKit framework only runs on Apple platforms. MistKit wraps the CloudKit Web Services REST API so that server-side Swift, Linux services, and command-line tools can participate in the same CloudKit ecosystem as your iOS and macOS apps. + +### Public Database as a Managed Content Catalog + +The most common pattern: a server-side job manages a CloudKit public database that Apple devices query. + +**macOS VM restore image catalog (Bushel)** +A Mac management tool stores available macOS VM restore images as CloudKit records. A server-side service adds new images and updates metadata as Apple releases them. Client apps query the public database to discover what's available to download — no custom API needed. + +**RSS/feed aggregation (Celestra)** +A server-side service fetches RSS or Atom feeds on a schedule, parses the entries, and writes them as CloudKit records. Apple devices query the public database to get aggregated content, with CloudKit handling sync and delivery. + +**Software version catalogs** +Track available Xcode versions, simulator runtimes, or SDK releases. A server-side job writes structured records into CloudKit; developer tools on-device query the public database to show what's available. + +**App asset distribution** +A creative app (fonts, templates, themes, presets) stores downloadable asset packs as CloudKit records. A server-side tool manages the catalog — adding packs, updating metadata, deprecating old ones — without requiring an app update. + +**Feature flags / remote config** +Store feature flag configurations as CloudKit records. A server-side admin tool writes flag values; Apple devices read them from the public database without needing a dedicated service. + +**MDM configuration catalogs** +Configuration profiles, scripts, or policy templates stored in CloudKit public database. A web-based admin console writes and updates them server-side; managed Macs fetch and apply them. + +### Private Database: Acting on Behalf of a User + +When a user authenticates once and the server stores their web auth token, the server can read and write their CloudKit private database asynchronously — without the user being present. This is the same model as storing OAuth tokens for Gmail or Dropbox access. + +**Wearable / peripheral device linking (Heartwitch)** +A user authenticates in the iOS app, and the server stores their web auth token. The server then connects their Apple Watch data to an external service (e.g., a live streaming platform) continuously — reading records the Watch writes to CloudKit and bridging them to the third-party API without requiring active user interaction each time. + +**Wearable data pipelines** +An app writes activity or sensor data from an Apple Watch or other device to the user's CloudKit private database. A server reads those records and pushes them to a fitness platform, research database, or coaching service. + +**Always-on device presence** +A user's devices write location or status records to their private database. A server monitors those records and triggers actions in another system — fleet tracking, family safety apps, or delivery coordination. + +**Two-way sync with external services** +A server reads a user's CloudKit private records and syncs them to genuinely external platforms (Todoist, Notion, Google Calendar, Obsidian) — and writes changes back — acting as a persistent background sync bridge between CloudKit and the rest of the user's toolchain. + +**Server-side processing** +A user uploads a photo or document to their private database. A server fetches it, runs processing (OCR, image resizing, transcoding, AI tagging), then writes the results back as new records. + +### Web App ↔ Apple Device Bridge + +**Web portal for a CloudKit-backed app** +A user signs into a web app with their Apple ID. The server exchanges that web auth token for CloudKit access and reads/writes the user's private database — giving them a browser-based view of their iOS app data without requiring the app to be open. + +**Webhook → CloudKit writer** +An external service (Stripe, GitHub, a form submission) triggers a webhook. A server-side Swift handler writes the result directly into a CloudKit record, which instantly syncs to the user's Apple devices. + +### Data Aggregation + +**Anonymized telemetry** +Devices write anonymized usage events to CloudKit. A server-side job reads those records via `/records/changes`, aggregates them, and stores results elsewhere for analysis — without building a custom ingestion API. + +**Crowdsourced data** +Apps contribute data points (WiFi maps, accessibility ratings, transit times) to a CloudKit public database. A server aggregates, deduplicates, and enriches the records, then writes cleaned data back — acting as a background data steward.