fetch example should show extraction of data into usable form

The fetch api example (Also lives in the examples/fetch folder) demonstrates how to perform a get request on data, returning a js_sys::Promise, but not how to extract the original data (In this case, the Branch struct) from it in Rust. Eg it could use the addition of something like this, but working:
let branch_promise = run();

let closure = Closure::wrap(
    Box::new(move |val: JsValue| {
        val.into_serde().unwrap()
    })
        as Box<FnMut(JsValue) + 'static>
);

let branch = branch_promise.then(closure);
web_sys::console::log_1(&format("{:?}", branch).into());

It appears you can access the rust data in the final and_then leg, so perhaps we can return the data directly (Set up a mutable variable of the struct you're returning before the let future = line, then resassign it during this leg?)), or a Rust future (We have to somehow turn the AndThen into one?), instead of transforming it back to a JsValue.
Or perhaps return before the final and_then, letting the user construct it; this may be required in order to de serialize into the object type (Not sure how to pass the object to deserialize into otherwise). Not sure what to put for AndThen's 3 type args though. Ultimately, it would be nice to do something like this:
wasm_bindgen::fetch("get", "https://mysite.com", |data| update_state(data.json())

}
Once I sort out how to do this, I'd be happy to submit a PR with a writeup in the Guide, or if you think appropriate, a higher-level API. (The latter may be more appropriate in a standalone crate.)

Thanks for the report! I think that the best way to implement this would be to use Future in Rust rather than Promise in JS, which should likely only be used at the edges of the wasm module.
Futures in Rust are much more geared towards arbitrary Rust data types than JS promises are :)
In any case sounds like a great addition to the fetch example to me!

That seems like best approach. I think this abbreviated code is close:
pub fn fetch(// ...) -> impl Future<Item = JsValue> {
     // ...
    wasm_bindgen_futures::JsFuture::from(request_promise)
        .and_then(|resp_value| {
            // `resp_value` is a `Response` object.
            assert!(resp_value.is_instance_of::<web_sys::Response>());
            let resp: web_sys::Response = resp_value.dyn_into()
                .expect("Problem casting response as Reponse.");
            resp.json()
        })
        .and_then(|json_value: js_sys::Promise| {
            // Convert this other `Promise` into a rust `Future`.
            wasm_bindgen_futures::JsFuture::from(json_value)
        })
}

// ...

fetch(//...)
    .and_then(|json| {
            // Use serde to parse the JSON into a struct.
            let branch_info: Branch = json.into_serde().unwrap();

            // Send the `Branch` struct back to JS as an `Object`.
            future::ok(JsValue::from_serde(&branch_info).unwrap())
    });

But getting this error: ^^^^^^^^ the trait futures::future::Futureis not implemented for()

Update: call to fetch now looks like this:
    let r = fetch(...);
    let r_fin = r.and_then(|json| {
        // Use serde to parse the JSON into a struct.
        let branch_info: Branch = json.into_serde().unwrap();

        // Send the `Branch` struct back to JS as an `Object`.
        future::ok(JsValue::null())
    });

This compiles without warnings in Rust, but results in the following panic in-browser: panicked at 'assertion failed: a != 0', C:\Users\david\.cargo\registry\src\github.com-1ecc6299db9ec823\wasm-bindgen-0.2.29\src\closure.rs:408:1'. relevant file.
My guess at the relevant code chunk:
 unsafe extern fn destroy<$($var: FromWasmAbi,)* R: ReturnWasmAbi>(
                    a: usize,
                    b: usize,
                ) {
                    debug_assert!(a != 0);
                    drop(Box::from_raw(FatPtr::<FnMut($($var,)*) -> R> {
                        fields: (a, b)
                    }.ptr));
                }
                inform(destroy::<$($var,)* R> as u32);

<&mut Self>::describe();

Whether split or not, not applying wasm_bindgen_futures::JsFuture::from() to the future triggers this; likely due to not being able to properly "destroy" the closure/promise/future. But when split, attempting to apply this results in this compile error: ```expected associated type, found struct `wasm_bindgen::JsValue````

@David-OConnor oh actually, would you be interested in sending a PR for an updated example, and I could try to help debug issues in the example?

My lack of understanding of how to work with futures makes me hesitant to submit a PR, or write docs on the subject. Here's a working high-level API. It works by inserting a callback into the official example, either to intercept the response, or the parsed JSON. It then allows the future to resolve as per the example, to avoid the panic I posted above. It involves some repetitive code, and the API is not idea, but it's the best working soln I've come up with.
Would ideally like to do what you described (Return a Rust future of the web_sys::Response), but run into trouble when splitting futures across funcs. (Perhaps could be sorted with the right type signatures?)

@David-OConnor If you don't mind, I sent you a pull request with some changes.
In particular, Request is now a builder that you use to specify the various fetching options, and then you call fetch to start the fetching. It returns a Future, so you can chain it with the regular Future methods:
Request::new("http://example.com")
    .method(Method::GET)
    .header("Content-Type", "text/html")
    .fetch()
    .map(|response| {
        // ...
    })

It supports all of the Request options, and it automatically supports cancellation as well. Performance should be good, especially after anyref is supported.
It also has a few helper methods, such as fetch_string, fetch_json, and body_json:
Request::new("http://foo.com")
    .method(Method::POST)
    // value is any Rust type which can be serialized
    .body_json(value)
    .fetch_json()
    .map(|response| {
        // response is any Rust type which can be deserialized
    })

To actually run the Future, you just use future_to_promise, as usual:
#[wasm_bindgen]
pub fn start() {
    future_to_promise(
        Request::new("http://foo.com")
            .method(Method::POST)
            // value is any Rust type which can be serialized
            .body_json(value)
            .fetch_json()
            .map(|response| {
                // response is any Rust type which can be deserialized
            })
    );
}

To answer some of your questions:

It works by inserting a callback into the official example, either to intercept the response, or the parsed JSON. It then allows the future to resolve as per the example, to avoid the panic I posted above.

My implementation doesn't use callbacks at all, just Futures, so it should be a lot cleaner (and probably avoids this bug?).

Can we avoid the need to return a dummy future::ok, and call to wasm_bindgen_futures::future_to_promise(f); at the end?

Yup! My implementation avoids both of those.

Is there a way we can parse json (or text) from a web_sys::Response directly, eg using the fetch fn I posted plus some additional async code, vice the fetch_json fn.

Yes, that's what my implementation does (see the fetch_string and fetch_json methods).

@Pauan Love it. Will dig in/merge tonight. Seems like much of my trouble was in a poor understanding of futures.

I think at the very least this'd make a great example, so we can always start there!

I think this is done now on master, so closing.


Move AU20010 to Machine checks (AU10006)

It makes sense to check for Managed PI on all machines rather than just PI Data Archive machines.

Fixed in #126


Using SSE4.2 intrinsics in basic_parser if available

issue #585

Don't miss -msse4.2 for gcc and clang. Otherwise the compiler will not generate SSE4.2 code ;-)

This is exciting!!

WTH! Builds failed because fatal error: 'boost/predef/hardware/simd.h' ?!???

Check the version of Boost used on travis:
https://github.com/vinniefalco/Beast/blob/develop/.travis.yml#L14

I'm pulling the optimizations out of v72 and putting them into v73 so I can get the other branch merged

fatal error: 'boost/predef/hardware/simd.h' ?!???

Boost.Predef is really for end-users, not for writers of Boost libraries. Beast is supposed to use Boost.Config, in fact its mandatory as part of Boost.

Hmm... GitHub closed the branch because the v72 branch was deleted...


Bug: proxy inside wp filters instead of localhost:3000

Terms

[X] I have read the guidelines for Contributing to Roots Projects
[X] This request is not a duplicate of an existing issue
[X] I have read the docs and followed them (if applicable)
[X] I have seached the Roots Discourse for answers and followed them (if applicable)
[X] This is not a personal support request that should be posted on the Roots Discourse community

Description
Maybe it's not directly a sage bug, but it affects the natural intended workflow of bud.
When I filter the menu to use img instead of text, the asset()->uri gives me the proxy instead of the localhost:3000 address and this forces me to “unsafely” access the url to see the images. I don’t quite understand why this happens as outside of the filter it gives the localhost:3000 address.
Can it be uri sanitization inside the navwalker?
Steps To Reproduce
add_filter( 'wp_nav_menu_items', function ( $items ) {
    $asset = asset('assets/images/profile.svg')->uri();
    echo $asset; //<- this returns http://localhost:3000/

    $items = str_replace(
        '{{profile}}',
        '',
        $items
    ); //<- this returns https://proxy.test/

    return $items;
});

Expected Behavior
Always return the localhost address while in dev
Actual Behavior
It returns the proxy address instead of the localhost one.
Relevant Log Output
No response
Versions
10.beta-2

@SergiArias i'm unable to reproduce this bug
$asset = asset('assets/images/example.svg')->uri();

results in:
http://example.test/app/themes/sage/public/assets/images/example.8f7dad.svg

But this is when you run yarn build, isn't? I was referring to the development environment. The expected behaviour when running yarn dev is that the assets also go through localhost:3000, this way the browser won't ask for permission to load them due to lack of certificate.
I am using Laravel Valet by the way.

unable to reproduce. from yarn dev, the result is:
http://localhost:3000/app/themes/sage/public/assets/images/example.svg

Yes, the result is correct for most cases, but not inside filters. Please, try the following: Create a menu with a name {{profile}} and use the following filter:
add_filter( 'wp_nav_menu_items', function ( $items ) {
    $asset = asset('assets/images/profile.svg')->uri();
    echo $asset; //<- this returns http://localhost:3000/

    $items = str_replace(
        '{{profile}}',
        '',
        $items
    ); //<- this returns https://proxy.test/

    return $items;
});

i'm not able to reproduce within a filter. using the asset() function within the provided filter in app/filters.php is having the expected results.
from the OP:

Maybe it's not directly a sage bug

maybe bring some more evidence of a bug that's in sage? i'm spending time here trying to debug an issue that doesn't appear to actually be an issue

@SergiArias what is the html output of that filter (the source as it is in the browser). The proxy middleware should replace any src attribute that contains the public path. Please use view-source or the body of the response from the network tab of devtools. Browsers do a lot to normalize html, we want to see the raw response, because that's what the proxy middleware is working with.

Of course @kellymears this is the source (only the menu part where the filter is applied):

The body of the response in network tools tab gives me the same result.
Anyway, if it's not reproducible by you maybe it's better to wait for other users to confirm they have the same problem before spending too much time debugging. It's not a big deal of a problem.

i think this might be fixed as of bud v5.2.0


Docs

Generate docs for this project rather than just pointing to the shelf-pack js docs.

I'm going to check in what I have so far, although documentation.js is generating blank results.
It looks similar to https://github.com/documentationjs/documentation/issues/363, but I'm using the 4.0.0-rc.1 version.  I'll dig in more when I have time.


docs(config) mention cli config generator

Mention internal config generation capability

Will merge as its approved, ty for looking at 👍


Token through query param is deprecated

Hi,
Github just sent me this, I thought you should be aware of that.
Thanks for your amazing work.

Hi @mathieutu,
On March 29th, 2020 at 17:24 (UTC) your personal access token (Download GitHub directory) using Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:75.0) Gecko/20100101 Firefox/75.0 was used as part of a query parameter to access an endpoint through the GitHub API:
https://api.github.com/repositories/****/git/trees/master
Please use the Authorization HTTP header instead, as using the access_token query parameter is deprecated. If this token is being used by an app you don't have control over, be aware that it may stop working as a result of this deprecation.
Depending on your API usage, we'll be sending you this email reminder on a monthly basis for each token and User-Agent used in API calls made on your behalf.
Just one URL that was accessed with a token and User-Agent combination will be listed in the email reminder, not all.
Visit https://developer.github.com/changes/2020-02-10-deprecating-auth-through-query-param for more information about suggested workarounds and removal dates.
Thanks,
The GitHub Team

