[SPARK-48710][PYTHON] Use NumPy 2.0 compatible types

What changes were proposed in this pull request?

Replace NumPy types removed in NumPy 2.0 with their equivalent counterparts
Make tests compatible to new __repr__ of numerical scalars

Why are the changes needed?
PySpark references some code which was removed with NumPy 2.0:

np.NaN was removed, should be replaced with np.nan
np.string_ was removed, is an alias for np.bytes_
np.float_ was removed, is defined the same as np.double
np.unicode_ was removed, is an alias for np.str_

NumPy 2.0 changed the __repr__ of numerical scalars to contain type information (e.g. np.int32(3) instead of 3). Old behavior can be enabled by setting numpy.printoptions(legacy="1.25") (or the older 1.21 and 1.13 legacy modes). There are multiple tests and doctests that rely on the old behavior.
Does this PR introduce any user-facing change?
No.
How was this patch tested?
Tests for modules pyspark-connect, pyspark-core, pyspark-errors, pyspark-mllib, pyspark-pandas, pyspark-sql, pyspark-resource, pyspark-testing were executed in a local venv with numpy==2.0.0 installed.
Was this patch authored or co-authored using generative AI tooling?
No.

cc @itholic

Let's use the default PR template

@itholic thanks for reviewing!
I added some small changes to the tests, to make them compatible with NumPy 2.0. MR description is updated accordingly and formatted according to the default template. I couldn't yet get the pyspark-ml tests running locally, so those tests are not yet tested with NumPy 2.0.
Maybe it makes sense to update the GitHub jobs to test with both the lowest supported (i.e. 1.21) and latest (i.e. 2.0.0) NumPy version?

Oh, okay seems like the NumPy is upgraded their major version recently (2024-06-17): Release Note.
@HyukjinKwon Maybe should we upgrade the minimum NumPy support to 2.0.0 as we did for Pandas??
Also cc @zhengruifeng who have worked on similar PR from https://github.com/apache/spark/pull/42944.

I think that's too aggressive. NumPy is also used in Spark ML, and many other dependent proejcts

cc @WeichenXu123

Seems fine from a cursory look but let's make the CI happy :-).

CI passed !

There are some linter failures: https://github.com/codesorcery/spark/actions/runs/9708335267/job/26795030107

There are some linter failures: https://github.com/codesorcery/spark/actions/runs/9708335267/job/26795030107

Added # type: ignore[arg-type] to the affected lines, since legacy="1.25" is only implemented in numpy>=2 and we're checking that the code path is only executed when numpy>=2 is installed.

Have we test this changes against numpy 2.0?

I've tested it on my local workstation, as written in the PR description. There aren't any CI jobs testing with NumPy 2.0 yet.
To make sure that no calls to code removed in NumPy 2 is made, we could also use ruff in dev/lint-python since it can check for usage of NumPy 2 deprecations.
(ruff can also be used as a faster replacement of both flake8 and black, but that should be out of scope here)

The change seems fine to me. @codesorcery do you mind creating a PR to set the upperbound at setup.py like  numpy < 2? I think NumPy release will affect 3.5 users too.

@codesorcery do you mind creating a PR to set the upperbound at setup.py like numpy < 2? I think NumPy release will affect 3.5 users too.

@HyukjinKwon you mean for branches where this PR doesn't get applied? Otherwise, most Python package managers and tools like Renovate won't allow users to update to NumPy 2 with this bound set.
Maybe also of interest: there is a list tracking the compatibility status of Python libraries with NumPy 2.0 at https://github.com/numpy/numpy/issues/26191

Yes, branch-3.5.

@HyukjinKwon here's the PR for branch-3.5 limiting numpy<2: https://github.com/apache/spark/pull/47175

It should be possible to write code that is compatible with NumPy 1 & 2. That is what most projects are doing
Would look over the migration guide. There are more suggestions in the release notes
As already noted ruff's NumPy 2 plugin can be a great help in migrating code
cc @rgommers (for awareness)

Merged to master.

@codesorcery @HyukjinKwon I noticed that a review comment here said np.set_printoptions is used in the tests and can be updated, but this PR uses it in pyspark/core/ rather than in tests. np.set_printoptions changes global state within numpy, and doing that from within another library is a big no-no usually. Could you please consider changing this?

but this PR uses it in pyspark/core/ rather than in tests

@rgommers np.set_printoptions is only called inside def _test() -> None: in these classes, which setup and run doctest. It's not called from any function that would be called when PySpark is used as a library.

Ah there are tests within source files, I missed that. Sorry for the noise!

If there are numpy-related test cases, can we move them out from rdd module?
IIUC, this problem is already pointed out by @rgommers one month ago in this PR.

Here is a follow-up according to @HyukjinKwon 's comment.

https://github.com/apache/spark/pull/47526


(AzureCXP) fixes MicrosoftDocs/azure-docs-cli#1815

Adding a note about adding rh-python36 to path on RHEL 7.6

Docs Build status updates of commit 7282267:
:clock10: Full build: the average full build time is 7 min(s) 12 sec(s), this is based on the last 446 build(s) for this repository.

Docs Build status updates of commit 7282267:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

docs-ref-conceptual/install-azure-cli-yum.md
:white_check_mark:Succeeded
View (azure-cli-latest) View (azure-cli-2017-03-09-profile) View (azure-cli-2018-03-01-hybrid)

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


Tags for a blog

Is your feature request related to a problem? Please describe.
Different tags can be attached to a blog like #blog,#firstblog,etc.
Describe the solution you'd like
Adding an extra field tags for model Post by using django-taggit

@diyajaiswal11 I want to work on this issue, if it seems fine to you.

@diyajaiswal11 I want to work on this issue, if it seems fine to you.

Great idea!! Go ahead @SubhradeepSS


update readme for repocli

The readme says: "The WebDAV path should always be in form of the absolute path (i.e. started with /); while the local path can be in a format recognized by the shell.". Relative paths (starting with ./) seem to work fine as WebDAV paths for me.

@achetverikov I have adjusted the README accordingly.  See https://github.com/Donders-Institute/dr-tools/commit/19d6d5b26e7144c47a9f5cd4735af9ee041ac950


Jan 2022 Connectathon Changes

Summary
We changed all the things.
New behavior
New NDJSON Worker:
Previously, we only had child processes running with import workers. Now, we also have child processes running for NDJSON workers. The NDJSON worker pulls down a job from the new NDJSON queue and retrieves the NDJSON from the file URL specified in the job. It then connects to our Mongo database and inserts the NDJSON resource. (RIP BDU sqlite 2021-2022 :broken_heart:)
Keeping track of bulk files to process:
Now, the import request completes once we have exported all the files, and we keep track of this by initializing the bulk file count and then decrementing by one after each file finishes exporting.
We decided to use this approach for now because the database updates need to happen from the main process to avoid race conditions. So far, we have not found a solution that is more efficient than our approach of decrementing the bulk file count. In the future, we can look more into a lockfile approach for handling this functionality.
Dynamic X-Progress Header:
For import requests that are in progress, the X-Progress header will now dynamically update with the percentage of exported files or resources. Since number of resources is more accurate, we will use the resource counts if they are available by the export server. Otherwise, we resort to the number of files that have been exported thus far.
Code changes
executePingAndPull() changes:
We got rid of the transaction bundle uploading in executePingAndPull(). Instead, we make use of the bulk file count approach with the child processes, enqueuing a parsing job onto our NDJSON queue for each NDJSON file.
Dynamic X-Progress Header:
The bulk import status entries in Mongo now contain attributes to keep track of the exported file/resource counts, and total file/resource counts. If the resource counts are not available, these entries will default to -1. The X-Progress header is computed within bulkstatus.service.
ValueString —> ValueURL:
After discussions on Zulip, we concluded it is more appropriate to use ValueUrl for the exportUrl rather than ValueString, which is what we had been using. We updated all instances of ValueString in src, unit tests, and fixtures.
exportType ServerError:
To align more with the spec, we added a NotImplemented ServerError that is thrown when an import request is sent that contains a ”static” exportType. We only support ”dynamic” exportTypes.
Full URL in Content-Location:
We had some issues getting the SMART on FHIR Bulk Import Client to work with the test server because we were not setting the Content-Location to its full URL. We made changes to measure.service and import.service to populate the header with the full URL.
Testing guidance
Run all unit tests and ensure they pass.
Try sending some $import requests within the test server. For example, try sending a request to http://localhost:3000/4_0_1/$import with the following request body:
{
	"resourceType": "Parameters",
	"parameter": [
		{
			"name": "exportUrl",
			"valueUrl": "https://bulk-data.smarthealthit.org/eyJlcnIiOiIiLCJwYWdlIjoxMDAwMCwiZHVyIjoxMCwidGx0IjoxNSwibSI6MSwic3R1IjozLCJkZWwiOjB9/fhir/$export"
		},
		{
			"name": "exportType",
			"valueString": "dynamic"
		}

	]
}

After sending the GET request to the specified Content-Location, make sure to check the headers and see the super cool dynamic X-Progress header, and admire how fast everything is. Also test out $import with our bulk export server to ensure functionality is as expected. (Don’t forget to add /$export to the end of the valueUrl).
Note: Once the BDU PR gets approved, we will need to update the commit hash for bulk-data-utilities in package.json, as the current commit hash points to the BDU Connectathon Branch.

