chore: release 1.0.1

:robot: I have created a release *beep* *boop*
1.0.1 (2021-07-28)
Bug Fixes

force rebuild release (e80d8b2)

This PR was generated with Release Please. See documentation.

:robot: Release is at https://github.com/devbranch-vadym/portainerssh/releases/tag/v1.0.1 :sunflower:


GetMarketSymbolsMetadata for ZB.com

@superhappychris, can you review?

@vslee looks good to me!

Thanks for looking, wanted to make sure base/quote were set correctly (not reversed).


50629.cross compile libksba

Motivation for this change
libksba fails to cross-compile.  Fixes #50629
Things done

[ ] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS)
Built on platform(s)

[ ] NixOS
[ ] macOS
[X] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nox --run "nox-review wip"
[ ] Tested execution of all binary files (usually in ./result/bin/)
[ ] Determined the impact on package closure size (by running nix path-info -S before and after)
[ ] Fits CONTRIBUTING.md.

Thanks!


vSphere provisionned cluster failed

What kind of request is this (question/bug/enhancement/feature request):
bug
Steps to reproduce (least amount of steps as possible):
Create cluster provisionned by vSphere
Result:
Error :
2019/01/22 10:22:34 [ERROR] NodeController c-nnpsb/m-md7zs [node-controller] failed with : Error with pre-create check: "Post https://<IP_ADDRESS>:443/sdk: dial tcp <IP_ADDRESS>:443: i/o timeout"
2019/01/22 10:22:34 [ERROR] NodeController c-nnpsb/m-5vg89 [node-controller] failed with : Error with pre-create check: "Post https://<IP_ADDRESS>:443/sdk: dial tcp <IP_ADDRESS>:443: i/o timeout"
2019/01/22 10:22:34 [ERROR] NodeController c-nnpsb/m-wm49m [node-controller] failed with : Error with pre-create check: "Post https://<IP_ADDRESS>:443/sdk: dial tcp <IP_ADDRESS>:443: i/o timeout"
Other details that may be helpful:
I have followed the assistant, no specific configuration
Environment information

Rancher version (rancher/rancher/rancher/server image tag or shown bottom left in the UI): v2.1.5
Installation option (single install/HA): single install

Cluster information

Cluster type (Hosted/Infrastructure Provider/Custom/Imported): vSphere 6.7.0
Machine type (cloud/VM/metal) and specifications (CPU/memory): VM (2 cpu, 4096 RAM)
Kubernetes version (use kubectl version): no (docker compose image)

(paste the output here)

Docker (use docker info):
Containers: 5
Running: 5
Paused: 0
Stopped: 0
Images: 5
Server Version: 18.06.1-ce
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version:  (expected: 468a545b9edcd5932818eb9de8e72413e616e86e)
runc version: N/A (expected: 69663f0bd4b60df09991c08812a60108003fa340)
init version: v0.18.0 (expected: fec3683b971d9c3ef73f284f176672c44b448662)
Security Options:
apparmor
seccomp
Profile: default
Kernel Version: 4.15.0-43-generic
Operating System: Ubuntu 18.04.1 LTS
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 3.853GiB
Name: tpl-ubuntu-18-04
ID: ZQJC:OYDO:IUV5:FF7B:GWO5:6BXE:YTSH:M3GX:YRBK:H2HI:KCO3:KEDG
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
<IP_ADDRESS>/8
Live Restore Enabled: false

WARNING: No swap limit support
(paste the output here)

same issue here.  on-prem vcenter using appliances (that need /vimService.wsdl).  Cannot deploy cluster with 404 errors

Is there any workaround available for vSphere 6.7?

I'm also seeing this issue.

Any update on this?  Does this mean Rancher is unable to provision clusters whatsoever on vSphere 6.7?  This issue seems to indicate cluster creation is possible on v6.7 but I don't see how with this open issue.


Feature request: Copy reference/relative path

Pretty useful and implemented in IDEs like IntelliJ IDEA: ability to copy reference/relative path to the file in project tree, or to current line/definition in editor.
At this point there's a "Copy Path" menu item, which is pretty useless to me, always have to paste it, modify and then send to colleagues.
What I expect is actually a path like src/app.js instead of /Users/.../Repo/.../src/app.js. And src/app.js:123 when copied from editor, pointing to specific line.
Mostly switched to VSCode, so hope it'll be even more convenient.
Thanks!

Sounds like an extension candidate 👍

@z-ax Something along these lines exists in marketplace, though it doesn't really satisfy your requirement I guess:
https://marketplace.visualstudio.com/items?itemName=alexdima.copy-relative-path

Well, I added it as feature request because I'd even replace current (barely used) "Copy Path".
Not sure about the most.
Also, often need a reference to the line as well.

@z-ax Fully agree on the line reference, that would be a very useful feature for pointing colleagues to a specific code line.
I'd have started an extension for this, just was a bit reluctant on flooding the marketplace with dozens of extensions that more or less do the same thing.
But your proposal seems different enough compared to the existing ones to warrant its own extension.

@z-ax Give this a spin, maybe it helps:
https://marketplace.visualstudio.com/items?itemName=bgse.relative-path-and-line
Certainly not ideal, but at least provides a way to quickly copy some file/line reference suitable for quickopen.
If using Linux, you need xclip installed, not sure about Windows/OSX.

@bgse thanks, will get this, with hope that it'll become a part of IDE some time :)

@bgse great extension, thks
Is there a way to add those commands to the right click menu?

@canda I already had context menu integration in mind, definitely for file explorer, but your idea sounds very interesting too.
Repo is here, in case you want to open an issue for your suggestion or make a PR:
https://github.com/bgse/relative-path-and-line

+1 on this. It can be an absolute time sink if you restructure your files within a project and need to adjust all the relative imports.

What?

For heaven's sake, please reopen this. This is clearly a core feature which needs to be addressed before we can take VSCode seriously

*Dot Net Core


Reproduce a bug when an index route is next to a pathless directory

In the following route structure:
app/routes
└── nested
    ├── __pathless
    │   ├── bar.jsx
    │   └── foo.jsx
    ├── __pathless.jsx
    └── index.jsx

Remix incorrectly figures out what to show in the /nested route. Instead of showing nested/index.jsx, it shows an empty nested/__pathless route, i.e. the contents of the nested/__pathless.jsx layout with nothing in the <Outlet />. The misinterpretation is broken down in https://github.com/remix-run/remix/discussions/3014#discussioncomment-2666749.
This only happens for routes nested at least one level deep, that's why the nested directory is here.
Reproduces: https://github.com/remix-run/remix/discussions/3014, but it's just a discussion, should I create a bug report as well?

[ ] Docs
[x] Tests

Testing Strategy: npm run bug-report-test

Thanks for the bug report @silvenon!  I'm going to close this out as I've copied the bug over into https://github.com/remix-run/remix/pull/3986


ModuleNotFoundError: No module named 'senticnet5'

After reading their paper, I think they used senticnet6, so I did the following:
pip install senticnet==1.6
Then changed from import senticnet5 to from senticnet import senticnet6
I then changed senticnet5.senticnet.get(tosearcsenticnet) to senticnet6.senticnet.get(tosearcsenticnet)
It's worked so far but I'm not sure if there are any notable differences.

@basicallybene , thank you very much for your sharing.


fix: search loading

Summary
Related Issue

Checklist

[ ] Tests updated (or not required).
[ ] Documentation updated (or not required).

!canary

!canary


Ignore empty json in HCL output

Due to migration to AWS (and how it interacts with the Cromwell job runner), we are now obligated to output both observation and feature JSON-format files from our hierarchical clustering tool.
Previously, if a user selected "cluster on observations", there would not be a file for the feature clustering. Now there is, but it's effectively empty (e.g. {}). The frontend should see the empty tree and display a warning/message about that. At the moment, it displays just a single node, so it's not clear that this is expected.

This has been fixed.


NPM 4 breaks npm run prepare

Update: Current workaround is to downgrade to npm 3: npm install -g npm@latest-3
As part of the development install step we ask users to run npm run prepare
This no longer works with NPM v4 due to it using the name of the script 'prepare' for a package's install lifecycle.
This is because npm runs scripts with the name prepare when executing npm install, and in our prepare script we invoke npm install. That probably causes an infinite loop or npm goes into an undefined state.
We need to differentiate the script name or adapt our build steps to work with the new intended 'prepare' script usage.

Indeed!
https://github.com/npm/npm/releases/tag/v4.0.0

NEW prepare SCRIPT. prepublish DEPRECATED (BREAKING)
prepublish has been deprecated, replaced by prepare. A prepublishOnly script has been temporarily added, which will only run on npm publish.

Let's rename Readium's prepare script task to ... configure? init? setup?

When caaling npm install like this it works.But after it npm run build or npm run dist both fails for the same issue.
How should i call them to get readium cloud reader?

@mahag, what are your NodeJS and NPM versions, OS, and what are the error messages?

NodeJs is 4.5.
OS is windows7 64-bit
and for npm how can i know its version ?
This is the error i am getting when running npm run dist

the error indicates that 'npm run prepare' need to be executed first.
could you please try?

npm run prepare fails

and when running instead of it npm install -g npm@latest-3 i get only this

Related: https://github.com/readium/readium-js/issues/178 and https://github.com/readium/readium-js-viewer/issues/622

Closing this issue, all discussions / fixes now here https://github.com/readium/readium-js/issues/178


fix: incorrect alignment of footer logo and os code name 🛠

Close #1191
Description

Fixes the incorrect alignment of heading and os-code logo on footer to improve UI.

Screenshots

Checklist:

[x] I have linked the PR to the correct issue.
[x] I have read the Contribution Guidelines
[x] I have built and tested the changes, and they do not break or show any errors.

To resolve the bug Make sure to merge this PR @Vaishnavi-Patil2211.


Add more components to OTLP distro

As discussed in https://github.com/open-telemetry/opentelemetry-collector-releases/pull/663#discussion_r1765134837, we should consider adding the following components to the OTLP distro eventually:

[ ] auth extension(s)
[ ] pprof extension
[ ] debug exporter
[ ] healthcheck v2 extension

Recommended processors list https://github.com/open-telemetry/opentelemetry-collector/tree/main/processor#recommended-processors needs to be amended/we should add those to this distro


Add ability to override the machine's PG version

Like memory and CPU, users may want to specify their version of
PostgreSQL to use for recommendations. For example, when generating
configuration files for another machine that the tool is being
run on. This also obviates the need for pg_config to be installed
on the machine where the tool is being run since it can just be
provided.

Codecov Report

Merging #31 into master will increase coverage by 0.13%.
The diff coverage is 100%.

@@            Coverage Diff             @@
##           master      #31      +/-   ##
==========================================
+ Coverage   89.97%   90.11%   +0.13%
==========================================
  Files          16       16
  Lines         798      809      +11
==========================================
+ Hits          718      729      +11
  Misses         68       68
  Partials       12       12

Impacted Files
Coverage Δ

pkg/tstune/tuner.go
82.37% <100%> (+0.6%)
:arrow_up:

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 a9bdecd...91e3b51. Read the comment docs.


Log error when direct message listener fails

