Performance question

Hi,
Am not sure if am doing anything stupid, but I see quite a bit of diff in performance while comparing these two:
https://gist.github.com/anonymous/18701cafb01b270488e0
https://gist.github.com/anonymous/240a8a4ddb97e8d9ed81
while on the desktop browser the difference is about 1sec, on mobile its more the 1 min (5sec vs 85sec) have you got any ideas? maybe be you some benchmarks etc? (mobile - using android chrome browser, on default android browser its slow too).

adding transaction around it for Dexie helps a bit:
https://gist.github.com/anonymous/f37c9e6a95ceda2a529d
down to 22sec on mobile

looking at the chrome tools lots of time is wasted by this:
function fakeAutoComplete(fn) {
var to = setTimeout(fn, 1000);
clearTimeout(to);
}
can this be changed/removed/improved?

When coding with visual studio, those lines are priceless but we should have a build script that removes them in the release / minified version. I did a simple profiling of that sequence last year but came to the conclusion that they really fast in the particular browser i tested it in (probably some version of chrome, opera or ie) but did not dig so deep into it.
There is a general problem that Dexie doesn't have a build script that I hope that someone could help or with.

Any solution? this delay breaks my code. @dfahlander

That piece of code is not needed and does nothing. It's just a way to improve the IDE 's code completion. Once a build script is in place (grunt, gulp or so), i'll remove those calls from the minified version.
What you can do right now, is either to remove the code in fakeautocomplete(), or to remove all calls to it. Will not affect behavior at all. Sorry I wasn't more clear in my last answer about the actual code change you could do.

The calls to setTimeout()/clearTimeout() are now removed. However, when testing performance with chrome/opera/ie/firefox, this change is not noticable. Haven't tested on safari though.

David, the difference for me was noticeable on mobile devices.

Mobile devices is a common use case for the library so hopefully this fix might improve performance a little then.
Thanks!
David

Thank you dear David Fahlander.
I found Dexie as a best solution for storing and recovering data at the client side. I implemented a solution with mixing the Dexie.js and Linq.js. It's amazing :) . But I think there is a bottleneck. When I want to select all data of a table with around 100k records and converting it to array there is a delay about 5 second. That is an issue that I don't know how to overcome that.
Best regards.


[mgmt] migrate mgmt package to esm 1

https://github.com/Azure/azure-sdk-for-js/issues/32184
@azure/arm-appservice
@azure/arm-appservice-profile-2020-09-01-hybrid
@azure/arm-astro
@azure/arm-attestation
@azure/arm-authorization
@azure/arm-authorization-profile-2020-09-01-hybrid

API change check
API changes are not detected in this pull request.


wireguard support?

Is openziti using wireguard behind the scene? I suspect that the answer is no since I see wireguard is not mentioned anywhere on the documentation and I did not find wireguard being mentioned on any github issue either.
If the answer is that you are not using wireguard then the next obvious question is "why?" You will probably answer with another question like "why we should use wireguard?" (when we can build something better) and I'm not implying that you should use wireguard but I am curious on your answer. Many of the existing similar solutions use wireguard ie. Tailscale/Headscale, Netmaker etc and wireguatd looks now like a good bet because it is part of the linux kernel and, in the same time, it seems like a risky proposition to go with a custom-built VPN protocol when a good VPN protocol already exists and it is almost like a standard.

I'm going to focus solely on the "wire" part of this question as there are numerous features OpenZiti implements that wireguard isn't looking to provide.... No, OpenZiti does not use wireguard for transport. OpenZiti is also a mesh network. It takes a different approach than wireguard does by taking a payload and wrapping it with a protocol that the overlay knows how to route most efficiently across it's mesh network. Wireguard, to my personal knowledge, also cannot hide the actual final destination of traffic since the traffic is purely underlay. OpenZiti's design allows for the final destination of the traffic to be entirely dark to the underlay. Finally, OpenZiti is a full mesh overlay network, wireguard isn't looking to be that. Those are the first thoughts that came up in my head as to some differences, along with some "why".
Although I personally view OpenZiti as much more/different than a VPN, it definitely can act as a VPN replacement and plenty of people use it as such. It's a lot more though, zero trust sounds ready, but is a pretty big thing to make an entire overlay network that implements zero trust.
I didn't want to go on and on, hopefully that gives you a bit of insight and is the right amount. Fwiw, we generally will engage in discussions using discourse over at https://openziti.discourse.group

This is probably not the place to ask this but are you aware on how do Netmaker, Tailscale/Headscale, etc, using wireguard as their underline engine, achieve the same features as OpenZiti "numerous features OpenZiti implements that wireguard isn't looking to provide...." ?
Do they use wireguard for a minuscule set of their feature set and then, on top of that, for additional features which wireguard does not provide, they re-implement from ground up what they need?

There are indeed features that overlap OpenZiti from those other secure networking implementations, but there are numerous differences as well. We don't have an exhaustive list of similarities/differences handy.

Do they use wireguard for a minuscule set of their feature set and then, on top of that, for additional features which wireguard does not provide,

Yes, that is exactly what they do. They rely on Wireguard for secure transport and then built additional capabilities around Wireguard. Things like:

