Adding a module from a specific commit from a git repository no longer works

When adding modules with a command like this:
cfbs add https://github.com/vpodzime/cfengine-security-hardening@c7ea31a59007fc2e8909d9c54839e9753f1b06d6

the cfbs build fails. This used to work before the rewrite of the add_command(). The problem is that repo contains the whole string above, including the commit. And so build then tries to git-clone that which fails. I made it work by manually modifying cfbs.json, removing the commit from the repo string and adding "index": "https://github.com/vpodzime/cfengine-security-hardening" which makes the build code recognize the module as one from a third-party index.

I'm not sure exactly when, but this has been fixed. Just tested and it works with both cfbs master branch, and the latest release:
$ cfbs build

Modules:
001 masterfiles                   @ a87b7fea6f7a88808b327730a4ba784a3dc664eb (Downloaded)
002 autorun                       @ c3b7329b240cf7ad062a0a64ee8b607af2cb912a (Downloaded)
003 telnet-server-not-installed   @ c7ea31a59007fc2e8909d9c54839e9753f1b06d6 (Downloaded)
004 openldap-server-not-installed @ c7ea31a59007fc2e8909d9c54839e9753f1b06d6 (Downloaded)
005 tmp-nosuid                    @ c7ea31a59007fc2e8909d9c54839e9753f1b06d6 (Downloaded)

Steps:
001 masterfiles                   : run './prepare.sh -y'
001 masterfiles                   : copy './' 'masterfiles/'
002 autorun                       : json 'def.json' 'masterfiles/def.json'
003 telnet-server-not-installed   : copy './telnet_server_policy.cf' 'masterfiles/services/autorun/telnet_server_policy.cf'
004 openldap-server-not-installed : copy './openldap_server_policy.cf' 'masterfiles/services/autorun/openldap_server_policy.cf'
005 tmp-nosuid                    : copy './tmp_nosuid.cf' 'masterfiles/services/autorun/tmp_nosuid.cf'

Generating tarball...

Build complete, ready to deploy 🐿
 -> Directory: out/masterfiles
 -> Tarball:   out/masterfiles.tgz

To install on this machine: sudo cfbs install
To deploy on remote hub(s): cf-remote deploy
$


Despite new update, PageMenu still compiles with warnings: interfaceOrientation is deprecated in iOS 8.

As title explains, PageMenu still compiles with warnings after the Swift 1.2 update; can you please resolve the interfaceOrientation issue?
I'd attempt to fix this myself using [UIDevice currentDevice].orientation , but I don't know enough Swift to be useful.  It should be a quick fix.  Thanks!

Yes, warning were not yet worked on, just errors, since it'll still work with warnings. I have not yet figured out what the true equivalent of interfaceOrientation would be since the device orientation property will not give the right orientation at all times

Apple's documentation says to replace it with willTransitionToSize. Maybe there could be an enum set up to record the orientation and the state changes when willTransitionToSize is called? I know that this method is better to use with autolayout

Just submitted a pull request to fix this issue. Turns out UIDevice.currentDevice().orientation is the correct way of doing this. There's also UIApplication.sharedApplication.statusBarOrientation.Portrait/.Landscape


