Invisible vertices

General
Introduces node_invis attribute.
Node indices passed in node_invis will not be drawn.
Node labels will also not be drawn
Edges will be drawn normally.
Motivation
I've been needing to have this feature for a personal project, to which I need to draw edges without drawing all nodes.
In essence this PR works towards having floating edges.
Another use case could be to have composite edges, which can be drawn as a series of simple edges connected by invisible nodes.
Example
gc = circular_ladder_graph(5)
f,a,p = graphplot(gc, node_invis=[2,3,7], nlabels=repr.(vertices(gc)), node_color=:blue, node_attr=(markersize = LinRange(11, 20, 10),))

Inner Workings
Defines function filter_out.
Scatter is using filter_out for all arguments passed in.
Node Labels are just reevaluated by doing gp.nlabels[][gp.node_invis[]] .= ""
Feel free to mention if this would not be an appropriate feature or if you have problems with the implementation.
I directly did the PR because the code was available already from my side and probably it's easier for discussion.

Codecov Report

Merging #74 (f7c2a6a) into master (efc7eb7) will increase coverage by 0.02%.
The diff coverage is 81.81%.

@@            Coverage Diff             @@
##           master      #74      +/-   ##
==========================================
+ Coverage   78.84%   78.86%   +0.02%
==========================================
  Files           4        4
  Lines         520      530      +10
==========================================
+ Hits          410      418       +8
- Misses        110      112       +2

Impacted Files
Coverage Δ

src/utils.jl
96.96% <75.00%> (-1.42%)
:arrow_down:

src/recipes.jl
97.56% <85.71%> (-0.43%)
:arrow_down:

Continue to review full report at Codecov.

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

This adds some complexity to the code and might introduce problems: the scatter points are not numbered according to the nodes in the graphs anymore, when active, this feature will break node interactions.
Can't the same functionality be achieved on the user side by something like this?
nodesize = [10 for i in 1:nv(g)]
nodesize[inv] .= 0.0
graphplot(g; nodesize)

(potentially, using a dict with default value in the future)

using a dict with default value in the future
Yes.
I guess I got too much carried away with user interface easiness. It's not so hard for the user to do it alone.

fyi, for complex kw argument transformations i used the following pattern quite sucessfully to introduce custom kw arguments
function gpargs(; mycustom, kwargs)
    node_size = f(mycustom)
    return (;node_size, kwargs...)
end

graphplot(g; gpargs(...)...)


Multiple instances do not keep in sync

I can fix it, but it'll take a little time.

Fixed it, but I think I rather release it after dealing with the previous issue.

Try new version 2.3.0. Has a new prop and a fix for this issue.

I think this is still not working, what should be done in order to keep them in sync?

You must share the same model between the instances.

I just have two of these at different places of the same <template>:
 <v-facebook-login
                        app-id="228044118517087"
                        @login="onFbLogin"
                        @logout="onFbLogout"
                        @click="onFbClick"
                        @sdk-init="onFbSdkInit"
                        :login-options="{ scope: ['email'] }"
                      />

How do I share the model, which model?

You need to add v-model attribute to each instance.

Okay, will do that.

Excellent, it worked. Maybe add it to the docs.

Right now those are in the same component. But what will happen if i need it in a nested component?
Shall I share it thru the Vuex $store?

Exactly, just the share the model from Vuex.


chore(config): rename central url field

Stack:

#1588
#1587
#1586
#1585 ⬅
#1584

⚠ Part of a stack created by spr. Do not merge manually using the UI - doing so may have unexpected results.

This change is


Generated Robustness Evaluation Sample Scripts

Hey, I am working on issue #69  and I have generated 2 sample scripts - one involving prompt substitution and the other for auto evaluation. I am using Promptbench in both scripts. Can you please guide me as to how to integrate the scripts into your experiments?

 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.

Thanks for raising this @RigvedRocks! I'll review it now. When you get a chance, could you fill out the CLA?

I'm not very familiar with promptbench but it looks like you want to run attacks as experiments and use your eval function to evaluate the experiment outputs. You can check out experiment examples to see how we feed prompts into LLMs for testing, and how we pass in eval functions too. Let me know if you have any specific questions about it. Thanks again for looking into this issue!

Sure Mr. Krawcyzk. I will have a look at the implementation of the library and will make changes according to that. When time permits, I will fill out the CLA.

Hey, I have generated a sample script to evaluate the robustness of the models under the utils folder. Please have a look at it and suggest amends if any.


Version undefined in coco banner

Describe the bug
The version number inside of the banner is returning undefined resulting in the text vundefined
... 😂
To Reproduce
Steps to reproduce the behavior:

Run 'coco --help' command, or any command with --help
See the following banner...

Expected behavior
The banner should be displaying the currently installed version of coco here e.g. v0.14.1
Screenshots

Desktop (please complete the following information):

OS: MacOS
Shell: ZSH
Version: 0.14.1

Resolved in 0.14.2


[bazel] Prepare tree for remote execution

This makes the tree compatible with a minimal buildfarm setup:

Tagged source inspecting tests as "local" because they rely on a sandbox escape that isn't compatible with the remote execution api.
Set opentitantool's stamping to be conditional so it can be made to work in remote execution context.
We have some tests that aren't completely hermetic and are marked to prevent running in the remote context where they will fail

Signed-off-by: Drew Macrae<EMAIL_ADDRESS>Tested:
bazel test //... --test_tag_filters=-broken --remote_cache=grpc://localhost:8980 --remote_executor=grpc://localhost:8980 --nostamp --experimental_allow_tags_propagation

This prevents attempts to execute these remotely (which will fail)

Ran cargo raze to set the lockfile, including relevant history for subsequent reproduction:
git switch master
bazel run //:cargo_raze -- --generate-lockfile
git switch -c dummy_branch_for_cargo_raze_commit
git add *
git commit -m "dummy raze commit"
DUMMY_COMMIT=$(git rev-parse HEAD)
git switch remote_preparation
bazel run //:cargo_raze -- --generate-lockfile
git add *
git commit
git revert $DUMMY_COMMIT
git rebase -i

This PR works and was tested in both a remote config and the default local context. It doesn't execute FPGA tests remotely.
https://github.com/drewmacrae/bazel-buildfarm/tree/ot_remote_build Is a short Buildfarm fork that will launch a useful server and workers for OpenTitan workloads.


python311Packages.django-auth-ldap: 4.7.0 -> 4.8.0

Automatic update generated by nixpkgs-update tools. This update was made based on information from passthru.updateScript.
meta.description for python311Packages.django-auth-ldap is: Django authentication backend that authenticates against an LDAP service
meta.homepage for python311Packages.django-auth-ldap is: https://github.com/django-auth-ldap/django-auth-ldap
Updates performed

Ran passthru.UpdateScript

To inspect upstream changes
Impact
Checks done

built on NixOS
The tests defined in passthru.tests, if any, passed
found 4.8.0 with grep in /nix/store/y88fjn3fz16c66hba58k1hrb11xjn9ap-python3.11-django-auth-ldap-4.8.0
found 4.8.0 in filename of file in /nix/store/y88fjn3fz16c66hba58k1hrb11xjn9ap-python3.11-django-auth-ldap-4.8.0

Rebuild report (if merged into master) (click to expand)

3 total rebuild path(s)

3 package rebuild(s)

First fifty rebuilds by attrpath
python311Packages.django-auth-ldap
python312Packages.django-auth-ldap
tandoor-recipes

Instructions to test this update (click to expand)

Either download from Cachix:
nix-store -r /nix/store/y88fjn3fz16c66hba58k1hrb11xjn9ap-python3.11-django-auth-ldap-4.8.0 \
  --option binary-caches 'https://cache.nixos.org/ https://nix-community.cachix.org/' \
  --option trusted-public-keys '
  nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
  cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
  '

(The Cachix cache is only trusted for this store-path realization.)
For the Cachix download to work, your user must be in the trusted-users list or you can use sudo since root is effectively trusted.
Or, build yourself:
nix-build -A python311Packages.django-auth-ldap https://github.com/r-ryantm/nixpkgs/archive/d66664a435ff09c31e4140ff200d87ea6b82244e.tar.gz

Or:
nix build github:r-ryantm/nixpkgs/d66664a435ff09c31e4140ff200d87ea6b82244e#python311Packages.django-auth-ldap

After you've downloaded or built it, look at the files and if there are any, run the binaries:
ls -la /nix/store/y88fjn3fz16c66hba58k1hrb11xjn9ap-python3.11-django-auth-ldap-4.8.0
ls -la /nix/store/y88fjn3fz16c66hba58k1hrb11xjn9ap-python3.11-django-auth-ldap-4.8.0/bin

Pre-merge build results
We have automatically built all packages that will get rebuilt due to
this change.
This gives evidence on whether the upgrade will break dependent packages.
Note sometimes packages show up as failed to build independent of the
change, simply because they are already broken on the target branch.
Result of nixpkgs-review --extra-nixpkgs-config '{ allowInsecurePredicate = x: true; }' run on x86_64-linux 1

2 packages failed to build:

python312Packages.django-auth-ldap
python312Packages.django-auth-ldap.dist

3 packages built:

python311Packages.django-auth-ldap
python311Packages.django-auth-ldap.dist
tandoor-recipes

Maintainer pings
cc @mmai for testing.

Already on master.


[Bug Report] El-tab-panes content get re-rendered when switching tabs

Element UI version
2.4.6
OS/Browsers version
Windows 7 / Chrome 73
Vue version
2.5.17
Reproduction Link
https://codesandbox.io/s/m4x609973x
Steps to reproduce
If you look at the console while switching tabs, you'll notice that the content of each tab-pane get re-rendered
Which is weird because unless I'm mistaken, the tab-panes are rendered once when lazy option is off
https://github.com/ElemeFE/element/blob/dev/packages/tabs/src/tab-pane.vue#L5
What is Expected?
Every tab-pane's content do not re-render when switching tabs.
What is actually happening?
Every tab-pane's content are re-rendered when switching tabs.

Note: repro link is a simplified version of my application, and may contain unnecessary stuff, but actually represent the structure it would have in a real scenario.

我也遇到了类似的情况，但是只有切换个别选项卡时会重新请求数据并渲染页面

pr welcome

Why is it now closed? Is there any fix for this?


Batching parameter load operations and cleaning up gather/scatter.

This makes loads look like gathers/scatters and allows us to move the (relatively) tricky concurrency scheduling logic to the runtime. A single load operation can now return any number of parameters with unique storage buffers (hopefully imported/zero-copy) so long as they have matching buffer parameters (of which all in general do). The core logic for scheduling the batched operations has been shared such that load/gather/scatter are all going down the same path meaning that as we add new parameter types and optimize scheduling we only have one code path to tweak. Some minor optimizations have been done to elide batch overhead but many have been deferred as compared to staging even 10MB of parameters the current profile is in the noise. The standalone read/write methods were removed to simplify the compiler<->runtime interface and implementations of iree_io_parameter_provider_t - currently the only overhead incurred is an additional queue join barrier that we can optimize away in the future in most cases.
Since load/gather use the same code path now we shouldn't have correctness issues unique to any particular path and can turn back on the gather path which has much less overhead in the compiler/vmfb that otherwise needs to handle independent buffers per parameter. We can eventually optimize the load path to batch device buffer allocations but the compiler/vmfb still needs to treat each as independent and we won't get savings there. The rule is that the unified memory model should only be used when building a vmfb that targets devices that can do zero-copy loads from memory mapped files - every other case should use discrete.
Progress on #15521.
Progress on #15522.
Works around several issues in #15674.