making it easy to deploy "n" devices (something Wireguard isn't trying to solve on its own, from my recollection)
solving the "double NAT" problem (which OpenZiti doesn't have at this time, due to it's design)
logging
metrics
etc.

I believe that, in general, you are on doing a great job with open ziti. I like the SDKs idea, especially the java sdk.
I do understand why other providers use WireGuard as you said for “secure transport” and I do not understand what benefits open ziti gets by avoiding to use WireGuard.
I do not feel comfortable becoming locked in with open ziti's custom network transport implementation -  with other providers they just generate plain WireGuard configurations which means that the WireGuard generated networks will continue to work even if, let's say, netmaker or headscale will cease to exist. Yes, in this situations, the extras i.e. metrics etc will stop working but the main wireguard networks will continue to work.

Thanks for the compliment! I understand your positioning, thanks for the issue. We'll be here and in discourse if you ever change your mind :)


add DropDownLayerChooser

It would be nice to include a layer control in this starter. I miss leaflet's simple layer control in mapbox-gl.js... but this starter seems like a good alternative.
https://github.com/astutespruce/sarp-connectivity/blob/master/ui/src/components/Map/DropDownLayerChooser.jsx
I'll see if I can figure it out and create a PR but any guidance is appreciated.
Thanks for publishing the Barrier Prioritization Tool - so much good stuff.

@smnorris Adding a layer chooser seems beyond the intent of the starter; I want to keep this very lean.  I would recommend developing that as a component you add in after starting from this starter.  Happy to link to your usage as an example of doing that.
Changing layers is much more complex in Mapbox GL than in Leaflet...
I don't know if you saw it, but I had stubbed out a basemap style chooser in this component: https://github.com/brendan-ward/gatsby-starter-mapbox/blob/master/src/components/Map/StyleSelector.jsx
Just in case it helps think through managing the state of the map style as you add / remove layers.

Thanks @brendan-ward, that make sense. My strategy for now is to use XYZ raster tile backgrounds and just a few toggleable MVT layers on top, much like the basic leaflet geojson examples.  I think that should avoid much of the additional complexity of managing layers in GL. Thanks for that link, I didn't realize you were switching between vector tile basemaps.

@brendan-ward Happy to link to your usage as an example of doing that.

I would be happy if you like my usage and you would link it as an example.
Code
Demo

@astridx added a cross-link, thanks!  These look like nice examples of adding additional components on top of this starter.


[XLA] Make the client_test able to be disabled using a manifest file

This change allows these 3 tests in the XLA ClientTest to be selectively disabled using the manifest mechanism.

Can one of the admins verify this patch?

Jenkins, test this please.


Some players don't show the last frame

Maybe this is a problem with mp4 of with the players, but I noticed that if I export a simple video such as this:
https://github.com/Vanilagy/mp4-muxer/assets/163635/caac5b2c-dd48-4ea5-9bdd-015591f99c3b
Quicktime on my mac, Photos on my iPhone, and Instagram story creator don't show the last frame where the canvas is all red. In the browser, like you can see above, it works correctly.
In instagram:
https://github.com/Vanilagy/mp4-muxer/assets/163635/f131de36-ed44-4daa-81c9-ed514f6969d8
Here's my code:
    function drawFrame(nFrame: number) {
      if (ctx === null) return;
      const p = nFrame === 0 ? 0 : nFrame / (TOTAL_FRAMES - 1);
      ctx.fillStyle = 'blue';
      ctx.fillRect(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT);
      ctx.fillStyle = 'red';
      ctx.fillRect(0, 0, CANVAS_WIDTH * p, CANVAS_HEIGHT * p);
    }

    // Create an MP4 muxer with a video track and maybe an audio track
    const muxer = new Muxer({
      target: new ArrayBufferTarget(),

      video: {
        codec: 'avc',
        width: CANVAS_WIDTH,
        height: CANVAS_HEIGHT,
      },

      // Puts metadata to the start of the file. Since we're using ArrayBufferTarget anyway, this makes no difference
      // to memory footprint.
      fastStart: 'in-memory',

      // Because we're directly pumping a MediaStreamTrack's data into it, which doesn't start at timestamp = 0
      firstTimestampBehavior: 'offset',
    });

    const videoEncoder = new VideoEncoder({
      output: (chunk, meta) => muxer.addVideoChunk(chunk, meta),
      error: (e) => console.error(e),
    });
    videoEncoder.configure({
      codec: 'avc1.42001f',
      width: CANVAS_WIDTH,
      height: CANVAS_HEIGHT,
      bitrate: 1e6,
    });

    currentFrame.current = 0;
    while (currentFrame.current < TOTAL_FRAMES) {
      // add frame
      drawFrame(currentFrame.current);
      const frame = new VideoFrame(canvasRef.current, {
        timestamp: (currentFrame.current * 1e6) / 30, // Ensure equally-spaced frames every 1/30th of a second
      });
      videoEncoder.encode(frame);
      frame.close();
      currentFrame.current++;
    }
    await videoEncoder.flush();
    muxer.finalize();

    let buffer = muxer.target.buffer;
    downloadBlob(new Blob([buffer]));

I hope it's not a silly mistake with my code. Thanks! :)

I only skimmed but your post, but could it be related to this?
https://github.com/Vanilagy/mp4-muxer/issues/31
This was the exact same issue, with the last frame not showing in some players, and how to fix it.

I do use Ko-Fi, of course! When did you donate? Maybe I forgot to read the donation message...

yesterday


server, config: remove all remaining unwraps

Removes some last remaining bits of unwrap usage
Edit: Although all the necessary unwrap were removed before but this makes sure we don't have any unwrap traces at all.
This completely closes the issue: https://github.com/containers/aardvark-dns/issues/59

@Luap99 @baude Good to go. I think

I will take a look at the slirp timeout flake later

/lgtm


Use barrnap to filter reads

Description of feature
Run all four profiles, filter reads that match before assembly.

@tfalkarkea : Interested in taking on this one? If it's barrnap or sortmerna doesn't matter to me (and I think I can speak for @danilodileo too), as long as it's a tool that doesn't bring any license issues with it.

I can definitely take this. I already have some code for SortMeRNA and there is an existing module so I'll proceed with implementing that.

We will postpone di module after the release.
Barrnap will be part of a two step subworkflow:

barrnap will find the rrnas and will store the names in a list
bbmap_filterbyname (https://github.com/BioInfoTools/BBMap/blob/master/sh/filterbyname.sh) will filter out the reads from the samples.

This subworkflow needs to be placed before the assembly step, along with bbduk.


Return Result<Option, Error> from Store::get

This allows is to improve store.get to return the entity or null and an error if there really is one.

This should help https://docs.diesel.rs/diesel/result/trait.OptionalExtension.html#tymethod.optional


0.8.7 - fix state property and split modules for FP part

Add fixes around 0.8.6 and remove old way propose to pass back the state of the ViewModel
Current state is now propose via state property & we have now stateAs<>() to provide the state for the given type.
I have splitted the FP part to provide a simple stable Safe Type, and allow to bind it to arrow.
For now, I kept the wrapper around Try

sorry added many header for license.
Added Result FP type contract


Create Contributing.md

Created a basic, short and accurate Contributing.md containing the link to the issues page and instructions as to how to make the first pull request.
Closes #9
Kindly merge this under hacktoberfest.

[ ] My code follows the code style of this project.
[x] This PR does not contain plagiarized content.
[x] The title of my pull request is a short description of the requested changes.

If you can give me the code style you work with I can create the Contribution.md file

Kindly read this and merge under hacktoberfest.
Ref. #9
@slim-codes

Kindly read this and merge under hacktoberfest. Ref. #9 @slim-codes

@sshikhar09
This contributing.md file is not concise as required by issue #9. Plus, you are making this PR from your main branch which isn't advisable to do as you yourself specified in the file you have just created. I typically dismiss this kind of PR's. However, I shall merge it under hacktoberfest because you are probably new to this, but next time make a quality PR to whatever project you are contributing to. Thank you

@AkashR04
Make a PR for this if you can make a proper Contribution file
Thank you

@slim-codes thank you for the advice. I am new to this and i don't know the work culture. Therefore, I apologize for my mistakes. I hope to learn from this and do better in this field.


Errors in grizzly cloud

resolution_fixed   |    by<EMAIL_ADDRESS>

Rose module is totally borked (issues resolving variables)

Mounting scratch failed - no filesystem type

Errors loading LDAP accounts in puppet (ticket #22) - now the groups aren't found even in the second LDAP run

Issue migrated from trac:38 at 2024-01-31 17:55:20 +1100

<EMAIL_ADDRESS>changed status from new to assigned

<EMAIL_ADDRESS>commented

NCI ticket regarding web access https://sf.anu.edu.au:8443/Ticket/Display.html?id=64610

<EMAIL_ADDRESS>commented

Web services on the instance can't be accessed

<EMAIL_ADDRESS>commented

NCI should be working on the web & ldap issues, have raised them with Ben

<EMAIL_ADDRESS>changed status from assigned to closed

<EMAIL_ADDRESS>changed resolution from `` to fixed

<EMAIL_ADDRESS>changed owner from `` to bje900

ibc599 commented

Has this all been fixed?

<EMAIL_ADDRESS>commented

I'd say so

<EMAIL_ADDRESS>removed milestone (was accessdev v1.0)

<EMAIL_ADDRESS>commented

Milestone accessdev v1.0 deleted


wrong validation with autoFocus ans immediate submit

I have a rather simple form with a TextField from redux-form-material-ui that implements the validate() callback, which just checks if a field is not empty.
It's probably worth to note that the text field has the autoFocus property set to true.
The form is basically something like this:

let MyForm = React.createClass({

  displayName: "Form",

  mixins: [PureRenderMixin],

  render() {
    return (
      <form onSubmit={this.props.handleSubmit}>
          <Field
            name="newValue"
            component={TextField}
            fullWidth={true}
            autoFocus={true}  // <== notice this
          />
      </form>
    );
  }

});

MyForm = reduxForm({
  form: formName,
  enableReinitialize: true,
  validate
})(MyForm);

Externally I pass a initialValues prop to <MyForm/>.
Now this happens:

the form component is mounted. At this time validate() is called twice.

The first call receives an empty object and thus returns an {newValue: 'This field is required.'} error.
The second call receives a copy of initialValues and thus returns an empty object because validation succeded.

the initial value is shown and the text field is immediately focused
without any other interaction I press enter
the field is marked as invalid with the This field is required. text

Note that...

When pressing enter in step3 validate() is not called again. So it seems that the first validate() call (that got an empty values object) remained "active".
When clicking somewhere (causing a focus change) or changing the field text causes a new call of validate() and makes the form work as expected.

This happens with redux-form v6.3.2 (Chrome 55)

@jampy Offtop

Externally I pass a initialValues prop to .

Can you provide me, how I can pass initialValues to redux-form? I'm using something like that:
export default connect(state => ({
  initialValues: state.data
}))(
  reduxForm({
    form: formName,
    validate,
    enableReinitialize: true
  })(MyForm)
)

@indapublic I think that should work, as long as state.date is populated.

@erikras back on topic; can you say anything about this problem please?

@jampy I'm using connect & initialValues in initialization.  You are not, perhaps:
MyForm = reduxForm({
  form: formName,
  enableReinitialize: true,
  validate
})(MyForm);

How you externally pass initialValues?

@indapublic please don't misuse this issue to discuss things not related to it, thanks...

Because this issue saw almost no activity for a few months, I'm closing it.


Add dropdown

@pieterdd
I'm marking this as a draft because I still need to add docs / examples and it'd be awesome if @pieterdd / anyone else could give some feedback on it.
This has an issue with styling being removed from the overlay when the overlay receives events.
sort of example:
dropdown(
    // pass in iterator of views ( this becomes the list in the dropdown)
    Iterator().map(move |val| {
        view(val).on_click_stop(move |_| signal.set())
    }),
    // View for the active item (this is the always visible part of the dropdown)
    |val| {
        stack((
            label(move || item),
            chevron_down_icon_view,
        ))
        .style(|s| s.items_center().justify_between().size_full())
    },
    // Signal change for the active item
    move ||signal.get(),
)

Like other widgets this doesn't automatically set the active item when an item in the list is clicked. Currently I am adding an on click handle to each item in the list. Feedback on this api would be nice.

I'm about to write a wall of text specifically about the API, so I'll focus exclusively on that. Is there a specific rationale for choosing move || signal.get() over signal? Most existing widgets seem to take a ReadSignal directly.
Although not writing to the signal internally is consistent with what most widgets do, text_input currently does take a RwSignal. For completeness sake, this is what that could look like for dropdown:
dropdown(
    a_list.iter(),
    |item| {
        stack((
            label(move || item),
            chevron_down_icon_view,
        ))
        .style(|s| s.items_center().justify_between().size_full())
    },
    rw_signal,
)

It's a slightly simpler, but more restrictive API.
If my memory serves me well, several UI frameworks including Vue follow a "data bubbles down, events bubble up" strategy where the UI component merely reads the variable and emits an event to indicate changes by the user. It seems like a good principle, and your proposal seems consistent with that, so RwSignal is my least preferred option for now. In fact, I wouldn't mind if text_input changed over to using a ReadSignal as well.
I've also been contemplating the implications of having an on_change event callback. Concept:
dropdown(
    a_list.iter(),
    |item| {
        stack((
            label(move || item),
            chevron_down_icon_view,
        ))
        .style(|s| s.items_center().justify_between().size_full())
    },
    signal,
).on_change(move |_, new_value| set_signal.set(new_value))

This feels like a bit of a compromise between the flexibility of letting the caller control the event handler and the simplicity of keeping the lower level stuff behind the scenes. Currently I quite like this, although I haven't sufficiently considered possible downsides to voice a definitive opinion about it.
So to recap, the options I see:

ReadSignal with explicit low-level click handler (signal or move || signal.get())
RwSignal with implicit signal value update
ReadSignal with explicit high-level change handler

(Disclaimer: I haven't tested any of the snippets, just making this up as I go along)

Another thing to be added is a function to drive the open/close state of the list

The issues on this pr around the styling of overlays still exists but that is separate from the dropdown.
The issue of API for on_updates still applies but that is also a larger problem and stems more from the list API.
The example could be improved for consistency / isn't the prettiest but it is functional

@pieterdd I want the on_change api for this but I took a stab at implementing it and couldn't get it to work

@jrmoulton I couldn't implement a working widget_func(...).on_change() API either. I've suggested this code change as a backup plan. It's not ideal from a user perspective but it's easy to maintain, so I'm putting it on the table as an option.

I'm open for any feedback @dzhou121 but I think this is good to merge for now


Module detecting changes in policy documents on every Terraform Plan. Whitespace

Description
Since moving to v4.23.0 of the terraform-aws-modules/iam/aws//modules/iam-role-for-service-accounts-eks module, I am getting whitespace updates on all policy document resources during plan. The behavior repeats no matter how often the plan/apply is run. The issue is non-disruptive but is not ideal. The issue does not exist in v4.20.3
Versions
v4.23.0

Terraform version: v1.0.7
Provider version(s):

terraform {
  required_version = ">= 0.13.1"

  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = ">= 3.72"
    }
    tls = {
      source  = "hashicorp/tls"
      version = ">= 3.0"
    }
    kubernetes = {
      source  = "hashicorp/kubernetes"
      version = ">= 2.10"
    }
  }
}

Reproduction Code [Required]
Terraform plan/apply
Expected behavior
No changes. Your infrastructure matches the configuration.
Terraform has compared your real infrastructure against your configuration
and found no differences, so no changes are needed.
Actual behavior
module.eks_cluster.module.efs_csi_controller.aws_iam_role.this[0]
resource "aws_iam_role" "this" {
    assume_role_policy = jsonencode( # whitespace changes
            {
                Statement = [
                    {
                        Action    = "sts:AssumeRoleWithWebIdentity"
                        Condition = {
                            StringEquals = {
                                oidc.eks.us-east-1.amazonaws.com/id/0000000000000000:aud = "sts.amazonaws.com"
                                oidc.eks.us-east-1.amazonaws.com/id/0000000000000000:sub = [
                                    "system:serviceaccount:kube-system:efs-csi-controller-sa",
                                    "system:serviceaccount:kube-system:efs-csi-node-sa",
                                ]
                            }
                        }
                        Effect    = "Allow"
                        Principal = {
                            Federated = "arn:aws:iam::000000000000:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/0000000000000000"
                        }
                        Sid       = ""
                    },
                ]
                Version   = "2012-10-17"
            }
        )
        id                 = "efs-csi-controller"
        name               = "efs-csi-controller"
        mtags              = {}
        (8 unchanged attributes hidden)
        (1 unchanged block hidden)
    }

Maybe instead of jsonencode a data aws_iam_policy_document" would work better?

we don't use jsonencode() and utilize aws_iam_policy_document - maybe https://github.com/hashicorp/terraform/pull/30486 will aid with this behavior

Please update to the latest v5.0.0 and let us know if this issue persists. If issue still persists, please provide reproduction code

Afraid we're still seeing the issue on v5.1.0
Description
On a plan or apply Terraform consistently detects a change in the assume_role_policy of the iam role created in our case it's part of the iam-role-for-service-accounts-eks module.
An interesting observation is that this doesn't happen consistently. Subsequent plans will show changes to other invocations of the module which didn't happen previously. We're calling the module 8 times and will always see at least 2 of them detecting changes on any given plan.
Expected Behaviour
Terraform to detect no changes, as nothing has changed.
Actual Behaviour
Although Terraform doesn't want to perform any changes it still detects drift in the iam policy where there shouldn't be.
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = ">= 3.75.0"
    }
}