Currently when Error is encountered while invoking direct message listener, default error handler terminates JVM without any information about the issue. My Spring application was shutdown and I had no clue why that happened. During debugging I discovered an exception which was caused by incorrect project dependencies:
java.lang.NoSuchMethodError: 'com.fasterxml.jackson.core.util.JacksonFeatureSet com.fasterxml.jackson.core.JsonParser.getReadCapabilities()'
I'm suggesting to log an error message before JVM is terminated.
@pivotal-issuemaster This is an Obvious Fix

@arnis ,
thank you very much for the contribution; looking forward for more!


libidn2 does not build on Darwin

wget now depends on libidn2, but it fails on Darwin at present (10.12.3) with:
idn2.c:34:10: fatal error: 'error.h' file not found
#include "error.h"
         ^
1 error generated.

cc @fpletz
I took a quick peek and those headers are marked as gnulib headers in the source:
/* Gnulib headers. */
#include "error.h"
#include "gettext.h"

How do they normally get there on a Linux build? I don't see them in the source tree.

glibc contains such a header: http://man7.org/linux/man-pages/man3/error.3.html

Dammit :)

On Feb 10, 2017, at 12:51, Vladimír Čunát<EMAIL_ADDRESS>wrote:
glibc contains such a header: http://man7.org/linux/man-pages/man3/error.3.html
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or mute the thread.

I've found a darwin machine and am trying to compile it... error.h is not in gnulib. \o/

How would you feel about disabling wget's IDN support on Darwin for now?

 :/
  CC       ftp.o
ftp.c:1466:19: error: no member named 'rpl_unlink' in 'struct options'
          if (opt.unlink && file_exists_p (con->target))
              ~~~ ^
../lib/unistd.h:1851:19: note: expanded from macro 'unlink'
#   define unlink rpl_unlink
                  ^
1 error generated.

Disabling IDN seems fine. Perhaps wget folks don't care about darwin though?


HR Diagram Unit Test failing

