Autotitle when not using storyStoreV7

Currently, autotitle does not work without enabling storyStoreV7.  We need to provide a global STORIES like the webpack builder does here: https://github.com/storybookjs/storybook/blob/e0c0a1429dc123219dfd74c8c4a1c6bfc9660f74/lib/builder-webpack4/src/preview/iframe-webpack.config.ts#L191-L194, so that it can be used here: https://github.com/storybookjs/storybook/blob/e0c0a1429dc123219dfd74c8c4a1c6bfc9660f74/lib/client-api/src/StoryStoreFacade.ts#L156-L164
I've hit two snags so far.  One, is that autoTitle uses path, which webpack polyfills but vite does not (there's a simple solution I have working, and I'll submit a PR to storybook soon).  Second, the format of the loadable function we are providing to the call to configure does not include the filenames, which means that autoTitle does not name the stories correctly, defaulting to export_map_1, rather than the actual filename.  Here is where the loadable is used: https://github.com/storybookjs/storybook/blob/e0c0a1429dc123219dfd74c8c4a1c6bfc9660f74/lib/core-client/src/preview/executeLoadable.ts#L12, and this is how we are currently setting it up: https://github.com/eirslett/storybook-builder-vite/blob/fb289c1cb57c3b929eb5f586e87b7644f97e28be/packages/storybook-builder-vite/codegen-iframe-script.ts#L103-L106.

The second snag is reported here with a potential solution https://github.com/eirslett/storybook-builder-vite/issues/142

PR to remove path: https://github.com/storybookjs/storybook/pull/17185


Mail design

This Pull Request tries to fix the Issue #41 and make email great again :100:

The html head should not be inside the confirmation_instructions.html.erb partial. Instead,  create a file devise_mailer.html.erb inside app/views/layouts that contains the head as in your partial and has
<body>
  <%= yield %>
</body>

for a body. devise_mailer.html.erb only needs the code inside the body. Then, add the line layout 'devise_mailer' to mailers/my_mailer.rb. This will make sure that all devise mailer partials will use this layout. It might be worth thinking about using one unified layout for notification mails for media etc. and mails coming from devise (registration, password change etc.). For that I think one would have to apply the changes done in this pull request to my_mailer.rb to application_mailer.rb and set config.parent_mailer = 'ApplicationMailer' in config/initializers/devise.rb. The MyMailer class could then be deleted and the unified layout should be put in app/views/layouts/mailer.html.erb.

I will take care of both mail systems separately, mabe I will need some help merging both together as suggested ...
So far I only changed the devise part.


LCFS - Implement Keycloak Logout and Redirection for Frontend Authentication Flow and Validate Access Control

Describe the Task
This task involves implementing and finalizing the frontend authentication flow in our ReactJS application that utilizes Keycloak for user login and authorization. The implementation needs to include a functionality for Keycloak logout and a redirection URL post-logout. In addition to this, the developer assigned to this task is required to review all the frontend code related to Keycloak authentication flow and cross-verify it against the ITVR authentication flow. The task also entails ensuring that the compliance_reports view is adequately protected and only accessible post-successful login.
Purpose

To provide a secure and seamless user experience by implementing an efficient authentication flow using Keycloak.
To ensure that users are properly logged out and redirected, enhancing security and usability.
To double-check the implemented authentication flow against ITVR to maintain consistency and adherence to established standards.
To safeguard sensitive data by confirming that compliance_reports view is only accessible to authenticated users.

Acceptance Criteria

[ ] The Keycloak logout functionality is implemented, and users are logged out of the application securely.
[ ] After logout, users are redirected to a specified URL.
[ ] The frontend Keycloak authentication flow code is reviewed and verified against the ITVR authentication flow.
[ ] The compliance_reports view is confirmed to be accessible only after successful login.
[ ] Documentation is updated to reflect the changes and implementations.
[ ] The implemented flow is tested for different scenarios and is proven to be robust and secure.

Additional Context

Keycloak is an open-source Identity and Access Management solution that our application is using for authentication.
The ITVR authentication flow should serve as a reference for standards and best practices.
Ensuring the security and restricted access to compliance_reports view is crucial for data protection and compliance.

About configuring the logout redirect uri: The calling component can pass a redirect uri to the  component, but this is optional. By default, logging out will redirect to the page the user is currently on (location.href), and if this page is protected by authentication (the  component in routes/index.js), then the user will be redirected to a specified, non-protected route (in the case of LCFS and ITVR, the route is /login). This is usually sufficient; if the developer that is developing a (frontend) view wants custom logout redirection behaviour, it is up to them to use  (which contains ) and pass a custom redirect uri to it.
About protecting the compliance_reports view: as long as  is used (which it currently is), then the frontend view will be protected; of course, checks/protections should also be implemented around the associated backend endpoint.

Nothing for PO to test


buildkite: fixup Nix attr for nightly slow-ThreadNet-tests

Fixes Issue #2560.
I think this PR just needs a rubber-stamp Approval, since https://buildkite.com/input-output-hk/ouroboros-network-nightly/builds/215 validated this fixup (by 40 seconds in it has already made it farther than the failures 213 and 214, but I'll let it finish /shrug).

bors merge

Thanks! I should have grepped for it.


Layouting problem with multiple todos

Thanks for the package :). I found a small problem
== Mass spectroscopy
#todo[Descbribe what this is]
#todo[And how it works]
#todo[And how read the plots]

results in

Yeah, that looks not useful :upside_down_face: . The package currently does not compare the position of each todo against each other, it simply shows it on the side. I don't have the time and knowledge to implement such a placement algorithm currently.
If someone knows how to make it better, please give it a try!
For now, you likely can manually work around this issue, for instance:
#todo[
  - Describe what this is
  - And how it works
  - And how read the plots
]

or
== Mass spectroscopy
#todo[Describe what this is]
#v(2em)
#todo[And how it works]
#v(2em)
#todo[And how read the plots]


As an assistant I can produce a report with all the countries in the world, organised by largest population to smallest, so that I can provide population information to the management of the organisation

Use Case 1 complete


stack + group by does not work as expected in 0.16.2

x = pd.DataFrame({'x':[1,1,3,3],'y':[3,3,5,5]},index=[11,11,12,12])
y = x.stack()
print(y)
print(y.groupby(level=[0,1]).sum())

Ouput
11  x    1
    y    3
    x    1
    y    3
12  x    3
    y    5
    x    3
    y    5
dtype: int64
11  x    1
    y    3
    x    1
    y    3
12  x    3
    y    5
    x    3
    y    5
dtype: int64

The stack and group by sum are just the same.
Expected output:
11  x    2
11  y    6
12  x    6
12  y    10

yep, looks a little buggy. As the following gives the expected output.
In [5]: y.reset_index().groupby(['level_0','level_1']).sum()
Out[5]:
                  0
level_0 level_1
11      x         2
        y         6
12      x         6
        y        10


Factory Undefined

Hi,
I was going through all of your tutorial and it is best and easy to understand, i am having one query on example 40 when i am passing $scope as a dependency then why countries is coming as undefined
example code below:
countryApp.controller('CountryListCtrl', ['$scope', function ($scope, countries){
countries.list(function(countries) {
$scope.countries = countries;
});
      console.log(countries);
  }]);

Please help me understand.
Thanks,
Pradeep

Hi Pradeep,
Here is the code in example 40:
countryApp.controller('CountryListCtrl', function ($scope, countries){
  countries.list(function(countries) {
    $scope.countries = countries;
  });
});

Unfortunately this code uses the variable name countries for two different things, which might be confusing. Here's a version with two different names:
countryApp.controller('CountryListCtrl', function ($scope, countries){
  countries.list(function(countriesList) {
    $scope.countries = countriesList;
  });
});

The code you have uses the array notation for dependency injection, but only specifies $scope as a dependency, not countries. Here's code similar to yours to show what is missing:
countryApp.controller('CountryListCtrl', ['$scope', /* 'countries' should go here */ function ($scope, countries){
  countries.list(function(countriesList) {
    $scope.countries = countriesList;
  });
  console.log(countries);
}]);

You need to change your code to include countries as a dependency in the array, like this:
countryApp.controller('CountryListCtrl', ['$scope', 'countries', function ($scope, countries){
  countries.list(function(countriesList) {
    $scope.countries = countriesList;
  });
  console.log(countries);
}]);

Hope this helps. Good luck.

Thank Curran, it helped and now i understood what was i missing, Please let me know if you have video or a blog describing server calls also like get post delete with example too like this screencast.

Great! I don't have any videos on REST APIs yet, but it's good to know you would be interested in that.


(BKR-188) have beaker support a 'test' raketask.

meets our gem standards

Refer to this link for build results (access rights to CI server needed):
http://jenkins-beaker.delivery.puppetlabs.net//job/qe_beaker_btc-intn/729/
:red_circle: Test failed.


Update depencies and improve build process

I initially started this PR to just update the dependencies, so that cryptography—now requiring Rust—would build again. In doing so, however, I noticed that the new build dependencies for cryptography made the image balloon in size.
To remedy that, I moved the dependency building to a separate stage. After doing so, I realized the build could be further simplified by not just building the dependencies in that stage, but also Syncplay itself, as it provides a console_scripts entry point for the server.
With all that, on top of the fixes, the image is now nearly 4x smaller than before (389 MB -> 100 MB).

Wow! This is amazing!
Thank you very much! 👍


errors returned by weave http api are ignored by weave script

curl returns a 0 exit status for HTTP errors (as opposed to connectivity, etc errors):
$ curl --connect-timeout 3 -s -S -X POST -d peer=1 http://<IP_ADDRESS>:6784/connect
lookup 1: invalid domain name
$ echo $?
0

And just to check that we are indeed returning an error code:
$ curl -D - --connect-timeout 3 -s -S -X POST -d peer=1 http://<IP_ADDRESS>:6784/connect
HTTP/1.1 400 Bad Request
Content-Type: text/plain; charset=utf-8
X-Content-Type-Options: nosniff
Date: Wed, 16 Mar 2016 22:38:50 GMT
Content-Length: 30

lookup 1: invalid domain name

The curl behaviour can be changed with -f, but that doesn't print the returned response:
$ curl -f --connect-timeout 3 -s -S -X POST -d peer=1 http://<IP_ADDRESS>:6784/connect
curl: (22) The requested URL returned error: 400 Bad Request
$ echo $?
22

user impact

claiming individual IP addresses in ipam_cidrs (called from weave run|start|attach|expose; weave attach is also called by the proxy)
$ weave run ip:<IP_ADDRESS>/24 -ti alpine /bin/sh
978c65ca3593a33a28eafc48029a331949a0033d4ae177326bb7eeb27615485a
$ weave run ip:<IP_ADDRESS>/24 -ti alpine /bin/sh
Unable to claim: address <IP_ADDRESS>/24 is already owned by 978c65ca3593a33a28eafc48029a331949a0033d4ae177326bb7eeb27615485a
9a59bd62937a5448770c0c7d553a041a51f23b3a06287a7543897355377d70dc
$ echo $?
0

reclaiming IP addressed in weave restart. This will fail in the same way as the example above if the IP got pinched by another container during the restart.

weave rmpeer
 $ weave rmpeer foo
 Cannot find peer 'foo'
 $ echo $?
 0

weave connect|forget
 $ weave connect 1
 lookup 1: invalid domain name
 $ echo $?
 0