Wrong service, download-directory.github.io already uses the header:
https://github.com/download-directory/download-directory.github.io/blob/333da6f8c17dc28468a4c8e17c0db937a7c7241b/index.js#L45-L50

But list-github-dir-content doesn't:
https://github.com/fregante/list-github-dir-content/blob/e70408bbcfb6e0526b5e4353ead8a881169db37d/index.js#L3-L7
Moving the issue there

Well, https://github.com/fregante/list-github-dir-content/pull/17 has been merged so this issue should be resolved but, I created token and received an email today so the problem clearly still occur

Seems like @fregante want's to merge fregante/list-github-dir-content#16 as well before releasing a major version.
Although these mails are annoying there is still nearly a year of time until it will stop working:

All authentication using query parameters will return a status code of 401 like all other auth failures starting on:
May 5, 2021 at 4:00 PM UTC

So I guess there is no need to rush.

Apologies for taking so long to fix this. I just updated the dependency and now it should work. I'll release https://github.com/fregante/list-github-dir-content/pull/16 later, it needs further testing.


Invoice download access enabled for client

Notion :
https://www.notion.so/saeloun/a-client-should-be-able-to-download-an-invoice-from-the-client-portal-after-they-have-logged-in-280076985fc94d69b72c528c431858e5?pvs=4
What :

Added more options button on view Invoice page client role
Enabled access for clients to download a invoice

Why :

Enhancement
Client should be able to download a invoice

Todos (for testing):

Tested for oliver smith account

@Shruti-Apte Add policy_spec for the client able to download the invoice

@prasanthchaduvula Please approve


Option to disable sync

Is there an option to disable the sync feature?
I would prefer to keep the data locally and use my own method of backup.
Edit: I may have misinterpreted the text in the documentation about cloud syncing

Yeah, I think I misinterpreted the documentation.
Sorry! :)

Let us know if there’s something we can clarify in the documentation so other people don’t misinterpret it!

It was this section of this page that threw me off (emphasis mine):

That's why we automatically sync all of your data to the cloud in the background. You get the best of both worlds: all data is local by default, but if internet is available, your data is seamlessly backed up and synced to all other devices. This is the opposite of most apps which heavily rely on the internet to be available.
For the super privacy-focused, it even allows for your data to be end-to-end encrypted since all our server is doing is passing around changes. We don't care to read it or sell it to third parties.
Even if you don't use end-to-end encryption, we will always treat your data as if it's the most sensitive information in the world. It's always stored with bank-level 256-bit AES encryption, and we always transmit it encrypted with SSL/TLS.

Which, now that I'm reading it again, I'm wondering if the data is sent somewhere, or is that a relic from before the application went to self-hosted/Open Source?
If it is sent somewhere, I'd like to know where - and why isn't there an option to disable it?

Ah, that website has the docs for the old, hosted-by-James version of the app (we should fix that sometime!). The updated version of that page is at https://actualbudget.github.io/docs/Getting-Started/sync.

Haha, I think that’s why I originally closed this. I found the link I referenced, opened the issue then found the link you shared and closed it.
I really appreciate you taking the time to respond and clear things up for me!


How to detect what files aliases are defined in?

I'm not sure where the best forum is for asking questions so please let me know if this isn't the place.
From skimming over the source, am I correct to assume that aliases that are expected to be editable should be sourced from files using source_path?
Or is there some auto-detection of typical alias files that's meant to happen some how?

Yes - aliases which are expected to be editable should be sourced with source_path.


Sample

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

cd


[Question] Vue 3 support

Is your feature request related to a problem? Please describe.
Hello. First of all, great component library :clap:!
My question is, it's possible to I use mijin right now with Vue 3 or Vite? I tried with both in a few different ways, but I had no success.
If not, do you plan to support them on a near future?
Describe the solution you'd like
Use Mijin with Vue 3.
Describe alternatives you've considered
Use Mijin with Vue 2.
Additional context
Console error

Hi there,
Thank you for your message.
Currently, this library is only compatible with Vue 2.0.
As Vue 3.0 is now available, I would like to focus on supporting it for the next feature.
It would be relatively simple to migrate (remove functional templates, use composition API, etc) but I can not provide a release date yet.
Meanwhile, the README can be updated to clarify that only Vue 2.0 is currently supported.

Hello, thank you for your quick response.
If you know a way to support Vue 3 without dropping the Vue 2 support, let me know and I can help you with that.

README has been updated to specify the currently supported version
Unfortunately, Vue 3 $listeners doesn't exist anymore (merged with $attrs). Form components like input or checkbox rely on $listeners to operate and I could not find yet a way to make it work on both Vue 2 and 3.
If it can't be done, a solution is to create a next branch dedicated to supporting Vue 3 in parallel.
Regardless, most of the components work directly on Vue 2 and Vue 3 by dropping the functional component attribute.

FYI there's https://github.com/vueuse/vue-demi.
You can support both vue 2 and 3 using that. Renderless components.
Example implementation https://github.com/wobsoriano/vue-winbox/

Thank you for your suggestion, along with an implementation example
Using vue-demi will add a dependency to the project that I would like to avoid.


turn off external build for now

until https://github.com/drivenets/cdnos-controller has a license

Pull Request Test Coverage Report for Build<PHONE_NUMBER>
Details

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 65.176%

Totals

Change from base Build<PHONE_NUMBER>:
0.0%

Covered Lines:
4488

Relevant Lines:
6886

💛  - Coveralls


Save model callback: doc_strings corrected

doc_strings were incorrect -- copy-pasted from EarlyStoppingCallback. Fixed.

Thanks!


docs: correct include & exclude option

It's include and exclude instead of includes and excludes

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.

@sxzz please sign the CLA and we’ll merge

Signed


Change window to globalThis for Edge Runtime support

Support for Cloudflare Workers, Deno, and other WinterCG runtimes

Buffer is a node only thing, so atob has to be used in other runtimes yes.
As for the if statement - my bad yes, the if will pass everywhere.
We could instead check if Buffer is available as the if statement, and make globalThis.atob the default.

I have now pushed a change that will use atob in all runtimes, even though it is deprecated in Node.


Multi-valued boolean flag option setter method is being called multiple times

When @Option is put in a method with boolean array arguments, and the option is repeated N times, that method will be called N times, each time with an increasing array length.
I would expect that method to be called only once, with a boolean array of size N.
// src/test/java/picocli/CommandLineTest.java
@Test
public void testBooleanOptionArraySetter() {
	class App {
		private final List<boolean[]> callArgs = new LinkedList<boolean[]>();

		@Option(names = "-a")
		private void setArray(boolean[] array) {
			callArgs.add(array);
		}

		@Option(names = "-b")
		private void dummy(boolean[] anotherArray) {
		}
	}
	App app;

	// should only call setArray once
	app = CommandLine.populateCommand(new App(), "-a");
	assertEquals(1, app.callArgs.size());
	assertArrayEquals(new boolean[]{true}, app.callArgs.get(0));

	// should only call setArray once when many repeated options are populated
	app = CommandLine.populateCommand(new App(), "-a", "-a", "-a");
	assertEquals(1, app.callArgs.size());
	assertArrayEquals(new boolean[]{true, true, true}, app.callArgs.get(0));

	// should only call setArray once when many repeated options are populated
	app = CommandLine.populateCommand(new App(), "-aaa");
	assertEquals(1, app.callArgs.size());
	assertArrayEquals(new boolean[]{true, true, true}, app.callArgs.get(0));

	// should not call setArray when calling other method
	app = CommandLine.populateCommand(new App(), "-b");
	assertEquals(0, app.callArgs.size());

	// should not call setArray when calling other method
	app = CommandLine.populateCommand(new App(), "-b", "-b", "-b");
	assertEquals(0, app.callArgs.size());

	// should not call setArray when calling other method
	app = CommandLine.populateCommand(new App(), "-bbb");
	assertEquals(0, app.callArgs.size());
}

Results in expected:<1> but was:<3>
app.callArgs = {LinkedList@2395}  size = 3
 0 = {boolean[1]@2400} [true]
 1 = {boolean[2]@2401} [true, true]
 2 = {boolean[3]@2402} [true, true, true]

With List it has a more interesting behavior, even with 1 option, it calls the method 2 times.
@Test
public void testIssue217BooleanOptionListSetter() {
	class App {
		private final List<List<Boolean>> callArgs = new LinkedList<List<Boolean>>();

		@Option(names = "-a")
		private void setArray(List<Boolean> list) {
			callArgs.add(list);
		}

		@Option(names = "-b")
		private void dummy(List<Boolean> anotherList) {
		}
	}
	App app;

	// should only call setArray once
	app = CommandLine.populateCommand(new App(), "-a");
	assertEquals(1, app.callArgs.size());
	assertEquals(Arrays.asList(true), app.callArgs.get(0));

	// should only call setArray once when many repeated options are populated
	app = CommandLine.populateCommand(new App(), "-a", "-a", "-a");
	assertEquals(1, app.callArgs.size());
	assertEquals(Arrays.asList(true, true, true), app.callArgs.get(0));

	// should only call setArray once when many repeated options are populated
	app = CommandLine.populateCommand(new App(), "-aaa");
	assertEquals(1, app.callArgs.size());
	assertEquals(Arrays.asList(true, true, true), app.callArgs.get(0));

	// should not call setArray when calling other method
	app = CommandLine.populateCommand(new App(), "-b");
	assertEquals(0, app.callArgs.size());

	// should not call setArray when calling other method
	app = CommandLine.populateCommand(new App(), "-b", "-b", "-b");
	assertEquals(0, app.callArgs.size());

	// should not call setArray when calling other method
	app = CommandLine.populateCommand(new App(), "-bbb");
	assertEquals(0, app.callArgs.size());
}

Results in expected:<1> but was:<2>
app.callArgs = {LinkedList@2397}  size = 2
 0 = {ArrayList@2402}  size = 1
  0 = {Boolean@2404} true
 1 = {ArrayList@2402}  size = 1
  0 = {Boolean@2404} true

If you switch on tracing with -Dpicocli.trace=debug, you will get a more detailed view of what is going on in the library and why it is making those calls.
I don't feel the need to change anything though.