/opt/hostedtoolcache/Python/3.9.13/x64/lib/python3.9/site-packages/pandas/core/arraylike.py:397: RuntimeWarning: invalid value encountered in log10
result = getattr(ufunc, method)(*inputs, **kwargs)
/opt/hostedtoolcache/Python/3.9.13/x64/lib/python3.9/site-packages/pandas/core/arraylike.py:397: RuntimeWarning: invalid value encountered in log10
result = getattr(ufunc, method)(*inputs, **kwargs)
Traceback (most recent call last):
[·] Generating HR diagrams for Golden sets
File "/home/runner/work/scope/scope/./scope.py", line 755, in
fire.Fire(Scope)
File "/opt/hostedtoolcache/Python/3.9.13/x64/lib/python3.9/site-packages/fire/core.py", line 141, in Fire
component_trace = _Fire(component, args, parsed_flag_args, context, name)
File "/opt/hostedtoolcache/Python/3.9.13/x64/lib/python3.9/site-packages/fire/core.py", line 466, in _Fire
component, remaining_args = _CallAndUpdateTrace(
File "/opt/hostedtoolcache/Python/3.9.13/x64/lib/python3.9/site-packages/fire/core.py", line 681, in _CallAndUpdateTrace
component = fn(*varargs, **kwargs)
File "/home/runner/work/scope/scope/./scope.py", line 424, in doc
plot_gaia_hr(
File "/home/runner/work/scope/scope/scope/utils.py", line 243, in plot_gaia_hr
ax.errorbar(
File "/opt/hostedtoolcache/Python/3.9.13/x64/lib/python3.9/site-packages/matplotlib/init.py", line 1423, in inner
return func(ax, *map(sanitize_sequence, args), **kwargs)
File "/opt/hostedtoolcache/Python/3.9.13/x64/lib/python3.9/site-packages/matplotlib/axes/_axes.py", line 3587, in errorbar
raise ValueError(
ValueError: 'yerr' must not contain negative values
[✗] Generating HR diagrams for Golden sets

@mcoughlin it looks like there's a sign error in line 246 of utils.py:
gaia_data["M"] - gaia_data["Ml"],
should be flipped.
But I'm having trouble reproducing the error you posted above. I get several of
RuntimeWarning: invalid value encountered in log10
during the HR diagram generation while when running ./scope.py doc, but no ValueError.

@bfhealy Maybe a version thing with the requirements in the Github Actions?

@mcoughlin That's possible. I guess we could make the sign change and see what happens with the Action after that?

@bfhealy yeah seems like a good idea.

Seems like we fixed this.


Safe: function for generating encrypted key

#[code]# on the keypad will give you an encrypted key that you can replace in the program. The encrypted key is consloe.log'ed to the connected computer with a Espruino web ide open.

Make keyGeneration.js a function in espruino.js-file. And document a lilttle.


Use PUT when the agent deregisters a service

According to Consul's documentation, when deregestering a service, a PUT request should be used while in the code GET is used. This commit fixes that.

Superseded by #65


Fix data race in gemm.cpp

Using volatile for synchronization is unsafe: https://github.com/google/sanitizers/wiki/ThreadSanitizerAboutRaces#volatile
This popped up in one of our test under thread sanitizer.

Thanks for the contribution! :tada:


adding post_upgrade_update option

This should solve #134 or at least is needed to go with #159 if that ends up getting merged as well.

LGTM and is functionality that would have been useful to me on my current project.


EVEREST-532 fix mongo scheduled backups

Fix mongo scheduled backups
Problem:
EVEREST-532
MongoDB scheduled backups didn't show the cluster name and thus weren't being properly reconciled.
Related pull requests

#115

Cause:
In psmdb operator v1.15.0 the PSMDBCluster field is no longer being filled.
Solution:
Move to the new ClusterName field instead of PSMDBCluster.
CHECKLIST
Jira

[x] Is the Jira ticket created and referenced properly?

Tests

~[ ] Is an Integration test/test case added for the new feature/change?~
~[ ] Are unit tests added where appropriate?~

So this is a new version of the operator. Should we reference it in catalog, BE and cli for the 0.4.0 RC?

If there wasn't an update to the bundle we could just rebuild the operator v0.4.0 image and nothing else would need to change. With the change to the bundle I believe we'll also need to rebuild the catalog v0.4.0 image but I think that's it.


Timed events

Supersedes #24

So when I understand this correctly we are constantly popping and pushing in the BinaryHeap until a finished scheduled event is placed at the top, then we get this and execute it, right? Wouldn't it be smarter to just sort them from their time once and maybe use something like wakers in the async world instead of constantly whiling over it?

So when I understand this correctly we are constantly popping and pushing in the BinaryHeap until a finished scheduled event is placed at the top, then we get this and execute it, right? Wouldn't it be smarter to just sort them from their time once and maybe use something like wakers in the async world instead of constantly whiling over it?

No that's not what's happening. A binary heap is already sorted, so each cycle it checks which scheduled events are ready to be sent and then pushes those events into the event queue by popping them off of the binary heap. These are two different structures, event_queue and event_schedule.


New SKTypeface from an existing one but with different style settings

Using an old version of SkiaSharp v1.60 here... I want to create a new SKTypeface from an existing one but with a different Style. The code SKTypeface.FromTypeface worked just fine in Windows but sadly, it fails on macOS and Linux. Analyzing the new version of SkiaSharp, I see that method is now also obsolete. The only way I can see to create a new SKTypeface with a new style from an existing one is through the SKTypeface.FromFamilyName but the problem here is that the SKTypeface we want to "copy" with a new Style is loaded through SKTypeface.FromStream instead
So, is there any way to create a new SKTypeface from an existing one with a different style?
Thanks in advance

Would the SKFontManager.MatchTypeface be what you are looking for:
https://docs.microsoft.com//dotnet/api/skiasharp.skfontmanager.matchtypeface
Usage:
SKTypeface tf = ...
SKFontStyle style = ...
var newTypeface = SKFontManager.Default.MatchTypeface(tf, style);


Green Greenhouses

Nice overview in the README, and a fun idea for an app. Looking forward to testing it out.
As for the code itself, it's mostly competent but the readability is poor. Highly inconsistent code style with stuff like indentation, brace styles, docstrings, variable naming.. Some shadowing of built-ins and weird choice of data structures (like dicts where a simple tuple would be fine).


Update MCUX CTimer driver

Fix the CTimer set alarm function for the relative alarm case
Add a KConfig to give the user the option to reserve a CTimer channel to be used for set_top functionality.
Update the counter test test_multiple_alarms() in counter_basic_api to skip the test_multiple_alarms() test when the settop value is not supported. This is to avoid the case where wrap around take a long time thereby causing test failures

Fixes # 45751

test pass, at my side, as the log is too long, so I have a PR to disable the debug message for this test https://github.com/zephyrproject-rtos/zephyr/pull/45852


[pl] Fix polish translations

Sorted the json file keys alphabetically, removed unused lines and added missing lines.

Are you sure for unused lines ?

Yes, have a look at my other PR: https://github.com/caouecs/Laravel-lang/pull/1033.
I checked all the strings that are used in a fresh Laravel 5.8 app.

the master branch is not just for Laravel 5.8

Oh, ok. Sorry about that. I'll fix this and the other PR.

So what lines should be kept in the master branch and in the todo.md file? The ones needed in all Laravel versions from 5.1 till 5.7 or 5.8?

You should push PR to laravel58 branch


[Mangling] Shrink mangling of constrained extensions

Rather than mangling the complete generic signature of a constrained
extension, only mangle the requirements not already satisfied by the
nominal type. For example, given:
extension Dictionary where Value: Equatable {
  // OLD: _T0s10DictionaryV2t3s8HashableRzs9EquatableR_r0_lE3baryyF
  // NEW: _T0s10DictionaryV2t3s9EquatableR_rlE3baryyF
  public func bar() { }

}
In the existing mangling, we mangle the Key: Hashable requirement that’s
part of the generic signature. With this change, we only mangle the new
requirement (Value: Equatable). This is a win for constrained extensions
except in the case of a constrained extension of a nominal type
with a single, unconstrained generic parameter:
extension Array where Element: Equatable {
  // OLD: _T0Sa2t3s9EquatableRzlE3baryyF
  // NEW: _T0Sa2t3s9EquatableRzrlE3baryyF
  public func bar() { }
}

To address this, we can add a special encoding n for "generic signature with no generic parameters", which is currently rl. Which takes us to _T0Sa2t3s9EquatableRznE3baryyF.
Note: builds on top of https://github.com/apple/swift/pull/12391.

The wins from adding the n mangling for generic signatures were too small to justify spending that encoding space in the mangling scheme. https://github.com/apple/swift/pull/12394 goes with an approach that falls back to the original scheme in the narrow one-generic-parameter-with-no-requirements case, so it's a strict improvement over the status quo and very, very close to this one.


Refresh repository to reduce memory usage in background mode

Fixes #6727

This has fixed the error for me, but there are currently no open changes. I'd like to keep this pull request open for a few days and monitor the system's behavior.

Is it okay to use the default value abap_true for iv_drop_log? I'm not sure regarding possible side effects.

Is it okay to use the default value abap_true for iv_drop_log? I'm not sure regarding possible side effects.

yea, I think so

@ConjuringCoffee is the change ready for review?
https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request#marking-a-pull-request-as-ready-for-review

I kept the merge request as a draft because I wanted to monitor the fix a bit. Our nightly job was successful again, so that looks good to me.


Multiple aggregations in a single iteration

The idea I wish to propose/discuss is best illustrated through examples. Suppose you want count and sum up the numbers in a sequence. With LINQ's Count and Sum, you'd do it like this:
var xs = Enumerable.Range(10, 10);
Console.WriteLine((Count: xs.Count(), Sum: xs.Sum()));

Suppose now you want to also get the average:
Console.WriteLine((Count  : xs.Count(),
                   Sum    : xs.Sum(),
                   Average: xs.Average()));

Unfortunately, using these methods individually means the source ends up being iterated multiple times, once per aggregation. You could use LINQ's Aggregate to do multiple aggregations while iterating through the source once:
Console.WriteLine(
    xs.Aggregate(
        (Count: 0, Sum: 0),
        (a, x) => (a.Count + 1, a.Sum + x)));

Console.WriteLine(
    xs.Aggregate(
        (Count: 0, Sum: 0),
        (a, x) => (a.Count + 1, a.Sum + x),
        a => (Count: a.Count,
              Sum  : a.Sum,
              Avg  : (double) a.Sum / a.Count))); // average for free

However, as you increase the number of aggregations, some of which may not be trivial, the code becomes less readable and the seeds & accumulators get pulled further apart. By adding Aggregate overloads that allow multiple seeds, accumulators and a projector of all results like below:
public static TResult Aggregate<T, TState1, TState2, TResult>(
    this IEnumerable<T> source,
    TState1 seed1, Func<TState1, T, TState1> accumulator1,
    TState2 seed2, Func<TState2, T, TState2> accumulator2,
    Func<TState1, TState2, TResult> resultSelector) =>
    source.Aggregate(
        (seed1, seed2),
        (s, e) => (accumulator1(s.Item1, e), accumulator2(s.Item2, e)),
        s => resultSelector(s.Item1, s.Item2));

one can write something more natural:
Console.WriteLine(
    xs.Aggregate(
        0, (count, _) => count + 1,
        0, (sum, x) => sum + x,
        (count, sum) =>
            (Count: count,
             Sum  : sum,
             Avg  : (double) sum / count)));

Let's add another two aggregations, like getting the minimum and maximum value in addition to the count, sum and average. With an overload like this:
public static TResult Aggregate<T, TState1, TState2, TState3, TState4, TResult>(
    this IEnumerable<T> source,
    TState1 seed1, Func<TState1, T, TState1> accumulator1,
    TState2 seed2, Func<TState2, T, TState2> accumulator2,
    TState3 seed3, Func<TState3, T, TState3> accumulator3,
    TState4 seed4, Func<TState4, T, TState4> accumulator4,
    Func<TState1, TState2, TState3, TState4, TResult> resultSelector) =>
    source.Aggregate(
        (seed1, seed2, seed3, seed4),
        (s, e) => (accumulator1(s.Item1, e),
                   accumulator2(s.Item2, e),
                   accumulator3(s.Item3, e),
                   accumulator4(s.Item4, e)),
        s => resultSelector(s.Item1, s.Item2, s.Item3, s.Item4));

one can write:
Console.WriteLine(
    xs.Aggregate(
        0, (count, _) => count + 1,
        0, (sum, x) => sum + x,
        int.MaxValue, Math.Min,
        int.MinValue, Math.Max,
        (count, sum, min, max) =>
            (Count: count,
             Min  : count > 0 ? min : (int?) null,
             Max  : count > 0 ? max : (int?) null,
             Sum  : sum,
             Avg  : (double) sum / count)));

Note how using this approach, the existing Math.Min and Math.Max can be used directly as accumulators. With C# 7's local functions, complex accumulators can be expressed simply, even generically, and reused locally:
int Add(int x, int y) => x + y;
Func<int, int, int> AddRhsAs(int y) => (x, _) => x + y;
T Collect<T, U>(T collection, U item) where T : ICollection<U>
{
    collection.Add(item);
    return collection;
}

Console.WriteLine(
    xs.Aggregate(
        0, AddRhsAs(1),
        0, Add,
        int.MaxValue, Math.Min,
        int.MinValue, Math.Max,
        new List<int>(), Collect,
        (count, sum, min, max, list) =>
            (Count: count,
             Min  : count > 0 ? min : (int?) null,
             Max  : count > 0 ? max : (int?) null,
             Sum  : sum,
             Avg  : (double) sum / count,
             List : "[" + string.Join(", ", list) + "]")));

This sounds like a good idea!

@fsateler Glad to hear you like the idea. The API still needs a bit of work I feel because writing out an aggregation in-place, even something as simple as counting, means re-writing what's already there and could be tedious and error-prone. What's more, there's no opportunity for writing reusable accumulators. Here's what I am aiming for the next (possible final?) shape of the API:
Console.WriteLine(
    xs.Aggregate(
        a => a.Sum(),
        a => a.Count(),
        a => a.Min(),
        a => a.Max(),
        a => a.Collect(new List<int>()),
        (sum, count, min, max, list) => new
        {
            Sum     = sum,
            Count   = count,
            Average = (double) sum / count,
            Min     = min,
            Max     = max,
            Content = "[" + string.Join(", ", list) + "]",
        }));

To achieve this, we need a type to represent an aggregation algorithm:
interface IAggregator<T, TResult>
{
    void Next(T item);
    TResult GetResult();
}

Notice that the seed is gone as that is now the responsibility of the IAggregator<,> initialization. Next comes a bizarre definition but bear with this one for now and take it as a mere trick for type inference and more:
struct AggregatorSource<T> { }

Now an Aggregate overload for five aggregations looks like this:
public static TResult Aggregate<T, TResult1, TResult2, TResult3, TResult4, TResult5, TResult>(
    this IEnumerable<T> source,
    Func<AggregatorSource<T>, IAggregator<T, TResult1>> aggregatorSelector1,
    Func<AggregatorSource<T>, IAggregator<T, TResult2>> aggregatorSelector2,
    Func<AggregatorSource<T>, IAggregator<T, TResult3>> aggregatorSelector3,
    Func<AggregatorSource<T>, IAggregator<T, TResult4>> aggregatorSelector4,
    Func<AggregatorSource<T>, IAggregator<T, TResult5>> aggregatorSelector5,
    Func<TResult1, TResult2, TResult3, TResult4, TResult5, TResult> resultSelector) =>
    source.Aggregate(
        (Agg1: aggregatorSelector1(source.AsAggregatorSource()),
         Agg2: aggregatorSelector2(source.AsAggregatorSource()),
         Agg3: aggregatorSelector3(source.AsAggregatorSource()),
         Agg4: aggregatorSelector4(source.AsAggregatorSource()),
         Agg5: aggregatorSelector5(source.AsAggregatorSource())),
        (s, e) =>
        {
            s.Agg1.Next(e);
            s.Agg2.Next(e);
            s.Agg3.Next(e);
            s.Agg4.Next(e);
            s.Agg5.Next(e);
            return s;
        },
        s => resultSelector(s.Agg1.GetResult(),
                            s.Agg2.GetResult(),
                            s.Agg3.GetResult(),
                            s.Agg4.GetResult(),
                            s.Agg5.GetResult()));

The implementation is quite straightforward. The aggregators become the seeds themselves. Each aggregator maintains its own state and folds each value of the sequence into it. At the end, GetResult calls are used to string together the final result.
Next comes infrastructure to help create an IAggregator<,> implementation easily given a seed and functions for the Next and GetResult members of the interface:
static partial class Aggregator
{
    public static IAggregator<T, TResult> Create<T, TState, TResult>(
        TState seed,
        Func<TState, T, TState> accumulator,
        Func<TState, TResult> resultSelector) =>
        new DelegatingAggregator<T, TState, TResult>(seed, accumulator, resultSelector);

    sealed class DelegatingAggregator<T, TState, TResult> : IAggregator<T, TResult>
    {
        TState _state;
        readonly Func<TState, T, TState> _accumulator;
        readonly Func<TState, TResult> _resultSelector;

        public DelegatingAggregator(TState seed, Func<TState, T, TState> accumulator, Func<TState, TResult> resultSelector)
        {
            _state = seed;
            _accumulator = accumulator;
            _resultSelector = resultSelector;
        }

        public void Next(T item) => _state = _accumulator(_state, item);
        public TResult GetResult() => _resultSelector(_state);
    }
}

With that, here's how the aggregators can be implemented:
partial class Aggregator
{
    public static AggregatorSource<T> AsAggregatorSource<T>(this IEnumerable<T> source) =>
        default(AggregatorSource<T>);

    public static IAggregator<T, int> Count<T>(this AggregatorSource<T> _) =>
        Aggregator.Create(0, (int s, T t) => s + 1, s => s);

    public static IAggregator<int, int> Sum(this AggregatorSource<int> _) =>
        Aggregator.Create(0, (int s, int x) => s + x, s => s);

    public static IAggregator<T, T> Some<T>(Func<T, T, T> acc) =>
        Aggregator.Create((Count: 0, Result: default(T)),
                          ((int Count, T Result) s, T e) => (s.Count + 1, s.Count > 0 ? acc(s.Result, e) : e),
                          s => s.Count > 0 ? s.Result : throw new InvalidOperationException());

    public static IAggregator<int, int> Min(this AggregatorSource<int> _) => Some<int>(Math.Min);
    public static IAggregator<int, int> Max(this AggregatorSource<int> _) => Some<int>(Math.Max);
    public static IAggregator<double, double> Min(this AggregatorSource<double> _) => Some<double>(Math.Min);
    public static IAggregator<double, double> Max(this AggregatorSource<double> _) => Some<double>(Math.Max);

    public static IAggregator<T, TCollection> Collect<T, TCollection>(this AggregatorSource<T> _, TCollection collection)
        where TCollection : ICollection<T> =>
        Aggregator.Create(collection, (TCollection s, T t) => { s.Add(t); return s; }, s => s);
}

Notice how Min and Max reuse Some. Notice further how the right Min and Max overloads will be picked depending on T, thanks to AggregatorSource<>. Count is also agnostic to T.
We can also now introduce a Count overload that counts elements satisfying a predicate:
partial class Aggregator
{
    public static IAggregator<T, int> Count<T>(this AggregatorSource<T> _, Func<T, bool> predicate) =>
        Aggregator.Create(0, (int s, T t) => s + (predicate(t) ? 1 : 0), s => s);
}

Console.WriteLine(
    xs.Aggregate(
        a => a.Sum(),
        a => a.Count(),
        a => a.Min(),
        a => a.Max(),
        a => a.Count(x => x % 2 == 0),
        (sum, count, min, max, evens) => new
        {
            Sum       = sum,
            Count     = count,
            Average   = (double) sum / count,
            Min       = min,
            Max       = max,
            EvenCount = evens
        }));

Earlier, we saw Collect, which can collect elements into any collection. If collecting into a list is a common scenario then one can also introduce a simple helper for that now:
partial class Aggregator
{
    public static IAggregator<T, List<T>> List<T>(this AggregatorSource<T> _) =>
        _.Collect(new List<T>());
}

And naturally it builds on top of Collect.
Console.WriteLine(
    xs.Aggregate(
        a => a.Sum(),
        a => a.Count(),
        a => a.Min(),
        a => a.Max(),
        a => a.List(), // instead of // a => a.Collect(new List<int>()),
        (sum, count, min, max, list) => new
        {
            Sum     = sum,
            Count   = count,
            Average = (double) sum / count,
            Min     = min,
            Max     = max,
            Content = "[" + string.Join(", ", list) + "]",
        }));

Thoughts & feedback on this new design?

This is an interesting design. I like the IAggregator<> interface as that can be used to implement optimized operators that do not allocate new memory on each iteration (and it would be nice if we did that for the standard operators).
I'm still thinking about your proposed design. I've so far failed to come up with something that dispenses with the AggregatorSource but preserves an easy way to add aggregators with selectors (I mean .Sum(obj => obj.Property)). All alternatives I think about are quite ugly. With the AggregatorSource things become fairly easy:
    public static IAggregator<T, int> Sum<T>(this AggregatorSource<T> _, Func<T, int> selector) =>
        Aggregator.Create(0, (int s, T x) => s + selector(x), s => s);

It's ugly but it makes things a lot easier.

I had a fairly ugly start as well but with after coming up with AggregatorSource<>, everything just fell nicely into place. Perhaps the name does throw one off but its purpose is to communicate the source type not the source sequence. This is why it's just a unit/singleton for every T.
Your projected Sum example is interesting. I think we can even generalize that via a Select:
public static IAggregator<T1, TResult> Select<T1, T2, TResult>(
    this AggregatorSource<T1> source, Func<T1, T2> selector,
    Func<AggregatorSource<T2>, IAggregator<T2, TResult>> aggregatorSelector)
{
    var aggregator = aggregatorSelector(default(AggregatorSource<T2>));
    return Aggregator.Create(default(object),
                             (object _, T1 t) => { aggregator.Next(selector(t)); return _; },
                             _ => aggregator.GetResult());
}

So given another aggregator, it injects a projection. You can then even reuse it to implement your Sum overload:
public static IAggregator<T, int> Sum<T>(this AggregatorSource<T> _, Func<T, int> selector) =>
    _.Select(selector, a => a.Sum());

You could even use Select inline:
Console.WriteLine(
    "1,2,3,4,5,6,7,8,9,10"
        .Split(',')
        .Aggregate(
            a => a.Select(x => int.Parse(x), aa => aa.Sum()),
            a => a.Count(),
            (sum, count) => new { Sum = sum, Count = count }));

Since we are composing aggregators now, I wonder if there's another trick left that could make the composition read more like a.Select(x => int.Parse(x)).Sum(), as in:
Console.WriteLine(
    "1,2,3,4,5,6,7,8,9,10"
        .Split(',')
        .Aggregate(
            a => a.Select(x => int.Parse(x)).Sum(),
            a => a.Count(),
            (sum, count) => new { Sum = sum, Count = count }));

:thinking:

Since we are composing aggregators now, I wonder if there's another trick left that could make the composition read more like a.Select(int.Parse).Sum()

This could be solved by making the AggregatorSource be a useful object:

public class AggregatorSource<T, TProp> {
	public AggregatorSource(Func<T, TProp> getValue) {
		GetValue = getValue;
	}
	public Func<T, TProp> GetValue { get; }

	public AggregatorSource<T, TNestedProp> Select<TNestedProp>(Func<TProp, TNestedProp> projection) {
		var gv = GetValue;
		return new AggregatorSource<T, TNestedProp>(v => projection(gv(v)));
	}
}

public static class Aggregator {
    public static AggregatorSource<T, T> AsAggregatorSource<T>(this IEnumerable<T> source) =>
        new AggregatorSource<T, T>(i => i);

    public static IAggregator<T, int> Sum<T>(this AggregatorSource<T, int> source) =>
        Aggregator.Create(0, (int s, T x) => s + source.GetValue(x), s => s);
}

And now your last example compiles.

2 questions:

why simple dont apply ToList() to sorce before do the aggregations? So you only iterate source once.
how common is it ?

@fsateler Thanks for your feedback, ideas and participating in the design.

making the AggregatorSource be a useful object

I agree and I think we're getting closer. More than just Select, I wanted to find a general way to combine operations for each item of the source, like even a Where (as LINQ's Count does). Here's my next take on the design of the API.
I've dropped IAggregator<> for now and redefined the aggregator source as:
interface IAggregatorSource<T>
{
    void Connect(Action<T> sink);
}

Each aggregator will be responsible for connecting to the source. The sink is where items will be pushed. In essence, Aggregate will pull from the source and push to each aggregator.
Here's some helper code for implementing the interface given a connection handler:
static partial class AggregatorSource
{
    public static IAggregatorSource<T> Create<T>(Action<Action<T>> connectionHandler) =>
        new DelegatingAggregatorSource<T>(connectionHandler);

    sealed class DelegatingAggregatorSource<T> : IAggregatorSource<T>
    {
        readonly Action<Action<T>> _connectionHandler;

        public DelegatingAggregatorSource(Action<Action<T>> connectionHandler) =>
            _connectionHandler = connectionHandler;

        public void Connect(Action<T> sink) => _connectionHandler(sink);
    }
}

Now the interesting part is that we can define Select and Where in terms of IAggregatorSource<>:
partial class AggregatorSource
{
    public static IAggregatorSource<U> Select<T, U>(this IAggregatorSource<T> source, Func<T, U> selector) =>
        Create<U>(sink => source.Connect(item => sink(selector(item))));

    public static IAggregatorSource<T> Where<T>(this IAggregatorSource<T> source, Func<T, bool> predicate) =>
        Create<T>(sink => source.Connect(item => { if (predicate(item)) sink(item); }));
}

Aggregators now connect to a source, supplying a handler for each item (what used to be Next on IAggregator<>), and return a function for obtaining the final result (what used to be GetResult on IAggregator<>):
static partial class Aggregator
{
    public static Func<TState> Connect<TState, T>(
        this IAggregatorSource<T> source,
        TState seed, Func<TState, T, TState> accumulator) =>
        source.Connect(seed, accumulator, s => s);

    public static Func<TResult> Connect<TState, T, TResult>(
        this IAggregatorSource<T> source,
        TState seed, Func<TState, T, TState> accumulator,
        Func<TState, TResult> resultSelector)
    {
        var state = seed;
        source.Connect(item => state = accumulator(state, item));
        return () => resultSelector(state);
    }

    public static Func<int> Sum(this IAggregatorSource<int> source) =>
        source.Connect(0, (s, x) => s + x);

    public static Func<int> Count<T>(this IAggregatorSource<T> source) =>
        source.Connect(0, (s, _) => s + 1);

    public static Func<T> Some<T>(this IAggregatorSource<T> source, Func<T, T, T> accumulator) =>
        source.Connect(
            (Count: 0, State: default(T)),
            (s, e) => (s.Count + 1, s.Count > 0 ? accumulator(s.State, e) : e),
            s => s.Count > 0 ? s.State : throw new InvalidOperationException());

    public static Func<T> Min<T>(this IAggregatorSource<T> source)
        where T : IComparable<T> =>
        source.Some((x, y) => x.CompareTo(y) < 0 ? x : y);

    public static Func<T> Max<T>(this IAggregatorSource<T> source)
        where T : IComparable<T> =>
        source.Some((x, y) => x.CompareTo(y) > 0 ? x : y);

    public static Func<List<T>> List<T>(this IAggregatorSource<T> source) =>
        source.Collect(new List<T>());

    public static Func<ISet<T>> Distinct<T>(this IAggregatorSource<T> source, IEqualityComparer<T> comparer = null) =>
        source.Collect(new HashSet<T>(comparer));

    public static Func<TCollection> Collect<T, TCollection>(this IAggregatorSource<T> source, TCollection collection)
        where TCollection : ICollection<T> =>
        source.Connect(collection, (TCollection s, T t) => { s.Add(t); return s; }, s => s);
}

Finally, here's the Aggregate method that puts it together:
static class MoreEnumerable
{
    public static TResult Aggregate<T, TResult1, TResult2, TResult3, TResult4, TResult5, TResult>(
        this IEnumerable<T> source,
        Func<IAggregatorSource<T>, Func<TResult1>> aggregatorConnector1,
        Func<IAggregatorSource<T>, Func<TResult2>> aggregatorConnector2,
        Func<IAggregatorSource<T>, Func<TResult3>> aggregatorConnector3,
        Func<IAggregatorSource<T>, Func<TResult4>> aggregatorConnector4,
        Func<IAggregatorSource<T>, Func<TResult5>> aggregatorConnector5,
        Func<TResult1, TResult2, TResult3, TResult4, TResult5, TResult> resultSelector)
    {
        var s1 = new AggregatorSource<T>(); var c1 = aggregatorConnector1(s1);
        var s2 = new AggregatorSource<T>(); var c2 = aggregatorConnector2(s2);
        var s3 = new AggregatorSource<T>(); var c3 = aggregatorConnector3(s3);
        var s4 = new AggregatorSource<T>(); var c4 = aggregatorConnector4(s4);
        var s5 = new AggregatorSource<T>(); var c5 = aggregatorConnector5(s5);

        foreach (var item in source)
        {
            s1.Next(item);
            s2.Next(item);
            s3.Next(item);
            s4.Next(item);
            s5.Next(item);
        }

        return resultSelector(c1(), c2(), c3(), c4(), c5());
    }

    sealed class AggregatorSource<T> : IAggregatorSource<T>
    {
        Action<T> _sink;
        public void Connect(Action<T> sink) => _sink = sink;
        public void Next(T item) => _sink(item);
    }
}

A push source is created to which every aggregator is connected. The items are then pulled from the source and pushed to each sink (each of which can do its projection, filtering and what not before being folded by the aggregator at the end of the chain).
Here's finally the usage showing all of the above in action:
var xs = "1,2,3,4,5,6,7,8,9,10".Split(',');
Console.WriteLine(
    xs.Select(s => new { Str = s, Num = int.Parse(s) })
        .Aggregate(
        s => s.Select(e => e.Num).Sum(),
        s => s.Where(e => e.Num % 2 == 0).Count(),
        s => s.Select(e => e.Num).Min(),
        s => s.Select(e => e.Num).Max(),
        s => s.Where(e => e.Str != null) // can't happen but for illustration
              .Select(e => e.Str.Length)
              .Distinct(),
        (sum, count, min, max, lengths) => new
        {
            Sum      = sum,
            Count    = count,
            Avgerage = (double) sum / count,
            Min      = min,
            Max      = max,
            UniqueLengths
                     = "[" + string.Join(", ", lengths) + "]",
        }
    ));

An interesting thing to note is that IAggregatorSource<> with its connect and sink is there to model a push stream; put another way, aggregators are observers and subscribed to a shared iteration. In .NET, we already have IObservable<> (source) and IObserver<> (sink) to model that so we don't need any new types or representations. Also, Rx already has Select, Where and other operators implemented so we don't need to do anything! The two downsides are:

Additional and possibly unneeded complexity of the IObservable<>-IObserver<> protocol. That is, most aggregators won't care about errors, completion notice and unsubscribing.
Dependency on Rx

I think 1 is better than introducing new types that more or less mean the same thing. As for 2, you can mitigate some of that by building in the simple cases of projections and filtering directly into the aggregators as LINQ does today.

why simple dont apply ToList() to sorce before do the aggregations? So you only iterate source once.

@leandromoh Suppose you have a directory of hundreds of CSV files, each with several thousands of lines of data. With ToList, you will not only waste time & space building a list (multiple re-allocations & copying as it grows dynamically) but you will also waste time traversing the list of hundreds of thousands of records several times (once per type of aggregation).

how common is it ?

What may be common in my problem space may not be in yours so I don't see how I can answer this objectively. Everyone's mileage will vary.

@atifaziz Interesting new proposal! It adds a bit of complexity but it is indeed much more powerful. I have some reservations on reusing the IObserver<> abstraction.

OnCompleted is not used. In general I favor keeping interfaces as minimal as possible.
For our purposes, OnError seems to be actively harmful. When IObservable<>-IObserver<> are used it makes sense to propagate errors down the sink chain because the error might be thrown in a separate thread, or where nobody is able to catch it. In our case, Aggregate is not only synchronous, but it is eagerly evaluated, and thus the point for catching errors is natural: just wrap the call with a try{} catch{} block. I'm not sure how exception handling would look like when OnError is (possibly) used. One would have to handle two possible error paths?

OTOH, I'm thinking this is already way too similar to Rx. It may well be that what I see as unneeded bloat is just domain complexity I don't see.
But, if reusing IObserver<> is the way forward, would it be best placed here or in Rx?

OnError isn't so much for catching an exception here as it is a way for Aggregate to notify the accumulators of an error, while either iterating the sequence (i.e. during a call to MoveNext) or when an adjacent accumulator throws. The only thing I can imagine an accumulator doing during OnError is clean-up and my guess is that that's almost never going to be needed. Same goes for OnComplete but it may be slightly more useful and I'll get into it another time.

just wrap the call with a try{} catch{} block

So yes, this would still be the case for the user of Aggregate but OnError is only for notification to accumulators during the main loop as the pull is converted to a push.

In general I favor keeping interfaces as minimal as possible.

Me too but I think having IAggregateSource<> with a Connect method, while simpler, is just confusing as it has nothing to do with aggregation per se. Initially, I had it there as a type inference hack and so struggled to give it a proper name and a real purpose otherwise. The refactorings that came with enabling a compositional pipeline over it lead to the observer pattern.

But, if reusing IObserver<> is the way forward, would it be best placed here or in Rx?

Even if it is, I'd say it still belongs here because fundamentally we're talking about Aggregate for sequences and any use of observable/observer is just to model how Aggregate interacts with the accumulators.

@atifaziz OK, your explanation is convincing. I still have one thing I didn't quite understand correctly:

you can mitigate some of that by building in the simple cases of projections and filtering directly into the aggregators as LINQ does today.

Could you elaborate on this? I did not understand how would this problem would be mitigated.

Could you elaborate on this? I did not understand how would this problem would be mitigated.

@fsateler I wouldn't want to expose Select & Where as extensions of IObservable<> because we'd run the risk of creating conflicts for projects using Rx and LINQ. If someone wants to use those for an accumulation pipeline, as in a.Where(x => x % 2 == 0).Count() or a.Select(int.Parse).Sum(), they'll then have to bring in Rx. By offering projection and filtering on overloads of the accumulators, as in a.Count(x => x % 2 == 0) (what LINQ does too), we can help avoid anyone taking a dependency on Rx for the most common cases.

I wouldn't want to expose Select & Where as extensions of IObservable<> because we'd run the risk of creating conflicts for projects using Rx and LINQ.

Actually, come to think of it, there's still all the aggregation methods like Sum and Count that extend IObservable<> too so conflicts and confusion could still reign. Those aggregation methods actually terminate the composition chain by subscribing then aggregating and perhaps this needs to be reflected in the names? Like DoSum and DoCount? :thinking:

Actually, come to think of it, there's still all the aggregation methods like Sum and Count that extend IObservable<> too so conflicts and confusion could still reign

Indeed. That's what I was thinking.

Those aggregation methods actually terminate the composition chain by subscribing then aggregating and perhaps this needs to be reflected in the names? Like DoSum and DoCount? :thinking:

I'm not really a fan of Do[Name], since it is very unclear on why would it differ from a non-Do method.
The aggregation methods provided by Rx are not useful for us, since they will block and try to aggregate instantly. I'm surprised there is no Async overload for all of those operators. Maybe we could provide Async operators in a separate namespace, and then when Rx adds them people would just stop importing the separate namespace.
The aggregation method would look something like this (untested since I'm not on my workstation right now):
static class MoreEnumerable
{
    public static TResult Aggregate<T, TResult1, TResult2>(
        this IEnumerable<T> source,
        Func<IObservable<T>, Task<TResult1>> aggregatorConnector1,
        Func<IObservable<T>, Task<TResult2>> aggregatorConnector2,
        Func<TResult1, TResult2, TResult> resultSelector)
    {
        var s1 = new AggregatorSource<T>(); var c1 = aggregatorConnector1(s1);
        var s2 = new AggregatorSource<T>(); var c2 = aggregatorConnector2(s2);

        foreach (var item in source)
        {
            s1.Next(item);
            s2.Next(item);
        }

        if (!c1.IsCompleted) {
               throw new InvalidOperationException("Should have completed!");
        }
        if (!c2.IsCompleted) {
               throw new InvalidOperationException("Should have completed!");
        }

        return resultSelector(c1.Value, c2.Value);
    }
    sealed class AggregatorSource<T> : IObservable<T>
    {
        readonly List<IObserver<T>> sinks = new List<IObserver<T>>();
        public IDisposable Subscribe(IObserver<T> observer) {
            sinks.Add(observer);
            return Delegating.Disposable(() => sinks.Remove(observer));
        }
        public void Next(T item) => sinks.ForEach(s => s.OnNext(item));
    }
}

And the async aggregation methods:
class Aggregator<T, TResult> : IObserver<T> {
      private readonly TaskCompletionSource<T> CompletionSource = new TaskCompletionSource<T>();
      public Task<T> Task => CompletionSource.Task;

      private readonly Func<TResult> GetResult;
      private readonly Action<T> AggregatorFunc;

      public Aggregator(Action<T> aggregatorFunc, Func<TResult> getResult) {
          GetResult = getResult;
          AggregatorFunc = aggregatorFunc;
      }

      public void OnNext(T item) {
           AggregatorFunc(item);
       }
      public void OnCompleted() {
           CompletionSource.SetResult(GetResult());
       }
      public void OnError(Exception e) {
           Source.SetException(e);
       }
}

public static Task<int> CountAsync(this IObservable<T> src) {
    int count = 0;
    var aggregator = new Aggregator<T, int>(_ => count++, () => count);
    src.Subscribe(aggregator);
    return aggregator.Task;
}

The aggregation methods provided by Rx are not useful for us, since they will block and try to aggregate instantly. I'm surprised there is no Async overload for all of those operators.

Are you sure? I can perfectly await on the Sum by Rx:
var sum = await Observable.Range(1, 10).Sum();

The async bits do muddy the waters conceptually. While one could argue that the aggregated results are future values, that won't be the case if we decide to also with a multi-Scan version too.
Actually, you've just given me another idea! 💡 I'll be back 😆 but the basis of it is that Rx already has Publish that can be used to run concurrent aggregations:
var xs = Enumerable.Range(1, 10); // aggregate source
var source = xs.ToObservable().Publish(); // share
var sum = new int[1]; // by-ref
var count = new int[1]; // by-ref
source.Sum().Subscribe(a => sum[0] = a);
source.Count().Subscribe(a => count[0] = a);
source.Connect();
// pipeline above should have run in and entirely
// at time of connection so sum and count will
// have their final values
Console.WriteLine($"Sum = {sum[0]}, Count = {count[0]}");

@fsateler So with Aggregate completely based on and defined in terms of IObservable<>, we get this:
public static TResult Aggregate<TSource, TResult1, TResult2, TResult3, TResult4, TResult5, TResult>(
    this IEnumerable<TSource> source,
    Func<IObservable<TSource>, IObservable<TResult1>> aggregatorSelector1,
    Func<IObservable<TSource>, IObservable<TResult2>> aggregatorSelector2,
    Func<IObservable<TSource>, IObservable<TResult3>> aggregatorSelector3,
    Func<IObservable<TSource>, IObservable<TResult4>> aggregatorSelector4,
    Func<IObservable<TSource>, IObservable<TResult5>> aggregatorSelector5,
    Func<TResult1, TResult2, TResult3, TResult4, TResult5, TResult> resultSelector)
{
    var r1 = new TResult1[1]; var s1 = new Subject<TSource>();
    var r2 = new TResult2[1]; var s2 = new Subject<TSource>();
    var r3 = new TResult3[1]; var s3 = new Subject<TSource>();
    var r4 = new TResult4[1]; var s4 = new Subject<TSource>();
    var r5 = new TResult5[1]; var s5 = new Subject<TSource>();

    using (aggregatorSelector1(s1).Subscribe(Observer.Create((TResult1 r) => r1[0] = r)))
    using (aggregatorSelector2(s2).Subscribe(Observer.Create((TResult2 r) => r2[0] = r)))
    using (aggregatorSelector3(s3).Subscribe(Observer.Create((TResult3 r) => r3[0] = r)))
    using (aggregatorSelector4(s4).Subscribe(Observer.Create((TResult4 r) => r4[0] = r)))
    using (aggregatorSelector5(s5).Subscribe(Observer.Create((TResult5 r) => r5[0] = r)))
    {
        foreach (var item in source)
        {
            s1.OnNext(item);
            s2.OnNext(item);
            s3.OnNext(item);
            s4.OnNext(item);
            s5.OnNext(item);
        }

        s1.OnCompleted();
        s2.OnCompleted();
        s3.OnCompleted();
        s4.OnCompleted();
        s5.OnCompleted();
    }

    return resultSelector(r1[0], r2[0], r3[0], r4[0], r5[0]);
}

The big benefits are:

No new types
No aggregators need to be defined; just use what's in Rx
No conflicts with projects using Rx

The usage is dead simple too and what we've been aiming for since early on:
Console.WriteLine(
    "1,2,3,4,5,6,7,8,9,10"
        .Split(',')
        .Select(s => new { Str = s, Num = int.Parse(s) })
        .Aggregate(
            s => s.Select(e => e.Num).Sum(),
            s => s.Count(),
            s => s.Select(e => e.Num).Min(),
            s => s.Select(e => e.Num).Max(),
            s => s.Select(e => e.Str.Length).Distinct().ToArray(),
            (sum, count, min, max, lengths) => new
            {
                Sum      = sum,
                Count    = count,
                Avgerage = (double) sum / count,
                Min      = min,
                Max      = max,
                UniqueLengths
                         = "[" + string.Join(", ", lengths) + "]",
            }
        ));

// outputs:
// { Sum = 55, Count = 10, Avgerage = 5.5, Min = 1, Max = 10, UniqueLengths = [1, 2] }

Note the special case of Distinct that must be combined with ToArray otherwise you only get back 2 (in fact with Distinct alone you see that lengths type is int instead of int[]), which is the last length among unique lengths. This may be a little non-obvious so Aggregate could be made to throw a run-time error if an aggregator publishes more than one result.

A downside to the latest design is that any aggregator not shipping in Rx must be implemented as an observable. While Rx does make this easy, it does mean taking a dependency on it. Perhaps a good compromise is to offer the [first approach with accumulators as simple functions] (little reuse, aggregators must be implemented locally but very simple) in addition to one based on observables (makes rich composition possible, allows use of projection, filtering and aggregate methods already part Rx but slightly more complex).

The aggregation methods provided by Rx are not useful for us, since they will block and try to aggregate instantly. I'm surprised there is no Async overload for all of those operators.

Are you sure? I can perfectly await on the Sum by Rx

Oops, sorry. That's what I get from relying on memory and not testing. Indeed Sum and the other aggregation methods return an IObservable<>, and are thus awaitable (as long as Rx is installed, which you should otherwise you don't have Sum ;).
However, not all is well, because:

Note the special case of Distinct that must be combined with ToArray otherwise you only get back 2 (in fact with Distinct alone you see that lengths type is int instead of int[]), which is the last length among unique lengths. This may be a little non-obvious so Aggregate could be made to throw a run-time error if an aggregator publishes more than one result.

I see this as a major drawback. Aggregation methods returning the same type as selector methods is a serious flaw in the Rx API IMO. I wouldn't like to perpetuate that flaw in MoreLINQ (even if we catch it at runtime). Unfortunately, the only way out I see is to go back to Func<IObservable<TSource>, Task<>> as aggregator selectors, and require adding ToTask to all selectors:
Console.WriteLine(
    "1,2,3,4,5,6,7,8,9,10"
        .Split(',')
        .Select(s => new { Str = s, Num = int.Parse(s) })
        .Aggregate(
            s => s.Select(e => e.Num).Sum().ToTask(),
            s => s.Count().ToTask(),
            s => s.Select(e => e.Num).Min().ToTask(),
            s => s.Select(e => e.Num).Max().ToTask(),
            s => s.Select(e => e.Str.Length).Distinct().ToList().ToTask(),
            (sum, count, min, max, lengths) => new
            {
                Sum      = sum,
                Count    = count,
                Avgerage = (double) sum / count,
                Min      = min,
                Max      = max,
                UniqueLengths
                         = "[" + string.Join(", ", lengths) + "]",
            }
        ));

This makes invocations a bit cumbersome.
BTW, there is no need to have one subject per selector:
public static TResult Aggregate<TSource, TResult1, TResult2, TResult3, TResult4, TResult5, TResult>(
    this IEnumerable<TSource> source,
    Func<IObservable<TSource>, Task<TResult1>> aggregatorSelector1,
    Func<IObservable<TSource>, Task<TResult2>> aggregatorSelector2,
    Func<IObservable<TSource>, Task<TResult3>> aggregatorSelector3,
    Func<IObservable<TSource>, Task<TResult4>> aggregatorSelector4,
    Func<IObservable<TSource>, Task<TResult5>> aggregatorSelector5,
    Func<TResult1, TResult2, TResult3, TResult4, TResult5, TResult> resultSelector)
{
    var s = new Subject<TSource>();

    var c1 = aggregatorSelector1(s);
    var c2 = aggregatorSelector2(s);
    var c3 = aggregatorSelector3(s);
    var c4 = aggregatorSelector4(s);
    var c5 = aggregatorSelector5(s);

    foreach (var item in source)
    {
        s.OnNext(item);
    }

    s.OnCompleted();

    return resultSelector(c1.Result, c2.Result, c3.Result, c4.Result, c5.Result);
}

as long as Rx is installed, which you should otherwise you don't have Sum

True although it isn't very hard to implement at all if you really don't wish to take the dependency.

Aggregation methods returning the same type as selector methods is a serious flaw in the Rx API IMO. I wouldn't like to perpetuate that flaw in MoreLINQ (even if we catch it at runtime).

I agree it would be best if types could capture the expectation that a single result should come out at the other end of the chain and while Task<> does fit the bill (though somewhat feeling like a promise/future API of sorts), there's still one annoying issue. It requires that the aggregator must be combined with ToTask to satisfy the signature and by doing so, the subscription becomes the responsibility of the observable-to-task mapping function. We can then no longer make run-time behaviour checks for violation of the protocol, that for example the task never observes more than one result. The Rx implementation returns the last observation. If we take the case of Distinct, it means that you can get the wrong results if you forget to call ToList or ToArray. On the other hand, if Aggregate becomes the observer then it can make run-time checks, like the one you also do to make sure that the task was indeed completed:
        if (!c1.IsCompleted) {
               throw new InvalidOperationException("Should have completed!");
        }

A run-time check is better than a false result. A compile-time constrained API is even better but it requires introducing new types and providing our own implementation of all aggregators (plus filtering and projection).
Just for reference & discussion, here is what those run-time checks would look like:
public static TResult Aggregate<TSource, TResult1, TResult2, TResult3, TResult4, TResult5, TResult>(
    this IEnumerable<TSource> source,
    Func<IObservable<TSource>, IObservable<TResult1>> aggregatorSelector1,
    Func<IObservable<TSource>, IObservable<TResult2>> aggregatorSelector2,
    Func<IObservable<TSource>, IObservable<TResult3>> aggregatorSelector3,
    Func<IObservable<TSource>, IObservable<TResult4>> aggregatorSelector4,
    Func<IObservable<TSource>, IObservable<TResult5>> aggregatorSelector5,
    Func<TResult1, TResult2, TResult3, TResult4, TResult5, TResult> resultSelector)
{
    var r1 = new (bool, TResult1)[1];
    var r2 = new (bool, TResult2)[1];
    var r3 = new (bool, TResult3)[1];
    var r4 = new (bool, TResult4)[1];
    var r5 = new (bool, TResult5)[1];

    var subject = new Subject<TSource>();

    IDisposable Subscribe<T>(int n, IObservable<T> aggregator, (bool Defined, T)[] r, string paramName) =>
        ReferenceEquals(aggregator, subject)
        ? throw new ArgumentException($"Aggregator cannot be identical to the source.", paramName)
        : aggregator.Subscribe(s =>
              r[0] = r[0].Defined
                   ? throw new InvalidOperationException($"Aggregator #{n} produced multiple results when only one is allowed.")
                   : (true, s));

    using (Subscribe(1, aggregatorSelector1(subject), r1, nameof(aggregatorSelector1)))
    using (Subscribe(2, aggregatorSelector2(subject), r2, nameof(aggregatorSelector2)))
    using (Subscribe(3, aggregatorSelector3(subject), r3, nameof(aggregatorSelector3)))
    using (Subscribe(4, aggregatorSelector4(subject), r4, nameof(aggregatorSelector4)))
    using (Subscribe(5, aggregatorSelector5(subject), r5, nameof(aggregatorSelector5)))
    {
        foreach (var item in source)
            subject.OnNext(item);
        subject.OnCompleted();
    }

    T Get<T>(int n, (bool Defined, T Value) result) =>
        !result.Defined
        ? throw new InvalidOperationException($"Aggregator #{n} has an undefined result.")
        : result.Value;

    return resultSelector(Get(1, r1[0]), Get(2, r2[0]), Get(3, r3[0]), Get(4, r4[0]), Get(5, r5[0]));
}

Of course, the same can be done with tasks (which helps remove the by-reference/boxing array hack) but it would nonetheless remain an internal implementation detail:
public static TResult Aggregate<TSource, TResult1, TResult2, TResult3, TResult4, TResult5, TResult>(
    this IEnumerable<TSource> source,
    Func<IObservable<TSource>, IObservable<TResult1>> aggregatorSelector1,
    Func<IObservable<TSource>, IObservable<TResult2>> aggregatorSelector2,
    Func<IObservable<TSource>, IObservable<TResult3>> aggregatorSelector3,
    Func<IObservable<TSource>, IObservable<TResult4>> aggregatorSelector4,
    Func<IObservable<TSource>, IObservable<TResult5>> aggregatorSelector5,
    Func<TResult1, TResult2, TResult3, TResult4, TResult5, TResult> resultSelector)
{
    var r1 = new TaskCompletionSource<TResult1>();
    var r2 = new TaskCompletionSource<TResult2>();
    var r3 = new TaskCompletionSource<TResult3>();
    var r4 = new TaskCompletionSource<TResult4>();
    var r5 = new TaskCompletionSource<TResult5>();

    var subject = new Subject<TSource>();

    IDisposable Subscribe<T>(int n, IObservable<T> aggregator, TaskCompletionSource<T> r, string paramName) =>
        ReferenceEquals(aggregator, subject)
        ? throw new ArgumentException($"Aggregator cannot be identical to the source.", paramName)
        : aggregator.Subscribe(s =>
          {
              if (r.Task.IsCompleted)
                  throw new InvalidOperationException($"Aggregator #{n} produced multiple results when only one is allowed.");
              r.SetResult(s);
          });

    using (Subscribe(1, aggregatorSelector1(subject), r1, nameof(aggregatorSelector1)))
    using (Subscribe(2, aggregatorSelector2(subject), r2, nameof(aggregatorSelector2)))
    using (Subscribe(3, aggregatorSelector3(subject), r3, nameof(aggregatorSelector3)))
    using (Subscribe(4, aggregatorSelector4(subject), r4, nameof(aggregatorSelector4)))
    using (Subscribe(5, aggregatorSelector5(subject), r5, nameof(aggregatorSelector5)))
    {
        foreach (var item in source)
            subject.OnNext(item);
        subject.OnCompleted();
    }

    T Get<T>(int n, Task<T> result) =>
        !result.IsCompleted
        ? throw new InvalidOperationException($"Aggregator #{n} has an undefined result.")
        : result.Result;

    return resultSelector(Get(1, r1.Task), Get(2, r2.Task), Get(3, r3.Task), Get(4, r4.Task), Get(5, r5.Task));
}

We can externalize the checking by providing a ToTask extension for IObservable<> that allows for only a single result but this would come in conflict with a project using Rx and MoreLINQ (sigh). We could give it another name but then that doesn't guarantee that the aggregator selector function will call the right version!

BTW, there is no need to have one subject per selector

You're right. That was a leftover from a limitation of my own implementation of Subject<> that evolved out of AggregatorSource<> and which did not initially support multiple subscriptions. I wasn't using the one from Rx for my exploration.

@Magnus12 Not yet although I'd still like to see that happen. I don't if you followed the entire thread, but @fsateler and I were still pondering over the pros and cons of the API design, especially around signatures. I think once that is done (which frankly is and has been the hardest part), the rest is just a question of rolling up the sleeves and getting down to the implementation and tests.
Now that we have introduced an experimental namespace with #209, I can imagine throwing this out in the wild and let real-world field use drive the final decisions rather than leave it hanging here.
Meanwhile, I did some experimentation (see RxScans) that toyed with the idea of “accumulators for observable sources that emit their intermediate results.“ There's a runnable example in there too. The RxScans project shows that if you're willing to convert an enumerable into an observable then you can pretty much get the effect of “multiple aggregations in a single iteration” today.

Did this ever make it into MoreLinq?

@Magnus12 This is now shipping in 3.2. Check out also the examples.


Build the orginal POMDP solution to Sea Robins problem within the Framework

Waiting on the initialization of the agent to be toggled in the run_test function. #19

Waiting on the initialization of the agent to be toggled in the run_test function.

Re-opened at this should still be tested to get a figure of the performance of the Sea-Robin agent when doing single grid-step actions.
In particular, this solution should be done by using a fixed radius of observations of 3 units and the success states being 4 states in a square (source position in .5 units and radius of 1).

Was able to replicate the results of the previous project's framework:


chore(npm): add package.json

Add package.json file to allow people to install via npm.
After merge you should do a npm publish to register it with npm so people can find it.
https://docs.npmjs.com/cli/publish

Current coverage is 94.23% (diff: 100%)

Merging #133 into master will increase coverage by 0.10%

@@             master       #133   diff @@
==========================================
  Files            24         24
  Lines          1926       1926
  Methods         330        330
  Messages          0          0
  Branches        209        209
==========================================
+ Hits           1813       1815     +2
  Misses           99         99
+ Partials         14         12     -2

Powered by Codecov. Last update 53845b0...4eb894d

Thanks for contribution.
jarek


Replace "psycopg2" with "psycopg[binary,pool]" because of slow psycopg2 availability when a new Python version comes out

Currentl
tests\django_property_filter\filters\test_property_numeric_range_filter.py
=> test_lookup_xpr_int_range is not working, or some chages needed
disabled for now, have other similar tests e.g. with decimal numbers, don't need this for now


Missing DOIs starting with 10.1016/j in 2017 download logs

See this tweet from Sci-Hub on 2018-05-15:

update to 2017 download stats: it turned out that all DOI starting from '10.1016/j' pattern were marked as erroneous and were filtered out by exporter script. that happened by mistake. here the all missed downloads: http://sci-hub.tw/downloads/2017.statistics.1016.j.tab

I downloaded 2017.statistics.1016.j.tab, which is a 4.2 GB TSV containing 43,623,865 rows. So that's a decent number of downloads. 10.1016 is a DOI prefix of Elsevier's (see via Crossref API call).
We can calculate on average how many downloads per day were missing from the 2017 logs due to this omission: 43,623,865 / 365 = 119,517. So that's a huge number that would affect the plot below considerably:

I don't plan to remake this figure, but will leave this issue open so viewers are aware of the issue.

In https://github.com/greenelab/scihub/commit/afcb27d47ef1323f4499b3d02939814717cf6afd, I updated the Sci-Hub daily download chart with the missing DOIs. The updated visualization is below.

Impressive to see that July, August, and November 2017 broke 700,000 downloads per day.


PSRAM init on master causes FreeRTS queue assert; works in release/4.0 (IDFGH-4313)

Environment

Development Kit: ESP32-CAM AI-thinker clone
Module or chip used: ESP32
IDF version (run git describe --tags to find it): master, commit 178b122c145c19e94ac896197a3a4a9d379cd618
Build System: idf.py
Power Supply: 5V external

Problem Description
I checked out master 178b122c145c19e94ac896197a3a4a9d379cd618 yesterday, and copied wifi/station example and then attempted to init PSRAM. Failed during boot, causing bootloop, turned on verbose logging, got this:
ets Jun  8 2016 00:22:57

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:4
load:0x3fff0034,len:6912
ho 0 tail 12 room 4
load:0x40078000,len:14332
load:0x40080400,len:3672
entry 0x40080678
I (30) boot: ESP-IDF v4.3-dev-1901-g178b122c1 2nd stage bootloader
I (31) boot: compile time 19:49:58
I (31) boot: chip revision: 1
I (35) boot_comm: chip revision: 1, min. bootloader chip revision: 0
I (42) boot.esp32: SPI Speed      : 40MHz
I (47) boot.esp32: SPI Mode       : DIO
I (52) boot.esp32: SPI Flash Size : 4MB
I (56) boot: Enabling RNG early entropy source...
I (61) boot: Partition Table:
I (65) boot: ## Label            Usage          Type ST Offset   Length
I (72) boot:  0 nvs              WiFi data        01 02 00009000 00006000
I (80) boot:  1 phy_init         RF data          01 01 0000f000 00001000
I (87) boot:  2 factory          factory app      00 00 00010000 00100000
I (95) boot: End of partition table
I (99) boot_comm: chip revision: 1, min. application chip revision: 0
I (106) esp_image: segment 0: paddr=0x00010020 vaddr=0x3f400020 size=0x1ac30 (109616) map
I (157) esp_image: segment 1: paddr=0x0002ac58 vaddr=0x3ffb0000 size=0x04034 ( 16436) load
I (164) esp_image: segment 2: paddr=0x0002ec94 vaddr=0x40080000 size=0x00404 (  1028) load
I (165) esp_image: segment 3: paddr=0x0002f0a0 vaddr=0x40080404 size=0x00f78 (  3960) load
I (174) esp_image: segment 4: paddr=0x00030020 vaddr=0x400d0020 size=0x741e4 (475620) map
I (362) esp_image: segment 5: paddr=0x000a420c vaddr=0x4008137c size=0x159e4 ( 88548) load
I (414) boot: Loaded app from partition at offset 0x10000
I (414) boot: Disabling RNG early entropy source...
D (426) efuse: coding scheme 0
/Users/lin/esp-idf/components/freertos/queue.c:1441 (xQueueSemaphoreTake)- assert failed!
Re-enable cpu cache.

abort() was called at PC 0x4008d6bf on core 0
Backtrace:0x4008998f:0x3ffe39c0 0x4008a185:0x3ffe39e0 0x40090ffa:0x3ffe3a00 0x4008d6bf:0x3ffe3a70 0x4008f9be:0x3ffe3ab0 0x401440a9:0x3ffe3ad0 0x4008f955:0x3ffe3b00 0x400d812d:0x3ffe3b50 0x400d8029:0x3ffe3bb0 0x400d7fe1:0x3ffe3bd0 0x40083930:0x3ffe3c00 0x400d50e9:0x3ffe3c30 0x4008149a:0x3ffe3c50 0x400791d0:0x3ffe3c80 |<-CORRUPTED

ELF file SHA256: 4e859f056b97d68e

Rebooting...

I played around with many options assuming it was some hardware quirk; the board i have is a ESP32-CAM AI-THINKER clone board.
Nothing worked, in frustration tested arduino IDE, it worked; now arduino esp uses something like 3.3 release, so I decided to revert back to older builds. I went to release/4.0 branch, now it works. I didn't test the 4.x branches.
LMK if you want more information.

Note, with PSRAM init disabled in menuconfig, it will boot past this and work. In 4.0, with PSRAM enabled, I get 4MB printed out, so the board actually does have 4MB and it actually does work.

@lastquestion
Sorry for delayed reply.
This looks to be similar to https://github.com/espressif/esp-idf/issues/6660. We will close once fix appears on github

Fixed with https://github.com/espressif/esp-idf/commit/c05fde2cbfe3e45febf07d01f9daf238e74d664d


Random panic

Hi,
I may have encountered a random panic. I'm not sure what I was doing just before, unfortunately, and only have a screenshot:

The code:
https://github.com/cocomundo/julia-set-renderer (run with cargo run for klask GUI).
I suspect it has something to do with hitting the "Kill" button while a progressbar is being displayed. But I haven't been able to get it to crash again with this.
Specifically, on this commit: https://github.com/cocomundo/julia-set-renderer/commit/22dc76605663bed7187532221f0104516c6f9261 but I don't think it makes a difference.

Progress bars are currently implemented very... poorly, it's basically parsing stdout and looking for some specific characters that no normal application should use. I implemented some changes in #49 that remove the panic that was the cause of this crash. The output will probably be garbage if it happens again, but it's a better alternative to crashing the whole application.


XLNet-Large, Cased - broken link

Link to the Large network isn't working at the moment.
SOLUTION:
Change address from
https://storage.googleapis.com/xlnet_models/cased_L-24_H-1024_A-16.zip
to
https://storage.googleapis.com/xlnet/released_models/cased_L-24_H-1024_A-16.zip
The hyperlink needs updating to the one below. Thanks :)

Just fixed it. Thanks for pointing this out.


[examples][gitwriter-sc] Adjust directory name for tree overview

Changes proposed by this PR

While going through the examples it seems like the overview of folder structure normally has the name of the current example directory in it. This has not been the case for gitwriter-sc therefore this PR should adjust that.

Release Note
Small adjustment to examples/gitwriter-sc README.md

PR Checklist
Note: Please do not remove items. Mark items as done [x] or use ~strikethrough~ if you believe they are not relevant

[ ] Linked to a relevant issue. Eg: Fixes #123 or Updates #123
[ ] Removed non-atomic or wip commits
[X] Filled in the Release Note section above
[ ] Modified the docs to match changes

Good catch, thanks for pointing this out!


Modifying past movement costs from teleporting does not take 'canceled' movement into account

Describe the bug
The code for modifying the cost of previous teleport movement does not check if the previous token dragging actually resulted in movement history.
To Reproduce
Steps to reproduce the behavior:

Move normally.
Set the movement mode to teleport.
Drag the token around but do not move it anywhere.
Drag the token around again.

Expected behavior
The movement from step 1 is not modified as it was not teleport movement.
Actual Behavior
The movement from step 1 is modified during step 4 because the code wrongly assumes it corresponds to the canceled teleport movement from step 3.

This has turned out to be a rather annoying bug. It's what I get for messing with the kinda internal data structure of Drag Ruler's movement history. I will take another stab at it soon but if that doesn't work out I will probably move the teleportation functionality behind and experimental toggle with a warning. That way this bug doesn't delay the next release for too long, without having the completely scrap this functionality.


whats the best way to install the plugin §

sorry this might be a little unrelated to your plugin...
When I install it for each individual project it gets a little annoying since I need to install all the time.
and since this plugin doesn't has any functionality which has to be present so my game also works on other machines I wanted to know if I can install it for the editor?
or what is you approach in using it?

this is not specific to the plugin cause it's basically how the assetlib works.. not much i can do


Setup CI for publishing on merges to master

This should involve setting up Travis/Github Actions or similar so that every merge to the master branch can be released with a version bump.
This will avoid having to manually publish on every change.

great @moaazsidat! let's make it work, do you need some help?

the react-native-camera has something similar working very well with a pretty easy config, and it does seem to publish on npm by this plugin: https://github.com/semantic-release/npm, following the next snippets:
https://github.com/react-native-camera/react-native-camera/blob/42388be530f4a791ff6822b430b346248c2a40af/.circleci/config.yml#L88-L101
https://github.com/react-native-camera/react-native-camera/blob/42388be530f4a791ff6822b430b346248c2a40af/.circleci/config.yml#L62-L68
https://github.com/react-native-camera/react-native-camera/blob/42388be530f4a791ff6822b430b346248c2a40af/package.json#L80
https://github.com/react-native-camera/react-native-camera/blob/42388be530f4a791ff6822b430b346248c2a40af/package.json#L83-L105

@renatobenks thanks for the links, definitely helps, considering just using Github Actions to prevent introducing another product to manage CI/release if possible, and keep the project contained on Github.
seems like there's an action available to do just this which might help accomplish this
https://github.com/marketplace/actions/npm-publish

Fixed, have updated the contribution guide to note how to follow semantic-release's commit convention to release: https://github.com/moaazsidat/react-native-qrcode-scanner/blob/master/CONTRIBUTION.md#formatting-for-commit-messages-for-merge-commits
Any feedback or improvements appreciated


Hololens IP Address

Your documentation states: -
'Identifying the IP Address of your HoloLens on the Wi-Fi network
Using Settings
Bloom to pull up the Start menu
Place the Settings app in your world
Gaze to Network & Internet and select
Gaze to Advanced Options and select
The IP address will be shown next to IPv4 address'
Yet - when I gaze at Network & Internet and select - there is no 'Advanced Options' to gaze at or select - the only information presented is the MAC Address!
Is this an omission, or is something amiss with the setup of the HoloLens?
Regards
RussM

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

ID: d65372fd-3490-185f-62c4-7370036bcf2a
Version Independent ID: 25cb8eb0-5ffb-3e9e-7c9b-3055c7ab458b
Content: Connecting to Wi-Fi on HoloLens - Mixed Reality
Content Source: mixed-reality-docs/connecting-to-wi-fi-on-hololens.md
Product: windows
GitHub Login: @mattzmsft
Microsoft Alias: mazeller

Hi @RussM4120, it's likely just a change in the Settings options as a result of OS updates to HoloLens in the time since this documentation was authored. Let me look into it and get back to you!

Okay, figured it out: it's still in Settings > Network & Internet > Wi-Fi, but then scroll down past all the networks and select "Hardware properties" at the bottom. If you're connected to Wi-Fi, you'll see your IP address in there! I'll update the docs soon, unless you want to submit a PR to change it! We love public contributions :-)

I went ahead and updated the article myself with the new instructions. Thanks again for flagging!


Add an ability to configure default routing class on controller level

What does this PR do?
Adds an ability to configure default routing class on controller level.
It allows using the same samples after enabling webhooks.
What issues does this PR fix or reference?
N/A
Is it tested? How?

Configured Controller with the following config:

apiVersion: v1
kind: ConfigMap
data:
  che.default_routing_class: openshift-oauth
  che.webhooks.enabled: "true"
  che.workspace.plugin_broker.artifacts.image: quay.io/eclipse/che-plugin-artifacts-broker:v3.1.0
  cherestapis.image.name: quay.io/dfestal/che-workspace-crd-rest-apis:newone
  ingress.global.domain: apps-crc.testing
  plugin.registry.url: http://che-plugin-registry-che-workspace-controller.apps-crc.testing

kubectl apply -f ./samples/cloud-shell.yaml
make sure that the only workspace creator has an ability to open CloudShell

cc: @davidfestal as well.


unexpected error message when importing 0.6 ver export file in 1.0

I tried to import my 0.6 ver langflow json export file into 1.0 new project
then the unexpected error message pop up (giving me the link to create this issue)
simply go to the previous page won't refresh the page, the restart langflow button on the message won't work
have to go to the previous page and refresh manually to get rid of the error message
after the import whenever I click the new project, the error message will pop up
Having a fail to import safety will be much nicer

Have you tried with 1.0.x versions? If the error is still there, please add more details and reopen the issue.


Add configurable variables to control thresholding

@egorpugin,  sw build for Ubuntu is broken.

build for Ubuntu is broken.

I've built sw on fedora34 which has newer libc.
I'll check it.

As for the changes.
I said earlier that tess should have an api taking binary image for OCR.
It will be much more flexible than tuning dozens of parameters of tess.
User will provide his fine-tuned b/w input image.

I said earlier that tess should have an api taking binary image for OCR.
It will be much more flexible than tuning dozens of parameters of tess.
User will provide his fine-tuned b/w input image.

We should offer both IMO – see my proposal for something like SetThresholdedImage / SetBinaryImage / 2-ary SetImage and GetEstimatedResolution. @amitdo, IIUC you wanted to keep such changes out of 5.0?

This PR will be useful to many advanced users.
Later PR will provide the scaling option I mentioned in another comment.
I also want to add some more thresholding  methods from Leptonica.
I plan to add the option to pick an external grayscale-binary-thresholds_array trio. This will be used by even more advanced users.
This one is not guaranteed to be implemented in time for 5.0.0.

I need to rethink about the binarization done by Tesserct.

This PR will be useful for many advanced users.

Agreed in principle, but I still think the concrete choices for parameter names and defaults should be different, as argued above.

Later PR will provide the scaling option I mentioned in another comment.
I also want to add some more thresholding methods from Leptonica.
I plan to add the option to use an external grayscale-binary-thresholds_array trio. This will be used by even more advanced users.
This one is not guaranteed to be implemented in time for 5.0.0.

Then why close this one so soon?

@amitdo
The most flexible approach is to allow user to pass his prepared image.
Ocr tools does ocr. Let others do their best (segmentation of text blocks, binarization).

Ocr tools does ocr. Let others do their best (segmentation of text blocks, binarization).

A large part of Tesseract is dedicated to layout analysis.

@bertsky,

Then why close this one so soon?

One reason is Egor's comment. Why should I bother with this PR with this consistent feedback?

@amitdo : You can not expect that everybody will praise you or be excited about your work. We have different aims, we use different tools, but we share what we find useful. We need consensus only in cases where one approach is blocking/limit something else. IMO this is not the case.
Also, I prefer a ready solution (even not perfect) than waiting for some great new feature which is not available. Because it is easier to remove old code than to use not existing code. ;-)
So I suggest finishing this PR, so the community can test it and just it is useful for them too.

