Use YouTube player controls when playing back a YouTube video

We should use the standard YouTube video controls when playing back YouTube videos.
See https://github.com/mitodl/hq/discussions/418 for a full discussion of the reasoning behind this decision.
Designs and Mockups
Switching to the YouTube controls means that we have to move the download button outside of the video player
See these InVision designs for the new location and behavior:

https://projects.invisionapp.com/d/main?origin=v7#/console/21537330/472347461/preview
https://projects.invisionapp.com/d/main?origin=v7#/console/21537330/472347462/preview

Acceptance Criteria:

[x] When a video is streamed from YouTube, use the YouTube controller (note: all our videos stream from YouTube at this time)
[x] While it is rare, it is possible for a video to have no interactive captions. In that case, the "Transcript" button should not be displayed, but the download button should still be available.
[x] remove the extra space to the left of the interactive transcript, so it left aligns with the video player (see InVision Comment)
[ ] YouTube controller and the design changes should also work for embedded videos (eg., see this embedded video page)

Related issues

Switching to the YouTube controller should also close #978

I read up the discussions on this and saw the InVision screenshots. So I'm just confirming the design changes we have to do and their effects:

Replace current videoJS controller with YouTube controller for online version. For offline version, we may need to use a custom videojs player in future.
Use youtube controller's features --> the youtube captions button to display captions, however also display videojs' transcripts underneath the video (with the current line highlighted).
Move the download button to the Transcript bar underneath; the bar should still be there even when we have no interactive captions -- just without the Transcript text -- for the purpose of download.
The extra space to the left of the interactive transcript to be removed

Keeping (1) in account, I'm only making slight modifications wherever possible (and keeping the code for our current custom videoJS player mostly intact instead of entirely erasing it; in case for future we have to reutilize it for offline courses)
(2) This would mean disabling to display the track on screen for videoJS (otherwise we have two overlapping captions; one from YouTube, and one from videoJS). For proof of concept I did test and I was able to display ongoing transcripts underneath the video while having only YouTube's captions displayed (videoJS track captions disabled on video) -- i.e only having one caption at a time (no overlapping).
(3) I believe our current download icon functionality is tied to custom videoJS controller. I was able to get the download icon at exactly the location mentioned in the InVision screenshots using CSS; but as soon as I switched controller to YouTube the button disappeared. Either way, I believe a new implementation for the download icon button should be better as opposed to using current implementation for the download popup. If In case in future we have to remove the current customisations of videoJS controller; or, have to modify it for offline courses -- so in those cases, our youtube controller implementation remains unaffected.
Also,
I want to ask: It appears that our current styling is a little bit different from the InVision screenshots.
These changes:
a) Transcript, Related Resources text on bars is uppercase
b) The styling for the transcripts container
Are these to be followed right now?
This is what I currently have without the download icon after exploring a bit:

The keyboard shortcuts are also working fine as expected.

Thanks @pdpinch . I'm currently working on the InVision styling changes on the .video-tab and transcript container as the current styling for these segments will have to be mostly replaced with the new styling. I'll up a draft PR on Monday.

@ibrahimjaved12 Your changes look nice! I was looking at the keyboard issue. My understanding right now is that we currently load the iframe inside VideoJS's player, and VIdeoJS displays a "poster" over the iframe before it plays. Users click the poster, and that plays the video (via Youtube API, which uses Window.message events to communicate with the iframe. But then the iframe document is not focused, so the youtube keyboard controls do not work.
As far as I know, we can't manually focus the iframe document on our side. (We can focus the iframe, but not whatever element inside the iframe needs to be focused for youtube's controls to work.).
IMO, our best bet is to disable the VideoJS poster. Youtube will display a poster image itself:

Note
The "Watch on Youtube" thing is present on localhost, I believe it is NOT present on actual OCW site. (Try embedding the iframe code via dev console.). I have observed that YouTube embeds behave slightly differently on .edu and non-.edu sites.

@ibrahimjaved12 Your changes look nice! I was looking at the keyboard issue. My understanding right now is that we currently load the iframe inside VideoJS's player, and VIdeoJS displays a "poster" over the iframe before it plays. Users click the poster, and that plays the video (via Youtube API, which uses Window.message events to communicate with the iframe. But then the iframe document is not focused, so the youtube keyboard controls do not work.
As far as I know, we can't manually focus the iframe document on our side. (We can focus the iframe, but not whatever element inside the iframe needs to be focused for youtube's controls to work.).
IMO, our best bet is to disable the VideoJS poster. Youtube will display a poster image itself:

Note
The "Watch on Youtube" thing is present on localhost, I believe it is NOT present on actual OCW site. (Try embedding the iframe code via dev console.). I have observed that YouTube embeds behave slightly differently on .edu and non-.edu sites.

Thanks for the explanation @ChristopherChudzicki. You're right -- and disabling the videoJs poster did indeed do the trick.
And thanks for the note. I'll check that out. I guess it is similar to the "related videos" manner that we previously had. On localhost, when we paused a video, it was different, and different for the .edu site.

I'm reopening this issue for Embed video resources.
Also @pdpinch I'm updating the acceptance criteria to reflect this.
Sorry, I wasn’t aware that there are any different kinds of video (embed videos) apart from regular videos. It wasn’t mentioned in the issue, and I also didn’t know that there are such kinds of courses with embed videos. That's how this got missed. The link you gave earlier for embed video, was of regular video page. Otherwise our testing process did involve all kinds of courses with different video tabs -- that we knew of.
The current implementation does have YouTube controller in embed video player, but the download link is missing. So I'm reopening this issue for that.
I have some questions for this.
These are the two links for embed videos you gave me on Slack:

https://ocw.mit.edu/courses/res-18-009-learn-differential-equations-up-close-with-[…]t-strang-and-cleve-moler-fall-2015/pages/video-series-overview/
https://ocw.mit.edu/courses/18-02sc-multivariable-calculus-fall-2010/resources/clip-linear-systems-and-planes/

I don't think the 2nd link is embed video link. Can you please confirm this. From what I saw in the code, the embed video should have div class of video-embed, and in the code I saw that it should not have transcript (or any video tab for that reason - related resources, lecture notes, etc). Both are true for 1st link, but neither for the 2nd link.
(If the current implementation changes are not appearing, try clearing your cache - that should do the trick)
Also, for comparison, this is how embed video page looked previously:

And this is how it currently looks:

(Download video button is missing)
And when we click on "view video page", it opens as a regular video resource (with download button as well):

I tweaked some stuff in dev console, and this is how embed video page would look.
a)

vs
b)
With extra padding on bottom (observe where the download video button is)

which one of these is more suitable from a) and b) (with or without extra bottom padding)

Also, another question:
The old implementation:
a) Does not have video tab in its implementation (eg. for transcript, related resources, lecture notes) for embed videos.
b) It also does not have "Download transcript" button, even when there is transcript available to be downloaded (if we click on "view video page" on embed video, and then it opens as a regular video resource; then the button for "download transcript" appears, otherwise there is only "download video". Picture 1 for old player, embed video reference, Picture 2 for old player, inside "view page" of embed video reference -- to show that download transcript button does exist for that video)
I think it should at least have a "download transcript" button along with "download video" on the embed video page (if transcript is available for download)?
The new implementation will have one video tab for download button (as shown in screenshots above in this message), but what about these other changes. Please let me know which ones to keep and which ones to change for embed videos.

Sorry about this oversite @ibrahimjaved12. I should have mentioned it in the issue.
You are correct. This is an embedded video player:
https://ocw.mit.edu/courses/res-18-009-learn-differential-equations-up-close-with-gilbert-strang-and-cleve-moler-fall-2015/pages/video-series-overview/
And this is a single video page player:
https://ocw.mit.edu/courses/18-02sc-multivariable-calculus-fall-2010/resources/clip-linear-systems-and-planes/
The single video player on this page has a bug, which I opened separately.
For the design of the embedded video player, is it possible to put the download button in the same line with the line to "View Video Page" ?

I think it should at least have a "download transcript" button along with "download video" on the embed video page (if transcript is available for download)?

I agree. You should be able to download the transcript.
The other "tabs" (e.g. related resources, interactive transcript, etc.) are omitted on purpose so as to avoid cluttering up the page too much.

@pdpinch

For the design of the embedded video player, is it possible to put the download button in the same line with the line to "View Video Page" ?

Yes. I tried tweaking it in dev console, and I got something like:

This is just a rough sketch. It could be something like, the grey area would expand only when the download button is clicked.
But either way, imho, I think the previous one with a bar is suiting better, and it would be uniform/consistent also.
But it could also look better in the same line with "view video page" as well, and I can see where you're coming from with this idea. But I think if we knew better what layout aesthetics would suit for this page in this setting that would be best.
I have a suggestion that is, we can implement the previous, this design currently until we get an updated design from the UI/UX team so this can go to the production with a download link instead of being on hold.
And when we get updated design, we can work on this again with the new layout.
But if we do have some ideas for the design for this page, then we could get on this right now. Do you have anything in mind regarding this?