Thanks for the reply.
I can see it identifies and consumers the options one by one, in order, and I can see why the custom parameter processors receive a Stack<String>. It does not sort and join the arguments.
That way you could write something that change states for every token parsed. App --left --right --up --left is not the same as App --left --left --right --up.

About the second part, the behavior with a List is not the same as with an array. The processor does not initialize an empty array, but it does initialize an empty List. With the same number of options, the method receiving a List will get one more call than the array one.
Is this expected?
class App {
	@Option(names = "-l")
	private void turnLeft(boolean[] arg) {
		System.out.println("boolean[] Turn left");
	}

	@Option(names = "-p")
	private void turnPort(List<Boolean> arg) {
		System.out.println("List<Boolean> Turn port side");
	}
}

System.setProperty("picocli.trace", "DEBUG");

App app = CommandLine.populateCommand(new App(), "-llpp");

boolean[] Turn left
boolean[] Turn left
List<Boolean> Turn port side
List<Boolean> Turn port side
List<Boolean> Turn port side

[picocli DEBUG] Creating CommandSpec for MyClass$1App@5442a311 with factory picocli.CommandLine$DefaultFactory
[picocli INFO] Picocli version: 4.6.2, JVM: 17.0.1 (N/A OpenJDK 64-Bit Server VM 17.0.1+12), OS: Linux 4.8.0-41-generic amd64
[picocli INFO] Parsing 1 command line args [-llpp]
[picocli DEBUG] Parser configuration: optionsCaseInsensitive=false, subcommandsCaseInsensitive=false, abbreviatedOptionsAllowed=false, abbreviatedSubcommandsAllowed=false, aritySatisfiedByAttachedOptionParam=false, atFileCommentChar=#, caseInsensitiveEnumValuesAllowed=false, collectErrors=false, endOfOptionsDelimiter=--, expandAtFiles=true, limitSplit=false, overwrittenOptionsAllowed=false, posixClusteredShortOptionsAllowed=true, separator=null, splitQuotedStrings=false, stopAtPositional=false, stopAtUnmatched=false, toggleBooleanFlags=false, trimQuotes=false, unmatchedArgumentsAllowed=false, unmatchedOptionsAllowedAsOptionParameters=true, unmatchedOptionsArePositionalParams=false, useSimplifiedAtFiles=false
[picocli DEBUG] (ANSI is disabled by default: systemproperty[picocli.ansi]=null, isatty=false, TERM=null, OSTYPE=null, isWindows=false, JansiConsoleInstalled=false, ANSICON=null, ConEmuANSI=null, NO_COLOR=null, CLICOLOR=null, CLICOLOR_FORCE=null)
[picocli DEBUG] Initializing command 'null' (user object: MyClass$1App@5442a311): 2 options, 0 positional parameters, 0 required, 0 groups, 0 subcommands.
[picocli DEBUG] Initial value not available for method void MyClass$1App.turnLeft(boolean[])
[picocli DEBUG] Initial value not available for method void MyClass$1App.turnPort(java.util.List<Boolean>)
[picocli DEBUG] [0] Processing argument '-llpp'. Remainder=[]
[picocli DEBUG] '-llpp' cannot be separated into <option>=<option-parameter>
[picocli DEBUG] Trying to process '-llpp' as clustered short options
[picocli DEBUG] Found option '-l' in -llpp: method void MyClass$1App.turnLeft(boolean[]), arity=0
[picocli DEBUG] Found option '-l' in -llpp: method void MyClass$1App.turnLeft(boolean[]), arity=0
[picocli DEBUG] Found option '-p' in -llpp: method void MyClass$1App.turnPort(java.util.List<Boolean>), arity=0
[picocli DEBUG] Initializing binding for option '-p' on App@5442a311 with empty List
[picocli DEBUG] Found option '-p' in -llpp: method void MyClass$1App.turnPort(java.util.List<Boolean>), arity=0
[picocli DEBUG] Applying default values for command '<main class>'

About the second part, the behavior with a List is not the same as with an array. The processor does not initialize an empty array, but it does initialize an empty List. With the same number of options, the method receiving a List will get one more call than the array one.
Is this expected?

I see, yes, you are right...
Looking at the code for CommandLine$Interpreter::applyValuesToMapField and applyValuesToCollectionField, I don't remember why the implementation has that extra call to ArgSpec::setValue for maps and collections.
Is it causing a problem?

Is it causing a problem?

Not at all, just something I noticed.
Thank you for your time.


Basic access authentication (aka. HTTP auth) Support for scrapy-splash

we are running a scrapy-splash instance , where we have HTTP Auth is in place to grant access to splash instance...
after surfing and reading for a while i came to know that there is no HTTP Auth for Scrapy-splash API..
I tried using something like<EMAIL_ADDRESS>but scrapy failed with error DNS "username" is not resolved
after that i have started hacking into packages in scrapyjs ( midddleware.py) and came to a realization that it can be done ,very efficiently with minimal changes in code-base
#in Settings.py file///
DOWNLOADER_MIDDLEWARES = {
    'scrapyjs.SplashMiddleware': 725,
}
SPLASH_URL = 'URL'
SPLASH_USERNAME = 'username'
SPLASH_PASS = 'password'

#in scrapyjs.middleware.py file
from w3lib.http import basic_auth_header

class SplashMiddleware(object):
    .....
    default_splash_username = ""
    default_splash_password = ""
    .....
def __init__(self, crawler, splash_base_url, slot_policy):
        ....
        self.splash_username = crawler.settings.get('SPLASH_USERNAME', self.default_splash_username)
        self.splash_password = crawler.settings.get('SPLASH_PASS', self.default_splash_password)

def process_request(self, request, spider):
       if self.splash_username != "" and self.default_splash_password != "":
            auth = basic_auth_header(http_user, http_pass)
            request.headers['Authorization'] = auth

i think this will hlep many who have HTTP Auth in place for splash instance
I can submit a PR if we agree that this is a useful adon

See https://github.com/scrapy-plugins/scrapy-splash#http-basic-auth.


added link to home in header

I thought it would be a nice thing to be able to go back to home page from any other page. So in the header, I've put the h1 tag in a a tag with href  {{ site.github.url }}.

@sjsakib Thanks for this! Does the change affect the look-and-feel of the page? If so, can you provide screenshots of the before and after?

@benbalter No, it doesn't.

Thanks @sjsakib!


feat(package.json): add version

@OkelleyDevelopment I did test a while ago adding version so that snippets can also be loaded in vscode. For me at least it didn't work, if someone figures it out, i'll add it.

I close this due to it cost too many time. And I have my own fork to support myself.


Database schema proposal

create a markdown document to layout all collections, documents, and subdocuments to be used throughout the project
follow the examples on canvas

add any collections/subdocuments that I may have missed! I haven't included user profile customization stuff yet (bio, featured, etc.)


Use the official logo

@pieper we need to use the NCI IDC logo for the production deployment. Can you update to use the one here: https://drive.google.com/drive/folders/1KnH0sfGX4odmHYKyG2uKCvYyrSfn3-K5?usp=sharing?

See: https://github.com/ImagingDataCommons/IDC-Viewer-Support/pull/3

Once this is merged we can see if anything else needs to be changed (e.g. size or position).  I didn't test on sandbox.

This looks okay to me in the release.


Windows Testing With Appveyor

This PR bring Windows testing to pyfarm's agent via the Appveyor service.  Just like the Travis tests the CI service will be used to sign-off on a PR.  This PR also has the changes necessary to get the tests passing on Windows.

@guidow, PTAL.  There's still a little work to do on this PR but it's worth starting the review process:

Review an merge the other PRs for the agent.  Many of those will fix tests which don't work on Windows.
Fix the broken Python 2.6 test runner for Appveyor or remove it.  Appveyor does not fully support Python 2.6 like they do 2.7 which comes preinstalled and setup to properly compile libraries.  We'd still test 2.6 on Travis of course.
Optionally, add SSL testing like we have on Travis.  Like the Python 2.6 issue we might just want to make Travis our primary testing platform for this and not do this level of testing using Appveyor.

The last two points, if we decided to do them, could be a separate PR after this merges too.

Apart from the obvious (some of the tests still failing) I don't see anything objectionable in the code.

Fix the broken Python 2.6 test runner for Appveyor or remove it. Appveyor does not fully support Python 2.6 like they do 2.7 which comes preinstalled and setup to properly compile libraries. We'd still test 2.6 on Travis of course.

Personally, I see very little reason to keep testing with 2.6. 2.7 has been out for many years now.

Optionally, add SSL testing like we have on Travis.

Hm, at the moment the moment, pyfarm isn't using SSL in practice anyway. Security-wise, pyfarm is still wide open on all fronts for all intents and purposes, and the only sensible way to run it is on a heavily firewalled network.
OTOH, if we do support SSL, we should probably test it on all platforms, at least in the long term. It's no big deal, IMHO, if the tests aren't in place at this point in time.

Personally, I see very little reason to keep testing with 2.6. 2.7 has been out for many years now.

As much as I'd like to stop supporting 2.6, RHEL 6 still has Python 2.6 as the default and CentOS does as well I believe.  I'd say the cutoff for 2.6 support should be either when RHEL moves on or when Twisted supports 3.0 (whichever comes first).

Going to go ahead and merge this.  The test skips that I added can be removed in other PRs.

RHEL/CentOS 6 will never move away from Python 2.6. It will likely only get security fixes and major bug fixes until it reaches EOL. You will have to go with RHEL 7 to get Python 2.7 by default.