Zdenko, very nice comment.

@egorpugin

I said earlier that tess should have an api taking binary image for OCR.

AFAIK user can give binary image for OCR via SetImage or do I miss something?

Let others do their best (segmentation of text blocks, binarization).

Can you suggest another maintained C++ opensource library/tool for document analyzing?
Because I got different feedback: it was claimed that tesseract is the best open-source c++ document analysis tool they found. Actually, it was told to me that they use tesseract for document analyze and for OCR (e.g. numbers on invoices) they use a custom OCR engine. Even there was a request to put tesseract document analyze to separate library, so they do not need to install OCR part...

I'm going to merge this PR as-is today.
The scaling request can be done later on top of the absolute values. I don't promise I'll implement it.

AFAIK user can give binary image for OCR via SetImage or do I miss something?

See @bertsky comment here:
https://github.com/tesseract-ocr/tesseract/issues/3083#issue-684853460

@zdenop

AFAIK user can give binary image for OCR via SetImage or do I miss something?

If SetImage does not do further thresholding, it's ok.

it was claimed that tesseract is the best open-source c++ document analysis tool they found.

Consider following.
Tess has one algorithm. Some images will work fine, others are not.
Now we take all other possible algorithms. Their count is infinite.
Obviously, Inf > 1.
What approach is more flexible?
And I'm not saying about something existing.
Someony may always do their own, custom image preprocessing.
@amitdo
I'm not saying these changes are bad or unneeded. It is completely fine to have them.