Add fee middleware test suite functions (E2E #5)

Description

This PR adds some functionality that will be used in the coming fee middleware E2E tests.

The ability to broadcast arbitrary messages for our test suites.

RegisterCounterPartyPayee
PayPacketFeeAsync

Initialize GRPC clients for test chains.

Query GRPC endpoints

QueryCounterPartyPayee
QueryIncentivizedPacketsForChannel

Before we can merge this PR, please make sure that all the following items have been
checked off. If any of the checklist items are not applicable, please leave them but
write a little note why.

[x] Targeted PR against correct branch (see CONTRIBUTING.md)
[ ] Linked to Github issue with discussion and accepted design OR link to spec that describes this work.
[ ] Code follows the module structure standards.
[ ] Wrote unit and integration tests
[ ] Updated relevant documentation (docs/) or specification (x/<module>/spec/)
[ ] Added relevant godoc comments.
[ ] Added a relevant changelog entry to the Unreleased section in CHANGELOG.md
[x] Re-reviewed Files changed in the Github PR explorer
[ ] Review Codecov Report in the comment section below once CI passes

Codecov Report

Merging #1710 (b6a6d01) into main (0fd5656) will increase coverage by 0.00%.
The diff coverage is 100.00%.

@@           Coverage Diff           @@
##             main    #1710   +/-   ##
=======================================
  Coverage   80.00%   80.00%
=======================================
  Files         164      164
  Lines       12299    12300    +1
=======================================
+ Hits         9840     9841    +1
  Misses       1997     1997
  Partials      462      462

Impacted Files
Coverage Δ

modules/apps/transfer/ibc_module.go
64.93% <100.00%> (+0.22%)
:arrow_up:


Time Series  / Distribution visualisations

🚀 Feature
Visualisations for time series & distributions

Motivation
I added this in myself, but could probably be finessed beyond what I've built
Additional context
Something that's useful to see , is over time, if reload times are changing significantly, or there are spikes,  the repurposed map visualisation could probably be finessed beyond my example , which shows where, when and for how long certain reloads run ( that then might show impact of reloads on other processes(

Thank you @JohnnyAzzurri. We've made quite a few updates in v4.0.1, do you want to take a look and let us know if any of the changes add the insights you need?


Don't show information

No information about VARM is displayed after running the benchmark

Yeah, it is not working. Completely useless


(embassy-boot): add blocking API to FirmwareUpdater

Also add a split prepare_update + write_firmware API, to allow for an optimized update API at the exchange of added complexity.
The old API is left in place to allow users to choose the complexity level that fits their needs.

@lulf Fixed :+1:

Thanks, great work :rocket:
bors r+


[P4_Symbolic] Modified p4_symbolic/symbolic/parser_test.cc [Evaluate parsers symbolically.]

Keyword Check:
~/sonic-buildimage/src/sonic-p4rt/sonic-pins$ ~/tools/keyword_checks.sh .
Keyword check Passed.
Build Result:
/sonic/src/sonic-p4rt/sonic-pins$ bazel build $BAZEL_BUILD_OPTS ...
INFO: Analyzed 629 targets (0 packages loaded, 0 targets configured).
INFO: Found 629 targets...
INFO: Elapsed time: 0.754s, Critical Path: 0.00s
INFO: 1 process: 1 internal.
INFO: Build completed successfully, 1 total action
Test Result:
/sonic/src/sonic-p4rt/sonic-pins$ bazel test $BAZEL_BUILD_OPTS --cache_test_results=no ...
INFO: Analyzed 629 targets (0 packages loaded, 0 targets configured).
INFO: Found 421 targets and 208 test targets...
INFO: Elapsed time: 191.483s, Critical Path: 117.49s
INFO: 262 processes: 317 linux-sandbox, 18 local.
INFO: Build completed successfully, 262 total actions
//dvaas:port_id_map_test                                                 PASSED in 0.8s
//dvaas:test_run_validation_golden_test                                  PASSED in 0.1s
//dvaas:test_run_validation_test                                         PASSED in 0.7s
//dvaas:test_run_validation_test_runner                                  PASSED in 0.0s
//dvaas:test_vector_stats_diff_test                                      PASSED in 0.0s
//dvaas:test_vector_stats_test                                           PASSED in 0.1s
//dvaas:test_vector_test                                                 PASSED in 0.6s
//dvaas:user_provided_packet_test_vector_diff_test                       PASSED in 0.1s
//dvaas:user_provided_packet_test_vector_test                            PASSED in 0.1s
//gutil:collections_test                                                 PASSED in 0.6s
//gutil:io_test                                                          PASSED in 0.5s
//gutil:proto_matchers_test                                              PASSED in 0.6s
//gutil:proto_ordering_test                                              PASSED in 0.6s
//gutil:proto_test                                                       PASSED in 0.5s
//gutil:status_matchers_test                                             PASSED in 0.5s
//p4rt_app/tests:packet_replication_table_test                           PASSED in 3.2s
//p4rt_app/tests:packetio_test                                           PASSED in 5.0s
//p4rt_app/tests:port_name_and_id_test                                   PASSED in 4.9s
//p4rt_app/tests:resource_limits_test                                    PASSED in 2.6s
//p4rt_app/tests:response_path_test                                      PASSED in 6.4s
//p4rt_app/tests:role_test                                               PASSED in 1.6s
//p4rt_app/tests:state_verification_test                                 PASSED in 3.2s
//p4rt_app/tests:vrf_table_test                                          PASSED in 2.8s
//p4rt_app/tests/lib:app_db_entry_builder_test                           PASSED in 0.0s
//p4rt_app/utils:event_data_tracker_test                                 PASSED in 0.1s
//p4rt_app/utils:table_utility_test                                      PASSED in 0.7s
//sai_p4/instantiations/google:clos_stage_test                           PASSED in 0.5s
//sai_p4/instantiations/google:fabric_border_router_p4info_up_to_date_test PASSED in 0.0s
//sai_p4/instantiations/google:middleblock_p4info_up_to_date_test        PASSED in 0.0s
//sai_p4/instantiations/google:sai_nonstandard_platforms_build_test      PASSED in 0.0s
//sai_p4/instantiations/google:sai_nonstandard_platforms_cc_test         PASSED in 0.7s
//sai_p4/instantiations/google:sai_p4info_fetcher_test                   PASSED in 0.7s
//sai_p4/instantiations/google:sai_p4info_test                           PASSED in 1.1s
//sai_p4/instantiations/google:sai_pd_proto_test                         PASSED in 0.0s
//sai_p4/instantiations/google:sai_pd_util_test                          PASSED in 0.6s
//sai_p4/instantiations/google:tor_p4info_up_to_date_test                PASSED in 0.0s
//sai_p4/instantiations/google:union_p4info_up_to_date_test              PASSED in 0.1s
//sai_p4/instantiations/google:wbb_p4info_up_to_date_test                PASSED in 0.0s
//sai_p4/instantiations/google/test_tools:table_entry_generator_helper_test PASSED in 1.7s
//sai_p4/instantiations/google/test_tools:test_entries_test              PASSED in 0.9s
//sai_p4/instantiations/google/tests:p4_fuzzer_integration_test          PASSED in 3.5s
//sai_p4/tools:p4info_tools_test                                         PASSED in 0.6s
//sai_p4/tools:packetio_tools_test                                       PASSED in 0.8s
//tests:thinkit_gnmi_interface_util_tests                                PASSED in 1.0s
//tests/lib:switch_test_setup_helpers_golden_test                        PASSED in 0.2s
//tests/lib:switch_test_setup_helpers_golden_test_runner                 PASSED in 0.1s
//tests/qos:gnmi_parsers_test                                            PASSED in 0.1s
//tests/qos:gnmi_parsers_test_runner                                     PASSED in 0.1s
//thinkit:bazel_test_environment_test                                    PASSED in 0.5s
//thinkit:generic_testbed_test                                           PASSED in 0.9s
//thinkit:mock_control_device_test                                       PASSED in 0.6s
//thinkit:mock_generic_testbed_test                                      PASSED in 0.7s
//thinkit:mock_mirror_testbed_test                                       PASSED in 0.7s
//thinkit:mock_ssh_client_test                                           PASSED in 0.1s
//thinkit:mock_switch_test                                               PASSED in 0.8s
//thinkit:mock_test_environment_test                                     PASSED in 0.1s
//thinkit:switch_test                                                    PASSED in 0.7s
//sai_p4/instantiations/google/tests:p4_constraints_integration_test     PASSED in 0.8s
Stats over 5 runs: max = 0.8s, min = 0.7s, avg = 0.7s, dev = 0.1s
//sai_p4/instantiations/google/test_tools:table_entry_generator_test     PASSED in 49.1s
Stats over 50 runs: max = 49.1s, min = 0.8s, avg = 3.0s, dev = 8.9s
Executed 208 out of 208 tests: 208 tests pass.
INFO: Build completed successfully, 262 total actions

Co-authored-by: Srikishen Pondicherry Shanmugam<EMAIL_ADDRESS>

/azp run


Fix UI for constraint deletion

Description
Fix #290
Types of changes

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

Codecov Report

Merging #295 into master will not change coverage.
The diff coverage is n/a.

@@          Coverage Diff           @@
##           master    #295   +/-   ##
======================================
  Coverage    81.8%   81.8%
======================================
  Files          26      26
  Lines        1533    1533
======================================
  Hits         1254    1254
  Misses        210     210
  Partials       69      69

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 be93658...7d673cc. Read the comment docs.


Add sample Xcode project?

Running
pod try https://github.com/JohnSundell/ShellOut

should clone the repo and open a sample project, but produces this error:

Unable to find any project in the source files of the Pod

This is because it can't find a sample project.
It would be nice to create a simple command line project which just includes ShellOut and some examples, and/or maybe a playground file.

Hi @getaaron 👋
I honestly don't think ShellOut needs an example project, it's such a simple tool and pretty much the entire API is described in the README file. If you have any questions or need any help getting started with ShellOut I'd be more than happy to help, but I don't think it's worth maintaining an Xcode project for this one.
Thanks anyway for your suggestion 👍


New material/threads

@baffelli, I think you started this branch from the wrong place (see a lot of unrelated commits in the history). Would you like some help to fix that?


Improving the search button and UI

I want to improve the search button as it is not properly oriented and also unnecessary and disoriented logo are present at some places
https://github.com/user-attachments/assets/2e685d84-8e1b-493a-850c-546ed03f2aba
please assign this issue to me to resolve for better UI and add the label "hacktoberfest" and "hacktoberfest accepted"

/assign


Bump version to 0.0.37

#1409  👈
main

This stack of pull requests is managed by Graphite. Learn more about stacking.

Join @carolineechen and the rest of your teammates on  Graphite


fix: broken SWA "select artist" step back button

This PR resolves https://github.com/artsy/eigen/pull/10321#pullrequestreview-2093435900
Description
This PR reverts the changes from https://github.com/artsy/eigen/pull/10321 because the "Back" button isn't working correctly anymore.
PR Checklist

[ ] I have tested my changes on iOS and Android.
[ ] I hid my changes behind a feature flag, or they don't need one.
[ ] I have included screenshots or videos, or I have not changed the UI.
[ ] I have added tests, or my changes don't require any.
[ ] I added an app state migration, or my changes do not require one.
[ ] I have documented any follow-up work that this PR will require, or it does not require any.
[ ] I have added a changelog entry below, or my changes do not require one.

To the reviewers 👀

[ ] I would like at least one of the reviewers to run this PR on the simulator or device.

Changelog updates
Changelog updates

Cross-platform user-facing changes

iOS user-facing changes

Android user-facing changes

Dev changes

Need help with something? Have a look at our docs, or get in touch with us.

Warnings

:warning:

❌ An error occurred while validating your changelog, please make sure you provided a valid changelog.

  Generated by :no_entry_sign: dangerJS against 0dc8482c838c3a121a258f5a855a0f8d479679d0


[Feature Request] flink table api  for lakesoul

Is it possible to add flink table api for lakesoul? It will be more attractive if there are both flink and spark api for lakefoul, which can benchmark with iceberg.

A good idea.  Lakesoul will support flink in the future incluing flink table api, flink cdc,etc.
Roadmap has been updated. https://github.com/meta-soul/LakeSoul/pull/13
Lakesoul with with flink table api is in progress.

Tracked in #57


Prevent empty vertex issuance

This code modifies issuer.Update to check for empty vertices and if found, rather than adding the vertex to consensus, it creates a poll for the consensus.Preferences().
@StephenButtolph Is something like this what you had in mind for https://github.com/ava-labs/gecko/issues/7?

Sorry for taking so long to respond, the first public network release has taken quite a bit of maintenance.
I think this PR would work, but I think it would cause noop vertices to issue potentially many more queries than a single vertex would be expected to launch. I think it may make more sense define empty vertices as invalid and to modify the issueBatch function instead. See #98. I'm going to close this for now, but thank you for helping out on this!

Thanks for the review! https://github.com/ava-labs/gecko/pull/98 looks much better


Use MSYS2 in CI?

@nabijaczleweli You mentioned in #5 that there was a build error with MSYS2, right?
Can/should we add this to CI in order to detect such problems in the future?
Is MSYS2 supported on Github Actions?

"github actions msys2" points to https://github.com/msys2/setup-msys2 which lists caveats and

MSYS2 is available by default in windows-latest virtual environment for GitHub Actions, located at C:\msys64.

But I'm far from a Github Actions Enjoyer:tm: so dunno how well either the builtin or the script work.
That being said, MSYS2 is definitely Archware and it shows (the header patches are probably not needed for libflac-sys, copying libFLAC.dll.a from either of the three locations it ends up in and I graciously forgot since the last time would be). If I didn't use it on a daily basis I wouldn't bother maintaining CI for it, fact is, but it is a Relatively Sensible Environment But On Windows and it beats getting concussions from the nearest wall attempting to get any part of MSVC to behave at all sanely. Computing was a mistake.
The build error was that some of the FLAC binaries required system-specific bits, obviously not present on NT (I've also thankfully managed to forget the specifics), so the likelihood of it reappearing is low to nil.

OK, thanks for your insights, so I'll close this for now.
If anybody needs this in the future, please leave a comment or create a PR!

In the meantime, I've learned how to use MSYS2 on Github Actions and I've just created a PR: #23.


now buy domains returning undefined price

➜  ~ git:(master) ✗ now buy domains domain-name.something
> The domain "domain-name.something" is available to buy under bukinoshita! [3s]
> Buy now for $undefined (undefinedyr)? [y|N]

Thanks for the report, I'll look into it

Thanks again for the error report - seems that I was able to resolve the issue with the domains api.
Please let me know if the error still happens for you.

working just fine again! thanks


Reusable choo components with chooify

First of all my apologies as this is not an issue. I have read a couple of times this discussion about choo state model, and I started writing a browserify transform for choo. chooify.
I'm just starting so is pretty much a work in progress, most of the features described in the repo are not implemented yet, what is already working is a pretty basic management of .choo files. I rewrote the title example with chooify here so you can have a look (that is actually working).
I though in a browserify transform, so the choo repo is not affected, and I want it to show it here to know your thoughts about it. Any help and/or opinion would be appreciated.

@YerkoPalma haha, it's all cool! - Feel free to open discussions about things on this repo; we'll just mark it as "discussion" and talk about things.
Though personally I wouldn't use this solution, I'm definitely interested in figuring out why you wrote this: do you feel writing stateful choo view + model combinations is too hard? What's triggered you to write this? (and how do you think we can we improve?)

do you feel writing stateful choo view + model combinations is too hard?

Writing components isn't hard, but it can be tedious. bel elements are easy and reusable, but to add a choo model you'll have to write, to exportable elements, the view and the model. That's not actually a big deal, the thing is that with a choo model you are polluting the global app state. Think, for instance, in a calendar component, with a selectedDate data. Handling that in the state would make a global selectedDate, if your app include many of them you'll have a lot of dates in the state. Choo solution is namespacing, but, as you said, that can be hard to handle.
So I would like to have some way to write a component that has it's own local data, without polluting the global state, but that can fire reducers and effects to handle the global state. That would make it super easy to export the calendar component, each one with a local selectedDate, and a clean global state.

What's triggered you to write this? (and how do you think we can we improve?)

I think a .choo extension is awesome.
I though about a pull request, but the would have been too veinvasive. A transform doesn't affect any existing choo app at all.
Is the first time I write a browserify transform, so I wanted to try it :)
I'm thinking in use it for some custom templates later.

The help that I would like is to know about your opinions. Fisrt of all, is it clear what I'm trying to do? Do you think is related with the actual state management discussion? Why you wouln't use it?
Also, I'm putting it here, because most of the API design isn't definitive, and may change based on any feedback.

Hmm. I'm agree with the @YerkoPalma and understand his idea. But don't like that syntax of the .choo file.
Why not just plain html? And the model can be set in ? Syntax highlighting would work then.
counter.choo

${author}

${state.count}

  <button onclick=${(e) => send('increment')}></button>

Looks better. Yea script type may looks strange. But it seems that GFM and my sublime theme understands that choo/javascript is javascript syntax. Which is cool trick.

@YerkoPalma What about nested components? haha. Pure example for such thing are forms. Form is one component, but it may have other components in it? ;d Don't know just some brainstorms.. I'm not react or frontend user/dev.

Concerning the type attribute of script tag: I'd suggest to change the value to be more like Mustache/Handlebars/Angular1 name them. The former part usually denotes the format. Maybe: text/choo-template? Or text/choo-view etc.

ryuno, agree, but we loose the highlighting and will need additional plugins. intentionally suggest that type.

@tunnckoCore There are two benefits with .choo files.

View and component are exportable in a single file. Normally, if you have a choo component that you want to reuse, you have to require the view (bel element) and the model (js object) separatly.
Local scope for component model. When you define a model, it adds global a state. So think about a Form component, with a validation state. The validation state is not global, it refers only to that instance of the component, so if you have another form, used by the same component view, it would have the same validation state, which is not correct. Thats the key with .choo files, you have a local property that you can use to refers to the component local data, and is different between other components, so your global state is cleaner.

Now, as you noticed there is downsides about this approach.
I agree that the syntax might be improved, thats why I'm asking for opinions :). Now I'm not sure if your proposal is better because that syntax is though for some template engine, like handlebars. Es6 template strings are not that powerful, for instance, they don't consider conditional statements, or loop statements, just expression interpolation. But still, is a great feature to have javascript on the views, so maybe is important not to lose it. I though, maybe add package name in comment, and just asume an htmlvar, just as the view arguments are assumed. Let me explain with an example.
/* choo-view granim leaflet*/ <- those two package would be required outside view function

// any js code

html` <- Now use the html function (choo/html or bel) to know what to export
`

that would help with keeping js code in the views, otherwise we would have to create some DSL or use some existing template engine, and that is not a good idea.

About nested component, they are pretty much supported with the actual design. Just add them in the local property.

// form.choo
/* choo-view */
`<form>
${input.view(state, prev, send)}
</form>`

/* choo-model */
{
  local: {
    input: require('input.choo')
  }
}

I believe you can wrap with "`" here to remove this ugly requirement in the view
/* choo-view */
`<form>
${input.view(state, prev, send)}
</form>`

soo i believe you can do
function parseView (view, local) {
  // wrap in a function that require choo/html
  // check if there is any package required
  // require the package after choo/html and before the view function
  return `(function () {
      const html = require('bel'
      const local = ${JSON5.stringify(local)}
      return (function (state, prev, send) {
        return html\`${clean(view)}\`
      }).bind(local)
  })()`
}

notice backticks around ${clean(view)}

though for some template engine, like handlebars. Es6 template strings are not that powerful, for instance, they don't consider conditional statements, or loop statements, just expression interpolation.

It's not a problem. It's the same in anyway. Also ES6 Template strings are excellent and they can do these things.

I'll come back with something working, but first I need a sleep and few hours university tomorrow.

Sorry to be the naysayer but I think an opposing viewpoint should be added to this thread 😜
I think one of the main benefits of choo is that it doesn't introduce any new file types (like JSX for example) and doesn't break JavaScript, The Language™. The biggest appeal to me for choo is that it works without any need for build/compile steps in the electron environment, has a very simple API, and provides a light but robust conceptual framework for dealing with state and dom (basically react/redux: the good parts).
I also don't see needing to define models and views in separate files as a drawback. In many (most?) cases a view shouldn't need its own local state, and separating concerns like views and state seems logical to me.
Introducing a new filetype seems like a step in the wrong direction to me. There are already some attempts at creating reusable choo components (like choodown) that could be refined without needing to create another filetype and parse/compile step to go with it.
However that said I am a grumpy old man who hates transforms for dynamic languages 👴 . If it works well for you and solves a problem elegantly then go for it -- but I would strongly prefer that a .choo extension not become a core requirement for using choo.

become a core requirement for using choo.

@ungoldman you maybe missing something here. We are not talking for requirements or adds to the core choo. Just concepts and ideas. I was just commenting the style of chooify and tried to represent that all "components" stuff can be done pretty easy currently. :)