Yeah good point, even Debian based distros don't upgrade the core Python version.  Not sure what I was thinking there, I think I was under the mistaken assumption that RHEL 7 hand't been released yet.  Sorry my bad.
I still think we should support 2.6 until for a little longer.  I'd like the support it as long as Twisted still does or until they release 3.0 support.  At the very least we should support 2.7 as long as we're not testing across all three platforms (which TBH, won't be much longer).


cli: Add build-commit

Closes #216

mm I think I need to use the ostree-ext crate directly instead of just calling ostree.

So one big thing we could do here in general is a lot of what happens today in the rpm-ostree postprocessing phase; for example, a big one is handling /etc/passwd and generating sysusers fragments.
Another interesting one is kernel handling; erroring out if you have multiple kernels, cleaning up the duplicate content the Fedora kernel packages drop in /boot etc.
However...lately I'm also thinking just for maximum compatibility we should start to do that stuff on the client too automatically.

Did not get it our of Draft because of background chats with Colin, sorry for not updating sooner. I think we wanted, to make this bootc native code instead of calling back to ostree to reduce the dep on ostree and on top of that the logic with /var changes needs to be revised.
What do you guys think about:

check for stuff in /tmp and error out
relax the /var errors make it warning
any other check?

Or maybe what would be best is something like a generalized "hooks" framework, i.e. we have /usr/lib/bootc/container-commit.d that contains drop-ins that can execute at build time.  That would make everything easily extensible...and today we have sysusers code in rpm-ostree that we could keep where it is, and have e.g.
cat /usr/lib/bootc/container-commit.d/10-rpmostree-sysusers
#!/bin/bash
exec rpm-ostree postprocess sysusers

or so?

I guess that would work, but we would need also to scan the dropins and skip anything calling binaries not present on the system? Or just fail with a warning? Because in your example we would fail in an image that does not have rpm-ostree.


Discontinuous Galerkin with findpts (in GSLIB) ?

Hello,
From what I understand, findpts.cpp is not compatible with a discretisation DG, is it true?
Best,
Leïla

What you can do is to project your solution to an H1 space and then use findpts for your computations. The H1 space can be higher order than the DG space to ensure a more resolved transition in certain regions.

@LeilaSalomon, can we close this issue?

What you can do is to project your solution to an H1 space and then use findpts for your computations. The H1 space can be higher order than the DG space to ensure a more resolved transition in certain regions.

How can I project my solution? Just by creating a second space?

You can use ProjectDiscCoefficient to project your DG gridfunction to H1. Something like this will work:
H1_FECollection *fec=new H1_FECollection(order, dim);
FiniteElementSpace *fespace=new FiniteElementSpace(mesh, fec);
GridFunction h1_gf(fespace);
GridFunctionCoefficient cdg(dg_gf);
h1_gf.ProjectDiscCoefficient(cdg, mfem::GridFunction::ARITHMETIC);
where dg_gf is your DG gridfunction.

You can use ProjectDiscCoefficient to project your DG gridfunction to H1. Something like this will work:
H1_FECollection *fec=new H1_FECollection(order, dim);
FiniteElementSpace *fespace=new FiniteElementSpace(mesh, fec);
GridFunction h1_gf(fespace);
GridFunctionCoefficient cdg(dg_gf);
h1_gf.ProjectDiscCoefficient(cdg, mfem::GridFunction::ARITHMETIC);
where dg_gf is your DG gridfunction.

Hello,
Thank you for your help but I have an error when I use GridFunctionCoefficient cdg(dg_gf).
I think I'm not declare it well !  I tried using GridFunctionCoefficient cdg(dg_gf,1) but it doesn't work either...

The argument to the GridFunctionCoefficient constructor should be a pointer to GridFunction:
https://github.com/mfem/mfem/blob/491e65388ba31eedb6bacec926bb04186c65f65e/fem/coefficient.hpp#L174-L175
so maybe you need to use &dg_gf instead of dg_gf.

@LeilaSalomon and @kmittal2, can you update us on this issue?

@LeilaSalomon had mentioned in her email that she will continue the discussion here.

When I use ProjectDiscCoefficient, in fact, I solve again the solution in this new space : I get a solution in space h1, which is not the same as in space DG. Only, I'm just interested by the results obtained by the resolution in the DG space, because this is the one I use for my simulation
Leïla

Ok, I believe I understand now, but just as in https://github.com/mfem/mfem/issues/1331#issuecomment-616683881, we don't have support for L2 spaces with FindPoints yet.

I am closing this for now, but we have taken note and plan to add support for non-H1 spaces to findpts in the future.


OCI purl's don't follow the spec

I see the following in the apko purls:
pkg:oci/ghcr.io%2Fdistroless%2Fstatic:latest-20220710@sha256:96556b7e982dbca4c582b5bee35ff205d2e1404a616e8f1f822c0def27b5ac3f?arch=amd64&tag=latest-20220710

According to the spec this should be:
pkg:oci/static@sha256:96556b7e982dbca4c582b5bee35ff205d2e1404a616e8f1f822c0def27b5ac3f?repository_url=ghcr.io%2Fdistroless%2Fstatic&arch=amd64&tag=latest-20220710

cc @puerco

Yeah I was wondering about that, if puerco doesn’t get to it tomorrow I can fix it.

Fixed by #283.


Installing Jigsaw on Windows 10

I'm trying to install Jigsaw locally. I followed these steps form the docs:
mkdir my-site
cd my-site
$ composer require tightenco/jigsaw
When I try to initialize the project with the following command:
./vendor/bin/jigsaw init
I get the following error:

'.' is not recognized as an internal or external command, operable program or batch file.

I tried also the following command:
cd vendor/bin
jigsaw init
But then I get the following error:

Fatal error: Uncaught Error: Class 'Illuminate\Container\Container' not found in \vendor\tightenco\jigsaw\jigsaw-core.php:55
Stack trace:
#0 \vendor\tightenco\jigsaw\jigsaw(8): require_once()
#1 {main}
thrown in \vendor\tightenco\jigsaw\jigsaw-core.php on line 55

Is there a way I can get this framework installed?
Maybe there's a better way to install the framework in the future, without two seperate composer/install commands?

If you're not using the Linux shell, I believe the init command would be:
vendor\bin\jigsaw init

Give that a shot!

Thanks for the reply, it worked!


Wrong path in tsconfig.server.json of universal & monorepo

Versions
     _                      _                 ____ _     ___
    / \   _ __   __ _ _   _| | __ _ _ __     / ___| |   |_ _|
   / △ \ | '_ \ / _` | | | | |/ _` | '__|   | |   | |    | |
  / ___ \| | | | (_| | |_| | | (_| | |      | |___| |___ | |
 /_/   \_\_| |_|\__, |\__,_|_|\__,_|_|       \____|_____|___|
                |___/

Angular CLI: 6.0.0
Node: 8.11.1
OS: darwin x64
Angular: 6.0.0
... animations, cli, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, platform-server, router

Package                           Version
-----------------------------------------------------------
@angular-devkit/architect         0.6.0
@angular-devkit/build-angular     0.6.0
@angular-devkit/build-optimizer   0.6.0
@angular-devkit/core              0.6.0
@angular-devkit/schematics        0.6.0
@ngtools/webpack                  6.0.0
@schematics/angular               0.6.0
@schematics/update                0.6.0
rxjs                              6.1.0
typescript                        2.7.2
webpack                           4.6.0

Repro steps

Step 1

ng new demo-project

Step 2

Generate application
ng generate application universal-demo

Step 3

Generate universal to the generated project before
ng generate universal --clientProject universal-demo

Step 4

Build the server script (will fail)
ng run universal-demo:server

Observed behavior
In projects/universal-demo/src/tsconfig.server.json
{
  "extends": "./tsconfig.app.json", <- wrong path
  "compilerOptions": {
    "outDir": "../../out-tsc/app-server",
    "baseUrl": ".",
    "module": "commonjs"
  },
  "angularCompilerOptions": {
    "entryModule": "app/app.server.module#AppServerModule"
  }
}

Desired behavior
{
  "extends": "../tsconfig.app.json",
  "compilerOptions": {
    "outDir": "../../out-tsc/app-server",
    "baseUrl": ".",
    "module": "commonjs"
  },
  "angularCompilerOptions": {
    "entryModule": "app/app.server.module#AppServerModule"
  }
}

Mention any other details that might be useful (optional)
The path of "extends": "./tsconfig.app.json" is wrong when generating the universal project to the application.
Or tsconfig.app.json sould be placed in projects/universal-demo/

I'm sorry, but we can't reproduce the problem following the instructions you provided.
Remember that we have a large number of issues to resolve, and have only a limited amount of time to reproduce your issue.
Short, explicit instructions make it much more likely we'll be able to reproduce the problem so we can fix it.
If the problem persists, please open a new issue following our submission guidelines.
A good way to make a minimal repro is to create a new app via ng new repro-app and adding the minimum possible code to show the problem. Then you can push this repository to github and link it here.
That said, the path generated ./tsconfig.app.json is correct as the app and server tsconfig reside in the same folder.


Enhancement: Temperature line on Live Monitoring graph

Enhancement: Temperature line on Live Monitoring graph
Temperature is extremely relevant to power usage if you have/use Air Conditioning. It would be great to see a line graph of that on the live monitoring graph as another data input.

Seems like the lat/long info could be used to determine this as well (with a weather data source.

Hi @mp09 - That's definitely possible.  The challenge we run into is that the API endpoints we scrape to get the local temperature based on lat/long tend to require that the user set up a API token and observe rate limiting on the amount of calls allowed.  Grafana may have a plugin that helps.  I'll see if I can figure out a good way to do this more generically, but would love some help.

I have an idea.  There is a plugin for telegraf to pull OpenWeatherMap current location weather data (including temperature) - see https://github.com/influxdata/telegraf/blob/master/plugins/inputs/openweathermap/README.md.

We could make this an option during setup (e.g. - Do you want to pull current weather data from OpenWeatherMap?)
It would require the user to go to https://openweathermap.org/ to set up an account and copy the API key which they would paste into the setup process.
If weather data is available, the dashboard.json can render it.  Would the preference be to have it show up on the main Live Monitoring -> "Energy Usage" graph or a separate panel?

Ok, I used the OpenWeatherMap plugin to get the data into InfluxDB and have added it to the "Energy Usage" graph.  Here is an example of adding Temperature (F) and Cloud Coverage (%). No prefect but I plan to experiment with better visuals but looking to see if this is the general direction that would be helpful.

Update: I have created a branch called "weather" that is my running test configuration.  Go here if you want to check it out. Keep in mind that it isn't integrated into setup.sh or upgrade.sh yet.  I'm still testing the new container.
Here is my approach:

I created a new service called weather411 that runs in a container and periodically (every 10m) reaches out to OpenWeatherMap.org to get the latest weather data for your location.
Configuration:  Will require users to sign up for a free account at OpenWeatherMap.org and get an API KEY.
The API KEY, your Latitude and Longitude are entered into the weather411.conf config file.  Ultimately this will be created by setup.sh or upgrade.sh.
The weather411 service stores the data in InfluxDB in the powerwall DB allowing us to pull this into the existing Powerwall Dashboard.

Example overlay:

This only show the "temperature" and "clouds" (a % of cloudliness) data but there are many others available that may be interesting - I'm thinking:

uvi (UV radiation - would be interesting to see if there was a correlation to production)
rain (Nice to know when we get a free panel wash)
wind (Potential cooling for higher efficiency)
visibility (Takes into account more than just clouds but inverse metric)

Example weather data available from weather411 that I'm graphing:

BETA Testers
...or should I say, "Storm chasers"? 😄
If you want to try the weather data feature, here is how you can check it out.
Highly recommended: back up your data first.
# from the Powerwall-Dashboard folder

# First pull down the latest code from Github
git pull

# Second, switch to the weather branch (the BETA code)
git checkout weather

# Third, run the weather setup script and follow instructions
./weather.sh

OpenWeatherMap Note
After you sign up for the free OpenWeatherMap.org account, make sure you check your email and verify.  Also, the API Key you get may not be active right away.  It could take up to 2 hours but in my recent test it was working within 10 minutes.  Please let me know your experience!
Dashboard Update
You need to install the newer dashboard.json that includes the weather data for the "live monitoring" graphs. In Grafana:

From Dashboard\Manage (or Dashboard\Browse), select Import
Upload one the dashboard.json in your Powerwall-Dashboard folder.
If you want a weather dashboard, you can upload the test dashboard dashboard-weather.json in the weather/ folder.

Hopefully you will soon see something like this:

Issues

The temperature data on the Live monitoring graph shows up as (%) instead of °C or °F.  From what I can tell, Grafana only allows two axis.  We have "kW" and "%".  I put temperature on the "%" axis but it is confusing. If anyone has a better idea, please let me know.
The graphs are basically set for °C but during the weather setup (weather.sh) you can choose Imperial units (°F) which is what will show up on the live monitoring instead of °C.  However, for the weather dashboard, the values will be wrong as the axis is set for °C.  Edit the panel and change the units from °C to °F.
The weather411 service is storing all of the data from OpenWeatherMap into InfluxDB so there are many other data points you can play with. The weather411 graphs above show some of it.

How's the weather out there? 😁
Before I release this as v2.5.0 officially, I am running test and looking for feedback from the community.  Please post any issues, questions and suggestions here.

awesome! thanks for working on this :)
Two issues so far.
minor one, the /location.html site has latitude twice in the text
Second, it failed to find my file:
Running Docker-Compose... ERROR: Couldn't find env file: /volume2/docker/grafana/Powerwall-Dashboard/grafana.env Weather Setup Complete
I'm not sure why that file isn't there though. things seem to be working fine.

I didn't receive any install errors, but I needed to follow your earlier instructions to remove the weather docker image and force the docker image download. It seems to be working well.

minor one, the /location.html site has latitude twice in the text

Great catch!

Second, it failed to find my file:
Running Docker-Compose... ERROR: Couldn't find env file: /volume2/docker/grafana/Powerwall-Dashboard/grafana.env Weather Setup Complete

Thanks @mp09 - This indicates you have an older install before we externalized the Grafana settings for users who wanted to customize it more.  You can fix this by doing this:
cp grafana.env.sample grafana.env

Thanks @leemj001 - If you want to remove and re-install the latest weather docker image you can do this:
docker stop weather411
docker rm weather411
docker images | grep weather411 | awk '{print $3}' | xargs docker rmi -f
docker-compose -f powerwall.yml up -d

Thanks for your help and feedback!

That helped, thanks! However since deploying the newer version, it looks like grafana is unhappy with permissions -- though I'm not sure how permissions would've changed on the database:
t=2022-08-21T17:37:55+0000 lvl=eror msg="Failed to rotate token" logger=context error="attempt to write a readonly database" t=2022-08-21T17:37:55+0000 lvl=eror msg="Failed to update last_seen_at" logger=context userId=1 orgId=1 uname=admin error="attempt to write a readonly database" t=2022-08-21T17:37:56+0000 lvl=eror msg="Failed to import dashboard" logger=context userId=1 orgId=1 uname=admin error="attempt to write a readonly database" t=2022-08-21T17:37:56+0000 lvl=eror msg="Request Completed" logger=context userId=1 orgId=1 uname=admin method=POST path=/api/dashboards/import status=500 remote_addr=<IP_ADDRESS> time_ms=139 size=40 referer=http://synology.local:9000/dashboard/import
but now I can't import the new dashboard .json

Interesting.  Thanks @mp09  can you run a few commands to see what permissions you have on those files?
# what permission are set on the files and folders?
ls -la grafana

# try restart grafana?
docker restart grafana
docker logs grafana

Worse case, since Grafana is just the UI on the stack, you could completely remove grafana and start from a clean install (your powerwall data is in InfluxDB).  Of course, I recommend a backup (e.g. sudo tar -zcvf backup.tgz Powerwall-Dashboard) 😁
# remove grafana container
docker stop grafana
docker rm grafana
docker images | grep grafana | awk '{print $3}' | xargs docker rmi -f

# rebuild grafana directory
mv grafana grafana.bak
mkdir grafana
docker-compose -f powerwall.yml up -d

You will now need to set up the configs in grafana again: https://github.com/jasonacox/Powerwall-Dashboard#grafana-setup

Cleaning that up worked, thanks!

We had some interesting weather today which was great for the beta testing! 😃
Sudden cold front from about midday with clouds & rain (and snow in our alps). Looks to be working well, as below.

However, I noticed I wasn't receiving any rain data (and it was definitely raining).
@jasonacox - I think there is a small issue with retrieving the rain or snow values from the JSON result of the OpenWeather API request. I have made a change to my local test server which seemed to fix the issue, so will submit a PR.
It started raining here at about 12:30pm, so the JSON data began to include "rain.1h" values, however it was showing as Null. I fixed it about 8pm as you can see below.

I've also noticed the JSON response may not include include a 3h value.

I had to change the weather panels to show "1h" instead of "3h" to see rain data - I wonder what would be more reliable as a default?

Also, when either "rain" or "snow" is not being returned at all, the values for rain_1hr rain_3hr etc. will be set to zero be default.
Maybe a default of None would be better? It appears the OpenWeather API could return either 1hr or 3hr data sometimes, so for consistency my thoughts would be to set the values to None when no data is returned. What do you think?

Thanks for the fix @mcbirse! I'm open to making more adjustment. The 1hr and 3hr data point did seem like an odd way to provide the data, but we probably need to see more events to determine the best approach?

I'm planning on adding a weather section to the bottom of the default dashboard.json.  Thoughts?

I have merged the weather branch changes into main and ran some tests.  If you are the beta (weather) branch, you can move back to main and upgrade:
# switch to main branch
git checkout main

# upgrade to latest
./upgrade.sh

This should not overwrite your weather11.conf file and upgrade.sh will use that but will force an upgrade of weather411.  If you have been following this issue but did not install the beta (weather) branch, the upgrade script will prompt you for the OpenWeatherMap information (Key, location and units).
Thanks everyone for all the help.  Please post any issue or questions.

I have merged the weather branch changes into main and ran some tests. If you are the beta (weather) branch, you can move back to main and upgrade:
# switch to main branch
git checkout main

# upgrade to latest
./upgrade.sh

This should not overwrite your weather11.conf file and upgrade.sh will use that but will force an upgrade of weather411. If you have been following this issue but did not install the beta (weather) branch, the upgrade script will prompt you for the OpenWeatherMap information (Key, location and units).
Thanks everyone for all the help. Please post any issue or questions.

Would this be the procedure for non-beta testers? I'd definitely like to incorporate this data into my model. We've been having wet/overcast days here in North Texas.

Would this be the procedure for non-beta testers? I'd definitely like to incorporate this data into my model. We've been having wet/overcast days here in North Texas.

@oralallen82 - if you never changed from the main branch, it should be as simple running upgrade.sh only and following the prompts to install weather411:
# upgrade to latest
./upgrade.sh

I did this on my production set up (as I was testing the weather branch on a separate vm anyway), and the upgrade and install/setup was all very seamless!

Thanks I just did the upgrade and setup weather411 going to install the
dashboard now.
On Tue, Aug 30, 2022 at 6:34 PM Michael Birse @.***>
wrote:

Would this be the procedure for non-beta testers? I'd definitely like to
incorporate this data into my model. We've been having wet/overcast days
here in North Texas.
@oralallen82 https://github.com/oralallen82 - if you never changed from
the main branch, it should be as simple running upgrade.sh only and
following the prompts to install weather411:
upgrade to latest
./upgrade.sh
I did this on my production set up (as I was testing the weather branch on
a separate vm anyway), and the upgrade and install/setup was all very
seamless!
—
Reply to this email directly, view it on GitHub
https://github.com/jasonacox/Powerwall-Dashboard/issues/42#issuecomment-1232276448,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AIDLQFXT4BDYP2BYX3JCNVLV32LABANCNFSM5ZLAI5RA
.
You are receiving this because you were mentioned.Message ID:
@.***>

Is there a way to determine if your weather411 is working as expected. I completed setup ~ 30 or so mins ago and I don't see any data.

Hi @oralallen82 - Yes, try this:
# see if weather411 is running
docker logs weather411

Check the web based output from weather411: http://localhost:8676/
(where 'localhost' is the box running the docker containers)

ERROR: No config file. Fix and Restart

Hi @oralallen82 - Yes, try this:
# see if weather411 is running
docker logs weather411

Check the web based output from weather411: http://localhost:8676/ (where 'localhost' is the box running the docker containers)

ERROR: No config file. Fix and Restart

Thanks @oralallen82 - That means the OpenWeatherMap config was never set up.  When you ran upgrade.sh did it ask you to set up weather?  If so, did you enter the OpenWeatherMap KEY and your location information?  If so, that should have created the config file weather/weather411.conf.
You can try it again by running upgrade.sh or by running weather.sh directly.
Alternative, if you see the file weather/weather411.conf, you can try to remove and start weather411:
docker stop weather411
docker rm weather411
docker images | grep weather411 | awk '{print $3}' | xargs docker rmi -f
docker-compose -f powerwall.yml up -d

I ran weather.sh manually twice I didn't get it when I did the upgrade.sh I only see the sample file. I'll try the steps above and report back.

Interesting. If you didn't get a weather/weather411.conf after you ran weather.sh, that has me concerned.  I'm trying to determine if there is any situation where it would fail to create that file.  The first thing weather.sh does is copy the weather/weather411.conf.sample file into weather/weather411conf.  Did you get any permission or other errors?
Thanks for your help with this.  Worse case you can do the manual copy and edit weather411.conf to have your settings, but the script should be doing that for you.

I manually updated the .conf file now when I run the docker logs weather411 I get no such container. ./upgrade.sh doesn't do anything. ./weather.sh shows my manually updated file so I know it's visible now.

Oh no!  I need to add code to prohibit root from running upgrade.sh.  I'll add that to my to-do list.
Did you run docker-compose -f powerwall.yml up -d  - if so, did it give any errors?

Got it figured out. I reran : docker-compose -f powerwall.yml up -d and that reinstalled and I was able to see weather411 logs

Awesome!  I do think the sudo probably caused the initial issue.  I'll fix that.

Awesome! I do think the sudo probably caused the initial issue. I'll fix that.

I definitely believe that did it. I didn't get the option to configure weather411 and after running the weather.sh manually it didn't create the weather411.conf
Once you have it setup where users cannot run sudo for upgrade.sh I think no one else would run into that issue.

Thanks @oralallen82 !  I just pushed out "no more sudo" v2.5.2. :)  I appreciate your help and quick feedback!

Thanks @oralallen82 ! I just pushed out "no more sudo" v2.5.2. :) I appreciate your help and quick feedback!

Glad I was able to help. Is there a way to fix the permission issue caused by me running sudo. I tried ./upgrade.sh and didn't get the relevant prompts indicating I am on the current version etc.

Can you paste what you are getting when you run upgrade.sh?

Can you paste what you are getting when you run upgrade.sh?

Sure see link below.
https://user-images.githubusercontent.com/33994774/188324737-6a57e39c-73e2-4eeb-b57d-661d2831fef2.mp4

Interesting - it seems it isn't even getting started.  Look in the directory to see if there is a tmp.sh file.  If so, remove it:  sudo rm tmp.sh.  Try upgrade again and if that doesn't work, try this:
curl -sL --output tmp.sh https://raw.githubusercontent.com/jasonacox/Powerwall-Dashboard/main/upgrade.sh
bash tmp.sh upgrade

Thanks for helping troubleshoot this.

The tmp.sh file was there. That was an easy fix. Thanks again @jasonacox

ERROR: No config file. Fix and Restart
On Tue, Aug 30, 2022 at 8:32 PM Jason Cox @.***> wrote:

Hi @oralallen82 https://github.com/oralallen82 - Yes, try this:
see if weather411 is running
docker logs weather411
Check the web based output from weather411: http://localhost:8676/
(where 'localhost' is the box running the docker containers)
—
Reply to this email directly, view it on GitHub
https://github.com/jasonacox/Powerwall-Dashboard/issues/42#issuecomment-1232345878,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AIDLQFXMNXXXBSXQEJ33P3DV32YZ5ANCNFSM5ZLAI5RA
.
You are receiving this because you were mentioned.Message ID:
@.***>


Minigame translations, textures

Text:
Started translating Game Table minigames:
Completed: Kaori's Soulful Dojo, Kuuka Kuuka the Whirling Wonder
In Progress: Chu-Chu Panic (Rin minigame)

Created new folder: "Text\GuildHouse\Game Table"
Created an individual text file for each minigame inside this folder.
Created "Text\GuildHouse\Game Table\Other text.txt" file for common / misc lines related to minigames.
Created  "Text\_02.resizer.txt" for resizes of minigame elements.
Moved "MiniGameName.txt" from "Text\Event" to "Text\GuildHouse\Game Table" to have all minigame related text at one place
Moved "Minigame.txt" from "Text\Event" to "Text\GuildHouse\Game Table", renamed to "Dash to Eternal Summer.txt" as this file contains text for this game. Moved some common lines out of this file to "Other text.txt"
Edited GuildHouse\Furniture.txt - Changed typo in Kuuka minigame reward furniture name (Ecstasy Jumper Trophy)

Texture:
Added several textures for Side Stories and Minigames from Global CDN resources, up to the point of availablity.

Side Stories: added logos, tutorial/tips screen, misc textures (buttons, diary texts) up till Rino Wonderland event
Minigame: added logos and tips/tutorial screens of the 4 minigames available in global (tips are actually available for the Rin game too)

@Kevga Thanks for lookin through it, and the suggestions!
I already found other mistakes though.. :(
I mixed up some textures (Kuuka minigame tutorial is ordered wrong i think), and I think some wording changes are needed for the text to be in sync with the global textures. (eg: Kaori's "image training" is called "mental training" in global.. thinking again, makes more sense :D)
Also, if I commit not to the branch to be merged, then those will be included in the pull request as well?
If I'm only touching files that I have added now, can that cause a merge conflict? (I don't want to alter files that are already present in the PriconneRe-TL/master branch)

You can add commits to your branch that fix the mistakes and they will automatically be included in the PR, that clutters the commit history though.

You can add commits to your branch that fix the mistakes and they will automatically be included in the PR, that clutters the commit history though.

Hm.. I don't think I have ever done any of this. Can you help me in the afternoon/evening?

@ImaterialC Please leave this pull request open for the time being, I'd like to fix my mistakes. Thanks.

I think you can switch it to "draft", which prevents merging it.
Also I double checked myself, if the mistakes you want to fix are in the most recent commit you can just make the changes and then commit with --amend and then again force push, no resetting nessecary

I think you can switch it to "draft", which prevents merging it. Also I double checked myself, if the mistakes you want to fix are in the most recent commit you can just make the changes and then commit with --amend and then again force push, no resetting nessecary

I am using Github Desktop for my github operations.
 Anyway it probably doesn't matter at all, just commit your fixes and then Cornelia can squash the commits into one when accepting the PR if it matters.

I merged. But leave it open as requested


Proposal for restructuring flexibility sidebar item

In this discussion on Basecamp we thought of renaming the 'Electricity balance' tab to 'Flexibility' since this fits better in the energy transition narrative. When renaming this tab the names within the tab also need to change (since Flexibility is used there already) and I had some ideas of restructuring the sidebar items within the tab:

Renaming 'Flexibility' sidebar item to 'Excess electricity', because it is only about usage of excess electricity and not about using excess heat.
Taking 'Demand response' out of the 'Excess electricity' sidebar item since it not about excess electricity production, but a separate item.
Moving the information in the last four slides of import/export to the documentation because it contains a lot of very detailed text and it has no sliders.

Here a visualisation of the ideas, let me know what you think! @antw @ChaelKruip @jorisberkhout @DorinevanderVlies @michieldenhaan @MartLubben :

Let me know what you think!

I like it a lot!
One extra thought: perhaps we should consider moving the Merit Order section to the Cost section? This has more to do with prices and marginal costs than flexibility IMO.
Curious about your thoughts @AlexanderWirtz @DorinevanderVlies @jorisberkhout @michieldenhaan @MartLubben @marliekeverweij

Okay, we are going realise the above proposal as part of the time-resolved chart project. Including this:

moving the Merit Order section to the Cost section

Please let us know when you have suggestions!

Now on beta :) we only need an icon for the demand response sidebar item, when you have inspiration....


Add weekly dependabot

Hi! Thanks for creating this fork, the maintainer of the original crate is not responsive at all :cry: .

This adds a weekly dependabot job to the repository to update its dependencies.

Would you like to share maintainance of this crate? I'd love to help out (passively at least). I would like to add dependabot (this PR) and bors as a mergebot. If you don't have any interest in maintaining this further, I would love to take over completely. You can transfer this repository to me and give me access to publishing on crates.io if you want!

Thanks for creating this fork

Technically it's not a fork. I used this project to learn how to write mdbook preprocessors, so I wrote it from scratch (although to be fair with heavy influence from the original) ^^.
I am not well versed when it comes to GitHub bots, nor do I have much interest in further maintaining this crate, so I'll gladly transfer ownership to you. Thank you for the offer!

Should I remove myself from owners from crates.io, too? I'm not sure what the normal procedure is here.

If you really don't want to be maintainer anymore, yes. I have access to the crate on crates.io now, so if you want, go ahead! :+1: thanks for making this so smooth!


New problem in TF 2.6 that does not appears in 2.3.1 (TypeError: Input must be a SparseTensor.)

Hi,
I've been migrating our tensorflow images from 2.3 to 2.6. To my surprise, I've found bugs in the code that didn't appear before. The error is as follows:
TypeError: in user code:

    <ipython-input-108-26abd43eddb2>:11 parse_function  *
        values = [float(_fill_in_missing(value)) for value in values]
    <ipython-input-110-f4a86837955a>:92 _fill_in_missing  *
        return tf.sparse.to_dense(x, default_value)
    /opt/conda/lib/python3.8/site-packages/tensorflow/python/ops/sparse_ops.py:1711 sparse_tensor_to_dense  **
        sp_input = _convert_to_sparse_tensor(sp_input)
    /opt/conda/lib/python3.8/site-packages/tensorflow/python/ops/sparse_ops.py:71 _convert_to_sparse_tensor
        raise TypeError("Input must be a SparseTensor.")

    TypeError: Input must be a SparseTensor.

The functions that return this error are the following:
def parse_function(example_proto):
    '''Parse the values from tf examples'''
    feature_spec = tf_transform_output.transformed_feature_spec()
    features = tf.io.parse_single_example(example_proto, feature_spec)
    values = list(features.values())
    values = [float(_fill_in_missing(value)) for value in values]
    features = tf.stack(values, axis=0)
    return features
def _fill_in_missing(x):
    """Replace missing values in a SparseTensor.
    Fills in missing values of `x` with '' or 0, and converts to a dense tensor.
    Args:
    x: A `SparseTensor` of rank 2.  Its dense shape should have size at most 1
      in the second dimension.
    Returns:
    A rank 1 tensor where missing values of `x` have been filled in.
    """
    default_value = '' if x.dtype == tf.string else 0
    return tf.sparse.to_dense(x, default_value)

def get_dataset(path):
    '''Get the dataset and group them into windows'''

    dataset = tf.data.TFRecordDataset(path, compression_type="GZIP")
    dataset = dataset.map(parse_function)
    dataset = dataset.window(HISTORY_SIZE, shift=SHIFT, drop_remainder=True)
    dataset = dataset.flat_map(lambda window: window.batch(HISTORY_SIZE))
    dataset = dataset.map(add_mode)
    dataset = dataset.batch(BATCH_SIZE, drop_remainder=True)
    dataset = dataset.repeat()

    return dataset

I've tried ignoring the _fill_in_missing function and some new errors appears related to the batch (these errors also don't appear the TF 2.3 version):
Cannot add tensor to the batch: number of elements does not match. Shapes are: [tensor]: [2,1], [batch]: [1] [Op:IteratorGetNext]
It's interesting that the previous batches can be used without any problem, but the last batch has a problem and I don't find a way to fix it.
Older versions (in which the code run without problems):
TF version: 2.3.1
Beam version: 2.28.0
TFMA version: 0.24.3
TFT version: 0.24.1
TFX version: 0.24.0
Current Versions:
tfx-bsl==1.3.0
tensorflow-model-analysis==0.34.1
tensorflow-data-validation==1.3.0
tfx==1.3.2
tensorflow-metadata==1.2.0
ml-metadata==1.3.0
tensorflow-transform==1.3.0
tensorflow==2.6.2
pyarrow==2.0.0
apache-beam==2.32.0
tensorflow-serving-api==2.6.0
tensorflow-estimator==2.6.0