Please don't merge yet.

@egorpugin @zdenop you are both right I think: Tesseract is a good practical OLR tool which covers many different materials and languages more or less robustly and very fast, too. There are weaknesses for sure, like complex layouts with lots of tables or graphical elements or widely varying font sizes, historical documents with faint ink or show-through or very dense typesetting or ornaments, images with bad photography like shadows or keystone distortion. A page frame detection is missing entirely, and OSD and deskewing are not nearly as good as the rest. For some of these problems, you'll find good automatic solutions, and often very good interactive/GUI tools. But still, Tesseract's automatic OLR is still unmatched for productive use in the Open Source world. I'm certain this will soon change when more and more well packaged and well tested data-driven OLR tools pour in from the research breakthrough that the deep learning / object detection methods brought into the field. But Tesseract with its flexible API and wide coverage of languages and scripts will still be relevant for OCR workflows. And its OLR will always be an important baseline, perhaps even an adjunct to the neural models in some kind of hybrid approach.
That said, again, I believe Tesseract should try to do its best by its own means, and things like binarization and table OLR can still be improved (and at the same time made more user-friendly). But its API should also be kept as flexible as necessary to better interoperate with other preprocessing, OLR, and OCR tools in a custom workflow.


Doc tokenServiceUri, #304

maybe i'm missing something, but why add more doc to the DotNet and PHP readme's when we decided to port that section out entirely?