module "cluster_autoscaler_irsa_role" {
  source = "terraform-aws-modules/iam/aws//modules/iam-role-for-service-accounts-eks"
  version = "5.1.0"

  role_name                        = "cluster-autoscaler-${var.cluster_name}"
  role_path                        = "/k8s/kube-system/"
  attach_cluster_autoscaler_policy = true
  cluster_autoscaler_cluster_ids   = [module.eks.cluster_id]

  oidc_providers = {
    main = {
      provider_arn               = module.eks.oidc_provider_arn
      namespace_service_accounts = ["kube-system:cluster-autoscaler"]
    }
  }
}

# module.eks_native[0].module.cluster_autoscaler_irsa_role.aws_iam_role.this[0] has been changed
~ resource "aws_iam_role" "this" {
    ~ assume_role_policy    = jsonencode( # whitespace changes
          {
              Statement = [
                  {
                      Action    = "sts:AssumeRoleWithWebIdentity"
                      Condition = {
                          StringEquals = {
                              oidc.eks.us-west-2.amazonaws.com/id/00000000000000000000000000000000:aud = "sts.amazonaws.com"
                              oidc.eks.us-west-2.amazonaws.com/id/00000000000000000000000000000000:sub = "system:serviceaccount:kube-system:cluster-autoscaler"
                          }
                      }
                      Effect    = "Allow"
                      Principal = {
                          Federated = "arn:aws:iam::00000000000:oidc-provider/oidc.eks.us-west-2.amazonaws.com/id/00000000000000000000000000000000"
                      }
                      Sid       = ""
                  },
              ]
              Version   = "2012-10-17"
          }
      )
      id                    = "cluster-autoscaler-abc-123-abc-1"
      name                  = "cluster-autoscaler-abc-123-abc-1"
      tags                  = {}
      # (8 unchanged attributes hidden)

      # (1 unchanged block hidden)
  }

Are you using a depends_on dependency?

Why was this closed? I'm using the latest version and every plan on this module has a lot of noise.

@lifelofranco whats your reproduction config?