@FernandoDorado
In order to expedite the trouble-shooting process, please provide a code snippet to reproduce the issue reported here. Thanks!

I've create a COLAB  notebook in order to reproduce the error.
This is the link  of the data, in case of problems with the data that I've previously loaded into the notebook.

@FernandoDorado Could you please try to execute your code on latest TF version 2.7.0 and have a look at the  tf.sparse and guide for reference ? Please let us know if it helps ? Thanks!

I took a look, but for now, don't work. Anyway, I see that the problem is more from my side, but I don't understand why the code works perfectly in the older version.


Hyperparameter setting for Table Retrieval Model

Dear developers,
Could you please share the hyper-parameters used for the table retrieval model to replicate the results here? In the paper, you mentioned that you used warmup ratio 0.2 to train the large retrieval model, but in the training script you provided the warmup ratio is 0.01. Also, is the hyper-parameter setting for the medium model the same with the large model? Thanks a lot!
Thanks!

Hi,
Can you give me the exact name of the model/ models that you want to
replicate, I can look at our experiments and give you the exact hyper
parameters to run.
Thanks,
Syrine
On Tue, Aug 24, 2021 at 9:40 PM Doreen @.***> wrote:

Dear developers,
Could you please share the hyper-parameters used for the table retrieval
model to replicate the results here
https://github.com/google-research/tapas/blob/master/DENSE_TABLE_RETRIEVER.md?
In the paper, you mentioned that you used warmup ratio 0.2 to train the
large retrieval model, but in the training script you provided the warmup
ratio is 0.01. Also, is the hyper-parameter setting for the medium model
the same with the large model? Thanks a lot!
Thanks!
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/google-research/tapas/issues/135, or unsubscribe
https://github.com/notifications/unsubscribe-auth/APARZOMQDWZMKZK6UBWSZUTT6PYSPANCNFSM5CXQWUPA
.
Triage notifications on the go with GitHub Mobile for iOS
https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675
or Android
https://play.google.com/store/apps/details?id=com.github.android&utm_campaign=notification-email
.