Reusable components would be a lot easier if models were injected into views explicitly. It would decouple the models from the views, and shift the abstraction toward a world where views expect a particular interface, not a specific model.  With injected model, we no longer need a coordinating file like a .choo, or have to worry so much about namespaces. In the main app file, every view is explicitly paired with a model-- Bonus: this would make re-use of the same view possible with multiple disparate models, and open the door to exploring the potential in higher order models, something like model-level plugins.

Just want to sahre some more thoughts.. For someone who is like more class-ish components... It's not tests, just an example. I believe it looks good too.
const Link = (link, anchor) => ({
  namespace: 'ahref'
  state: { link, anchor },
  view: (html) => (state, prev, send) => html`
    ${state.anchor}
  `
})

const HelloWorld = (initialState, namespace) => ({
  namespace: typeof namespace === 'string'
    ? namespace
    : '',
  state: initialState && typeof initialState === 'object'
    ? initialState
    : {},

  actions: () => ({

  }),

  reducers: () => ({

  }),

  effects: () => ({
    print: (state, data) => {
      console.log(data.payload)
    }
  }),

  subscriptions: () => ({
    callDog: (send, done) => {
      setInterval(function () {
        var data = { payload: 'dog?', myOtherValue: 1000 }
        send('app:print', data, function (err) {
          if (err) return done(err)
        })
      }, 1000)
    }
  }),

  view: (html) => (state, prev, send) => html`

${state.app.welcome}

    ${Link(state.app.href, state.app.text)}
  `
})

const HelloComponent = HelloWorld({
  href: 'http://i.am.charlike.online',
  text: 'i.am.charlike.online',
  welcome: 'Heya, I am Charlike Mike Reagent!!'
}, 'app')

chooComponent.render(HelloComponent, '#helloApp')

Where chooComponent could be thin wrapper for choo/mount and calling component's methods to add actions, reducers and etc to the model with some namespace (if defined in the component), view will be passed with html param for more easy access without thinking for imports and requires.

Closing because choo@5 will introduce a new API. See #425 for the merged PR. Thanks!


[Feature request] coexist with existing Julia instals

A discussion on discourse brought to light that juliaup (sometimes) works with existing Julia installs, the readme currently recommends against this. It would be great if that cooperation could be formally supported.

I think this is really a documentation task, we should just point out that one can put any Julia binary anywhere, and then use the juliaup link command to integrate that Julia version into the versions surfaced by Juliaup.
We probably also want to highlight that things won't work if a different julia binary is on the PATH...


No Settings in Sublime 3 Package

Hi,
Just installed this with Sublime 3 Package Control on Windows 7, and when you open the default settings, it is empty.
Based on your you tube video, their appeared to be several settings. I have not tried to use it yet, and it may still work. I just wanted to make you aware that this is the case.

So i worked around this by doing the following in the terminal
mkdir ~/Library/Application\ Support/Sublime\ Text\ 3/Packages/Web\ Inspector\ 3
subl ~/Library/Application\ Support/Sublime\ Text\ 3/Packages/Web\ Inspector\ 3/swi.sublime-settings

This assumes you have setup a symbolic link for sublime. Copy the settings from here https://raw.githubusercontent.com/sokolovstas/SublimeWebInspector/ST3/swi.sublime-settings, as @Leolik stated, and save the file. That should get you going with settings.

Looks like the issue might be here: https://github.com/sokolovstas/SublimeWebInspector/blob/ST3/Main.sublime-menu#L69
I think "args": {"file": "${packages}/Web Inspector 3/swi.sublime-settings"},  should be "args": {"file": "${packages}/Web Inspector/swi.sublime-settings"},

@Darkle Thanks! Fixed.

i just installed from sublime package manager and still no settings for me.

@nbppp2 i followed your instructions and it still don't read the settings file i just added, still trying the default google chrome path.


Update how keyed feature works in the Table of Contents docs

Link to the Page
https://www.skeleton.dev/utilities/table-of-contents
Describe the Issue (screenshots encouraged!)

We need a few small changes:

Self reference how this is used in the doc site (page tabs update on change)
Change the const to a let to indicate this value can change
Implement a simple example of how this can change, and what it will do:

let tabindex = 0;
// tabindex = 1; -> triggers an update!

I can give this a go.


Make wantsJson() REST aware #10969

Addresses #10969

Tweaked this a bit to be more inline with 5.2 behavior.


Web - Group - When user selects "Message a group user" the app will crash

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Action Performed:
Precondition: user has a new group created with a couple of users already invited

Access staging.new.expensify.com
Log into a valid user
Click on the new group conversation
Click on the group header
Click on any of the users and click "Message"
Repeat steps 4-5 a couple of times

Expected Result:
The user expects to be redirected to a user chat that he/she clicked on
Actual Result:
The app eventually will crash
The issue is not repro with every group but some groups. Logs attached and we are not able to identify why some groups are causing crash and some are not.
Workaround:
unknown
Platform:

Where is this issue occurring?

Web
iOS
Android
Desktop App
Mobile Web