@jgravois - you're correct. This PR is for the old-style README. And the related info seems to have been added by https://github.com/Esri/resource-proxy/commit/aa7c39c70ec13459a0e23a95d4f322d31fdc2c07 to the new main place.  Closing.


Added internal methods for optional type for casts some type to optional

I hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=en

Pull request type

Please check the type of change your PR introduces:

[ ] Bugfix
[ ] Feature
[ ] Code style update (formatting, renaming)
[x] Refactoring (no functional changes, no api changes)
[ ] Build related changes
[ ] Documentation content changes
[ ] Other (please describe):

What is the current behavior?

Issue Number: N/A
What is the new behavior?

Other information

Codecov Report
Base: 62.73% // Head: 44.40% // Decreases project coverage by -18.33% :warning:

Coverage data is based on head (0161a14) compared to base (13260fc).
Patch coverage: 20.00% of modified lines in pull request are covered.

: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
Additional details and impacted files
@@             Coverage Diff             @@
##           master     #577       +/-   ##
===========================================
- Coverage   62.73%   44.40%   -18.33%
===========================================
  Files         221      147       -74
  Lines       21541    15385     -6156
===========================================
- Hits        13513     6832     -6681
- Misses       7359     8241      +882
+ Partials      669      312      -357

Flag
Coverage Δ