Automated cherry pick of #9351: feat(cloudid): support aliyun saml auth

Cherry pick of #9351 on release/3.6.
#9351: feat(cloudid): support aliyun saml auth

Codecov Report

Merging #9379 (592ae29) into release/3.6 (b9d30c0) will increase coverage by 1.45%.
The diff coverage is 4.05%.

@@              Coverage Diff               @@
##           release/3.6   #9379      +/-   ##
==============================================
+ Coverage         5.86%   7.32%   +1.45%
==============================================
  Files              828     257     -571
  Lines           129133   34355   -94778
==============================================
- Hits              7577    2517    -5060
+ Misses          120876   31592   -89284
+ Partials           680     246     -434

Flag
Coverage Δ

aFlag
7.32% <4.05%> (+1.45%)
:arrow_up:

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

Impacted Files
Coverage Δ

pkg/apigateway/handler/auth.go
0.00% <0.00%> (ø)

pkg/cloudcommon/db/apply_manager_method.go
0.00% <0.00%> (ø)

pkg/cloudcommon/db/archs.go
0.00% <ø> (ø)

pkg/cloudcommon/db/db_dispatcher.go
0.00% <0.00%> (ø)

pkg/cloudcommon/db/models.go
0.00% <0.00%> (ø)

pkg/cloudcommon/db/sharablebase.go
6.01% <0.00%> (-0.06%)
:arrow_down:

pkg/cloudcommon/db/virtualjointbase.go
0.00% <0.00%> (ø)

pkg/cloudprovider/objectstore.go
2.06% <0.00%> (-0.51%)
:arrow_down:

pkg/cloudprovider/resources.go
0.00% <0.00%> (ø)

pkg/compute/regiondrivers/aliyun.go
0.33% <0.00%> (-0.01%)
:arrow_down:

... and 529 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 474831d...592ae29. Read the comment docs.


Feature Request: Optionally use an own contacts book (istead of the system's one)

Expected behavior
If K9 realizes that it does not have access to the system contacts it should create and use its own contacts book. Alternatively, there could be an option for this in the settings.
Actual behavior
When K9 does not have access to the contacts book:

Composing a mail: "Add from Contacts" uses the system contacts book while proposing contacts after I typed the first characters does not work at all
Creating a new contact: it is created in the system contacts book

There are some proprietary apps that want access to my contacts. I do not want them to also know the email addresses of all my contacts, therefore I will not use the contacts book for emails.
By the way, in some countries it is illegal to give other people's email addresses to third-party companies without their permission.
Steps to reproduce

Deny contacts permission for K9 or disable the contacts app
Do something that involves contacts (add an address to contacts or compose a mail)

Environment
K-9 Mail version: 5.403 (F-Droid)
Android version: 6.0
Account type: IMAP

FWIW #3159 includes a realtime permissions interface for requesting access to the contacts list (and will continue to run if you deny this either initially or after the app has already run.  It does not include a separate fallback database if you deny the contacts permission however.  A question-- what happens if the user denies the contact, but then later accepts?  Would the contact books be merged somehow?
Anyway, just wanted to note this is at least partially done.

A question-- what happens if the user denies the contact, but then later accepts? Would the contact books be merged somehow?

Well, merging (adding all internal contacts to the system's one except if a contact with the same email address already exists there) would probably be the best option (although I do not think that there are going to be many users that do this, so it is not that important).

It does not include a separate fallback database if you deny the contacts permission however.

Actually, this was the most important point for me :-(. Privacy is the main reason for which I am using an open source email client and not having to use Android's system contacts book would greatly improve privacy.
PS: Someone has even proposed not to use Android's contacts book at all for DeltaChat, another email client: https://github.com/deltachat/deltachat-android/issues/236
Anyway, apart from this K9 is great! 👍

So I gave this a little thought-- I'm wondering if rather than re-implement a local database and contacts provider, it would make more sense tolook at the AOSP Contacts app and provider (and common repo).  Either use portions of these within k9 or allow k9 to have contacts provided from a non-google source for privacy.  In other words-- rather than have k9 build in its own contacts system, the contacts in the 2nd contacts app would be kept but not synced with anything is the idea.  And maybe you'd toggle between the two.  That way you can keep your k9 contacts separated in its own app.
I'm not gonna actually implement this myself, but for anyone who wanted to pursue it, it's an idea, and there's the source.

We have no interest in adding contact manager functionality to K-9 Mail. However, allowing auto-completion for addresses to which the user has already sent messages is something we might add in the future. See #1006.


Add multiple meta storage in command examples

What would you like to be added:
NAME:
juicefs quota - Manage directory quotas
USAGE:
juicefs quota command [command options] META-URL
DESCRIPTION:
Examples:
$ juicefs quota set redis://localhost --path /dir1 --capacity 1 --inodes 100
$ juicefs quota get redis://localhost --path /dir1
$ juicefs quota list redis://localhost
$ juicefs quota delete redis://localhost --path /dir1
<Please add MySQL/PG/TIKV meta storage example>
.......
Why is this needed:
There is only redis example in the command line help output, and some new users may choose other meta storage than redis, they will ask how to specify a MySQL/PG/TIKV as a meta storage.

We don't need to add these in every command, but some where globally.

Just add samples to "mount" command, since it's a relatively high frequency operation?


chore(deps): upgrade dependencies

Upgrades project dependencies. See details in workflow run.

Automatically created by projen via the "upgrade-main" workflow

AWS CodeBuild CI Report

CodeBuild project: DDKIntegrationTestsD8472609-5SCHWjldmWcf
Commit ID: 6074be211c0a09500b2bac90893de6bbbbd5f383
Result: SUCCEEDED
Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

AWS CodeBuild CI Report

CodeBuild project: DDKIntegrationTestsD8472609-5SCHWjldmWcf
Commit ID: 2e04da797f06e3a9ac280e6dda4ff1ca3fa89406
Result: SUCCEEDED
Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

AWS CodeBuild CI Report

CodeBuild project: DDKIntegrationTestsD8472609-5SCHWjldmWcf
Commit ID: bc8b0dddb7b340d416f161d2aaeac0780882c332
Result: SUCCEEDED
Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository


[$1000] Workspace - "You appear to be offline" page not showing after tap on "Continue with setup"

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

Action Performed:
Pre-requisite: user must be logged in, initiated a bank account setup with Plaid using Wells Fargo credentials until the "Beneficial owners" step

Fill out the form for an additional beneficial owner
Disable the internet connection
Go back to LHN
Tap on profile avatar in top right corner
Tap on "Workspaces"
Tap on the same workspace the bank account setup was initiated
Tap on "Bank account".\
Tap on "Continue with setup"

Expected Result:
User should see a full page blocking view saying "You appear to be offline"
Actual Result:
The page view changes as if the setup process was restarted
Workaround:
Unknown
Platforms:

Which of our officially supported platforms is this issue occurring on?

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

Version Number: 1.3.62-3
Reproducible in staging?: Yes
Reproducible in production?: Yes
If this was caught during regression testing, add the test name, ID and link from TestRail:
Email or phone of affected tester (no customers):
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos: Any additional supporting documentation
https://github.com/Expensify/App/assets/78819774/73626c69-4c36-4f6a-ad33-185ed1a840dc
Expensify/Expensify Issue URL:
Issue reported by: Applause - Internal Team
Slack conversation:
View all open jobs on GitHub
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~01f1c9b22a350eb5fe
Upwork Job ID:<PHONE_NUMBER>423120384
Last Price Increase: 2023-10-03

Proposal
Please re-state the problem that we are trying to solve in this issue.
User does not see a full page blocking view saying "You appear to be offline" when internet connection is unavailable.
What is the root cause of that problem?
BankAccountStep is not wrapped within FullPageOfflineBlockingView component:
https://github.com/Expensify/App/blob/53ac4eeed813b1ea355081622dad8a07e4a9539e/src/pages/ReimbursementAccount/BankAccountStep.js#L104-L108
What changes do you think we should make in order to solve the problem?
Wrap BankAccountStep with FullPageOfflineBlockingView component, e.g.:
               <FullPageOfflineBlockingView>
                    <ScrollView style={[styles.flex1]}>
                        ...
                    </ScrollView>
                </FullPageOfflineBlockingView>

What alternative solutions did you explore? (Optional)
N/A

@situchan Please let me know if that above proposal works for you. Thanks.

bump @situchan for review

@situchan bump ^

@situchan bump thanks

Hi @situchan You need to follow the exact reproduction steps.
You need to select Connect with Plaid, until step 3, then set to offline.
Here's the before/after videos:
Before:
bank-account-setup-before.webm
After:
bank-account-setup-after.webm

New findings on this bug:
When you're offline, clicking on the bank account may trigger the blocking offline view. But as soon as you click on the header back button, you can navigate through the steps without the offline blocking view.
See this video:
bank-account-step.webm
I think, we need to add offline blocking view to each of the steps for a consistent behavior.

Proposal
Updated

reviewing updated proposal

@situchan can you address latest comments? Thanks

bump @situchan

updating today

@situchan can you please update this today? thank you

I don't think we should fully block all pages when offline

Bumping price up

I don't think we should fully block all pages when offline.
Still open for better solution

@situchan what is the ideal solution? the expected result says

User should see a full page blocking view saying "You appear to be offline"

i.e. this page doesn't need to be offline blocking

Proposal
Please re-state the problem that we are trying to solve in this issue.

After completing upto 4th step of Connect Bank Manually. If user goes offline and re-opens "Bank Account" screen, the user sees "Continue with Setup" button and when user presses it, the initial screen on "Bank Account" screen is shown (where we have "Connect online with Plaid" and "Connect manually").

What is the root cause of that problem?

Initially when ReimbursementAccountPage is loaded in offline mode hasACHDataBeenLoaded is true.
Now when i press continue is pressed we use this.fetchData(true) which fetches data from server.
Now when componentDidUpdate is called the last line of it is called which navigates to ReimbursementAccountPage again.

https://github.com/Expensify/App/blob/e0ab03828a60d18b7a6c7a966a01fdfae3a6ecb4/src/pages/ReimbursementAccount/ReimbursementAccountPage.js#L177

Also Start Over button is calling API. So we will need to disable it as well.

What changes do you think we should make in order to solve the problem?

We will use "useNetwork" hook in "ContinueBankAccountSetup" component to check if Button and MenuItem should be disabled or not.

-isDisabled={Boolean(pendingAction) || !_.isEmpty(errors)}
+isDisabled={isOffline || Boolean(pendingAction) || !_.isEmpty(errors)}

-disabled={Boolean(pendingAction) || !_.isEmpty(errors)}
+disabled={isOffline || Boolean(pendingAction) || !_.isEmpty(errors)}

What alternative solutions did you explore? (Optional)

N/A

I will provide feedback tomorrow

@situchan bump on feedback ^^

@situchan any feedback yet?

@laurenreidexpensify do you agree all these pages should be offline blocking?

cc: @Expensify/design

And cc @trjExpensify our offline patterns expert

Note: currently we disable buttons when offline (like in 2nd, 3rd screenshots) even if all fields are correctly filled

Woof, been a while on this flow! I believe it's this:

For Connect with Plaid it requires an API call so that one is Pattern D as we navigate to a full page blocking form.
For Connect manually (or returning to the setup) we use Pattern C at each step, so that's a greyed out button with "you are offline" underneath it. Meaning, you can fill out the details on the form page if you're offline, but you can't submit the form until you come back online.

CC: @nkuoch @MariaHCD for a fact check!

Yes, that sounds correct to me!

@MariaHCD what about this page? This also requires API call (OpenReimbursementAccountPage) on mount

I believe we show the Connect bank account page if offline even if we can't make the call to OpenReimbursementAccountPage:
https://github.com/Expensify/App/assets/12268372/0e04d48a-d1d7-46a9-b2d6-5fb87d4c55eb

Yup, I think that's correct! :)

@situchan with the context above do any of the proposals make sense, or are we still waiting for new ones?

No proposals yet which meet the expected behavior here
I see whole design refactor of bank flow setup is coming so I am not sure if we should hold all issues related to bank account flow.

@situchan @MariaHCD:
Please confirm if these are now the expected results:
Connect with Plaid to use Pattern D when offline.
Connect manually to use Pattern C when offline.
If that's the case, then I can see it has already been implemented, and there is nothing to change?

@zukilover nothing to change offline behavior here.
The page view changes as if the setup process was restarted is the only bug to fix.

Proposal
Updated

I see whole design refactor of bank flow setup is coming so I am not sure if we should hold all issues related to bank account flow.

I don't think the hold is necessary in this instance because either way on the changes to the proceeding pages the behaviour of clicking "Continue with setup" when offline shouldn't effectively restart the flow right?

I see whole design refactor of bank flow setup is coming so I am not sure if we should hold all issues related to bank account flow.

I don't think the hold is necessary in this instance because either way on the changes to the subsequent pages the behaviour of clicking "Continue with setup" when offline shouldn't effectively restart the flow right?

right. I don't have access to design doc so I was not sure if this page would be deprecated as well.

@zukilover I don't agree with your updated solution.
No satisfactory proposals yet.

right. I don't have access to design doc so I was not sure if this page would be deprecated as well.

Nope that page will remain 👍

Proposal
Please re-state the problem that we are trying to solve in this issue.
Incorrect handling of offline state during the workspace bank account setup flow.
What is the root cause of that problem?
Incorrect implementation of 'Offline First' practices.
What changes do you think we should make in order to solve the problem?
For the BankAccountManualStep page, we should display an OfflineIndicator under the form submit button, that way it is clear to the user that they are unable to continue because they are offline. Currently, the button is just disabled, which blocks the flow, but is unclear to the user why they cannot continue (even if they submit valid bank details).
Example result (already working):

What alternative solutions did you explore? (Optional)
N/A

@Samueljh1 this is bug to fix: The page view changes as if the setup process was restarted

@Samueljh1 please check full discussions before submitting proposal. Ref: https://github.com/Expensify/App/issues/26631#issuecomment-1770370177

Issue not reproducible during KI retests. (First week)

@situchan can you confirm if reproducible on your side? thanks

I think we should update OP to avoid confusion.
Expected Result: The page shows Continue with setup / Start over

Actual Result: The page view changes as if the setup process was restarted

@situchan but can you reproduce? Thanks

yes, this is still reproducible

@bernhardoj thanks for the detailed analysis. Though the solution doesn't work for me.
There's case when there's no "Continue with setup" button click event.
https://github.com/Expensify/App/assets/108292595/79f4f6af-375c-4ddf-a358-211829419acc

@bernhardoj we should fix that as well. Test with new account.
Here's full reproduction video:
https://github.com/Expensify/App/assets/108292595/6634cdba-8b82-4357-871a-3025ea549548

cc @rushatgabhane @marcochavezf re: #27901 - do you agree with @bernhardoj ^^

I found there is an issue created for that here.
We can still continue with our fix here without waiting for that issue to be solved.

Hmm, I am not sure why we should fix that here as it's same bug.

@bernhardoj https://github.com/Expensify/App/issues/31030 was closed. Can you update your proposal to cover that case as well?

Just a reminder for everyone that, if the root cause is indeed a regression from https://github.com/Expensify/App/pull/29260 (the clearing of ONYXKEYS.REIMBURSEMENT_ACCOUNT), I figured it out first in my proposal: https://github.com/Expensify/App/issues/26631#issuecomment-1704914521

@situchan I'm a little lost here 😅 can you provide a summary of where we're at here and how all the different issues connect to this? Thanks!

@situchan bump, can you provide a summary of where you think we're at with this one? Thanks

@situchan can you please take a look? Thanks

This issue has 2 root causes. I originally suggested to fix both here making https://github.com/Expensify/App/issues/31030 closed as dupe.
But @bernhardoj suggested to fix separately given that the fix of https://github.com/Expensify/App/issues/31030 is tricky and completely different solution.
@laurenreidexpensify do you agree to fix that separately?

Sounds good, I reopened #31030 and we can proceed on this one as planned 👍

@bernhardoj can you remind me, did you have a WIP proposal for this one ?

@situchan can you review again? thanks

@situchan bump thanks ^^

@bernhardoj can you please update proposal based on latest codebase? It's now function component.

@situchan bump ^^

reviewing updated proposal

Proposal
Please re-state the problem that we are trying to solve in this issue.
Workspace - "You appear to be offline" page not showing after tap on "Continue with setup"
What is the root cause of that problem?
We have not defined FullPageOfflineBlockingView for all steps.
What changes do you think we should make in order to solve the problem?
Add FullPageOfflineBlockingView for all ReimbursementAccount creation steps
Branch to test.
What alternative solutions did you explore? (Optional)
N/A

@situchan bump for reviews thanks

@situchan bump pls ^^

Waiting for @situchan review on proposal

sorry for late. will update today

@situchan did you get to review? thanks

@bernhardoj the bug is still reproducible after applying your solution. Can you share demo video (before fix and after fix)?

Thanks. Now got clear repro step.

@bernhardoj's proposal looks good to me.
🎀 👀 🎀 C+ reviewed

iirc we're revamping the bank account setup flow. @vitHoracek do you think we should move forward here or will any changes to the flow cover this issue?

Yes I agree, I am sorry that this was not caught before, putting this on hold for https://github.com/Expensify/App/issues/30442 and then we can evaluate if this issue persists

@NikkiWines that discussion happened already but we decided to not hold - https://expensify.slack.com/archives/C02NK2DQWUX/p1698141864555339?thread_ts=1697812101.673039&cid=C02NK2DQWUX

Oh, nice - thanks for the link @situchan. It's true that this issue doesn't involve the actual bank account flow aside from the initial requirements to get to the continue setup point. In that event, I agree that @bernhardoj's proposal looks good

Oh wow, 3 months old, this took a while. I think its not ideal because we might get conflicts in that refactor, but lets just go with this for now.

@situchan, @NikkiWines  I think the current step is expected since the user goes back to the beginning of the setup before reaching LHN. The actual issue is offline page is not shown in specific setup steps. What is your opinion about my proposal?

@wildan-m please read through our previous conversations, though it's long history. The expected behaviour is https://github.com/Expensify/App/issues/26631#issuecomment-1769353725 and https://github.com/Expensify/App/issues/26631#issuecomment-1770370177

PR is ready
cc: @situchan

This is not a recent regression. I think the issue always existed from the beginning.
As this was reported by QA team, we can skip regression test.

upwork.com/jobs/~01611d749111f4e5fe
@bernhardoj @situchan upwork job ^^

Offers sent to @bernhardoj and @situchan in Upwork

Payment Summary:
Contributor: $500 @bernhardoj paid in Upwork
C+ Review: $500 @situchan paid in Upwork

@laurenreidexpensify shouldn't this be 1k as stated in issue title? This is very old issue and accepted proposal was posted after price bump here

Payment Summary:
Further $500 each issued to @situchan and @bernhardoj in Upwork, as job bounty is $1000. Thank you


addition remark doc comments

Fixes #5598
Just a step I'm sure we could do more.

Pull Request Test Coverage Report for Build 254443

0 of 0   changed or added relevant lines in 0 files are covered.
6 unchanged lines in 1 file lost coverage.
Overall coverage remained the same at 76.383%

Files with Coverage Reduction
New Missed Lines
%

/libraries/Microsoft.Bot.Builder.Dialogs.Adaptive.Runtime/Extensions/ServiceCollectionExtensions.cs
6
93.1%

Totals

Change from base Build 254424:
0.0%

Covered Lines:
23012

Relevant Lines:
30127

💛  - Coveralls


docs, usability: Minor improvements to Global Query docs & settings

Description

Add placeholder text to Global Query settings, showing examples
Add link from Global Query settings to the docs (when published)
Add some more links between pages in the docs, to advertise Global Query.

Motivation and Context
Help users a bit, and advertise a great new feature.
How has this been tested?
Locally - in Obsidian
Screenshots (if appropriate)
Types of changes

Changes visible to users:

[x] Documentation (prefix: docs - improvements to any documentation content for users)
And minor usability changes in settings

Checklist

[x] My code follows the code style of this project and passes yarn run lint.
[x] My change requires a change to the documentation.
[x] I have updated the documentation accordingly.
[ ] My change has adequate Unit Test coverage.

Terms

[x] My contribution follow this project's contributing guide
[x] I agree to follow this project's Code of Conduct

/CC @kedestin for info - just some very minor tweaks to settings and docs of Global Query...


Update go

What this PR does / why we need it:
As the title says, just updating to get new better language support.
Which issue(s) this PR fixes (optional, in fixes #<issue number>(, fixes #<issue_number>, ...) format, will close the issue(s) when PR gets merged):
Fixes #
Special notes for your reviewer:
Release note:

Developer: Go 1.17

/lgtm

/approve


Couchbase Server Enterprise Edition 3.1.0 available

Couchbase Server Enterprise Edition version 3.1.0 is released.

Thank you for the contribution. It was merged directly as 18f882786c9635c0601bff847c6918019fb89a26 to keep commit history cleaner. Your contribution is still credited to you.


DBZ-3096 Getting RejectedExecutionException when checking topic settings from KafkaDatabaseHistory.checkTopicSettings

Fix issue DBZ-3096
The MySqlConnectorTask will submit two checking topic tasks to the thread pool checkTopicSettingsExecutor, the thread pool will be shutted down when it executed successfully, so submit the second task will be rejected and throw the exception.

Ah, that's interesting, thx! When exactly does this happen, when shutting down the connector right away after starting it up?

Ah, that's interesting, thx! When exactly does this happen, when shutting down the connector right away after starting it up?

Yes, when restart the kafka connect service or resume the mysql connector will reproduce this issue.

Thx!


make dimension on which input is chunked and then concatted modifiable

Hi! Thanks for your neat little library!
I am currently trying to implement https://openreview.net/forum?id=rkgNKkHtvB and would like to use your library for the reversible net part. However, I need the dimension to be variable, as the embedding dimension for sequences is often the last one (as opposed to channels on 1 as in images)
Thank you!

Hi @lucidrains
Thanks for your pull request.  I have merged it and released version 0.2.1.

@RobinBruegger Thank you!