thanks for trying @bjacob! can you please share the exact MLIR input you're using? (I'm going to get a new one from Ian but want to use yours as a reproducer)

(is it https://storage.googleapis.com/shark-public/quinn/llama_turbine_weights/Llama_2_7b_chat_hf.mlir ?)

OK, here's the repro with this specific file (your URL) and on this PR's branch as-is (not rebased or anything):
tools/iree-compile --iree-opt-const-eval=false --iree-hal-target-backends=llvm-cpu --iree-stream-resource-index-bits=64 --iree-vm-target-index-bits=64 /tmp/Llama_2_7b_chat_hf.mlir -o /tmp/x.vmfb

hummmm, benoit's error is from this:
//===-------------------------------------------===//
Legalizing operation : 'stream.timepoint.join'(0x1a80ab446b0) {
  %61 = "stream.timepoint.join"(<<UNKNOWN SSA VALUE>>, %32, %58) : (!stream.timepoint, !hal.fence, !stream.timepoint) -> !stream.timepoint

} -> SUCCESS : operation marked 'ignored' during conversion
//===-------------------------------------------===//

why is MLIR ignoring that particular op? dunno :/

Damn, this fails with the other model too. I may need help with dialect conversion debugging.

Reproducer for the failure:
#executable_target_embedded_elf_x86_64_ = #hal.executable.target<"llvm-cpu", "embedded-elf-x86_64", {cpu = "generic", cpu_features = "", data_layout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128", native_vector_size = 16 : index, target_triple = "x86_64-unknown-unknown-eabi-elf", ukernels = "mmt4d"}>
#device_target_llvm_cpu = #hal.device.target<"llvm-cpu", {executable_targets = [#executable_target_embedded_elf_x86_64_]}>
module @state_update attributes {hal.device.targets = [#device_target_llvm_cpu]} {
  util.global private mutable @_constant__timepoint = #stream.timepoint<immediate> : !stream.timepoint
  util.global private @_constant : !stream.resource<constant>
  util.global private mutable @_global_state.global__timepoint = #stream.timepoint<immediate> : !stream.timepoint
  util.global private mutable @_global_state.global : !stream.resource<variable>
  util.global private mutable @_global_seq_step.global {noinline} = 0 : index
  util.initializer {
    %c128 = arith.constant 128 : index
    %c64 = arith.constant 64 : index
    %c0_i64 = arith.constant 0 : i64
    %c268435456 = arith.constant 268435456 : index
    %c0 = arith.constant 0 : index
    %c22544384 = arith.constant 22544384 : index
    %c1409024 = arith.constant 1409024 : index
    %c8388608 = arith.constant 8388608 : index
    %c524288 = arith.constant 524288 : index
    %c524288000 = arith.constant 524288000 : index
    %c16384 = arith.constant 16384 : index
    %c4293918720 = arith.constant<PHONE_NUMBER> : index
    %c4 = arith.constant 4 : index
    %c0_i8 = arith.constant 0 : i8
    %0 = stream.timepoint.immediate => !stream.timepoint
    %buffer_cst = util.buffer.constant {alignment = 64 : index} : !util.buffer = dense<0> : tensor<268435456xi8>
    %did_map, %result = stream.resource.try_map %buffer_cst[%c0] : !util.buffer -> i1, !stream.resource<constant>{%c268435456}
    cf.cond_br %did_map, ^bb2(%0, %result : !stream.timepoint, !stream.resource<constant>), ^bb1
  ^bb1:  // pred: ^bb0
    %1 = stream.resource.alloc uninitialized : !stream.resource<constant>{%c268435456}
    %file = stream.file.constant %buffer_cst[%c0 for %c268435456] : !util.buffer{%c268435456} -> !stream.file
    %2 = stream.file.read await(%0) => %file[%c0_i64], %1[%c0], %c268435456 : !stream.file -> !stream.resource<constant>{%c268435456} => !stream.timepoint
    cf.br ^bb2(%2, %1 : !stream.timepoint, !stream.resource<constant>)
  ^bb2(%3: !stream.timepoint, %4: !stream.resource<constant>):  // 2 preds: ^bb0, ^bb1
    %results, %result_timepoint = stream.parameter.load {
      "model"::"model.layers.31.mlp.down_proj.weight"[%c0_i64] : !stream.resource<constant>{%c22544384}
    } => !stream.timepoint
    %result_0, %result_timepoint_1 = stream.resource.alloca uninitialized : !stream.resource<variable>{%c4293918720} => !stream.timepoint
    %result_2, %result_timepoint_3 = stream.resource.alloca uninitialized : !stream.resource<constant>{%c128} => !stream.timepoint
    %5 = stream.timepoint.join max(%result_timepoint_1, %result_timepoint_3) => !stream.timepoint
    %6 = stream.cmd.execute await(%5) => with(%result_0 as %arg0: !stream.resource<variable>{%c4293918720}, %result_2 as %arg1: !stream.resource<constant>{%c128}) {
      stream.cmd.concurrent {
        stream.cmd.fill %c0_i8, %arg0[%c0 for %c4293918720] : i8 -> !stream.resource<variable>{%c4293918720}
        stream.cmd.fill %c0_i8, %arg1[%c0 for %c4] : i8 -> !stream.resource<constant>{%c128}
        stream.cmd.fill %c0_i8, %arg1[%c64 for %c4] : i8 -> !stream.resource<constant>{%c128}
      }
    } => !stream.timepoint
    %7 = stream.timepoint.join max(%3, %result_timepoint, %6) => !stream.timepoint
    util.global.store %4, @_constant : !stream.resource<constant>
    util.global.store %7, @_constant__timepoint : !stream.timepoint
    util.global.store %result_0, @_global_state.global : !stream.resource<variable>
    util.global.store %7, @_global_state.global__timepoint : !stream.timepoint
    util.initializer.return
  }
}

iree-opt --iree-hal-conversion


Strange thing with getAccountLiquidity

First of all, thanks for your great job.
You have this line on the contract:
( , uint liquidity, ) = comptroller.getAccountLiquidity(_borrower);
That you check if has liquidity to not to waste gas. The thing is, I'm seeing that if I send the transaction in the same block that other bot, even if I send it with more gas, I'm receiving the liquidity check, but other bot with lower gas can do the liquidation.
Do you know how can be this possible?

nvm. Figured it out myself


Enum cases with associated values cannot be marked potentially unavailable

Dear,
With the introduction with iOS 15 and Xcode 13, I have discovered a bug. I can no longer compile an app for iOS 15. The problem is in react-native-track-player/Vendor/SwiftAudio/Classes/NowPlayingInfoController/NowPlayingInfoProperty/NowPlayingInfoProperty
The problem is with the following code:
`public enum NowPlayingInfoProperty: NowPlayingInfoKeyValue {
/**
 The identifier of the collection the now playing item belongs to.
 The identifier can be an album, artist, playlist, etc.
 */
case collectionIdentifier(String?)

/**
 The available language option groups for the now playing item.
 Value is an array of MPNowPlayingInfoLanguageOptionGroup items. Only one language option in a given group can be played at a time.
 */
case availableLanguageOptions([MPNowPlayingInfoLanguageOptionGroup]?)

/**
 The URL pointing to the now playing item's underlying asset.
 This constant is used by the system UI when video thumbnails or audio waveform visualizations are applicable.
 */
@available(iOS 10.3, *)
case assetUrl(URL?)`

Resulting in: Enum cases with associated values cannot be marked potentially unavailable (@available(iOS 10.3, *))
I use react-native-track-player 1.2.3. Any solutions?

Edit: I installed react-native-track-player 1.2.7 and it seems the problem is fixed now.

Hey, Did you get any solution?

No. I just changed iOS 10.3 to iOS 10 for now.

This solved it for me as well.

I would like to reopen this issue

Me too, we're getting close to release for iOS 15, so we hope this fixed soon

I would like to reopen this issue

I also have this issue with Xcode 13, would be nice to fix it. Any permanent solutions for it?

Also having the issue in Xcode 13, trying to build on emulator with ios 11.4 or higher throws this error. Changing Deployment Target doesnt change anything.

Did you all try version @2.1.0? That should fix this issue. https://www.npmjs.com/package/react-native-track-player/v/2.1.0

Im running @1.2.3. Ive fixed the issue by going into xCode Pods / Development Pods / react-native-track-player and changing Deployment Target from ios 10.0 to 11.0

Did you all try version @2.1.0? That should fix this issue. https://www.npmjs.com/package/react-native-track-player/v/2.1.0

Facing same issue with this version, hope there is fix in the works.

this error occurred to me when I updated my xCode to 13.2.1, and fixed it by upgrading  react-native-track-player to v:2.1.2. And changed platform :ios, '11.0' from platform :ios, '10.0'. The rest is linking, pod installing and following react-native-track-player installation docs


fix: store image files

This is something I overlooked in #61.
Fix #62.

well, my issue is my editor is currently failing (not yet compatible with eslint v8).
other than that, I think it's find and CI can catch it anyways.
Thanks for your review. Merging.


Make integration targets more granular

(pun maybe intended)
This change allows running integration tests with more specific make targets eg.
make client_endpoints
make dynamic_record
make s_client
make s_server
make gnutls_cli
make gnutls_serve
make sslyze

while retaining default make or make all behavior in s2n/tests/integration/
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

Codecov Report

:exclamation: No coverage uploaded for pull request head (make_integration_granular@1f933f7). Click here to learn what that means.
The diff coverage is n/a.

Checks have passed ✅


Map faction/caches

New selection for the faction section.

{
  "caches": [
    {
      "ID": 1118,
      "name": "Armor Cache",
      "type": "Supply Pack",
      "quantity": 1
    },
    {
      "ID": 1119,
      "name": "Melee Cache",
      "type": "Supply Pack",
      "quantity": 1
    },
    {
      "ID": 1120,
      "name": "Small Arms Cache",
      "type": "Supply Pack",
      "quantity": 3
    }
  ]
}

ID matches the id for the item in torn/items

Could you maybe verify that it's minimal access? Thanks for the schema already.


Can't locate API module structure 'mod_oauth2'

I've followed these instructions to get the mod_oauth2 package installed in RHEL 7: https://www.gitmemory.com/issue/zmartzone/mod_oauth2/12/754667776
However, with everything installed when I attempt to reference the module in the httpd.conf file like:
LoadModule mod_oauth2 /etc/httpd/modules/mod_oauth2.so
I get an error when trying to start apache:
httpd: Syntax error on line 1 of /etc/httpd/conf/httpd.conf: Can't locate API module structure `mod_oauth2' in file /etc/httpd/modules/mod_oauth2.so: /etc/httpd/modules/mod_oauth2.so: undefined symbol: mod_oauth2
The /etc/httpd/modules contains these mod_oauth2 references:
ls -l mod_oauth2*
-rw-r--r--. 1 root root 24312 Dec 22  2020 mod_oauth2-3.2.0-1.el7.x86_64.rpm
lrwxrwxrwx. 1 root root    19 Aug 11 22:24 mod_oauth2.so -> mod_oauth2.so.0.0.0
-rwxr-xr-x. 1 root root 24336 Dec 22  2020 mod_oauth2.so.0.0.0

and the /usr/lib64 has these libraries installed:
lrwxrwxrwx.  1 root root       17 Aug 11 22:19 libcjose.so -> libcjose.so.0.0.0
lrwxrwxrwx.  1 root root       17 Aug 11 22:19 libcjose.so.0 -> libcjose.so.0.0.0
lrwxrwxrwx.  1 root root       18 Aug 11 22:20 liboauth2.so.0 -> liboauth2.so.0.0.0
lrwxrwxrwx.  1 root root       18 Aug 11 22:20 liboauth2.so -> liboauth2.so.0.0.0
lrwxrwxrwx.  1 root root       25 Aug 11 22:20 liboauth2_apache.so -> liboauth2_apache.so.0.0.0
lrwxrwxrwx.  1 root root       25 Aug 11 22:20 liboauth2_apache.so.0 -> liboauth2_apache.so.0.0.0

My goal is to configure Apache to call out to my OAUTH2 Authentication Server passing the access_token to my the URL specified in these configuration parameters:
AuthType oauth2
OAuth2TokenVerify introspect http://localhost:9091/secure introspect.auth=none
OAuth2AccessTokenIn post name=access_token

I also tried specifying the true path (without symlinks) to /usr/lib64/httpd/modules/mod_oauth2.so but I get the same error -- so the library exists, but I'm not specifying the module correctly:
apachectl -M
httpd: Syntax error on line 1 of /etc/httpd/conf/httpd.conf: Can't locate API module structure `mod_oauth2' in file /usr/lib64/httpd/modules/mod_oauth2.so: /usr/lib64/httpd/modules/mod_oauth2.so: undefined symbol: mod_oauth2

I used the command to list the exposed functions: nm -D /etc/httpd/modules/mod_oauth2.so
and saw oauth2_module so I tried that. Now it is loading but it doesn't appear to like the position of the AuthType in the httpd.conf file. Where should these be placed? I put them here:
<VirtualHost *:443>
  ServerName doc2dial.sl.res.ibm.com
  ErrorLog   "/var/log/httpd/com.humidor-error_log"
  CustomLog  "/var/log/httpd/com.humidor-access_log" common

#wnm3 added for OAUTH
AuthType oauth2
OAuth2TokenVerify introspect http://localhost:9091/secure introspect.auth=none
OAuth2AccessTokenIn post name=access_token

I moved statements out of httpd.conf and into oauth2.conf in the same directory. Complaints stopped but not getting any request sent to the introspect server.

The dearth of documentation makes it difficult to guess how to use this module. Nothing shows as debug relating to oauth2_module other than it is loaded. I'm sure the problem is between the chair and keyboard, but an example config to call an OAUTH2 Validation Server might help. I've provided my settings above, but nothing is triggering the call to the server I configured. I'm making a POST call with a body containing the token (one valid and another time with invalid) but neither is forwarded to the introspect server above.
Do you see anything wrong in my configuration above (e.g., do I need to use SSL to call the introspect server, am I missing an = sign somewhere)?
Can you please confirm no changes are needed in the ssl.conf or httpd.conf other than loading the module and that the configuration for oauth2 can go in the oauth2.conf file?

the sample introspection config is here:
https://github.com/zmartzone/mod_oauth2#quickstart
You'll need to protect the path you're accessing with AuthType oauth2.
You can put all of the config in the http.conf, or load the oauth2.conf in there.

I am still unable to get any request forwarded by oauth2 to my Authentication Server (e.g., I'm using a curl with a POST to the apache server with the token=sssss in the payload) and nothing is received by the Authentication server.

As mentioned in the sample that I linked to, you can set introspect.ssl_verify=false to disable certificate validation.
I'm not sure how RFC 2276 relates to this.

I'd found another line where there was a typo for ssl_verify to it was remaining true. I fixed that and get past the verification as you'll see below. I get tripped up now on user validation. My request has a basic authentication header and has the token for OAUTH2 in the payload. I'm not sure how to disable or fix the remote user claim not found issue (e.g., it doesn't appear related to the Apache user authentication from the Authorization Basic header), so I'm misunderstanding something basic.
I had the wrong RFC number (dyslexic...) -- 7662 token introspection is what I'd meant. My question was, would your module be able to find the token if the payload of the POST request was sent in application/json form so I could also send the rest of my payload I want to forward to downstream services after passing authentication. The spec only talks about application/x-www-form-urlencoded but perhaps this is solely for the call oauth2_module is making to my authentication server and your module is fine with receiving application/json and is smart enough to find the token there to form the request.  Unfortunately, oauth2_module is only expecting x-www-form-urlencoded so sending JSON in the payload fails.
My overall goal was to configure a client app (no user experience, just a service) with knowledge of a valid access token (derived by a person and configured in this client service) and have it send its POST request to the Apache HTTPD gateway. I wanted the token to be used to validate the request was allowed before using the proxy to forward the request to downstream services. These services expect application/json payloads. However it appears the oauth2 requires x-www-form-urlencoded content. So, not sure how this is done normally.
oauth2_http_call: enter: url=https://doc2dial.sl.res.ibm.com:9091/secure, data=token=971205560664324457525695621726&token_type_hint=access_token, ctx=[ ssl_verify=false hdr=[ Content-Type=application/x-www-form-urlencoded ] cookie=[ ] ]
http://localhost:9091/secure shared
AH00927: initializing worker http://localhost:9091/secure local
AH00931: initialized single connection worker in child 19230 for (localhost)
AH00925: initializing worker https://localhost:9091/code shared
AH00927: initializing worker https://localhost:9091/code local
AH00931: initialized single connection worker in child 19230 for (localhost)
AH00925: initializing worker https://localhost:9081 shared
AH00927: initializing worker https://localhost:9081 local
AH00931: initialized single connection worker in child 19230 for (localhost)
oauth2_http_call: HTTP response code=200
oauth2_http_call: leave [1]: {"_id":"6111803026dcf63aa32c3806","access_token":"971205560664324457525695621726","active":true,"exp":1631128880591,"iat":1628536880591,"iss":"telstra OAUTH Authorization Server"}
_oauth2_introspect_verify: leave: 1
oauth2_cache_set: enter: key=971205560664324457525695621726, len=179, ttl(s)=300, type=shm, encrypt=0
_oauth2_cache_hash_key: enter: key=971205560664324457525695621726, algo=(null)
oauth2_jose_hash_bytes: enter
oauth2_jose_hash_bytes: leave: 1
_oauth2_cache_hash_key: leave: hashed key: 4f73e2a855f03cbc1de4067f20b5c8ca0a6763c9399503dcaecd863ca6b9f7e3
oauth2_cache_shm_set: enter
oauth2_cache_shm_set: leave: 1
oauth2_cache_set: leave: successfully stored:<PHONE_NUMBER>64324457525695621726
oauth2_token_verify: leave: 1
oauth2_apache_set_request_user: remote user claim could not be found
oauth2_apache_return_www_authenticate: enter
oauth2_apache_hdr_out_add: WWW-Authenticate: Bearer realm="Restricted Content", error="invalid_token", error_description="Could not determine remote user."
oauth2_apache_return_www_authenticate: leave
oauth2_request_handler: leave
AH01503: headers: ap_headers_error_filter()
oauth2_apache_request_context_free: dispose request context: 0x56480e1d13c0
AH02001: Connection closed to child 0 with standard shutdown (server doc2dial.sl.res.ibm.com:443)

you'll need to set a claim that exists in your introspection result, so in your case probably:
OAuth2TargetPass remote_user_claim=_id

see https://github.com/zmartzone/mod_oauth2/blob/v3.2.2/oauth2.conf#L138-L150
there's no standardized way to send an access token in a JSON body, so the module only supports what is in the spec

Sorry about this never ending issue -- I will be happy to try to summarize everything so others could benefit once I've resolved my issues...
I've set up ssl.conf as follows with just 2 location sections (httpd.conf has none):
LogLevel oauth2:debug

<Location />
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/httpd/.htpasswd
Require valid-user
</Location>

<Location />
AuthType oauth2
OAuth2AcceptTokenIn post name=token
OAuth2TokenVerify introspect https://myserver.com:9091/secure introspect.ssl_verify=false&introspect.auth=basic&username=myuserid&password=mypassword
OAuth2TargetPass authn_header=_id
</Location>

And I am sending back an _id field that has the Authorization header (e.g., "Basic xxxxxxx") and was hoping the authn_header would set this in the Authorization field to be authorized to forward the request to be proxied to the actual location where the service is provided.
However, instead, I still get errors in ssl_error_log (some data obfuscated):
oauth2_http_call: HTTP response code=200
oauth2_http_call: leave [1]: {"_id":"Basic d32tMzpWetcNGVmYw==","access_token":"98712055695621726","active":true,"exp":1631128880591,"iat":1628536880591,"iss":"OAUTH Authorization Server"}
_oauth2_introspect_verify: leave: 1
... (caching statements)
oauth2_cache_set: leave: successfully stored:<PHONE_NUMBER>5621726

followed by the error being reported below. I'm sorry but I don't know what is failing so I'm not sure how to fix it.
oauth2_apache_set_request_user: remote user claim could not be found
oauth2_apache_return_www_authenticate: enter
oauth2_apache_hdr_out_add: WWW-Authenticate: Bearer realm="Restricted Content", error="invalid_token", error_description="Could not determine remote user."
oauth2_apache_return_www_authenticate: leave

oauth2 has received the Basic Authorization header in my original request, as well as in the _id field of the response from the Authorization Server, so has access to a userid and password. Do I need to add something more to the response from the Authorization Server to allow oauth2 to determine the remote user? My 200 response has the active=true so I'm not sure what token it thinks is invalid.

as mentioned it needs OAuth2TargetPass remote_user_claim=_id for that, (not authn_header...)

Thank you -- sorry I misunderstood. It seems to be working. Will summarize and then you may close.

Regarding standards for using application/json vs x-www-form-urlencoded (per rfc 7662) I found this draft:
https://tools.ietf.org/id/draft-richer-oauth-json-request-00.html
If we control the authorization service (so we don't care if the JSON request contains additional information) then this approach would allow us to take an existing JSON based API request, add oauth2_module for authorization passing the JSON request with the token to our Authorization Server, and having oauth2 allow or reject the request based on the response.
If allowed, the original request could be forwarded via proxy to the API server (albeit with the access token since I'm not aware of a way to remove something from the original request in oauth2_module).
Otherwise, without application/json support, it seems we'd have to recast our API to accept x-www-form-urlencoded content to process what oauth2_module allowed to pass.

Summary:
My goal was to add OAUTH2 authentication for REST service requests flowing through an Apache HTTPD proxy server to downstream service providers. Apache is running on RHEL 7 so to configure the environment for mod_oauth2 to run I had to retrieve some dependency libraries:
From: https://www.gitmemory.com/issue/zmartzone/mod_oauth2/12/754667776
wget https://github.com/zmartzone/mod_auth_openidc/releases/download/v2.3.0/cjose-0.5.1-1.el7.centos.x86_64.rpm rpm -iv ~/cjose-0.5.1-1.el7.centos.x86_64.rpm --nodeps

wget https://github.com/zmartzone/liboauth2/releases/download/v<IP_ADDRESS>/liboauth2-<IP_ADDRESS>-1.el7.x86_64.rpm sudo yum localinstall -y liboauth2-<IP_ADDRESS>-1.el7.x86_64.rpm

wget https://github.com/zmartzone/liboauth2/releases/download/v<IP_ADDRESS>/liboauth2-apache-<IP_ADDRESS>-1.el7.x86_64.rpm sudo yum localinstall -y liboauth2-apache-<IP_ADDRESS>-1.el7.x86_64.rpm

wget https://github.com/zmartzone/mod_oauth2/releases/download/v3.2.0/mod_oauth2-3.2.0-1.el7.x86_64.rpm sudo yum localinstall -y mod_oauth2-3.2.0-1.el7.x86_64.rpm

I configured the /etc/httpd/conf.d/ssl.conf configuration file to load the oauth2_module and added two locations (one for Basic authentication, and one for oauth2 authorization) -- Note the name of the module is oauth2_module and not mod_oauth2:
LoadModule oauth2_module modules/mod_oauth2.so

with the Location entries within the  section (the LogLevel is optional but very helpful to see why things may fail in the logs/ssl_error_log) and the order of the location statements is important:
LogLevel oauth2:debug

<Location />
AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/httpd/.htpasswd
Require valid-user
</Location>

<Location />
AuthType oauth2
OAuth2AcceptTokenIn post name=token
OAuth2TokenVerify introspect https://myserver.com:9091/secure introspect.ssl_verify=false&introspect.auth=basic&username=myuserid&password=mypassword
OAuth2TargetPass remote_user_claim=_id
</Location>

Notes:

My authorization server needs to support https requests (I turned off ssl verification in the OAuth2TokenVerify introspect command using introspect.ssl_verify=false
I provided a username and password so the request would container a Basic authoritzation header (it would be nice if we could have oauth2 forward the original header in the request to the authorization server somehow).
I had to specify where oauth2 could fine my token in the incoming requests using the OAuth2AcceptTokenIn post name=token statement saying it was in the POST body identified by "token"
Finally, I needed to provide OAuth2TargetPass remote_user_claim _id to tell oauth2 where to find the Basic Authorization I'd returned in the _id field of the authorization server's response so it could forward this to the Target.

This was all new to me and I really appreciate @zandbelt patience to labor through my trials and errors.


File Upload

I have been having a difficult time trying to understand how to upload a file. I am simply wanting to upload a CSV file.  Do you have an example of how to implement using Starlette-WTForms?

Sure, you can use the WTForms FileField. Here's an example of how to modify the snippet in the README to accept a file:
from jinja2 import Template
from starlette.applications import Starlette
from starlette.middleware import Middleware
from starlette.middleware.sessions import SessionMiddleware
from starlette.responses import PlainTextResponse, HTMLResponse
from starlette_wtf import StarletteForm, CSRFProtectMiddleware, csrf_protect
from wtforms import StringField, FileField
from wtforms.validators	import DataRequired

class MyForm(StarletteForm):
    name = StringField('name', validators=[DataRequired()])
    photo = FileField()

template = Template('''

    <form method="post" novalidate>
      {{ form.csrf_token }}

        {{ form.name(placeholder='Name') }}
        {% if form.name.errors -%}
        {{ form.name.errors[0] }}
        {%- endif %}

        {{ form.photo() }}
        {% if form.photo.errors -%}
        {{ form.photos.errors[0] }}
        {%- endif %}

      <button type="submit">Submit</button>
    </form>

''')

app = Starlette(middleware=[
    Middleware(SessionMiddleware, secret_key='***REPLACEME1***'),
    Middleware(CSRFProtectMiddleware, csrf_secret='***REPLACEME2***')
])

@app.route('/', methods=['GET', 'POST'])
@csrf_protect
async def index(request):
    """GET|POST /: form handler
    """
    form = await MyForm.from_formdata(request)

    if form.validate_on_submit():
        print(form.name.data)
        print(form.photo.name)
        print(len(form.photo.data))
        return PlainTextResponse('SUCCESS')

    html = template.render(form=form)
    return HTMLResponse(html)

Thanks the issue I had in my form was missing enctype="multipart/form-data". So effectively the file was not being uploaded as I understand it.
Appreciate the help.

I think the example is also missing an await in the if-clause, i.e.:
if await form.validate_on_submit():
    return PlainTextResponse('SUCCESS')

Fixed, thanks!


Workflow: Support for multiple workflow apps in a single cluster

In what area(s)?

/area runtime

Describe the feature
Dapr Workflow only supports a single workflow app in a cluster. This is a known limitation of the workflow engine and is documented here.

the Dapr Workflow engine requires that all instances of each workflow app register the exact same set of workflows and activities. In other words, it’s not possible to scale certain workflows or activities independently. All workflows and activities within an app must be scaled together.

However, the burden is on the user to remember to abide by this rule. Trying to use multiple workflow apps in the same cluster results in the following runtime error, randomly:

The workflow failed - OrchestratorTaskNotFound: No orchestrator task named 'XXX' was found.

This happens because the underlying workflow actor may get load balanced to a Dapr instance for an app that hasn't registered a particular workflow or activity.
Given that the current design is both limiting and easy to get wrong. We should improve the workflow engine to remove this limitation.
Release Note
RELEASE NOTE: ADD Support for multiple workflow apps in a single cluster

This happens because the underlying workflow actor may get load balanced to a Dapr instance for an app that hasn't registered a particular workflow or activity.

How is it possible to have a daprized App which registers a Workflow and Activity (Lets call it App A) but have certain instances of App A not have both Workflow and Activity Registered?
Surely the only way to achieve this is to have some non-deterministic logic in how an App registers its Workflows and Activities, to generate inconsistencies across the App Instances? But that would be crazy, right?

I should have been clearer in my description. The problem isn't multiple instances of a workflow app being inconsistent (as illustrated in your code snippet), but rather multiple workflow apps that have different workflows registered. For example:

App1: WorkflowA, WorkflowB
App2: WorkflowC, WorkflowD

It's natural to think that these two apps are isolated from each other. The reality is that the (alpha) workflow engine today doesn't distinguish between App1 and App2 when dispatching workflow events to be processed. This means that if a user schedules a new run of WorkflowA as part of App1, the execution might end up getting triggered on App2, which doesn't know anything about WorkflowA, and therefore fail immediately.

@cgillum Got it. Thanks for the clarification.

Dapr Workflow only supports a single workflow app in a cluster. This is a known limitation of the workflow engine and is documented here.

Btw I read the entire page you referenced but I didn't see a mention that the Alpha currently has a limitation of one Workflow App per cluster. Maybe I missed it, can you point me to it. Thanks?

@olitomlinson
Also, the Dapr Workflow engine requires that all instances of each workflow app register the exact same set of workflows and activities. In other words, it’s not possible to scale certain workflows or activities independently. All workflows and activities within an app must be scaled together.

One question regarding the Workflow App.
The example code register and execute the workflow within single app.
Is that required practice?
When test with setup contains two app deployed in local K8s

Orchestrator which execute the workflow
WorkflowsService which register the Workflow and activities
The workflow randomly stuck at running state and dapr side report warning:
execution failed with a recoverable error and will be retried later: failed to invoke activity actor '596675025#1' to execute '': rpc error: DeaglineExceeded desc = context deadline exceeded"

@cgillum would you be able to create a proposal for this?

Proposal created: https://github.com/dapr/dapr/issues/6073

Upon further investigation, I decided that we don't need the proposal that I previously opened.
We can fix this issue by simply having our two actor types include 1) the name of the app and 2) the namespace (if available). There will be two types of actors registered per app. The sidecar always knows which app a workflow or activity actor is assigned to, so it avoids the problem of trying to process workflow data on the wrong app.
With this simple change, we remove the constraint that there can only be one workflow app per cluster.


Fix retain replicas field type (was bool, should be boolean)

@shashidharatd This bug was discovered in testing against openshift based on kube 1.13, and reveals that our use of an old version of kubebuilder has also influenced the version of kube-apiserver that we are testing against in a managed test run (since we source it from the kubebuilder archive and the version we uses supplies 1.12).  This adds motivation to keeping pace with kubebuilder releases so that we're not †esting against an old version of kube.  I've also filed an issue (#699) to track updating CI to use a more recent release of kube (likely 1.13 until kind and kubebuilder update to 1.14).

Thanks @marun for the fix.
Agree with keeping pace with projects which we depend on.
/lgtm


Introduce usage reporting (aka telemetry) in Antrea

Describe what you are trying to solve
As Project Antrea matures and we make our way towards a v1.0 release, it would be good to have a way to collect statistics about how Antrea is used in practice, and use these statistics to make informed decisions. These are some important questions for which we don't have much data today:

which features are the most widely used and should be prioritized?
have a sufficient amount of users experimented with a specific Alpha feature?
are users frequently disabling a specific Beta feature?
at which scale is Antrea typically deployed?
is Antrea often used in the cloud?
...

Describe the solution you have in mind
I would like to implement a mechanism in Antrea through which each cluster running Antrea could periodically export anonymized data about the cluster, configuration parameters for Antrea, etc. The data would be collected at a central location, and, once aggregated, would be available for the Antrea community to review. Other projects typically refer to this as "telemetry" or "usage reporting".
Some CNCF landscape projects which already implement such a mechanism:

Calico: each Felix agent exports telemetry information (https://github.com/projectcalico/felix/tree/master/usagerep)
Spinnaker: usage statistics are collected after each execution (https://spinnaker.io/community/stats/)

We should adopt the following principles:

Fully anonymized data: we should not collect anything that can identify the user and we should not store the IP address which was used to send the telemetry data, nor any geolocation data
Transparency: collecting telemetry data is very useful to open-source projects, but is not always popular; we should document exactly what we are collecting and why, and aggregated data (e.g. which fraction of clusters is running version X of Antrea) should be made publicly available to the Antrea community
No impact on users' clusters: usage reporting should use a minimum amount of resources (compute & network resource); any error specific to usage reporting should be logged at a high verbosity level (e.g. connectivity issue to the collection web service)
Users should be able to easily opt-out: while I believe that telemetry should eventually be enabled by default if we ever hope to collect a representative amount of data, there should be an easy way to opt-out of it
Data retention: this may not be too much of a concern with fully anonymized data, but I don't think there is a reason to retain individual usage reports for too long (e.g. more than 90 days); aggregated data can be downloaded and saved periodically to provide insights about long-term usage trends

Ideally, the project should follow the Linux Foundation Telemetry Data Collection and Usage Policy
Describe how your solution impacts user flows
Usage reporting should not affect users beyond the following scenarios:

While usage reporting feature is in "alpha" stage (should span at least one minor release), user can choose to opt-in by editing the Antrea YAML manifest if they want to help with development of the feature
After the feature graduates from "alpha" stage, user can choose to opt-out by editing the Antrea YAML manifest

Describe the main design/architecture of your solution

A cluster UUID is generated when Antrea is first deployed to a cluster and "persisted" to a ConfigMap; this UUID will be used to uniquely identify the cluster in collected usage reports; nothing else will identify the cluster and the UUID will be generated randomly
Usage reports are sent periodically, once every 24 hours
Usage reports are sent only by the Controller (and not by every Agent) to reduce the amount of egress network traffic; I believe all useful information is already available to the Controller (see example usage report below), but if extra information ever needs to be collected from the Agents (unlikely), we can define a new internal API between Agents and Controller
Usage reports are simple JSON objects, sent to https://telemetry.antrea.io/report using HTTP POST
Usage reports are collected on Google Cloud by a Cloud Function and streamed to a BigQuery dataset. This was strongly inspired by how Spinnaker collects telemetry data (https://github.com/spinnaker/stats).
Google DataStudio can be used to generate reports from the collected data, which can be shared by maintainers with the larger Antrea community

I intend to create 3 distinct PRs:

[ ] the first PR will make all the required changes on the Antrea Controller side, with the appropriate unit tests
[ ] the second PR will add comprehensive documentation about the data collected and its use
[ ] the third and last PR will add the code for the Cloud Function implementation and the cloud configuration file (cloudbuild.yaml) used to deploy the Cloud Function to Google Cloud.

Test plan

Go unit tests will be added to test the usage reporting logic in the Controller
In addition to https://telemetry.antrea.io/report, another HTTP endpoint will be available to maintainers for testing and will be used for staging before rolling out changes to the collection server to production

Alternative solutions that you considered
I researched AWS as an alternative to Google Cloud, as we already use AWS products (e.g. S3) in the context of Antrea. In particular I evaluated AWS Athena as an alternative to BigQuery and QuickSight as an alternative to DataStudio. In the end, I decided to opt for Google Cloud for the following reasons:

ease of use (probably subjective)
pricing: QuickSight requires a paid subscription unlike DataStudio
Spinnaker uses Google Cloud and I was able to take inspiration from them

Additional context
This is what a JSON usage report (collected from one of my test clusters) would look like:
{
   "antreadeploymenttime":"2020-12-23T02:29:28Z",
   "clusteruuid":"5a2de5fc-de84-49ab-842e-42574b53652a",
   "clusterinfo":{
      "networkpolicies":{
         "numnetworkpolicies":"0.0",
         "numantreaclusternetworkpolicies":"0.0",
         "numtiers":"0.0",
         "numantreanetworkpolicies":"0.0"
      },
      "ipfamilies":[
         "IPv4"
      ],
      "k8sversion":"v1.20.1",
      "numpods":"11.0",
      "nodes":[
         {
            "containerruntimeversion":"docker://20.10.1",
            "osimage":"Ubuntu 18.04.3 LTS",
            "kubeletversion":"v1.20.1",
            "hasipv6address":false,
            "architecture":"amd64",
            "kubeproxyversion":"v1.20.1",
            "operatingsystem":"linux",
            "hasipv4address":true,
            "kernelversion":"4.15.0-72-generic"
         },
         {
            "containerruntimeversion":"docker://20.10.1",
            "osimage":"Ubuntu 18.04.3 LTS",
            "kubeletversion":"v1.20.1",
            "hasipv6address":false,
            "architecture":"amd64",
            "kubeproxyversion":"v1.20.1",
            "operatingsystem":"linux",
            "hasipv4address":true,
            "kernelversion":"4.15.0-72-generic"
         }
      ],
      "k8sdistribution":"Unknown",
      "numnodes":"2.0"
   },
   "isreleased":false,
   "fullversion":"v0.12.0-dev-0d3121e3",
   "controllerconfig":{
      "enableprometheusmetrics":true,
      "featuregates":[
         {
            "enabled":true,
            "name":"AntreaProxy"
         },
         {
            "enabled":true,
            "name":"Traceflow"
         },
         {
            "enabled":false,
            "name":"FlowExporter"
         },
         {
            "enabled":false,
            "name":"NetworkPolicyStats"
         },
         {
            "enabled":false,
            "name":"AntreaPolicy"
         }
      ]
   },
   "agentconfig":{
      "tunneltype":"geneve",
      "nosnat":false,
      "trafficencapmode":"encap",
      "enableprometheusmetrics":true,
      "enableipsectunnel":false,
      "ovsdatapathtype":"system",
      "featuregates":[
         {
            "enabled":false,
            "name":"FlowExporter"
         },
         {
            "enabled":false,
            "name":"NetworkPolicyStats"
         },
         {
            "enabled":false,
            "name":"AntreaPolicy"
         },
         {
            "enabled":true,
            "name":"AntreaProxy"
         },
         {
            "enabled":true,
            "name":"Traceflow"
         }
      ]
   },
   "version":"v0.12.0-dev"
}

The LF link is broken.  Looks like it should probably be: https://www.linuxfoundation.org/telemetry-data-collection-and-usage-policy/

The LF link is broken.  Looks like it should probably be: https://www.linuxfoundation.org/telemetry-data-collection-and-usage-policy/

Thanks @tpepper, maybe the link changed since I opened the issue. I edited the issue to use the link you provided.

Thanks @tpepper, maybe the link changed since I opened the issue. I edited the issue to use the link you provided.

At this point we have decided to postpone adding telemetry support in Antrea. We have the following concerns:

because of Antrea "installation" mechanism, there is no good way to inform users about data being collected and let them opt-in / opt-out as they deploy Antrea
if telemetry is opt-out, there may be a negative reception from the community, not to mention concerns about respecting privacy laws
if telemetry is opt-in, too little data will be collected, and it will not be representative; it is unlikely that users will go out of their way to enable telemetry in the Antrea configuration, even if they would be ok with sending usage data to help the project

At this point we have decided to postpone adding telemetry support in Antrea. We have the following concerns:

because of Antrea "installation" mechanism, there is no good way to inform users about data being collected and let them opt-in / opt-out as they deploy Antrea
if telemetry is opt-out, there may be a negative reception from the community, not to mention concerns about respecting privacy laws
if telemetry is opt-in, too little data will be collected, and it will not be representative; it is unlikely that users will go out of their way to enable telemetry in the Antrea configuration, even if they would be ok with sending usage data to help the project


Custom Loader is slow due to debug message[bug]

Describe the bug
Loading of files using a custom loader is particularly slow because of a debug message that forces the file contents to be concatenated into a string
To Reproduce
Create a custom loader and use the existing BaseLoader (from dynaconf.loaders.base import BaseLoader) class to load the file

Having the following app code:

 Code
    for file in candidate_file_names:
        found_file = obj.find_file(file)

        if found_file:
            break
    else:
        return

    loader = BaseLoader(
        obj=obj,
        env=env,
        identifier="json",
        extensions=JSON_EXTENSIONS,
        file_reader=json_reader,
        string_reader=json_reader,
    )

    loader.load(filename=found_file, key=key, silent=True)
...

Expected behavior
The execution time should be much lower, in some cases (e.g. 20mb files) it takes more than twice the expected time
Additional context
The log message is the following:

 Code
dynaconf/loaders/base.py (BaseLoader class, lines 154 to 161)
self.obj.logger.debug(
    "{}_loader: {}[{}]{}".format(
        self.identifier,
        os.path.split(source_file)[-1],
        env,
        list(data.keys()) if is_secret else data,
    )
)
...

Fixed in master #362


SQL: error when reading postgres table with timezone

Left over issue from #6292
I have a postgresql table with a column with type timestamp with time zone. Just reading this table (sql.read_sql_table("everyaware_by_passage", engine)) did not work, because of a datetime column: ValueError: Tz-aware datetime.datetime cannot be converted to datetime64 unless utc=True.
I can import it with read_sql, and there the imported datetime column is of type datetime.datetime with tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=120, name=None)
Full error traceback (and it seems an issue in pandas itself):
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-9-13ac3c111575> in <module>()
----> 1 sql.read_sql_table("everyaware_by_passage", engine)

c:\users\vdbosscj\scipy\pandas-joris\pandas\io\sql.pyc in read_sql_table(table_name, con, meta, index_col, coerce_float, parse_dates, columns)
    268     table = pandas_sql.read_table(
    269         table_name, index_col=index_col, coerce_float=coerce_float,
--> 270         parse_dates=parse_dates, columns=columns)
    271
    272     if table is not None:

c:\users\vdbosscj\scipy\pandas-joris\pandas\io\sql.pyc in read_table(self, table_name, index_col, coerce_float, parse_dates, columns)
    795         table = PandasSQLTable(table_name, self, index=index_col)
    796         return table.read(coerce_float=coerce_float,
--> 797                           parse_dates=parse_dates, columns=columns)
    798
    799     def read_sql(self, sql, index_col=None, coerce_float=True,

c:\users\vdbosscj\scipy\pandas-joris\pandas\io\sql.pyc in read(self, coerce_float, parse_dates, columns)
    609             data, columns=column_names, coerce_float=coerce_float)
    610
--> 611         self._harmonize_columns(parse_dates=parse_dates)
    612
    613         if self.index is not None:

c:\users\vdbosscj\scipy\pandas-joris\pandas\io\sql.pyc in _harmonize_columns(self, parse_dates)
    691                 if col_type is datetime or col_type is date:
    692                     if not issubclass(df_col.dtype.type, np.datetime64):
--> 693                         self.frame[col_name] = _handle_date_column(df_col)
    694
    695                 elif col_type is float:

c:\users\vdbosscj\scipy\pandas-joris\pandas\io\sql.pyc in _handle_date_column(col, format)
     52             return to_datetime(col, coerce=True, unit=format)
     53         else:
---> 54             return to_datetime(col, coerce=True, format=format)
     55
     56

c:\users\vdbosscj\scipy\pandas-joris\pandas\tseries\tools.pyc in to_datetime(arg, errors, dayfirst, utc, box, format, coerce, unit, infer_datetime_format)
    313         return arg
    314     elif isinstance(arg, Series):
--> 315         values = _convert_listlike(arg.values, False, format)
    316         return Series(values, index=arg.index, name=arg.name)
    317     elif com.is_list_like(arg):

c:\users\vdbosscj\scipy\pandas-joris\pandas\tseries\tools.pyc in _convert_listlike(arg, box, format)
    306                 return DatetimeIndex._simple_new(values, None, tz=tz)
    307             except (ValueError, TypeError):
--> 308                 raise e
    309
    310     if arg is None:

ValueError: Tz-aware datetime.datetime cannot be converted to datetime64 unless utc=True

Just run into this bug. Another minimal way to workaround this would be to make the date_time handling for "known" Datetime columns obey the parse_dates option. At the moment parse_dates only affects non-datetime columns that you might want to force interpreted as datetimes. Setting it to false doesn't affect handling of columns which already have Datetime type so to_datetime is called on them, triggering the bug. If setting parse_dates=False meant that to_datetime was never called you would get an object column you'd have to handle manually, but you wouldn't get this bug. Not as nice as it actually working but at least gives you the option of a workaround...

Running into this bug a lot right with handling DST-enabled datetimes, any idea when this will be merged?

There is no perfect solution to this bug which is why I suspect no solution has been merged.
I've updated the pull request with my 4th and final proposal to fix this bug, and it is the simplest and I believe the correct fix.  Up to the maintainers if they want to merge it, but this is a classic "perfect is the enemy of the good" bug and I don't like those.  Rationale for this final proposal will be in the pull request.

Until this is fixed an easy workaround might be to use read_sql_query and include AT TIME ZONE 'UTC' in your query. You can then localize to whatever timezone you need in pandas.

Closed by #7364


[Bug] When there is a single point on the chart then the tooltip is not working

Version
5.2.2
Link to Minimal Reproduction
https://echarts.apache.org/examples/en/editor.html?c=scatter3D-dataset&gl=1&version=5.2.2
Steps to Reproduce
I added the link to play scattered 3d chart.
Then After I am attaching the file which option data, you can set this option data and get the chart expected,
github echart bug log.txt
then hove the point on the graph but is not showing any tool tip,
but if you add any other point in the
chart like [1,'2023-02-01 01:01:01',3]
then it start showing the tool tip.
Current Behavior
It is not showing the tooltipe for single point
Expected Behavior
It should show the tool tip even there is a single point.
Environment
- OS:window 10 , ubuntu 20.04.02 LTS
- Browser: Chrome
- Framework:Angular js

Any additional comments?
{
"title": {
"text": "Cable Tx Google 2023-2-21  -  2023-3-2",
"left": 10
},
"tooltip": {
"show": true,
"position": "right"
},
"toolbox": {
"right": "2%",
"feature": {
"restore": {
"title": ""
},
"saveAsImage": {
"title": ""
}
}
},
"grid3D": {
"boxWidth": 250,
"boxDepth": 250,
"boxHeight": 100,
"height": "90%",
"width": "100%",
"top": "top",
"viewControl": {
"distance": 300,
"alpha": 0
},
"splitArea": {
"show": true
}
},
"xAxis3D": {
"type": "value",
"name": "Length(m)",
"nameGap": 40
},
"yAxis3D": {
"type": "category",
"name": "Date",
"nameGap": 40
},
"zAxis3D": {
"type": "value",
"name": "Amp(pC)",
"nameGap": 40,
"axisLable": {
"margin": 25
}
},
"dataset": {
"dimensions": [
"Length(m)",
{
"name": "Date",
"type": "time"
},
"Charge(pC)"
],
"source": [
[
0,
"2023-03-1 09:48:22",
0
]
]
},
"series": [
{
"type": "scatter3D",
"symbolSize": 2.5,
"encode": {
"x": "Length(m)",
"y": "Date",
"z": "Charge(pC)",
"tooltip": [
0,
1,
2
]
}
}
]
}
This is my option value if there is no file attached

duplicate of https://github.com/ecomfe/echarts-gl/issues/342

up, please fix this


[SPARKTA-502] Compile error in Spark-1.4

Given a user following the documentation
When run the command mvn clean package -Ppackage -Pspark-1.4
Then it should generate the packages properly
Given a user following the documentation
When run the command mvn clean package -Ppackage -Pspark-1.5
Then it should generate the packages properly

If I understood well only you can add a source path depending of the version. Then I think that is correct @danielcsant  approximation.
The only possibility that i can see is to have two source folders: one with the code of the version and a "common" source folder with code shared between versions, but I think that is too complex.
+1

Exactly @anistal. We can reduce the duplicated code by delegating the troublesome code to a scala class which could be located in the different versions of Spark but since next version Spark 1.4 is going to be deprecated in Sparta I believe this approach is a bit over engineering. What do you think @acemilio ?

I agree. OverEngineeringException!!
Additionally, @dvallejo thinks that it could be an elegant way to use cake pattern in order to inject the correct implementation based on spark version.
Furthermore, @danielcsant says @smola 's got a different approach too. Talking with him would be a good idea.
+1

:shipit:

Comment accepted. Will treat it ASAP

Squashing and checks in progress.


Chore: Integration tests don't represent real request behavior

Bug report
The current integration tests represent only the internal behavior such as calling ops ad the response from them. But it doesn't not simulate the actual Client request.

Closed due to recent work with #100


Wrong rain counter values

          Unfortunately i think there is a bit of an issue with the decoder! I decided to test the device by adding a little water to the rain counter, I made it tip four times. the 'rain_mm' value went from 910.0mm to 910,7999 (perfectly normal), the others ......

air_temp_c: 2.5
humidity: 93
id: 939865349
rain_day: -33619248
rain_hr: -107481312
rain_mm:<PHONE_NUMBER>929688
rain_mon: -33619248
rain_week: -33619248
status: object
supply_v: 284
wind_avg_meter_sec: 0
wind_direction_deg: 354
wind_gust_meter_sec: 0
not sure whats going on here!, maybe you can shed a little light?
Originally posted by @mczakk in https://github.com/matthias-bs/BresserWeatherSensorTTN/issues/38#issuecomment-1402283170

Is this data from the serial log or from the LoRaWAN/MQTT side? Did you see if the node retrieves the time correctly?

this data is ffrom the ttn console, so post decoder,
this is a grab from the serial output:
19:55:02.660 -> [D][WeatherSensor.cpp:219] getMessage(): [SX1276] R [D4] RSSI: -69.5
19:55:06.501 -> [D][WeatherSensor.cpp:238] getMessage(): [SX1276] Receive failed: [0]
19:55:14.651 -> [D][WeatherSensor.cpp:219] getMessage(): [SX1276] R [D4] RSSI: -69.5
19:55:14.651 -> [D][BresserWeatherSensorTTN.ino:1088] setup(): Receiving Weather Sensor Data o.k.
19:55:14.651 -> [D][BresserWeatherSensorTTN.ino:600] setup(): mySensor.setup() - done
19:55:14.651 -> [D][BresserWeatherSensorTTN.ino:891] NetGetSessionState(): o.k.
19:55:14.651 -> [D][BresserWeatherSensorTTN.ino:918] GetAbpProvisioningInfo():
19:55:14.684 -> [D][BresserWeatherSensorTTN.ino:891] NetGetSessionState(): o.k.
19:55:14.684 -> [D][BresserWeatherSensorTTN.ino:789] NetJoin():
19:55:14.684 -> [D][BresserWeatherSensorTTN.ino:604] setup(): myLoRaWAN.setup() - done
19:55:14.684 -> [D][BresserWeatherSensorTTN.ino:1160] getVoltage(): Voltage = 284mV
19:55:14.684 -> [D][BresserWeatherSensorTTN.ino:1177] getVoltage(): Voltage = 284mV
19:55:14.684 -> [D][BresserWeatherSensorTTN.ino:1285] doUplink(): --- Uplink Data ---
19:55:14.718 -> [D][BresserWeatherSensorTTN.ino:1289] doUplink(): Air Temperature:     0.8 °C
19:55:14.718 -> [D][BresserWeatherSensorTTN.ino:1290] doUplink(): Humidity:            96   %
19:55:14.718 -> [D][BresserWeatherSensorTTN.ino:1291] doUplink(): Rain Gauge:         910.8 mm
19:55:14.718 -> [D][BresserWeatherSensorTTN.ino:1292] doUplink(): Wind Speed (avg.):    0.0 m/s
19:55:14.718 -> [D][BresserWeatherSensorTTN.ino:1293] doUplink(): Wind Speed (max.):    0.0 m/s
19:55:14.751 -> [D][BresserWeatherSensorTTN.ino:1294] doUplink(): Wind Direction:     216.0 °
19:55:14.751 -> [D][BresserWeatherSensorTTN.ino:1295] doUplink(): sensor_id: 939865349
19:55:14.751 -> [D][BresserWeatherSensorTTN.ino:1320] doUplink(): Supply  Voltage:    284   mV
19:55:14.751 -> [D][BresserWeatherSensorTTN.ino:1323] doUplink(): Battery Voltage:    284   mV
19:55:14.751 -> [D][BresserWeatherSensorTTN.ino:1339] doUplink():
19:55:14.784 -> [D][BresserWeatherSensorTTN.ino:1428] doUplink(): Rain past 60min:      0.0 mm
19:55:14.784 -> [D][BresserWeatherSensorTTN.ino:1429] doUplink(): Rain curr. day:       0.0 mm
19:55:14.784 -> [D][BresserWeatherSensorTTN.ino:1430] doUplink(): Rain curr. week:      0.0 mm
19:55:14.784 -> [D][BresserWeatherSensorTTN.ino:1431] doUplink(): Rain curr. month:     0.0 mm
19:55:14.784 -> [I][BresserWeatherSensorTTN.ino:1448] doUplink(): Payload length: 38
19:55:14.817 -> [I][BresserWeatherSensorTTN.ino:1449] doUplink(): sensor_id: 939865349
19:55:19.939 -> [D][BresserWeatherSensorTTN.ino:881] NetSaveSessionState():
19:55:19.939 -> [D][BresserWeatherSensorTTN.ino:881] NetSaveSessionState():
19:55:19.939 -> [D][BresserWeatherSensorTTN.ino:801] NetTxComplete():
which would sugest that the issue is with the decoder?

Would it help if I added you as a collaborator on my ttn application?

We missed a small but important detail during our little weekend-hackathon... ;-)
You are sending battery voltage and supply voltage in your uplink message, but the decoder expects only one value (supply voltage). This has the effect, that the bytes interpreted as the four rain counter values are each two bytes off to the begin of the message.
To fix this, just insert battery_v (with type uint16) after supply_v in the decode() function of ttn_decoder_fp.js.
(I still have to sort out which input gives battery_v and which one gives supply_v, though.)

Fixed in https://github.com/matthias-bs/BresserWeatherSensorTTN/commit/a0157f77734b3e0eacd9c07825cbf37aeadb1f19

which would suggest that the issue is with the decoder? BTW, timestamps are good :)
The timestamps in this log are from your PC, but shortly after wake-up (and after initializing/re-synchronizing the real-time clock from the network), the sketch prints the time and date - this is what I was referring to.

The RainGauge class needs the time and date - it should not do anything if the initialization failed, but my first suspicion was that there were a bug in that part.

trying new decoder_basic.js now,  but there is a typo in your commiit.
line 222, missing comma aftter 'battery_v'
:)

OK< now 'rain_mm' is 0
all other rain values are -1
if you are e matthias-bs on ttn i have added you as a collaborator on my application, if not I've added a random stranger
the application is called Bresser_ttn

seems to be working now, will test tomorrow by tripping the rain bucket :)

not sure if this is the right place for this, but there is definetely something awry with the decoder!
screenshot1 - raw data from bresser as decoded by rtl_433:

screenshot 2 node_red output for 13:10-13:12 (decoded by rtl_433 for 13:10 result, by ttn for 13:12 result)

scrfeenshot3: aws timestream for same period

As you can see, at 13:22:35 and 13:12:37 the ttn decoder decoded the signal as battery_ok false and rain and humidity as 0 whereas the rtl_433 didnt see any change in battery state or rain value over the same period!

Of course reception results can be different between rtl_433 and this project.

how do i set the configured time to ensure two messages received?

The default for WEATHERSENSOR_TIMEOUT is 180 [seconds], that's pretty long.
Yes, with the 5-in-1 things are much easier!

Here are some hints about improving range/signal quality:
https://github.com/matthias-bs/BresserWeatherSensorReceiver/wiki#radio-transceiver-range

Here are some hints about improving range/signal quality: https://github.com/matthias-bs/BresserWeatherSensorReceiver/wiki#radio-transceiver-range

I think the reception will be better in the feild, in my bench setup the antenna is just on my desk, and the bresser is 10-15 meters away, outside(obvs!), whereas in the field the bresser will be about 15m away with the antenna inside the plastic gateway assembly box. I guess we'll just have to try it and find out!


"feature~transition-drawable-support-SNAPSHOT" not found

Got an error today syaing that com.github.hdodenhof:CircleImageView:feature~transition-drawable-support-SNAPSHOT cannot be found.
Anyone else seeing this?

The feature-transition-drawable-support branch has been deleted after it was merged into master.
You can use com.github.hdodenhof:CircleImageView:master-SNAPSHOT instead.

Appreciate the quick reply!


OK to do case-insensitive checks on the OrderedGems cop?

I love the new OrderedGems cop, it's a fantastic idea!
However, the OrderedGems cop uses the < sign to perform its comparison, and I have one pesky dependency that starts with a capital letter (the wonderful-yet-inconsistently-named StreetAddress gem). Since 'a' < 'Z' #=> false, it wants to sort this dependency at the top of my Gemfile. Would it be acceptable to write a PR that performs a case-insensitive comparison?

Expected behavior
The OrderedGems cop doesn't consider case when checking the Gemfile.
Actual behavior
The OrderedGems cop considers case when checking the Gemfile.
Steps to reproduce the problem
# in Gemfile
source 'https://rubygems.org'
gem 'sinatra'
gem 'StreetAddress'

rubocop
Inspecting 1 file
C

Offenses:

Gemfile:4:1: C: Gem StreetAddress should appear before sinatra in their gem group.
gem 'StreetAddress'
^^^^^^^^^^^^^^^^^^^

1 file inspected, 1 offense detected

RuboCop version
$ rubocop -V
0.46.0 (using Parser <IP_ADDRESS>, running on ruby 2.3.1 x86_64-darwin16)

Make sense to me. Although I'd also suggest to the gem author to rename this, so it would match common conventions.


Get_New_Access_Token - Error

I was happily running your container for some month now, but it just stopped working. Looks like it couldn't renew the access token?
It throws  the following error:
docker pull thisisarpanghosh/fitbit-fetch-data:latest && docker compose run --rm fitbit-fetch-data
latest: Pulling from thisisarpanghosh/fitbit-fetch-data
Digest: sha256:4a1ec949eef42b667b9601e37e2afe4b7a2c7c32d761600650f8c931144905aa
Status: Image is up to date for thisisarpanghosh/fitbit-fetch-data:latest
docker.io/thisisarpanghosh/fitbit-fetch-data:latest
Traceback (most recent call last):
  File "/app/Fitbit_Fetch.py", line 163, in <module>
    ACCESS_TOKEN = Get_New_Access_Token(client_id, client_secret)
  File "/app/Fitbit_Fetch.py", line 157, in Get_New_Access_Token
    access_token, refresh_token = load_tokens_from_file()
  File "/app/Fitbit_Fetch.py", line 152, in load_tokens_from_file
    tokens = json.load(file)
  File "/usr/local/lib/python3.10/json/__init__.py", line 293, in load
    return loads(fp.read(),
  File "/usr/local/lib/python3.10/json/__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "/usr/local/lib/python3.10/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/local/lib/python3.10/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

I'm using the latest image with this compose:
services:
  fitbit-fetch-data:
    image: thisisarpanghosh/fitbit-fetch-data:latest
    container_name: fitbit-fetch-data
    restart: unless-stopped
    volumes:
      - /srv/fitbit_dashboard/logs:/app/logs # logs folder should exist and owned by user id 1000
      - /srv/fitbit_dashboard/tokens:/app/tokens # tokens folder should exist and owned by user id 1000
      - /etc/timezone:/etc/timezone:ro
    environment:
      - FITBIT_LOG_FILE_PATH=/app/logs/fitbit.log
      - TOKEN_FILE_PATH=/app/tokens/fitbit.token
      - OVERWRITE_LOG_FILE=True
      - INFLUXDB_VERSION=1 # supported values are 1 and 2
      - INFLUXDB_BUCKET=your_bucket_name_here # for influxdb 2.x
      - INFLUXDB_ORG=your_org_here # for influxdb 2.x
      - INFLUXDB_TOKEN=your_token_here # for influxdb 2.x
      - INFLUXDB_URL=your_influxdb_server_location_with_port_here # for influxdb 2.x
      - INFLUXDB_HOST=influxdb # for influxdb 1.x
      - INFLUXDB_PORT=8086 # for influxdb 1.x
      - INFLUXDB_USERNAME=fitbit_user # for influxdb 1.x
      - INFLUXDB_PASSWORD=fitbit_password # for influxdb 1.x
      - INFLUXDB_DATABASE=fitbit_database # for influxdb 1.x
      - CLIENT_ID=XXX # Change this to your client ID
      - CLIENT_SECRET=XXX # Change this to your client Secret
      - DEVICENAME=PixelWatch2 # Change this to your device name - e.g. "Charge5"
      - LOCAL_TIMEZONE=Automatic # set to "Automatic" for Automatic setup from User profile (if not mentioned here specifically).
    networks:
      - fitbit_dashboard
  influxdb:
    image: influxdb:1.8
    container_name: influxdb
    restart: unless-stopped
    environment:
      - INFLUXDB_DB=fitbit_database
      - INFLUXDB_USER=fitbit_user
      - INFLUXDB_USER_PASSWORD=fitbit_password
    ports:
      - 8086:8086
    volumes:
      - /srv/fitbit_dashboard/influxdb:/var/lib/influxdb
    networks:
      - fitbit_dashboard
  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    restart: unless-stopped
    volumes:
      - /srv/fitbit_dashboard/grafana:/var/lib/grafana
    ports:
      - 3000:3000
    networks:
      - fitbit_dashboard
      - services
networks:
  fitbit_dashboard: {}
  services:
    external: true

I tried to register a new application, like i did the first. But the error is the same with the new ID and Secret.
Do you have any hint where I could take a look? The fitbit.token file is empty ... Thanks!

The fitbit.token file is empty

Hi @rantanlan, I think the problem is the contents of the file is wiped whereas the file is still present, so that is why it's not going back to registration mode.
Please follow the instructions to get a new refresh token (which is valid now) from the fitbit applications website. Stop and remove the running instances of the container. Make sure in the mapped path /srv/fitbit_dashboard/tokens, the fitbit.token file is not present (remove the empty file you have from the folder). Then try docker compose run --rm fitbit-fetch-data to initialize the process, it should ask you for the refresh token like it did the first time. Once that is set up, you can stop that container and run it in regular mode by docker compose up in the folder containing the docker compose file.
Let me know if that helps. Thank you.

Thanks, just deleting the fitbit.token did the job (should have tried that before reporting, sorry.) Thanks!

@rantanlan No worries, Thank you for reaching out to me! I am happy to help. I knew just deleting the file would be enough, but just wanted to give a comprehensive guide to ensure it works for you.
Have a good one and enjoy your daily/yearly stats from your Fitbit without a subscription fee!


Move the build output to dist folder and fix unnecessary files getting published to npm

@deepakjosp  _a
cc: @josephmathew900

Moving this issue from the current week's milestone because issue #1101 in neeto-commons-frontend will take some time to complete.


[Impeller] Float samplers can get re-ordered compared to SkSL

When i looked at this last I thought that this was handled correctly via our uniform mapping, but @zanderso has shared a few places where that isn't the case. Need to investigate what is different about these and whether or not we should revist uniform re-mapping for floats.

I believe there's still a dependence on use order. @jonahwilliams it shows up in the glowing text example in Impeller on Metal that I sent you awhile back. Maybe it's only cropped up after https://github.com/flutter/engine/pull/39147 and https://github.com/flutter/engine/pull/39198 --- I haven't bisected yet.

Those PRs only adjusted sampler use order - are you seeing float re-ordering? I'd expect them to be re-ordered but the mapping data should account for it. We don't correctly handle uniforms getting optimized out yet.

Hmm. Shoot. This isn't repro'ing for me anymore. Sorry for the false alarm. I think I probably wasn't being sufficiently paranoid when swapping among a few different framework and engine versions...

I figured out that this wasn't repro'ing for me earlier today because I was swapping the declaration order of uniforms in the shader, but not swapping the indices used to set the uniforms in the Dart code. That is, the uniforms were set by the Dart code in use-order, and so changing the declaration order in the shader didn't trigger the issue. So, sadly I have to re-open this =(

Fixed for real this time!


Inherit from Puppet

As stated in issues: https://github.com/PuppetJs/puppet-polymer-client/issues/2 and  https://github.com/PuppetJs/puppet-polymer-client/issues/8, there is some incompatibilities with the original puppet-client, which was inheriting from Puppet.
They can be fixed if puppet-polymer-client inherits from Puppet as well.
@tomalec proposes to inherit puppet-polymer-client's prototype from Puppet's prototype if I understand correctly.

This should automatically fix #3 if done property.

Assigning to @joozek78. Please follow the development instructions in https://github.com/PuppetJs/puppet-polymer-client#development

While discussing this with @joozek78 and @aloscha, we decided that OP contradicts https://github.com/PuppetJs/PuppetJs/issues/85#issuecomment-221882278. The latter is much more important.
This is a pity, since @joozek78 already has a solution for OP, but let's not merge it and try fixing PuppetJs issue 85 instead.

How it contradicts?

The idea is that puppet-polymer-client should wrap PuppetJs, not pretend that it is the same thing. Otherwise we ask for problems like this https://github.com/PuppetJs/PuppetJs/issues/85
Similarly how, these components are wrappers: https://github.com/Juicy/juicy-markdown, https://github.com/Juicy/juicy-ace-editor/blob/gh-pages/juicy-ace-editor.html

Discussed this again with @joozek78, now after he finished work on https://github.com/PuppetJs/PuppetJs/issues/85, we still think that work done on this is not worth merging. We are keeping the https://github.com/PuppetJs/puppet-polymer-client/tree/extend_puppet branch for future reference.


Support slice in interactive

Part 2 of the solution for https://github.com/holoviz/hvplot/issues/771.
It needs https://github.com/holoviz/holoviews/pull/5352 to work.
The panel check is removed because panel is already imported at the top. Therefore, I think the check is unnecessary, but correct me if I'm wrong.

test_interactive_slice is failing on Python 3.6. In these jobs the HoloViews version is 1.14.8 which doesn't yet have the fix to support slices that was added in https://github.com/holoviz/holoviews/pull/5352 and made available in HoloViews 1.15.1. @Hoxbro could you a guard checking HoloViews version after iff isinstance(op_arg, slice): and raising an error if it's too old, and skip that test for older HoloViews version?


posix: timer: use async pthread cancellation

Previously, Zephyr's POSIX API did not differentiate between deferred and asynchronous pthread cancellation. In fact all pthread cancellation was asynchronous. According to the spec, all pthreads should be created with deferred cancellation by default.

[!NOTE]
PTHREAD_CANCEL_ASYNCHRONOUS means cancel asynchronously with respect to cancellation points (synchronously with respect to  pthread_cancel(), which is perhaps unintuitive)

The POSIX timer relied on this non-standard convention.
Oddly, this change prevents what would have otherwise been a regression that would have been caused by fixing pthread behaviour (in #67223).
We are effectively uncovering bugs which were probably always present in the pthread.c and timer.c implementations going back quite a few years.
Fixes https://github.com/zephyrproject-rtos/zephyr/issues/67870
Fixes #67874
Additionally:

remove non-conformant error condition when using a clock other than CLOCK_MONOTONIC
improve struct sigevent and union sigval alignment / padding

This is blocking https://github.com/zephyrproject-rtos/zephyr/pull/67223


Configuration generates invalid yaml for multiline and object content

What happened:
My release failed with
ocm-system   dmi-broker                           10h   False   Could not load chart: cannot load values.yaml: error converting YAML to JSON: yaml: line 23: could not find expected ':'
Each of my dictionary and multiline string values were improperly indented.  In the screenshot below you can see on the right hand side my file after Configuration was applied.  Note that certs.rs.crt is improperly indented.  On the left is a copy that I fixed 'by hand' and which is parsable.

The values.yaml in the dir resource in my component version contains
certs:
 intermediate: unset
 root: unset
 ingress:
  crt: unset
  key: unset
 rs:
  intermediate: unset
  root: unset
  crt: unset
  key: unset

My config.yaml in my component version, that is my config for the ocm controller, contains
defaults
configuration:
  defaults:
    certs:
      rs:
        crt: null

rules
  - value: (( certs.rs.crt ))
    file: dmi-broker/values.yaml
    path: certs.rs.crt

Running the command
kubectl get -n broker configmap dmi-broker -o=yaml | yq  '.data.config'  | yq  -C | less -iR
to look at the content of my configmap that is used in my cluster I see the following

Image below shows the 'pipeline' I have defined for the ocm-controller

I believe this is an ocm-controller bug because

values.yaml in the Localization Snapshot is valid, and
data in the ConfigMap is valid, but
values.yaml in the Configuration Snapshot is not valid yaml

What you expected to happen:
I expected the release to work of course :)
How to reproduce it (as minimally and precisely as possible):
I believe you just need to have a rule that is setting a multiline string value or an object value.
Anything else we need to know:
Not that I can think of
Environment:
My ocm-controller was built from this hash of this fork
https://github.com/dee0sap/ocm-controller/tree/228d0be45540590ea51b712d3fb21d2c2082ef72
because I need my quick fix for https://github.com/open-component-model/ocm-project/issues/68

I was able to add to the ocm project a test case which I believe reproduced the problem.  You can see what I added in this PR https://github.com/open-component-model/ocm/pull/734

Think this may be a goccy/go-yaml bug.   Either that or ocm is using replace incorrectly.
https://go.dev/play/p/rfnbY5rbSk9

adding @Skarlso

Yeah, we are just using whateverm OCM does :)

Uwe found the issue in the corresponding YAML library. https://github.com/goccy/go-yaml/issues/447

@dee0 confirmed that with using a certain format as input, the lib produces the wanted output. We'll close this issue now and open a new one, checking for a lib that can handle things better.

Hey @morri-son
Actually I haven't confirmed anything yet.
I just tried a new ocm-controller build with @Skarlso's 'don't marshal primitives' change and I think the ocm-controller is still unusable for me.     This because object data is not stored correctly by the configuration.
Object data is still yielding invalid yaml.  e.g.  I get
  orca_env_stable_values:
 certificate_authority_url: http://example1.com
 deployment: deveaws
 deployment_size: xsmall
 domain: example2.com
 landscape_region: eu12
 org: deveaws
 service_hostname_suffix: .example3.com
 service_kubernetes_hostname_suffix: .example4.com

but it needs to be
  orca_env_stable_values:
    certificate_authority_url: http://example1.com
    deployment: deveaws
    deployment_size: xsmall
    domain: example2.com
    landscape_region: eu12
    org: deveaws
    service_hostname_suffix: .example3.com
    service_kubernetes_hostname_suffix: .example4.com

I have not tried the 'formatting the text the right way' trick for the multiline string data yet.    And I don't know how I can reasonably do that.    In the 'last mile config' we won't know how much indenting is required and in spiff++ I am not seeing a good way to determine and then apply the required amount of indenting.
What I maybe able to do is to use spiff++'s 'asjson' function to double quote the multiline string.    I'll try to give that a shot this weekend.

Uhh. Probably our best option is to switch to yq lib. But it's going to be disruptive.

Hey @Skarlso
Actually it seems like it is pretty easy.  At least if the change is limited to subst.go.
While I have not pushed it up to github yet, I made the change in subst.go last night.    While some of the tests in subst_test.go failed it looked like it was just due to formatting differences in the output.
I plan on taking a closer look at the failures today.   Hopefully I'll be able to resolve them and I'll push my change up to my fork.
Oh, and I think as part of this I want to make sure the tests are covering

My object case that is failing ( need to add something for that )
Updating with yaml sequences, maps, each type of string, at least one non-string scalar and null
Making multiple updates to the same yaml document

Regarding these tesst additions my thinking is

if the first two bullets had been done then we wouldn't be having this problem now.
In my change SubstitutionTarget now has a yqlib CandidateNode instead of an ast.File.   This and the structure of the yqlib API make me think it is necessary to confirm multiple updates are having the desired effect

I didn't say it's hard. It's more like tedious. Also a completely breaking change.

adding @hilmarf and @fabianburth to follow the discussion. We can plan to switch to another lib, but as Gergely mentioned it will be both, requiring changes on implementation as well after that breaking change, on the consumer side...

I even included a simple example on how to use yqlib on the yq repository. https://github.com/mikefarah/yq/issues/2021

You done necesserily need a CandidateNode.

Here https://github.com/open-component-model/ocm/actions/runs/8873092383/job/24358384683?pr=734
I have pushed the changed for switching to yqlib.
The path doesn't need to start with a '.'.   Consider, with goccy the path needed to start with '$.' and the substitution code took care of this under the covers.   So in similar fashion the code I pushed is adding the required '.' under the covers.  So that isn't a breaking change.
Unless consumers are doing something silly like depending on the precise formatting of the output YAML or JSON code they shouldn't care about this change.
And on that note, I switched the tests to use MatchYAML and MatchJSON instead of Equals on strings.   Testing for string equality

Makes the tests fragile as the slightest change to to formatting of the yaml or json breaks the test.  e.g.  { "foo": "bar" } won't match { "foo":  "bar" }
Allows the test to pass when the output is neither valid yaml nor valid json.

Regarding the switch to CandidateNode in the SubstitutionTarget implementation.   This is necessary to efficiently handle multiple updates to the same target.
While I have pushed the changes up and all the existing tests are passing, things I would still like to do before considering this ready for handover to anyone are

Make sure that the test cases I mentioned here are in place
Fix the lint error I see reported
Perform a 'sanity check' review ( I pushed the code up as soon the tests passed but before doing this )

The path doesn't need to start with a '.'. Consider, with goccy the path needed to start with '$.' and the substitution code took care of this under the covers. So in similar fashion the code I pushed is adding the required '.' under the covers. So that isn't a breaking change.

Yes, you can do that in the background, but I would rather not do any "fixing of the yaml path" which is invisible to the user.  Any hidden modification of the yaml path is a problem. I would rather be up-front about what is required to make things work.
Also regarding your implementation, that's almost the same as I wrote, with the expectation that I didn't bother with all the tree parsing. The default all parser can handle all of that and can be re-run as in the example I linked in.

ok folks, then we keep this issue open until we really figured out which way we plan to go in the future, using doccy or anything else, e.g. yg. Once the discussion has finalised, we'll spin up a new issue with the exact steps to be done.

yah, I think this issue is fine. Dan has some great ideas and we can spit-ball in this issue. :)

Thanks :)
As for making debugging easier,