Version Number: 1.1.60-0
Reproducible in staging?: Y
Reproducible in production?: N
Email or phone of affected tester (no customers):
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos: Any additional supporting documentation
[Video](Bug5570478_Crash_after_trying_to_message_group_users.mp4: https://utest-dl.s3.amazonaws.com/12102/26469/362812/5570478/bugAttachment/Bug5570478_Crash_after_trying_to_message_group_users.mp4?AWSAccessKeyId=AKIAJ2UIWMJ2OMC3UCQQ&Expires=1684010317&Signature=aF1K22b3%2FGIqEB5HKWxORcILFM0%3D)
Log
Expensify/Expensify Issue URL:
Issue reported by: Applause
Slack conversation:
View all open jobs on GitHub

This issue is inconsistent, but we were not able to repro it in PROD at all. Adding Deploy blocker label for now. Pls feel free to remove if you are not able to repro on Expensify side.

:wave: Friendly reminder that deploy blockers are time-sensitive ⏱ issues! Check out the open StagingDeployCash deploy checklist to see the list of PRs included in this release, then work quickly to do one of the following:

Identify the pull request that introduced this issue and revert it.
Find someone who can quickly fix the issue.
Fix the issue yourself.

This is fixed now


Added cert-manager 1.0.3

I attempted to follow the instructions here: https://kurl.sh/docs/add-on-author/
Apologies in advance if I missed something.
I left the cert-manager.yaml in one big file because that's how the cert-manager project publishes it: https://github.com/jetstack/cert-manager/releases/download/v1.0.3/cert-manager.yaml.
Let me know if you'd like it broken apart.

 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.


Implementation of Footer Tag

Pull Request Type
What kind of change does this PR introduce?
[ yes] Solved an issue/task
[ ] Bugfix
[ ] Feature
[ ] Code style update (formatting, local variables)
[ ] Refactoring (no functional changes, no api changes)
[ ] Build related changes
[ ] CI related changes
[ ] Documentation content changes
[ ] Other... Please describe:
What is the current behavior?

Issue Number: #1576
What is the new behavior?

The footer tag as requested as per the description of the issue has been implemented
Other information

Merged

This is an automated message from Fork, Commit, Merge [BOT].

Thank you for your contribution! Your pull request has been merged. The files have been reset for the next contributor.
What's next?
If you're looking for more ways to contribute, I invite you to check out our forkcommitmerge.io website repository. The repository contain real issues that you can help to resolve or create some of your own if you see any bugs or want to add new features to the site, etc. You can also check out the Influences section in the README to find more projects similar to this one.
Also please leave a star to this project if you feel it helped you, i would really appreciate it.
I look forward to seeing your contributions!


add required feature to streamlisten example

streamlisten depended on optional crates, and was thus causing the build to fail if the feature was not enabled.
fixes #85

Resolved by #112


CLIMATE-610 - Example scripts for multi model use and subregion uses

Merged build triggered. Test Failed.

Merged build started. Test Failed.

Merged build finished. Test Passed.

Merged build triggered. Test Failed.

Merged build started. Test Failed.

Merged build finished. Test Passed.

Merged build triggered. Test Failed.

Merged build started. Test Failed.

Merged build finished. Test Passed.

Hey Kim,
Thanks for the Pull Request! Can you please update the title and commit message with the reference to the ticket that this is addressing?
Also, we tend to not commit binary files since they tend to cause unneeded bloat. Are all the plots that you added generated by the scripts? If they are I think we can safely remove them and let users generate them if they need them.
Thoughts?

Acknowledge @MJJoyce. Yes the plots are those generated by the scripts. We can remove them, no worries. I'll update.

Merged build triggered. Test Failed.

Merged build started. Test Failed.

Merged build finished. Test Passed.

Hey Kim, I had to rebase and squash this fixing commit in so you'll have to close this one manually. Sorry for the inconvenience =/

Np @MJJoyce. Sorry to have put you through the extra work!


only set labels for reviews by users with write permission

What kind of change does this PR introduce?
bot

Did you add tests for your changes?
no

If relevant, link to documentation update:
N/A

Summary

Does this PR introduce a breaking change?
no

Other information

👍 this makes it much clearer, thank you


Fixed Rails dateFormatter

This bug fix handles parsing of datetime's in the following format "2015-12-30T18:12:33.000-05:00"

Thanks so much. Have a gif.

Now I am noticing that toLocalTimezone shouldn't be called in the first
case.  As timezone is in the date being passed in.  I'm not 100% on this
but wanted to get your thoughts.?
On Tue, Jan 5, 2016 at 1:19 AM Erkie<EMAIL_ADDRESS>wrote:

Merged #23 https://github.com/erkie/ApiModel/pull/23.
—
Reply to this email directly or view it on GitHub
https://github.com/erkie/ApiModel/pull/23#event-505642568.

I'm currently writing some tests and adding the ability to pass in timezone and date format. I was thinking that too, but NSDate does not have any knowledge at all about timezones. To be able to display the dates correctly to the user the toLocalTimezone is needed in that case as well.
2015-12-30T18:12:33.000-05:00 -> NSDate(2015-12-30T23:12:33.000+00:00) -> toLocalTimezone -> NSDate(2015-12-30T18:12:33.000+00:00)

For me this seems reasonable because then I can just print the date using a relevant format, and the timezone is always local to the device. Is this what you are expecting?

I believe this is an incorrect statement: "NSDate does not have any knowledge at all about timezones".
Pop this in a playground and you can see it in action.
Here is a screen of my playground -> https://www.dropbox.com/s/g94yhxp4w7m1fo3/Screenshot 2016-01-07 15.48.17.png?dl=0.
I am in MST, and you will see the last value is incorrect.
//: Playground - noun: a place where people can play

import UIKit

extension NSDate{
    func toString() -> String
    {
        let dateFormatter = NSDateFormatter()
        dateFormatter.dateFormat = "MM-dd-yyyy"
        return dateFormatter.stringFromDate(self)
    }
}

func toLocalTimezone(date: NSDate) -> NSDate {
    let seconds = NSTimeInterval(NSTimeZone.localTimeZone().secondsFromGMTForDate(date))
    return NSDate(timeInterval: seconds, sinceDate: date)
}

NSTimeZone.localTimeZone().abbreviation

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"

let newYearsInUTC = "2016-01-01T00:00:00.000-00:00"
let newYearsInUTCDate = dateFormatter.dateFromString(newYearsInUTC)
let newYearsInUTCDateInTimeZone = toLocalTimezone(dateFormatter.dateFromString(newYearsInUTC)!)

newYearsInUTCDate!.toString()
newYearsInUTCDateInTimeZone.toString()

let newYearsInEST = "2016-01-01T00:00:00.000-05:00"
let newYearsInESTDate = dateFormatter.dateFromString(newYearsInEST)
let newYearsInESTInTimeZone = toLocalTimezone(dateFormatter.dateFromString(newYearsInEST)!)
newYearsInESTDate!.toString()
newYearsInESTInTimeZone.toString()

let newYearsInMST = "2016-01-01T00:00:00.000-07:00"
let newYearsInMSTDate = dateFormatter.dateFromString(newYearsInMST)
let newYearsInMSTDateInTimeZone = toLocalTimezone(dateFormatter.dateFromString(newYearsInUTC)!)

let correctlyFormatted = newYearsInMSTDate!.toString()

let incorrectlyFormatted = newYearsInMSTDateInTimeZone.toString()


It's also better to check the output as well

Describe your problem and - if possible - how to reproduce it
Add a Link to the page with the problem
Tell us about your browser and operating system

Browser Name:
Browser Version:
Operating System:

If possible, add a screenshot here
function makeClass() {
  "use strict";
  /* Alter code below this line */
  class Vegetable {
    constructor(name) {
      this.name = name;
    }
  }
  /* Alter code above this line */
  return Vegetable;

}
const Vegetable = makeClass();
const carrot = new Vegetable('carrot');
console.log(carrot.name); // => should be 'carrot'

@gvsrusa what exactly is your problem, also could you post more details?

function makeClass() {
"use strict";
/* Alter code below this line /
class Vegetable {
}
/ Alter code above this line */
return Vegetable;

}
const Vegetable = makeClass();
const carrot = new Vegetable('carrot');
console.log(carrot.name); // => should be 'carrot'

It passes the test with the above code. i.e without even having the constructor.
It will be great to have a test case for checking the output as well rather than only the syntax.

Hi @gvsrusa,
Thanks for opening this PR. Seems like its fixed in one of the previous PR's https://github.com/freeCodeCamp/curriculum/pull/190
Hence I'm closing this issue.
Feel free to open this issue again if you think its still a problem.
Happy coding!


Add a license file

It'd be nice if this repo contained a license file (I recommend Apache 2.0, but entirely up to you of course) explaining how this code can legally be used.

sure, just added a license, and uploaded to pypi too.


Single number

issue #17

issue #17

@Brijeshthummar02 Hey! please check your branch before raising PRs, it has conflicts and why you are adding so much codes in single PR. Will not merge it if you will continue doing same.


TINKERPOP-958: split .profile() into ProfileSideEffectStep and ProfileStep (which is a MapStep).

https://issues.apache.org/jira/browse/TINKERPOP-958
I split .profile() into ProfileSideEffectStep and ProfileStep (which is a MapStep).
.profile() emits a TraversalMetrics.
profile('side effect key') stores TraversalMetrics in a side effect.
Tests modified and added.

A few things.

The name of the test is ProfileTest.Traversals not ProfileSideEffectTest.Traversals. Its based on the GraphTraversal.name(), not the underlying step. Likewise for GroovyProfileTest.Traversals. Thus, put all those tests into one test suite. See how there is no GroupCountSideEffectTest.Traversals, just GroupCountTest.Traversals.

Can you provide (as a comment here) the following -- UPGRADE instructions for users and CHANGELOG notes. Don't do it in the code as merging might suck. If you put it here, I can put it in on merge.

Can you verify that Giraph/Spark are happy?

Thanks @rjbriody

1 Done
2
Upgrade Instructions:
The profile()-Step has been refactored into 2 steps - the ProfileStep and the ProfileSideEffectStep. Users who previously used the profile()-Step in conjunction with cap(TraversalMetrics.METRICS_KEY) can now simply omit the cap step. Users who retrieved TraverseralMetrics from the side effects after iteration can still do so, but will need to specify a side effect key when using the profile()-Step.
CHANGELOG
Split existing profile()-Step into ProfileStep and ProfileSideEffectStep. profile()-Step now emits TraversalMetrics without the need for cap()-Step.
3 I'm guessing this is outside the coverage of the tests? I'm not hooked up to run Giraph or Spark (and don't have time to go down that rabbit hole). I could definitely use some help here if testing those is required for merge.

@rjbriody --- is any of this backwards compatible?

Nope.
These are the 2 things possible before:
t = g.V().profile()
t.iterate()
metrics = t.asAdmin().getSideEffects().get(TraversalMetrics.METRICS_KEY).get()

or
g.V().profile().cap(TraversalMetrics.METRICS_KEY)

Neither of which behave the same way now.

Failed tests:
  GroovyProfileTest$Traversals>ProfileTest.g_V_hasXinXcreatedX_count_isX1XX_valuesXnameX_profileXmetrics_keyX:358->ProfileTest.validate_g_V_hasXinXcreatedX_count_isX1XX_valuesXnameX_profile:322 There should be 3 top-level metrics. expected:<3> but was:<0>
  GroovyProfileTest$Traversals>ProfileTest.g_V_hasXinXcreatedX_count_isX1XX_valuesXnameX_profile:346->ProfileTest.validate_g_V_hasXinXcreatedX_count_isX1XX_valuesXnameX_profile:322 There should be 3 top-level metrics. expected:<3> but was:<0>
  ProfileTest$Traversals>ProfileTest.g_V_hasXinXcreatedX_count_isX1XX_valuesXnameX_profileXmetrics_keyX:358->ProfileTest.validate_g_V_hasXinXcreatedX_count_isX1XX_valuesXnameX_profile:322 There should be 3 top-level metrics. expected:<3> but was:<0>
  ProfileTest$Traversals>ProfileTest.g_V_hasXinXcreatedX_count_isX1XX_valuesXnameX_profile:346->ProfileTest.validate_g_V_hasXinXcreatedX_count_isX1XX_valuesXnameX_profile:322 There should be 3 top-level metrics. expected:<3> but was:<0>

Tests in error:
  GroovyProfileTest$Traversals>ProfileTest.g_V_out_out_profile_modern:156->ProfileTest.validate_g_V_out_out_profile_modern:138 » NullPointer
  GroovyProfileTest$Traversals>ProfileTest.g_V_out_out_profile_modernXmetrics_keyX:166->ProfileTest.validate_g_V_out_out_profile_modern:138 » NullPointer
  ProfileTest$Traversals>ProfileTest.g_V_out_out_profile_modern:156->ProfileTest.validate_g_V_out_out_profile_modern:138 » NullPointer
  ProfileTest$Traversals>ProfileTest.g_V_out_out_profile_modernXmetrics_keyX:166->ProfileTest.validate_g_V_out_out_profile_modern:138 » NullPointer

Just right click on SparkGraphComputerProcessIntegrateTest and hit "run" (IntelliJ). It runs very fast -- less than 30 seconds.

Spark tests pass.
mvn clean install verify -DskipIntegrationTests=false

...running locally, but could be a while. CI may finish first.

VOTE +1.

mvn clean install verify -DskipIntegrationTests=false
just finished successfully on my machine as well.

When this gets merged, I will handle getting it to work with the Memory model in https://github.com/apache/incubator-tinkerpop/pull/243 .. will be a good test to see how easy it is for people who have MapReduce-based steps (basically no one) to convert to MemoryComputeKey.

VOTE: +1

i don't see any changes to docs here.  I assume at minimum "upgrade docs" are needed especially since this is a breaking change. @okram will you handle that on merge?
VOTE +1 assuming the addition of docs

I left upgrade and changelog notes above: https://github.com/apache/incubator-tinkerpop/pull/242#issuecomment-188858152
...but you just made me remember that the docs for Profile Step need to be updated as well. @okram, should I make those in place as part of this PR or provide notes for what to change?

Docs have been updated but I can't process them because I don't have Hadoop running so I only did a dry run.

I will handle the merge and docs.

This work has been merged into TINKERPOP-1192 branch. When that branch gets merged to master/, I will close this ticket.


Increase number of cherry pick approvers

Right now there are only four cherry-pick approvers. I'd like to nominate two more and hear feedback.

@newmuis – Jon is the lead of Web Stories, and has been working within the AMP codebase for many years. He has a solid understanding of when release issues impact the Web Stories format and would be helpful for determining cherry picks across its increasing surface.
@rsimha – Raghu historically has primarily focused on the release and build systems, displaying a pragmatism about situations requiring or benefiting from cherry picks to production systems.

LGTM!

Now that @kristoferbaxter is leaving, I'd like to request that I also be added as a cherry-pick approver. I've a long record of investigating and fixing p0 bugs, have knowledge of runtime/bento/JS CDN/AMP Document Cache, and I'm an owner of the entire AMP codebase.

Added!


ATN footer talks about Firefox

The footer (both in blue and in white) talks about Firefox. It should talk about Thunderbird, and link to Thunderbird resources. Including the documentation for Thunderbird MailExtension APIs.

These were removed in https://github.com/thundernest/addons-server/commit/fb5933a51deed655645f875b6c87fbab516f21f4 .


More informative error messages for .csv issues than Error::MissingPid?

Hi there! @amzoss and I encountered a similar scenario to #65 -- in our case, an Excel encoding issue with our source .csv inserted an extra byte into the head of the csv which provoked the error.
Would it be possible to either:
(1) replace language around "MissingPid" with more generic language referring to issues reading the .csv and direct user to the style guide,
(2) add more specific detection and communication of errors, so opposite direction, or
(3) incorporate some parsing/input handling in the rake tooling, if that's possible? @amzoss used vim to strip out extra bytes as per this, don't know if that'd be relevant.
I'm happy to contribute a PR towards whatever approach makes the most sense! Thank you ^_^

Quick addition: The workflow that generated the extra <U+FEFF> (BOM) character was: download Google Sheet to Excel format, open in Excel and make some edits, save to .csv (on Mac). (Then reopened the .csv in Excel and saved again.) So I'm not sure when the extra character was introduced, but it wasn't visible when viewing the files in plain text editors. Had to use command line "less" and "more" to detect the error. Because this issue was tricky to diagnose and also a bit tricky to fix, it would be especially nice for the code base to be able to detect and/or handle this extra character in a csv.

Hey @zoews and @amzoss, I'm definitely interested in your ideas here. As some context, wax actually does pre-parsing and format validation (see:  utils.rb#L52) , and should throw an InvalidSource error if the file is invalid (see: utils.rb#L17).
It sounds like your case (unfortunately) opens as a valid CSV and doesn't trigger that error, even though it is ultimately formatted incorrectly and therefore hits another error down the chain (MissingPid).
When teaching wax, I usually just tell folks "Please please don't use Excel!!" because it doesn't respect character encodings and frequently does irreversible damage to a file (by adding its own line break codes, denaturing diacritics, etc.) I've mulled over making wax do more here, but have decided not to try correcting encoding errors in the interest of transparency / avoiding "black box" changes. Plus it's just really hard to do 🙃
Some options that seem like an OK balance between transparency + intervention:

Add a step that looks for out-of-place characters (e.g., <U+FEFF>) and throw a warning (instead of an error, in case someone means to have them).
Add some extra text to Error::MissingPid and other errors along the lines of "Don't agree with this error? Try linting your file with https://csvlint.io/ to look for hidden issues that might have caused it")
Explicitly tell folks to avoid Excel in the Wiki

Do any of these seem reasonable/helpful to you?
Thanks for taking the time to share and think about this issue!

Thank you @mnyrop ! And ah ha I see how this may have slipped past that initial layer of CSV validation!
Hm. I definitely hear what you say re: the scope/black box issues with this kind of change, especially given minimalist ethos. It makes sense not to ask Wax to do too much of the heavy lifting around formatting/parsing. I think of what you described, what jumps out to me is no. 2 + no 3. How would you feel about, instead of
WaxTasks::Error::MissingPid: Collection is missing pid for item 0.
Using
WaxTasks::Error::MissingPid: Collection is missing pid for item 0. Hint: review common .csv formatting issues (such as hidden characters) in the documentation: https://minicomp.github.io/wiki/wax/preparing-your-collection-data/metadata/
And then amending the wiki with references to both Excel issues and the linting? That is, if an error message reference to the documentation does not feel superfluous? I remember two students I worked with in summer 2009 encountered a similar barrier around interpretting a pid error, so it may be a worthwhile intervention in terms of removing an early roadblack!
If that seems of interest, I can go ahead and submit a PR for the error message and documentation changes :)

