[SPARK-19644][SQL] Clean up Scala reflection garbage after creating Encoder (branch-2.2)

What changes were proposed in this pull request?
Backport #19687 to branch-2.2. The major difference is cleanUpReflectionObjects is protected by ScalaReflectionLock.synchronized in this PR for Scala 2.10.
How was this patch tested?
Jenkins

cc @cloud-fan

LGTM

Test build #83702 has started for PR 19718 at commit 7bff354.

Test build #83702 has finished for PR 19718 at commit 7bff354.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/83702/
Test PASSed.

Thanks! Merging to 2.2.


How to draw a tournament record

I want to draw the pgi2018_tpp tournament record
But drawing the result is not a normal game video
`
pubg = PUBG(api_key, "pc-tournament")
player = "WTSG_vard"
match_id = "917ff3af-8317-4146-bba7-a13b33fdc237"
match = pubg.match(match_id)
print(match.map_name, match_id)
match_telemetry = match.get_telemetry()
match_telemetry.playback_animation(
    "secret.html",
    zoom=True,
    labels=True,
    highlight_teams=["WTSG_vard"],
    highlight_winner=False,
    label_highlights=True,
    size=10,
    end_frames=60,
    use_hi_res=True,
    color_teams=True,
    interpolate=True,
    damage=True,
    interval=1,
    fps=30,
)

`

I think this is not a normal playback.

That's really strange. I'm guessing something in wrong with the telemetry data. I'll take a look at the telemetry for that match. Maybe the tournament telemetry is different from normal game telemetry.

Could this be a match that was just a warmup? Have you tried other matches from the same tournament?

I think this is just a warmup match. If you generate a visualization for the same game but with zoom=False you can see that players landing in the water drown quickly, and after the circle passes through the Northwest part of the map, the players die to the blue zone shortly after.


Will rails_admin work with Rails 5 --api?

Since most of view-specific gems and midlewares are not present in API-Only Rails 5 project, will rails_admin work? Do I have to manually add something?

Should theoretically still work since this is a self-contained Rails Engine

Going to download --edge and test it tonight.
:+1:

did that worked @goocastro

Waiting for first RC ;)


server always sends 404

I have a tiles directory with myeurope.mbtiles. From which I run all sorts of pmtiles serve . variants. I am trying the MapLibre example. No matter what I try I always get a 404 response. I actually also don't understand if the URL that goes to new pmtiles.PMTiles should be "http://localhost:8080/myaustria" or "http://localhost:8080/myaustria.pmtiles"
I Aways get 404 response(s) like this:

The 204 is "No Content" status code.

If you are using pmtiles serve to decode on the server you don't need to use new pmtiles.PMTiles at all, which is for client-side decoding. Access your tiles via /{z}/{x}/{y} URLs.

Thanks for a prompt reply. I quicky tried the example in your CodePen. No matter what url i put in url: below, I always get one of these 404s. Also, can't there be some bug with those %2Fs? Surprisingly. http://localhost:8080/myaustria/metadata DOES return correct JSON response.
2024/06/22 15:53:12 main.go:147: served 404 %2Fmyaustria.pmtiles in 98.708µs
2024/06/22 15:53:30 main.go:147: served 404 %2Fmyaustria in 18.125µs