In the log message(s) make it clear what the source of the configuration value is, what the target file is and what the yq expression used is.  Have the message clearly indicate it a yq expression
Provide tooling that lets me extract the source and the target file to disk

Then a can run the yq cli myself to validate whatever substitutions are taking place
Fwiw, this is pretty much what I was doing at the start of this except I was using go playground because I didn't goccy doesn't appear to have a cli.
Actually, elaborating a bit more on what I was doing

I have an Ingress that I add to my cluster and which exposes the registry.   This enabled the next step.
I have a set of shell scripts that use crane to fetch the snapshot contents for a Resource, Localization or Configuration.
After pulling down the images as tgz I would untar the biggest tar file they contained, assuming it contained my helm chart resource
Then I would pass the values.yaml to the yq cli to figure out which file was invalid.    I used the yq cli to make sure my paths were correct.  ( Adding the required  '.' :) )

So I didn't need to maintain my own ingress and extraction scripts and if there log messages that told me what I need to extract and what the expression used was I think that would go a long way to making it so that problems were easier to diagnose.

Uh, it's gone. :D Great.

At least within the context of this ticket, I think I have made all the changes I would like to see in OCM.
This evening I

Added a test case that validates that if destination is yaml style then any substitution that is added doesn't change that ( and fixed the code since it was failign )
Reduced the yqlib verbosity
Addressed the test failure from last night ( by refreshing from main branch )