That sounds great! Feel free to ping me with questions.


Update Application.php

Fixing this to be able to configure web adapter through cachetool.yml file

Released on v4.1.0


PCA x metadata heatmap

Once we have metadata, something that would be useful would be a heatmap of principle components by metadata: The idea is to get some idea of what are the underlying attributes which cause clusters. (Thinking this would be another tab in the top right area.)

me:

heatmap: There's the main one, and I need to work on that, but one of you also mentioned another heatmap where one axis is the principle components, and the other axis is metadata fields, and from that you get a sense of what characteristics are reflected in each of the PCs. I think this second one is just the result of matrix multiplication, but I wanted to confirm.
john:
Oh, yes. That one is actaully a bit more complicated, the plot is a visualization of the output of the method used in this paper: https://www.ncbi.nlm.nih.gov/pubmed/28350385 . It might be best to file that for later and talk to Lorena in our group (cc:’d) about how she implemented it in R (in her R package DEGreport in the DEGcovariates function).

ie, it's not just multiplying the matrices. Going to take this out of the milestone and come back to it latter when requirements are more clear.

Hi,
Here you can find an example of the heatmap: http://lpantano.github.io/DEGreport/reference/degCovariates.html
You have two inputs, expression matrix and metadata. PCA is calculated from the expression matrix, and the PCs values associated to each sample are obtained from that. Then, these values are correlated to columns in the metadata (here there is correlation value and an padjusted pvalue).  The colors in the heatmap represent the correlation value between each column and each PCs from the PCA. Non-significant correlations are shown in grey (NA) in the heatmap.
Additionally, a dendrogram can be added for the metadata columns, that would indicate the correlation between the metadata variables. Basically, a matrix correlation is created from pairwise comparison between each column in the metadata. With that, the dendrogram is generated using some clustering algorithm and is added to the figure. (In this case, the order of the columns in the heatmap need to match the order of the dendrogram)
Let me know if you need more info.


AdapterError: Unexpected error from database adapter: relation "training_log.classattendance_classdetails__classdetail_attendances" does not exist