1.16.x
44.03% <20.00%> (-18.43%)
:arrow_down:

1.19.x
44.48% <20.00%> (-18.05%)
:arrow_down:

1.20.x
44.48% <20.00%> (-18.06%)
:arrow_down:

insecure
?

integration
?

macOS-latest
44.43% <20.00%> (+0.04%)
:arrow_up:

secure
?

ubuntu-latest
44.40% <20.00%> (-18.28%)
:arrow_down:

unit
44.40% <20.00%> (-0.09%)
:arrow_down:

windows-latest
?

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

 Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

:umbrella: View full report at Codecov.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.


Update to 2.6.3, log4j to 2.17.1 (CVE-2021-44832)

Fix: https://nvd.nist.gov/vuln/detail/CVE-2021-44832

Hi @kheshav
Thank you for your contribution! Before evaluating and possibly approving it, we would need to have the NIIS Contributor License Agreement (CLA) document signed by you. More information about the NIIS CLA and instructions for signing and delivering it can be found at:
https://github.com/nordic-institute/X-Road-development/#contributor-licence-agreement
Best wishes,
Raido

Hello,
As requested CLA has been mailed to<EMAIL_ADDRESS>Kind Regards

Hello,
Unfortunately, we could not verify the digitally signed CLA and since we had a time constraint to release the update with the new Log4J2 dependency, we updated the source ourselves and released the update.
Due to this, I will close this PR without merging.
Best wishes,
Raido