weave report
$ weave report -f '{{'
template: format:1: unexpected unclosed action in command
$ echo $?
0

unaffected

weave status - we handle invalid sub-commands specially, and this really shouldn't fail for other reasons
weave consense - can't fail
reclaiming individual IP addresses for all containers, and the bridge, when the router (re)starts. This generally shouldn't fail with an HTTP error, so this is fine.
waiting for router|proxy|plugin status on launch. The status call generally shouldn't fail with an HTTP error, so this is fine.
obtaining proxy address for the likes of weave env|config. The status call generally shouldn't fail with an HTTP error, so this is fine.
allocating IP addresses through ipam_cidrs (called from weave run|start|attach|expose; weave attach is also called by the proxy) and looking up IP addresses through ipam_cidrs (called from weave detach|hide). We catch errors here by checking that the output is a CIDR. So this is fine.
releasing IP addresses in weave detach|hide - this should not go wrong, since we first perform a lookup, and hence should only be releasing owned addresses.

I am tentatively putting this into 1.4.6, since this is pretty bad for scripting weave, though I doubt we can think of a low-risk fix for this. @awh suggested replacing curl with a weaveutil function. Or perhaps do the replacement at the slightly higher level of call_weave, wait_for_status et al.

A related problem here is that error messages appear on stdout, not stderr.

There are a couple of places where we do detect errors by checking the output is exactly "404 page not found"
It pains me to think it, but curl is just not up to the job we want it to do.

Here's a possibly not-too-horrific way of fixing this...
curl --connect-timeout 3 -s -S -w '%{http_code}\n' -X POST -d peer=foo http://<IP_ADDRESS>:6784/connect
lookup foo on <IP_ADDRESS>:53: no such host
400

Then it's just a matter of extracting the status code from the end, checking whether it is != 2xx, and if so output everything that came before on stderr and return an error.


CompletionItem's deprecated property should be preserved across requests

Although VS Code does not currently support appending a visual indicator that a completion item is "deprecated", the deprecated property itself of a CompletionItem should still be preserved across requests. This will allow language servers to read and write to that field across a textDocument/completion request and a completionItem/resolve request.
I used if (x.val === true || x.val === false) { y.val = x.val; } to ensure that only boolean values would be converted as I didn't want to encourage an "anything goes" attitude.

As always nice work.

Thanks for merging it in so quickly, Dirk!


Use new topology ordering function on BGQ

Original issue: https://charm.cs.illinois.edu/redmine/issues/374

Replace our short term solution to allow for correct topology information using an environment variable with the new function call that IBM provided on our request.

Original date: 2013-12-06 20:23:35

Resolved via http://charm.cs.uiuc.edu/gerrit/#/c/15/

Original date: 2013-12-08 06:43:15

Builds seem to fail under GCC, due to a missing prototype:
BGQTorus.C: In constructor 'BGQTorusManager::BGQTorusManager()':
BGQTorus.C:57: error: 'Kernel_GetMapping' was not declared in this scope

Original date: 2014-01-03 05:06:46

Not a GCC thing. Only some machines have an updated driver. This change has been temporarily rolled back, till all machine move to the next driver, V1R2M1.

Original date: 2014-01-07 23:04:04

It looks like the rollout of the V1R2M1 driver on Mira/Cetus is going to be held back, due to a just-uncovered bug in MPI_Comm_create and MPI_Comm_split. It would have happened this week or next, but that's been set aside.

Original date: 2016-05-02 17:18:18

~~https://charm.cs.illinois.edu/gerrit/#/c/422/~~ https://github.com/UIUC-PPL/charm/commit/e223cf64a5f1c08b00e17d3b8dfd938062fbbbba


Port nestedScrollingEnabled to 4.x

Many time, we need nest layout a recyclerview in parent recyclerview or nestedscrollview, this will cause scoll conflict. Up to android 5.0, the problem can be solved by use nestedScrollingEnabled=false. But 4.x can not do this, the gesture seems to not sensitive because the child recyclerview is scolling at the same time. I have a idea to port it to carbon. If not, can you give me some suggestion about solve this problem?

NestedScrollView is quite new, so I'm surprised that it doesn't work with 4.x. I would need to take a look at the implementation and if it's possible, then sure - I could backport it. This question seems to be related: https://stackoverflow.com/questions/43287798/api-19-scrollview-no-momentum
Usually instead of nested scroll containers I just use a RecyclerView with multiple item/row classes. I'm not sure if that would work for you.

Yes, multiple item type can solve simple problems. But always we will facing complex data model which has many levels of lists. May be tree or four levels, the ui may be recyclerview nest recyclerview, child recylcerveiw nest recyclerview.

Did you try androidx NestedScrollView? It has setNestedScrollingEnabled() and promises to work on older APIs as well.

Finally I use ViewCompat.setNestedScollEnable on RecyclerView to solve this problem.


Connection URL for DroneCore applications

As DroneCore supports multiple connection interfaces TCP, UDP & Serial, we need to allow user to select either of them while launching the application.
Examples of connection URL could be:

UDP: udp://[bind_host][:port]
TCP client: tcp://[server_host][:port]
Serial: /path/to/serial/device[:baudrate]

For.eg below conn URL binds to UDP port 14500
$ ./takeoff_land udp://:14500

binds to default UDP port 14540
$ ./takeoff_land

Connects to TCP Server (<IP_ADDRESS>:5760) hosted by MAVLink Router on Intel Aero
$ ./takeoff_land tcp://<IP_ADDRESS>:5760

etc.

I agree that this would be handy, however, what you add here are cli args to the examples and not to the core library, so this means you'd have to add it one by one to each example.
We'll have to think about this again after the gRPC refactor, I think.

@julianoes Agree.
In case of gRPC it can be handled at single place dronecore_server. We can have one config file to load and connect to any number of vehicles which are listed in config file.
client (applications) just need to query for active vehicles.

How about this ?