The other "tabs" (e.g. related resources, interactive transcript, etc.) are omitted on purpose so as to avoid cluttering up the page too much.

Makes sense


feat: manifest v3 + base support for chat settings

Extension migrated to the devil Manifest V3. Tested on last version of Edge and Firefox ; should work with the Chromium-world. Works on Waterfox, dunno about Pale Moon or LibreWolf.
For accessibility purposes, the font size setting is now respected. Timestamp toggling is also honored.
Note: feature is not reactive. Settings updated => a refresh is needed. Also, I tried to implement a service worker for an isolated observer, but since we do not really need it, I threw it. Manifest v2/v3 incompatibilities are boring to handle.

Also, not sure about why the extension really needs jQuery?

Hey, thanks for the effort and your time!
About the V2/V3 manifests, you can see my struggle here: https://github.com/tmarenko/twitch_chat_antiban/issues/17#issuecomment-1717004178
Basically, I couldn't figure out how to inject the extension into iframes via V3 on Firefox.
Plus, it required users to grant permissions for the extensions, which isn’t common knowledge for most users. Otherwise all external requests return 404.
Does your method face these issues?
I thought about trying background scripts but haven't gotten around to it yet (and have no idea if it'll help anyway).

Also, not sure why the extension needs jQuery

I'm not that good with JS and just found it easier to manipulate and change HTML elements with jQuery. Open to suggestions for changes though!

For accessibility purposes, the font size setting is now respected. Timestamp toggling is also honored.

I haven’t had a chance to test your changes but they looks promising. Will check them out soon, thanks!


[Question] Object count limitations/recommendations