I just use for_each to use the modules.
locals {     groups = {       "Admin" = {         users = [           "life"         ]         policy_arns = ["arn:aws:iam::aws:policy/AdministratorAccess"]       }       "Engineering" = {         users = [ ... ]
policy_arns = ["arn:aws:iam::aws:policy/AdministratorAccess"]
}
}
module "groups" {
depends_on = [module.users, module.policies]
source   = "terraform-aws-modules/iam/aws//modules/iam-group-with-policies"
version  = "5.2.0"
for_each = local.groups
attach_iam_self_management_policy = false
name                     = each.key
group_users              = each.value.users
custom_group_policy_arns = each.value.policy_arns
}
module "policies" {
source   = "terraform-aws-modules/iam/aws//modules/iam-policy"
version  = "5.2.0"
for_each = local.policies
name           = each.key
path             = "/"
description = each.value.description
policy          = templatefile(each.value.policy, try(each.value.policy_vars, {}))
}
`

Can we reopen this issue? @bryantbiggs

There isn't anything to do within this module since the issue is not reproducible. I suspect its on your end as to why there are changes (usually because of a depends_on)

There isn't anything to do within this module since the issue is not reproducible. I suspect its on your end as to why there are changes (usually because of a depends_on)

Can confirm this. I had a depens_on that produced the same issue as OP describes.


nixos/networking: use mkIfs on the inner attributes

Review suggestion that got lost in #312472

Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)

[ ] sandbox = relaxed
[ ] sandbox = true

[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
24.11 Release Notes (or backporting 23.11 and 24.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

Add a :+1: reaction to pull requests you find important.

Eh sorry forgot about it, thank you!

This broke evaluation and thus is blocking the nixos-unstable channel.  Simple test case:
$ nix eval -f. nixosTests.networking.networkd.routes.outPath
error: attribute 'metric' missing

       at /home/vcunat/nix/pkgs-1/nixos/modules/tasks/network-interfaces-systemd.nix:110:50:

          109|           MTUBytes = mkIf (route.options ? mtu) route.options.mtu;
          110|           Metric = mkIf (route.options ? metric) route.options.metric;
             |                                                  ^
          111|           PreferredSource = mkIf (route.options ? src) route.options.src;
(use '--show-trace' to show detailed location information)

Ouch that's not good at all, sorry!
I think I'll revert this one now: I don't think it's that pretty to mix Opt = mkIf with (mkIf ... { Opt = ..., so let's stick to one "style".


No effect; errors on new lines

Sorry, this will be a bit crude
From vimrc:
Plugin 'MaxMEllon/vim-jsx-pretty'
Plugin 'leafgarland/typescript-vim'  " highlight TS
Plugin 'peitalin/vim-jsx-typescript'  " highlight TSX; requires typescript-vim

Typescript blocks of code do not highlight, and newline indentations have an error. If I start a new line after a component block is closed with '>', it will be given 0 indentation and a closing bracket '>'. The filetype is correctly set to typescript.tsx.
I'm using function components in the spirit of react hooks (my example should be the same as pure components I believe).
This issues were observed in this simple file. The bracket error occurs when I create a new line at the closing '>' for Sidebar.
import { Link } from "react-router-dom";
import { Sidebar } from "./Sidebar";

export const AppSidebar = () => (
    <Sidebar
        visible={true}
        activeItem='executive'
        //size='mini'
       //color='indigo'
    >
       <Link to="/">Home</Link>
       <Link to="/one">One</Link>
       <Link to="/two">Two</Link>

    </Sidebar>
)

Workaround: I'm using these packages in vimrc and highlighting works as expected (albeit a bit slower as some users have noted):
Plugin 'yuezk/vim-js'  " recommended by vim-jsx-pretty
Plugin 'HerringtonDarkholme/yats.vim'  " recommended by vim-jsx-pretty
Plugin 'MaxMEllon/vim-jsx-pretty'

Sorry my comment is a little bit of a non-sequitur, but I have been having weird issues with tsx highlighting lately. Will try to summarize:
On Ubuntu 18.04:
neovim 0.4.4 stable: These plugins don't work. I get massive swathes of missing highlighting and incorrect highlighting. Without any of these plugins, I get absolutely zero syntax highlighting in tsx files.
neovim v0.5.0-828-g0a95549d6: No plugins needed for decent tsx highlighting
vim 8.2 patches 1-2071: No plugins needed for decent tsx highlighting
Conclusion: I am not using any jsx/tsx highlighting vim plugins anymore, and hoping that neovim nightly improves in stability. I tend to bounce back and forth between vim and neovim in the course of testing various capabilities.


Enable pip-ification

Source tree should be re-arranged and get a setup.py (or whatever) to allow pip install.

At this time, this doesn't make sense and there would be a lot more required.. such as figuring out what the actual interfaces are required for DJ software handlers. Closing this for now, maybe forever.


Add namespace in service name in istio telemetry

source.workload.namespace should be used to assemble the service name, by following rule source.workload.namespace.source.workload.name.
The ref doc is https://istio.io/docs/reference/config/policy-and-telemetry/attribute-vocabulary/
@hanahmily Only need to change Istio IstioTelemetryGRPCHandler, also Istio operator_cfg.yml needs to be changed.

The naming rule should be name.namespace following Istio's uid rule, and k8s also used a similar rule to name workloads.


Develop fix folium icons

This PR fixes issue #900.
Current issues

Not all icons display on html map viewer.

Code changes

[x] Replaced icons with icons from compatible versions with Folium. See: https://fontawesome.com/v4.7.0/icons/ and https://bootstrapdocs.com/v3.2.0/docs/components/ for compatible icon options.
[x] Some formatting clean-up for uniform quotation marks in changed file.

@dchassin made a couple small changes since your previous review - swapped comments out to point to correct resources for icon lookups


Create a terminal error if AWS AMI terms were not accepted yet

In order to make it more visible to end-users that a machine can not be created because the AMI terms were not accepted, we should filter for that error and create a terminal error if it happens.
Acceptance criteria:

A terminal error gets created after machine creation failed due to non-accepted AMI terms
The terminal error contains a link to the page where the terms can be accepted

Estimated at three story points


Add ROS network setup instructions

Motivation and Context
Update robot installation guide to add notes on how to set up ROS network.
Changelog

just adds to install.md

How Has This Been Tested

Types of changes

[ ] Docs change / refactoring / dependency upgrade
[ ] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to change)

Looks good except that spelling.


docs: dead links in dropdown

Type: docs
Platform: all
Go to
http://ionicframework.com/docs/
In dropdown header from entering "scope" into the search bar
Click on
Intro app tutorial link:
http://ionicframework.com/tutorials/intro-tutorial/
or
Fading header effect with ionic:
http://ionicframework.com/tutorials/fade-status-bar/
but returned a page:
Cannot GET /tutorials/intro-tutorial/

These pages were removed as they were part of an old layout.
Will fix the search and remove the reference.


V1.3.1 upgrade and Akka.Monitoring v0.7.0 release

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


chore(CPlusPlus): add vector

PR Checklist:

[x] My submission is formatted according to the guidelines in the contributing guide
[x] My addition is on refer on the language README.md file
[x] My addition does not have a spelling problem
[x] My submission has a proper and user-friendly description of the algorithm
[x] My submission has the time complexity of the algorithm
[x] My submission has sample input-output of the program (NOT FOR PYTHON)

What kind of change does this PR introduce? (check at least one)

[ ] Bugfix
[x] New algorithm
[ ] Optimization in previous algorithms
[ ] Code style update
[ ] Refactor
[ ] Documentation
[ ] Other, please describe:

Briefly describe the changes in this PR
Add Implementation of dynamic array (vector) with provided different function.

Other information:

NO, thanks.

update the readme.md


Add BSD-4-Clause license to allowed licenses for private undistributed

Hi there, I recently got blocked from adding this dependency due to incompatible license. I'm opening this PR on the off chance that nobody has tried to use this license before, however if it is already rejected pls let me know :) (is there a place I can look to see which licenses have already been accessed and denied?)
Not a lawyer, but theres a few clauses who's risk seems project dependent. (3 and 4). Is there a way to allow licenses on a per-project basis?
Thanks!

@fpiche License is approved, I can confirm that it was never used/ requested before. On a general note, you are right that for many licenses the risk is project-dependent. However it is not practical (nor feasible in Github I think - @JPLachance to confirm) to approve them on a case by case basis, hence why we approve them according to three main project categories (undistributed, distributed or public). You can find the up-to-date list of approved license per category here: https://github.com/coveo/dependency-allowed-licenses. However we do not keep track of licenses which have been denied, something to consider in the future! Do not hesitate to reach out on Slack if you have more questions!


Connect with Cosmos

Kindly Live chat cosmos Agent on live chat support https://cosmossnetwork.com if you have issue or concerns


messagingServiceSid doesnt work

Hi,
Beautiful work ! I can send SMS, it's great !! Thanks.
Although, use of messagingServiceSid doesn't seem to work. I received a SMS from the phone number (short) but not from the messagingService I configured in my Twilio console :-/
Normally, twilioNumber is not mandatory if we use messagingServiceSid :
curl 'https://api.twilio.com/2010-04-01/Accounts/[MyAccountSID]/Messages.json' -X POST
--data-urlencode 'To=+33xxxxxxx'
--data-urlencode 'MessagingServiceSid=[MyMessagingServiceId]'
--data-urlencode 'Body=test'
-u [MyAccountSID]:[AuthToken]
Thanks for your help
JF

Thanks, @rierajf will look into the issue.

Fixed in #41

The parameter messagingServiceSid is not know anymore now. This parameter replaces the twilioNumber.
The problem is not solved at all.
2024-06-17_21h25_46
Thanks for your help

Hi @rierajf, there has been an update to the service. Please refer to the README.

Create a new TwilioMessagingService:

final TwilioMessagingService twilioMessagingService = TwilioMessagingService(
    accountSid: '', // replace with Account SID
    authToken: '', // replace with Auth Token
    messagingServiceSid: '' // replace with messaging service sid from twilio console
);


The VM's filter always returns the Pools entities regarldess to the query result

The Pool entities are always displayed on VMs dashboard, regardless to the filter type/value query used. It seems that the Pool entity is not included on filter calculations.
For example:

This is reproduced on ovirt-web-ui 1version 1.6.1-1

Started looking into this and after I apply some filtering, I would expect ALL of the Pool entities to be displayed on VMs dashboard if they are not included in filter calculations. But that's not true, at least for me.
For me only some of them are displayed. And the number of them (when filtering) varies - depending on filter type/value query used, for example:

originally (no filtering) I can see 5 Pool entities
with filtering by Name I can see 2 of them - as on the screenshot above
with filtering by Status: Running I can see 4 Pool entities

So the problem may be more complicated, I will continue investigating.

@sgratch Hi Sharon, could you, please, specify if the scenario is related to admin/non admin user and maybe also some details about user roles? I think this could help us to figure out what should be displayed. Thanks :)

@sgratch Hi Sharon, could you, please, specify if the scenario is related to admin/non admin user and maybe also some details about user roles? I think this could help us to figure out what should be displayed. Thanks :)

@hstastna it was reproduced to me with admin user, didn't verify that with non-admin.

@sgratch, what I've found also with @sjd78 is that for admin user, Pool entities are always displayed, no matter filtering or number of available VMs from a Pool. It's obviously implemented like this in the code. It would be good to check the behavior also for non-admin user: we expect only those Pool entities with at least 1 available VMs to be displayed so the user could take a VM from that Pool.
Another thing I've found is that Pool entities are included in filter calculations, for admin user:

But if we filter VMs and Pools the way that the query does not match with some Pool entity - such a Pool entity is just displayed (for admin, together with the result of filtering) and not included in the number of Results displayed in the toolbar, so it just seems that Pool entities are excluded in filter calculations:

Another proof of this:

In the picture above, I was filtering by name "pool2", the result was one Pool entity and one VM "pool2-1" which belongs to that pool (yellow). And the remaining Pool entity "pool" (green) is just displayed extra, as I logged in as an admin and as for admins, Pool entities are always displayed.

To sum up, I think that the cards are displayed properly, filtering by itself seems to work ok (not 100% sure about this because when I was searching for a name "vm", some of the VMs weren't displayed), but the problem here regarding Pools and filtering is slightly different: confusing number of Results (toolbar) for admin user when filtering. Check the first picture: the number of Results corresponds to the number of cards being displayed (5 Results and 5 cards incl. Pool entities). But in the second and third pictures not. The problem is "always displaying Pool cards" ability in the context of number of Results when filtering.

@hstastna @sjd78 @lwrigh It seems that when working on pools re-design feature, we ignored the VMs filtering part (check https://github.com/oVirt/ovirt-web-ui/issues/195#issuecomment-449481201) and when working on VMs filter, we ignored the pools re-design part (check https://github.com/oVirt/ovirt-web-ui/issues/18#issuecomment-449479982), so we need to decide now how to combine.
IMHO, we need to treat VMs, Pools and Pool VMs entities the same way for all user types and for all Pools states (w/ or w/o available VMs), i.e. the filter calculation should include all entities in dashboard the same way and display only the ones that fit the filtering regardless to user/entity type and status.
Note that the filter label doesn't indicate which entities it applies to and i guess that's the right way and easiest one for the user.
What do you think?

@sgratch I agree with you. Treating all the entities the same way sounds good to me. And I think it fits to my suggestion written earlier - to solve this problem by just removing the ability to always display Pool entities (when being logged as an admin, of course), but only when filtering. Because I think admins may want to see all the Pool entities, but probably they don't need to see them (Pool entities) also when filtering.

@lwrigh WDYT?

The VM list should only show entities, either VM or pool, that contain the current search term. If the pool name does not contain the search term it should not appear in the filtered list. It feels misleading if it appears and it does not contain the search term. The filter number should only show the VMs and pools that contain the search term.

After some time and some changes, this issue is reproducible again so I'm reopening it.
Related comment: https://github.com/oVirt/ovirt-web-ui/pull/1241#issuecomment-663162285


[Issue] cannot update to<EMAIL_ADDRESS>from 71.0b9

I guess this still depends on firefox-developer "unorthodox" version number;
having firefox-developer version 71.0b9 installed, I can't scoop update firefox-developer to get version 71.0b10, I get the message:
firefox-developer: 71.0b9 (latest version)
but the manifest shows that version 71.0b10 is available

scoop update firefox-developer -f
Duplicate of lukesampson/scoop#2720


Charm stuck in WaitingStatus because of error initializing configuration '/envoy/envoy.yaml'

Bug Description
It looks like the configuration in /envoy/envoy.yaml' is avoiding the service to start correctly, leaving the unit in WaitingStatus w/o a clear resolution path.
From the logs I can see Unable to parse JSON as proto (INVALID_ARGUMENT:(static_resources.listeners[0].filter_chains[0].filters[0].typed_config): invalid value Invalid type URL, unknown type: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager for type Any, which suggests that this value is not recognized.
To Reproduce

Deploy juju envoy --channel latest/edge --trust
Deploy juju mlmd --channel latest/edge --trust
Relate juju relate envoy mlmd
Observe

Environment

microk8s 1.29-strict/stable
juju 3.4/stable (3.4.3)

Relevant Log Output
# ---- juju debug-log
unit-envoy-0: 21:22:06 ERROR unit.envoy/0.juju-log grpc:0: execute_components caught unhandled exception when executing configure_charm for envoy-component
Traceback (most recent call last):
  File "/var/lib/juju/agents/unit-envoy-0/charm/venv/charmed_kubeflow_chisme/components/charm_reconciler.py", line 92, in reconcile
    component_item.component.configure_charm(event)
  File "/var/lib/juju/agents/unit-envoy-0/charm/venv/charmed_kubeflow_chisme/components/component.py", line 50, in configure_charm
    self._configure_unit(event)
  File "/var/lib/juju/agents/unit-envoy-0/charm/venv/charmed_kubeflow_chisme/components/pebble_component.py", line 273, in _configure_unit
    self._update_layer()
  File "/var/lib/juju/agents/unit-envoy-0/charm/venv/charmed_kubeflow_chisme/components/pebble_component.py", line 284, in _update_layer
    container.replan()
  File "/var/lib/juju/agents/unit-envoy-0/charm/venv/ops/model.py", line 2211, in replan
    self._pebble.replan_services()
  File "/var/lib/juju/agents/unit-envoy-0/charm/venv/ops/pebble.py", line 1993, in replan_services
    return self._services_action('replan', [], timeout, delay)
  File "/var/lib/juju/agents/unit-envoy-0/charm/venv/ops/pebble.py", line 2090, in _services_action
    raise ChangeError(change.err, change)
ops.pebble.ChangeError: cannot perform the following tasks:
- Start service "envoy" (cannot start service: exited quickly with code 1)
----- Logs from task 0 -----
2024-06-27T21:22:06Z INFO Most recent service output:
    [2024-06-27 21:22:06.011][14][info][main] [source/server/server.cc:249] initializing epoch 0 (hot restart version=11.104)
    [2024-06-27 21:22:06.011][14][info][main] [source/server/server.cc:251] statically linked extensions:
    [2024-06-27 21:22:06.011][14][info][main] [source/server/server.cc:253]   access_loggers: envoy.file_access_log,envoy.http_grpc_access_log,envoy.tcp_grpc_access_log
    [2024-06-27 21:22:06.011][14][info][main] [source/server/server.cc:256]   filters.http: envoy.buffer,envoy.cors,envoy.csrf,envoy.ext_authz,envoy.fault,envoy.filters.http.adaptive_concurrency,envoy.filters.http.dynamic_forward_proxy,envoy.filters.http.grpc_http1_reverse_bridge,envoy.filters.http.grpc_stats,envoy.filters.http.header_to_metadata,envoy.filters.http.jwt_authn,envoy.filters.http.original_src,envoy.filters.http.rbac,envoy.filters.http.tap,envoy.grpc_http1_bridge,envoy.grpc_json_transcoder,envoy.grpc_web,envoy.gzip,envoy.health_check,envoy.http_dynamo_filter,envoy.ip_tagging,envoy.lua,envoy.rate_limit,envoy.router,envoy.squash
    [2024-06-27 21:22:06.011][14][info][main] [source/server/server.cc:259]   filters.listener: envoy.listener.http_inspector,envoy.listener.original_dst,envoy.listener.original_src,envoy.listener.proxy_protocol,envoy.listener.tls_inspector
    [2024-06-27 21:22:06.011][14][info][main] [source/server/server.cc:262]   filters.network: envoy.client_ssl_auth,envoy.echo,envoy.ext_authz,envoy.filters.network.dubbo_proxy,envoy.filters.network.mysql_proxy,envoy.filters.network.rbac,envoy.filters.network.sni_cluster,envoy.filters.network.thrift_proxy,envoy.filters.network.zookeeper_proxy,envoy.http_connection_manager,envoy.mongo_proxy,envoy.ratelimit,envoy.redis_proxy,envoy.tcp_proxy
    [2024-06-27 21:22:06.011][14][info][main] [source/server/server.cc:264]   stat_sinks: envoy.dog_statsd,envoy.metrics_service,envoy.stat_sinks.hystrix,envoy.statsd
    [2024-06-27 21:22:06.011][14][info][main] [source/server/server.cc:266]   tracers: envoy.dynamic.ot,envoy.lightstep,envoy.tracers.datadog,envoy.tracers.opencensus,envoy.tracers.xray,envoy.zipkin
    [2024-06-27 21:22:06.011][14][info][main] [source/server/server.cc:269]   transport_sockets.downstream: envoy.transport_sockets.alts,envoy.transport_sockets.raw_buffer,envoy.transport_sockets.tap,envoy.transport_sockets.tls,raw_buffer,tls
    [2024-06-27 21:22:06.011][14][info][main] [source/server/server.cc:272]   transport_sockets.upstream: envoy.transport_sockets.alts,envoy.transport_sockets.raw_buffer,envoy.transport_sockets.tap,envoy.transport_sockets.tls,raw_buffer,tls
    [2024-06-27 21:22:06.011][14][info][main] [source/server/server.cc:278] buffer implementation: new
    [2024-06-27 21:22:06.014][14][critical][main] [source/server/server.cc:95] error initializing configuration '/envoy/envoy.yaml': Unable to parse JSON as proto (INVALID_ARGUMENT:(static_resources.listeners[0].filter_chains[0].filters[0].typed_config): invalid value Invalid type URL, unknown type: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager for type Any): {"static_resources":{"clusters":[{"load_assignment":{"endpoints":[{"lb_endpoints":[{"endpoint":{"address":{"socket_address":{"port_value":8080,"address":"metadata-grpc-service"}}}}]}],"cluster_name":"metadata-grpc"},"lb_policy":"round_robin","type":"logical_dns","typed_extension_protocol_options":{"envoy.extensions.upstreams.http.v3.HttpProtocolOptions":{"explicit_http_config":{"http2_protocol_options":{}},"@type":"type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions"}},"name":"metadata-cluster","connect_timeout":"30.0s"}],"listeners":[{"filter_chains":[{"filters":[{"typed_config":{"http_filters":[{"typed_config":{"@type":"type.googleapis.com/envoy.extensions.filters.http.grpc_web.v3.GrpcWeb"},"name":"envoy.filters.http.grpc_web"},{"typed_config":{"@type":"type.googleapis.com/envoy.extensions.filters.http.cors.v3.Cors"},"name":"envoy.filters.http.cors"},{"typed_config":{"@type":"type.googleapis.com/envoy.extensions.filters.http.router.v3.Router"},"name":"envoy.filters.http.router"}],"route_config":{"virtual_hosts":[{"routes":[{"typed_per_filter_config":{"envoy.filter.http.cors":{"max_age":"1728000","allow_headers":"keep-alive,user-agent,cache-control,content-type,content-transfer-encoding,custom-header-1,x-accept-content-transfer-encoding,x-accept-response-streaming,x-user-agent,x-grpc-web,grpc-timeout","allow_methods":"GET, PUT, DELETE, POST, OPTIONS","@type":"type.googleapis.com/envoy.extensions.filters.http.cors.v3.CorsPolicy","expose_headers":"custom-header-1,grpc-status,grpc-message","allow_origin_string_match":[{"safe_regex":{"regex":".*"}}]}},"match":{"prefix":"/"},"route":{"max_stream_duration":{"grpc_timeout_header_max":"0s"},"cluster":"metadata-cluster"}}],"name":"local_service","domains":["*"]}],"name":"local_route"},"stat_prefix":"ingress_http","@type":"type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager","codec_type":"auto"},"name":"envoy.filters.network.http_connection_manager"}]}],"name":"listener_0","address":{"socket_address":{"port_value":9090,"address":"<IP_ADDRESS>"}}}]},"admin":{"address":{"socket_address":{"port_value":9901,"address":"<IP_ADDRESS>"}},"access_log":{"typed_config":{"path":"/tmp/admin_access.log","@type":"type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog"},"name":"admin_access"}}}
    [2024-06-27 21:22:06.014][14][info][main] [source/server/server.cc:594] exiting
    Unable to parse JSON as proto (INVALID_ARGUMENT:(static_resources.listeners[0].filter_chains[0].filters[0].typed_config): invalid value Invalid type URL, unknown type: envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager for type Any): {"static_resources":{"clusters":[{"load_assignment":{"endpoints":[{"lb_endpoints":[{"endpoint":{"address":{"socket_address":{"port_value":8080,"address":"metadata-grpc-service"}}}}]}],"cluster_name":"metadata-grpc"},"lb_policy":"round_robin","type":"logical_dns","typed_extension_protocol_options":{"envoy.extensions.upstreams.http.v3.HttpProtocolOptions":{"explicit_http_config":{"http2_protocol_options":{}},"@type":"type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions"}},"name":"metadata-cluster","connect_timeout":"30.0s"}],"listeners":[{"filter_chains":[{"filters":[{"typed_config":{"http_filters":[{"typed_config":{"@type":"type.googleapis.com/envoy.extensions.filters.http.grpc_web.v3.GrpcWeb"},"name":"envoy.filters.http.grpc_web"},{"typed_config":{"@type":"type.googleapis.com/envoy.extensions.filters.http.cors.v3.Cors"},"name":"envoy.filters.http.cors"},{"typed_config":{"@type":"type.googleapis.com/envoy.extensions.filters.http.router.v3.Router"},"name":"envoy.filters.http.router"}],"route_config":{"virtual_hosts":[{"routes":[{"typed_per_filter_config":{"envoy.filter.http.cors":{"max_age":"1728000","allow_headers":"keep-alive,user-agent,cache-control,content-type,content-transfer-encoding,custom-header-1,x-accept-content-transfer-encoding,x-accept-response-streaming,x-user-agent,x-grpc-web,grpc-timeout","allow_methods":"GET, PUT, DELETE, POST, OPTIONS","@type":"type.googleapis.com/envoy.extensions.filters.http.cors.v3.CorsPolicy","expose_headers":"custom-header-1,grpc-status,grpc-message","allow_origin_string_match":[{"safe_regex":{"regex":".*"}}]}},"match":{"prefix":"/"},"route":{"max_stream_duration":{"grpc_timeout_header_max":"0s"},"cluster":"metadata-cluster"}}],"name":"local_service","domains":["*"]}],"name":"local_route"},"stat_prefix":"ingress_http","@type":"type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager","codec_type":"auto"},"name":"envoy.filters.network.http_connection_manager"}]}],"name":"listener_0","address":{"socket_address":{"port_value":9090,"address":"<IP_ADDRESS>"}}}]},"admin":{"address":{"socket_address":{"port_value":9901,"address":"<IP_ADDRESS>"}},"access_log":{"typed_config":{"path":"/tmp/admin_access.log","@type":"type.googleapis.com/envoy.extensions.access_loggers.file.v3.FileAccessLog"},"name":"admin_access"}}}
2024-06-27T21:22:06Z ERROR cannot start service: exited quickly with code 1
-----

# ---- juju status

Model     Controller  Cloud/Region        Version  SLA          Timestamp
kubeflow  uk8s-343    microk8s/localhost  3.4.3    unsupported  21:30:29Z

App    Version  Status   Scale  Charm  Channel      Rev  Address         Exposed  Message
envoy           waiting      1  envoy  latest/edge  230  <IP_ADDRESS>  no       installing agent
mlmd            active       1  mlmd   latest/edge  197  <IP_ADDRESS>   no

Unit      Workload  Agent  Address      Ports  Message
envoy/0*  waiting   idle   <IP_ADDRESS>         [envoy-component] Waiting for Pebble services (envoy).  If this persists, it could be a blocking configuration error.
mlmd/0*   active    idle   <IP_ADDRESS>

Additional Context
Strangely enough, this is not being captured by envoy's CI - I have ran two attempts on HEAD and they both succeed. This behaviour was caught by the kfp-operators CI here. I was also able to reproduce it locally.

envoy 2.0/stable
In a model with envoy 2.0/stable this issue is not present:
Model     Controller  Cloud/Region        Version  SLA          Timestamp
kubeflow  uk8s-343    microk8s/localhost  3.4.3    unsupported  21:51:30Z

App                   Version                Status  Scale  Charm          Channel       Rev  Address         Exposed  Message
envoy                 res:oci-image@cc06b3e  active      1  envoy          2.0/stable    194  <IP_ADDRESS>  no
istio-ingressgateway                         active      1  istio-gateway  1.17/stable  1000  <IP_ADDRESS>  no
istio-pilot                                  active      1  istio-pilot    1.17/stable  1011  <IP_ADDRESS>  no
mlmd                  res:oci-image@44abc5d  active      1  mlmd           1.14/stable   127  <IP_ADDRESS>  no

Unit                     Workload  Agent  Address      Ports          Message
envoy/1*                 active    idle   <IP_ADDRESS>  9090,9901/TCP
istio-ingressgateway/0*  active    idle   <IP_ADDRESS>
istio-pilot/0*           active    idle   <IP_ADDRESS>
mlmd/1*                  active    idle   <IP_ADDRESS>  8080/TCP

Integration provider     Requirer                          Interface          Type     Message
istio-pilot:ingress      envoy:ingress                     ingress            regular
istio-pilot:istio-pilot  istio-ingressgateway:istio-pilot  k8s-service        regular
istio-pilot:peers        istio-pilot:peers                 istio_pilot_peers  peer
mlmd:grpc                envoy:grpc                        grpc               regular

I noticed that in this version of the charm, we block the unit if the relation with istio-pilot is missing.

That's weird because when when the envoy.yaml was updated, it had been tested by myself and the PR's reviewer https://github.com/canonical/envoy-operator/pull/102#pullrequestreview-2107671499.

Ok so something's wrong with the charm's image, I tried the following and that made the charm go active
jref envoy --resource oci-image=gcr.io/ml-pipeline/metadata-envoy:2.2.0

which is the charm's default image.
Charm publishing
So it looks like charm's publishing has been messed up.
Publishing from track/2.0
You can see that the charm was published using the oci-image 104
https://github.com/canonical/envoy-operator/actions/runs/9662384372/job/26652904155#step:5:180
Publishing from main
You can see that the charm was published again using the oci-image 104
https://github.com/canonical/envoy-operator/actions/runs/9701404321/job/26782877651#step:5:184
It is probably related to https://github.com/canonical/charming-actions/issues/139 as well (same with what happened in Kubeflow-dashboard charm and rock)

Charm resource publishing history
The charm has been published with the following resources:

102 first time here (main, 10th June)
103 first time here (main, 19th June)
103 again here (main, 21st June)
104 first time here (track/2.0, 25th June)
104 again here (main, 27th June)

Not sure also what 103 is, since the charm image in main didnt' change after 10th June

After transfering this charm to kubeflow-charmers, we re-released envoy with the resource it had been released with when we updated the manifests executing:
╰─$ charmcraft release envoy --revision=231 --channel latest/edge --resource=oci-image:102

We 'd be looking in the root cause of this as part of https://github.com/canonical/bundle-kubeflow/issues/962.


Query returns result but all fields are null

Hello
I have managed to setup HotChocolate with a query and a mutation. The mutation works, the query however does not.
The query does return a result, but all the fields are null. I can tell that data is returned through the different "modules" and it seems to somehow go awry in the QueryType.

The repository is available here: https://github.com/Healios/IdentityAPI
It is a demo project where I'm getting to know the different technologies and figuring out how to potentially structure the project.
I've now spent several hours, looking through documentation and examples, trying to figure out what I'm doing wrong and I just can't crack it.

OK, so there are actually multiple errors in there.
Best thing you get on out slack channel and we talk this through with you ....
https://join.slack.com/t/hotchocolategraphql/shared_invite/enQtNTA4NjA0ODYwOTQ0LTViMzA2MTM4OWYwYjIxYzViYmM0YmZhYjdiNzBjOTg2ZmU1YmMwNDZiYjUyZWZlMzNiMTk1OWUxNWZhMzQwY2Q

The main issue with the project was that the type objects where also used as entity objects. But the actual entity that came back from the repository was again a different object. So there was kind of a muddle up.
original
internal class UserType : ObjectType, IUser
    {
        public string Id { get; set; }
        public string Email { get; set; }
        public string NormalizedEmail { get; set; }
        public bool EmailConfirmed { get; set; }
        public string FullName { get; set; }
        public string UserName { get; set; }
        public string NormalizedUserName { get; set; }
        public DateTime Created { get; set; }
        public DateTime? LastModified { get; set; }
        public string PhoneNumber { get; set; }
        public bool PhoneNumberConfirmed { get; set; }
        public bool TwoFactorEnabled { get; set; }
        public int AccessFailedCount { get; set; }
        public bool LockoutEnabled { get; set; }
        public DateTimeOffset? LockoutEnd { get; set; }
        public string ConcurrencyStamp { get; set; }
        public string SecurityStamp { get; set; }
        public string PasswordHash { get; set; }
        protected override void Configure(IObjectTypeDescriptor descriptor)
        {
            descriptor.Field<UserType>(u => u.Id).Description("The id of the user.");
            descriptor.Field<UserType>(u => u.Email).Description("The E-mail address of the user.");
            descriptor.Field<UserType>(u => u.NormalizedEmail).Description("The normalized E-mail address of the user.");
            descriptor.Field<UserType>(u => u.EmailConfirmed).Description("Has the E-mail address of the user been confirmed.");
            descriptor.Field<UserType>(u => u.FullName).Description("The full name of the user.");
            descriptor.Field<UserType>(u => u.UserName).Description("The username of the user.").Ignore();
            descriptor.Field<UserType>(u => u.NormalizedUserName).Description("The normalized username of the user.").Ignore();
            descriptor.Field<UserType>(u => u.Created).Description("The date and time, in UTC, of when the user was created.");
            descriptor.Field<UserType>(u => u.LastModified).Description("The date and time, in UTC, of when the user was last modified.");
            descriptor.Field<UserType>(u => u.PhoneNumber).Description("The phone number of the user.");
            descriptor.Field<UserType>(u => u.PhoneNumberConfirmed).Description("Has the phone number of the user been confirmed.");
            descriptor.Field<UserType>(u => u.TwoFactorEnabled).Description("Describes wether two factor authentication is enabled for the user.");
            descriptor.Field<UserType>(u => u.AccessFailedCount).Description("The amount of failed sign in attempts of the user.");
            descriptor.Field<UserType>(u => u.LockoutEnabled).Description("Describes wether the user can be locked out of the system.");
            descriptor.Field<UserType>(u => u.ConcurrencyStamp).Description("A random value that must change whenever a user is persisted to the store.").Ignore();
            descriptor.Field<UserType>(u => u.SecurityStamp).Description("A random value that must change whenever a users credentials change (password changed, login removed).").Ignore();
            descriptor.Field<UserType>(u => u.PasswordHash).Description("The salted and hashed representation of the users password.").Ignore();
            base.Configure(descriptor);
        }
    }

fixed:
internal class UserType : ObjectType<IUser>
    {
        protected override void Configure(IObjectTypeDescriptor<IUser> descriptor)
        {
            descriptor.Field(u => u.Id).Description("The id of the user.");
            descriptor.Field(u => u.Email).Description("The E-mail address of the user.");
            descriptor.Field(u => u.NormalizedEmail).Description("The normalized E-mail address of the user.");
            descriptor.Field(u => u.EmailConfirmed).Description("Has the E-mail address of the user been confirmed.");
            descriptor.Field(u => u.FullName).Description("The full name of the user.");
            descriptor.Field(u => u.UserName).Description("The username of the user.").Ignore();
            descriptor.Field(u => u.NormalizedUserName).Description("The normalized username of the user.").Ignore();
            descriptor.Field(u => u.Created).Description("The date and time, in UTC, of when the user was created.");
            descriptor.Field(u => u.LastModified).Description("The date and time, in UTC, of when the user was last modified.");
            descriptor.Field(u => u.PhoneNumber).Description("The phone number of the user.");
            descriptor.Field(u => u.PhoneNumberConfirmed).Description("Has the phone number of the user been confirmed.");
            descriptor.Field(u => u.TwoFactorEnabled).Description("Describes wether two factor authentication is enabled for the user.");
            descriptor.Field(u => u.AccessFailedCount).Description("The amount of failed sign in attempts of the user.");
            descriptor.Field(u => u.LockoutEnabled).Description("Describes wether the user can be locked out of the system.");
            descriptor.Field(u => u.ConcurrencyStamp).Description("A random value that must change whenever a user is persisted to the store.").Ignore();
            descriptor.Field(u => u.SecurityStamp).Description("A random value that must change whenever a users credentials change (password changed, login removed).").Ignore();
            descriptor.Field(u => u.PasswordHash).Description("The salted and hashed representation of the users password.").Ignore();
            base.Configure(descriptor);
        }
    }


Added await for router and wrapped initial php check with set timeout.

This PR will add missing await keyword and added set timeout for initial PHP path validate after app started.

Why timeout?

Dev version is picking PHP path after the app initialized and started, but in production build it required some timeout to initialize the PHP path.

I don't think we need a timeout here.
Instead we can just switch these two lines together
https://github.com/tweakphp/tweakphp/blob/main/src/renderer/App.vue#L61-L62

I will revert the changes and I will update PR only to add await keyword

@ahaneef29 are you also swapping those 2 lines I mentioned?

No, I updated this PR for to fix only await keyword.


feat: Dev Container for consistent dev setup

Added Dev Container configurations to streamline development and onboarding. This setup ensures a consistent, isolated environment with all necessary tools and dependencies for building and running cndp.
Todo

[x] Add documentation

Thank you Maryam, very good work.


Disable firewall in vmware

Looks like the image on vmware still has the firewalld service
enabled which prevents the cluster from being deployed.
This patch makes it so the firewalld is disabled
Why is this PR needed?
Does it fix an issue? addresses a business case?
add a description and link to the issue if one exists.
Fixes #
Reminder: Add the "fixes bsc#XXXX" to the title of the commit so that it will
appear in the changelog.
What does this PR do?
please include a brief "management" technical overview (details are in the code)
Anything else a reviewer needs to know?
Special test cases, manual steps, links to resources or anything else that could be helpful to the reviewer.
Info for QA
This is info for QA so that they can validate this. This is mandatory if this PR fixes a bug.
If this is a new feature, a good description in "What does this PR do" may be enough.
Related info
Info that can be relevant for QA:

link to other PRs that should be merged together
link to packages that should be released together
upstream issues

Status BEFORE applying the patch
How can we reproduce the issue? How can we see this issue? Please provide the steps and the prove
this issue is not fixed.
Status AFTER applying the patch
How can we validate this issue is fixed? Please provide the steps and the prove this issue is fixed.
Docs
If docs need to be updated, please add a link to a PR to https://github.com/SUSE/doc-caasp.
At the time of creating the issue, this PR can be work in progress (set its title to [WIP]),
but the documentation needs to be finalized before the PR can be merged.
Merge restrictions
(Please do not edit this)
We are in v4-maintenance phase, so we will restrict what can be merged to prevent unexpected surprises:
What can be merged (merge criteria):
    2 approvals:
        1 developer: code is fine
        1 QA: QA is fine
    there is a PR for updating documentation (or a statement that this is not needed)

This was done in purpose, please have a look at: #927, skuba is taking care of this, so we untangle how infra is deployed from the skuba deployment.

How is that posible if you cant reach the LB from the deployer node because the firewall is up? We cant even bootstrap a node properly (hint, on kubelet start it tries to reach the apiserver but it cant becuase the firewall on the lb is blocking the calls)
The only reason this seems to work on openstack its because the openstack images do not come with firewalld anymore. On vmware it never worked (basically because we are not bootstrapping a cluster in that job, its a fake job that does nothing)
So either skuba its not doing it properly or there is an extra issue here. Let me have a deeper look at this

Normally we have this disabled by default in the images, which image do you use ?

@lcavajani default one used by CI, SLES15-SP1-GM-up190905-guestinfo

Hm, that's certainly interesting. We are using SSH to connect to the new machine, and at the first stages we are disabling firewalld using skuba, so as long as firewalld allows connections on the 22 port (that I believe it should), there should not be any problem... am I missing something?

Hm, that's certainly interesting. We are using SSH to connect to the new machine, and at the first stages we are disabling firewalld using skuba, so as long as firewalld allows connections on the 22 port (that I believe it should), there should not be any problem... am I missing something?

We are both missing something I think.
Skuba runs on the master.
Load balancer is a different machine.
Ergo its impossible for skuba to disable the firewalld in the LB if it runs against the master.
:laughing: :laughing:

Maybe we can perform this at the lb.tpl, since it's specific to the LB then.

so it means we also need to re-enable this for libvirt as well

Yep!

Maybe we can perform this at the lb.tpl, since it's specific to the LB then.

Agreed!


Separate into a new project the tangram-utils branch

To use this library as a standalone one, we made a set of tools to use it without Cartodb.js or anything else. This set of tools are in other branch #tangram-utils, but we need split them into other project.

Done! The project is this


wrong value assigned to empty tags

Here https://github.com/Leonidas-from-XIV/node-xml2js/blob/master/lib/xml2js.js#L386
obj = _this.options.emptyTag !== '' ? _this.options.emptyTag : emptyStr;
in case we don't pass emptyTag option, or we pass an empty string, emptyStr value is assigned to empty tags.
But as we can see here https://github.com/Leonidas-from-XIV/node-xml2js/blob/master/lib/xml2js.js#L371
if (obj[charkey].match(/^\s*$/) && !cdata) {
    emptyStr = obj[charkey];
    delete obj[charkey];
}

in case of newline / space characters emptyStr is set to their initial, non empty string value, no matter if we have trim option passed or no.

Hi, i don't know if my issue is a duplicate of yours, but I'm looking for a solution to:
I have xml with empty tags like so:

When using xml2js parser, the JSON object I get is:
let json = {tag1: [ '\015\n                ' ]}
when I try to do Object.keys(json.tag1).length
I get an error when I should be getting 0.

@ex37 Did you do any workaround for this issue? because I am also facing the same issue while parsing the XML to JSON.


fix: properly default shouldCreateUser flag

What kind of change does this PR introduce?
Bug fix
What is the current behavior?
The shouldCreateUser flag was added in #199, but passing { shouldCreateUser: false } into the options of signIn still creates the user because this ternary will always return true:
const shouldCreateUser = options.shouldCreateUser ? options.shouldCreateUser : true

What is the new behavior?
With this change the shouldCreateUser can be set to false and the user will not be created, but it is still defaulted to true if no value (undefined or null) is passed.
Additional context
Related to: https://github.com/supabase/supabase/issues/1176

Hey @emroussel, thanks for spotting this and making the fix!


Can't go run *.jsonl

My go version is 1.20.6 on WSL2.
And  run command as follows:
user@hostname:~/workspace/ocp-diag-core/validators/spec_validator$ go run . ./samples/pcie_test.jsonl
2023/07/27 10:39:21 The <schema> flag is mandatory

How do I fix this issue?

well, the cli is telling you what the problem is. And the readme is wrong, which should be fixed (arguably this tool is just used internally right now)
Run with --help
> go run . ./samples/pcie_test.jsonl
2023/08/14 19:03:20 The <schema> flag is mandatory
exit status 1

Then run it correctly with the schema flag
> go run . -schema ../../json_spec/output/root.json ./samples/pcie_test.jsonl
2023/08/14 19:04:06 Registered ext schema https://github.com/opencomputeproject/ocp-diag-core/diagnosis -> ../../json_spec/output/diagnosis.json
2023/08/14 19:04:06 Registered ext schema https://github.com/opencomputeproject/ocp-diag-core/dutInfo -> ../../json_spec/output/dut_info.json
2023/08/14 19:04:06 Registered ext schema https://github.com/opencomputeproject/ocp-diag-core/error -> ../../json_spec/output/error.json
2023/08/14 19:04:06 Registered ext schema https://github.com/opencomputeproject/ocp-diag-core/file -> ../../json_spec/output/file.json
2023/08/14 19:04:06 Registered ext schema https://github.com/opencomputeproject/ocp-diag-core/log -> ../../json_spec/output/log.json
2023/08/14 19:04:06 Registered ext schema https://github.com/opencomputeproject/ocp-diag-core/measurement -> ../../json_spec/output/measurement.json
2023/08/14 19:04:06 Registered ext schema https://github.com/opencomputeproject/ocp-diag-core/measurementSeriesElement -> ../../json_spec/output/measurement_series_element.json
2023/08/14 19:04:06 Registered ext schema https://github.com/opencomputeproject/ocp-diag-core/measurementSeriesEnd -> ../../json_spec/output/measurement_series_end.json
2023/08/14 19:04:06 Registered ext schema https://github.com/opencomputeproject/ocp-diag-core/measurementSeriesStart -> ../../json_spec/output/measurement_series_start.json
2023/08/14 19:04:06 Registered ext schema https://github.com/opencomputeproject/ocp-diag-core/metadata -> ../../json_spec/output/metadata.json
2023/08/14 19:04:06 Registered ext schema https://github.com/opencomputeproject/ocp-diag-core/output -> ../../json_spec/output/root.json
2023/08/14 19:04:06 Registered ext schema https://github.com/opencomputeproject/ocp-diag-core/sourceLocation -> ../../json_spec/output/source_location.json
2023/08/14 19:04:06 Registered ext schema https://github.com/opencomputeproject/ocp-diag-core/subcomponent -> ../../json_spec/output/subcomponent.json
2023/08/14 19:04:06 Registered ext schema https://github.com/opencomputeproject/ocp-diag-core/testRunArtifact -> ../../json_spec/output/test_run_artifact.json
2023/08/14 19:04:06 Registered ext schema https://github.com/opencomputeproject/ocp-diag-core/testRunEnd -> ../../json_spec/output/test_run_end.json
2023/08/14 19:04:06 Registered ext schema https://github.com/opencomputeproject/ocp-diag-core/testRunStart -> ../../json_spec/output/test_run_start.json
2023/08/14 19:04:06 Registered ext schema https://github.com/opencomputeproject/ocp-diag-core/testStatus -> ../../json_spec/output/test_status.json
2023/08/14 19:04:06 Registered ext schema https://github.com/opencomputeproject/ocp-diag-core/testStepArtifact -> ../../json_spec/output/test_step_artifact.json
2023/08/14 19:04:06 Registered ext schema https://github.com/opencomputeproject/ocp-diag-core/testStepEnd -> ../../json_spec/output/test_step_end.json
2023/08/14 19:04:06 Registered ext schema https://github.com/opencomputeproject/ocp-diag-core/testStepStart -> ../../json_spec/output/test_step_start.json
2023/08/14 19:04:06 Registered ext schema https://github.com/opencomputeproject/ocp-diag-core/validator -> ../../json_spec/output/validator.json
all ok


⚠ Bofrost.ch has degraded performance

In b86bd1c, Bofrost.ch (https://www.bofrost.ch) experienced degraded performance:

HTTP code: 200
Response time: 1505 ms

Resolved: Bofrost.ch performance has improved in aa4371a after 2 hours, 41 minutes.


Add artifacts as separate decks in the UI and backend

This is a pretty big and involved change which touches both the backend and frontend code. It's going to be hard to break this down into small commits so this will likely end up being a monolithic commit.
It's also likely that other changes will need to be made at the same time (e.g. changing the backs of cards to the purple background if they are an artifact card).

I actually started this work yesterday and am making great progress!


GSOC Proposal Implementing Android Widgets

About Me
Nicholas Dewey
GitHub: ndew623
Email<EMAIL_ADDRESS>Phone:<PHONE_NUMBER>
My name is Nicholas Dewey, and I am a Computer Science and Engineering major at The Ohio State University. In school I have studied C/C++ and Java. Outside of school I have also written JavaScript, Python, C#, and PHP. I love the simplicity and power of Python. However, in the past couple of years I have been preoccupied with school and my hobby of Android development. After the recent completion of my app AndroidCrypt (github.com/ndew623/AndroidCrypt), I want to dive into contributing to open source projects. I was initially attracted to BeeWare because of my love for Python. However, I applied because of the opportunity to both work with Python and use my knowledge of Android development to contribute to open source.
Introduction
The future of computing is making its way to mobile. By some measurements, Android is already the world’s most popular operating system, and its user base will only continue to grow. BeeWare’s mission is to provide the tools to allow developers to write their applications once, and deploy it to multiple platforms, and Android’s popularity makes it one of the most important platforms for BeeWare to support. Despite this, the ability to deploy cross-platform applications to Android with BeeWare is essentially nonexistent. Two of the three major components, VOC and Briefcase, are functional. Toga widget support is the only major roadblock remaining.
Project
My project proposal is to take the third step to making BeeWare on Android a reality by implementing Toga widgets and bringing Android support up the the same level as GTK and Cocoa. This includes not only implementing base functionality, but also the non-critical toga widget methods like set_font() or set_alignment(). Currently there are 16 Toga widgets that are not implemented on Android. I will start with the simplest widgets and use them as a learning opportunity to become more familiar with Toga. These widgets have Android counterparts with comparable APIs and are easy to implement. Most of their methods are one line calls to the Android api via self.native. I implemented 7 unimplemented methods in the existing Toga android widgets as well as a native_color method for Android in a few hours. After becoming more familiar with Toga and working full time, I think I can finish these simple widgets in a few days. Other widgets such as Tree, Table, SplitContainer, and Slider don’t have direct Android equivalents. I will implement them last, and they will take up the majority of the work time. In between are widgets like Canvas and Selection. They have Android counterparts, but the APIs don’t match up as well. Working on Android is also an opportunity to write some Android specific documentation. For example, the only place the process of building for Android is documented is in a comment on this GitHub issue (https://github.com/pybee/toga/issues/162). The instructions are good, but they are not comprehensive and a GitHub issue is not the right place for such a guide. Of course, the existing documentation will need to be continuously updated as widgets are implemented.
Weekly Schedule

April 23 - April 28GSoC Community Bonding
During the community bonding period I can get more familiar with Toga and writing Android code in Python. The more I learn during Community Bonding, the smoother the rest of the project will go.

April 23 - April 28GSoC Community Bonding
During this time I’ll also experiment. I’ll try implementing several widgets. I won’t be able to make a serious effort yet, but For example, NumberInput is just an extension of TextInput.

April 29 - May 5GSoC Community Bonding
Classes and finals end on May 1st. Up until then work time will be very limited. I have a busy schedule this semester. The GSoC application period has already been straining. However, after May 1st time to work won’t be an issue.

May 6 - May 12GSoC Community Bonding
This is still community bonding period. However, after three weeks it may be time to start serious coding early. If I didn’t implement NumberInput before, I’ll do it now.

May 13 - May 19
Implement Switch and Progress bar. Switch is easy. Android already has those and they already work the same way. Android has progress bars too, but they might take a little more work. The indeterminate Android progress bar is a spinning circle that requires totally different dimensions than the determinate bar. Also, Android doesn’t have started and stopped states associated with its progress bars as Toga does.

May 20 - May 26
Implement the resources: Image, Icon, Font, Group, Command. The most important in this list is Image. It is needed to make ImageView (scheduled for next week) work. The others on the list are nice to have but not as crucial and not included in my project proposal. During this week, whatever doesn’t get done (outside of Image) doesn’t get done. Image should be implemented with Android drawable resources. As for fonts, Android has android.graphics.TypeFace.

May 27 - June 2
Implement MultilineTextInput, WebView, and ImageView. These all have Android equivalents. MultilineTextInput can be extended from TextInput in the same way as PasswordInput or NumberInput. The functionality of a Toga WebView appears as though it can be easily supported by Android’s WebView API.

June 3 - June 9
Implement Slider and start work on ScrollContainer and Split Container. Slider corresponds to the Android SeekBar widget. Android has ScrollView, which is the functions exactly like ScrollContainer except that it can only have one direct child view. This can be solved by using a LinearLayout inside of the ScrollView. Split Container can be done with a LinearLayout so that each child Layout has a layout weight of 1.

June 10 - June 16First evaluation
Finish ScrollContainer and SplitContainer. Slider doesn’t take more work than other widgets that are to be developed in half a week. However, this is the first time I’ll be working with container widgets so I’m allowing an extra week for them.

June 17 - June 23
Implement Table, and start working on Canvas. Android has both TableLayout and GridView that are candidates for implementing toga.Table. They both have pros and cons. I think Table and Canvas will take more time than previous widgets. While the implementation of Table shouldn’t be difficult, the best way to do it isn’t obvious immediately. Some of the calls to toga.Canvas methods will have to be implemented with the right combination of Android’s Canvas API calls and probably some geometry. For example, Android has no bezier_curve_to() equivalent. Also, it takes x, y coordinates as arguments for where each drawing starts, rather than having a moveTo() method.

June 24 - June 30
Finish Canvas. I’m giving myself another week with Canvas because implementing one set of drawing methods with another, using geometry, and keeping track of the toga.Canvas’s penpoint all sound bug prone.

July 1 - July 7
Implement Selection, Tree, and DetailedList. These all share a common trait. Their Android equivalents (Spinner, ListView, and ExpandableListView respectively) all need a ListAdapter. A ListAdapter stores the data and defines how each data item gets turned into a listview item. Because Toga seems to limit its list items to Strings, Android’s built in implementations of ListAdapter will probably work. DetailedList poses another issue. Toga’s DetailedList supports deleting, and updating. However, the UI for this functionality does not exist by default in Android’s ListView. This will require design decisions and custom UI. Are list items swiped away? Does each item have a delete button? Should there be checkboxes and a single delete icon in the action bar?

July 8 - July 14Second evaluation
Continue work on DetailedList’s delete and update functionality. Pulling a list down to update it is best implemented by Android’s SwipeRefreshLayout. I’ve never used it before. This may be an additional challenge.

July 15 - July 21
Finish DetailedList. Start OptionContainer.

July 22 - July 28
Implement OptionContainer. There are couple of options for OptionContainer. One is to create tabs (see this example https://i.stack.imgur.com/77PlQ.png). They look good, and it is a common design in Android applications. It would be nice to make this feature available to Toga applications. The problem is that those tabs are tied to the ActionBar. Consequently, I don’t think it would be possible to nest OptionContainers inside other containers this way. Alternatively, a custom view using Android’s RadioButtons (styled not to have an ugly dot next to them of course) would do the trick.

July 29 - August 4
Finish working on OptionContainer.

August 5 - August 11Coding period ends
The GSoC coding period ends on August 6th. I’m sure I can find something useful to do on August 5th. Creating a how-to-guide for the documentation on compiling Toga apps for Android is part of my proposal and it shouldn’t take more than a day.

Risk Analysis
This schedule assumes a quick and steady development pace. That is unrealistic. The implementation of at least one widget will go wrong and derail the schedule. However, some widgets may be easier than expected and help counterbalance the ones that cause problems. To be clear, I do not intend for this schedule to be an unattainable ideal. I did however, keep in mind that if progress slipped, the project could still produce valuable results. A nice feature of this project is that it has a lot of small deliverables. Even if I fail to meet my own goals, the Toga project will still get improved Android widget support. One goal when making the schedule was to put the the widgets most likely to be problematic and take the most time towards the end. The widgets of particular concern are Canvas, DetailedList, and OptionContainer (for reasons that are mentioned in the schedule). That way, if one or more of them takes much longer than expected, only those few widgets are at risk of not being completed. In the event that I am behind schedule, cuts can be made to get back on track. For example, if most of the functionality of Canvas is completed in a week, but I spend the next week failing to implement quadratic_curve_to(), then it would make sense to abandon it and move on next week.

@ndew623 This is a good first draft. My overall impression is that this is very ambitious - you're covering a lot of widgets in a very short time. That said, you've also got Android experience, and you're restricting yourself to implementing existing interfaces, which is the easier part of the process.
The single strongest thing you could do to strengthen this proposal would be to convince me that your estimates of "days per widget" are accurate. I'm not sure I can suggest anything specific that would achieve this, but at the moment, it's only really addressed tangentially (stating past experience etc).
Some more specific questions/comments:

Have you validated the current state of the Android backend?

The discussion about ListAdapter is interesting; I'd feel a little more confident about your estimate if you were able to give a comparison between ListAdapater and Toga's ListSource, and how that mapping will play out in practice.

Some of the widgets cross 2 weeks of the schedule, which makes sense in terms of the effort involved; however, your proposal would be stronger if it gave a better sense of why a particular widget will take 2 weeks, and what progress we can expect to see at the end of the first week.

The single strongest thing you could do to strengthen this proposal would be to convince me that your estimates of "days per widget" are accurate.

I've tried to address this issue somewhat in the project overview, and risk analysis. In risk analysis I discuss why I made it such a tight schedule.

Have you validated the current state of the Android backend?  Maybe its something I can figure out during the community bonding period. My updated proposal doesn't mention this yet, but I'll try to figure it out tomorrow.

Implementing ImageView before you have access to an Image resource seems completely bass-ackward.

Fair enough.

The discussion about ListAdapter is interesting; I'd feel a little more confident about your estimate if you were able to give a comparison between ListAdapater and Toga's ListSource, and how that mapping will play out in practice.

I don't know that they will interact much. Toga's interface needs to produce a ListSource and Android needs a ListAdapter. That seems to necessitate keeping two concurrent versions of the list data in each one.

Some of the widgets cross 2 weeks of the schedule, which makes sense in terms of the effort involved; however, your proposal would be stronger if it gave a better sense of why a particular widget will take 2 weeks, and what progress we can expect to see at the end of the first week.

I've restructured the schedule. I think addresses this better than before.

Unfortunately, this project was not selected for the 2018 GSoC. Thanks for applying!


docker-compose dolphinscheduler/2.0.0-SNAPSHOT erro #6720

The image not found error occurs because image is Apache / Dolphin scheduler: 2.0.0-snapshot in docker-compose.yml and docker-stack.yml_ hub image is apache/dolphinscheduler:2.0.0-alpha

Sorry, thank you for raising this question. We re-released the docker image. You can try again, but this change will often be changed at the time of release, not now. Thank you very much for your contribution, and welcome you to participate in the release check of the next version,