DroneCore Applications are launched via connection URL argument (with default URL udp://:14540)
Applications need not parse it, but pass the same to DroneCore which will do the parsing and handle corresponding connection required.

int main(int argc, char **argv)
{
   DroneCore dc;
   DroneCore::ConnectionResult connection_result;
   if (argc == 1)
     connection_result = dc.add_connection(); // default UDP connection at port 14540
   else if (argc == 2)
     connection_result = dc.add_connection(argv[1]);  // connection URL  of user's preference

...

This removes all overhead from apps whether to call add_udp_connection() or add_tcp_connection(), etc.

That's a good idea.
What about calling it dc.add_any_connection(argv[1])?

Yeah. I think to keep simple and effective:
conn_res = dc.connect(argv[1]);

and
DroneCore::connect(const std::string &connection_url);

Where connection_url could be any of the below:

UDP: udp://[bind_host][:port]
TCP client: tcp://[server_host][:port]
Serial: /path/to/serial/device[:baudrate]

But it's not connect, it's adding a connection. Because you can add several connections and then it will connect once a vehicle appears.

Right. But its connect in case of TCP, because, we get connected to TCP server.
To be consistent, we can keep either of dc.add_any_connection(argv[1]) or dc.add_connection(argv[1]).

I vote any.


Remove JupyterHub dependencies

Closes #534
Description

Remove dependencies related to JupyterHub, most of the YAML docs updates will be addressed in #1636
How Has This Been Tested?

Make sure you installs the apps and docs in updated manifests/apps/jupyter and make sure your cluster has removed jupyterhub OdhApplication CR
Set enabled to true in notebookController field in the dashboard config CR
Make sure everything works as normal
Set enabled to false in notebookController field in the dashboard config CR, and wait for 2 mins
Make sure you cannot see any docs, quickstart on the Resources page, Make sure you cannot see the Jupyter app card on the Enabled and Explore page
Make sure you cannot access the notebook controller via URL
Make sure the Launch Jupyter button is hidden on the data science projects table
Make sure the toleration settings section is hidden in the cluster settings

Test Impact

N/A
Request review criteria:

Self checklist (all need to be checked):

[x] The developer has manually tested the changes and verified that the changes work
[x] Commits have been squashed into descriptive, self-contained units of work (e.g. 'WIP' and 'Implements feedback' style messages have been removed)
[x] Testing instructions have been added in the PR body (for PRs involving changes that are not immediately obvious).
[ ] The developer has added tests or explained why testing cannot be added (unit tests & storybook for related changes)

If you have UI changes:

[ ] Included any necessary screenshots or gifs if it was a UI change.
[ ] Included tags to the UX team if it was a UI/UX change.

After the PR is posted & before it merges:

[ ] The developer has tested their solution on a cluster by using the image produced by the PR to main

/hold Might want to wait until https://github.com/opendatahub-io/odh-manifests/issues/805 is solved.

/hold
@DaoDaoNoCode are we gonna wait until we find the right text for the quickstart right?

@lucferbux I think I still need to make some changes to the PR, looks like they don't want to remove the enable flag in notebookController config because I saw some customers are still using it to hide the Jupyter tile card. I will update this PR later.

@lucferbux I have updated the PR and it's ready for review!

Ok, removing checkJupyterEnabled migth be tricker than I thought cause it might need a migration upgrade path. In that case, we might wanna either create a new ticket or get that with #1108

nice work, thank you all.
@DaoDaoNoCode especially so the Jupyterhub-Tile disappears (even the Applications menu if no applications are in that section?) when notebookController.enabled is set to false.
@lucferbux Out of curiosity: Does the applications menu disappear in the GUI when there are no Applications / OdhApplications present at all?


openmateo_requests import fails

Python 3.9.18 (main, Aug 24 2023, 18:16:58)
[Clang 15.0.0 (clang-15<IP_ADDRESS>.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

import openmeteo_requests
Traceback (most recent call last):
File "", line 1, in
File "/Users/pfriedland/Documents/projects/self/weather/openmeteo_requests.py", line 10, in
openmeteo = openmeteo_requests.Client(session = retry_session)
AttributeError: partially initialized module 'openmeteo_requests' has no attribute 'Client' (most likely due to a circular import)

I've tried different python versions 3.9, 3.11 on macos

What was the issue? Some kind of venv package install mixup?

lol, I named the file openmateo_requests.py.


429 error issue

Hi, I see a strange behavior with 429 error.
When I login to the app and use user-based token I get the following behavior:

After using for some time with and getting 429 the timeout for it is about 30 minutes! I would love to believe it's not an expected behavior.
Even though I login on different devices, after I get 429 on one device -- I get it everywhere, until I logout. Then everything loads again. So as far as I can tell, all of the user tokens are blocked for the app. I guess it's not what you meant...
Thanks

That can be correct, there are 3 limits you can get client, user or ip. The limit itself is a velocity filter so once triggered you need to leave it enough time to decay back out of the block.

I understand, but it seams a bit strange for me, that user who logged in reaches limit far easier and faster then the one who doesn't. And would you please investigate why does it take so long for user to wait as I actually tested without running an app -- that was 30 minutes. This creates really bad experience, I believe...

The user limit is pretty rarely triggered, I see ~20 per hour which seems reasonable from here.
I can adjust your clients settings, please email me (muteor deviantart.com) with your client_id and some info about the app and I will look into getting your client moved into a different filter bracket.


ci: fix main health workflow triggers

:tada: This PR is included in version 1.0.2 :tada:
The release is available on:

npm package (@next-major dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Can you make Dockerfile rootless?

I'd like to setup a node using Docker container, however I would like to setup as non-root.
Currently Dockerfile is using root, and when I've run it by a regular user, however the container is still creating the files in ~/.fxcore as root (when that directory is mounted), because inside container it's running as root.

when running fxcored using the docker container, you can use the docker run -d --user  -v $HOME/.fxcore:/fxcore functionx/fx-core:mainnet start --home /fxcore Set the identity for the docker container to run and modify the default home directory

on this note, in fact, is for running a separate tendermint program (consensus layer), fxcored is a specific application that can only be modified by flag-home at the moment

Yes, we currently run the docker container using root by default.
If you want to run the container as non-root, There are two solutions:

Use options --user when running the docker container
you can use the following Dockerfile contents (insert before ENTRYPOINT.)
`

Create a group and user
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
Tell docker that all future commands should run as the appuser user
USER appuser
WORKDIR appuser
RUN:make docker`

Works for me, thanks.


Add REPL and Compiler modes

Maintain a way to run the program as both a REPL and compiler.

Added in commit bfbe433fa1cf5240d8e0cbb31e6c40e09b4c35de


Do customer balance get persisted?

Risk module stores account balance in memory but it is not clear as to how the data gets persisted.

It is persisted into snapshot - if you request it with corresponding command.
Then you can do a journal replay to reach recent known point - exchange state will be consistent, including the balance.


Omnger: constantly telling someone of the same task over because it doesn't get done.

Omnger: constantly telling someone of the same task over because it doesn't get done. created by<EMAIL_ADDRESS>on 2017-01-25 14:03:44

<EMAIL_ADDRESS>replied, Ulang, ak mesikang el omnger er kau era omelchelbem!Ulang, i am tired of telling you to do your shower!

<EMAIL_ADDRESS>replied, > omelechelbemwe don't have it too

<EMAIL_ADDRESS>replied, Melecholb related to omelchelbem

I concur.
souang

On Oct 16, 2022, at 19:45, John Bent @.***> wrote:

@.*** replied,
Melecholb related to omelchelbem
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you are subscribed to this thread.


Possible issues in download data tools

Here are listes some small questions and tasks which arised some time ago. A lot of changes have been aplies since then. It should be checked if the problems are still relevant and than they should be solved or a corresponding issue should be opened.

[ ] Do we have the case, that we have to distinguish between empty enties in data and zero for this case. Because pandas treats empty like zeros. However, for us it could be important if there are no ICU_ventilated or if there are no entries about it.
[x] Date treatment for RKI data shifts time by 1-2 hours. This might also alter the date.
[x] Why did we need dt.tz_localize('Europe/Berlin') in the beginning for download of rki data and than had to remove it?

New data from github only contains dates without time of the day, so point 2 and 3 are outdated.


Fix bug with "duration" attribute

close #5

Codecov Report

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

@@            Coverage Diff             @@
##           master       #6      +/-   ##
==========================================
+ Coverage   88.88%   89.02%   +0.13%
==========================================
  Files           4        4
  Lines          81       82       +1
==========================================
+ Hits           72       73       +1
  Misses          9        9

Impacted Files
Coverage Δ

py2ch/file.py
100% <100%> (ø)
: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 c638e91...15d0500. Read the comment docs.


Playback on different IP addresses (question)

Hi! Previously, there would be some audio URLs (googlevideo.com urls) that would work on multiple IP addresses but it seems there are no more videos like this anymore. All returned videos only work on the IP it's generated on. For me, this ends up causing much more server usage as now all videos need to be streamed.
Have you also noticed this? And do you know of any potential solutions? Thanks for your help.
Edit: Only noticed the change about 5-8 days ago.

Sorry! Everything is working fine. Just realized I had the audio.onloadeddata() function commented out when I testing streaming. And that's why the request went through the server everytime.


SW-2430 / SW-2431 Visual Updates for Sensor Kit Setup flows

also fixed the title bar with dropdown

looks good! just a few comments: to be consistent, all cards should have a padding of 24px and corner radius of 24px. right now the padding is applied unevenly on the content and the header, and then there's another layer of padding for the overall card 🤔

also, the buttons should be vertically aligned with the input field. this can be done by adding 4px bottom padding/margin to the buttons

looks good! just a few comments: to be consistent, all cards should have a padding of 24px and corner radius of 24px. right now the padding is applied unevenly on the content and the header, and then there's another layer of padding for the overall card 🤔
also, the buttons should be vertically aligned with the input field. this can be done by adding 4px bottom padding/margin to the buttons

Thanks @hannah-cai ok i will make these changes in a new review.

looks good! just a few comments: to be consistent, all cards should have a padding of 24px and corner radius of 24px. right now the padding is applied unevenly on the content and the header, and then there's another layer of padding for the overall card 🤔
also, the buttons should be vertically aligned with the input field. this can be done by adding 4px bottom padding/margin to the buttons

Thanks @hannah-cai ok i will make these changes in a new review.

PR out https://github.com/terraware/terraware-web/pull/871


refactor: migrate from gg drive to s3

This PR:

Resolves issue #2

@stakach, please review PR #3 before reviewing this one

Do the specs work on your local machine?

Like in the comments I mentioned in https://github.com/PlaceOS/wallet_api/pull/3 I'd have to webmock in a hacky way first since some of the HTTP calls are made from the shard. I haven't done E2E testing on my local machine, I simply followed the code from the shard you posted.


Consider adding boxing overloads for UIElement::AddHandler

Users wanting to call UIElement::AddHandler have to manually box up the delegate. Apparently, there must have been some magic happening for CX and C# to support this, because I can't find any documentation of this requirement anywhere.
Essentially, AddHandler's second parameter is expecting to get IReference<T> where T corresponds to a RoutedEvent. users are stuck trying to discover and use the boxing code manually with this:
using namespace winrt;
using namespace winrt::Windows::Foundation;
using namespace winrt::Windows::UI::Xaml;
using namespace winrt::Windows::UI::Xaml::Input;

void OnTapped(IInspectable const& sender, TappedRoutedEventArgs const& args);
void f(UIElement const& element)
{
  element.AddHandler(UIElement::TappedEvent(), box_value(TappedEventHandler{ &OnTapped }, true);
}

There's roughly 20 of these events. It shouldn't be too hard to add some overloads of this method that provide some helpful guardrails for the user. Perhaps for each of these events, provide either:
void UIElement::AddHandler(TappedEventHandler const& handler, bool routedEventsToo)
{
  AddHandler(UIElement::TappedEvent(), box_value(handler), routedEventsToo);
}

or
void UIElement::AddHandler(IReference<TappedEventHandler> const& handler, bool routedEventsToo)
{
  AddHandler(UIElement::TappedEvent(), handler, routedEventsToo);
}

Feel free to reopen if there's interest in exploring this further.


enable load model from modelscope

Type of Change
feature or bug fix or documentation or others
API changed or not
Description
enable load model from modelscope
detail description


'torque' control mode actually controls angular velocity

Hi,
I created a simple motorized pendulum environment to confirm doubt I had regarding BRAX's nomenclature.
It has a fixed body, and a link + actuator linking it to a swinging body with a certain mass.
When the actuator is controlled in 'position', and you give say 90 as the action, then the pendulum progressively goes to a 90 degrees angle (it goes faster when you increase the strength of the actuator obviously).
However, when the actuator is controlled in 'torque', and you give 1 as the action for the first 10 steps, and start giving 0 afterwards, you'd expect it to start swinging (because no torque is applied, making it a regular pendulum). This is not what we observe, instead, the pendulum stays at the same orientation, making its velocity 0.
I expected the 'torque' method to cause the actions given to be passed as angular efforts, instead, they appear to be passed as the target angular velocities. This is quite confusing... Can anyone confirm that 'torque' actuators are not actually controlled in torque, and if so, is there any way for me to control the torque applied via an actuator ?

Hi @Theo-Cheynel thanks for opening an issue! motor actuators should simply add a torque, resulting in accelerating angular velocity (they aren't dependent on position, but a few things that may affect position is the ctrl_range and joint limits)
If you provide a concrete example I'm happy to take a look to see if there is a bug

Hi ! Thanks for answering !
Yes, in v2, motor actuators seem to add a torque (except when it exceeds the joint limit etc), which is totally what I expected.
The issue is in BRAX v1, where adding a torque actuator does not seem to add a torque, but a velocity control.
If you're still working on v1 I can give you an example, but if you're planning on migrating everything to v2 in the coming days, not sure there's really a need for it, you tell me :smile:

Ha ok! Indeed we are not planning to support v1 going forward (we just pushed v2 to the main folder and will tag a release soon), but the observation that torque actuators in v1 are velocity controllers seems like a bug


Add testcases for sync with js-sdk

What this PR does / why we need it:

This PR add testcases for sync with js-sdk testcases

Which issue(s) this PR fixes:

None
Special notes for your reviewer:
Does this PR introduce a user-facing change?:

Additional documentation:

Checklist:

[x] Added relevant tests or not required
[x] Didn't break anything

@MoonGyu1 Could you resolve the conflict for ready for merging?


Support HDP <IP_ADDRESS>

This is the latest patch release. Requires caskdata/hadoop_cookbook#311 to be merged.

LGTM 👍


Make Cryogenic use the latest Nuget package (which breaks the API because properties are used now)

done.


Move Minio-Js functional tests to minio-js SDK

All the functional tests using minio-js SDK should be removed from Mint and be maintained in minio-js SDK repo.

Moving as discussed


Fix the cleanoutput parameter failing generation

Moves the code to clean the output folder before the log file is created.  Consequence is there is no logging information about the cleanup.
Addresses #2645

holding this one after chatting with Vincent.  Since the log file always overwrites it's ok to do a different fix where the log file is just skipped.


RuntimeError: Models must be owned by only a single document, CDSView(id='1142', ...) is already in a doc

Hi!
I have a problem that is likely due to interaction with Bokeh, but it occurs only when using pandas_bokeh plots and not Bokeh plots directly.
When trying to make a dashboard with pandas_bokeh with layout or plot_grid, I get the following error:
Traceback (most recent call last):
  File "/mnt/c/Users/thiabaud/Documents/IOGH_Influenza/DataAnalysis/Scripts/Python/app/Influenza/src/main/python/main.py", line 370, in on_click_check
    bokehPlots.bokehPlots(self.data_demo, self.data_case)
  File "/mnt/c/Users/thiabaud/Documents/IOGH_Influenza/DataAnalysis/Scripts/Python/app/Influenza/src/main/python/bokehPlots.py", line 162, in bokehPlots
    pandas_bokeh.plot_grid([[p_noso]])
  File "/mnt/c/Users/thiabaud/Documents/IOGH_Influenza/DataAnalysis/Scripts/Python/pyqt5_venv/lib/python3.6/site-packages/pandas_bokeh/base.py", line 53, in plot_grid
    show(layout)
  File "/mnt/c/Users/thiabaud/Documents/IOGH_Influenza/DataAnalysis/Scripts/Python/pyqt5_venv/lib/python3.6/site-packages/pandas_bokeh/base.py", line 134, in show
    bokeh.plotting.show(obj, browser, new, notebook_handle, notebook_url)
  File "/mnt/c/Users/thiabaud/Documents/IOGH_Influenza/DataAnalysis/Scripts/Python/pyqt5_venv/lib/python3.6/site-packages/bokeh/io/showing.py", line 145, in show
    return _show_with_state(obj, state, browser, new, notebook_handle=notebook_handle)
  File "/mnt/c/Users/thiabaud/Documents/IOGH_Influenza/DataAnalysis/Scripts/Python/pyqt5_venv/lib/python3.6/site-packages/bokeh/io/showing.py", line 183, in _show_with_state
    _show_file_with_state(obj, state, new, controller)
  File "/mnt/c/Users/thiabaud/Documents/IOGH_Influenza/DataAnalysis/Scripts/Python/pyqt5_venv/lib/python3.6/site-packages/bokeh/io/showing.py", line 166, in _show_file_with_state
    filename = save(obj, state=state)
  File "/mnt/c/Users/thiabaud/Documents/IOGH_Influenza/DataAnalysis/Scripts/Python/pyqt5_venv/lib/python3.6/site-packages/bokeh/io/saving.py", line 86, in save
    _save_helper(obj, filename, resources, title, template)
  File "/mnt/c/Users/thiabaud/Documents/IOGH_Influenza/DataAnalysis/Scripts/Python/pyqt5_venv/lib/python3.6/site-packages/bokeh/io/saving.py", line 148, in _save_helper
    html = file_html(obj, resources, title=title, template=template)
  File "/mnt/c/Users/thiabaud/Documents/IOGH_Influenza/DataAnalysis/Scripts/Python/pyqt5_venv/lib/python3.6/site-packages/bokeh/embed/standalone.py", line 297, in file_html
    with OutputDocumentFor(models, apply_theme=theme, always_new=_always_new) as doc:
  File "/usr/lib/python3.6/contextlib.py", line 81, in __enter__
    return next(self.gen)
  File "/mnt/c/Users/thiabaud/Documents/IOGH_Influenza/DataAnalysis/Scripts/Python/pyqt5_venv/lib/python3.6/site-packages/bokeh/embed/util.py", line 138, in OutputDocumentFor
    doc.add_root(model)
  File "/mnt/c/Users/thiabaud/Documents/IOGH_Influenza/DataAnalysis/Scripts/Python/pyqt5_venv/lib/python3.6/site-packages/bokeh/document/document.py", line 304, in add_root
    self._pop_all_models_freeze()
  File "/mnt/c/Users/thiabaud/Documents/IOGH_Influenza/DataAnalysis/Scripts/Python/pyqt5_venv/lib/python3.6/site-packages/bokeh/document/document.py", line 1019, in _pop_all_models_freeze
    self._recompute_all_models()
  File "/mnt/c/Users/thiabaud/Documents/IOGH_Influenza/DataAnalysis/Scripts/Python/pyqt5_venv/lib/python3.6/site-packages/bokeh/document/document.py", line 1042, in _recompute_all_models
    a._attach_document(self)
  File "/mnt/c/Users/thiabaud/Documents/IOGH_Influenza/DataAnalysis/Scripts/Python/pyqt5_venv/lib/python3.6/site-packages/bokeh/model.py", line 714, in _attach_document
    raise RuntimeError("Models must be owned by only a single document, %r is already in a doc" % (self))
RuntimeError: Models must be owned by only a single document, CDSView(id='1142', ...) is already in a doc

When looking for a solution, Bokeh's documentation and overall Stackoverflow answers say that it's likely to be either an object being used several time (which it isn't), or the source dataframe must not be used several time - but I tried using different dataframes for each plot without any luck. Creating a layout or using plot_grid result in the same error.
I'm running bokeh 1.3.4 and pandas_bokeh 0.3
As I previously mentioned, the error occurs only when I use plots created with pandas_bokeh, the bokeh alone plot is properly dashboarding on its own with plot_grid.

Hi @PezAmaury ,
Could you give a minimal example where this error occurs. Maybe this is related to issue #31 .
Best
Patrik

Hi @PatrikHlobil
On the following script, if I use plot_grid with figure p, I have no problems (it's pure bokeh). If I use any of the others (p_types, p_origin, etc...) I get the error:
#!/usr/bin/env python
# coding: utf-8

# ### Imports
import os
import pandas as pd
import numpy as np
from datetime import datetime
import math
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
pd.set_option('display.max_colwidth', -1)
# ### Displays all outputs
#from IPython.core.interactiveshell import InteractiveShell
#InteractiveShell.ast_node_interactivity = "all"
# ### Bokeh imports
from bokeh.io import show, output_notebook, output_file
from bokeh.plotting import figure
from bokeh.models import ColumnDataSource
from bokeh.palettes import Spectral6
from bokeh.models import FactorRange, Legend
from bokeh.palettes import OrRd6, GnBu6, RdPu6
from bokeh.palettes import OrRd3, GnBu3, RdPu3
#output_notebook()
# ### Pandas_bokeh
import pandas_bokeh
#pandas_bokeh.output_notebook()
# ### Custom imports
import generateWeeklyData

def bokehPlots(data_demo, data_case):

    colors = ["#e84d60", "#718dbf", "#c9d9d3"]
    dirName = './html/'
    if not os.path.exists(dirName):
        os.mkdir(dirName)
    start_date = datetime(2018,11,1)
    end_date = datetime(2019,4,30)
    # ## Loads data: both the demographics & the episode data
    #data_demo = pd.read_csv('data_demo.csv')
    #data_case = pd.read_csv('data_case.csv')

    # ### Generate weekly data
    pyramid_data = generateWeeklyData.count_year_gender(data_demo).reset_index()
    pyramid_data.columns = ['centre_id','age_group','Men','Women','other']
    pyramid_data['centre_id'] = 'Centre_#' + pyramid_data['centre_id'].astype(str)

    data_service =  generateWeeklyData.count_casesType(data_case, start_date, end_date)
    data_service = data_service.reset_index().drop(columns = ['other'])
    data_service.columns = ['week','centre_id','Nosocomial','Comm. acquired','N/A','Type A','Type B','Type N/A','Deaths','No deaths','Medicine',
                            'Geriatrics','ICU','Surgery','Paediatrics','Other']
    data_service['centre_id'] = 'Centre_#' + data_service['centre_id'].astype(str)
    data_service['All cases'] = data_service['Nosocomial']+data_service['Comm. acquired']+data_service['N/A']

    data_noso = generateWeeklyData.count_noso(data_case, start_date, end_date).reset_index()
    data_noso.columns = ['week','centre_id','Type A','Type B','Type N/A','Deaths','No deaths','Medicine',
                        'Geriatrics','ICU','Surgery','Paediatrics','Other']
    data_noso['centre_id'] = 'Centre_#' + data_noso['centre_id'].astype(str)

    all_centres = data_service['centre_id'].unique()

    # ### Creates data for the plots
    df = data_service[['week','centre_id','All cases']]
    table = pd.pivot_table(df, values='All cases', index='week',
                            columns=['centre_id'], aggfunc=np.sum)

    all_pyramid = pyramid_data.groupby(['age_group','centre_id']).sum().drop(columns = ['other']).unstack(level=0)
    all_pyramid.columns = all_pyramid.columns.swaplevel(0, 1)
    all_pyramid.sort_index(axis=1, level=0, inplace=True)
    all_pyramid = all_pyramid.reset_index()
    all_pyramid = all_pyramid.set_index('centre_id')

    # ALL CENTRES

    if len(all_centres) > 1:

        #pandas_bokeh.output_file(dirName + "ALL_cases.html")
        p_cases = table.plot_bokeh.bar(figsize=(800, 600),
            xlabel="Week",
            ylabel="Number of new cases",
            title="Total number of cases",
            legend="top_right",
            stacked=True,
            alpha=0.6, panning = False, zooming = False,
            vertical_xlabel=True, colormap = GnBu6)

        #pandas_bokeh.output_file(dirName + "All_origin.html")
        p_origin = data_service.groupby('week').sum()[['Nosocomial','Comm. acquired','N/A']].plot_bokeh.bar(figsize=(800, 600),
             xlabel="Week",
             ylabel="Number of new cases",
             title="Overall distribution of infection origin",
             legend="top_right",
             stacked=False,
             alpha=0.6, panning = False, zooming = False,
             vertical_xlabel=True, colormap = colors)

        #pandas_bokeh.output_file(dirName + "ALL_types.html")
        p_types = data_service.groupby('week').sum()[['Type A','Type B','Type N/A']].plot_bokeh.bar(figsize=(800, 600),
             xlabel="Week",
             ylabel="Number of new cases",
             title="Overall distribution of infection type",
             legend="top_right",
             stacked=True,
             alpha=0.6, panning = False, zooming = False,
             vertical_xlabel=True, colormap = colors)

        #pandas_bokeh.output_file(dirName + "ALL_service.html")
        p_service = data_service.groupby('week').sum()[['Medicine','Geriatrics','ICU','Surgery','Paediatrics','Other']].plot_bokeh.bar(figsize=(800, 600),
             xlabel="Week",
             ylabel="Number of new cases",
             title="Overall distribution of cases in units",
             legend="top_right",
             stacked=True,
             alpha=0.6, panning = False, zooming = False,
             vertical_xlabel=True)

        #pandas_bokeh.output_file(dirName + "ALL_pyramid.html")
        centres = all_pyramid.T.columns.tolist()
        index = all_pyramid.T.index.tolist()
        pyramid = {}
        xmax = 0
        for gender in ['Men','Women']:
            pyramid[gender]={'index' : all_pyramid.T[all_pyramid.T.index.get_level_values(level=1) == gender].index.tolist()}
            for centre in centres:
                pyramid[gender][centre] = all_pyramid.T[all_pyramid.T.index.get_level_values(level=1) == gender][centre].tolist()
                pyramid[gender]['All'] = all_pyramid.T[all_pyramid.T.index.get_level_values(level=1) == gender].sum(axis=1)
                try:
                    xmax = max(xmax, max(pyramid['Men'][centre]),max(pyramid['Women'][centre]))
                except KeyError:
                    xmax = max(xmax, max(pyramid['Men'][centre]))
        p = figure(y_range = FactorRange(*index) , plot_height=600, plot_width = 800, x_range=(0, 3*xmax), title="Total age/gender distribution",tools="pan,wheel_zoom,box_zoom,reset,hover")
        r1 = p.hbar_stack(centres, y='index', height=0.9, color=GnBu6, source=ColumnDataSource(pyramid['Men']),
                     legend=[" %s" % x for x in centres])
        r2 = p.hbar_stack(centres, y='index', height=0.9, color=OrRd6, source=ColumnDataSource(pyramid['Women']),
                     legend=[" %s" % x for x in centres])
        p.y_range.range_padding = 0.1
        p.ygrid.grid_line_color = None
        p.legend.location = "bottom_right"
        p.xaxis.axis_label = 'Number of cases'
        p.yaxis.axis_label = 'Age group, Gender'
        p.hover.tooltips = [("Age group, gender", "@index"),
               ("ID","$name"),
               ("Number of cases","@$name"), #name is used for the colors
               ("All centres", "@All")] #"@index $name: @$name"
        #show(p)

        pandas_bokeh.output_file(dirName + "All_dashboard.html")
        pandas_bokeh.plot_grid([[p_types]])

        #pandas_bokeh.show(layout)
    return

I cannot give you snapshots of data_case and data_demo dataframes as they contain sensitive patient data, but here is a snapshot of the aggregated data that's generated by the code:
data_service
	week	centre_id	Nosocomial	Comm. acquired	N/A	Type A	Type B	Type N/A	Deaths	No deaths	Medicine	Geriatrics	ICU	Surgery	Paediatrics	Other	All cases
66	2019-02	Centre #37	0	2	0	2	0	0	0	4	2	0	0	0	0	0	2
67	2019-02	Centre #38	1	1	0	2	0	0	1	1	1	0	1	0	0	0	2
68	2019-02	Centre #39	2	4	0	6	0	0	0	9	3	2	0	0	0	1	6
69	2019-02	Centre #40	8	19	0	27	0	0	0	14	12	6	2	0	2	5	27
70	2019-02	Centre #43	0	4	0	4	0	0	0	1	3	0	0	0	0	1	4
71	2019-02	Centre #52	2	5	1	8	0	0	2	8	3	0	0	1	1	3	8

and the pyramid_data:
centre_id	age_group	Men	Women	other
0	Centre #37	0-10	0	0	0
1	Centre #37	10-20	0	1	0
2	Centre #37	20-30	8	12	0
3	Centre #37	30-40	5	7	0
4	Centre #37	40-50	6	7	0
5	Centre #37	50-60	23	12	0
6	Centre #37	60-70	24	29	0
7	Centre #37	70-80	41	46	0
8	Centre #37	80-90	30	26	0
9	Centre #37	90-100	5	4	0

Thanks for your help :)

Hi @PezAmaury ,
sorry for replying so late. I think the reason why your plot fails is related to issue #31 . You are plotting your figures 2 times, first when creating the plot like:
p_types = data_service.groupby('week').sum()[['Type A','Type B','Type N/A']].plot_bokeh.bar(figsize=(800, 600),
             xlabel="Week",
             ylabel="Number of new cases",
             title="Overall distribution of infection type",
             legend="top_right",
             stacked=True,
             alpha=0.6, panning = False, zooming = False,
             vertical_xlabel=True, colormap = colors)

and the second time when calling:
pandas_bokeh.plot_grid([[p_types]])

Please add to all plot_bokeh calls that generate your figures the keyword parameter show_figure=False, like in the example here. The problem only seems to occur when using the output_file option though.
Could this solve your issue?
Best,
Patrik

Hi @PatrikHlobil
Thanks for the response.
I tried with show_figure = False but it initially did not work. With that keyword, I had to do a save() so I would save each figure to a HTML file separately (I have to do it as it's a requirement). If I removed the save() function, it worked without problems.
The problem becomes that if I want to save each figure separately AND together, I need to generate them twice: even while using the plot_grid function for all of them, then each of them, or follow the plot_grid by save() functions to save the plots separately, then the runtime error comes again if I don't create the plots a second time. I do not know if this is a pandas_bokeh specific issue or an overall bokeh issue, but this is the only workaround that ended up allowing me to save both a dashbord and each plts separately.
Thank you for your help in this matter!
Best,
Amaury

Hi @PezAmaury,
thanks for sharing your issue. Hope that it is solved then.
Best,
Patrik


Sound ducking release not smooth

The release portion of the sound ducking envelope does not transition smoothly back to full volume over the specified duration.  Instead the release begins smoothly and then suddenly jumps back to full volume.

This bug is caused by comparisons in the code between signed and unsigned integers causing undesired behavior and calculations.  To resolve, I am going through all signed/unsigned integer variables and ensuring their consistent use and proper casting when comparisons are necessary.  Sample positions/durations are unsigned values while envelope stage positions can be negative therefore are signed.  The code did not properly cast variables of mixed types when performing comparison operations.

Fixed


When reloaded during countdown, front-end timer resets but not back end

may not be possible, due to backend timer using setTimeout? might make this a research thing like socket issue

may be possible somehow, but this is an edge case that is not worth fixing at this time.


Implement Figure 5.3 MINIMAX-DECISION

function MINIMAX-DECISION
function MAX-VALUE
function MIN-VALUE(state)
pseudo-code

@a1shadows I haven't re-read that chapter yet but reading the algorithm and looking at what you have I think it makes sense.  I've been thinking about my use of traits in the past and going to stop trying to do that so much.  So in light of that I might try to see if  you can make it bit more generic/universal in the definition but more concrete in the implementation.
For example rather than having traits Player, State, Action and leaving them unrestricted (which causes some warnings on compile I don't like)
It might be:
trait Game[Player, State, Action] {
  def initialState: State
  def getPlayer(state: State): Player
  def getActions(state: State): List[Action]
  def result(state: State, action: Action): State
  def getUtility(state: State, player: Player): Double
}

You don't have to do that and what you have is perfectly fine though.
I've been meaning to go back and refactor existing stuff also but haven't gotten to it.  I've also been thinking about moving all definitions of traits and type inside the package specific to the algorithm itself because some algorithms use methods which others don't.
The other thing is I tend to shy away from using primitives as they are not very descriptive/constraining of the domain.  I'd maybe rather than using Double for getUtility use:
  final case class UtilityValue[T<: AnyVal](value: T) extends AnyVal
  // or at least
 final case class UtilityValue(value: Double) extends AnyVal

These are intended to be value classes which are eliminated at compile time so have no overhead but improves type safety.
The first could let utility be integers, floats, or doubles
The second is fine but it assumes we want double.  I'd probably go with this for simplicity.
I would prefer to use
final case class UtilityValue[T: Numeric](value: T) extends AnyVal

but then I don't think it gets erased as a value class and to get Numeric to work requires a lot of implicit magic which I'm trying to avoid in this project.

@BusyByte It makes more sense to me too to parametrize the trait. And the UtilityValue class makes sense too. Thanks. I'll follow your advice.

final case class UtilityValue[T: Numeric](value: T) extends AnyVal

Regarding this line, the class UtilityValue has two parameters, an implicit and explicit one, which is giving an error, so will this do ?
final case class UtilityValue[T](val value: Numeric[T]) extends AnyVal

@a1shadows that's not quite what you want.  You don't want the value to be a type class.
This would probably work:
final case class UtilityValue[T <: AnyVal : Numeric](value: T) extends AnyVal

This says that T must extend AnyVal which abides what value classes require to be erased
The first also says that whatever T is it must have an implicit Numeric[T] type class available (Numbers have this but not Strings)
I don't really want to deal with a lot of implicits in this project so I'd recommend:
final case class UtilityValue(value: Double) extends AnyVal

Let me know if this doesn't make sense.
If you want more information maybe read up on Scala value class and type class patterns.

@BusyByte I'll change my code. I can't thank you enough for the guidance.

Hey, @BusyByte . The minimax-decision function takes State as an argument and not Game, so do I have to define state as a trait/class, even though I passed it as a parameter it in the Game definition? Or should I just pass an instance of Game as an argument to minimaxDecision and use the initialstate of the Game to make a decision? Sorry for the inconvenience. I'm a novice at design principles.

@a1shadows it looks like from looking at https://github.com/aimacode/aima-java/blob/AIMA3e/aima-core/src/main/java/aima/core/search/adversarial/MinimaxSearch.java#L42 that some of the functions in the algorithm come from the game.  I think rather than an object oriented solution this could be defined as a function something like:
object MinimaxDecision {
def minMaxDecision[S, A, P](g: Game[S][A][P])(state: S): A = {
  def maxValue(s: S)...
  def minValue(s: S)..
}
}

or even as returning a function from the function:
object MinimaxDecision {
def minMaxDecision[S, A, P](g: Game[S][A][P]): S => A = { s: State =>
  def maxValue(s: S)...
  def minValue(s: S)..
}
}

max and min value functions would be visible only within the scope of the minMaxDecision method itself since they are defined within the main function which is preferable to me because they are never meant to be called by the public api, just the minMaxDecision function
This way when you define the game you can bind it to the first parameter:
val minMaxStateDecisionFunction = MinimaxDecision.minimaxDecision(game)(_)
//and then use it on various states like:
val a1 = minMaxStateDecisionFunction(s1)
val a2 = minMaxStateDecisionFunction(s2)
val a3 = minMaxStateDecisionFunction(s3)

or defined as returning a function
val minMaxStateDecisionFunction = MinimaxDecision.minimaxDecision(game)
//and then use it on various states like:
val a1 = minMaxStateDecisionFunction(s1)
val a2 = minMaxStateDecisionFunction(s2)
val a3 = minMaxStateDecisionFunction(s3)

Let me know if this doesn't make sense.
I'm ok if you want to start with the more object oriented solution like the Java example though.

Thanks a lot, Shawn!


Support updating vector source features

Problem:
Currently a vector source does not support updating a feature.
Currently a vector source does not support replacing all features with another set of features.
Use case:
The position and/or properties of an object (e.g. aircraft, ship) is updated.
The server delivers a new set of objects (e.g. aircrafts, ships) that should replace the current objects.
Workaround:
update a single feature: vectorSource.getFeatureById, if found: feature.setGeometry/setProperties, vectorSource.changed, otherwise vectorSource.addFeature
update all features: vectorSource.getFeatures, then compare current and new features: feature.setGeometry/setProperties, vectorSource.changed or vectorSource.addFeature or removeFeature.
Removing/adding the feature is NOT a work around, because this causes a selection to be lost.
Solution:
new methods in VectorSource:

addOrUpdateFeature(feature)
addOrUpdateFeatures(features)
replaceFeatures(features) like addOrUpdateFeatures, but also removes current features no longer contained in the new features

Note that calling setGeometry() on a feature will notify the source and cause a readraw. No need to call changed().

Removing/adding the feature is NOT a work around, because this causes a selection to be lost.

Depends on how you do selection. There are better and easier ways than using the Select interaction. See e.g. https://openlayers.org/en/latest/examples/vector-tile-selection.html

The example you mention stores the IDs (instead of UIDs or features) and thus works with clear/add.
However there are lot's of use cases that require the source to be updated and also change/update events to be sent, e.g.

a popup/overlay that shows the data of the selected object, updates itself and closes, when the selected objects is unselected or removed
counters of selected objects by type
a context menu that provides various items based on the selection (e.g. if lines are selected, etc.)

Without update functions and change event we would need to check against the features in the sources each time, we make a decision based on the selection.
I see no disadvantage in adding such functions (you don't have to use them and even if you use them, an addOrUpdate will be about the same speed as an add and a replace probably faster than a clear/add).
I can implement the changes myself and add a PR.


An alternative approach to coloring the gutter

Probably a dumb idea ... But I like how it looks ...

It also does not mess with the folding, which the current icons do

I personally don't like the approach as the errors are not much visible :(

I did also try changing the background and bold-ness ...
But subtle seemed best

Could underline and strike-through also I guess

I was considering making gutter optional and introducing an option to show inline bubbles on hover. That would simplify a lot of things.

@JohnMurga how do the current icons mess with folding btw? In the theme I'm using at least it will simply condense the coloring down into a single (worst case) color:

@Arcanemagus I think was getting the "dot" icon, and it overrode the fold icon ...
Although coloring the fold icon would annoy me too :-)

Which is why I have : ```
atom-text-editor::shadow .gutter .foldable .icon-right {
color: rgb(255,255, 255);
}
In my styles file

Ooops

@Arcanemagus @SpainTrain @k2b6s9j Guys, what do you think about this gutter marker style? https://atom.io/packages/atom-wallaby

wallaby markers are pretty nice.  any idea how it looks when a line has a linter and wallaby marker?  Any update to the linter marker would ideally coalesce multiple markers nicely ^_^

I don't think my opinion on this will be particularly helpful... I haven't had any problems with the gutters so far, and for the most part I really only make use of minimap-linter. Wish I could be more helpful.

Beyond changing the current circle (which I have no issues with) to a square, what does that change @steelbrain?

@Arcanemagus at the moment we're styling the line number gutter and adding our styles to it's .icon-right::before, if some other package decides to use it we'll be in a conflict. Atom has a new API where you can add new gutter row completely independent, where we won't have any issues at all with the line-number one and where we can style the way we want it.

@steelbrain that sounds awesome, and I see absolutely no reason not to move to it. That's beyond the scope of this PR, and should be filed as an issue though.
I was simply commenting on the visual style, as that is what this PR was about :wink:.


Calling Permissions.check(Permissions.PERMISSIONS.IOS.LOCATION_WHEN_IN_USE always returns 'unavailable'.

Bug report
Summary
Calling Permissions.check(Permissions.PERMISSIONS.IOS.LOCATION_WHEN_IN_USE) always returns 'unavailable'.
Environment info
iOS - iPhone Xs Max, iOS 13.5.1
react-native info output:
System:
    OS: macOS 10.15.5
    CPU: (8) x64 Intel(R) Core(TM) i7-7820HQ CPU @ 2.90GHz
    Memory: 841.95 MB / 16.00 GB
    Shell: 3.2.57 - /bin/bash
  Binaries:
    Node: 12.18.1 - ~/.nvm/versions/node/v12.18.1/bin/node
    Yarn: 1.22.4 - ~/.nvm/versions/node/v12.18.1/bin/yarn
    npm: 6.14.5 - ~/.nvm/versions/node/v12.18.1/bin/npm
    Watchman: 4.9.0 - /usr/local/bin/watchman
  Managers:
    CocoaPods: 1.9.3 - /Users/williambell/.rvm/gems/ruby-2.6.0/bin/pod
  SDKs:
    iOS SDK:
      Platforms: iOS 13.5, DriverKit 19.0, macOS 10.15, tvOS 13.4, watchOS 6.2
    Android SDK:
      API Levels: 24, 25, 26, 27, 28, 30
      Build Tools: 25.0.0, 25.0.1, 25.0.2, 25.0.3, 26.0.0, 26.0.1, 26.0.2, 26.0.3, 27.0.0, 27.0.1, 27.0.2, 27.0.3, 28.0.0, 28.0.0, 28.0.2, 28.0.3, 29.0.2, 30.0.0
      System Images: android-27 | Google Play Intel x86 Atom, android-28 | Google APIs Intel x86 Atom, android-29 | Google APIs Intel x86 Atom
      Android NDK: 21.3.6528147
  IDEs:
    Android Studio: 4.0 AI-193.69<IP_ADDRESS>14223
    Xcode: 11.5/11E608c - /usr/bin/xcodebuild
  Languages:
    Java: Not Found
    Python: 2.7.16 - /usr/bin/python
  npmPackages:
    @react-native-community/cli: Not Found
    react: ^16.13.1 => 16.13.1
    react-native: ^0.62.2 => 0.62.2
  npmGlobalPackages:
    *react-native*: Not Found

Library version: 2.1.5
Steps to reproduce

Add privacy usage messages to info.plist -

Privacy - Location Always and When In Use Usage Description - We use your location
Privacy - Location When In Use Usage Description - We use your location
Privacy - Location Always Usage Description - We use your location

Simply call permissions check for LOCATION_WHEN_IN_USE

import Permissions from 'react-native-permissions';

const locationPermission = Permissions.check(Permissions.PERMISSIONS.IOS.LOCATION_WHEN_IN_USE);

Describe what you expected to happen:

Expect the check to return 'denied' on first call so we can call Permissions.request, return current permission state on subsequent calls.

Reproducible sample code
import Permissions from 'react-native-permissions';

const locationPermission = Permissions.check(Permissions.PERMISSIONS.IOS.LOCATION_WHEN_IN_USE);

Hi. Check for duplicate issues / submit your Podfile

Ah, actually, that looks like it might be the issue, we're missing the a podspec for the permission :/
  # permissions
  permissions_path = '../node_modules/react-native-permissions/ios'
  pod 'Permission-Camera', :path => "#{permissions_path}/Camera.podspec"
  pod 'Permission-LocationAlways', :path => "#{permissions_path}/LocationAlways.podspec"
  pod 'Permission-Notifications', :path => "#{permissions_path}/Notifications.podspec"
  pod 'Permission-PhotoLibrary', :path => "#{permissions_path}/PhotoLibrary.podspec"

Add it, clean your project, rebuild.


Add generics to Key to define the type of the id

@mkustermann did you have a look at this PR? I'd like to know whether this is something you think is worth looking into, I'm also willing to make additional changes, especially if you find a solution to the parent problem.
If you think that it doesn't add enough benefit, and doubt that this will land in gcloud, then I'd like to know so we don't build our project on top of it.
Thanks!

Sorry for the delay, @enyo
With the change from query(kind) to query<T> we lost the ability to programatically build up the kind and do e.g.  queries with it (e.g. previously it was possible to group a List<Key> into a Set<String> kinds and do one query by kind. We cannot do that anymore because it's not possible to pass a value to the type parameter in query<T>).
Since that ship has sailed already, I think changing the Key should be fine.
(Btw: Our newly formed server team is stepping up do more active maintainance our server packages going forward. Feel free to reach out to @athomas / @mit-mit for routing of issues / PRs)

@athomas can you determine who can move this forward?

Thanks for looking into it again @mit-mit. As mentioned I am open to make the necessary changes, but would need a green light and a decision on which direction to take.

Hi @jonasfj do you have some time to look a this MR? We've been using our fork for a while now, and I'd like some version of this to be merged back into master.
As I have mentioned before, I can make any necessary changes, but I think a decision needs to be made on which kind of generics should be supported.

@enyo, I'm sorry I neglected this...
I really do like the idea of generic keys :)
I'll admit I don't really see a good solution.. The model type embeds the key type, yet type inference can't figure out the key type for us.
Option A: We have the type class Key<K> and the constructor looks like Key(User, 'alice').
Option B: We have the type class Key<M extends Model<K>, K> and the constructor would look like Key<User, String>('alice').
In (A) we could do Key(User, 42) which would hopefully generate a runtime error further down the line (I didn't check what happens if you do this).
In (B) any key for a User would be typed Key<User, String> and it would be a compile time error to do Key<User, int>.
Downside to (B) is that it's a larger breaking change. And requires a bit more typing when creating types.
However, might it not enable type inference in Future<List<T>> DatastoreDB.lookup<T extends Model>(List<Key> keys) which would become Future<List<T>> DatastoreDB.lookup<T extends Model<K>, K>(List<Key<T, K>> keys). Hence, db.lookup(Key<User, String>('alice')) would work... I'm not sure how it'll  affect db.query maybe that will require extract typing, as you must specify all type parameters or infer all...

@enyo, I don't think we have any strong opinions on this. I think (A) might be the least breaking, how does that sound to you?
If you would like (B), I would love to see an outline of how that'll affect other methods such as query and lookup.
If you update this PR for option (A) I'll be happy to merge and publish it.

Thanks @jonasfj ! I'll be doing in the next couple of days. I'll try it with Option B and see where it goes, and if I see that it's too much work or not enough benefit, I'll try Option A.
I understand your concern about most/least breaking change, but I still think that in a database library more types is a good thing :)

but I still think that in a database library more types is a good thing :)

Maybe, I have mixed feeling around it since stupid bugs like using the wrong entity are easy to find and fix.
IMO, we should also be careful to not break existing customers too much. It's always tempting to rip everything up and start from scratch, in which case it might be better to generate the code instead of using reflection. I don't think a perfect design is obvious though...
@enyo, cool, if you do (B) please consider filing as a separate PR, then we can easily compare :)

I'm sorry it has taken me months to attack this, but with the release of the latest dart versions and pressure at work we had so much to do I didn't have the time for it.
I have started work now and will have a pull request with the first draft of what has been discussed here ready tomorrow.


I Can't able to specify local iso file

Hello, i checked #353 issue too however,i couldnt able to give proper docker file on my local,could you please check my config

With default english windows server 2022 iso, 8GB ram ,4 cores cpu and 40g disk size has been granted on compose yaml file by the way.

https://www.microsoft.com/en-us/evalcenter/download-windows-server-2022
https://go.microsoft.com/fwlink/p/?LinkID=2195280&clcid=0x409&culture=en-us&country=US

I am trying to boot with tiny10 image and it pulls from the default Win 11 version. I tired downloading the tiny image and renamed as custom.iso and then also it pulls win11 default image.
version: "3"
services:
windows:
image: dockurr/windows
container_name: tiny_windows
volumes:
- /media/storage/tiny10:/storage
environment:
VERSION: "./storage/custom.iso"
devices:
- /dev/kvm
environment:
RAM_SIZE: "4G"
CPU_CORES: "4"
DISK_SIZE: "128G"
volumes:
- /media/storage/tiny10:/storage
cap_add:
  - NET_ADMIN
ports:
  - 8006:8006
  - 3389:3389/tcp
  - 3389:3389/udp
stop_grace_period: 2m
restart: on-failure

@sginokj  you need to comment # VERSION: "./storage/custom.iso" line
@kroese
I tried to add that variable too that you said but it still freezes on windows starting screen,i can able to move mouse couple of seconds then it freezed permanently,just something came in to my mind im not sure but  that when i docker compose up -d that custom.iso's md5 is changing from original one,im not sure is it normal or not during starting process but just wanted you to ask.

I tried with windows server 2022,2019 and windows 11 all of them stucks at the same place,now i also tried with default parameters that you have just said (4GB RAM, 64GB disk, 2 cores) still issue didnt solve yet,unfortunately i'm unable to try with default ones instead of custom file ,because that server can't able to connect properly when it is trying to get iso

By the way 2 another questions came in to my mind,i could able to run local iso without any issue with my vmware workstation with amd cpu,but im encountering with that problem vmware esxi under intel cpu could that be the issue too ?

I had to use under vmware esxi on red hat 7,Thank you for your informative and supportive explanations :)


Fix colors for disabled checkbox and radio buttons (Clarity4)

Describe the bug
In Clarity 4 colors for disabled checkbox and radio button look like that - https://www.screencast.com/t/0bY5gudIuZ
How to reproduce
https://stackblitz.com/edit/clarity-v4-light-theme-ukokpe
Expected behavior
I have checked core components documentation

Disabled checkboxes look like that - https://www.screencast.com/t/TIY2861DkK  Different than in Clarity 4.
Disabled radio buttons - Actually they are not disabled in the doc, but after manually setting
disabled property they look like that - https://www.screencast.com/t/BObLvFcB

Colors for disabled in checkbox/radio button are different between both - v4 don't look disabled, while in core they do.
Versions
Clarity version:

[ ] v3.x
[x ] v4.x
[ ] v5.x

Framework:

[ x] Angular 10
[ ] React
[ ] Vue
[ ] Other:

Hi @danail-vasilev,
Thank you for letting us know about this issue.
I am going to investigate it cause it seems like a Clarity issue. I'll write back as soon as I find the root cause.

@danail-vasilev Found the root cause, there is a PR raised and hopefully the fix will be available in the next minor release.

#5652 is in. @danail-vasilev expect the fix in next minor release and let me know if the issue still appears

Thanks @bbogdanov  for looking into that !
Actually there are 3 issues reported here:

Disabled radio button - that seemed to be fixed with #5652
Disabled checkbox - it's color is different than the one from core components.
Core components doc:

checkboxes tick icon is misaligned
disabled radio buttons can be clicked. Also for disabled example it's better to have one of the buttons checked, like it's with radio buttons disabled example.
If you think the above issues must be handled separately please open separate issue for them.
Regards,
Danail

@gnomeontherun  I have reported 3 bugs above. Which of them is your comment related to ? The first issue seem to be merged, what about it ?

I believe Jeremy comment is about the second point you made Disabled checkbox - it's icon color is different than the one from core components. The color improvements are made in order to bring a11y support.
We are about to do a PR on the tick icon alignment.
The last time I used the core disabled radio button I haven't seen any issues but I'll check it and will do a PR if I see issues there.

@danail-vasilev The radio buttons cannot be clicked when you have a disabled attribute on the input.
There is an issue with the input groups when the group container is disabled but it doesn't pass the disabled attribute to the inputs inside it. I am about to create a separate task about it.
Thank you once again for bringing our focus to these issues!


list index out of range when trying to convert file saved with LibreOffice

ODK forum thread.
Manually copying the contents of the file and saving them in a new document worked.
Related to https://github.com/XLSForm/pyxform/issues/604 in that these document compatibility issues come from openpyxl.

From the original thread, this comment has an example file PRUEBA.xlsx which seems corrupted somehow. I can open it with Excel (2010) or LibreOffice (<IP_ADDRESS>) but has excessive style / format data. It is 674KB on disk, and approx. 85% of that is from the ./xl/styles.xml document within the xlsx zip file. After opening the file, there are dozens of hyperlink (Hipervínculo) custom formats. Opening the file with openpyxl (with read_only and data_only modes) takes about 45 seconds on my machine. For this kind of file, perhaps pyxform could have a file read timeout kwarg (in xls2xform_convert) to optionally limit resource usage when pyxform is used in a server / service context?

From the original thread, this comment also has an example file PRUEBA.xlsx which also seems corrupted. I can open it with Excel (2010) or LibreOffice (<IP_ADDRESS>) but has excessive style / format data, as described above. The file won't open with openpyxl, instead an error relating to the workbook style data is thrown, as copied below. For this kind of file, perhaps pyxform could catch the error and in the warning, suggest that the user re-save the file with Excel or try copying the XLSForm data into a new workbook file? Alternatively, perhaps this is a known issue for openpyxl or could be fixed upstream there.
Error traceback
Error
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/unittest/case.py", line 60, in testPartExecutor
    yield
  File "/usr/local/lib/python3.8/unittest/case.py", line 676, in run
    self._callTestMethod(testMethod)
  File "/usr/local/lib/python3.8/unittest/case.py", line 633, in _callTestMethod
    method()
  File "/home/lindsay/repos/pyxform/repo/tests/test_xls2json_backends.py", line 170, in test_xlsx_with_many_empty_cells2
    xlsx_data = xlsx_to_dict(xlsx_path)
  File "/home/lindsay/repos/pyxform/repo/pyxform/xls2json_backends.py", line 219, in xlsx_to_dict
    workbook = openpyxl.open(filename=path_or_file, read_only=True, data_only=True)
  File "/home/lindsay/repos/pyxform/venv/lib/python3.8/site-packages/openpyxl/reader/excel.py", line 317, in load_workbook
    reader.read()
  File "/home/lindsay/repos/pyxform/venv/lib/python3.8/site-packages/openpyxl/reader/excel.py", line 281, in read
    apply_stylesheet(self.archive, self.wb)
  File "/home/lindsay/repos/pyxform/venv/lib/python3.8/site-packages/openpyxl/styles/stylesheet.py", line 198, in apply_stylesheet
    stylesheet = Stylesheet.from_tree(node)
  File "/home/lindsay/repos/pyxform/venv/lib/python3.8/site-packages/openpyxl/styles/stylesheet.py", line 103, in from_tree
    return super(Stylesheet, cls).from_tree(node)
  File "/home/lindsay/repos/pyxform/venv/lib/python3.8/site-packages/openpyxl/descriptors/serialisable.py", line 103, in from_tree
    return cls(**attrib)
  File "/home/lindsay/repos/pyxform/venv/lib/python3.8/site-packages/openpyxl/styles/stylesheet.py", line 94, in __init__
    self.named_styles = self._merge_named_styles()
  File "/home/lindsay/repos/pyxform/venv/lib/python3.8/site-packages/openpyxl/styles/stylesheet.py", line 114, in _merge_named_styles
    self._expand_named_style(style)
  File "/home/lindsay/repos/pyxform/venv/lib/python3.8/site-packages/openpyxl/styles/stylesheet.py", line 124, in _expand_named_style
    xf = self.cellStyleXfs[named_style.xfId]
  File "/home/lindsay/repos/pyxform/venv/lib/python3.8/site-packages/openpyxl/styles/cell_style.py", line 185, in __getitem__
    return self.xf[idx]
IndexError: list index out of range


Hide CSV download button until data is fully available

QA passed for me

@io53 Reopening. Customer reported the following:
User reported that he was able to download CSV file when chart was not fully loaded yet.
I have sensor with almost 2 years of consistent data. I believe I had chosen 2 year history view.
The history started drawing to the chart but at some point drawing stopped, although there was supposed to be more data. I saw a consistent chart with no breaks or long spaces between datapoints. I didn't try to download CSV-file and not aware if CSV would have contained less data as well.
Sometimes it happened also that after this kind of issue I chose shorter period from the menu and page reported that there was no data for this period. When I chose it again it showed the data anyways.
I also noticed that when page showed all sensors had year old measurements although there was more recent data available.

@io53 user mentioned he is using Chromebook, no idea about the version but assuming it's a Chrome browser.

I tried turbo-clicking while 2 years history was drawing and was not able to download the file mid-collection. This should be good now.

QA passed


Make blocks sortable by drag & drop on a per page basis (OrderableGridfield)

I think it makes sense to allow sorting blocks on a per page basis (within a BlockArea). Stretching this further, I think it's also worth considering if the BlockArea shouldn't also be on a many_many_extrafields field instead of the Block itself, to allow placement of the block on a per page basis as well (but that may be less of an issue).
I'm currently working on an implementation where I have drag & drop sorting working (quick hack status) by basing the sort on a many_many_extraFields on the Page-Blocks relation and drag & drop via OrderableGridfield. But would like to consult you on if you generally think this is a viable idea, and as well on how you'd think we can combine this with the 'blocks inherited from SiteConfig' and 'blocks from BlockSets'.
One possible direction would be to use a dropdown on Blocks in a Blockset and SiteConfig (again many_many_extrafields), to allow picking a position 'above' or 'below' page-specific blocks instead of weight. This would sacrifice a bit of the control on site-wide blocks in exchange for more fine-grained control on page-specific blocks. And exceptions can always be made by blocking inherited blocks on a page and re-adding them on a specific position. Would this work for your current implementations as well or do you have different use cases?

Nice work! Just been going through it all now and have pushed up some more changes. Most notably:

Removed global blocks (block sets can be used to achieve the same thing)
Added ability to exclude any page types from using blocks
Dropped support for multisites module
Tidied up block sets
Block ExtraCSSClasses is now an optional feature (enabled via yaml config)
Use AddNewMulticlass for adding new blocks in gridfield

Notes:

You added GridFieldDetailFormCustom class (used in model admin) but it's not in the repo. Do we still need this?
Wondering how we would best allow the user to select block area in the same step as creating a block from site tree/block gridfield? At the moment it's a 3 step process to create a block from page edit view, could be two steps?
PageListAsString - This is really nice. Would be great to list block sets that the block is applied to too
I think I'm happy not to add legacy support for all these changes. Do you think it's worth it?

Keen to hear any of your thoughts on where we're up to now. Thanks for your work :)

Ok I've just completed the most part of the stuff we set out to do and released a 1.0 branch. See the readme for full list of new features. And thanks for your help!


Break on query error.

If the query returns  ['status'] == "error" then the wait() function will go into a infinitive loop. This breaks out of the look.

or -> and logic fix


PluginsSystem: consolidate plugin information into PluginInfo class

AvailablePluginInfo, InstalledPluginInfo, and PluginMetadata was declaring identical properties, leading to duplicated code and sources of truth. This PR consolidates these properties into a PluginInfo class that is exposed on AvailablePluginInfo and InstalledPluginInfo.
Instead of also exposing this class on PluginMetadata, this PR also adds a new file to plugin packages that contains a serialization of a plugin's PluginInfo.

Updated property names based on PR comments.
Renamed PluginInfo to PluginMetadata, and PluginContentsInfo to PluginContentsMetadata.
Moved Metadata folder out of Packaging.


"pip install -e" like argument for pipenv install

I don't see how to setup the current project directly with pipenv install, without doing the old-school python setup.py develop, ie, the equivalent of pip install -e .. It looks like pip does some extra work more, isn't it needed for pipenv as well?
Also, I don't know if I should do pip install -e . or python setup.py develop like it is in your .travis.yml ?

Hey @Stibbons, this was an oversight in the recent introduction of pipenv install -e * support. I've pushed a fix that should allow you to do pipenv install -e . to accomplish what you want. If you upgrade to to 4.1.3 you'll be able to use this feature properly.

Great ! I don't see the -e argument for pipenv install in 4.1.3:
$ pipenv --version
pipenv, version 4.1.3
$ pipenv install --help
Usage: pipenv install [OPTIONS] [PACKAGE_NAME] [MORE_PACKAGES]...

  Installs provided packages and adds them to Pipfile, or (if none is
  given), installs all packages.

Options:
  -d, --dev         Install package(s) in [dev-packages].
  --three / --two   Use Python 3/2 when creating virtualenv.
  --python TEXT     Specify which version of Python virtualenv should use.
  --system          System pip management.
  --lock            Lock afterwards.
  --hashes          Generate hashes, if locking.
  --ignore-hashes   Ignore hashes when installing.
  --ignore-pipfile  Ignore Pipfile when installing, using the Pipfile.lock.
  --help            Show this message and exit.
$ pipenv install -e .
Installing -e ....

that's because -e isn't a flag to install, but an argument.

Yes, I mean, can you describe this behavior in the front page, in the documentation? It's not obvious.


Shift-click on menu item to open scripts in Windows

Shift-clicking on a menu command that is pointing to a script should always open the respective script file in the script editor.
On Windows, shift-clicking a menu entry only works when you start holding the Shift key before clicking on the top-level menu and keep it pressed until clicking on the command. It won't work if you just start holding it immediately before clicking the command, when the menu or submenu is already displayed.
See this old forum thread.

@ctrueden do you happen to remember where the shift-click on menu items is implemented? Is it even an ImageJ1 feature? I was suspecting it somewhere in imagej-legacy but couldn't find it.

@imagejan I am not sure, but might it be this?

As stated in an earlier post of the topic linked above, the relevant code is probably:
https://github.com/imagej/imagej-legacy/blob/e6ce0152736cdd3fec7c9c6c3b8aa4121863858b/src/main/java/net/imagej/legacy/LegacyService.java#L289-L295
So the question is why ij1Helper.shiftKeyDown() only resolves to true if Shift was pressed before clicking the top-level menu.

Alright, this might be an imagej1 issue after all.
After switching on debug mode (Dev menu > Debug Mode), pressing Shift generates a sound and logs setKeyDown: 16 only when there's no menu open.
Once a menu is opened, pressing Shift doesn't generate any debug output.
This is reproducible with plain ImageJ 1.x.
@rasband do you happen to know a solution?

This looks like an OS issue. Key presses are ignored when a menu is open, I do not know of a work around.


CWAVLG settings

CWAVLG is currently set CWAVLG 200. 700. . This is probably far to large and we can start simulating at 250 or even 280 nm.

Mirror reflectivites are defined starting at 260 nm with ~60%. The [atmosphere] studies of the past shows that there is very little transmission below 300 nm (see here).
Change to CWAVLG 250. 700

Typical wavelength distribution:


Update podspec

Fix incorrect Kingfisher version limit in Podspec

Thanks to your pull request, I noticed that Kingfisher 3.9 brought some changes on KingfisherOptionsInfo so I updated the podspec myself😃


Trips list

trips-list page implemented with the use of ngrx/store

LGTM 👍  after the changes for retrieving a trip is changed


Download file stuck

Storage Explorer Version:  1.13.1
Build Number:  20200515.1
Platform/OS:  win10
Architecture:
Regression From:
Bug Description

After I click the download button, the download progress does not change, it always show as below picture

Steps to Reproduce

Expected Experience

Actual Experience

Additional Context

@lx1054331851 is this consistently reproducing for you? What Azure environment (public Azure, Azure China, Azure Germany, etc.) are you working with? Does this only happen with this container?

Closing due to lack of response. If you are still having issues, please open up a new issue, thanks.


Not needed gentle() dialog at second and next try, after user permanently denies for permission request.

Hi,
I actually don't know my request is a bug but it is not the final version of Your ExcuseMe tool.
There is this gentle() function to show the explanation for the permission request and if the user denies it permanently this dialog probably shouldn't be displayed again because even if it will be shown it can't move the user to the system permission request dialog. Or maybe I'm using it wrong then please paste some example with the proper way of how to do this
It concerns regular usage of the gentle() method so I think there is no need to paste the example code.
Best regards and thanks in advance ;)

Hi @marek-embiq!
If the user denies the permission, the gently() won't be call (as it is gently), for this situation, you can use the .please() function, which can show a custom message when the user denies the first time or show a message before redirecting the user to the settings screen (so the user can allow it after multiple denies)
So your implementation will be something like:
ExcuseMe.couldYouGive(this)
    .gently(
        title = "Permission Request",
        explanation = "To easily connect with family and friends, allow the app access to your contacts"
    ).please(
        explainAgainTitle = "Permission is necessary",
        explainAgainExplanation = "The app need this permission to send the automatic SMS",
        showSettingsTitle = "Read contacts permission denied, you need to open the settings",
        showSettingsExplanation = "We will open the settings, so you can change the permission from there"
).permissionFor(permission.READ_CONTACTS)

Check it out here: please()
I hope it helped you!


cmd/compile: escape analysis of interface calls to non-exported method names

Consider this Go source:
package p

import "fmt"

type A int
func (A) f(x *int) { fmt.Println("A", *x) }

type B int
func (B) f(x *int) { fmt.Println("B", *x) }
func (B) g() {}

type Fer interface { f(x *int); g() }

func H(f Fer) {
    i := 42
    f.f(&i)
}

At the f.f(&i) call site in H, we can't be sure exactly what method will be called.  However, since it's an unexported method name, it must be implemented by a method in the same package.  Consequently, if we know that all candidate methods in the package are non-escaping (such as A.f and B.f are), we can still be sure that f.f(&i) is a non-escaping call.
Note that we still have to consider A.f even though A itself doesn't implement Fer, because a downstream package could do something like:
package q

import "p"

type X struct { p.B }
type Y struct { p.A; X }

func Z() {
    p.H(Y{})
}

There are probably refinements that could avoid this though.
I happened to notice this because of package net's "exchange" function, which calls the unexported TCPConn.dnsRoundTrip or UDPConn.dnsRoundTrip methods.  I haven't investigated how common this situation is though.
/cc @dr2chase @alandonovan

The motivating example of {TCP,UDP}Conn.dnsRoundTrip is no longer relevant (it seems to have been refactored away), but I think this is still desirable and likely easier to do now.
I think the main steps here are:

During typecheck, keep track of each non-exported method in a map keyed by (name, signature).
During visitBottomUp, recognize that OCALLINTER calls to a non-exported method have a (conservative) dependency on all of the methods associated with that same (name, signature).
During escape analysis, treat an OCALLINTER as a call to each of those associated methods.


case-insensitive search

IMPORTANT: All PRs must be linked to an issue (except for extremely trivial and straighforward changes).
Fixes #400
Description
added case insensitivity
Alternative(s) considered
N/A
Type
Choose one:  Feature
Screenshots (if applicable)
Checklist

[x] I have read and acknowledge the Code of conduct
[x] I have read How to Contribute
[x] I have read the Developer's guide
[x] I have signed the Google Individual CLA, or I am covered by my company's Corporate CLA
[ ] I have discussed my proposed solution with code owners in the linked issue(s) and we have agreed upon the general approach
[x] I have run ./gradlew spotlessApply and ./gradlew spotlessCheck to check my code follows the style guide of this project
[x] I have run ./gradlew check and ./gradlew connectedCheck to test my changes locally
[ ] I have built and run the reference app(s) to verify my change fixes the issue and/or does not break the reference app(s)

Thanks for the contribution 👍  please see comment in review.

@jingtang10 made the requested changes kindly review it again.


Addded one more scenario by using business process to navigate between mater and detail.

Addded one more scenario by using business process to navigate between mater and detail.
Added more documentation to dialog logic and to frontend UI.
Fixed some bugs.
Streamlined naming of CMS.
Put hardcoded content to CMS.
Cleaned up unused code. (incomplete, more cleanup needed)
Removed various features to focus the demo more on master detail.  (incomplete, more cleanup needed).

Thank Timo @ivy-tru do much for your contribution!
I created a Jira ticket and assign it to the Octopus team for reviewing this pull request.
Ticket: https://1ivy.atlassian.net/browse/MARP-4
FYI @ivy-sgi
Thanks!

Hi @ivy-tru
We are so sorry for our team's delay in reviewing this PR.
I have just checked all of the code implementations and found no issue except the test result is not stable (both in my local env as well as on GitHub action). Can you check these tests again?
Thank you so much.


cant open gui and if joined sing and multyplayer it crashed

i was adding mods but seedcracker dint work if i go on mod menu then on gui or on seedcraackerx it says failed to load config screen for seedcrackerx report to seedcrackerx not mod menu java.lang.nullpointer excepiton


implementation and tests for ClientSessionStub

[Current coverage][cc-pull] is 44.15%

Merging [#12][cc-pull] into [master][cc-base-branch] will increase coverage by 1.14%

@@             master        #12   diff @@
==========================================
  Files             4          6     +2
  Lines            93        231   +138
  Methods          27         54    +27
  Messages          0          0
  Branches          0          0
==========================================
+ Hits             40        102    +62
- Misses           53        129    +76
  Partials          0          0

Powered by Codecov. Last updated by [9b55639...d3c50e5][cc-compare]
[cc-base-branch]: https://codecov.io/gh/tidal/WampWatch/branch/master?src=pr
[cc-compare]: https://codecov.io/gh/tidal/WampWatch/compare/9b556390e10c4941efc3ce13b50d4981d9d981c3...d3c50e5bdb09e9331aa1927737165961b8c40c74?src=pr
[cc-pull]: https://codecov.io/gh/tidal/WampWatch/pull/12?src=pr


[Support] Error on install

{please fill the checkboxes, e.g: [X]}

[x] I have read and understood the contributors guide.
[x] The issue I am reporting can be replicated.
[x] The issue I am reporting can be is directly related to the pivpn installer script.
[x] The issue I am reporting isn't a duplicate (see FAQs, closed issues, and open issues).

Issue
I am trying to install PiVPN as explained in the documentation, but I get an error when getting the files from the repository (see the coinsole output)
Have you searched for similar issues and solutions?
(yes/no / which issues?)

Yes, I have found a few issues on here, bit none completely match the error and none solve the issue.
Console output of      curl -L install.pivpn.dev | bash
root@raspberrypi:/home/pi/prueba# curl -L https://install.pivpn.io | bash
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   162  100   162    0     0    582      0 --:--:-- --:--:-- --:--:--   584
100 82755  100 82755    0     0   154k      0 --:--:-- --:--:-- --:--:--  338k
:::
::: You are root.
::: Hostname length OK
::: Verifying free disk space...
:::
::: Checking apt-get for upgraded packages.... done!
:::
::: Your system is up to date! Continuing with PiVPN installation...
:::    Checking for git... already installed!
:::    Checking for tar... already installed!
:::    Checking for wget... already installed!
:::    Checking for curl... already installed!
:::    Checking for grep... already installed!
:::    Checking for dnsutils... already installed!
:::    Checking for whiptail... already installed!
:::    Checking for net-tools... already installed!
:::    Checking for bsdmainutils... already installed!
:::    Checking for dhcpcd5... already installed!
:::    Checking for iptables-persistent... already installed!
::: Static IP already configured.
::: Using User: pi
:::
::: Checking for existing base files...
:::    Checking /usr/local/src/pivpn is a repo...:::    Cloning https://github.com/pivpn/pivpn.git into /usr/local/src/pivpn... [\]  fatal: cannot exec 'fetch-pack': Input/output error
main: line 989: cd: /usr/local/src/pivpn: No such file or directory

Input/output error means that your SD card may be failing. What's the output of dmesg --level=err, assuming you haven't rebooted after seeing such error?

I am running into a similar issue. the same message without the "fatal: cannot exec 'fetch-pack' : Input/output error". I have /usr/local/src/pivpn...main: line 989: cd: /usr/local/src/pivpn: No such file or directory.

Had the same issue on an octopi image.
After browsing the code I figured out that the (sudo) git command was failing:
sudo git clone -q --depth 1 --no-single-branch https://github.com/pivpn/pivpn.git /usr/local/src/pivpn
So I executed this manually and saw the following:
Please do not run git as root, your regular user account is enough :)

If you need to run git with root rights for some other application than
what comes preinstalled on this image you can remove this sanity check:

    sudo rm /root/bin/git

You might have to restart your login session after doing that.

Executed sudo rm /root/bin/git and ran curl -L https://install.pivpn.io | bash again, the installation continued without errors tada

you could have been spared all the trouble if you have checked the wiki :p
https://github.com/pivpn/pivpn/wiki#what-about-octopi


How to connect a WiFi without password on Windows

I tried to pass the password as null '' in the connect function. I couldn't connect to the WiFi without password

Do not pass any password key to connect, i.e. wifi.connect({ ssid: MySuperNetwork }); and that's it!

This issue has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.


Use 'R' to rename a single file with the current filename put in place for user to modify.

Hi! I added this ability in my fork of fff. You can move around with arrow keys, delete every character from filename and filename is added for you to edit, not to write again. Also I added shortcut - ctrl + a which moves cursor to the beginning of the filename. Hope this helps!