I'm not seeing any BDU PRs since 11 days ago. Does the BDU PR still need to go up?


pageserver: Reduce tracing overhead in timeline::get

Problem
Compaction process (specifically the image layer reconstructions part) is lagging behind wal ingest (at speed ~10-15MB/s) for medium-sized tenants (30-50GB). CPU profile shows that significant amount of time  (see flamegraph) is being spent in tracing::span::Span::new.
mainline (commit: 0ba4cae491c26c7678f7abddb68bf76134a7df90):

Summary of changes
By lowering the tracing level in get_value_reconstruct_data and get_or_maybe_download from info to debug, we can reduce the overhead of span creation in prod environments. On my system, this sped up the image reconstruction process by 60% (from 14500 to 23160 page reconstruction per sec)
pr:

create_image_layers() (it's 1 CPU bound here) mainline vs pr:

Checklist before requesting a review

[ ] I have performed a self-review of my code.
[ ] If it is a core feature, I have added thorough tests.
[ ] Do we need to implement analytics? if so did you add the relevant metrics to the dashboard?
[ ] If this PR requires public announcement, mark it with /release-notes label and add several sentences in this section.

Checklist before merging

[ ] Do not forget to reformat commit message to not include the above checklist

Good point. The delayed can be implemented by creating the span only at this line: https://github.com/neondatabase/neon/blob/8460654f61d59dc639db282473148e2b8ef50b09/pageserver/src/tenant/storage_layer/layer.rs#L744.

I assume your workload didn't actually do any ondemand downloads.

Yes, I hope this is typical when generating images in the timeline::compact().
I'll try @koivunej suggestion, thanks.

Can we do something similar for get_value_reconstruct_data?

IIUC the contribution of get_value_reconstruct_data and get_or_maybe_download is roughly 50:50 in your benchmarks?

Yes.

If so, let's get the get_or_maybe_download part merged as part of this PR

Ok.

and create a follow-up to improve the get_value_reconstruct_data.

Ok. Span::new will take >20% CPU time of Timeline::get_reconstruct_data. Any ideas on how to do this other than not creating new span?
flamegraph:

@ivaxer thanks for your contribution


problems with IPuppetFrame.waitForLoad method

For all of my testing, as soon as I have awaited the agent.goto() method to visit a requestUrl that I am scraping,
I then do the following:
await agent.activeTab.waitForLoad(LocationStatus.DomContentLoaded, { timeoutMs: my_longish_timeout });

This means that when I get to the point of using my own plugin code to make any necessary calls to
IPuppetFrame.waitForLoad() before calling IPuppetFrame.evaluate(), I can be sure that the main frame
is loaded successfully, but cannot depend on other frames having been loaded without calling waitForLoad.
The first thing I noticed in testing two of my own test pages that reference simple url-based iframes, is
that generally, for my localhost pure html webpages (with frames), that immediately after calling
agent.activeTab.waitForLoad (above), when I reference a child frame from the main page (which is url-based),
it appears that the following strange condition holds.  (1) the child frames' isLoaded property is true, but
(2) the child frames' url property is undefined!  Given that I know that this iframe's src attribute was not set by
javascript, but in the original html of the main page, this has to mean that frame.isLoaded is not telling
the truth!  Thus I call frame.waitForLoad anyways, and when it resolves successfully, indeed I see the
url that I expect based on the frameEl's "src" attribute.
Thus my current code only skips calling IPuppetFrame.waitForLoad when (1) frame.isLoaded is true,
AND (2) frame.url is "truthy".
This above is the first problem.

The second problem is that I wondered what happens if I called frame.waitForLoad exactly one time
for every frame that I see for the first time, regardless of what the frame.isLoaded boolean says
(given that from the above, we can see that it is not always accurate).  I decided to do this at two
levels, for the mainFrame and for the child frames, and found that I got LOTS of 30 second timeouts
on waitForLoad when calling waitForLoad unnecessarily on the main page!  When I turned off
this "extra work" for the main page (as I should, given I call agent.waitForLoad as indicated above),
I still got quite a few child-frame 30 second timeouts for unnecessary waits for child frames.
So the second problem is that it does not make sense that calling waitForLoad for a frame or main
page frame that has a truthy url should not cause such failures.

The third problem is related to the fact that I cannot trust isLoaded as stated at the top.  This means
that I do in fact call waitForLoa when isLoaded is true but frame.url is undefined.  Unfortunately,
this does not cause ALL the 30 second timeouts to disappear.  There are still a few.

The fourth problem is that I feel I could do a better job debugging this if I had control over the
30 second timeout, and could adjust it up or down.  It seems fixed.

And finally, wondering about the 3 types of injected-by-javascript doms (other than rewriting the
document itself), I found that for iframes that come from the 'srcdoc' attribute, the IPuppetFrame.url
does reach the 'about:srcdoc' state.
Likewise for iframes injected by dynamic javascript on top of an initial 'about:blank' src attribute,
or no src attribute at all, all these IPuppetFrame.url values reach the 'about:blank' state.
But for iframes whose 'src' is initially set to a string that loads the entire page and its javascript
by escaping the html into an url that begins with 'javascript:', after waitForLoad resolves
successfully, frame.url is STILL undefined.

In view of trying to figure out the best approach to minimize errors, I was wondering:
what exactly does IPuppetFrame.waitForLoad do?

BTW, I do not see problems with standalone tests of any single url.  It seems that this happens under
load, and randomly and in a non-reproducible way, and the ec2 instance I am using currently
is an m3.medium.

@andynuss Thank you so much for your work on your plugins. Unfortunately, you're exposing that we have unintentionally exposed undocumented, unintended for developer consumption "internal apis". That isLoaded variable is not related to the "load" event of the page. It's about loading internal state. You need to translate these puppetFrames into FrameEnvironments on the client and use the APIs provided by those. If you encounter these load issues with the FrameEnvironments on the client, please log those. Going to close this for now as these events are internal, and we will likely close them off from the plugins at some point to reduce confusion.


Ambiguous variable names.

tamate now has left/right and src/dest in variable names.
Since left/right has no information as a variable name, should consider the name that understand clearly.
e.g. old/new, from/to

--changes-for= option on mysqldbcompare
https://dev.mysql.com/doc/mysql-utilities/1.6/en/mysqldbcompare.html#option_mysqldbcompare_changes-for

--changes-for= option on mysqldbcompare

I will support with tamate-cli
Link was broken, please refer to berow
https://docs.oracle.com/cd/E17952_01/mysql-utilities-1.4-en/mysqldbcompare.html

Generally it seems to use argument names like "text1" or "text2"
https://github.com/google/diff-match-patch
https://github.com/sergi/go-diff


fix: .d.ts files are now created using tsup instead of tsc

This will help us with pull request validation, and make the tsup configs simpler

Looks like PR validation works 😄

Do we need changeset for this change?

I dont think so, as long as it seems to generate the same types


Add ServiceConfig to avoid redundancy.

Can you please guide on adding ServiceConfig instead of manually list the routes to avoid erroneous repetitions?
the Configuration is already established at
looking at
we only need to pass that ServiceConfig to paths instead of manually list the routes which could be tedious. Could there be a macro or anything you can suggest?

At the moment there is no build in solution for this. But others might have build some sort of macro rules to mitigate the overhead of double definition. Also there is a thrid-party crate that might be useful: https://github.com/juhaku/utoipa/discussions/635 and there is one issue that has collected several relative issues together that touches the same topic https://github.com/juhaku/utoipa/issues/662.

Related #121


plot figure of merit value with uncertainty

after the best model is applied to the holdout (test) sample, one can split the holdout in N folds and compute figure of merit on each of them and plot the mean +/- standard deviation at the comparison figure.

 Добавить дисперсию от CV на графиках


Thoughts on the future of currently unsupported units?

As of no.anteo/broch {:mvn/version "0.1.83"}, evaluating this expression:
(do
  (require '[broch.core :as b])
  (b/* (b/seconds 1) (b/seconds 1)))

Gives me an error:
1. Unhandled clojure.lang.ExceptionInfo
   No unit is registered for {:broch/scaled 1, :time 2}
   {:broch/scaled 1, :time 2}

What are your thoughts on currently unsupported units? Are you planning to stick to a selection of common units?

I really like how you present units. It's compact, and it can be read back into the system:
(u/* (u/meters 2) (u/meters 2))
;; => #broch/quantity[4 "m²"]

Is roundtripping to EDN literals what motivated the decision to have a selection fo supported units?

Hi @teodorlu !
Sorry for the late answer (I'm not used to checking github notifications).

Is roundtripping to EDN literals what motivated the decision to have a selection fo supported units?

Basically, yes. The edn literals are part of this librarys "contract", since users might have stored them. So new "built-in" units should (obviously) not collide with the existing ones.
But I am open to adding more built-in units. So far I've just added the basic SI units + scalings of these + whatever I've needed myself. Although I'd prefer to only add units that have a pretty solid agreed upon definition and accepted symbol (I've mostly used wikipedia as a source of "official" symbols for units).
But about you first example: What's the unit in your example here? I've only ever seen s² as the denominator of other units like m/s². So I'm not sure if s² should be a unit on it's own? If so, what would it measure?

But I am open to adding more built-in units. So far I've just added the basic SI units + scalings of these + whatever I've needed myself. Although I'd prefer to only add units that have a pretty solid agreed upon definition and accepted symbol (I've mostly used wikipedia as a source of "official" symbols for units).

Gotcha! In a sense, that was what I was trying to understand. Is each unit a special thing? Or are we just making an algebra that supports units? I was leaning towards the latter, "just make +, -, /, * and the other operations work". But if you're storing the things in a database and making user interfaces on them, putting down some work to make sure everyting has a nice name makes a lot of sense.

But about you first example: What's the unit in your example here? I've only ever seen s² as the denominator of other units like m/s². So I'm not sure if s² should be a unit on it's own? If so, what would it measure?

Specifically for square seconds, angular accelleration (1 / s²) comes close. But then you'd possibly want to name 1/s², not s².

Interesting. I was a little suspicious about 1/s² because units shouldn't really have numbers in them. I looked up angular acceleration and technically it's rad/s². However, a radian is actually defined as (m/m) which cancels out! So a radian is in a way just a placeholder for 1.
I'm not sure how this library will behave with a unit like radians, I'll have to experiment a bit.
In any case, I found this article about derived SI units and i think I'll add all of these that aren't already there. (Once I figure out how radians work)

Looking more at the mentioned article I see that some units actually have the same definition. For example, both hertz and becquerel are defined as 1/s! Again, I'm not sure exactly how this will play out with conversions and stuff.
That is: if you do some arithmetic and end up with 1/s, is that hertz or becquerel? How do you know? The wiki article on Becquerel states:

The hertz is now only used for periodic phenomena.[5] While 1 Hz is one cycle per second, 1 Bq is one event per second on average for aperiodic radioactive decays.

But whether the measured phenomena is periodic or aperiodic is outside the scope of this lib I think. So maybe I should just Hertz (being the most commonly used) and leave out more "specific" units like Becquerel. What do you think?

Looking more at the mentioned article I see that some units actually have the same definition. For example, both hertz and becquerel are defined as 1/s! Again, I'm not sure exactly how this will play out with conversions and stuff. That is: if you do some arithmetic and end up with 1/s, is that hertz or becquerel? How do you know? The wiki article on Becquerel states:

The hertz is now only used for periodic phenomena.[5] While 1 Hz is one cycle per second, 1 Bq is one event per second on average for aperiodic radioactive decays.

But whether the measured phenomena is periodic or aperiodic is outside the scope of this lib I think. So maybe I should just Hertz (being the most commonly used) and leave out more "specific" units like Becquerel. What do you think?

In general, I think the user will have to supply a preferred unit. There are a few cases where different derived units are commonly used to denote things that are slightly different, but end up with the same base SI unit.

MPa and kPa are of the same base unit, but kPa is commonly used for air pressure, whereas MPa is used for normal and shear stress in materials (see Yield Stress).
Bending moment commonly measured in kNm (rarely MNm), but Newton meters (Nm) is the same unit as Joule. Energy and bending moment is not the same thing.


hyper-parameter

Hi Han，
Could you please tell me what the epoch of each dataset should be set to?Thanks.

Hi,
The epoch parameters are as below: AWA1/AWA2 (about 130), CUB (about 450), FLO (about 730), and SUN (about 350).


Add Geocoding to input form

Use the geocoding service to validate addresses
Reference: https://developers.google.com/maps/documentation/javascript/examples/geocoding-simple

Add directions service to find distance and travel time between locations
Reference https://developers.google.com/maps/documentation/javascript/examples/directions-simple

After research and tests, I realize that geocoding wasn't completely necessary. However, it is currently used for the first marker that is generated. All the other titles for the markers are created using the Directions API.


Support React Native

Jerry has built a foundation of work that we can follow here to implement React Native support: https://github.com/fortmatic/fortmatic-js/tree/react-native-2.1
I will be prioritizing this after Web3 support ships in #28

:rocket: Issue was released in<EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS>:rocket:


Failed to build AKS Cluster

Exercise 1
Task: 02
Step: 08
Description of issue:
B4ms VM SKU not allowed for system pool.
When agentpool is set to Standard_B4ms SKU as set in lab instructions the following error occurs:
"Please don't use B series VMs on system node pool, to ensure that the required kube-system pods and your applications can reliably be scheduled."
This prevents AKS cluster deployment.
Other VM SKU are blocked by policy.
Happening every time I try and set up the AKS cluster.
No AKS cluster so labs are not proceedable after this failure!

a Support ticket with skillable has been opened Ticket 2087667

I just ran through this last night on GoDeploy.  But what I did was NOT change the agent pool as instructed, and moved on.
Worked like a charm.  Yes I am limited to Standard_B4ms SKU, but as long as you dont mess with the Agent Pool, it works well.
I will test Skillable later.

Skillable's Cloudslice version has been updated so that it should work, although Azure still leaves what appears to be a warning....it has apparently relatively recently decided that 'B' SKUs are just not recommended.

Presumably as long as Azures behavior does not change still further and block 'B' SKUs, and continues to just warn students....no changes would have to be made.  (however, the warning itself might cause confusion and lead to students calling in tickets.)

This is resolved (switching to a different SKU)
rgds
Marcin


Import order can break tests

Do you want to request a feature or report a bug?
Bug
What is the current behavior?
Import order is not behaving as expected
If the current behavior is a bug, please provide the steps to reproduce and either a repl.it demo through https://repl.it/languages/jest or a minimal repository on GitHub that we can yarn install and yarn test.
I'm testing a redux reducer by importing the reducer function, executing it with an action, and then matching that output to a snapshot. My reducer includes a factory function reducer which takes a particular action object which has constants and uses these to create an async reducer. So here's the code in rough format:
// myReducer.js
import { combineReducers } from 'redux';
import * as myActions from '../actions/myActions';

const initialAsyncState = {};
const myReducer = {
  // this function relies on myActions being well formatted
  // since it accesses myActions.constants.REQEST, for example
  // example: myActions = { constants: { REQUEST: 'REQUEST' } };
  async: reducerFactory(initialAsyncState, myActions),
  somethingElse: someOtherReducer,
};

const aBiggerReducer = (state = {}, action) => {
  switch (action.type) {
    case 'SOME_CASE':
      return {
        ...state,
        [action.id]: myReducer(state[action.id], action),
      };
  }
};

export default aBiggerReducer;

Now in my test, something like this happens:
import * as myActions from '../../actions/myActions';
import reducer from '../form';

describe('some block', () => {
  test('some test', () => {
    expect(reducer(undefined, myAction.request(null, { id: 'test' }))).toMatchSnapshot();
  });
});

If I do the imports in that order, my reducerFactory thinks that myActions looks like this:
{ constants: undefined, otherKey: undefined }

which clearly breaks the tests since my actions object is all messed up. If I swap the order of imports in my test:
import reducer from '../form';
import * as myActions from '../../actions/myActions';

Now it is properly shaped:
{ constants:{ REQUEST: 'REQUEST' }, otherKey: someFn }

Interestingly, this happens in the original scenario (bad import order):
// in myReducer.js
// ... stuff you saw before
console.log(myActions); // { constants: undefined, otherKey: undefined }
setImmediate(() => console.log(myActions)); // { constants:{ REQUEST: 'REQUEST' }, otherKey: someFn }

Keep in mind that myActions is also being generated by a factory function, and I am exporting constants and otherKey as constants in that file like so:
// myActions.js
import { generateConstants, generateAsyncActions } from './actionsFactory';

export const constants = generateConstants('some-namespace')();
export const someKey = generateAsyncActions();

So when I import myActions before myReducer in my test, it doesn't seem to have actually called generateConstants yet, but when I import myReducer before myActions, generateConstants is getting called. In fact, if I do a console.log in myActions, it isn't executed until after the test fails (in the bad import order scenario).
Maybe I have a fundamental misunderstanding of how import should behave, but I would think that it shouldn't be executing code unless the imports for that module have resolved. This code does work fine in a 'real', browser scenario, so I brought it here as it could be some sort of bug.
What is the expected behavior?
Import order in my test should not affect the tests.
Please provide your exact Jest configuration and mention your Jest, node, yarn/npm version and operating system.
    "babel-jest": "^19.0.0",
    "jest": "^19.0.2",

node version: 7.8.0
OS: OSX 10.10.5

I believe this was caused by a circular dependency issue in my code base. Sorry for opening the issue!

I experienced this as well (due to my own circular dependency (thanks VSCode for an easy fix)), but it was pretty time-consuming to debug Jest itself so that I could determine the cause.
So, is there something Jest can do to determine circular dependencies within a test?

We could, but I think there's better tools to do this. Quick Google came up with https://www.npmjs.com/package/madge

Thank you @jeysal. I don’t know why I didn’t think to look for an external library. It makes sense that you wouldn’t want to have jest break Curly’s law. I will check out one of Madge or an equivilant library. :)

A linter could probably warn you: https://github.com/benmosher/eslint-plugin-import/blob/master/docs/rules/no-cycle.md


adopts removal of hass.const.HTTP_*

With Home Assistant 2021.12, the const.HTTP_* status constants were removed, see https://github.com/home-assistant/core/pull/58380.
This PR replaces these constants with HTTPStatus.
This fixes #35

Nice fix, I ran into this today and ended up hardcoding HTTP_OK to "200" which seemed to get the integration working again.

With Home Assistant 2021.12, the const.HTTP_* status constants were removed, see home-assistant/core#58380.
This PR replaces these constants with HTTPStatus.
This fixes #35

Thank you, that solved the issue for me and works great1 :)

Thanks, fixed it for me too


Updated checkbox for radiobutton in ModelAssetTemplateWindow

I resolved the issue #146, it was necessary to change the template of the radio button because the check icon was not being shown when the initial value was true, and about the UpdateStatus method, i removed because it is not necessary when used the GroupName in the elements.

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.Wellington Pires seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.You have signed the CLA already but the status is still pending? Let us recheck it.

@Kryptos-FR, This other account with my name, is not a github account I can not sign the license. Should I redo the PR to pull it off?

@xwellingtonx

First make sure that your git config use the correct author/email.

If those steps don't work. Close that PR and create a new one.

Thanks, now it's okay.

@Kryptos-FR is this PR good to merge?

@Kryptos-FR no worries, thanks for taking a look at it!

Merged, thanks!

Thanks, guys!


[Feature Request] Streaming M3U links support

I'm using this library for a radio streaming app and a lot of links are m3u audio streams that I can open no problem in Safari on iOS, but aren't compatible with this library.
Any chance for this feature being added?
Here's an example m3u link that works in Safari on iOS: link

You are more than welcome to add this feature yourself and PR, I am not than happy to review this.
You'd need to parse the non-standard format of m3u file and then queue the links found.


Add wording around Marketing and Trademark guidelines for adding to the registry

We need to make sure that entries in the registry follow our own guidelines, this is a first step to highlight this in our guidelines to add to the registry.

/fix:all

/fix:refcache

/fix:all


feat: add mathjax support

Adressing #212

Closing for now as this is supported in Quartz 4: https://four.quartz.jzhao.xyz/features/Latex#mathjax


feat: block production integration tests

Pull Request type

Please add the labels corresponding to the type of changes your PR introduces:

Bugfix
Feature
Code style update (formatting, renaming)
Refactoring (no functional changes, no API changes)
Build-related changes
Documentation content changes
X Testing
Other (please describe):

What is the current behavior?

Resolves: #NA
What is the new behavior?

Adds integration tests for the block-import crate
Adds integration tests for the BlockProductionTask

Does this introduce a breaking change?

No
Other information

Waiting for #279 to be merged


Sync apps with master branch

@dasanra , do I understand correctly that this is the ticket for the Transaction builder full regression?
Do we need to run tests for other apps in the list?


Username parameter for slack/mattermost/rocketchat

What type of PR is this?

Uncomment one (or more) /kind <> lines:

/kind bug

/kind cleanup

/kind design

/kind documentation

/kind failing-test

/kind feature

Any specific area of the project related to this PR?

Uncomment one (or more) /area <> lines:

/area build
/area config

/area outputs

/area tests

/area helm

What this PR does / why we need it:

Update golang to 1.14
Add a new architecture schema in README
Add a new parameter for Slack, Mattermost, Rocketchat : username

Which issue(s) this PR fixes:
N/A
Special notes for your reviewer:
N/A

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

Needs approval from an approver in each of these files:

OWNERS

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

LGTM label has been added.  Git tree hash: 64c3e82e45f57cf5348d205d9998c9b03a427edc

[APPROVALNOTIFIER] This PR is APPROVED
This pull-request has been approved by: leodido
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

OWNERS [leodido]

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


Classes generated in the wrong package

I have a java and kotlin package in my project. Im trying to generate the new files under the kotlin package but the files go to the java package instead. I have 2 soruceSets in my app gradle like this : main.java.srcDirs += 'src/main/kotlin'

It can be Android Studio's bug. Can you please switch from Android structure to Project structure and check that package name again?

I did that. I think android studio doesnt support creating a new activity old fashioned way if you have kotlin as your sourceDir

I think they're gonna fix it. If you attempt to rename java package in Android mode, you can see that it's Kotlin indeed.

Yep. I hope they fix it soon. Really like your idea and would like to use it soon :) Thanks


Create aluno.txt - Unicarioca

University website: https://unicarioca.edu.br/

@saamarquezine I am sorry, the domain aluno.unicarioca.edu.br is removed from our trusted domains list because it was abused in the past. If you are the student of this school, please enroll to GitHub Student Developer Program. Then apply for JetBrains educational subscription with your GitHub account (GitHub tab at https://www.jetbrains.com/shop/eform/students).


Remove reference to prod rudder key in ci workflow, keep in cd workflow

Summary
Using the prod Rudderstack telemetry key in CI can skew our telemetry numbers. We should make it so we use the development key instead. The production builds of the plugin produced by the cd.yml should still contain the prod key.
Ticket Link
Fixes https://github.com/mattermost/mattermost-plugin-apps/issues/469

Codecov Report
Patch and project coverage have no change.

Comparison is base (6287cd5) 20.15% compared to head (0d2039d) 20.15%.

Additional details and impacted files
@@           Coverage Diff           @@
##           master     #470   +/-   ##
=======================================
  Coverage   20.15%   20.15%
=======================================
  Files          80       80
  Lines        6600     6600
=======================================
  Hits         1330     1330
  Misses       5138     5138
  Partials      132      132

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

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


[FRS-14] Improve worker load balance

What is the purpose of the change
The current strategy of selecting workers in AssignmentTrackerImpl#requestShuffleResource is to give priority to the workers with the least number of data partitions, but this selection strategy is not balanced enough. This patch introduces more worker selection strategies to adapt to more usage scenarios and improve performance.
Brief change log

Abstracts data partition worker selection strategy.
Introduces more worker selection strategies, including random strategy, round-robin strategy, mini-number strategy.

Verifying this change
This change added tests.

As this PR has been reviewed internally by @gaoyunhaii , I would like to merge it directly.


[feat] Set whether to stream individually for the model

Pull Request Checklist
Note to first-time contributors: Please open a discussion post in Discussions and describe your changes before submitting a pull request.
Before submitting, make sure you've checked the following:

[x] Target branch: Please verify that the pull request targets the dev branch.
[x] Description: Provide a concise description of the changes made in this pull request.
[x] Changelog: Ensure a changelog entry following the format of Keep a Changelog is added at the bottom of the PR description.
[ ] Documentation: Have you updated relevant documentation Open WebUI Docs, or other documentation sources?
[ ] Dependencies: Are there any new dependencies? Have you updated the dependency versions in the documentation?
[x] Testing: Have you written and run sufficient tests for validating the changes?
[x] Code review: Have you performed a self-review of your code, addressing any coding standard issues and ensuring adherence to the project's coding standards?
[x] Prefix: To cleary categorize this pull request, prefix the pull request title, using one of the following:

BREAKING CHANGE: Significant changes that may affect compatibility
build: Changes that affect the build system or external dependencies
ci: Changes to our continuous integration processes or workflows
chore: Refactor, cleanup, or other non-functional code changes
docs: Documentation update or addition
feat: Introduces a new feature or enhancement to the codebase
fix: Bug fix or error correction
i18n: Internationalization or localization changes
perf: Performance improvement
refactor: Code restructuring for better maintainability, readability, or scalability
style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc.)
test: Adding missing tests or correcting existing tests
WIP: Work in progress, a temporary label for incomplete or ongoing work

Changelog Entry
Description

The O1 model cannot use streaming. If I want O1 to respond correctly, I must turn off streaming in the global settings panel for it to work normally.
If streaming is turned off in the global settings panel, then all models will be unable to use streaming.
If you want to set streaming on or off for individual models, it is not possible in the current version. Therefore, I submitted this PR to allow setting streaming individually for each model.

Added

In the advanced settings of the model, stream_response has been added, which can be set to Default, On, and Off. The default setting is Default, using the global panel streaming settings.

Screenshots or Videos

After using the new code, the model can be individually set to enable or disable streaming.

LGTM, Thanks!


Support CLI options in the configuration file

Describe the feature
At the moment, reth offers limited support for configuration through a config file, meaning several important CLI options can’t be set there and must be entered each time on the command line. This can make the setup process a bit more cumbersome and limit the ability to share or update configurations across different environments. I’ve looked through the code but didn’t find support for including these options in the config file. Please let me know if I have overlooked something.

Many other execution clients allow all CLI options to be configured directly in a config file, simplifying sharing, maintaining consistency, and managing updates.

Additional context
I'm working on eth-nodes, a setup that launches any two clients and validators through packages, with each option mapped from debconf to generate the config file for each client. But since reth doesn't support all options directly in its config file, I had to wrap it in a bash script to pass the necessary CLI options. This workaround also meant adding an extra config file that isn't specific to reth, which isn't ideal. The goal is for all configs to work independently of eth-nodes packages and be usable on non-Debian systems without tweaks.

Bump. Any news of supporting this?

meaning several important CLI options can’t be set

which ones would you like to have?

meaning several important CLI options can’t be set

which ones would you like to have?

All of them provide feature parity. I would love to use them through system.d, so if a config value changes, the service file does not need to change on disk. Currently, I need a wrapper script to achieve this.

Bump


Add a License to Project

Hey @3vilme , I wonder what kind of license we need to add to this project.

We should add an MIT license imo.

Thanks a bunch! Got that done 💯


Update Release Checklist

Closes #
Code Changes

[x] update the checklist nox commands for the CLI

Steps to Confirm

[ ] list any manual steps for reviewers to confirm the changes

Pre-Merge Checklist

[ ] All CI Pipelines Succeeded
Documentation:

[ ] documentation complete, PR opened in fidesdocs
[ ] documentation issue created in fidesdocs

[ ] Issue Requirements are Met
[ ] Relevant Follow-Up Issues Created
[ ] Update CHANGELOG.md
[ ] For API changes, the Postman collection has been updated

Description Of Changes
Write some things here about the changes and any potential caveats

@ThomasLaPiana it was the fides release checklist that was causing me CLI issues:
My main notes are in the release checklist from 2.11.0 under the CLI section:  https://github.com/ethyca/fides/pull/3060.  I was able to get the CLI commands to work in the shell version but not when running nox -s "fides_env(test)"
Here's the link to the slack comment: I apologize that this was buried
Excerpt:

CLI commands don't seem to work well with the new paths in nox -s "fides_env(test)" out of the box, for example:  Invalid value for '[MANIFESTS_DIR]': Path '.fides/' does not exist. - so you'd have to construct the path to the correct folder.
I haven't gotten fides pull... to work due to unstaged changes in my directory, but I can't figure out why that would be! There are no files there  (not working in nox -s "fides_env(test)" but works with in nox -s dev -- shell)
I haven't gotten fides generate dataset db... to work - the command is successful but I can't find the file it's talking about.   (not working in nox -s "fides_env(test)" but works with in nox -s dev -- shell)

@pattisdr thank you for clarifying! I'll dig into this

@pattisdr Ok, updated! I went through the commands in order and everything worked for me, lmk if you run into any issues!

Update the contents of this checklist for the release tomorrow: https://github.com/ethyca/fides/pull/3182


Feature/literal support in acp rule

literal support for sourceNetworks and destinationNetworks in ACPRule.
sourcePort and destinationPorts to come in next PR

@shaktikshri - I'm unclear why you need to pass a dictionary for a literal source or destination network. Why not just pass a string? eg: literal='<IP_ADDRESS>/8'

I'm guessing because the literal can be of different types (a host or a network) and you need to specify which in addition to the value.

@shaktikshri - I'm unclear why you need to pass a dictionary for a literal source or destination network. Why not just pass a string? eg: literal='<IP_ADDRESS>/8'

I'm guessing because the literal can be of different types (a host or a network) and you need to specify which in addition to the value.

Ok, makes sense. To make things easier for the user, I would recommend api_objects.py works out if it's a network or host by the following logic:

If a prefix length of /31 or less is provided, then it's a network
If a prefix length of /32 is provided, then it's a host
If no prefix length is provided, then it's a host

I have a helper function to help with that.  Check out the
get_networkaddress_type or other functions in the helper_functions.py file.
On 7/14/19 11:34 PM, bekelly wrote:

    @shaktikshri <https://github.com/shaktikshri> - I'm unclear
    why you need to pass a dictionary for a literal source or
    destination network. Why not just pass a string? eg:
    literal='<IP_ADDRESS>/8'

I'm guessing because the literal can be of different types (a host
or a network) and you need to specify which in addition to the value.

Ok, makes sense. To make things easier for the user, I would recommend
api_objects.py works out if it's a network or host by the following logic:

If a prefix length of /31 or less is provided, then it's a network
If a prefix length of /32 is provided, then it's a host
If no prefix length is provided, then it's a host

—
You are receiving this because your review was requested.
Reply to this email directly, view it on GitHub
https://github.com/daxm/fmcapi/pull/33?email_source=notifications&email_token=AAZOMZZG55OHID5P2IBH54TP7QD5LA5CNFSM4IDQZHU2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODZ4X5VI#issuecomment-511278805,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAZOMZYO25A7XJBI36JA7CDP7QD5LANCNFSM4IDQZHUQ.

Shakti is away for a few weeks with the Chickenpox, so I have gone and refactored this to operate as per the suggestions above. Literals are passed in as simply literal="<IP_ADDRESS>" and the type will be determined.
For example:
acprule1.name = f"ACP_RULE_{TEST_ID}"
acprule1.action = 'ALLOW'
acprule1.enabled = True
acprule1.source_network(action='add', literal='<IP_ADDRESS>')
acprule1.source_network(action='add', literal='<IP_ADDRESS>/25')
acprule1.destination_network(action='add', literal='<IP_ADDRESS>')
acprule1.destination_network(action='add', literal='<IP_ADDRESS>/25')
acprule1.post()


Can't use theme commands in PuTTY

I am not able to run theme kit commands in PuTTY and I was wondering if there was a work around for this?

PuTTY is just an ssh client so I don't know why it would be a problem as long as themekit works on the host machine, however it is hard to be sure since PuTTY is quite an old client. Have you validated that it works on the host machine? What is the error that you are receiving?

Hi Tanema,
it works fine on the host machine I've been using it through git bash but my keys for bitbucket are set up on PuTTY so idealy I'd like to use it there. As far as i can understand it PuTTY can't access my local machine so I was wondering if there is anyway to install theme kit on my network drives to access it there?
Thanks

No, PuTTY is an SSH client. It can only access remote machines. I am assuming you are on windows if you are using PuTTY so I suggest you use cmd.exe, powershell, or WSL instead of PuTTY to use themekit on your local machine.

Yeah, I've been having to split my commands over PuTTY and git bash which
is fine I was just hoping there was a way to streamline this. Thank you for
your help I'll just have to remember to switch between them.
On 17 July 2018 at 13:33, Tim Anema<EMAIL_ADDRESS>wrote:

No, PuTTY is an SSH client. It can only access remote machines. I am
assuming you are on windows if you are using PuTTY so I suggest you use
cmd.exe, powershell, or WSL instead of PuTTY to use themekit on your local
machine.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/Shopify/themekit/issues/528#issuecomment-405565858,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AnR_zmJHFtcQjRa58BvfrrworjlV9nLnks5uHdmLgaJpZM4VRLBT
.

--
9xb Ltd. registered in England, Registration Number - 02699111
Registered
Address: 9xb Ltd., 38 Freeman's Way, Harrogate Business Park, Harrogate,
North Yorkshire, HG3 1DH, United Kingdom


Search OSM notes by ID

Similar to how you can search for nodes, ways and relation ids in the search box, it would be good to have this option for OSM notes as well.

I don't know if it would even be possible to fetch the highest current note id and use that as an upper limit (plus a margin), but there could be a way for iD to recognise that a note doesn't exist for a given id number?
Same could be done for ways or relations where their id number is much lower than nodes.

What would you use it for?
If I see a note that I can resolve, I press Edit on this area.

Well, if there is more than one note to fix in the area, they can be edited at the same time.
Just like with you can do with a node or way id just now.
Would also help when trying to find the next note to edit if there are many notes in the same area. Going directly to it is better than dragging the map around with all the OSM data, trying to find it.

This was fixed in #10062


Should I need to set the "Debug server host & port for device" on android in or to do Lazy component/bundle loading?

Ask your Question
I have some components lazy loading using react.lazy() and react.Suspense.  This works fine in the browser, but when I port the component code to react native and use nativepack/repack on my Android device, it fails with a network error trying to reach localhost/<IP_ADDRESS>:54571.  Then it follows immediately with an error pointing to the bundle corresponding to the lazy loaded component.  That looked suspicious to me so I went to the debug menu for the device application and changed the 'Debug server host & port for device" to be my (local external IP address):54571 (e.g. <IP_ADDRESS>:54571).
This worked, but is not documented as a necessary step in the instructions, so I was wondering if that is the intended behavior?

BTW, I am running in debug mode.
It turns out I cannot start the application with the Debug server host & port for device set to anything.  If I do, it will never see the server.  I'm not sure if this is because the actual worker port is randomly assigned, but today (after I remove the "Debug server host & port for device" setting) the app started to load, and I see that it is a different port number (59836 instead of 54571 like yesterday).
At that point it fails again with
ExceptionsManager.js:180 WebpackToolkit.loadChunk invocation failed: Failed to connect to localhost/<IP_ADDRESS>:59836 [NetworkFailure]
followed by
(missing: http://localhost:59836/lib_ui-components_src_components_appLayout_LeftSideNavAppLayout_js.chunk.bundle)
This error is located at:
    in Lazy (created by HNode)
    in Suspense (created by HNode)
    in HNode (created by UseCaseRoot)
    in RCTView (at View.js:34)

At this point, I can set the "Debug server host & port for device" setting to my machine's IP with the new port (e.g. <IP_ADDRESS>:59836) and everything works.

No, you should not need to set Debug server host & port for device. You're right in that the port for each platform specific compiler is randomly generated. If you update to<EMAIL_ADDRESS>this problem should disappear - we've added a code to automatically run adb reverse on that dynamic port. Alternatively you can manually run adb reverse tcp:<port> tcp:<port> and reload the app.
Also please be aware that the support for code splitting is still an experimental feature which we are actively working on, so there might be some problems. Nevertheless I recommend switching to 2.0.0-beta.7 since this one has more code splitting features and it's more throughoutly tested for code splitting.
On a side note. you might want to look into these config options: https://webpack.js.org/plugins/split-chunks-plugin/ to better control code splitting, if e.g. you don't want to have chunks like lib_ui-components_src_components_appLayout_LeftSideNavAppLayout_js.chunk.bundle

@zamotany Thank you very much for your thoughtful and comprehensive reply.


How to report files not used by other workspaces in a private monorepo?

Consider the following monorepo structure:
/apps
- /frontend
- /backend
/libs
- /shared
- - index.ts
- - foo.ts
- - bar.ts

And the content of the /libs/shared/index.ts is:
export * from './foo'
export * from './bar'

Let's imagine neither frontend nor backend app uses the symbols exported by the /libs/shared/bar.ts file. The package is not published either, so there is absolutely no way for the bar file to be used. However, it seems like knip considers it to be used since it is re-exported by the entry file (index.ts).
Is there a way for me to configure knip to report the bar file as unused?

Strictly spoken, the file is used, since it's imported from another file.
What you're probably after (from the perspective of how Knip currently works) is two things:

the option to mark re-exports from non-entry files as unused (an early version of Knip actually had this)
to mark a file as unused when all exports are unused

Will keep this issue open to track interest.

Oh, I must have put it wrong. It's not so much about the file, but unused code. I can see that in the following example foo is reported as unused:
file: foo.js
=======

export const foo = () => 'foo'

file: bar.js
=======

export * from './foo'
export const bar = () => 'bar'

file: index.js
=======
import {bar} from './bar'

console.log(bar())

So I'm looking for a similar behavior even when you import another package in the monorepo. Like if instead of import {bar} from './bar' I had import {bar} from '@libs/bar'

In that case you can use --exclude nsExports to ignore all star imports. nsExports stands for namespaced exports which includes both * and * as MyNamespace exports.

@webpro this does not seem to help... I created a repo with reproduction: https://github.com/zyulyaev/knip-playground
If I run npx knip in the root of this repo (both with and without --exclude nsExports) it reports no issues. However, the bar function defined in /packages/shared/bar.mjs is never used by any code in the monorepo. So I wish I could somehow configure knip to report it as being unused.

Yes, that would come back to my first point of https://github.com/webpro/knip/issues/140#issuecomment-1564644458

I'm not so familiar with knip, but this does not sound relevant to my issue:

the option to mark re-exports from non-entry files as unused (an early version of Knip actually had this)

If you mean that in this example:
file: foo.js

export foo = () => 'foo'

=====
file: index.js

export * from './foo'
export bar = () => 'bar'

since foo is re-exported from a non-entry file it should be treated as unused - I don't think that's the behavior I'm looking for. First of all if we follow this logic, bar will still be treated as used even if it is not used by any other code in the monorepo. And secondly, foo may actually be used by other code in the monorepo.
As far as I understand the core issue here is that packages in a monorepo do not share any information about individual symbols/files being used by each other, right? I concluded that because when I removed index.js from list of entry files - knip reported everything as being unused, even though most of the symbols/files were used by other packages in the monorepo.
I totally get that for packages published to the npm registry it makes total sense to treat everything exported from entry files as being used since you have no way to track actual usages.
But I think being able to track usages between packages in a monorepo could be very useful for cases when the packages are private. I obviously can't speak for the whole industry, but I feel like the pattern of having a single monorepo for everything a company creates has become pretty common.

I think we mean the same thing, but now that I look it up I think I was mixing up the --include-entry-exports option (the thing that Knip had before, but wasn't widely used, also see #73) which is ultimately what I meant, and what I think you want here. It's another way of saying "do not exclude entry files from reporting unused exports".

As far as I understand the core issue here is that packages in a monorepo do not share any information about individual symbols/files being used by each other, right?

Knip should see usage across packages in a monorepo.
And I agree with the overall sentiment of "self-contained repos". Even just for finding "everything that's exported" it could be a useful flag.

I've re-introduced the --include-entry-exports flag in v2.14.0-next.0.
Any chance you could try it out on your project(s)?
You can install with e.g. npm install -D knip@next

:rocket: This issue has been resolved in v2.14.0. See Release 2.14.0 for release notes.

Went ahead for this one and #142 and I think it's working as expected now :)
Thanks again for reporting this.

I run npx knip --include-entry-exports with<EMAIL_ADDRESS>in the repo https://github.com/zyulyaev/knip-playground and here is the report:
Unused exports in namespaces (2)
bar  packages/shared/bar.mjs
foo  packages/shared/foo.mjs

I think foo is not supposed to be reported because it is imported in packages/app/index.mjs via import { foo } from '@kp/shared'?
Am I missing something? Is there any extra config should be set? 🤔


Fix quickstarts to use app-port

Signed-off-by: akhilac1<EMAIL_ADDRESS>Description
Updated quickstarts to use app_port passed on CLI via environment variable APP_PORT vs. hard coding the listening port in quickstarts.
Issue reference
We strive to have all PRs being opened based on an issue, where the problem or feature have been discussed prior to implementation.
Please reference the issue this PR will close: #661
Checklist
Please make sure you've completed the relevant tasks for this PR, out of the following list:

[Y] The quickstart code compiles correctly
[Y] You've tested new builds of the quickstart if you changed quickstart code
[X] You've updated the quickstart's README if necessary
[X] If you have changed the steps for a quickstart be sure that you have updated the automated validation accordingly. All of our quickstarts have annotations that allow them to be executed automatically as code. For more information see mechanical-markdown. For user guide with examples see Examples.

@msfussell @akhilac1
I think we should revert this PR.
In Kubernetes the sidecar injector does not automatically inject an environment variable for APP_PORT. This PR instead should be updated to use a default app port when the environment variable is not set. Azure Container Apps today is consuming these quickstarts and this change impacted them and their customers.
Also a nit from me:
That gitignore file includes a lot of additions that should not be in that file. One example - you can ignore all package-lock.json regardless of folder instead of hardcoding all the paths.

@msfussell @akhilac1 I agree with @berndverst.  Let's revert the PR and try again with a "look up or default" pattern.
This is a good one we can learn from.
The other languages all have the pattern (I think) Bernd suggests. As a check, we should typically look at the other language quickstarts first to compare before changing. And as a rule of thumb, we do Python first, which makes that the source of truth.
base_url = os.getenv('BASE_URL', 'http://localhost/%27) + ':' + os.getenv(                     'DAPR_HTTP_PORT', '3500')
The impact of this issue is pretty big - it causes the kubernetes rollout of the app to hang forever

Ok. Lets roll back . Honestly this is news "In Kubernetes the sidecar injector does not automatically inject an environment variable for APP_PORT" to me and this should be fixed. We cannot have this inconsistency between local development and K8s. It also shows that this PR was not tested on K8s, but in that case we should also build public images for all these quickstarts, so that people can deploy these to K8s. That is also a miss.

Yes, this is a good one where we should test in kubernetes first.  A best practice I've been recommending is do a make validate first on your dev env.

Ok. Lets roll back . Honestly this is news "In Kubernetes the sidecar injector does not automatically inject an environment variable for APP_PORT" to me and this should be fixed. We cannot have this inconsistency between local development and K8s. It also shows that this PR was not tested on K8s, but in that case we should also build public images for all these quickstarts, so that people can deploy these to K8s. That is also a miss. I was not assuming we were doing anything with K8s with these QS.

@berndverst  @msfussell @paulyuk - I am working on fixing the app-port injection. +1 on adding the default value while the fix is work in progress. Will raise a follow up PR


Unable to install Deconz Addon.

HA version 108.6
| armv7l
-- | --
dev | false
docker | true
hassio | true
os_name | Linux
os_version | 4.19.114-v7
python_version | 3.7.7
timezone | America/New_York
version | 0.108.6
virtualenv | false
Going to Superviser - Add on - Deconz.    Unable to install Addon.
From the log:
Pull image homeassistant/armhf-addon-deconz tag 5.3.2.
20-04-19 18:10:49 ERROR (SyncWorker_19) [supervisor.docker.interface] Can't install homeassistant/armhf-addon-deconz:5.3.2 -> 500 Server Error: Internal Server Error ("readlink /mnt/data/docker/overlay2: invalid argument").

Im using a Conbee USB Stick.  I've tried installing the ZHA intergration,  but that also fails with " Unable to connect to ZHA device. .
I've tried the USB stick in all the usb ports.  with and without a zwave stick  also plugged in.  My zwave stick works fine in all ports.

500 Server Error: Internal Server Error ("readlink /mnt/data/docker/overlay2: invalid argument")
This indicates the corruption of your Docker filesystem and is thus not an add-on issue.
You can try repairing it by running ha supervisor repair. The Home Assistant Supervisor will try to restore/fix your Docker.


sbt 1.0.4 puts the -sources.jar and -docs.jar in the compile config in ivy.xml

steps
Using the following build.sbt:
inThisBuild(Def.settings(
  organization := "com.example",
  scalaVersion := "2.11.12"
))

lazy val compplugin = project.
  settings(
  )

$ echo sbt.version=0.13.16 > project/build.properties
$ sbt compplugin/clean compplugin/publishLocal
[...]
$ cp ~/.ivy2/local/com.example/compplugin_2.11/0.1-SNAPSHOT/ivys/ivy.xml ivy-from-sbt013.xml
$ echo sbt.version=1.0.4 > project/build.properties
$ sbt compplugin/clean compplugin/publishLocal
[...]
$ cp ~/.ivy2/local/com.example/compplugin_2.11/0.1-SNAPSHOT/ivys/ivy.xml ivy-from-sbt104.xml
$ diff -u ivy-from-sbt013.xml ivy-from-sbt104.xml > ivy.xml.diff

Results in this gist: https://gist.github.com/sjrd/39b487f3f1f3abb4a5910f583e6d0e9a
problem
The ivy.xml published by sbt 1.0.4 declares the src and doc artifacts in the compile conf, instead of sources/docs as it should.
Concretely, this means that when one depends on such a project, the -sources.jar and -docs.jar are downloaded and added to the compile-time and run-time classpaths!
In the particular case of a scalac compiler plugin, since the -sources.jar also contains the scalac-plugin.xml identifying the jar as a compiler plugin, depending on it with % "plugin" causes two -Xplugin: options to be passed to scalac: one for foo.jar and one for foo-sources.jar. Depending on which one comes first (which I have experienced is non-deterministic), scalac will succeed or fail to load the plugin.
expectation
I expect the same behavior as sbt 0.13, which is also documented as an example of the Ivy documentation for <artifact>: the src artifact should have conf="sources" and the doc artifact should have conf="docs".
notes
In addition to the really serious issue above, sbt 1.0.4 also exposes private configurations used by sbt in the ivy.xml, such as compile-internal.
sbt version: 1.0.4

This is a blocker for us to migrate the build of Scala.js to sbt 1. Currently our CI fails because of this issue, as can be seen in the PR https://github.com/scala-js/scala-js/pull/3200.

source and docs going into compile is an intentional behavior introduced in 2013 by @dansanduleac as https://github.com/sbt/sbt/pull/1016 into 0.14 branch, but was never released, and then became https://github.com/sbt/librarymanagement/pull/25.
If this is causing interference with compiler plugin detection, that might be the buggy code.

IIRC, the compiler plugin issue happened when

I published the compiler plugin with sbt 1.0.4, under ^^0.13.16
then used the compiler plugin from a project using sbt 0.13.16

I think there was no issue when using the compiler plugin from a project using sbt 1.x itself.
So if the changes in https://github.com/sbt/librarymanagement/pull/25 were indeed correct, it seems that something needs to be fixed in 0.13.x for it to be able to correctly resolve artifacts published by sbt 1.x.


Cannot read properties of undefined reading videoDetails

Cannot read properties of undefined reading videoDetails

Do you find a solution ?


Remove engines/node from package.json

Summary

How did you test your changes?

This Pull Request was merged without enough reviews
Please go here to review and +1


misc improvements

Added implicit find&load for the csv partition associated with the selected board
Added new checkbox to enable/disable debug
Improved context checking before writing on disk, less exception, more informative error messages
Created logic to handle mkfatfs args separately

Making NUM_ITEMS dynamic is like opening a pandora box so I'm submitting this before attempting anything.

I tried this PR commit and arduino ide doesn't detect the tool anymore.

I tried to experiment with dynamic NUM_ITEMS I got the UI to work at least but there is no reaction to the interaction I assume the action listeners have to be removed and added again.

makes my ide go into debug/crash mode

I have no idea how to test that on windows without spending a whole day installing and configuring Eclipse, do you have any additional clue on how/why it is crashing?
e.g. what happens in the console if you launch the arduino ide executable from an unprivileged powershell, does it print any error or stack dump?
I'm using OpenJDK 1.8.0_402.

I assume the action listeners have to be removed and added again.

It's not mandatory in every scenario, for example it's possible to just toggle their visibility, then use ::isVisible() to identify active items when processing the list and constrain the view  to N(:checked)+1 lines always visible.
In such scenario the [+] / [-] buttons aren't necessary anymore, an extra line appears/disappears when the last line is checked/unchecked and the list can have a fixed length of 100 elements (max 95 [type=app] entries).

quick fix maybe (and incoming facepalm for myself): create an empty prefs.properties file near the jar file

Disabling the load func from fileManager solves the main func to not go in debug mode but sadly I still don't see the tool if I try to build it. I tried to remove all code from filemanager class and it seems to make the tool visible again so I assume something is not right in that class file with your new modifications. Does it work for you without issue? I do have latest jdk 8 and I didn't have such issue before. I did make empty properties file thinking it doesn't load the jar plugin because of properties file not being found but thats not it clearly. Maybe some code that looks for board info and esp32 sdk and location has be compatible on any system. I will test with mentioned jdk to see if there is any difference.

apparently on windows the unwanted / path prefix is caused by classPath:
String classPath = FileManager.class.getProtectionDomain().getCodeSource().getLocation().getPath();
Path path        = Paths.get(classPath);

It's an ugly fix but maybe blindly stripping the first character can fix that:
Path path                    = Paths.get( isWindows ? classPath.substring(1) : classPath );

apparently on windows the unwanted / path prefix is caused by classPath:
String classPath = FileManager.class.getProtectionDomain().getCodeSource().getLocation().getPath();
Path path        = Paths.get(classPath);

It's an ugly fix but maybe blindly stripping the first character can fix that:
Path path        = Paths.get( isWindows ? classPath.substring(1) : classPath );

Yeah looks like that solved the issue. But should the java class handling paths handle windows why does it start with /

ah thanks for the fix :+1:
I'm not sure why it does this, maybe one of the chained methods doesn't empathize with newer versions of Windows.
anyway, I'll now try to experiment with the JScrollPane and visible/hidden strategy, wish me luck :crossed_fingers:

Although this a major refactor, not much has visually changed, or so I hope.

However there was a major refactor, here's a summary of the last changes:

root frame size is now fixed (resize problems across platforms)
scrollbar is default hidden (fits to heigh) when csv has less than 15 items
rows list can store up to 100 entries
new Class CSVRow with public properties for each cell

size field now restricted to numbers
size field recalculates offsets on any change
checkbox adds or removes a row when toggled

new About button (also rate my HTML skills :rofl: )

Since your changes no longer allow my tool to be tested inside IDE I removed the main func code, if you could maybe fix that in the future its tiresome to build the tool and see the minor ui changes in Arduino IDE instead in Java IDE.  Let me know when you have your last commit in this PR I will update the About image visuals as well as modify the formatting on the class files but if you can do it on your end it would be appreciated.  The tool didn't work because of that warning sign you had inside a comment in FileManager class text encoding didn't fix it so I removed that from the comment (:

Sorry about breaking the commented function, I had no clue how to test it so I ignored it in my tests.

its tiresome to build the tool and see the minor ui changes in Arduino IDE instead in Java IDE

haha I've been doing this all along with a KDE's text editor, the compiler doesn't seem to complain so could it be a problem caused by vsCode, Eclipse or whatever IDE?
Latest changes:

enforced some validation/sanitazing behaviours for cell values during csv import
made the label text on top of the partition list show the csv filename instead of "Partitions", there may be a better place for that.
the "SPIFFS" panel get its title, combo and button-label change dynamically with the detected filesystem in the csv data (subtypes 0x81, 0x82, 0x83 for fat/littlsfs/spiffs)
the offsets are recalculated as often as possible
if a cell has an invalid value, the text becomes red
on cvs import: types/subtypes numeric values are translated to words when applicable
the shrug.png is intended to be replaced, however there's also some uncolonized free area in the UI, under the SPIFFS tools, there's about 170px*384px to fit a visual, logo or photo

Foxusing on the Arduino IDE 1.8.x features, according to platform.txt a couple of things can be overriden directly from the sketch folder, and it takes precedence on the board settings:

partitions.csv
bootloader.bin

One possible workflow:

Select a Partition Scheme from the Arduino IDE Tools menu to be used as a template.
Open the ESP32PartitionTool applet, it'll automatically import the CSV file selected in the Arduino IDE Tools menu.
Modify the partition table as needed.
Use a special button "Save CSV to sketch folder", only confirm if overwriting an existing partitions.csv file.
Compile the sketch, the partitions.csv file from the sketch folder will be used instead of the one selected from the Tools menu.
Rinse and repeat.

Foxusing on the Arduino IDE 1.8.x features, according to platform.txt a couple of things can be overriden directly from the sketch folder, and it takes precedence on the board settings:
* partitions.csv

* bootloader.bin

One possible workflow:
1. Select a Partition Scheme from the Arduino IDE Tools menu to be used as a template.

2. Open the ESP32PartitionTool applet, it'll automatically import the CSV file selected in the Arduino IDE Tools menu.

3. Modify the partition table as needed.

4. Use a special button "Save CSV to sketch folder", only confirm if overwriting an existing partitions.csv file.

5. Compile the sketch, the partitions.csv file from the sketch folder will be used instead of the one selected from the Tools menu.

6. Rinse and repeat.

If you select the Huge App partition scheme Arduino IDE uses partitions.csv file in the sketch directory otherwise it will use the Huge App partitions.csv from esp32 sdk. Maybe auto select this partition scheme when you open the tool? Can the tool do this? Minimizing user input is always good.

Maybe auto select this partition scheme when you open the tool?

I just needed your confirmation on the precedence order before doing that, will ship with the next commits.
Current task: remotely trigger the build project action in Arduino IDE when the build folder doesn't exists. Since it's always picking up files based on the latest build, it feels reasonable to trigger the build from the applet.

Feel free to suggest the workflow you think its optimal for this tool use case. As I said automatic setting of Huge App partitions scheme or any other way Arduino IDE will let you use the custom partitions csv file in the sketch directory will be good for end users it eliminates extra clicks and menu's users have to manually put input effort into.

Latest changes:

more healths check on applet start (less checks later)
better format fo output csv
pref checkbox: confirm creation of empty spiffs.bin when no /data folder exists
pref checkbox: overwrite without confirmation partitions.csv
partitions.csv search order: sketch folder first
bootloader.bin search order and build: getBootloaderImagePath()

I am not happy with the new checkboxes, had to make the label shorter otherwise it would en up overflowed and not visible, I'll probably move these to a settings panel but we need to discuss this before going further.
Settings panel request for comments:
New button with no text, just a gear icon.

Pushing the button opens a popup panel with save / cancel and the following editable options:

CSV overwrite checkBox (checked = no confirmation asked, toggled by "remember my choice" in dialog)
SPIFFS empty warning (checked = prompt for creating or aborting)
Debug (checked = enabled)
full path to mklittlefs + FileDialog
full path to mkspiffs + FileDialog
full path to mkfatfs + FileDialog
full path to esptool + FileDialog
another "About" button
more options ....

Yeah single button opening new panel for those option sounds good. I'm not sure what do you mean when you list the paths for the tools. Why does the user need to see this?

if all values extracted from BaseNoGui can also be maintained from a settings panel, then the applet can optionnally work without the Arduino IDE.
btw I've tried to restore the main() function in ESP32PartitionTool class but I still get the no main manifest attribute or Could not find or load main class error so that's as far as I can go.

The panel is ugly but it's working, and I have struggled with GridBagLayout long enough to strongly believe it should be called ScumbagLayout :-)

The panel is ugly but it's working, and I have struggled with GridBagLayout long enough to strongly believe it should be called ScumbagLayout :-)

Yeah I avoid using gridbag layout at all cost its really a pain. I once used it in my main panel for my app and it was a mess not scaling the same on different platforms, so borderlayout, gridlayout and flowlayout are my top picks for swing. Use gridbag if you want pain in your life : P

well I don't think I'll have much to add after this push

Settings panel is now a popup window
Help panel is now a popup window
General panel has a background image

now the apps needs a logo to replace shrug.png

if you plan to pick a different background image for the main panel, it can be of any size and it'll be stretched to fit, but keep in mind that image must have a very high luminosity otherwise the text will become unreadable.

Appreciate the commits. I will test the latest changes tomorrow and modify if needed. Imagery will be replaced I will put some time into making a logo for this in gimp of course. If you don't plan to commit anymore on this pull let me know I will probably do final touch up tomorrow and accept it if its all working well.

yep I have no further commits for this PR

Changes verified, tool is in working state ready for release. Might have to check background on dark theme OS's before doing a official release with this merge. Once again I really appreciate your contribution to the project. Thanks!

you're welcome!
if you have detailed instructions on how to compile, lint, verify and create the release package, it can eventually be automated with a github workflow:
* on commit/PR/push => build the project (XLint/debug)

* on new tag/release => build the project(release/verify) + build the package + publish the package

then all you have to do is create a new release from github webapp and wait for the workflow to build the jar, zip it and add it as an asset to the release it's being tagged with

Yes I'm looking into automation I always do manual releases zipping jars and so on. For this project all we have to do is run the .sh script and zip the folder and do a new release. I'm going to experiment on this but I already did release it manually (:

yes the build.sh is relevant for building a release package, but more can be done for the other situations.
Local development, pushes, commits and pull requests may need a dedicated build strategy with additional checks (e.g. unused imports, warnings to suppress).

btw it's bad practice to replace assets in an existing release rather than creating a new tag and a new release
whomever downloaded the version from last week has no way of knowing it changed
also you lose history: maybe in some situations the older version could work where the newer wouldn't (old but not obsolete :robot: )


SCAN is not working as expected

Description
I have the code below :
  const foo = await R.scan('0' , 'MATCH', 'A_*','COUNT', '100' )
  console.log(foo)

same as for :
const foo = await router.R.scan(cursor , 'MATCH', 'A_*','COUNT', '100' , function(err, res) {
    if (err) throw err;

    // Update the cursor position for the next scan
    cursor = res[0];

    // From <http://redis.io/commands/scan>:
    // 'An iteration starts when the cursor is set to 0,
    // and terminates when the cursor returned by the server is 0.'
    if (cursor === '0') {
        return console.log('Iteration complete');
    }
    // Remember: more or less than COUNT or no keys may be returned
    // See http://redis.io/commands/scan#the-count-option
    // Also, SCAN may return the same key multiple times
    // See http://redis.io/commands/scan#scan-guarantees

    if (res[1].length > 0) {
        console.log('Array of matching keys', res[1]);
    }

    return scan();
} )
  // console.log(req.query.who, result);
  console.log(foo)

Which is supposed to find the keys matching A_* , however I get irrelevant results back.
In my CLI I can get the desired results. Below you can see both logs from my CLI vs node-redis.
How can I get the relevant results?
Node.js Version
19
Redis Server Version
7
Node Redis Version
4.5.1
Platform
ubuntu
Logs
Output from my node-redis command :

{
  cursor: 40,
  keys: [
    'E_19',
    'K_1',
    'X_English_shan',
    'A_t1',
    'A_global_ngilizce',
    'English_speaking_medium',
    'A_shan2',
    'F_1',
    'English_speaking_easy',
    'E_27'
  ]
}

output from my cli with command :  scan 0 match A_* count 1000

1) "0"
2) 1) "A_t1"
   2) "A_global_ngilizce"
   3) "A_shan2"
   4) "A_yasemin"
   5) "A_myself"
   6) "A_global"
   7) "A_admin"
   8) "A_berkay"
   9) "A_shan"
>

const reply = await router.R.scan(0, {
  MATCH: 'A_*',
  COUNT: '100
});

// reply.cursor = the next cursor
// reply.keys = the current chunk

BTW, you can use the built-in scanIterator function:
for await (const key of router.R.scanIterator({})) {
  console.log(key);
}

see https://github.com/redis/node-redis#scan-iterator for more details


docs for python async base sdk alpha

One missing comma (see comment)
Another thing is on some of the bullets we end with '.', whereas some have no '.'


Add pre-commit overview to the dev standards

@WillDaSilva - This is great, thank you for writing this up!
Is there an 'auto-fix' command we can include here for local fixes? Or does pipx run pre-commit also apply fixes?
And same question for CI workflows. I think pre-commit.ci has an auto-fix command we can put in a comment, but it doesn't match the traditional slash command style, and I can never remember the exact text I need to type to execute it.

pre-commit.ci autofix

There we go ☝

Is there an 'auto-fix' command we can include here for local fixes? Or does pipx run pre-commit also apply fixes?

@aaronsteers pre-commit doesn't have special handling for auto-fixes because it merely runs the underlying tools. Ruff, pyupgrade, isort, Black, etc. are what make the changes to your files. A pre-commit check will fail if any files are changed while it is running.

And same question for CI workflows. I think pre-commit.ci has an auto-fix command we can put in a comment [...]

The pre-commit.ci GitHub app will run pre-commit run --all-files on each PR in the repositories it has access to. The ci section of .pre-commit-config.yaml can configure with autofix_prs: true to commit back any changes that occur while running pre-commit run --all-files in CI.

Got it - makes sense. I think the one change I'd request would be the instructions on how to automatically run pre-commit from within a PR using the (above) method of typing 'pre-commit.ci autofix' into a PR.

Regarding auto-fixing PRs without requiring the command, I think we should gather broad concensus before turning that on, since (as previously discussed), it can create merge conflicts for the developer and could be somewhat obnoxious if not expected.
Related: do you know if autofix from pre-commit.ci also works on forks?

@WillDaSilva - Thanks for catching me up on that. My message re: conflicts were relative to if the commit goes back to the same PR, versus the commit being created in a new PR.
I've seen this run on some repos and I'm happy with the flow I've seen. No blockers, except it would be nice to have a bit more about "what to expect" in this docs update too.


Play longer text

Hi
Is there a way to play a longer text without splitting it ?
using azure tts
/DKR

hi
maby something like a  in the tts node "split text after x char, 0=auto (type number)"
and in the code
if (splitTxt == 0)
use exsting code
else
simple hard split after x char, if you want to bi nice, then split at last space :)
fi
/DKR

A suitable way can be a setting to comoletely enable/disable split.
Would be ok for you?

<EMAIL_ADDRESS>is out with settable text lenght. See the README for that.


dst is not properly supported

When dst occurs the prices are still getting generated with the old timezone.
This is because timedelta won't update the tzinfo
I have a fix for that, just need to upload it.

fixed in a67cc1b28a5e7958210a5a383bbd094ad41506d0


Import Error

Describe the bug
Erro when importing from auto_tensorflow.tfa import TFAuto

I find the solution it was just by re-initializing the environement.
Thanks


Missing translation (updater)

There is a automatic notification when the updater encounters a problem.
Expected Behavior
The notification should be translated into the selected language
Current Behavior
The notification is in English
We have experienced issues with our updater. Please follow _ the instructions _ to fix the issue.
Screenshots (if appropriate):

Possible Solution
Please add the string in the code as translatable (if not already), and add it to Pootle to let the community edit the string in there language.
Your Environment

Franz Version used: 5.0.0-beta.12
Operating System and version: Kubuntu 17.10

@mroeling Messages like this are coming from the API and are some kind of general/emergency notification system when I really need your attention or whenever I have messed things up really bad with e.g. the updater.
In almost every case, the text of the message is very specific that can't be planned/translated in advance and should definitely not require an app update.


Psychatrist backend flow integration with frontend

integrate void Psychatrist frontend with backend to make it dynamic
@Abijith27UK @Coderlearner41

Thanks guys