Node version: v12.17.0
Sails version (sails): 1.2.4
ORM hook version (sails-hook-orm): ^2.1.1
Sockets hook version (sails-hook-sockets): ^2.0.0
Organics hook version (sails-hook-organics): ^2.0.0
Grunt hook version (sails-hook-grunt): ^4.0.0
Uploads hook version (sails-hook-uploads):
DB adapter & version (e.g. sails-mysql@5.55.5<EMAIL_ADDRESS>Skipper adapter & version (e.g. skipper-s3@5.55.5):

Hi I'm having issue while trying to execute this command.
await ClassAttendance.find({ attendant: this.req.me.mygms_id }).populate('classdetails' , { where: { class: id } });
Here is the model.
ClassAttendance.js

ClassDetail.js

Classes.js

And I got error like this

So, what's my mistake ?

Hi @endrianusgohan, thanks for using Sails.
If you haven't gone into production yet you can try using auto-migrations to rebuild all of your tables, otherwise if there is live production data for users on the tables you will have to manually recreate the tables.


Borgs and UI are weird

Description
Being cyborg you can open different UIs and even interact with them. But some UIs can be opened but cannot be interacted, some UIs even updating buttons when pressed, but it doesnt actually do anything
Reproduction

one that i remember for sure

Open intercom UI being a cyborg.
Press mic. speak buttons.
Try to speak
Nothing
Reopen UI
Buttons are turned off

Screenshots

Additional context

the intercom thing was fixed
other issues can be opened for other bugs


Does the idea of running worker on hobby tier dynos hold?

The project Velveteen was extracted from had two repos, one for the Rails app and one for the Pipeline. This allowed us to use hobby tier dynos on the Pipeline and higher tiered ones on the Rails side. I'm pretty sure you can't mix dyno types within a single application (TODO confirm this), which means you're forced to have separate repos (or at minimum, separate Heroku apps) if you want different tiers between the two.

Following up on what's possible:

Within a single app, you cannot mix hobby tier and standard+ dynos within a single Heroku app
There is a buildpack that supports changing which Procfile to run when using the same repo with multiple Heroku apps - https://elements.heroku.com/buildpacks/heroku/heroku-buildpack-multi-procfile
There is a cap of 100 dynos across all processes within a single Heroku app


chore(deps): bump https://github.com/jenkins-x/jx-cli to 3.0.208

Update jenkins-x/jx-cli to 3.0.208
Command run was ./promote/main

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by:
To complete the pull request process, please assign hferentschik
You can assign the PR to them by writing /assign @hferentschik in a comment when ready.
The full list of commands accepted by this bot can be found here.

Needs approval from an approver in each of these files:

OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@jenkins-x-bot-test: The following test failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

gke
e8b4e0fdabb6bb9c8c4892af6e2b161456798051
link
/test gke

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the jenkins-x/lighthouse repository. I understand the commands that are listed here.


Rain and snow are returned as None when neither is forecast

As of v0.2.0, if rain and snow are not forecast and are missing from the API response, they are returned as None when previously they were empty dictionaries; e.g.:
WeatherReport(current=CurrentWeather(wind_gust=14.92, wind_bearing=140, rain=None, snow=None
This causes a TypeError in the Home Assistant integration, requiring a None check - something which is being questioned.
Seemingly related to two earlier commits.
@freekode: what is the correct behaviour here?

I think I decided that way to clearly mark the situation when there is no information about rain, snow, visibility, etc.
You may set as you wish.


Don't create Tab objects for initial tabs until config is loaded.

Reviewer:

Description:
Fixes an issue where we incorrectly showed the message "temporarily disabled Privacy Protection" for all tabs which are open on extension start.
Steps to test this PR:

Automated tests:

[ ] Unit tests
[ ] Integration tests

Reviewer Checklist:

[ ] Ensure the PR solves the problem
[ ] Review every line of code
[ ] Ensure the PR does no harm by testing the changes thoroughly
[ ] Get help if you're uncomfortable with any of the above!
[ ] Determine if there are any quick wins that improve the implementation

PR Author Checklist:

[ ] Get advice or leverage existing code
[ ] Agree on technical approach with reviewer (if the changes are nuanced)
[ ] Ensure that there is a testing strategy (and documented non-automated tests)
[ ] Ensure there is a documented monitoring strategy (if necessary)
[ ] Consider systems implications

Thanks for jumping on it Sam! Two things:

Can you explain why moving this code fixes the message?
I can see that the message is gone and I can see that stuff gets blocked on restored tabs, but popup doesn't seem to update with blocked content:

load interia.pl
don't approve the consent popup
reload the extension
approve the consent popup

what happens is that a bunch of trackers try to load and are blocked, but popup is showing 0

I think we can merge the message thing first and deal with that later if it will turn out to be a non-obvious to fix.
There is also one nit: extension icon doesn't update it shows Dax for me until I reload / navigate away. This might be related to 2, but might be separate. This is least important.

Thanks for the review Konrad.
1/ When we create a new Site object we get the enabled features for it based on the config:
https://github.com/duckduckgo/duckduckgo-privacy-extension/blob/2082d0841bc277794d63cf4e85ac90293e02e15d/shared/js/background/utils.es6.js#L192-L201
This requires that we've already loaded the tds config, otherwise the feature list is always empty. If the list is empty then we consider the site 'broken' in the UI and show the warning:
https://github.com/duckduckgo/duckduckgo-privacy-extension/blob/2082d0841bc277794d63cf4e85ac90293e02e15d/shared/js/ui/models/site.es6.js#L251
This change moves the tab initialization code after we've done await tdsStorage.getLists() which will load the config, so we are guaranteed to have features loaded when we build the enabled feature list.
2/ This looks like another bug with tabs created on browser start. I just pushed another commit to fix that.
Usually, a Tab object is created from a main_frame request. However, when we create Tabs on startup, we don't have that, so use a chrome.tab object instead. In our blocking code we were only adding blocking info when the tab has statusCode = 200 though, which would never be the case for Tabs created from a chrome.tab object (because that object does not include a status code), so we would never add tracker info for tabs created in this way.


Update to latest MICA practice

Please update this info to follow latest Mica (and other UI/XAML) practice.
for example, look at https://learn.microsoft.com/windows/windows-app-sdk/api/winrt/microsoft.ui.xaml.media.micabackdrop
Example of other xaml: why is there still muxc: used?

Document Details
⚠ Do not edit this section. It is required for learn.microsoft.com ➟ GitHub issue linking.

ID: 55ed6c4c-dc18-1e28-c4b2-4df28a8a16af
Version Independent ID: f29fe81d-d026-9f73-943a-f56708022042
Content: Mica material - Windows apps
Content Source: hub/apps/design/style/mica.md
Product: reunion
Technology: design
GitHub Login: @hickeys
Microsoft Alias: hickeys

Thanks for the feedback. An update for this page was in review at the time this issue was opened, and has been published.


More than one subscription, routing it to a specific handler

The example denotes the following.
async with Client("test.mosquitto.org") as client:
    async with client.messages() as messages:
        await client.subscribe("humidity/#")
        async for message in messages:
            print(message.payload)

If a user wants to also test for temperature:
async with Client("test.mosquitto.org") as client:
    async with client.messages() as messages:
        await client.subscribe("humidity/#")
        await client.subscribe("temperature/#")
        async for message in messages:
            if message.topic.startswith('humidity'):
                print(message.payload)
            elif message.topic.startswith('temperature'):
                print(message.payload)

Is there any way to do this more elegantly? Maybe even in a concurrent way?
Pseudo:
async with Client("test.mosquitto.org") as client:
    async with client.messages() as messages:
        await client.subscribe("humidity/#")
        async for message in messages:
            print(message.payload)

    async with client.messages() as messages:
        await client.subscribe("temperature/#")
        async for message in messages:
            print(message.payload)

Hi there Stefan,
I'll respond to your question of handling incoming messages concurrently. We can also happily discuss how to make aiomqtt more elegant if you have specific ideas!
The second admonition in the "Message queue" section of our docs shows a small example of how to handle each message in a separate coroutine. However, as far as I understand your pseudocode, you'd like to have one coroutine per subscription instead of per message.
We'll need to dive a bit into asyncio for this 😋 The idea is to implement a "distributor" that sorts the incoming messages into different asyncio queues, which are then processed concurrently (but sequentially inside a subscription). Here's a minimal working example:
import asyncio
import aiomqtt

async def fast_producer(client: aiomqtt.Client):
    while True:
        await asyncio.sleep(0.2)
        await client.publish("fast", "fast")

async def fast_consumer():
    while True:
        message = await fast_queue.get()
        print(f"Fast consumer received: {message.payload}")

async def slow_producer(client: aiomqtt.Client):
    while True:
        await asyncio.sleep(2)
        await client.publish("slow", "slow")

async def slow_consumer():
    while True:
        message = await slow_queue.get()
        print(f"Slow consumer received: {message.payload}")

fast_queue = asyncio.Queue()
slow_queue = asyncio.Queue()

async def distributor(client: aiomqtt.Client):
    async with client.messages() as messages:
        await client.subscribe("fast")
        await client.subscribe("slow")
        # Sort messages into the appropriate queues
        async for message in messages:
            if message.topic.matches("fast"):
                fast_queue.put_nowait(message)
            elif message.topic.matches("slow"):
                slow_queue.put_nowait(message)

async def main():
    async with aiomqtt.Client("test.mosquitto.org") as client:
        # Use a task group to manage and await all tasks
        async with asyncio.TaskGroup() as tg:
            tg.create_task(fast_producer(client))
            tg.create_task(fast_consumer())
            tg.create_task(slow_producer(client))
            tg.create_task(slow_consumer())
            tg.create_task(distributor(client))

asyncio.run(main())

Does that make sense? 🙂 Issue #250 is similar and could have some more context.

@empicano what I would love to avoid is the if .. elif-construction, and apply a more functional (or for example with aiogram filter/decorator) approach.  For this specific project (a telegram bot) I don't really need an extremely high performance coroutine. In a different project I discussed with the author of flashmq, what would be the best way to have very big (far bigger than regular burst of the retained messages), his suggestion was to create separate subscriptions like sharding the load. I wonder if there is a way to avoid 'multiple clients' and have this handled under the hood.

I struggle to find a singular issue in your comment that I can respond to. Let's focus on the syntactic sugar you initally wanted to discuss and leave out the rest for now.
We had aiomqtt.filtered_messages before (in fact, this is still in the code, but deprecated now). This turned out to be more complex and less understandable than it should be. Simple if statements are easy and flexible. You can read a bit more about this design decision in this PR.
I agree with you however that aiomqtt is not yet as elegant as it could be.

@empicano was there a change?

Hi Stefan,
I should have commented something before closing, sorry about that. I'm currently weeding out issues to get an overview of what to work on.
Do you have specific changes to aiomqtt that you still want to discuss?

If you say "just solve it with if-then-else" that is fine for me. But I wish some way of routing would exists based on on the semantics that is allowed making subscriptions (the + #). Ideally a bit bigger than that so a single subscription could be used as well, with matching happening inside of the application. Might even be more elegant that the actual subscription would not be required at all, and the annotations figuring out the 'best' subscription.

You probably know this, but the Topic.matches method can match wildcards as well, e.g. Topic.matches("foo/+/bar/#").
I'm happy to discuss possible improvements to the interface. What matters most to me that it's intuitive. Could you provide some (pseudo-)code of how your ideal interface would look like?

You probably know this, but the Topic.matches method can match wildcards as well, e.g. Topic.matches("foo/+/bar/#").

Did not know this :-) I literally redo all those things manually so it would be already an improvement.

I'm happy to discuss possible improvements to the interface. What matters most to me that it's intuitive. Could you provide some (pseudo-)code of how your ideal interface would look like?

@subscription(topic="/temperature/#')
async def handleTemperature(message: Message):
    print(message.payload)

@subscription(topic="/humidity/{room}/#') # Analogue to aiohttp's @routes.post('/{room}/something.xml')
async def handleHumidity(message: Message, room: str, message: Message):
    print(message.payload)

With the above it may become obvious that creating two subscription would be the best towards the server, and a subscription on '/#' wasteful.

Interesting, this seems similar to how fastapi-mqtt is designed, and in general many web frameworks.
Some thoughts on this:

This design pulls subscribing, receiving, and publishing messages out of the client's context manager. This means that the client must reconnect and recover automatically (which it currently does not). We have discussed automatic reconnection before, and it's still something I'd like to see in aiomqtt.
This design assumes that the MQTT client should run from the beginning to the end of the execution, like a web framework. This is not always the case. You might have a sensor that shuts down the MQTT connection for a few hours to save battery power, but still continues measuring. Also, clients should be able to subscribe and unsubscribe from topics dynamically.
I like how this would parse wildcards into variables (the humidity/{room} part). It would be cool to add this if it fits well somewhere.

I guess what could work is to pass a handler when calling subscribe and assigning the messages to the correct handler under the hood instead of letting the user do that with if/else (pseudocode):
async def handle_temperature(message):
    print(message.payload)

async def handle_humidity(message, room):
    print(message.payload)

async with Client("test.mosquitto.org") as client:
    await client.subscribe("temperature/#", handle_temperature)
    await client.subscribe("humidity/{room}/#", handle_humidity)
    # Block here or do something else such that we don't exit the context manager

However, this would be a big change to the interface that I'm not sure is worth it. Some more intricate ways of prioritizing and handling messages concurrently would for example be more difficult to achieve. I believe that one of aiomqtt's strengths is that it's very flexible. The if/else design is simple, but I'm reluctant to move away from it, because it's so intuitive and flexible.
@frederikaalund, what do you think about all this? 😊

my PR https://github.com/sbtinstruments/aiomqtt/pull/302 has code that does this.
async def get_temperature(client):
    async with subscription("temperature/#") as sub:
        async for msg in sub:
            await handle_temperature(msg)
    print(message.payload)

async with Client("test.mosquitto.org") as client, anyio.create_task_group() as tg:
    tg.start_soon(get_temperature, client)
    tg.start_soon(get_humidity, client)

The "old" subscribe+async-iterate-client.messages still works. I'm using subscription identifiers, so no expensive topic comparisons required.

@smurfix how does it work? Does it make a new connection for every subscription? Does it do any deduplication work, for example if a subscription to # is made, and a subscription to something/#, is only one upstream subscription created?

The MQTT protocol has a nice feature where you can send a code along with each subscription; the server adds the codes of all matching subscriptions to the PUBLISH packet that it sends to you. I simply go through that list and forward the message to all queues that want it.

But if I have two 'processes' that use the data from the same subscription, that subscription is not 'reused' from the MQTT server perspective, there is a subscription for each time client.subscription("temperature/#") is created?

a subscription for each time client.subscription("temperature/#") is created

That part doesn't work because you can't ask the MQTT server for two (non-shared) subscriptions on the same topic. That's per the MQTT protocol specification.
I thought about implementing this (simply attach more than one queue to the topic) but if you try you run into interesting problems (does the second task want retained messages? does the server even send them when you re-SUBSCRIBE? if so, shall the existing task get these too? which QoS should be used and what about the other properties you can attach to a subscription?) which I don't have a good answer for, thus for now the code doesn't allow duplicate subscriptions.
What you can do is for one task to ask for $share/foo/temperature/#, and the other ask for $share/bar/temperature/# (or to use the unshared topic). Messages to temperature/basement/heating will then be delivered to both.
Assuming, of course, that you use MQTT5 and that the server supports shared subscriptions.

I just wonder how it will go with the more interesting cases. I think the variant 'temperature/#' (storage in database) and 'temperature/site_no_1' (streaming to a client) needs the explanation. Will there be one subscription or two?

@skinkie Well if one task calls async with client.subscription("temperature/#") and the other does async with client.subscription("temperature/somewhere") then obviously that's two subscriptions.
A reasonable server will send us messages to "temperature/somewhere exactly once, tagged with both subscription IDs.

@smurfix I was not aware this subscription id could be duplicate on a message level as well. In that case this is a very clean implementation. My rationale was that the subscribing client was responsible for the deduplication of the inter process communication. Now you basically have pushed this to the server by using the subscription IDs.

Or rather I have asked the server to please tell us about the result of its dispatching effort.
There's no deduplication involved – at least unless you also consider shared subscriptions. Those are separate from unshared subscriptions, thus when you have both shared and unshared subscriptions that match a message, the server is free to send the same message twice — mosquitto does that.
You can't handle the resulting ambiguity without using subscription IDs.


'mosaic' tool panicking with unspecified inputs

I'm trying to create a single mosaic from many (~12,000) tif tiles and keep receiving the following:

thread 'main' panicked at 'There is something incorrect about the input files. At least two inputs are required to operate this tool.', src\main.rs:72:21
note: run with RUST_BACKTRACE=1 environment variable to display a backtrace

I am running WB v1.3.1 in a Jupyter Notebook in Python 3.7 on a Windows 7 Pro PC.
given:
in_folder = "C:\\Users\\SomeUser\\LiDAR_Tiles\\"
out_raster = "D:\\SpatialData\\Topo\\LiDARDEM_2013_AOI.tif"

os.chdir(in_folder)
print("Working directory: {}".format(in_folder))

I've tried:
wbt.mosaic(out_raster, inputs=None)
wbt.mosaic(out_raster)
wbt.mosaic(,out_raster)
I've also tried inputting from a list:
tiles = []
for file in glob.glob("*.tif"):
    tiles.append(file)

wbt.mosaic((i for i in tiles), output=out_raster)

wbt.mosaic(tiles, out_raster)
Any help is appreciated.

Try the WBT Runner to see if it works. If yes, then the issue is either caused by your source code or the Python frontend. Try mosaicking a few files first before using ~12,000 files. Since you already created the list, it should probably be wbt.mosaic(tiles, output=out_raster)
import whitebox
whitebox.Runner()

Also try this:
tiles = []
for file in glob.glob("*.tif"):
    tiles.append(file)

in_rasters = ';'.join(tiles)

wbt.mosaic(inputs=in_rasters, output=out_raster)

Good suggestions.
re:

'mosaic' through Runner() works with limited test set
adding the join statement to the notebook allows the 'mosaic' to run, but I get the following:

*********************
* Welcome to Mosaic *
*********************
Number of tiles: 5
Reading data...
Warning: Error reading file DEM_BN33_2013_1000_3111.tif
Progress: 0%
Warning: Error reading file DEM_BN33_2013_1000_3112.tif
Progress: 25%
Warning: Error reading file DEM_BN33_2013_1000_3211.tif
Progress: 50%
Warning: Error reading file DEM_BN33_2013_1000_3212.tif
Progress: 75%
Warning: Error reading file DEM_BN33_2013_1000_3213.tif
Progress: 100%
thread 'main' panicked at 'index out of bounds: the len is 0 but the index is 0', src\tools\image_analysis\mosaic.rs:422:29
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

However, your join suggestion led me to try:
in_rasters = ';'.join((in_folder+i) for i in tiles)
So the solution is passing the entire path and name with each file.
Cheers

solution was passing the entire path and name with each file:
in_rasters = ';'.join((in_folder+i) for i in tiles)

When mosacing large numbers of tiles, the best approach is to set the working directory to a directory containing your input images (and no other rasters) and then run the mosaic tool without specifying any input file names. The input files parameter is optional for this reason. When left unspecified, the tool will simply discover all rasters in the working directory. This approach has worked for me when I have mosaiced over 23,000 tiles at one time.

Cheers John.  I attempted that initially (as indicated in the user-manual), but unsuccessfully.
In addition to the syntax variants I tried (see initial my post), I get the following when I run on the test data:
in_folder = "C:\\Users\\Will\\Desktop\\Temp\\LiDAR_Tiles\\test\\"
os.chdir(in_folder)
wbt.mosaic(out_raster)

Welcome to Mosaic *

Number of tiles: 0
thread 'main' panicked at 'There is something incorrect about the input files. At least two inputs are required to operate this tool.', src\main.rs:72:21
note: run with RUST_BACKTRACE=1 environment variable to display a backtrace

if trying as a keyword arg:
wbt.mosaic(output=out_raster)

Welcome to Mosaic *

Number of tiles: 0
thread 'main' panicked at 'There is something incorrect about the input files. At least two inputs are required to operate this tool.', src\main.rs:72:21
note: run with RUST_BACKTRACE=1 environment variable to display a backtrace

The only way I seem to be able to get it to run successfully (on test data set) is if I compile a list of files, then join to a single string. Any other thoughts on what to try?

reopening as I get the following error when scaling-up the list-based workaround I used on test data:

[WinError 206] The filename or extension is too long

Which makes sense given the full path X number of files.


Node crashes if timeout (rc: -7) is thrown during init()

Describe the bug
If timeout is reached (rc: -7) during the first init() call, I receive the error below and app crashes with code: 139.
Assertion failed: loop->watchers[w->fd] == w

I am sure that app doesn't use Zookeeper instance until there is a 'connect' event (which is never received).
To Reproduce

Initialize Zookeeper via .init() or .connect() with a timeout set to a tiny value. E.g. 5ms. (This will produce the same effect as on our server, where timeout is set to 10000ms.)
See error.

Error Log
2021-01-11 16:58:46,945:14539:ZOO_INFO@log_env@1102: Client environment:zookeeper.version=zookeeper C client 3.5.8
2021-01-11 16:58:46,945:14539:ZOO_INFO@log_env@1106: Client environment:host.name=project
2021-01-11 16:58:46,945:14539:ZOO_INFO@log_env@1113: Client environment:os.name=Linux
2021-01-11 16:58:46,945:14539:ZOO_INFO@log_env@1114: Client environment:os.arch=4.19.121-linuxkit
2021-01-11 16:58:46,946:14539:ZOO_INFO@log_env@1115: Client environment:os.version=#1 SMP Tue Dec 1 17:50:32 UTC 2020
2021-01-11 16:58:46,946:14539:ZOO_INFO@log_env@1123: Client environment:user.name=(null)
2021-01-11 16:58:46,946:14539:ZOO_INFO@log_env@1131: Client environment:user.home=/home/node
2021-01-11 16:58:46,946:14539:ZOO_INFO@log_env@1143: Client environment:user.dir=/srv
2021-01-11 16:58:46,946:14539:ZOO_INFO@zookeeper_init_internal@1177: Initiating client connection, host=zookeeper:2181 sessionTimeout=5 watcher=0x7f988ef61490 sessionId=0 sessionPasswd=<null> context=0x5623b4960d20 flags=0
2021-01-11 16:58:46,947:14539:ZOO_DEBUG@get_next_server_in_reconfig@1330: [OLD] count=0 capacity=0 next=0 hasnext=0
2021-01-11 16:58:46,947:14539:ZOO_DEBUG@get_next_server_in_reconfig@1333: [NEW] count=1 capacity=16 next=0 hasnext=1
2021-01-11 16:58:46,947:14539:ZOO_DEBUG@get_next_server_in_reconfig@1344: Using next from NEW=<IP_ADDRESS>:2181
2021-01-11 16:58:46,947:14539:ZOO_DEBUG@zookeeper_connect@2232: [zk] connect()
Interest in (fd=19, read=true, write=true, timeout=1)
2021-01-11 16:58:46,957:14539:ZOO_WARN@zookeeper_interest@2284: Exceeded deadline by 9ms
zk_timer_cb fired
ping timer went off
2021-01-11 16:58:46,957:14539:ZOO_ERROR@handle_socket_error_msg@2386: Socket [<IP_ADDRESS>:2181] zk retcode=-7, errno=110(Operation timed out): connection to <IP_ADDRESS>:2181 timed out (exceeded timeout by 7ms)
2021-01-11 16:58:46,958:14539:ZOO_DEBUG@cleanup@1785: Previous connection=[<IP_ADDRESS>:2181] delay=0
yield:zookeeper_interest returned error: -7 - operation timeout
zk_timer_cb fired
ping timer went off
2021-01-11 16:58:46,959:14539:ZOO_WARN@zookeeper_interest@2284: Exceeded deadline by 11ms
2021-01-11 16:58:46,960:14539:ZOO_DEBUG@get_next_server_in_reconfig@1330: [OLD] count=0 capacity=0 next=0 hasnext=0
2021-01-11 16:58:46,960:14539:ZOO_DEBUG@get_next_server_in_reconfig@1333: [NEW] count=1 capacity=16 next=1 hasnext=0
2021-01-11 16:58:46,960:14539:ZOO_DEBUG@get_next_server_in_reconfig@1355: Failed to find either new or old
2021-01-11 16:58:46,960:14539:ZOO_DEBUG@zookeeper_connect@2232: [zk] connect()
Assertion failed: loop->watchers[w->fd] == w (../deps/uv/src/unix/core.c: uv__io_stop: 932)

Expected behavior
Timeout doesn't crash node app and closes client connection, so I could recreate client instance and retry to connect.
Desktop (please complete the following information):

OS: Linux
Node.js version: v10.23.0

Thank you for reporting this @sirmonin!

Thank you for reporting this @sirmonin!

Could be related to https://github.com/yfinkelstein/node-zookeeper/issues/238#issuecomment-592926907

Could be related to https://github.com/yfinkelstein/node-zookeeper/issues/238#issuecomment-592926907

Hi @sirmonin!
To find out what could be wrong:

What version of node-zookeeper are you using?
What version of the ZooKeeper server are you connecting to?

Hi @sirmonin!
To find out what could be wrong:

What version of node-zookeeper are you using?
What version of the ZooKeeper server are you connecting to?

@DavidVujic, thanks for a quick reply!
node-zookeeper: Tested both on 4.6.0 and 4.7.1
Zookeeper: I am using bitnami/zookeeper:latest which is 3.6.2

@DavidVujic, thanks for a quick reply!
node-zookeeper: Tested both on 4.6.0 and 4.7.1
Zookeeper: I am using bitnami/zookeeper:latest which is 3.6.2

Great, thanks!

Great, thanks!

@DavidVujic It is also observed, that timeout with crashing happens while application is running under some load.

@DavidVujic It is also observed, that timeout with crashing happens while application is running under some load.

Thanks!
I'm planning to look at this later this week.
Notes:
I think there is need for some extra uv_closing (or something similar) checks here: https://github.com/yfinkelstein/node-zookeeper/blob/master/src/node-zk.cpp#L265
As hinted in this StackOverflow post: https://stackoverflow.com/questions/47522854/main-src-unix-core-c117-uv-close-assertion-uv-is-closinghandle-failed
If you, or if you know someone with C and/or C++ skills, please feel free to jump in and help 😄 It is much appreciated.

Thanks!
I'm planning to look at this later this week.
Notes:
I think there is need for some extra uv_closing (or something similar) checks here: https://github.com/yfinkelstein/node-zookeeper/blob/master/src/node-zk.cpp#L265
As hinted in this StackOverflow post: https://stackoverflow.com/questions/47522854/main-src-unix-core-c117-uv-close-assertion-uv-is-closinghandle-failed
If you, or if you know someone with C and/or C++ skills, please feel free to jump in and help 😄 It is much appreciated.

Just a short update: I'm working on this issue and am trying different approaches on how to solve it. I also believe I can reproduce the assertion error using the code in the examples folder and restart a docker container with a zookeeper server running.

Just a short update: I'm working on this issue and am trying different approaches on how to solve it. I also believe I can reproduce the assertion error using the code in the examples folder and restart a docker container with a zookeeper server running.

Hello again @sirmonin!
I've been working on solving this issue, but cannot really find where and how to prevent the assertion error to happen.
What I've found out is that it most likely is when watchers are attached. Earlier today I pushed new versions of the code in the examples folder, making sure only one client is used, and function calls is made only when the client is connected.
And that has made a difference: on Mac OS X I get no assertion error. But on Linux I get the error - only occasionally. Haven't found a pattern.
The way I've been doing is:
starting a zookeeper server hosted in a docker container on my local machine.
starting the examples with node examples/index.js
running docker restart <container-id>
Before the changes in the example code, I got assertion error every time. Now, only randomly it seems and only on Linux.
I have never got the error you are describing (with short timeouts).
Could you help me by sharing another code example, or if you can try the example code described above?

Hello again @sirmonin!
I've been working on solving this issue, but cannot really find where and how to prevent the assertion error to happen.
What I've found out is that it most likely is when watchers are attached. Earlier today I pushed new versions of the code in the examples folder, making sure only one client is used, and function calls is made only when the client is connected.
And that has made a difference: on Mac OS X I get no assertion error. But on Linux I get the error - only occasionally. Haven't found a pattern.
The way I've been doing is:
starting a zookeeper server hosted in a docker container on my local machine.
starting the examples with node examples/index.js
running docker restart <container-id>
Before the changes in the example code, I got assertion error every time. Now, only randomly it seems and only on Linux.
I have never got the error you are describing (with short timeouts).
Could you help me by sharing another code example, or if you can try the example code described above?

Hi @DavidVujic! Thanks a lot for time and effort you've spent on this issue.
My zookeeper connect method looks like this. Timeout is set to 5ms to simulate timeout error.
const connect = () => {
        const host = this.config.get('ZOOKEEPER_HOST');
        const port = this.config.get('ZOOKEEPER_PORT');
        this.zkConfig = {
            connect: `${host}:${port}`,
            timeout: 5,
            debug_level: ZooKeeper.ZOO_LOG_LEVEL_DEBUG,
            host_order_deterministic: false,
        };

        this.client = new ZooKeeper(this.zkConfig);

        this.client.init(this.zkConfig);
    };

This produces error logs:
2021-02-01 17:34:32,821:139:ZOO_INFO@log_env@1098: Client environment:zookeeper.version=zookeeper C client 3.5.5
2021-02-01 17:34:32,821:139:ZOO_INFO@log_env@1102: Client environment:host.name=test
2021-02-01 17:34:32,821:139:ZOO_INFO@log_env@1109: Client environment:os.name=Linux
2021-02-01 17:34:32,821:139:ZOO_INFO@log_env@1110: Client environment:os.arch=4.19.121-linuxkit
2021-02-01 17:34:32,821:139:ZOO_INFO@log_env@1111: Client environment:os.version=#1 SMP Tue Dec 1 17:50:32 UTC 2020
2021-02-01 17:34:32,821:139:ZOO_INFO@log_env@1119: Client environment:user.name=(null)
2021-02-01 17:34:32,821:139:ZOO_INFO@log_env@1127: Client environment:user.home=/home/node
2021-02-01 17:34:32,821:139:ZOO_INFO@log_env@1139: Client environment:user.dir=/srv
2021-02-01 17:34:32,821:139:ZOO_INFO@zookeeper_init_internal@1173: Initiating client connection, host=zookeeper:2181 sessionTimeout=5 watcher=0x7f365d600480 sessionId=0 sessionPasswd=<null> context=0x55d714f278a0 flags=0
Interest in (fd=19, read=true, write=true, timeout=1)2021-02-01 17:34:32,823:139:ZOO_DEBUG@get_next_server_in_reconfig@1326: [OLD] count=0 capacity=0 next=0 hasnext=0
2021-02-01 17:34:32,823:139:ZOO_DEBUG@get_next_server_in_reconfig@1329: [NEW] count=1 capacity=16 next=0 hasnext=1
2021-02-01 17:34:32,823:139:ZOO_DEBUG@get_next_server_in_reconfig@1340: Using next from NEW=<IP_ADDRESS>:2181
2021-02-01 17:34:32,823:139:ZOO_DEBUG@zookeeper_connect@2228: [zk] connect()
zk_timer_cb firedping timer went off2021-02-01 17:34:32,832:139:ZOO_WARN@zookeeper_interest@2280: Exceeded deadline by 9ms
yield:zookeeper_interest returned error: -7 - operation timeout
2021-02-01 17:34:32,833:139:ZOO_ERROR@handle_socket_error_msg@2382: Socket [<IP_ADDRESS>:2181] zk retcode=-7, errno=110(Operation timed out): connection to <IP_ADDRESS>:2181 timed out (exceeded timeout by 7ms)
2021-02-01 17:34:32,833:139:ZOO_DEBUG@cleanup@1781: Previous connection=[<IP_ADDRESS>:2181] delay=0
zk_timer_cb firedping timer went off2021-02-01 17:34:32,834:139:ZOO_WARN@zookeeper_interest@2280: Exceeded deadline by 11ms
2021-02-01 17:34:32,835:139:ZOO_DEBUG@get_next_server_in_reconfig@1326: [OLD] count=0 capacity=0 next=0 hasnext=0
2021-02-01 17:34:32,835:139:ZOO_DEBUG@get_next_server_in_reconfig@1329: [NEW] count=1 capacity=16 next=1 hasnext=0
2021-02-01 17:34:32,836:139:ZOO_DEBUG@get_next_server_in_reconfig@1351: Failed to find either new or old
2021-02-01 17:34:32,836:139:ZOO_DEBUG@zookeeper_connect@2228: [zk] connect()
Interest in (fd=20, read=true, write=true, timeout=1)Assertion failed: loop->watchers[w->fd] == w (../deps/uv/src/unix/core.c: uv__io_stop: 932)

However, adding a setTimeout seemed to help a bit. App is no longer crashing and tries to reconnect.
const connect = () => {
        const host = this.config.get('ZOOKEEPER_HOST');
        const port = this.config.get('ZOOKEEPER_PORT');
        this.zkConfig = {
            connect: `${host}:${port}`,
            timeout: 5,
            debug_level: ZooKeeper.ZOO_LOG_LEVEL_DEBUG,
            host_order_deterministic: false,
        };

        this.client = new ZooKeeper(this.zkConfig);

        setTimeout(() => {
            this.client.init(this.zkConfig);
        }, 1000);
    };

Thanks @sirmonin!

I'm closing this one. Please reopen if it still is an issue!

@DavidVujic Issue still persists when server is under high load.
2022-04-29 17:48:16,829:448:ZOO_ERROR@handle_socket_error_msg@2489: Socket <IP_ADDRESS>:2181 zk retcode=-7, errno=110(Operation timed out): connection to <IP_ADDRESS>:2181 timed out (exceeded timeout by 8849ms)
yield:zookeeper_interest returned error: -7 - operation timeout
2022-04-29 17:48:18,481:448:ZOO_WARN@zookeeper_interest@2375: Exceeded deadline by 12182ms
Assertion failed: loop->watchers[w->fd] == w (../deps/uv/src/unix/core.c: uv__io_stop: 930)

Thank you for notifying. I'll reopen this one!

@DavidVujic I tested under Node v16.14.2. It looks like yield:zookeeper_interest returned error: -7 - operation timeout no longer causes libuv to fail.
Will keep you posted in case issue repeats itself again.
For now the issue is solved by updating to Node v16.14.2 or later.


bump: update notation-go and notation-core-go dependency

bump: update notation-go and notation-core-go dependency

Codecov Report

Merging #557 (cae91c5) into main (d62fd58) will not change coverage.
The diff coverage is n/a.

:mega: This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more
@@           Coverage Diff           @@
##             main     #557   +/-   ##
=======================================
  Coverage   34.36%   34.36%
=======================================
  Files          32       32
  Lines        1848     1848
=======================================
  Hits          635      635
  Misses       1192     1192
  Partials       21       21

:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more


Deploy webhook in pod admission restricted mode

What type of PR is this?

/kind feature
What this PR does / why we need it:
This PR provides defaults compatible with pod admission controller restricted policy for the webhook config.
Which issue(s) this PR fixes:

Fixes #
Does this PR introduce a user-facing change?:

Webhook config works with PodAdmission restricted

Thanks @jcpunk! Removing hold since v0.7.0 has been removed.
/hold cancel
/ok-to-test

I'm not sure why the test are failing...

@jcpunk It failed due to yaml files check, and the error messages can be found here: https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_gateway-api/2016/pull-gateway-api-verify/1658290219671097344#1:build-log.txt%3A492