So from my perspective what is left is

I need to perform a sanity check of what is in the PR
Need to handle any feedback + address any bureaucratic things


Grouping physical devices and virtual machines

As ...
Nelly - Network Engineer
I want ...
Creating groups or projects with devices and virtual machines together.
So that ...
As a system administrators we need create a group with servers in cluster, but all nodes isn't physical.
For example Device redundancy Groups look exactly like that what we need, but isn't possiple add virtual machines
to group.
I know this is done when...
I can imagine, that will be another tab for example like "Projects" and there we will create a project "web-nodes" and will be possible add physical devices and virtual machines to this project.
Optional - Feature groups this request pertains to.

[ ] Automation
[ ] Circuits
[ ] DCIM
[ ] IPAM
[ ] Misc (including Data Sources)
[ ] Organization
[ ] Plugins (and other Extensibility)
[ ] Security (Secrets, etc)
[ ] Image Management
[ ] UI/UX
[ ] Documentation
[ ] Other (not directly a platform feature)

Database Changes
No response
External Dependencies
None

See also #1178.


create_bip21 failing after update to 0.2.7

error: Failed to conduct wallet operation.
Calling it with an amount and description, same way I was doing before update (which was working)

This happened because the amount was too small. This PR clarifies that: https://github.com/MutinyWallet/mutiny-node/pull/425


cc2538-bsl: init at unstable-2022-08-03

Description of changes
This adds cc2538-bsl which performs firmware upgrades on TI SimpleLink series wireless microcontroller over the serial port.
No releases since 2016 but hundreds of commit since then, so using a master commit.
Things done

Built on platform(s)

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

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] 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
[x] Tested basic functionality of all binary files (usually in ./result/bin/)
23.05 Release Notes (or backporting 22.11 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.

This pull request has been mentioned on NixOS Discourse. There might be relevant details there:
https://discourse.nixos.org/t/prs-ready-for-review/3032/2056


Update travis.yml

uncomment after_success

Codecov Report

:exclamation: No coverage uploaded for pull request base (master@bac4016). Click here to learn what that means.
The diff coverage is n/a.

@@           Coverage Diff            @@
##             master      #2   +/-   ##
========================================
  Coverage          ?   94.8%
========================================
  Files             ?       2
  Lines             ?     250
  Branches          ?       0
========================================
  Hits              ?     237
  Misses            ?      13
  Partials          ?       0

Continue to review full report at Codecov.

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