We just came across a model which isn't rendering very smoothly. The poly count isn't that high and will render on a standard instance, but we noticed that the CPU time is really high when rendering the model.
We noticed that it has a really high number of nodes/objects. I presume in this scenario if we switched to scene graph mode static or none it would yield better performance?
Is there any recommendation for the object count for scene graph mode dynamic?
Here is the conversion info
 "inputStatistics": {
        "numVertices": 4226885,
        "numFaces": 1960400,
        "numMaterials": 111,
        "numFacesSmallestMesh": 1,
        "numFacesBiggestMesh": 64881,
        "numNodes": 84909,
        "numMeshes": 29238,
        "numMeshUsagesInScene": 115952,
        "maxNodeDepth": 11,
        "numTextures": 0
    },
    "materialOverrides": {
        "numOverrides": 0,
        "numOverriddenMaterials": 0
    },
    "outputInfo": {
        "conversionToolVersion": "367c801e91005bd4ef4effdc4ff315a90e6d2dc2",
        "conversionHash": "1B7E19BD8A89C985"
    },
    "outputStatistics": {
        "numMeshPartsCreated": 115928,
        "numMeshPartsInstanced": 18978,
        "numMaterials": 119,
        "recenteringOffset": [
            0.0,
            0.0,
            0.0
        ],
        "boundingBox": {
            "min": [
                -12.228811264038086,
                -0.30000001192092898,
                -9.719191551208496
            ],
            "max": [
                39.85186004638672,
                3.946549654006958,
                6.004221916198731
            ]
        }
    },
    "inputFileSizes": {
        "sizeOfFilesDownloaded":<PHONE_NUMBER>,
        "countOfFilesDownloaded": 122,
        "sizeOfFilesUsed": 136628812,
        "countOfFilesUsed": 1
    }```

Hi Edd,
I assume indeed that the part count is the bottleneck here. There is no hard limit on that count, however, by default they are all treated as fully dynamic and thus CPU perf degrades linearly with the number.
A much better conversion setting for models with large number of individual parts is to mark the scene graph as 'static'. See detailed information here:
Configure model conversion
...where 'static' rather means that objects inside the scene graph cannot be re-parented. But they can be transformed individually. If you don't need to distinguish the parts at all, then scene graph mode 'none' would even be more performant. But you should already see a significant speedup with the 'static' setting, assuming the limitations work for your use case.
'Static' is the best mode for most use cases, but unfortunately we cannot make it the default without introducing a breaking change for existing conversion settings.

ok thanks. We'll switch our conversion over to static by default. I can't imagine we'll ever want to reparent objects in the hierarchy.
What kind of object numbers have you had when running internal benchmarks? just so I can get a ballpark idea?

+1 for switching to static SG mode ;-)

Looking at your conversion info file, there is something unrelated I'd like to raise here. If you look at this section:
"inputFileSizes": {
"sizeOfFilesDownloaded":<PHONE_NUMBER>,
"countOfFilesDownloaded": 122,
"sizeOfFilesUsed": 136628812,
"countOfFilesUsed": 1
...you'll notice that only a small fraction of files is used (both number of files and total # bytes). Not a big deal, just a low hanging fruit to improve upload times a bit.

Ah, thanks for the heads up. I'd never paid attention to that section of the conversion info.
This is the crucial bit in the documentation that we missed :)

Only Blobs starting with this prefix will be downloaded to perform the conversion. Optional. If not provided, all Blobs from the container will be downloaded.

So every time we add a new file to our input container it will take longer and longer to download and convert.
We'll get it fixed up so every file ends up with it's own blob prefix so this doesn't happen

The conversion service emits a warning to the user when only a 'small' portion of the data size is used, where 'small' is based on a heuristic that depends on the overall size. So it's always good to pay attention to warnings returned by the conversion.


Restructure backend.tf to accomodate local development

Overview
There are obstacles to testing local development in personal AWS accounts. One is that the backend state for each account cannot use the same bucket name - requiring users to change the code manually before pushing changes to the repo.
In order to better facilitate local development for users using a personal AWS account, we need to provide a shell for the backend.tf code (instead of hardcoding it) and update the GitHub Action workflows to use a prod.backend.tfvars file.
Action Items

[x] Update the backend.tf file and replace w/ the following (we need it empty)

terraform {
  backend "s3" {
  }
}

[x] Create a prod.backend.tfvars file with the following configuration:

bucket         = "hfla-ops-terraform-state"
key            = "devops-security/terraform.tfstate"
region         = "us-west-2"
dynamodb_table = "hfla_ops_terraform_table"
encrypt        = true

[x] Add instructions to CONTRIBUTING.md for developers to create a backend.tfvars file w/ their backend configs

bucket         = "dev-specific-hfla-ops-terraform-state"
key            = "devops-security/terraform.tfstate"
region         = "us-west-2"
dynamodb_table = "dev-specific-hfla_ops_terraform_table"
encrypt        = true

[x] update the Terraform workflows (Terraform Plan Workflow / Terraform Apply Workflow) to add the below to the dflook blocks

with:
  backend_config_file: prod.backend.tfvars

[x] add backend.tfvars to .gitignore
[x] push code changes and open a PR to test

Resources

https://github.com/dflook/terraform-plan#inputs

all set

Linking to PR at https://github.com/hackforla/devops-security/pull/44


Move tut2 top stuff (in tut 3 with xhpl compute node run) to discussions

Demonstrating top and btop / htop with tmux should be a discussion

completed


Multiple networks issue

I've been trying to solve this for days now with no luck... Any help is greatly appreciated.
The scenario:

I have d3 rendering multiple networks.
It consists of single nodes plus multiple connected node networks.
I am trying to attach d3-force (simulation) so that the nodes dont overlap when dragged and the entire network maintains relative positioning.
Am using the manybody force.

The problem:

When the simulation loads (simulation.restart()), the entire network keeps spreading apart.
All nodes/networks keep moving away indefinitely.
Even when nodes from one network are dragged, all other networks move.

Expected behavior

If its single nodes, they shouldn't move unless dragged
When a connected network is dragged, only that network moves and nothing else moves
If a connected network is dragged onto itself, it opens up
if one network is dragged onto another network, then they both move away and maintain relative distance.
If the networks are away from each other then dragging one shouldn't move or affect anything else.
The example is a relatively smaller network, I have to make it work for more complex and larger networks as well. with thousands of nodes+tens of thousands of links

Heres a small fiddle : https://jsfiddle.net/pdubey84/or0tn49k/2/

The nodes spread apart because of the negative charge force. They stop moving apart once all the nodes are distanceMax apart (50 for your jsfiddle)
They don't move away indefinitely. But as long as the simulation is active, they will keep wiggling to try to find an optimal position.
The reason why all nodes move when any node is dragged is that simulation.alphaTarget(0.7).restart() adds energy to the entire simulation, not just the node being dragged.

Commenting out simulation.alphaTarget(0.7).restart() and simulation.alphaTarget(0).restart() from your jsfiddle may be what you want.
In the future, this kind of question would be more appropriate for stackoverflow.com

Thanks for fielding this question, @steveharoz!

Thanks for the response @steveharoz  I tried your suggestion but then the drag/drop of nodes doesnt work. I was wondering if there was a way to apply multiple simulations on different networks so they dont interfere with each other?

@pdubey84 That'd involve a complex simulation system, which is beyond the scope of d3-force.

Thanks for  your prompt response @steveharoz


feat(object-assertion): Matchers use variadic arguments

This PR updates most of the ObjectAssertion matches to use variadic parameters. It also updates the AssertionError options so we can show diffs when the assertion fails, providing more complete information to the user.

As we discussed internally, it'd be ok to add the expected value to toBeEmpty. The other methods would generate a diff that could be misleading of the real error. Good catch @byrpatrick!

@all-contributors please add @byrpatrick for review


ZEC Explorer?

I'm trying to find confirmations for txids on the ZEC chain. Are there plans to include API calls for ZEC as well? If not, can anyone point me toward an explorer that shows confirmations for ZEC with a simple API call? 57b7746ec9c4a14a46c6384061d4ce9b60164de9b6c11cf1800eb77ff7038afe

https://github.com/str4d/insight-ui-zcash

https://explorer.zcha.in/


RuntimeError: The size of tensor a (6144) must match the size of tensor b (8192) at non-singleton dimension 0

When running the DeepSpeed-Chat’s RLHF Example 1: Coffee Time Training for a 1.3B ChatGPT Model, I got this error at the step 3. I strictly followed the instruction of the tutorial. 'python train.py --actor-model facebook/opt-1.3b --reward-model facebook/opt-350m --deployment-type single_gpu'. Python version: 3.10, CUDA 11.7

try trun off  --enable_hybrid_engine

Thanks. As you suggested, it works if I remove --enable_hybrid_engine at file  training/step3_rlhf_finetuning/training_scripts/single_gpu/run_1.3b.sh

It may result from the version of your deepspeed. When I meet the same issue, I simply change my deepspeed version from 0.9.5 to 0.9.0 and it works

I have the same problem, I also disabled the hybrid engine and it actually worked! Thanks.

my deepspeed version is 0.14.0，i meet same problem，i

try trun off --enable_hybrid_engine

i turnd off enable_hybrid_engine, but still meet same problem.  my deepspeed version is 0.14.0

I have the same problem, I also disabled the hybrid engine and it actually worked! Thanks.

what is your deepspeed version?


Expose a garbage collection method in index_writer().
This should probably be the object of a minor release of tantivy (0.3.1)

Based on the changelog is this issue complete? Or is there more work to do?


Night CI 2023-05-28: Failed

action url: https://github.com/spidernet-io/egressgateway/actions/runs/5106143311

ignore ci issue


[test] Disable device and back deployment for Interpreter/value_generics.swift

This test requires new runtime features which aren't in any OS runtime yet.

@swift-ci please smoke test


Substack icon / link

Howdy! Love the theme. Incredible. Well done. I'd love if there was a Substack icon for the profile mode in order to point people to my newsletter which i publish there.
I'd be happy to contribute if you'd be able to get me started - thanks much!

@jpmcb thanks for the idea, this one is really easy I can do it.


test failures in suite of blaze-0.8.0; == 2 failed, 824 passed, 1 error ==

Firstly I initially had == 7 failed, 824 passed, 9 skipped, 23 xfailed, 2 xpassed, 1 error  ==
using the latest versions of numba (0.18.2) and datashape (0.4.4).

        Discover returns the datashape of a Python object.  This object can refer
        to external data.

        Datashapes range from simple scalars

        >>> discover(10)
        ctype('int64')

        To collections

        >>> discover([[1, 2, 3], [4, 5, 6]])
        dshape('2 * 3 * int64')

        To record types and other objects

        >>> x = np.array([('Alice', 100), ('Bob', 200)], dtype=[('name', 'S7'),
        ...                                                     ('amount', 'i4')])
        >>> discover(x)
        dshape('2 * {name: string[7, "ascii"], amount: int32}')

        See http://datashape.pydata.org/grammar.html#some-simple-examples
        for more examples
        """
        if hasattr(o, 'shape') and hasattr(o, 'dtype'):
            return from_numpy(o.shape, o.dtype)
        raise NotImplementedError("Don't know how to discover type %s" %
>               type(o).__name__)
E       NotImplementedError: Don't know how to discover type bytes

/usr/lib64/python3.4/site-packages/datashape/discovery.py:51: NotImplementedError

Do you require any further information?

@idella Thanks for the report. Do you get the same errors on the master branch?

@idella

this error: ERROR collecting blaze/compute/tests/test_dask.py was resolved by 5e70f6bb

import dask wasn't being properly skipped

the error from test_date_grouper_repeats is related to different code generation in sqlalchemy versions, there was a bit of churn around the 1.0.x series that blaze didn't track exactly with sqlalchemy releases. i tried to get the fix in for that as soon as i noticed travis-ci failing. that was fixed by e0f0e125.
the bytes discovery error was fixed here https://github.com/ContinuumIO/datashape/pull/136

we simply hadn't implemented this yet

the Tuple datashape error was fixed here: 1790180cc23bf4882b4bb800b6046552e9ed7091

we weren't accounting for Tuple datashapes when computing dimensions

these have all been resolved. closing.

nice work thanks

The release of blaze-0.8.1 has its own set of troubles.

Don't install blaze 0.8.1. Install 0.8.2. That's the latest version

Oh  an  0.8.2., so have to start again


Rendering transparent area to SVG produces black

This appears black:
save_graphic("bad.svg", rectangle(width, height, transparent))

Workaround: this appears transparent:
save_graphic("ok.svg", overlay(rectangle(width, 0, transparent), rectangle(0, height, transparent)))

I encountered this here:
https://pytamaro.si.usi.ch/activities/luce/bellinzona-market-stall/en/v1

The contents of bad.svg:
<?xml version="1.0" encoding="utf-8" ?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="100" shape-rendering="crispEdges">
	<path d="M0 0L200 0L200 100L0 100L0 0Z"/>
</svg>

If I change the color of the rectangle, I get this svg:
<?xml version="1.0" encoding="utf-8" ?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="100" shape-rendering="crispEdges">
	<path fill="#DD4D3E" d="M0 0L200 0L200 100L0 100L0 0Z"/>
</svg>

So, the transparent graphic will lead to the absence of a fill attribute. And it seems that SVG renderers then assume the color is black.

I've looked into this a bit but I'm still unsure at which level this should be best fixed. A lethal mix of viewers' compliance, Skia SVG generation, and versions of the SVG spec...
Given that we are already hijacking the root <svg> element, we could add the fill="none" attribute to force a transparent background for all our SVGs.

Sounds like a good approach.

Turns out this issue is actually a subcase of #24. The workaround implemented above is actually problematic in other cases (as it changes the assumption that the default fill color is black).


gym complains "framework not found" (but build in Xcode succeeds)

first off, I love using fastlane! I hope I can sort this out as it's been smooth so far.
New Issue Checklist

[x] Updated fastlane to the latest version
[x] I have read the Contribution Guidelines

Issue Description
builds fine in XCode, but gym complains about "framework not found"
see output and env (github limits to 65536 characters): https://docs.google.com/document/d/1Gj0FvIGuWBXrekPqbTU1kgJaPQFMIXe4tV5WcSMhwx4
✅ fastlane environment ✅
Stack

Key
Value

OS
10.12.5

Ruby
2.2.0

Bundler?
true

Git
git version 2.7.1

Installation Source
~/.rvm/gems/ruby-2.2.0/bin/fastlane

Host
Mac OS X 10.12.5 (16F73)

Ruby Lib Dir
~/.rvm/rubies/ruby-2.2.0/lib

OpenSSL Version
OpenSSL 1.0.2 22 Jan 2015

Is contained
false

Is homebrew
false

Is installed via Fabric.app
false

Xcode Path
/Applications/Xcode.app/Contents/Developer/

Xcode Version
8.3.2

System Locale

Variable
Value

LANG
en_US.UTF-8
✅

LC_ALL
en_US.UTF-8
✅

LANGUAGE

fastlane files:
`./fastlane/Fastfile`
# Customise this file, documentation can be found here:
# https://github.com/fastlane/fastlane/tree/master/fastlane/docs
# All available actions: https://docs.fastlane.tools/actions
# can also be listed using the `fastlane actions` command

# Change the syntax highlighting to Ruby
# All lines starting with a # are ignored when running `fastlane`

# If you want to automatically update fastlane if a new version is available:
# update_fastlane

# This is the minimum version number required.
# Update this, if you use features of a newer version
fastlane_version "2.27.0"

# This value helps us track success metrics for Fastfiles
# we automatically generate. Feel free to remove this line
# once you get things running smoothly!
generated_fastfile_id "056cccb7-a2ca-4533-a405-1e643adc7c31"

default_platform :ios

platform :ios do
  before_all do
    # ENV["SLACK_URL"] = "https://hooks.slack.com/services/..."
    sh "../../scripts/placesecrets.sh"
    # sh "../../scripts/ensure_git_clean.sh"
    cocoapods
  end

  lane :commit_version do
    commit_version_bump(
      xcodeproj: ENV['IOS_PROJECT'],
      message: 'iOS release version bump'
    )
  end

  lane :inc_major do
    sh "../../scripts/version_ios.sh major"
    commit_version
  end

  lane :inc_minor do
    sh "../../scripts/version_ios.sh minor"
    commit_version
  end

  lane :inc_patch do
    sh "../../scripts/version_ios.sh patch"
    commit_version
  end

  lane :inc_build do
    sh "../../scripts/version_ios.sh build"
    commit_version
  end

  lane :sign_manual do
    disable_automatic_code_signing(path: ENV['IOS_PROJECT'])
    commit_version
  end

  lane :sign_auto do
    enable_automatic_code_signing(path: ENV['IOS_PROJECT'])
    commit_version
  end

  desc "Runs all the tests"
  lane :test do
    scan
  end

  desc "Build the app"
  lane :dryrun do
    match
    gym(
      export_method: 'app-store'
    )
  end

  lane :gym_prod do
    disable_automatic_code_signing(path: ENV['IOS_PROJECT'])
    gym(export_method: 'app-store')
    enable_automatic_code_signing(path: ENV['IOS_PROJECT'])
  end

  desc "Submit a new Beta Build to Apple TestFlight"
  desc "This will also make sure the profile is up to date"
  lane :beta_testflight do |values|
    match(type: 'appstore')
    gym_prod
    pilot
  end

  desc "Deploy a new version to the App Store"
  lane :release do
    match(type: 'appstore')

    # snapshot
    gym_prod

    deliverit
    # frameit
  end

  lane :deliverit do
    changelog = prompt(
      text: "What's new in this version? ",
      multi_line_end_keyword: 'END'
    )

    deliver(
      force: true,
      release_notes: ({
        'default' => changelog,
        'en-US' => changelog,
        'en-UK' => changelog
      }),
      skip_metadata: false,
      skip_screenshots: true,
      skip_binary_upload: true
    )
  end

  lane :beta_fabric do |values|
    # build your iOS app
    match(
      force_for_new_devices: true
    )

    gym(
      export_method: 'development'
    )

    emails = values[:test_email] ? values[:test_email]<EMAIL_ADDRESS># You can list more emails here
    groups = values[:test_email] ? nil : nil # You can define groups on the web and reference them here

    crashlytics(api_token: ENV['CRASHLYTICS_API_TOKEN'],
             build_secret: ENV['CRASHLYTICS_BUILD_SECRET'],
                   emails: emails,
                   groups: groups,
                    notes: 'Distributed with fastlane', # Check out the changelog_from_git_commits action
            notifications: true) # Should this distribution notify your testers via email?
  end

  lane :travis do
    create_keychain(
      name: "MATCH_KEYCHAIN_NAME",
      password: "MATCH_KEYCHAIN_PASSWORD",
      default_keychain: true,
      unlock: true,
      timeout: 3600,
      add_to_search_list: true
    )

    match(
      type: 'appstore',
      readonly: true,
      keychain_name: "MATCH_KEYCHAIN_NAME",
      keychain_password: "MATCH_KEYCHAIN_PASSWORD"
    )

    gym(
      export_method: 'app-store',
      include_bitcode: true
    )

    deliver(force:true)
  end

  desc "Upload to App Store and submit for review"
  lane :upload do
    deliver
  end

  # You can define as many lanes as you want

  after_all do |lane|
    # This block is called, only if the executed lane was successful

    # slack(
    #   message: "Successfully deployed new App Update."
    # )
  end

  error do |lane, exception|
    # slack(
    #   message: exception.message,
    #   success: false
    # )
  end
end

# More information about multiple platforms in fastlane: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Platforms.md
# All available actions: https://docs.fastlane.tools/actions

# fastlane reports which actions are used
# No personal data is recorded. Learn more at https://github.com/fastlane/enhancer

`./fastlane/Appfile`
app_identifier "io.tradle.dev.tim" # The bundle identifier of your app
apple_id<EMAIL_ADDRESS># Your Apple email address
itc_team_name "Tradle Inc"
team_id "94V7783F74" # Developer Portal Team ID

# you can even provide different app identifiers, Apple IDs and team names per lane:
# More information: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Appfile.md

fastlane gems

Gem
Version
Update-Status

fastlane
2.37.0
✅ Up-To-Date

Loaded fastlane plugins:
No plugins Loaded
Loaded gems

Gem
Version

executable-hooks
1.3.2

bundler-unload
1.0.2

rubygems-bundler
1.4.4

bundler
1.13.5

CFPropertyList
2.3.5

i18n
0.8.1

minitest
5.10.1

thread_safe
0.3.6

tzinfo
1.2.3

activesupport
4.2.8

public_suffix
2.0.5

addressable
2.5.1

babosa
1.0.2

claide
1.0.2

fuzzy_match
2.0.4

nap
1.1.0

cocoapods-core
1.2.1

cocoapods-deintegrate
1.0.1

cocoapods-downloader
1.1.3

cocoapods-plugins
1.0.0

cocoapods-search
1.0.0

cocoapods-stats
1.0.0

netrc
0.7.8

cocoapods-trunk
1.2.0

cocoapods-try
1.1.0

colored2
3.1.2

escape
0.0.4

fourflusher
2.0.1

gh_inspector
1.0.3

molinillo
0.5.7

ruby-macho
1.1.0

nanaimo
0.2.3

xcodeproj
1.5.0

cocoapods
1.2.1

colored
1.2

highline
1.7.8

commander-fastlane
4.4.4

unf_ext
<IP_ADDRESS>

unf
0.1.4

domain_name
0.5.20170404

dotenv
2.2.1

excon
0.56.0

multipart-post
2.0.0

faraday
0.12.1

http-cookie
1.0.3

faraday-cookie_jar
0.0.6

faraday_middleware
<IP_ADDRESS>

fastimage
2.1.0

jwt
1.5.6

little-plugger
1.1.4

multi_json
1.12.1

logging
2.2.2

memoist
0.15.0

os
0.9.6

signet
0.7.3

googleauth
0.5.1

httpclient
2.8.3

hurley
0.2

mime-types-data
3.2016.0521

mime-types
3.1

uber
0.0.15

representable
2.3.0

retriable
2.1.0

google-api-client
0.9.28

json
2.1.0

mini_magick
4.5.1

multi_xml
0.6.0

plist
3.3.0

rubyzip
1.2.1

security
0.1.3

slack-notifier
1.5.1

terminal-notifier
1.8.0

unicode-display_width
1.2.1

terminal-table
1.8.0

tty-screen
0.5.0

word_wrap
1.0.0

rouge
2.0.7

xcpretty
0.2.8

xcpretty-travis-formatter
0.0.4

generated on: 2017-06-08

@mvayngrib Can you please update your issue to include the relevant excerpt from the output? Google Docs is hanging when I try to load your link. You could also try posting it on https://gist.github.com.

@getaaron sure thing, see https://gist.github.com/mvayngrib/6b4928f6588961247d6fc67db708f0fe#file-framework-not-found-L3768

I think this is a CocoaPods issue. Try out the answer here: https://stackoverflow.com/q/23489920/1445366

@getaaron i don't currently have a problem building in XCode. I have two entries in Library Search Paths:
$(inherited)
$(SRCROOT)/Tradle

just in case, under Framework Search Paths, i have:
$(inherited)
$PROJECT_DIR
"$PODS_CONFIGURATION_BUILD_DIR  (recursive)
$(PROJECT_DIR)/Tradle

@getaaron any ideas? Happy to screenshare and debug with someone :)


Bump gradle to 7.3

Seems like we may be able to use Declarative Test Suites in the future.  And Version Catalog in 7.4, it's ?

Version Catalog has already been used in other square's repos to replace the const values in buildSrc (like the kotlinpoet did),but the okhttp project needs the common methods in buildSrc, I think it's not necessary to migrate to Version Catalog.

I hope we move to Version Catalog, the consistency of a common standard approach to dependency management should lead to better tooling, and less to maintain in buildSrc.

ok


removed dead url https://www.getcomposercat.com/

it seems the tool no longer exists... I searched thru github but couldn't find it there either.

yup. "it's dead, jim."
thank you!


Rewrite with create-react-app

Rewrite the app using the create-react-app starter provided by facebook here: https://github.com/facebookincubator/create-react-app
This will allow for easier testing, CI, and building.

issue-6 branch is taking care of this, just needs styling and polish


Authenticated users

how do we detect authenticated users
Okay it has been settled we go with Lumen, meaning we need a working approach on how to detect authenticated users at the frontend.
state management should work
Just in case who will handle checking of authenticated users at any point in the development phases of our project isn’t familiar with state management, kindly help us with a brief guide on how state management can be achieved, using authentication check as an example.

Overview
By adopting Lumen as our backend technology-of-choice, it intends to communicate with React as a service. This means Lumen won't return a "View" like Laravel MVC. Lumen will instead return JSON data that will be rendered by React in the DOM.
This service model approach ensures Lumen is lightweight, fast and performance driven, while only focusing on serving data request and not saddled with complicated frontend view creation.
This concept is central to how Lumen is used in detecting authenticated users and managing "state".
Though Lumen is a stateless micro framework, it can be configured to use cache services and in-memory stores for managing session state and detecting authenticated users. Two notable such services are:

Redis
Memcached

In our project, the code that performs user authentication and state mgt. will be written by the backend developers to output JSON data that will passed to the response object which React can then render or store locally.
The state object is maintainted in the backend and is utilized between user requests to manage state.
I will be providing working approach on how we can enable user authetication in Lumen and use Redis to detect and manage these users data with relation to React frontend

In our project, the code that performs user authentication and state mgt. will be written by the backend developers to output JSON data that will be passed through the response object which React can then render or store locally.
won't storing user authentication related data locally be a security threat?

I will be providing working approach on how we can enable user authetication in Lumen and use Redis to detect and manage these users data in relation to React frontend

Okay @prominded thanks, that would be great.

won't storing user authentication related data locally be a security threat?
Okay @prominded thanks, that would be great.

I did not mean persistence file storage.
I was referring to state mgt. by React to avoid too many api calls (roundtripping) to lumen when server data has not changed. React only then make api calls when notified by server to update its cache. Its much like what you see with football livescores etc
This is best practice for UI performance and real time data updates

won't storing user authentication related data locally be a security threat?
Okay @prominded thanks, that would be great.

I did not mean persistence file storage.
I was referring to state mgt. by React to avoid too many api calls (roundtripping) to lumen when server data has not changed. React only then make api calls when notified by server to update its cache. Its much like what you see with football livescores etc
This is best practice for UI performance and real time data updates

Okay that's cool, we are expecting your guide as promised. thanks

Okay, already working on it and the specification document you shared.
On Sun, 10 May 2020, 9:40 am Samuel Onyijne<EMAIL_ADDRESS>wrote:

won't storing user authentication related data locally be a security
threat?
Okay @prominded https://github.com/prominded thanks, that would be
great.
I did not mean persistence file storage.
I was referring to state mgt. by React to avoid too many api calls
(roundtripping) to lumen when server data has not changed. React only then
make api calls when notified by server to update its cache. Its much like
what you see with football livescores etc
This is best practice for UI performance and real time data updates
Okay that's cool, we are expecting your guide as promised. thanks
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/BuildForSDG/Phenom-Frontend/issues/6#issuecomment-626293448,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AMVNDFYLTRM3ZKGDBIKPS5LRQZSBFANCNFSM4M4YPSIQ
.

@prominded we are still waiting for your guide so close out on this

Detecting User Authentication in Lumen
This is primarily done in Lumen using an Http Middleware.
Lumen comes  with an Authentication Middleware that verifies if users of your application are authenticated, otherwise redirects them to login page.
The steps are:

Define Authentication Middleware

Register the Middleware

Define Authentication Middleware

1a. Use the default Authentication Middleware in app/Http/Middleware directory,
OR
1b. Define your own Authentication middleware and save it with any name in app/Http/Middleware directory
Sample custom code to create Authentication Middleware:
user())
 {
 return redirect('login');
}

return $next($request); }

2. Register the Middleware

You register your Authentication Middleware in two steps:

a) Bind your Middleware to a reference in
$app-> routeMiddleware method
 in the boostrap/app.php :

$app-> routeMiddleware([ 'auth' => App\Http\Middleware\MyMiddleware::class, ]);

OR

app->register ('App\Providers\AppServiceProvider::class');
app-> routeMiddleware([ 'auth' => App\Http\Middleware\Authentication::class, ]);

b) Assigning middleware to the http route.

$app->get('/Admin', ['middleware' => 'auth', ...your controller function here...]);

/* Ensure facades are enable in bootstrap/app.php  by uncommenting the line: $app->withFacades() */

Define Authentication Middleware

1a. Use the default Authentication Middleware in app/Http/Middleware directory,
OR
1b. Define your own Authentication middleware and save it with any name in app/Http/Middleware directory
Sample custom code to create Authentication Middleware:
user())
 {
 return redirect('login');
}

return $next($request); }

2. Register the Middleware

You register your Authentication Middleware in two steps:

a) Bind your Middleware to a reference in
$app-> routeMiddleware method
 in the boostrap/app.php :

$app-> routeMiddleware([ 'auth' => App\Http\Middleware\MyMiddleware::class, ]);

OR

app->register ('App\Providers\AppServiceProvider::class');
app-> routeMiddleware([ 'auth' => App\Http\Middleware\Authentication::class, ]);

b) Assigning middleware to the http route.

$app->get('/Admin', ['middleware' => 'auth', ...your controller function here...]);

/* Ensure facades are enable in bootstrap/app.php  by uncommenting the line: $app->withFacades() */

Sample custom code to create Authentication Middleware:
/*
user())
 {
 return redirect('login');
}

return $next($request); }

*/

2. Register the Middleware

You register your Authentication Middleware in two steps:

a) Bind your Middleware to a reference in
$app-> routeMiddleware method
 in the boostrap/app.php :

$app-> routeMiddleware([ 'auth' => App\Http\Middleware\MyMiddleware::class, ]);

OR

app->register ('App\Providers\AppServiceProvider::class');
app-> routeMiddleware([ 'auth' => App\Http\Middleware\Authentication::class, ]);

b) Assigning middleware to the http route.

$app->get('/Admin', ['middleware' => 'auth', ...your controller function here...]);

/* Ensure facades are enable in bootstrap/app.php  by uncommenting the line: $app->withFacades() */

Using Redis to Manage cached state in Lumen

Install Redis
Register Redis
Configure Redis

**Install Redis
Using composer, install redis packages:
-predis/predis
-illuminate/redis
Type these CLI commands:
composer require predis/predis
composer require illuminate/redis
**Register Redis
In boostrap/app.php, add the Redis service:
$app-> register('Illuminate\Redis\RedisServiceProvider::class');
**Configure Redis
In the .env file, set the CACHE_DRIVER=Redis
/*
You may choose to enable facades and Eloquent in bootstrap/app.php  by uncommenting the lines:
$app->withFacades();
$app->withEloquent();
$app->configure('database');
*/
You can then call Redis in your Lumen code using any of these methods:
a) app('redis')
b) $app['redis']
c) $this->app['redis']
Setting a key/value:
app('redis')->set($key, $value)
Getting a value by key:
app('redis')->get($key)

okay this is would be great for @bhimbho @maryabik @AliyuAhmad and @uchennaibekwe working at the backend.
Actually what we needed from you is how do we use  state management (frontend) do detect a user that is authenticated, your guide is for the backend.

Okay I see. I recomnend Redux ( different from Redis) for frontend (React, Angular, Ionic etc).
I ll work on it soonest but I ll advice u close this issue and raise a more specific issue targeting client side state management because d heading of this current issue apoears misleading.

how do we detect authenticated users
Okay it has been settled we go with Lumen, meaning we need a working approach on how to detect authenticated users at the frontend.
state management should work
Just in case who will handle checking of authenticated users at any point in the development phases of our project isn’t familiar with state management, kindly help us with a brief guide on how state management can be achieved, using authentication check as an example.

It's about frontend authentication check

Okay I am on it

authstate.txt
Find attached demo code of how Redux state management is used to detect authenticated user in React.

authstate.txt
Find attached demo code of how Redux state management is used to detect authenticated user in React.

Okay thanks.


Fix metrics service port

Fix mapping for metrics service port:
https://github.com/Kuadrant/multicluster-gateway-controller/blob/aa223edcfff267b738e63f0ac4798725a1bfeeff/config/default/manager_metrics_patch.yaml#L19-L21

@averevki This change might conflict with, or already be solved by the Service/ServiceMonitor in https://github.com/Kuadrant/multicluster-gateway-controller/tree/main/config/prometheus
Those resources are used by https://github.com/Kuadrant/multicluster-gateway-controller/blob/main/hack/quickstart-metrics.sh in this metrics walkthrough
What problem are you seeing that led to you needing the change in this PR?

It looks like it should have been removed. See comment thread #389 (comment) and the (probably incorrectly closed automatically, but I now reopened) issue #411

I see... Then this PR is irrelevant and feel free to close it. Thank you for the explanation :+1:


Headers are not passed in live streaming request

This is my code:
        MediaItem
          .Builder()
          .setUri(channel.sourceURL?.url ?: "")
          .setLiveConfiguration(
            MediaItem.LiveConfiguration.Builder()
              .setMaxPlaybackSpeed(1f)
              .build()
          )
          .build()

      val dataSourceFactory = ResolvingDataSource.Factory(source()) { dataSpec ->
        var token = refreshToken()
        val headersMap: MutableMap<String, String> = HashMap()
        headersMap["Authorization"] = "Bearer $token"
        dataSpec.withRequestHeaders(headersMap)
      }

      val mediaSource = HlsMediaSource.Factory(dataSourceFactory)
        .createMediaSource(mediaItem)

      player.addListener(this)
      player.setMediaSource(mediaSource)
      player.prepare()
      player.play()

   fun source() {
    val headersMap: MutableMap<String, String> = HashMap()
    headersMap["Authorization"] = "Bearer $token"
    val factory = DefaultHttpDataSource.Factory()
      .setDefaultRequestProperties(headersMap)
      .setUserAgent("agent")
      return factory;
   }

When I use network inspector in android studio I don't see this authorization header and also no user agent. This happens on android tv platform (android version 13).
Exoplayer library version is 2.16.0.

The issue title mentions "in live streaming request".

It looks like you're trying to set the Authorization header twice - why is that? It's probably clearer to reason about if you only set it once, either on DefaultDataSource.Factory if it's meant to be the same for every media item, or inside ResolvingDataSource.Resolver.resolveDataSpec if it should be newly generated for each media item.

fun source() {
  val headersMap: MutableMap<String, String> = HashMap()
  headersMap["Authorization"] = "Bearer $token"

I don't think there's any value called token in scope here, so I don't think this substitution will work? In fact I'm not sure this even compiles.

I'm afraid it's hard for us to investigate further without a minimal reproducible example. I'd suggest you step through with a debugger to see what happens to the headers - you should see them being handled here (this is the 2.16.0 version of this class):
https://github.com/androidx/media/blob/7fe9ecc1c592b758e76f6b458e0dc43cce282e5f/library/datasource/src/main/java/com/google/android/exoplayer2/upstream/DefaultHttpDataSource.java#L592-L601

I'm afraid that I cannot disclose more without consequences. But I think there is something causing this in the code around it. I created minimal test project and it works. So definitely not on the exoplayer side. Sorry for wasting your time. I will post solution here when I will know more about this case.

Turns out I first called setMediaSource and right after that setMediaItem. It seems that this call overrides previous call and that's why passing headers did not work at all.


Update Error message

Version 7.0.4.

doesn't work:
Failure sending request: Status code 400 -- Original Error: Long running operation
terminated with status 'Failed': Code="" Message=""

@garimakhulbe Can you please write a test case mocking a proper error.code & error.message response and compare the returned error message to an expected one?

Updated. Check now.

@ahmetalpbalkan You'll only get an error of the underlying API uses Azure-AsyncOperation. Otherwise, the fields containing the error message (I believe) vary too much.

Otherwise, the fields containing the error message (I believe) vary too much.

I don't think so, I remember reading error.message and error.code keys are common in all long running operation results yielding errors.

@garimakhulbe issue still persists, the fix did not change anything
network/SubnetsClient#CreateOrUpdate: Failure sending request: Status code 400 -- Original Error: Long running operation terminated with status 'Failed': Code="" Message=""

I think you really need to trigger a response with error.message, error.code and actually compare err.Error() string to what we are trying to get.

CI seems to be failing, it appears like go vet is now part of go.tool, if you remove the go-get statement for that in .travis.yml, I feel like the build will continue.

@garimakhulbe I realized the firstmost call is failing in this case. This is even before the polling starts, that's why we might be looking at the wrong place for the error.
How to repro:

Create a vnet
CreateOrUpdate  a subnet with addressPrefix: <IP_ADDRESS>/24 in the vnet
CreateOrUpdate the same subnet with different (and invalid) addressPrefix: <IP_ADDRESS>/3
That request returns HTTP400 Bad Request with:

{
  "error": {
    "code": "NetcfgInvalidSubnet",
    "message": "Subnet 'dm' is not valid in virtual network 'docker-machine-vnet'.",
    "details": []}}

If you get stuck let me know.

@ahmetalpbalkan This will only fix the blank code and message issue,  code=="" and message=="". For above error, you will now get  code==Unknown and message==None.
Current approach only includes operation resource errors in error string, else unknown. Can you provide trace for error response like above scenario? Want to check field hierarchy and if these errors always come in fields as mentioned above.

@ahmetalpbalkan @brendandixon Please review.

@garimakhulbe still doesn't work as expected I get error:
network/SubnetsClient#CreateOrUpdate: Failure sending request: Status code 400 -- Original Error: Error occurred unmarshalling JSON - Error = 'json: cannot unmarshal array into Go value of type string' JSON = '{
  "error": {
    "code": "NetcfgInvalidSubnet",
    "message": "Subnet 'dm' is not valid in virtual network 'docker-machine-vnet'.",
    "details": []
  }
}'

@ahmetalpbalkan @garimakhulbe Hmm, odd. This gist (http://play.golang.org/p/DC_VKMWIuv) with that JSON works fine.

hmm maybe I applied the patch incorrectly.

nope I didn't. @brendandixon because you don't have Details field, which NRP returns an array, but our code has string:

@garimakhulbe I think we should omit the 'details' field for now.

@garimakhulbe @ahmetalpbalkan Agreed.

Details removed. It should work fine now.

@garimakhulbe works as expected now! :+1:

generally LGTM, please squash into a single commit

Thanks a lot!


dpg, put partial update as separate module

Code changes:

separate partial update logics as a module
call partial update module in postprocessor
handle partial update in cadl-extension
test locally, and partial update works in cadl, will add a test in cadl-tests in next pr if the logic in this pr looks fine

Local tests passed, I will add a test to cadl-tests in next pr.

when you are ready, change it to formal PR, and see Srikanta want to review as well.

@srnagar, could you please take a look at this pr?


Docs or Blog Post for Creating Custom Tasks

It would be great to see a document or a very basic blog post detailing the process and/or best practices of creating your own custom tasks, especially when a new task image is required. For example:

I need a new Tekton task so I can run a specific CLI
So, first I create a container image that has my cli, and these are the steps.
Then I create a Task, and this is how I lay out params, args, command/script, etc…
This is how I incorporate it into a Pipeline

I have a feeling the end result would be something that would look pretty “normal”.  For now, people like me look create a simple Task and say “well… it works, I hope I didn’t do anything dumb, though”

/kind documentation

@pittar Do you mean custom tasks or tasks?

I didn't realize there was a difference :)
What I meant was if I want to create my own Task, what are the steps?  Is there any best practices for the container image the steps will use?
For example, I created my own "dotnet-cli" Task.  It was mostly a trial-and-error effort, and I'm not confident I did a very good job of it (although, it does work):
https://github.com/pittar-sandbox/dotnet-contoso-gitops-developers/blob/main/overlays/non-prod/01-namespaces/contoso-cicd/01-tasks/dotnet-sdk-task.yaml

@jerop , actually, I think that catalog is exactly what I was looking for.
It would be great if that was easier to find or better advertised.  Maybe my search skills are poor, but I wasn't able to find a link to that doc on my own.

@jerop , actually, I think that catalog is exactly what I was looking for.
It would be great if that was easier to find or better advertised. Maybe my search skills are poor, but I wasn't able to find a link to that doc on my own.

@pittar thanks for the feedback -- added a reference to the recommendations in the Tasks documentation -- https://github.com/tektoncd/pipeline/pull/4318


Scene preview Tool Window not working?

By accident stumbled upon new Tool Window to me - Scene preview. As it has the same icon as TSCN files, I guess it came from this plugin.
Didn't find any information about. How should it work?
I opened different TSCN files but it always shows No scene

It is from the "GdScript plugin", I guess.


Design: read in velero server arg options and make them available to OADP

@kaovilai
Is your feature request related to a problem? Please describe.

Describe the solution you'd like

Describe alternatives you've considered

Additional context

@kaovilai I think you wanted me to open this a while back, can you please add some details to the description

Server args were requested by @shubham-pampattiwar in https://issues.redhat.com/browse/OADP-1182
It might've been my bad judgement but due to current dpa fields affecting server args indirectly via the install.Deployment (pkg), and we had wanted full control, I made a new path to forming velero container server args rather than making it fully compatible and interoperable with the OADP 1.1 fields. Split brain syndrome.
The cleanest way to approach this would be to make sure all args are implemented as a podTemplateOption which we could then refactor dpa from 1.3 format to 1.4 format which would eliminate the split brain but requires refactoring of dpa perhaps.

we now have something.. but it is not automatically imported.


add minimum pandas version

switch from argmin to idxmin

thanks, this looks good.
if param not in list(self.param_guess.keys()):
just out of curiosity, why was this change necessary? it works for me with and without the list() encapsulating self.param_guess.keys().

just out of curiosity, why was this change necessary?

I believe the reason is that dict.keys() returns an iterable in python3, while it returns a list in python2.
For the in operator in an if statement this shouldn't be a problem, though, so python-modernize was probably just over-cautious.


What happened to all the camera transforms and ACEScc?

I'm using this config as an environment variable, with Blender. I just replaced the OCIO studio config file from last year with the latest studio one, and to my surprise I found a greatly reduced list of camera colour spaces, and no ACEScc. What happened? Is that intentional or the result of an issue on my end?

Are you sure you’re not using the CG config by mistake? We release two
configs for users - CG and studio - and what you’re describing sounds like
CG.
The CG config in fact contains no camera color spaces, as it is intended
for fully computer generated work.
Let us know! :)
On Wed, Nov 15, 2023 at 14:12 NotTheMindProbe @.***>
wrote:

I'm using this config as an environment variable, with Blender. I just
replaced the OCIO studio config file from last year with the latest studio
one, and to my surprise I found a greatly reduced list of camera colour
spaces, and no ACEScc. What happened? Is that intentional or the result of
an issue on my end?
Tasks
—
Reply to this email directly, view it on GitHub
https://github.com/AcademySoftwareFoundation/OpenColorIO-Config-ACES/issues/119,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AMPHU2E2R3KVVVQH2ZNWWLLYES5UJAVCNFSM6AAAAAA7MPDZO2VHI2DSMVQWIX3LMV43ASLTON2WKOZRHE4TINZVGQ3DGMI
.
You are receiving this because you are subscribed to this thread.Message
ID: @.***
com>

This issue existed in studio-config-v2.1.0_aces-v1.3_ocio-v2.3. I have now tried this with studio-config-v2.0.0_aces-v1.3_ocio-v2.2 and the behaviour is as I wanted. So it seems 2.3 might accidentally be the CG version instead of the studio version, or something with the way it's configured makes it only work with the CG colour spaces.

We’ll take a look! Thanks for checking.
On Wed, Nov 15, 2023 at 17:40 NotTheMindProbe @.***>
wrote:

This issue existed in studio-config-v2.1.0_aces-v1.3_ocio-v2.3. I have now
tried this with studio-config-v2.0.0_aces-v1.3_ocio-v2.2 and the behaviour
is as I wanted. So it seems 2.3 might accidentally be the CG version
instead of the studio version, or something with the way it's configured
makes it only work with the CG colour spaces.
—
Reply to this email directly, view it on GitHub
https://github.com/AcademySoftwareFoundation/OpenColorIO-Config-ACES/issues/119#issuecomment-1812884578,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AMPHU2EFLVA63CL7RXSKZDLYETWA7AVCNFSM6AAAAAA7MPDZO2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMJSHA4DINJXHA
.
You are receiving this because you commented.Message ID:
<AcademySoftwareFoundation/OpenColorIO-Config-ACES/issues/119/1812884578@
github.com>

Hi @NotTheMindProbe,
Where did you pull the files from?
The difference is as  follows:
diff --git a/studio-config-v2.0.0_aces-v1.3_ocio-v2.1.ocio b/studio-config-v2.1.0_aces-v1.3_ocio-v2.3.ocio
index e0a2afb..a6c0094 100644
--- a/studio-config-v2.0.0_aces-v1.3_ocio-v2.1.ocio
+++ b/studio-config-v2.1.0_aces-v1.3_ocio-v2.3.ocio
@@ -1,13 +1,13 @@
-ocio_profile_version: 2.1
+ocio_profile_version: 2.3

 environment:
   {}
 search_path: ""
 strictparsing: true
 luma: [0.2126, 0.7152, 0.0722]
-name: studio-config-v2.0.0_aces-v1.3_ocio-v2.1
+name: studio-config-v2.1.0_aces-v1.3_ocio-v2.3
 description: |
-  Academy Color Encoding System - Studio Config [COLORSPACES v2.0.0] [ACES v1.3] [OCIO v2.1]
+  Academy Color Encoding System - Studio Config [COLORSPACES v2.1.0] [ACES v1.3] [OCIO v2.3]
   ------------------------------------------------------------------------------------------

   This "OpenColorIO" config is geared toward studios requiring a config that includes a wide variety of camera colorspaces, displays and looks.
@@ -49,6 +49,9 @@ displays:
   sRGB - Display:
     - !<View> {name: Raw, colorspace: Raw}
     - !<Views> [ACES 1.0 - SDR Video, ACES 1.0 - SDR Video (D60 sim on D65), Un-tone-mapped]
+  Display P3 - Display:
+    - !<View> {name: Raw, colorspace: Raw}
+    - !<Views> [ACES 1.0 - SDR Video, ACES 1.0 - SDR Video (D60 sim on D65), Un-tone-mapped]
   Rec.1886 Rec.709 - Display:
     - !<View> {name: Raw, colorspace: Raw}
     - !<Views> [ACES 1.0 - SDR Video, ACES 1.0 - SDR Video (D60 sim on D65), Un-tone-mapped]
@@ -74,9 +77,9 @@ displays:
     - !<View> {name: Raw, colorspace: Raw}
     - !<Views> [ACES 1.0 - SDR Cinema (D60 sim on DCI), ACES 1.1 - SDR Cinema (D65 sim on DCI), Un-tone-mapped]

-active_displays: [sRGB - Display, Rec.1886 Rec.709 - Display, Rec.1886 Rec.2020 - Display, Rec.2100-HLG - Display, Rec.2100-PQ - Display, ST2084-P3-D65 - Display, P3-D60 - Display, P3-D65 - Display, P3-DCI - Display]
+active_displays: [sRGB - Display, Display P3 - Display, Rec.1886 Rec.709 - Display, Rec.1886 Rec.2020 - Display, Rec.2100-HLG - Display, Rec.2100-PQ - Display, ST2084-P3-D65 - Display, P3-D60 - Display, P3-D65 - Display, P3-DCI - Display]
 active_views: [ACES 1.0 - SDR Video, ACES 1.0 - SDR Video (D60 sim on D65), ACES 1.1 - SDR Video (P3 lim), ACES 1.1 - SDR Video (Rec.709 lim), ACES 1.1 - HDR Video (1000 nits & Rec.2020 lim), ACES 1.1 - HDR Video (2000 nits & Rec.2020 lim), ACES 1.1 - HDR Video (4000 nits & Rec.2020 lim), ACES 1.1 - HDR Video (1000 nits & P3 lim), ACES 1.1 - HDR Video (2000 nits & P3 lim), ACES 1.1 - HDR Video (4000 nits & P3 lim), ACES 1.0 - SDR Cinema, ACES 1.1 - SDR Cinema (Rec.709 lim), ACES 1.0 - SDR Cinema (D60 sim on DCI), ACES 1.1 - SDR Cinema (D60 sim on D65), ACES 1.1 - SDR Cinema (D65 sim on DCI), ACES 1.1 - HDR Cinema (108 nits & P3 lim), Un-tone-mapped, Raw]
-inactive_colorspaces: [CIE-XYZ-D65, sRGB - Display, Rec.1886 Rec.709 - Display, Rec.1886 Rec.2020 - Display, Rec.2100-HLG - Display, Rec.2100-PQ - Display, ST2084-P3-D65 - Display, P3-D60 - Display, P3-D65 - Display, P3-DCI - Display]
+inactive_colorspaces: [CIE-XYZ-D65, sRGB - Display, Display P3 - Display, Rec.1886 Rec.709 - Display, Rec.1886 Rec.2020 - Display, Rec.2100-HLG - Display, Rec.2100-PQ - Display, ST2084-P3-D65 - Display, P3-D60 - Display, P3-D65 - Display, P3-DCI - Display]

 looks:
   - !<Look>
@@ -102,12 +105,14 @@ view_transforms:
       Component of ACES Output Transforms for SDR D65 video

       ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.RGBmonitor_100nits_dim.a1.0.3
+      ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.DisplayP3_dim.a1.0.0
       ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.Rec709_100nits_dim.a1.0.3
       ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.Rec2020_100nits_dim.a1.0.3

       AMF Components
       --------------
       ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.RGBmonitor_100nits_dim.a1.0.3
+      ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.DisplayP3_dim.a1.0.0
       ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.Rec709_100nits_dim.a1.0.3
       ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.Rec2020_100nits_dim.a1.0.3
     from_scene_reference: !<BuiltinTransform> {style: ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - SDR-VIDEO_1.0}
@@ -118,11 +123,13 @@ view_transforms:
       Component of ACES Output Transforms for SDR D65 video simulating D60 white

       ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.RGBmonitor_D60sim_100nits_dim.a1.0.3
+      ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.DisplayP3_D60sim_dim.a1.0.0
       ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.Rec709_D60sim_100nits_dim.a1.0.3

       AMF Components
       --------------
       ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.RGBmonitor_D60sim_100nits_dim.a1.0.3
+      ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.DisplayP3_D60sim_dim.a1.0.0
       ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.Rec709_D60sim_100nits_dim.a1.0.3
     from_scene_reference: !<BuiltinTransform> {style: ACES-OUTPUT - ACES2065-1_to_CIE-XYZ-D65 - SDR-VIDEO-D60sim-D65_1.0}

@@ -322,6 +329,27 @@ display_colorspaces:
     allocation: uniform
     from_display_reference: !<BuiltinTransform> {style: DISPLAY - CIE-XYZ-D65_to_sRGB}

+  - !<ColorSpace>
+    name: Display P3 - Display
+    aliases: [displayp3_display]
+    family: Display
+    equalitygroup: ""
+    bitdepth: 32f
+    description: |
+      Convert CIE XYZ (D65 white) to Apple Display P3
+
+      AMF Components
+      --------------
+      ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.DisplayP3_dim.a1.0.0
+      ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.DisplayP3_dim.a1.0.0
+      ACEStransformID: urn:ampas:aces:transformId:v1.5:ODT.Academy.DisplayP3_D60sim_dim.a1.0.0
+      ACEStransformID: urn:ampas:aces:transformId:v1.5:InvODT.Academy.DisplayP3_D60sim_dim.a1.0.0
+    isdata: false
+    categories: [file-io]
+    encoding: sdr-video
+    allocation: uniform
+    from_display_reference: !<BuiltinTransform> {style: DISPLAY - CIE-XYZ-D65_to_DisplayP3}
+
   - !<ColorSpace>
     name: Rec.1886 Rec.709 - Display
     aliases: [rec1886_rec709_display]
@@ -1392,6 +1420,30 @@ named_transforms:
       children:
         - !<LogCameraTransform> {log_side_slope: 0.07329248, log_side_offset: 0.51304736, lin_side_offset: 0.0075, lin_side_break: 0.00262409, linear_slope: 10.44426855, direction: inverse}

+  - !<NamedTransform>
+    name: C-Log2 - Curve
+    aliases: [clog2_crv, Input - Canon - Curve - Canon-Log2, crv_canonlog2]
+    description: |
+      Convert CLog2 Log (arbitrary primaries) to CLog2 Linear (arbitrary primaries)
+
+      CLFtransformID: urn:aswf:ocio:transformId:1.0:Canon:Input:CLog2-Curve_to_Linear:1.0
+    family: Input/Canon
+    categories: [file-io]
+    encoding: log
+    transform: !<BuiltinTransform> {style: CURVE - CANON_CLOG2_to_LINEAR}
+
+  - !<NamedTransform>
+    name: C-Log3 - Curve
+    aliases: [clog3_crv, Input - Canon - Curve - Canon-Log3, crv_canonlog3]
+    description: |
+      Convert CLog3 Log (arbitrary primaries) to CLog3 Linear (arbitrary primaries)
+
+      CLFtransformID: urn:aswf:ocio:transformId:1.0:Canon:Input:CLog3-Curve_to_Linear:1.0
+    family: Input/Canon
+    categories: [file-io]
+    encoding: log
+    transform: !<BuiltinTransform> {style: CURVE - CANON_CLOG3_to_LINEAR}
+
   - !<NamedTransform>
     name: V-Log - Curve
     aliases: [vlog_crv, Input - Panasonic - Curve - V-Log, crv_vlog]

@KelSolaar the OCIO config files? From the latest release over here on GitHub
https://github.com/AcademySoftwareFoundation/OpenColorIO-Config-ACES/releases/tag/v2.0.0

Are there any other Blender users that could confirm this behavior? Looking at the configs and trying them in various other apps does not show this issue.


added LICENSE badge

@seanyesmunt  this LGTM

@vyaspranjal33, can we send you some LBC as appreciation? If you'd like a Hacktoberfest T-shirt, please reach out to the same address also.

@tzarebczan  i would like to have a LBRY Hacktoberfest Tshirt & LBRY stickers(if there's any )


Revert "style: HTML and language"

Reverts opentffoundation/manifesto#139

@SebastianStadil It's "open source" but "open-source software" - at least in English. You reverted the typo as well. The resource @DicsyDel quoted also stated that adjectives should use a dash.

I was under the impression that this is a community effort, not a Scalr effort masqueraded as an open one. Too bad!


fix(DataStore): Cascade delete sync from children to parent models

Issue #, if available:
Description of changes:
Check points: (check or cross out if not relevant)

[ ] Added new tests to cover change, if needed
[ ] Build succeeds with all target using Swift Package Manager
[ ] All unit tests pass
[ ] All integration tests pass
[ ] Security oriented best practices and standards are followed (e.g. using input sanitization, principle of least privilege, etc)
[ ] Documentation update for the change if required
[ ] PR title conforms to conventional commit style
[ ] If breaking change, documentation/changelog update with migration instructions

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

Codecov Report

Merging #1736 (7ce1ad1) into main (0b1f97e) will increase coverage by 0.19%.
The diff coverage is 83.53%.

@@            Coverage Diff             @@
##             main    #1736      +/-   ##
==========================================
+ Coverage   59.05%   59.24%   +0.19%
==========================================
  Files         716      716
  Lines       21884    21917      +33
==========================================
+ Hits        12923    12985      +62
+ Misses       8961     8932      -29

Flag
Coverage Δ

API_plugin_unit_test
62.51% <ø> (ø)

AWSPluginsCore
71.44% <ø> (ø)

Amplify
46.83% <ø> (-0.02%)
:arrow_down:

Analytics_plugin_unit_test
71.09% <ø> (ø)

Auth_plugin_unit_test
78.74% <ø> (ø)

DataStore_plugin_unit_test
76.09% <83.53%> (+0.66%)
:arrow_up:

Geo_plugin_unit_test
52.12% <ø> (ø)

Predictions_plugin_unit_test
26.81% <ø> (ø)

Storage_plugin_unit_test
58.04% <ø> (ø)

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

Impacted Files
Coverage Δ

...eCategoryPlugin/Storage/ModelStorageBehavior.swift
0.00% <ø> (ø)

...eCategoryPlugin/Storage/StorageEngineAdapter.swift
0.00% <0.00%> (ø)

...gin/AWSDataStorePlugin+DataStoreBaseBehavior.swift
65.10% <33.33%> (ø)

...utationDatabaseAdapter+MutationEventIngester.swift
78.52% <50.00%> (ø)

...ataStoreCategoryPlugin/Storage/StorageEngine.swift
70.61% <60.00%> (+3.67%)
:arrow_up:

...ategoryPlugin/Storage/CascadeDeleteOperation.swift
85.94% <85.94%> (ø)

...n/Storage/SQLite/StorageEngineAdapter+SQLite.swift
67.01% <100.00%> (ø)

...Queue/ProcessMutationErrorFromCloudOperation.swift
59.85% <100.00%> (ø)

...eAndLocalSave/ReconcileAndLocalSaveOperation.swift
88.23% <100.00%> (+0.73%)
:arrow_up:

...s/AWSHubPlugin/Internal/HubChannelDispatcher.swift
88.23% <0.00%> (-5.89%)
:arrow_down:

... and 3 more

:mega: Codecov can now indicate which changes are the most critical in Pull Requests. Learn more


2 tasks, same manifest filename = cross-contamination

I'm running 2 buster tasks using different source files but both outputting the manifest file with the same name, although in different directories. There are files from the first task that end up in the second, or vice versa. If the manifest filename is different, then all works fine.

@UltCombo Option 2 sounds perfect. :)


Environment Variables are somewhat case sensitive...?

Hi,
I came across a weird situation, where I have had two environment variables with the same key, but different capitalizations (prefix or path is not relevant, for example PREFIX_A_B and PREFIX_a_B). So, obviously, this is not a correct environment and I will catch this case, but the Exception was quite misleading at first...
Caused by: org.github.gestalt.config.exceptions.GestaltConfigurationException: Failed to load configs from source: envVars
 - level: ERROR, message: Mismatched path lengths received for path: context.mode, this could be because a node is both a leaf and an object
	at org.github.gestalt.config.GestaltCore.validateLoadResultsForErrors(GestaltCore.java:203) ~[gestalt-core-0.24.6.jar:?]
	at org.github.gestalt.config.GestaltCore.loadConfigs(GestaltCore.java:129) ~[gestalt-core-0.24.6.jar:?]
	at org.github.gestalt.config.GestaltCache.loadConfigs(GestaltCache.java:38) ~[gestalt-core-0.24.6.jar:?]

Maybe something like ' for path x.y.z there were different values in same source' or something like that would be better? And if values are the same, just merge both...?
(Hint for debugging: In IntelliJ, if you specify the environment, duplicate variables even with different cases will get stripped. But with ProcessBuilder, it's possible to create such malformed environments.)
Additional Note: my expectation of case-insensitivity comes from the first sentence of this paragraph:
https://github.com/gestalt-config/gestalt#getconfig-path-options

Since Gestalt supports multiple config sources that have varying cases we normalize all configs to lower case as we build an internal tree. The input sources such as Env Vars are case sensitive, but we create a path by tokenizing it and converting it to lower case. We need to enforce some limitations internally, such as we cant have duplicate nodes or a node can not be of multiple types, such as a leaf and a object.
I will check the documentation and see if i can make it more clear. The docs are already long and i didnt want to get to specific, but it may be needed.
 This is prevented.
my.path = value1
my.path.name = value2

Unfortunately, it is too difficult to check for similar values and merge them here, so i will leave it as an error.
This error covers both cases. I have updated the error message, it is still not great, and i will think about it a little more. but hopefully it is more clear, as i added the duplicate paths cause. It also includes the path to help with investigating.
Updated error:

Parsing path length errors for path: db, there could be several causes such as: duplicate paths, or a node is both a leaf and an object

I am not creating a new release right now. So there is no way to validate this for now.

I also updated the config-tree documentation to be a little more clear about when it converts to lower case and the errors that can occur.

The updated message will help a lot already, I think. 👍
[For the merging, in my specific case I now scan the ProcessBuilder's Environment Map for any key, that is equalIgnoreCase to one I'm creating at runtime, and then use the existing keys exact spelling, so that it matches all possible cases, the user might have entered for the main process. This prevents me from having this weired state... ]


PR: Some improvements to the "Run > Configuration per file" dialog

Description of Changes
This PR builds on PR #13590 and proposes additional changes to improve the layout of the "Run > Configuration per file" dialog.

Affirmation
By submitting this Pull Request or typing my (user)name below,
I affirm the Developer Certificate of Origin
with respect to all commits and content included in this PR,
and understand I am releasing the same under Spyder's MIT (Expat) license.
I certify the above statement is true and correct: Jean-Sébastien Gosselin

/show binder