App.js:
<Map
        style={{ width: 600, height: 400 }}
        mapStyle={{
          version: 8,
          sources: {
            sample: {
              type: "vector",
              url:
                "pmtiles://http://localhost:8080/myaustria.pmtiles"
            }
          },

mapStyle={{
          version: 8,
          sources: {
            sample: {
              type: "vector",
              url:
                "pmtiles://http://localhost:8080/myaustria.pmtiles"
            }
          },

Again, you do not need pmtiles:// for client-side decoding if you are using pmtiles serve on the server side. Please see these docs: https://maplibre.org/maplibre-style-spec/sources/#vector

I was having a seemingly identical issue, for reference I am basing my code on the MapLibre PMTiles example and running the docker go-pmtiles container to serve my .pmtiles file.
I solved the issue by changing the "url" to "tiles" reference, see the *** section in your adjusted code below.
<Map
        style={{ width: 600, height: 400 }}
        mapStyle={{
          version: 8,
          sources: {
            sample: {
              type: "vector",
             ***
              tiles: [
                "http://localhost:8080/myaustria/{z}/{x}/{y}.mvt"
              ]
             ***
            }
          },

This is what @bdon mentioned above, I'm just adding the example code as I missed the "url" -> "tiles" at the start when working on it myself. Hope this helps.

@GridGrapher thanks for posting the example, I updated the JS code here with a comment:
https://github.com/protomaps/PMTiles/pull/417/files
If you are using go-pmtiles you don't need to pay attention to any of the client-side PMTiles code at all, you can just access it from MapLibre like any typical ZXY URL the way most of the MapLibre documentation shows.
Where it can get confusing is url and tiles: https://maplibre.org/maplibre-style-spec/sources/

tiles is a array of ZXY endpoints, because historically many APIs had multiple mirrors under different subdomains to improve performance
url usually loads a TileJSON https://github.com/mapbox/tilejson-spec endpoint. This has a few advantages over using a ZXY url, it pre-populates the min/maxzoom. You can access TileJSON from go-pmtiles at http://localhost:8080/myaustria.json but it requires setting the public url initialization variable to generate proper URLs.


Adding section headings to autoscaling page

This PR adds below section headings to the autoscaling page:
What it is
Problem it addresses
How it helps

Hi! Just a very small suggestion. Make table header first letter caps. Title, Status, Category ! It will be clean and clear for readers.

@Garima-Negi
autoscaling falls under "property" category which doesn't need those headings. Just the definition is sufficient (refer style guide for more info on this)


shakiness in IE 8/9 but using latest version

Hi
I am using 0.6.2 and I am still getting the shakiness when scrolling in IE8 and 9. it's definitely working great on webkit and firefox but not IE of course. Any ideas how I can fix it?

Hi. Is smt change in shaking on IE? (11 particullary)? As milo says, one new line to JS dont correct this on IE11.


Too many service times generated

Summary
Description of the question / problem here.
Description:
I am initialising all my customers in one go is this implementation wrong
Code Snippets

Screenshots

Is your serviceTime.get() only utilised here?
Also, you should be getting your service time just when the customer is about to be served only i.e. in your Serve event (serviceTime.get() + arrivalTimes.get(i)) Not when the customer arrives.

Is your serviceTime.get() only utilised here?
Also, you should be getting your service time just when the customer is about to be served only i.e. in your Serve event (serviceTime.get() + arrivalTimes.get(i)) Not when the customer arrives.

yup its only used this one time, so I cant call all the service times first in that one loop correct?

Call it in your serve event

so after i declare
public double getServiceTime() {
return this.serviceTime.get();
}
i only can use getServiceTime within the service class? Or should I not use it at all after that

if your program calls the supplier at the right place correctly and you still see this error it means there is some logic error regarding how your customer is served. For some reason the number of supplier called is checked before codecrunch continues to grade your program so if for example the correct output is 12 served 1 left your program evaluates 13 served 0 left (in this case your program would have called the supplier 13 times) you will see this error

@weiyangng After u declare getServiceTime() in customer, u can use the getServiceTime method outside of customer class, but only once. And u have to make sure you call it during serve event so that customers who decide to leave wont get a service time (also because of the sequence of service times but thats another problem which wont exist if u call getServiceTime in your serve event :D)

yup if i remove all other uses of my getServiceTime the error disappears, but now how would I update the next available time and how long the customer stays for now without having the service time.

@weiyangng Let me give you an example and see if you can change your implementation accordingly.
Customer A is served by waiter A for 1 hour(? forgive me i dont remember the units )
Customer B comes and waits in the queue for waiter A
Customer C comes and waits in the queue for waiter A
Customer A is done being served by waiter A
Customer B is being served by waiter A
If you see the above example, customer B and customer C are waiting in queue for customer A to finish being served by waiter A. However, both do not have a "service time" in the queue. It is only when customer A is done being served by waiter A, then the serve event for customer B is triggered and then customer B is given a service time.
How u want to implement this is up to you, but from what you have done there are quite a few things to change (for example you will need to allow customer C to wait for customer A and B, but then you only know how long customer C waits for customer A, and only when customer A is finished then u will know how long customer C waits for customer B.
For what I have done at least, wait returns wait until serve can be called. But there are probably other better ways to implement this.

Also if i were to add, in your code, as long as service time is still being generated for customers who leave and do not get served, then you will still keep seeing the "Too many service times generated error"


Make binary install paths absolute to trigger CF relocatable patching.

Checklist

[x] Used a personal fork of the feedstock to propose changes
[x] Bumped the build number (if the version is unchanged)
[] Reset the build number to 0 (if the version changed)
[] Re-rendered with the latest conda-smithy (Use the phrase @conda-forge-admin, please rerender in a comment in this PR for automated rerendering)
[x] Ensured the license file is being packaged.

Trying to add @rpath or $ORIGIN to the dynamic library paths during linking/runtime is tricky.  This PR makes install paths (and therefore -install_name) absolute, which should trigger the conda-forge patching that makes binaries relocatable (i.e. adding @rpath/$ORIGIN). Also adds some print debugging to the shared libraries to help diagnose this PR.

I decided to just compile and link with absolute paths, rather than twiddling with @rpath or $ORIGIN.  CF knows how to patch those better than I can, so I let their compiler toolchain do that for me.  It seems to have worked.


Remove API for listing all entities in namespace

Proposed patch for https://github.com/apache/incubator-openwhisk/issues/3153.

@csantanapr The node runtimes have been updated, and the CLI as well. I think this is ready then.

pg5/104 🏃

In general this PR looks good to me.
But this will be a breaking change in our api, right?
Does this has to be communicated to the community and customers of all the OpenWhisk-installations before we merge it?
And what about the cli command wsk list? Will the CLI make 4 requests instead?

@cbickel<EMAIL_ADDRESS>also I've already updated the CLI and npm openwhisk to sugar the call (and make 4 calls instead).

See PR: https://github.com/apache/incubator-openwhisk-cli/pull/191
"Handle namespace API listing on the client. #191"

@cbickel OK to merge this?

@csantanapr As you are the only Assignee and not one of the Reviewers, you can decide.


Add calculation of structure using q4-a6 maps

This should move away from 2d mps, but rather towards a neural network or so. Check previous work on the ml presentation.


Custom exception class for network image failure

Use case
I'm loading an image from the network, and it is possible that the image won't exist, at which point I'll get back 404. I want to display a specific widget if I get back 404, unlike any other http error/status code.
Currently, I need to check the string message for "statusCode: ${response?.statusCode}" and extract the status code from it.
Proposal
Use a custom exception class and give it the status code, which can be caught and cast and then easily extract the status code from it.

@matanshukry As the PR was merged, can the issue be closed?

Yeah; I should of done it back then my self, my bad. Thanks!


Add ↑ahead ↓behind to status bar

adds a Branch struct to hold references to calculated data to be shown in the UI.
display the branch name in the status bar
display the ahead/behind details to status bar

Note: there is definitely an issue if the folder doesn't have a git repo initialized.

Looking very cool. Sorry haven't had time to review it in the last week. Will back to more rustiness after this week! Maybe you can even walk us through it in the rust session?


Allow color and label options for jest-diff

🚀 Feature Proposal
Allowing passing custom colors/labels to jest-diff for use in the output.
Motivation
I'm using jest-diff in titanium-codemods, which is similar to react-codemod and uses jscodeshift to run transforms against code.
When a users asks for no files to be modified via the --dry-run flag, I output any differences by diffing the modified source, and the original source. The current jest-diff looks a little strange when I do this as the added code is always colored red with  +, or green with - depending on which way round I choose. Both of these match the jest ecosystem with snapshots but don't fit for anyone attempting to use jest-diff in a different context.
Showing changes for /Users/eharris/plainalloy/app/lib/appinfo_package.js
- After
+ Before

- `${Ti.App.name} ${Ti.App.version} ${Ti.Platform.name} ${Ti.Platform.version}`
+ `${Ti.App.getName()} ${Ti.App.getVersion()} ${Ti.Platform.getName()} ${Ti.Platform.getVersion()}`

Example
I would imagine this would be implemented as parameter in the diffOptions type for jest-diff. Maybe like below, which fits in with the existing API
const changes = diff(changedSource, original, {
	aAnnotation: 'After',
	aLabel: '+',
	aColor: chalk.green,
	bAnnotation: 'Before',
	bLabel: '-',
	bColor: chalk.red
});

I'm unsure however as to whether I like the aColor/bColor argument. It seems odd to me to tie this specifically to something like chalk, but I guess the typedef  is just an argument that takes a string and transforms the string as desired not a specific recommendation.

Just a note that I'd also be interested in implementing feature if it sounds good to the maintainers

Thanks for the proposal, this sounds like a reasonable feature addition to me. We should probably spend some time to design this in a flexible way though.
@pedrottimark Thoughts on this?

Yes, the proposal makes sense. Two details come to my mind in this moment:

The colors than green and red are okay? For example, dim for unchanged lines. (This is example of pay off for already having replaced bgGreen and brRed with inverse :)
Is it okay to assume (restrict) that aLabel and bLabel are single-character strings?

@jeysal Your thoughts on flexible design are welcome, since you also have independent use case.

I like this idea! Make sure whatever design you come up with also handles word diffing, not just line diffing

Regarding API design:
I'm wondering if something like aLabel is necessary at all if we have aColor (which I would rather consider something like a "line mapper")? If aColor is a chalk function, it will already wrap the text with leading and trailing characters, so it could add a + in front anyway

@ewanharris With #8572 it looks like this issue has moved to the front burner.
Here is a rough draft of options for you to critique:
export type DiffOptions = {
  aAnnotation?: string;
  aChar?: string; // default '-'
  aColor: Colorer; // default chalk.green
  bAnnotation?: string;
  bChar?: string; // default '+'
  bColorer: Colorer; // default chalk.red
  cChar?: string; // default ' '
  cColorer: Colorer; // default chalk.dim
  expand?: boolean;
  contextLines?: number;
};

I changed xLabel to xChar because annotation and label seem like synonyms.
Is is reasonable to require in API contract that xChar is single character string?
Is c mnemonic for common lines? I am open to other suggestions.
Does your tool need to substitute default yellow color for “patch” lines if expand: false

@SimenB The prototype pictures that we will soon make public confirm that chalk.inverse to highlight substrings communicates as clearly for optional colors as for default green and red.
@jeysal To keep from coupling too closely with chalk let’s separate the char from the colorer. Also as we look ahead to data-driven diff when some change lines have common color substrings (for example, key of property whose value has change) it becomes necessary to call the change colorer on the preceding and following substring, so that dim substring matches common lines instead of becoming almost illegible dim green or dim red, or whatever custom color.

@ewanharris

Do your codemods call jest-diff with non-default values of contextLines and expand?

What do you think about option to display number of changed lines following annotations?

- Before  -1
+ After   +1

- `${Ti.App.name} ${Ti.App.version} ${Ti.Platform.name} ${Ti.Platform.version}`
+ `${Ti.App.getName()} ${Ti.App.getVersion()} ${Ti.Platform.getName()} ${Ti.Platform.getVersion()}`

You might be interested in getDiffString added in #8528 for next minor version of jest-diff

Is is reasonable to require in API contract that xChar is single character string?

I think anything "character" or "char" might be dangerous in a Unicode context because it could be misunderstood as "byte", which is often the same thing as "char"

What do you think about aSymbol bSymbol cSymbol and the API contract is same width in monospaced font?
An example that comes to mind for third-party dependent is aSymbol: '<' and bSymbol: >'`

@pedrottimark, sorry for my radio silence here. I'll try and find some time in the next few days to respond

Do your codemods call jest-diff with non-default values of contextLines and expand?

I'm passing in expand: false and contextLines: true, seeing as I'm passing these in I'm guessing they're not the default

What do you think about option to display number of changed lines following annotations?

That looks ace, it makes it really easy to glance and see how many changes there are easily

You might be interested in getDiffString added in #8528 for next minor version of jest-diff

I'll take a look, that does look pretty good for my usecase

Other than the comment from @jeysal that interface looks good to me. I could see some confusion over the usage of c maybe the full word common could be used instead?

@ewanharris

Yes, I agree common is better than c as prefix and am open to other terms that you suggest
For your info, the contextLines optional property has number type with default value 5 so if that works for you, then you can omit the property, because it is ignoring boolean value true


Find widget history lost from untitled file when the file is saved

Open new untitled file with some text
Write complicated regex in find widget
Save the file
Open find widget, see that the find history is gone

But you can open a new untitled file to see the history. It seems like all untitled editors share find history and all real file editors share find history? Why are they separate?

Assigning to November for investigation

History is per find widget and not sure how find widget is created for these editors. Hence forwarding to editor land.

Interesting idea but we are not going to implement in the near term.


Find packages by keyword

It's a very common need to be able to find packages according to one or more keywords.
It is possible with the npm API, but it's undocumented, slow, and you can only fetch by one keyword at the time.
You already have the data, so would be nice to expose a keyword API endpoint.

Agreed.

@sindresorhus How do you expect the keywords matching to happen? Exact match or some degree of fuzziness similar to the search term?

@sindresorhus please answer on #29, closing this as duplicate

Exact. I would like to find, for example, all packages with the keyword gulpplugin. I wouldn't want grunt tasks to show up then, just because they have the gruntplugin keyword, which is very close.

@sindresorhus Aright, will do exact match.

@sindresorhus another question, if you specify multiple keywords do you expect the operator to be AND or OR?

Hard to say. I can't think of when I would need multiple keywords at all. I guess if you really want it and there has to be only one of those operators, I would go with OR, as it's unlikely many packages has the same multiple keywords.

Agree, thanks for the feedback!


Can't update the payment status by Dashboard order menu

What I'm trying to achieve
…
I can't see any way to update the order payment status by manually using dashbord
Steps to reproduce the problem

Simply create the one order by using storefront with 'Dummy provider' and complete the order with 'Pre-authorized' status
After that login the Dashboard and check the latest order
There is no option to update the payment status by manually.

What I expected to happen
…
shop Admin can able to update the order payment status by using Dashboard
Screenshots

System information
Operating system:  windows 10
Browser: chrome

The only way you can changes payment statuses from the dashbaord is by performing actions such as "Capture", "Refund" or "Void" which are available in the order details view (depending on the current state of order and payment).


feat(screencast): new recordVideo option

closes #994

@pavelfeldman @yury-s I'm dropping the obsoletes videoPath and videoSize options from .NET in favor of the new recordVideo.
I think we don't need to leave obsoletes fields in .NET and Java in a v0 stage. What do you think?

I think we don't need to leave obsoletes fields in .NET and Java in a v0 stage. What do you think?

Agreed. I'm planning to drop obsolete fields in Java as well.


docs: update docs with installation instructions

add installation section where user is instructed to either download the .bat file or manually clone the repository themselves.

Waiting for #40


Finalize and replace app check loading logic in -[GIDSignIn authorizationRequestWithOptions:completion:]`

The current implementation dispatches async after waiting 1/2 second to ensure that an activity spinner is displayed to avoid flashing. We should update the logic to instead do the following:

If the call to app check completes before some short threshold is met, just carry on without any loading screen.
If that threshold is exceeded, then display a loading screen for at least 1/2 second.
After displaying the loading screen for 1/2, complete when callback is received from app check.

Resolving as addressed by #331


How to Sync in scheduled time

For example, 3 minutes sync one time.

There is no scheduler support at this point of time.

There is no scheduler support at this point of time.

If I implement this, would you like to merge it?
From my use case, my Obsidian will not restart in several days, I think it will be good if there is an option to sync automatically in several hours.


chore: update examples for apidocs

Signed-off-by: Nitish<EMAIL_ADDRESS>

:tada: This PR is included in version 0.1.6 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


failed to build docker image

I got the following error when run " sudo  docker build -t vicuna_docker ."
ERROR: failed to solve: error getting credentials - err: exit status 1, out: Error calling StartServiceByName for org.freedesktop.secrets: GDBus.Error:org.freedesktop.DBus.Error.TimedOut: Failed to activate service 'org.freedesktop.secrets': timed out (service_start_timeout=120000ms)

Resolved the issue with
sudo apt install gnupg2 pass


[iot-modelsrepository] remove product slug from samples

/cc @YoDaMa

/azp run js - iot

@chradek Can you share the motivation for removing the product slug here?

Closing as this change was already made in another PR. The motivation for removing it was because the product slug wasn't valid.


Update Composer dependencies (2021-01-19-00-13)

Visual regression test passed!
View the visual regression test report

Visual regression test passed!
View the visual regression test report


Configuring IaaS failed wtih EOF error

Hi,
I deployed an ops manager (v 2.0 build 255). I am trying to configure the Iaas and directory by running the following command:
om -k -t https://ops_manager_vm_ip -u admin -p '****' configure-bosh --iaas-configuration "$iaas_configuration" --director-configuration "$director_config"
where iaas_configuration is something like:
{
"vcenter_host": "192.168..",
"vcenter_username": "",
"vcenter_password": "",
"datacenter": "my-dc",
"disk_type": "thin",
"ephemeral_datastores_string": "iscsi0",
"persistent_datastores_string": "iscsi0",
"bosh_vm_folder": "pcf_vms",
"bosh_template_folder": "pcf_templates",
"bosh_disk_path": "pcf_disk",
"ssl_verification_enabled": false,
"nsx_networking_enabled": false,
"nsx_address": "",
"nsx_username": "",
"nsx_password": "",
"nsx_ca_certificate": ""
}
and director_config is like:
{
"ntp_servers_string": "*****.com",
"post_deploy_enabled": true,
"resurrector_enabled": false,
"database_type": "internal",
"blobstore_type": "local",
"director_worker_count": 5,
"director_hostname": ""
}
I got the below error:
could not execute "configure-bosh": tile failed to configure: failed to POST form: Post https://ops_manager_vm_ip/infrastructure/iaas_configuration: EOF
What might be wrong here? Where can I get detailed logs and debug this issue?
Thanks!
Yong

Hi @budaozhao we only support users who have used the Pivotal Network release of the pipelines, or a tagged version on GitHub. Are you using the pipelines in such a way whereby you are making modifications - you should not need to run a api call manually, for instance. Thanks.

Thanks for the reply. I see. To your question, no, so I shouldn't ask question here. Sorry.  But are you aware of a place where general ops manager issues are discussed?  Thanks,

Hi @budaozhao are you a customer of PCF?

@abbyachau Strictly speaking I am not. I am from a partner company where we have access to and use pcf components to build a testing environment.  Thanks,

Hi @budaozhao do you have a Pivotal contact you can reach to help you get a hold of the internal teams? Can you tell me what the name of your partner company is?

@abbyachau I don't have a Pivotal contact. I would love to get connected if this is doable.  The company I was referring to was VMware.  For this particular issue I think I have done basic triaging with reasonable amount of details that I can provide if it helps identifying the problem.  Thanks regardless,

@budaozhao thanks - can you please provide an email address we can contact you on? I've checked your profile and was unable to locate one, thank you.

Sure. It's<EMAIL_ADDRESS>I just added this to my profile as well.  Thanks!

Just to give an update, based no my yesterday's debugging,  I suspected that it is more likely a client side issue, although I am not 100% sure at this point:  I enabled the nginx debug log on the ops manager.  Nginx got the first few requests (to GET some info and do authentication) generated from the om configure-bosh command. Those requests succeeded. But the server never got the POST request to update the config (POST /infrastructure/director_configuration HTTP/1.0). I could see from the nginx log that after a while the connection was shutdown by server.

Hey @budaozhao thank you! Do you have a work-related email you could pass through instead? Thanks!

It's<EMAIL_ADDRESS> Thanks!

@budaozhao thank you, I'll get in touch with relevant emails. I've also just noticed that you are asking questions about the om tool - you could also try to create an issue in that repo as well. We'll be in touch.

Sure. I created an issue there and I am now working with them for further rootcausing. Thanks for your suggestion.


[WIP] Meetup rsvp integration

Haven't included suggesions from @aktech on @CuriousLearner 's PR.

@akash-47 Do you have time to take this forward?

Apologies for not replying earlier. I wont be able to work on this for the next two months.
Can someone else take this up?
Thanks.


Browser paths

Browser paths need to be queried for instead of using hard coded paths.  Different installs may and do use different paths.

Hello,  I worked a solution for the hardcoded paths together with an enhancement to easily pass additionnal inline commands to the browser.  I also added a switch to force killing of existing browser without a prompt.  This is my first contribution to GitHub.  If I understand, my next step would be to start with a pull request and submit my code.   I know how to test VBA in Excel but not with GitHub.

Please export the VBA [class] module(s) from Excel and make a pull request against the corresponding files in the src/ directory.  After review and merge I will commit a new version of the Excel files in dist/ directory.  Most of my testing is also in Excel, I just export the modules as text to allow diff'ing and usage with git.  Thank you.

When I upload my files, there is a choice for commit directly to main branch or create a new branch... Which one is best ?

You can use the main branch.  For other projects, a topic branch may be the better option, but for this project that is just unnecessary complication.

I can't figure out how to undo commit or refresh my fork with the main branch...

PR with implementation merged.  Thank you.


initial assumptions for ts

In this  PR initial_assumption with smoothing+autoregression was removed due to Unable to allocate 44.9 GiB for an array with shape<PHONE_NUMBER>, 3) and data type float64 on fit_pipeline stage in test_pseudo_remote_composer_ts_forecasting test. There is a need to figure out what causes this error and fix it.

There is no problem with test now.
Initial assumption with smoothing+autoregression is added in https://github.com/aimclub/FEDOT/pull/1153.


Add German translation and simplify translation workflow

Hi there,
I've taken the liberty to add a German translation - and in the process tooled up the translation machinery a bit to accept variables (to simplify the translation strings).
Also I've fiddled a bit with the documentation. :)
Would you accept that?

Sure, merging and making a new release thanks

Thanks!


Implementation of NSBytecountFormatter default values

Default values are added.
Unit test for the NSByteCountFormatter added.
Based on comments from the closed pull request #80

looks pretty reasonable to me


Support PHPStan 2.x

Rebased and cherry picked in https://github.com/TomasVotruba/type-coverage/pull/48
Thank you Markus!


[B001259] Rep. Bruce Braley

Rep. Bruce Braley:
http://braley.house.gov
Likely contact form URL to start with:
http://braley.house.gov/contact

YAML file not found. I am working on it.


[Feature Request] Add a Moving Motivators session title

As a Moving Motivators workshop facilitator
I would like to be able to specify a session title ("MM for Sarah's job interview", "MM for agile training workshop")
in order to link a card configuration with a precise event / workshop

Acceptance tests:

[ ] I can enter the session title somewhere and it is nicely displayed above the cards
[ ] Nice to have: the app can save a picture of the session results once it's over (with cards AND title)
[ ] Or, low tech but still useful, when the session is over I can make a screenshot of the result to keep the workshop deliverable

Use cases:
When I am facilitating a collective workshop I can send each participant to the app, ask them to enter their firstname in the session title and send me the result in the end.

Really nice, thanks ! 🙏
Do you have any idea where to enter the session title? Something like a parameter in the url would be sufficient? (ex https://the.url/?title=MySession). We can imagine an input + a button somewhere that generates this url (to share the link).

And then

(+new "export" icon in the toolbar)


ToP claims bedrock is harvestable

When using a ToP helmet and holding a pickaxe, bedrock shows as harvestable, this also occurs with command blocks, so it may occur with other blocks with a hardness of -1

Minecraft 1.10.2
ToP: 1.0.15
Forge : <IP_ADDRESS>6

Fixed next release


Unauthorized status code using SSL connection

Hi,
first of all I really love this library. However I'm facing some troubles trying to load images with an HTTPS connection with a self signed certificate.
My current setup looks like this
let configuration = URLSessionConfiguration.default
configuration.httpAdditionalHeaders = [
      "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=1.0" : "Accept",
      "Bearer \(tokens.accessToken) " : "Authorization"
]

let imgManager = ImageDownloader.default
imgManager.sessionConfiguration = configuration
imgManager.trustedHosts = Set(["staging.mywebsite.com", "api.mywebsite.com"])

KingfisherManager.shared.downloader = imgManager

However setImagealways returns with a 401 status code.

Maybe you swap key and value
configuration.httpAdditionalHeaders = [
     "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=1.0" ,
     "Authorization":  "Bearer \(tokens.accessToken)"
]

Hi @phimage, thanks for your very good hint! Unfortunately I'm still having the same authorization problem

@gregorpichler Can you access your resource with a plain URLSession task?
Kingfisher is using a very simple URLSession way to download image data, so if you can download the images by a session you create yourself, it should also work in Kingfisher.
And instead of modifying the session configuration, would you like to try to use the requestModifier to add the header? It is a suggested way to do such things like header modification. You can find some sample here.

@onevcat thanks for your answer. I've changed my code from modifying the session configuration to requestModifier.
I think the problem is that I need to tell URLSession that it should trust my self-signed certificate, I somehow thought that the option trustedHosts = Set(["testing.mywebsite.com", "api.mywebsite.com"]) will solve the problem. Am I doing something wrong with this setting?

@gregorpichler If your server return you a 401, it means your authorization information is not correct. IMO, that is not the self-signed certification issue here (I am not sure though).
So, you could first try whether you could access your image data by creating your own URLSession and with the token you are using. If the server turns to 200, there must be something wrong in Kingfisher's downloader. Otherwise, it might just because your bearer token is not correct or there is something wrong with your server.
The trustedHosts property should already handled the self-signed certificate for you. Or for a more advanced usage, you could set the authenticationChallengeResponder of downloader and supply your own implementation for the challenge (in this case, trustedHosts will be just ignored)

@onevcat I'm not sure if it works with URLSesssion due to the self-signed certificate. What I can confirm is, that it works with Postman if I turn off SSL certificate verification and use the same bearer token that I'm using in the app.

Is it a POST request or a GET one? By default Kingfisher will use GET method.

Yeah just double checked it, it's a GET.

Ummm.
I turn back to suggest you to try to implement a demo of getting the data with URLSession first. Once you can get the image by an URLSession, we could get to know where the problem exactly happens and give it a fix.
You could ignore the self-signed certification check by setting the session delegate and supply a proper method for challenge (see this for more, the same approach is now used in Kingfisher if you set the trustedHosts).
However, as I mentioned before, it's more likely a token problem instead of certification one, since you already received a 401 from server instead of a certification NSURLError (NSURLErrorDomain Code=-1202). If the issue happens with the certification, you should not have a chance to get a server response at all.

Hmmm I doubt that it has something to do with a token issue, as I'm performing a couple of other requests to the server that are working. For other network requests I'm using Moya, where I set the following manager
`    class func trustCaCert() -> Manager {
    let policies: [String: ServerTrustPolicy] = [
        "testing.mywebsite.com": .pinCertificates(
            certificates: ServerTrustPolicy.certificates(in: Bundle(for: self)),
            validateCertificateChain: true,
            validateHost: true
        ),
        "api.mywebsite.com": .pinCertificates(
            certificates: ServerTrustPolicy.certificates(in: Bundle(for: self)),
            validateCertificateChain: true,
            validateHost: true
        )
    ]

    let manager = Manager(
        configuration: URLSessionConfiguration.default,
        serverTrustPolicyManager: ServerTrustPolicyManager(policies: policies)
    )

    return manager
}`

Is there some similar option in Kingfisher?

Nope. Kingfisher is not a networking request framework at last. It only supplied simple server trust certification. If you need to use a certification in the app bundle, you may need to implement the authenticationChallengeResponder and create it from your bundle cert with SecCertificateCreateWithData yourself. :(

@gregorpichler Hi, any news for this?

@onevcat Unfortunately I'm not having any success on this. I've replaced my self signed certificate with a SSL certificate from a trusted CA and now I can access the image resource with Postman.
However Kingfisher still returns an unauthorized error code. I'm using the code below and if I'm using the accessToken in Postman everything works fine (so it can't be a token issue).
let modifier = AnyModifier { request in
            var r = request
            r.setValue("text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=1.0", forHTTPHeaderField: "Accept")
            r.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization")

            return r
        }

        let url = URL(string: "https://www.mywebsite.com")
        self.kf.setImage(with: url, placeholder: placeholder, options: [.requestModifier(modifier)], progressBlock: nil) { (image, error, cacheType, url) in
            if let img = image {
                self.image = img
            } else {
                self.image = placeholder
            }

            completion?(image, error, cacheType, url)
        }

UPDATE
I've now replaced requestModifier by the following code and now it works.
let configuration = URLSessionConfiguration.default
configuration.httpAdditionalHeaders = [
"Authorization" : "Bearer (user.userData.tokenAuthentication!.accessToken!)"
]
let imgManager = ImageDownloader.default
imgManager.sessionConfiguration = configuration

So it means the issue comes from the "Accept" field in the header? Your server does not expect an accept field but you were sending one?
Would you mind to confirm it so we could decide whether we need to dig it deeper to see where the issue lives indeed.
Thanks! :)

Oh my god, I think I've found the issue (not sure if it would also solve the initial issue with a self signed certificate), the accessToken I've set as value was interpreted as Optional("...") by Swift so I had to force unwrap it. Now it's working fine :)
Many thanks for your patience and keep up the good work

Sorry to open up this issue again, but I'm having similar issues.
I keep getting a 401 even though I verified that manually downloading  the binary data (with a URLSession and data task) works, I get a 200 and the bytes I expect.
I'm not sure why the downloader fails, I double checked that the session token I send is attached through the .requestModifier and I send the correct credentials in the authentication challenge.
I've implemented the ImageDownloader's delegate methods and keep seeing:
Optional(Error Domain=com.onevcat.Kingfisher.Error Code=10002 "unauthorized" UserInfo={NSLocalizedDescription=unauthorized, statusCode=401})
even though I logged the request just before sending:
request: Optional(https://{PATH_TO_IMG_BINARY})
headers: Optional(["{A_SESSION_TOKEN}": "Session-Token", "image/png": "Content-Type"])

PATH_TO_IMG_BINARY and A_SESSION_TOKEN above both contain valid values. When I use a REST client (PAW) and execute the same request I get the correct image back

I've made an convenience extension on UIImageView:

func imageFromEndpoint(_ url: URL, request: URLRequest) {
        kf.cancelDownloadTask()

        let modifier = AnyModifier {
                var modified = $0
                modified.httpMethod = request.httpMethod
                let _ = request.allHTTPHeaderFields?.compactMap {
                        modified.setValue($0.key, forHTTPHeaderField: $0.value)
                }
                return modified
        }
        kf.setImage(with: ImageResource(downloadURL: url),
                             options: [.requestModifier(modifier)])
}

Am I doing something wrong here?

It is not correct here: modified.setValue($0.key, forHTTPHeaderField: $0.value)
I believe which should be modified.setValue($0.value, forHTTPHeaderField: $0.key) instead.

Woops, sorry forgot to update my comment. I already figured my own noobish mistake...sigh sorry for wasting your time, but thanks for responding!


Pitchbend is not cut off with NOTE OFF?

Version
alpha4d
What is the issue?
ShowMIDI shows that the pitchbend signal is continuing after NOTE OFF.
It is disputable if pitchbend bound to a key is sensible. I can see the intention, but it at least does not fit my habits 🤣

Tested code was left in, since removed and verified.


Datasf 1011 handle timeseries

Hi there!
This is a substantial reorg of the code that you had.  The existing data sources don't necessarily include all of the dates for each type, and the sort order is different.  This code hammers through the data to provide a (hopefully) foolproof and correct running totals for cases, deaths, and tested.  The numbers returned approx match those on the dashboard.
https://data.sfgov.org/stories/s/fjki-2fab:

vs this PR:
$ yarn start --location US/CA/san-francisco-county.js
...
 Total counts (tracked cases, may contain duplicates):
   - 2325 cases
   - 50554 tested
   - 0 recovered
   - 40 deaths
   - 0 active

I didn't include hospitalizations, as I didn't really trust the data ... wasn't sure, perhaps you have other thoughts!
Cheers! jz

I get different figures running the same command:
$ yarn start --location US/CA/san-francisco-county.js
yarn run v1.22.4
$ node src/shared/cli/index.js --location US/CA/san-francisco-county.js
⏳ Fetching scrapers...
✅ Fetched 144 scrapers, filtered to 1.
✅ All scrapers are valid!

Begin scraper for San Francisco County, iso2:US-CA, iso1:US
https://data.sfgov.org/resource/tvq9-ec9w.json
  ⚡ Cache hit for https://data.sfgov.org/resource/tvq9-ec9w.json from cache/5709f46145535814393853a9aa10d481.json
https://data.sfgov.org/resource/nxjg-bhem.json
  ⚡ Cache hit for https://data.sfgov.org/resource/nxjg-bhem.json from cache/efc6cf4ee9225ab43bfb398bd535d22e.json
https://data.sfgov.org/resource/nfpa-mg4g.json
  ⚡ Cache hit for https://data.sfgov.org/resource/nfpa-mg4g.json from cache/ca6cc4ba5cf9f476643db827ccd08ffb.json
  🚨 timeseries for San Francisco County: SCRAPE_DATE 2020-05-22 is newer than last sample time 2020-05-17. Using last sample anyway
Finished scraper for San Francisco County, iso2:US-CA, iso1:US

⏳ Normalizing locations...
⏳ Calculating ratings...
✅ Assigned ratings for 1 sources
⏳ De-duping locations...
✅ De-duped 0 locations and found 0 crosscheck failures!
✅ Data scraped!
   - 0 cities
   - 0 states
   - 1 counties
   - 0 countries
ℹ  Total counts (tracked cases, may contain duplicates):
   - 2137 cases
   - 44394 tested
   - 0 recovered
   - 36 deaths
   - 0 active

I suspect it’s because of the stale cache mentioned in https://github.com/covidatlas/coronadatascraper/pull/1022#issuecomment-632813012. I first hit the API on May 18 when I started working on this scraper. The numbers in covidatlas#1022 look identical to the official data back then:
$ yarn start --location US/CA/san-francisco-county.js
yarn run v1.22.4
$ node src/shared/cli/index.js --location US/CA/san-francisco-county.js
…
ℹ  Total counts (tracked cases, may contain duplicates):
   - 2131 cases
   - 44373 tested
   - 0 recovered
   - 0 deaths
   - 0 active

So I’d imagine the numbers you’re getting would start to diverge from the dashboard over time too. Is it normal to have to clear the cache before running a time series–enabled scraper?

Yes it's normal ... though I've never thought about it!  If you rm cache/efc6cf4ee9225ab43bfb398bd535d22e.json it might match. :-)  When the jobs run it clears that cache.

Closing in favor of https://github.com/covidatlas/coronadatascraper/pull/1044.
Thank you very much @1ec5 !

I merged https://github.com/covidatlas/coronadatascraper/pull/1044 into master, deleting this branch.  Thank you again!


ajax call at opening event

how can I force the package  to send an ajax request  at opening event in remote data mode ?

do you mean an arbitrary ajax request or a search request ?

@jpic
actually search request to show in select box

I don't know, let me take a wild guess, have you tried minimumInputLength
?

No
how can I use  minimumInputLength for this purpose ?

Is this question about being able to submit a specific search query when the dropdown is opened for the first time?  This could probably be handled with some logic in the data callback:
    data: function (params) {
      var query = {
        search: params.term ? params.term : 'default query',   // Set a default value for the search query
        type: 'public'
      }

      return query;
    }


Migrate docker/cliconfig to engine-api ?

Hi Docker developers :)
I just heard about this project, and having a officially supported Go binding to interact with Docker API is great.
However, like other Go bindings such as go-dockerclient that provide it, it would be very nice to be able to get a map[string]types.AuthConfig from ~/.docker/config.json/.dockercfg.
In docker/docker, this feature is provided by the cliconfig.
Would it be possible to migrate at least the reading part of cliconfig to engine-api ?
I'd be glad to provide a PR if you like.

I really have mixed feelings about this. That structure is easy enough to build a parser yourself, but I understand that it could be convenient to have a canonical implementation.
FWIW, registry authentication will have some changes in 1.11 that we'd need to consider if we move this forward:

External stores just landed in https://github.com/docker/docker/pull/20107
Long lived tokens rather than user/password will probably land :soon: https://github.com/docker/engine-api/pull/108


Enabling multiple GPUs selection for GradCAM

Hello and thank you for your work.
I slightly changed the code of the Base_cam.py file in order to accommodate the case in which the workstation has multiple GPUs.
I hope that this will make the code even more usable.
Thank you again,
Francesco

Id love to see this being done. For now Ill do a similar implementation in a fork to unblock myself

Hello @jacobgil, I know this is an old PR, but I would like to know whether this is a feature you think would be useful. If so, I can work on it to update it so that it will be ready to merge.
I personally think this might be useful, but before spending time working again on it I would like to understand whether you have plans to include this feature. Thank you!


Request Discord as additional third party authentication

Request to add Discord as an authentication method.
Discord and socialite info:
https://discordapp.com/developers/docs/topics/oauth2
https://socialiteproviders.github.io/providers/discord.html

I'll take care of it

Closed in #904


Implement new streaming ask endpoint (WIP)

Motivation and Context (Why the change? What's the scenario?)
Draft PR for issue https://github.com/microsoft/kernel-memory/issues/100 .
This draft pr was very briefly discussed in discord. The changes still need work.
currently missing:

more examples (serverless, service, curl,...)
Get the streaming working in WebClient, it currently still buffers the response (i was not able to find a fix)

High level description (Approach, Design)
Used existing AskAsync method as reference point for most of the code.
The new streaming endpoint does not return a MemoryAnswer, but returns the actual text result in an async enumerable.
If sources are needed the SearchAsync method can still be used to fetch them with minimal extra performance overhead.

@microsoft-github-policy-service agree

Also I want to note, the way I have this implemented currently is just returning the whole answer as a stream of strings.
This might not be optimal as the code that consumes these methods needs to call SearchAsync() if they want the sources, and this would result in an extra DB query.
Another implementation i was thinking of was returning a stream of PartialMemoryAnswer(MemoryAnswer with nullable properties), with the first object returning the metadata (such as facts), and the parts after the first one only containing their pieces of text.
This would also mean that the object can be extended upon in the future.
example:

var noAnswerFound = new PartialMemoryAnswer
{
    Question = question,
    NoResult = true,
    Result = this._config.EmptyAnswer,
};

StringBuilder bufferedAnswer = new(); // Buffering result in memory to count chars and check if not empty answer
bool finishedRequiredBuffering = false;
var watch = Stopwatch.StartNew();
await foreach (var x in this.GenerateAnswerAsync(question, facts.ToString()).WithCancellation(cancellationToken).ConfigureAwait(false))
{
    if (x is null || x.Length == 0)
    {
        continue;
    }

    bufferedAnswer.Append(x);
    int currentLength = bufferedAnswer.Length;

    if (!finishedRequiredBuffering)
    {
        if (currentLength <= this._config.EmptyAnswer.Length && ValueIsEquivalentTo(bufferedAnswer.ToString(), this._config.EmptyAnswer))
        {
            this._log.LogTrace("Answer generated in {0} msecs. No relevant memories found", watch.ElapsedMilliseconds);
            noAnswerFound.NoResultReason = "No relevant memories found";
            yield return noAnswerFound;
            yield break;
        }
        else if (currentLength > this._config.EmptyAnswer.Length)
        {
            finishedRequiredBuffering = true;
            yield return new PartialMemoryAnswer
            {
                NoResult = false,
                Result = bufferedAnswer.ToString(),
                RelevantSources = citationList,
            };
        }
    }

    if (finishedRequiredBuffering)
    {
        yield return new PartialMemoryAnswer
        {
            Result = x
        };
    }

    if (this._log.IsEnabled(LogLevel.Trace) && currentLength >= 30)
    {
        this._log.LogTrace("{0} chars generated", currentLength);
    }
}

some conflicts to address

some conflicts to address

if it helps - I rebased and fixed some issues => https://github.com/chaelli/kernel-memory/tree/100-streaming-askAsync-response
not sure how to handle this. PR into @JonathanVelkeneers' branch? Or create a separat PR so that the validation tasks can run?
Anyway... probably should do some more testing before that.

some conflicts to address

Resolved these

any reason this is waiting? do we need to add SSE format for the endpoint? (if so - maybe this works https://github.com/microsoft/kernel-memory/discussions/625#discussioncomment-9698298 - did for my quick test in the browser - but my experience with SSE are minimal ;))

@dluc just checking in, can this be merged soon please? We're about to build a UI using Kernel Memory and streaming is a must-have
@JonathanVelkeneers can you please check as well? Thanks heaps, would be so great to have streaming capabilities, and I believe we're not the only one :)

sorry to keep this on hold but I cannot merge yet. I'd suggest to work with a fork not to be blocked. It's an important feature but there's some other critical work in progress.

@JonathanVelkeneers I played around a bit with SSE and now have a working solution that does "clean" SSE (via get). Basically, I use two endpoints - one that starts the answer generation and returns an id and one that then streams the answer:

public static void AddAskStreamEndpoint(
        this IEndpointRouteBuilder builder, string apiPrefix = "/", IEndpointFilter? authFilter = null)
    {
        RouteGroupBuilder group = builder.MapGroup(apiPrefix);

        // Ask streaming endpoint
        var route = group.MapPost(Constants.HttpAskStreamEndpoint, async Task<IResult> (
                HttpContext context,
                MemoryQuery query,
                IKernelMemory service,
                ILogger<KernelMemoryWebAPI> log,
                CancellationToken cancellationToken) =>
            {
                log.LogTrace("New search request, index '{0}', minRelevance {1}", query.Index, query.MinRelevance);

                var askId = Guid.NewGuid().ToString("N").Substring(0, 8);
                s_askStreams.Add(askId, service.AskStreamingAsync(
                    question: query.Question,
                    index: query.Index,
                    filters: query.Filters,
                    minRelevance: query.MinRelevance,
                    cancellationToken: cancellationToken));

                return Results.Ok(new AskStreamResponse { AskId = askId });
            })
            .Produces<AskStreamResponse>(StatusCodes.Status200OK)
            .Produces<ProblemDetails>(StatusCodes.Status401Unauthorized)
            .Produces<ProblemDetails>(StatusCodes.Status403Forbidden);

        if (authFilter != null) { route.AddEndpointFilter(authFilter); }

        // SSE endpoint
        var sseRoute = group.MapGet($"{Constants.HttpAskStreamEndpoint}/{{askId}}", async Task (
            HttpContext context,
            ILogger<KernelMemoryWebAPI> log,
            CancellationToken cancellationToken,
            string askId) =>
            {
                log.LogTrace("Accessing SSE stream for askId '{0}'", askId);
                context.Response.Headers.Add("Content-Type", "text/event-stream");
                if (s_askStreams.TryGetValue(askId, out IAsyncEnumerable<MemoryAnswer>? stream))
                {
                    s_askStreams.Remove(askId);
                    var jsonOptions = new JsonSerializerOptions { DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault };
                    var response = context.Response;
                    if (stream != null)
                    {
                        await foreach (var ma in stream)
                        {
                            await response.WriteAsync($"data: {JsonSerializer.Serialize(new { message = ma }, jsonOptions)}\n\n", cancellationToken).ConfigureAwait(false);
                            await response.Body.FlushAsync(cancellationToken).ConfigureAwait(false);
                        }

                        // Send an end-of-stream event if needed
                        await response.WriteAsync("event: end\ndata: End of stream\n\n", cancellationToken).ConfigureAwait(false);
                        await response.Body.FlushAsync(cancellationToken).ConfigureAwait(false);
                        return;
                    }
                }
                context.Response.StatusCode = StatusCodes.Status404NotFound;
                await context.Response.WriteAsync("Not found", cancellationToken).ConfigureAwait(false);
            });```

When requesting the answer from the browser, this is the basic functionality:
```var response = await fetch("http://localhost:9001/ask/stream", {
  "headers": {
    "accept": "*/*",
    "authorization": "...",
    "cache-control": "no-cache",
    "Content-Type": "application/json"
  },
  "body": "{\"question\":\"was macht viu?\",\"index\":\"viuch-largeembedding\"}",
  "method": "POST",
  "mode": "cors",
  "credentials": "include"
});
const responseData = await response.json();
const askId = responseData.askId;

const sseUrl = `http://localhost:9001/ask/stream/${askId}`;
const eventSource = new EventSource(sseUrl);

let responseText = '';
eventSource.onmessage = function(event) {
    const responeObject = JSON.parse(event.data);
    responseText += responeObject.message.text;
    console.log(responseText);
};

eventSource.addEventListener('end', function(event) {
    console.log('End of stream');
    eventSource.close(); // Close the SSE connection
});```

maybe you can add this to your branch?

@dluc does it make sense for us to rebase this? or will it take much longer to merge?
And @JonathanVelkeneers  if you do rebase (or merge & fix) - I'd suggest you extract the fact generation & token calculation into a separate method - otherwise we'll always need to fix this stuff twice if it changes.
I can certainly help - but I'd rather only invest the time once we know theres a good chance it will be merged

@dluc does it make sense for us to rebase this? or will it take much longer to merge? And @JonathanVelkeneers if you do rebase (or merge & fix) - I'd suggest you extract the fact generation & token calculation into a separate method - otherwise we'll always need to fix this stuff twice if it changes. I can certainly help - but I'd rather only invest the time once we know theres a good chance it will be merged

no worries I'll take care of the rebase ;-)

Is this feature still gonna be implemented?

Is this feature still gonna be implemented?

Apologies for the delay, I had to put this topic on hold, and we currently have two PRs for the same feature. I’ll need to review and decide the best approach. Unfortunately, no ETA at the moment

Update: for this feature to be merged, there's a couple of things to do:

Check this similar PR https://github.com/microsoft/kernel-memory/pull/726 and decide which approach to take
Support content moderation. The stream of tokens needs to be validated while streamed, on a configurable frequence. If at any point the text moderation fails, the stream needs to be reset, e.g. sending a special token or similar.

@JonathanVelkeneers
It would be great if you could complete this feature.
Thanks

@JonathanVelkeneers thanks for helping! - There were two PRs addressing the same feature, and I had to decide between them. The Response Streaming implementation is now merged into main. For more details, please refer to PR #726.


Handle DOS files in SynthonSpaceSearch

Reference Issue
No issue but Igor from Enamine mentioned it was a problem.
What does this implement/fix? Explain your changes.
Uses the RDKit getLine() rather than std::get line() which handles CRLF.
Any other comments?
I think the test is problematic as the newlines are fixed on git checkout, at least on my Ubuntu development area.

In .gitattribute you can control line endings:
path/to/my/file eol=crlf


Missing properties on Itemstack database

There are few missing itemstack properties like keepOnDeath, lockMode, canDestroy, canPlaceOn and dynamic properties. I may make a quick pr on this

❤ Thanks, for the commit.
I made small changes to it:
Added your changes to ItemStackManager().getObject() and ItemStackManager.getManager() so those are updated aswell


Error 500

Expected behavior
Actual behavior
Information about the Issue
Steps to reproduce the behavior

...
...

No details provided


Add bubble configuration

Add bubble customization through remote configuration
MOB-1562

I will provide relatable fixes, related to public access modifiers, font mapping, and color mapping, in the separate PR, for Call and Survey sections

!merge


Adding custom attributes to IDP mapping for SAML flow missing in new documentation

There is brief mention in the github documentation (https://github.com/cloudfoundry/uaa/blob/master/docs/UAA-APIs.rst#identity-provider-api-documentation) about how to configure custom attributes for an IDP configuration for the SAML flow. However, this is not mentioned at all in the cloud foundry documentation.  https://docs.cloudfoundry.org/api/uaa/#identity-providers. Is the functionality still supported in the latest version of UAA? If so, the documentation could be more clear/obvious about how to add custom attributes to the IDP. An example of creating an IDP with custom attributes in config.attributeMappings field would help.

Hi,
colleagues here have some scripts:
https://github.com/PredixDev/uaa-scripts/tree/master/mgmt
This demonstrates the mapping, however I agree with you the standard documentation should contain such examples
regards

This is documented here
http://docs.cloudfoundry.org/api/uaa/index.html#saml


Show reply in thread option for all system messages

Details

We will show reply in thread option for all system messages in NewDot
Fixed Issues

$ https://github.com/Expensify/App/issues/28934
PROPOSAL: https://github.com/Expensify/App/issues/28934#issuecomment-1749306496
Tests

Create a money request
Go to the transaction thread report
Edit any field of the request
Hover or long press over the modified message.
Verify that the reply in thread option appears

[x] Verify that no errors appear in the JS console

Offline tests

QA Steps

Create a money request
Go to the transaction thread report
Edit any field of the request
Hover or long press over the modified message.
Verify that the reply in thread option appears

[x] Verify that no errors appear in the JS console

PR Author Checklist

[x] I linked the correct issue in the ### Fixed Issues section above
[x] I wrote clear testing steps that cover the changes made in this PR

[x] I added steps for local testing in the Tests section
[x] I added steps for the expected offline behavior in the Offline steps section
[x] I added steps for Staging and/or Production testing in the QA steps section
[x] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
[x] I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

[x] Android / native
[x] Android / Chrome
[x] iOS / native
[x] iOS / Safari
[x] MacOS / Chrome / Safari
[x] MacOS / Desktop

[x] I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
[x] I followed proper code patterns (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
[x] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method

[x] If any non-english text was added/modified, I verified the translation was requested/reviewed in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I followed the guidelines as stated in the Review Guidelines
[x] I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] I verified that if a function's arguments changed that all usages have also been updated correctly
[x] If a new component is created I verified that:

[x] A similar component doesn't exist in the codebase
[x] All props are defined accurately and each prop has a /** comment above it */
[x] The file is named correctly
[x] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[x] The only data being stored in the state is data necessary for rendering and nothing else
[x] If we are not using the full Onyx data that we loaded, I've added the proper selector in order to ensure the component only re-renders when the data it is using changes
[x] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[x] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[x] All JSX used for rendering exists in the render method
[x] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG))

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
[x] I have checked off every checkbox in the PR author checklist, including those that don't apply to this PR.

Screenshots/Videos

Android: Native
28934.webm

Android: mWeb Chrome
https://github.com/Expensify/App/assets/129500732/3d2ed64e-db4b-48b5-b410-58d80370fc65

iOS: Native
https://github.com/Expensify/App/assets/129500732/c226cc85-7f1a-47ac-864c-9f81bc19b044

iOS: mWeb Safari
https://github.com/Expensify/App/assets/129500732/e647e1ce-0ea6-48df-919a-017ff0f851b0

MacOS: Chrome / Safari
Screencast from 13-10-2023 10:04:17.webm

MacOS: Desktop
https://github.com/Expensify/App/assets/129500732/d24eedad-41b9-4b4e-baa6-df151e75ebf3

:hand: This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

🚀 Deployed to staging by https://github.com/youssef-lr in version: 1.3.91-0 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

🚀 Deployed to production by https://github.com/marcaaron in version: 1.3.91-8 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅


moved util functions to utils.py, moved probability learners from learning.py to probabilistic_learning.py with tests, fixed typos and fixed imports in .ipynb files

There are some minor conflicts, if you could fix those it would be great. Also, I am going to wait a couple of days for Travis to stop malfunctioning.


Feature Request: Plugable scroll behavior

This is in similar vein to my first comment on issue #2.
It would be great if the scroll behavior could be plugged as an option.

Can you give me an example use case where you would need this?
A simple solution is I could make it so there is a callback on click and then disable scrolling via options.

@jgallen23 I want to integrate toc with deck.js extended deck-hash. You can see a work in progress here.
The assumptions that toc makes are not valid in conjunction with the assumptions deck.js has. When it is possible to override the default click behavior the two could work together.


Add structural viewer to Compare AAs tab

Map mutation frequency onto structures, same as on lineage report tab

Closed by #538


Make the default time durations configurable on User Form Interface

This is a rewrite of https://github.com/discord/access/pull/194 after the discussion in the Discord channel at https://discord.com/channels/1232815453907189922/1306560215130443827.
This PR creates a default configuration file for the access app, and allows an environment-specific override configuration file path to be supplied as a build arg to Docker. See the README for details.
During the build process, craco uses webpack Define plugin to make the access config contents globally available as part of the static build artifacts.
cc @jonathanhle

🙏 this is incredible work thank you so much for fleshing out this proof of concept for dynamically loaded configs.
I have some questions about specific parts of the approach, I don't consider these blocking concerns but am curious about some specific decisions around loading the config from the static folder instead of pre-populating the js with config values. I'll add more detail around specific implementations but this round trip to retrieve config values is my biggest current open question.

Ok. Now you can set a build arg for Docker to use the config override file specified at ACCESS_FILE_CONFIG_PATH.

This is looking much better, thanks for adding this!
I'm going to let @savathoon give it another review when they get a chance before I approve

@savathoon do you have some time to look at this PR this week?

Let us know if there's anything additional to get this merged upstream.


DocsArchive-<IP_ADDRESS>Auto archive content

Please don't merge this PR until target archive repo PR https://github.com/OPS-E2E-PPE/docs-archive-test-source-version-target/pull/197 is merged into live branch.
Auto archive content to https://github.com/opstest2/docs-archive-test-source-version-target.git

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

File
Status
Preview URL
Details

.openpublishing.redirection.json
:white_check_mark:Succeeded

versioningArchiveSourceFolder/TOC.yml
:white_check_mark:Succeeded
View (sql-server-2014 || azuresqldb-current || azuresqldb-mi-current || azure-sqldw-latest || >= aps-pdw-2016 || >= sql-server-2016 || >= sql-server-linux-2017 || sql-server-previousversions || sqlallproducts-allversions)

versioningArchiveSourceFolder/docfx.json
:white_check_mark:Succeeded

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching the docs.microsoft.com contributor guidesPost your question in the Docs support channel


Why data layer has a dependency on the domain layer?

As stated in Clean Architecture, dependencies should point only inwards. This separates layers in a way that they could be interchangeable easily and also decoupled (right?).
In your case, you decided to create 3 layers which have this dependency relationship:
presentation ---> domain ---> data
You use DI for some good reasons (still decoupling, dependency inversion ecc).
However from your build.gradle files, it seems that data has a dependency on domain, while domain doesn't have anything. The dependency is in this way:
presentation ---> domain <--- data
Could you explain me why? Is there something I'm missing?

That's because data layer is implementation of use cases. Domain layer tells what to do and data layer tells how to do.

Yep, because Domain is the most inner layer in this architecture. I'd suggest that you should read those articles again ;)

@lenguyenthanh I think you're confusing the schemes. It's true that in Clean Architecture representation by Martin, Domain Logic is represented as the most inner layer (the "Entities" circle).
In Fernando representation, the Domain layer is intended as the middle layer which implements the Use Cases. The Data layer, in his case, it's the one containing the entities, though the most innner layer.
So, I repeat, this data layer shouldn't have any type of dependency and shouldn't know anything about the outer Domain layer, am I right? @android10

@andrewjohnson90

The Data layer, in his case, it's the one containing the entities, though the most inner layer.

That is wrong, data layer contains data entities and this layer is an implementation detail, it is just your data source and belongs to one of the outer circles.
Domain layer is where you solve your problems and you logic sits. It is the most inner circle on the graph.

@android10 Maybe I'm confusing naming with your example? Being an implementation detail, shouldn't Data be the inner circle? I see logic in Data, not in Domain. You say: Domain contains business rules, Data contains Repository implementation logic, though Domain shouldn't know how data is retrieved and this should be the outer circle.
I'm really sorry if I'm confusing stuff, but I want to understand this properly!

Hi @andrewjohnson90,
i'll join the discussion here, hopefully i'm not to late to this party. I'll do my best to shed some light on this matter as i too had to wrap my head around the concept.
First off, i think the schematics might be a bit confusing as they actually show different things. The one you are citing shows how data flow through the layers, not dependencies or relation of the layers between themselves.

The layers themselves and the relation between them are more onion-shaped. The image below shows how the architecture itself is layered (this is not the same as how this repo implements that layering). The architecture is structured as an onion because each layer depends on the layer below itself. (again, this is the actual architecture and it's layers, not the layers from @android10). As you probably already know, the 2 innermost layers are your core business code. Then comes a layer on how to access that data and rules and this is wrapped by external systems.

I have annotated in horrible red on how @android10 structured his layers on top of this architecture. His Domain layer contains his core business logic and rules. This includes interfaces on how Data is accessed from a Repository. If there were other Services to external apis, these interfaces would be here as well. Remember this layer actually describes the app's inner workings. The Presentation and Data Layer sit on top of this as seen in the onion, so this is why the Data layer depends on the Domain layer.
So the thing to take away from this is that how the architecture is layered and how an example repo like this is layered can look different. I could add (and have) add an Infrastructure Layer, which would handle all interfacing with systems on the device. This layer would be part of the outmost blue layer in the onion architecture. But in my actual project, this layer would also depend on the Domain layer, as shown by the Dependency arrows in the onion. The Domain layer holds the interfaces of the Infrastructure layer, because that is business logic. The actual implementation is of no matter for the Domain, so that ends up in the Infrastructure layer.
If we could theoretically port the app to iOS, i wouldn't touch my Domain layer. I'd just change the actual implementation in the Infrastructure layer because the systems we want to talk to are different on iOS.

@Trikke Thank you so much for your reply and patience to write this answer and explanation.
I'm still a little bit confused, I don't know if it's me or if some time is needed to get this concept completely.
So, based on your schemes, you're telling me that @android10 architecture is based on "2 onion layers"? He has data and presentation on the same outer layer and data as an inner layer.
I still don't get why this decision, and why DB (that should be the most inner one imo) is placed in the most outer circle.
As I understood it from Uncle Bob (probably wrong) is that the most deep we go, the most there's implementation logic that can be swapped. A direct dependence to the DB on the same outer layer (where there's UI as well) doesn't make sense to me. Could you please tell me where to read this matter briefly or direct me to the right way?

@andrewjohnson90 i'm glad you read all that and have an open mind :smile:
I'm guessing the point that you are struggling the most with is that there is a difference between the actual architectural diagram proposed by Uncle Bob and the implementation of that architecture into a project. Both have layers and dependencies, but the concepts are different.
The architecture is the idea. It has layers an dependencies, that shows how an application should be structured. If you strip out all the code of the repo and look how everything is connected and talks to each other, you can tell it follows this idea.
Now we know how we want to structure this, but the actual implementation of that idea will be dependent on a lot of factors. The platform (web,Android,iOS), the language (Java, PHP, Perl) and even the available tools influence what we actually create to reflect the idea. And this repo shows one way of actually implementing it, in a way @android10 felt like setting it up while still adhering to the architectural idea.
I think another issue is thinking that the DB is important and should be in the inner circle. This is a good read on Software Architecture by Uncle Bob. A quick quote on the DB (but please do read it entirely):

The database is merely an IO device. It happens to provide some useful tools for sorting, querying, and reporting but those are ancillary to the system architecture.

Ancillary? That's crazy.

Yes, ancillary. The business rules of your system may be able to make use of some of those tools; but those tools aren't intrinsic to those business rules. If you had to, you could replace those tools with different tools; but your business rules would still be the same.

The DB doesn't belong in the inner layer because it is not important to our Business. How we store data doesn't matter. It could be Sql, a text file or on Amazon S3. But from the architectural standpoint, it shouldn't matter, we don't care how we store data. So that is why it belongs on the very edge of the architecture. The Parse shutdown from a while ago showed a lot of people that if you depend very heavily on a data system (that is external to you) and it's part of the very core of your app, you're going to have a hard time adapting another one if you need to switch.
So our Domain contains the interfaces to the data, on how we store and access data. These are the business rules. But the actual implementation is not important to our business. If your DB is in the outmost onion layer then it is easier to swap out with something else.
Another thing with these diagrams and ideas is that sometimes people talk about "the deeper you go", or "the more outwards in the structure" and it becomes hard for anyone new to follow about which "direction" they are talking about because sometimes they mean the same thing. God knows i had (and still have) issues when following a talk and people start talking in "directions".
Looking it from the onion layer perspective, Uncle Bob would mean the more outwards you go, the more implementation logic can be swapped. So stuff on the outer layers is more prone to change then the inner layers. Your inner layers tell you how your app works, so they change less, only when the rules changes. But the outer layers could change more. External api's change, data access changes, network interfacing changes, new versions of Android that do things differently, ...
I'm just rambling a bit here, so please do ask questions, always.

@Trikke you opened my mind. I didn't get it at all then. I will write here in case we want to discuss further, but I want to thank you and @android10 for this. I'm going to read another 10 times those articles, trying to stick them in my mind. Thanks again

I'm glad to help! it's good that you keep an open mind and are willing to learn and improve on these not-so-easy-to-understand concepts.
Please do keep reading up software architecture and patterns. It's not only important on what we code but on how we structure it.
The helpdesk is always open :sweat_smile:

@android10 @Trikke maybe a suggestion to write a new blog post from this discussion? :)

@andrewjohnson90 you wanna write one maybe? :smile:

Independent of any external agency. In fact your business rules simply don’t know anything at all about the outside world.
http://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html
I think domain =  business rules :dancers:

I have the same confusion as @andrewjohnson90. And the discussion here helps me a lot. Thank you very much :-)

Inside data layer, UserEntityDataMapper transforms from UserEntity to User (com.fernandocejas.android10.sample.domain.User).
I don't think it's right. Because data layer should not know about domain layer.
UserEntityDataMapper should belong to domain layer and domain layer can understand UserEntity.
Beside, in my opinion, you should not use RxJava because it goes through 3 layers. Before using it, let's think how to remove it by other tools. Is it possible when your project is escalated?
You also should not use Dagger 2, because it makes things hard to understand. Dagger 2 is amazing tool for developers but it's not suitable for a demonstration like this. A clear architect with simple stuffs will be better.

Inside data layer, UserEntityDataMapper transforms from UserEntity to User (com.fernandocejas.android10.sample.domain.User).
I don't think it's right. Because data layer should not know about domain layer.
UserEntityDataMapper should belong to domain layer and domain layer can understand UserEntity.

Please read up on the subject. In the posts above, the dependencies and layers are explained.

Beside, in my opinion, you should not use RxJava because it goes through 3 layers. Before using it, let's think how to remove it by other tools. Is it possible when your project is escalated?

There's no problem with using tooling libraries to control data through all layers. A logging framework for instance would be the same. It too, would be available across all layers to log stuff. These things are just Cross-cutting concerns.

You also should not use Dagger 2, because it makes things hard to understand. Dagger 2 is amazing tool for developers but it's not suitable for a demonstration like this. A clear architect with simple stuffs will be better.

You'd just be hand writing your dependencies, there's no added benefit. Dagger isn't all that hard to understand, it's a very easy example on Dependency Injection. Even then, you should learn from examples. This shouldn't be a repo that you can just copy and start building your own app upon. That'd be crazy.

@Trikke you saved me a lot of words. Thanks! Amén!

Probably a wrong place to discuss the architecture principle itself, but seems like this is the best thread on the entire internet about fundamental flaw of the onion architecture diagram pointed out by @ghost, which causes so much confusion about the data layer.
Let's start with simple case. As an end-user using Web and any UI, I interact with the application, and my expectation that it works by accessing a DB (that's where application data is stored). But how does it work if the architecture does not allow those layers to communicate? (I know what you are thinking, but bear with me).

Now, here is the trick:

Clever, right? No. The basic misconception here that this describes an Abstraction Pattern with heavy reliance on Dependency Inversion Principle, but that is an implementation detail of a software design. That pattern and principle don't magically create a layer of an architecture, because a repository is the same component which stays in the same layer, regardless if it has an abstraction or not. Whatever you do, you will never be able to implement a repository without direct or indirect (abstract) dependency on a data layer in a reasonable manner.
I'm not trying to argue the approach here, Onion is great indeed! The only problem is that the original diagram tries to combine together an architecture and design together - and that's the it's biggest problem what creates so much confusion. Once you remove the infrastructure from the diagram, it's going to be priceless, and if you need to have an understanding where the data layer is - you need a second design diagram showing important implementation aspects.

Why are the UseCase interfaces stored in the Domain layer, not in the Presentation Layer?

@mefilt why would they be part of the presentation if they are not dealing with any UI? :)

Thanks a lot for this issue, old but gold. I shared this multiple times for people who were confusing data flow with dependency rules.
I wrote a medium about it here: https://proandroiddev.com/clean-architecture-data-flow-dependency-rule-615ffdd79e29 any feedback is welcome!

I think this diagram from the article above best illustrate the structure of clean architecture that has been implemented in this repo, I was confused too when comparing it with the Bob's model.

@Oziomajnr if you go the README file...you will see the links to the posts that lead to this repo:

https://fernandocejas.com/blog/engineering/2014-09-03-architecting-android-the-clean-way/
https://fernandocejas.com/blog/engineering/2015-07-18-architecting-android-the-evolution/
https://fernandocejas.com/blog/engineering/2019-05-08-architecting-android-reloaded/

Also as a result, there is a new version in Kotlin:

https://github.com/android10/Android-CleanArchitecture-Kotlin

Domain
It's clear that domain layer is the most inner layer and it shouldn't know any thing about outter layers . But the domain need to call data layer for telling it about the information that usecases need so somehow there should be a way to cross boundaries without having any reference from outter layers in domain leyar .here dependency inversion comes with the solution . By making an interfaces inside domain (most abstract) and make it's implementation in data layer and this is the way by which domain layer can interact with data layer


Can I disable powder snow?

Powder Snow is on everywhere, its really annoying, can I be able to disable it?

No.