Don't use objects as arguments.

Zero arguments is the ideal case. One or two arguments is ok, and three should be avoided. Anything more than that should be consolidated. Usually, if you have more than two arguments then your function is trying to do too much. In cases where it's not, most of the time a higher-level object will suffice as an argument.

Since JavaScript allows us to make objects on the fly, without a lot of class boilerplate, you can use an object if you are finding yourself needing a lot of arguments.

Unless there are multiple optional arguments it does more harm than good to pass an object with arguments.

Your IDE has no idea what arguments the function is expecting so hinting is a no go.
The user has no idea what the options are without good documentation.
func({foo: "bar", bar: "foo"}) looks worse than func("bar", "foo")

I disagree, the following Stack Overflow link provides some good insight: http://stackoverflow.com/questions/12826977/multiple-arguments-vs-options-object

Please read 1,2 and 3. We have had this discussion on Slack.

@jordyvandomselaar I read your post, but it appears as though you're commenting on personal preference rather than what makes sense.

It makes sense to use actual arguments because the function will explain itself. If you use an object the user would need to read documentation before he or she understands all options inside the object you're using. With proper argument names your ide will tell you exactly what goes where, you can even add JsDoc for additional information. An object does not allow this.
I dare say the same to you; do you just want to use objects because objects, or because it makes sense?

Some info to consider:

Object arguments ar defacto standard. For example, they are used in many Node.js functions .

This method is advised by some authoritative developers for good ES5 and ES6 use cases: http://speakingjs.com/es5/ch15.html#named_parameters, http://exploringjs.com/es6/ch_core-features.html#_handling-named-parameters, http://exploringjs.com/es6/ch_parameter-handling.html#_named-parameters-via-destructuring, http://exploringjs.com/es6/ch_parameter-handling.html#sec_named-parameters

I understand where you are coming from, might want to take this up with Uncle Bob 😉
Objects as arguments, as @vsemozhetbyt stated, are valid and a good practice in JavaScript. Where JavaScript lacks most strongly is in a type system, so it can seem like creating higher-order objects to pass into functions is a waste as you can't even type-check what is passed in. It does have positive refactoring benefits later on though if you use objects. For example, you can change the behavior of the object's getters and setters, and you can provide some boundaries around the primitive values you pass in.
Forgive me being pedantic, linking out to Clean Code helps state this better than I did: "Reducing the number of arguments by creating objects out of them may seem like cheating, but it’s not. When groups of variables are passed together, the way x and y are in the example above, they are likely part of a concept that deserves a name of its own." (Pg. 43)
I'll let this issue serve as the authoritative final thought on this objection. I've been in the same boat before, and many people are! I still regularly write 7-argument functions all the time and say "What the heck, it's not even a cohesive argument structure anyway... oh wait!" If you have a lot of arguments and can't group them in one object, your function is doing too much! Make it do one thing.
I will refactor the description of this, since so many people have questions!


Awesome plugin

Love the plugin and bought the book + code package.
The examples for states are wrong, you failed to include the $.prompt.goToState code in there.  The code in the book is correct only the examples  code is bad.

Happy Trails,
Mike

Thank you Mike for the feedback. I will definitely look in to these issues.


Great project, still testing has holes

Hey Miguel,
Thank you for the project. I realized your GitHub actions workflow does not seem to catch an error with the password reset function, however mine does. I am not sure yet why, but when I tried to test it manually, it also did not work. It could be because I ran:
pytest -cov tests/

But I am not entirely sure. I modified the .yaml in my repo. Please check it for any suggestions on how to fix it.
Best,
Manuel

The password reset test assumes the redirect URL is configured with the default. It seems you have overriden this configuration option to use port 5000 in this URL instead of the default port 3000. If you fix that your test should pass.

Yes, sure that works, but I could also not manually test the authentication in this case. Could you quickly brief me on how to do it?

What do you mean by "manually test the authentication"? Please show me what you are doing, I don't understand.

Yes, I am sorry. I was testing the endpoints with Postman. Just sending requests according to the documentation to the endpoints. However, I could not complete authentication.

There is nothing wrong with using postman. I stand by what I ask. Please provide a detail of all the requests that you sent, with its responses.

I can't really help you if you don't provide all the details. The /tokens/reset endpoint is used to reset a forgotten password, it is not an authentication endpoint.
Please show me a complete test, where you register a user, then attempt to log in with that user. For each request, include the complete request and response details, including headers and bodies.

Well, yes. The link goes to your front end application, which should prompt you to enter a new password. This project does not offer interactive password resets. If you want to reset the password directly on the API, then send the reset password endpoint and pass the token and your new password. You can fish out the token from the email.

Okay, got it. Thank you for your time. I am working on a front end. If it is something you needed, too, I am happy to provide it.

I have a complete React front end here: https://github.com/miguelgrinberg/react-microblog.

Oh, nice, thank you :)


Add variable expansion in the workspaces.subPath

Changes
At present variable expansion wasn't supported in workspaces.subPath and
there might be a case where a user might want to run parallel task in
the same pipeline against various subfolders.
In this PR replacing the parameter values in
pipeline.Tasks[i].Workspaces[j].SubPath and adding corresponding tests,
doc and examples updates.
closes #4341
/kind feature
Signed-off-by: vinamra28<EMAIL_ADDRESS>Submitter Checklist
As the author of this PR, please check off the items in this checklist:

[X] Docs included if any changes are user facing
[X] Tests included if any functionality added or changed
[X] Follows the commit message standard
[X] Meets the Tekton contributor standards (including
functionality, content, code)
[X] Release notes block below has been filled in or deleted (only if no user facing changes)

Release Notes
Users are able to use variable substitution in the subPath field of a Workspace within a Task in Pipeline

/cc @nikhil-thomas

/retest

LGTM!

/test check-pr-has-kind-label

/retest

/retest

LGTM

I noticed this adds the variable replacement to PipelineRun workspace bindings but not to TaskRun workspace bindings. I tried to think of some strong usecases for TaskRun workspaces to have paraterized subPath but couldn't think of any off the top of my head.
/lgtm


Can I custom the delims?

Hi! Can I custom the delims（Prefix）?
Like "★ Prefix >>"
Identifying the tags within the "★" and ">>"

Yes. Create a new filter and use a regex pattern using groups. This is an
advanced feature, so I suggest picking up regular expressions.
On Wed, Apr 11, 2018, 12:57 AM AaronHzy<EMAIL_ADDRESS>wrote:

Hi! Can I custom the delims（Prefix）?
Like "★ Prefix >>"
Identifying the tags within the ★ and >>
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/killjoy1221/TabbyChat-2/issues/93, or mute the thread
https://github.com/notifications/unsubscribe-auth/ADQIKjnFkW4CJ94v1Jf__ZkkTEj3JXpOks5tnY02gaJpZM4TPX5v
.

Is there a tutorial?

Do you really want chat to overlap your hotbar?


brew bundle check doesn't seem to work

Given the following Brewfile
brew 'redis'
brew 'postgresql'

Output
brew bundle can't satisfy your Brewfile's dependencies.
Satisfy missing dependencies with `brew bundle install`.

Which doesn't make sense because both redis and postgresql are installed.
$ brew list | grep postgres
postgresql
<EMAIL_ADDRESS>$ brew list | grep redis
redis

Versions
$ brew --version
Homebrew 1.7.0
Homebrew/homebrew-core (git revision 07864; last commit 2018-07-20)

On macOS 10.13.6 (17G65).

Are they both up to date and linked?

brew outdated
redis (4.0.0) < 4.0.10
<EMAIL_ADDRESS>(9.6.6) < 9.6.9

Oddly although postgresql 10.4 is activated, only 9.6 shows up.

brew bundle check will fail if things aren't up to date (because brew bundle will upgrade them).


multiline header should be supported!

Summary.
2.11 version introduced this change:

Reject header values that contain leading whitespace or newline characters to
reduce risk of header smuggling.

BUT, as per standard https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2 It whould be possible to have multiline headers.
f.ex. I need to attach a certificate via request header (currently I just mock the header validation method).
Expected Result
support multiline header.
Actual Result
requests.exceptions.InvalidHeader: Invalid return character or leading space in header: X-CERTIFICATE
This command is only available on Requests v2.16.4 and greater. Otherwise,
please provide some basic information about your system (Python version,
operating system, &c).

Multiline headers should not be supported. RFC 2616 is not the HTTP specification anymore: the relevant one is RFC 7230.
Here is the relevant part:

Historically, HTTP header field values could be extended over multiple lines by preceding each extra line with at least one space or horizontal tab (obs-fold).  This specification deprecates such line folding except within the message/http media type (Section 8.3.1).  A sender MUST NOT generate a message that includes line folding (i.e., that has any field-value that contains a match to the obs-fold rule) unless the message is intended for packaging within the message/http media type.

There is no plan to add this support. Even if we did, the new line characters are not semantic in the header and get stripped for processing, so they're ill-suited to your use case. You need to come up with a different method of sending that cert.


since 3.23.1: java.sql.SQLException: assertion failure: param count (3) != value count (48)

In 3.23 some checks were added to the prepared statements parameters.
https://github.com/xerial/sqlite-jdbc/commit/fd40cf60914d4063b889f0a08fdad21a4e957070#diff-9f9639750b991bb537666d8b5550d4e7
The problem is one of the commits instead of clearing the array instead created a mask as a Bitset paramValid and leave trailing null values in the array that are not going to be used except for a check that throws the exception:
if (params != vals.length) {
                throw new SQLException("assertion failure: param count (" + params + ") != value count (" + vals.length
                        + ")");
            }

for (int i = 0; i < params; i++) {

Note that the next for loop only makes use of the actual "params" so any extra null values in the array have no negative effect.
This is happening in complex batches of multiple insert, updates and selects. If I comment the throw, everything works fine like in 3.21 and lower versions.

Is this still happening on the latest version?

Was actually fixed in #386


miflora - request for additional functionality

Hidey ho!
Thanks for your fast implementation of the miflora module!
The only thing I'm missing is some way to completely disable the module from actively reading the sensor. See, it's battery driven. Plus you might not need to pull by some interval (most probably your plant feels pretty much the same now than two hours ago), but just by the time you want to know how your plant is doing (perhaps you just re-planted it or you came with some water around the corner). That would save battery power of the sensor, too. On top of this you have your smart home system around to manage that...
Speaking of that:
With the ability to disable the "interval pulling" some function to actively pull the current status might come handy here, too.
So request is:

ability to disable the module completely from pulling anything (e.g. "attr miAloe disable 1")

ability to request current status (to update readings at once - e.g. "get miAloe sensorData")

Thanks!
Regards
VinceMasuka

Hi,
that's definitely a useful feature. I wouldn't use disable, as that normally disables the module completely in FHEM.
What do you think about:

attr miAloe poll_type manual/interval
set miAloe update

poll_type = manual would disable the interval. I need to check if I can use get to update the readings as I haven't used it till now in fhem_pythonbinding.

Even better! I would really appreciate if you can make that happen...

https://github.com/dominikkarall/fhem_pythonbinding/commit/94bf8f8d3c0be0e91bea66bd7815e1686d03b59e

Added poll_type attribute
Added set ... update

Please let me know if it works. Thx for testing!

I had some issues out of FHEM, telling about state "pythonbinding timeout", but after a minute it now shows constantly up as state "online". This state remains after host restart, too.
It looks like it polls data through the set command, just a few seconds after command was executed (only updates readings that really changed).
It looks like it doesn't start something automatically after poll_type is set to manual.
I'll put it to the test by feeding the pythonbinding with a lot more sensors, but up until now this looks just sweet! Thanks a lot!
Regards
VinceMasuka

Ok, great! It could be that a timeout happend when you restarted fhem_pythonbinding, it shouldn't happen during normal operations.
If any issues happen, please open a new issue. Thx!


Pipeline, Irina Pereyaslavtseva - 22FPL1

No pipeline changes for me to review today

No pipeline changes for me to review today

No pipeline changes for me to review today


Observation history API

Adding this to the wish list: https://mesonet.agron.iastate.edu/sites/obhistory.php?station=IOW&network=IA_ASOS
Basically the same as the current-currents API, but with an option to return x number of observations for a site (or between a set of dates, I suppose.)

Nice - is this same data available in machine readable (v.s. web page) format? json, xml, ...?

I have something live now and would like your testing / feedback.  I am sure there are some bugs with this and I am currently rewritting an IEM website app to dogfood this service, so I suspect I'll see troubles there too.
obhistory endpoint
Will leave this issue open until you folks are happy with it.

@hluker Thanks for the feedback, to address your items.

Network specific variables

For RWIS, indeed, only the atmospherics are being returned.  Added #29.  For ISUSM, added #30

Can we control the number of hours returned.

At present, I am only keen on having this service return one local day's worth of data.  At a future date, I may have a different service to return shorter and longer periods of archive data.

The ?full= setting is not working.

I am unsure of how you are using it within the context.  This setting only controls the variable domain returned.  Since the OpenAPI returns a potential schema, I wanted to provide an option to ensure the full schema was returned no matter which network was queried.
I'm gonna close this issue for now and we can iterate and only other issues for individual problems found.


GetPaymentMethods uses first shipment to determine country

Describe the bug
Current, the following code is executed to show the payment methods in the storefront:
https://github.com/Adyen/adyen-salesforce-commerce-cloud/blob/75a405cafb9bea08d221d52aecdbc2ae9594f45d/src/cartridges/int_adyen_SFRA/cartridge/controllers/middlewares/adyen/getPaymentMethod/utils.js#L16
This code looks at the first shipment to determine which payment methods to show, but this does not make sense. If you are in Belgium and want to ship to Germany, you want to see Belgian payment methods and not German payment methods.
To Reproduce
Steps to reproduce the behavior:

Be in an en_US shop
Select a shipping address in Germany
See only the German payment methods

Expected behavior
It is expected to see en_US payment methods.

This also does not make sense in a multi-shipment environment. In our project, we allow multiple shipments.

Hi @taurgis ,
This is included by design as the first step in the default checkout is the shipping address.
Based on the selected country, we will retrieve the payment methods from Adyen.
If there is multi shipment enabled, it would retrieve the country from the first/default shipping address.
Kind regards,
Bas Maassen
Adyen


Dropdown menus

This is inspired by ptpython, whose completion menu looks better than that of elvish (which is modeled after zsh):

The "dropdown" feeling can be attributed to two factors: a different background color, and margins on the sides.

FWIW, I didn't know about ptpython until I looked at that project in response to reading this issue. So thanks for bringing that project to my attention. Nonetheless, I don't think this issue has sufficient information to drive a change in the existing elvish behavior. Especially since four years have elapsed since this issue was opened and a lot has changed in that interval. The example in the problem statement produces decent, if different, output in a current elvish version. Could the output be better? Probably, but who gets to decide which is better? At the end of the day a lot of issues like this one require reasonable defaults plus the ability of the user to tweak it to suit their needs. Which seems to be loosely related to issue #1001.


[Feature request] (Shuffle) play library

I really love the Musikcube, but it lacks one feature that I use heavily: Playing (optionally on shuffle) the entire music library.
My use pattern in players that support it (e.g., Rhythmbox or cmus): I find the songs I want to listen to, queue them up, then when finished playing the queue, the player picks next (optionally random) song from my full library library, and so on till I actively choose otherwise. This allows me to be re-discover and be reminded of music I have not listened to in a while without having to scroll through and pick and choose. I imagine this could be a simple on/off switch (e.g., "continuous") like "shuffle" or "repeat".
I think Musikcube has the absolutely most beautiful interface of any terminal based player, and a very nice feature set. Adding this feature would allow me to switch to it as my main player.

This is also a must-have for me.
I terms of UI implementation I think it is important to be able to see what has just been played as well as what is coming up.  Some implementations of shuffle play jump all over the place and don't allow you to see that.
A nice-to-have would be something like Clementine's "dynamic random mix" where you don't need to create an "everything" playlist beforehand which can be slow if you have a very large and frequently updated library.

This is also a must-have for me.
I terms of UI implementation I think it is important to be able to see what has just been played as well as what is coming up.  Some implementations of shuffle play jump all over the place and don't allow you to see that.
A nice-to-have would be something like Clementine's "dynamic random mix" where you don't need to create an "everything" playlist beforehand which can be slow if you have a very large and frequently updated library.

While there's currently no dedicated feature to do it you can emulate it with a couple keystrokes:

t > go to tracks view
enter > start playback
x > shuffle the play queue

While there's currently no dedicated feature to do it you can emulate it with a couple keystrokes:

t > go to tracks view
enter > start playback
x > shuffle the play queue

This doesn't seem to cover what I described, though, as it uses the play queue and thus doesn't allow me to queue up a few songs and have it continue to play random songs after.

First off, great player, wow.
But like the others here this is how I listen to my collection 95% of the time. Random over everything. So not only is this solution a bit awkward, you also are then stuck with it playing the first track automatically every time. Sure you could skip it but that just makes it extra awkward. Seems like it would be a pretty easy solution to have a key that just started playing the whole collection at random, but haven't looked at the code either.  :) Any +1 for this too.  :)

On the other hand, the queuing in the middle of the random play does seem to work. I queued up something, it played it, and went back to random. But I second the "it would be great to see the songs played". Many times I wonder who is the artist for a song and I have to rush to read the terminal before the song finishes.


added plant Module to README

added general plant type which contains seven types of plants, I think there's no need to write all types.

now I should delete that branch and work with the last merge right?


feat: support 'write-dts' mode in single and watch run

Makes it possible to use write-dts mode without build: true enabled.
Closes: #658

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

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


fix install link click area, k8 codeblock text at smallest width

Fixes grid assignment on QuickStart page that makes link to full detailed instructions easier to click.  Makes kubernetes yaml code block font size smaller on mobile width.
Related Issues
Relates to improvement of QuickStart page (PR#2660)
Testing
Tested on Chrome, Firefox, Safari
Tasks That Must Be Done

[ ] Did you update CHANGELOG.md?
[ ] Did you add or update tests?
[ ] Did you update documentation?
[ ] Were there any special dev tricks you had to use to work on this code efficiently?

[ ] Did you add them to DEVELOPING.md?

[ ] Is this a build change?

[ ] If so, did you test on both Mac and Linux?

Other

If this is a documentation change for a particular release, please open the pull request against the release branch.

Video showing clicking on link
video for link PR.zip


Limit Kernel documentation to kernel.rbi

Motivation

I noticed this in #6282.
Test plan

I re-ran sync-doc and it only added the comment back to kernel.rbi. See the
commit history.

@froydnj some of the cli tests failed because locs changed, so I lurked a change into Loc.cc to censor some more line numbers.


Update Vantage.js description due to role change.

Vantage had all of its CLI functionality extracted into Vorpal, a framework for building immersive CLI apps.
Vantage now extends Vorpal and adds client / server functionality. So Vantage's tagline is now CLI + SSH + REPL for your live app and it fits under the heading of a realtime application.
Vorpal will fit into "Command Line Apps" later on when It's more publicized.

I don't think that's very descriptive. Not everyone knows what SSH and REPL stands for. The previous description was IMHO better.

Okay I see where you're coming from on that one and I agree. My main worry is that I want people to get the difference between the two libraries. Maybe I should just move it to the Realtime section and leave the title alone?

Sidenote: Both of these should probably be in the CLI utils section.

My main worry is that I want people to get the difference between the two libraries.

Then come up with better descriptions. Keep in mind that the module description is the most important piece of text your write for a project. Take care to make it good.

Haha k and got it. Closing this for now. If Vorpal gets broader adoption I'll nail down the difference later on.


Sign-up Flow: Account Name cannot be changed reminder

Is your feature request related to a problem? Please describe.
Currently, new users have a high likelihood of accidentally accepting a username before understanding that this user name is both public and not able to be changed.
Describe the solution you'd like
A pop-up that tells the new user that the account name cannot be changed or deleted and that it will be public.
Once the User selects "Create Account", a pop-up appears that states:
"Reminder! Your account name cannot be changed or deleted and will be public for other users to see."
The user must select "Got it!" in order to proceed to select "Create Account" one more time.

Additional context
Background Opaque Color: #2E2E2E Transparency 60% (if we already have a convention/color opaque backgrounds let's use that)
https://www.figma.com/file/MXghtFpzK5yVoqTmF2Chdt/?node-id=135%3A0

@JGDoh It is this still valid feature valid/required?


[bug] Need to fix errors of Qt locale bitcoin_ko_KR.ts file

Bug Report
Current behavior:

The Korean translation has the following errors and needs to be fixed.

Typos
Incorrect translation
'Bitcoin' instead of 'Dogecoin' in Korean translation
'Satoshi' instead of 'Koinu' in Korean translation
etc.

File: src/qt/locale/bitcoin_ko_KR.ts

I'm working on it.


Is there a way to update only a dynamic property?

I need to update only one, dynamic, part of my path. The rest of it needs to remain the same... It seems rather simple but I am having a hard time finding a good solution.

Here are my routes. Basically, I am using dynamic tabs. When the user creates a new tab, I generate an ID. When they click the new tab, I want to navigate from /1/test to /2/test. So the only thing that really needs to change is the dynamic part. Is there a way to do this?
My issue is that if I use this.context.location.pathname to generate a new path, I will need to do some string manipulation. I will have to know exactly where my dynamic part is, and where the persistent part is. It seems like I should be able to tell react router that I want to change my tabId and have it know what I mean.
Am I going about this the wrong way?

Yep, string manip is what you'll have to do. This is much nicer in v4 since it gives you the partially matched path.


Upgrade to MUI v5

https://mui.com/blog/material-ui-is-now-mui/

https://mui.com/guides/migration-v4/

Done, merged.


Sl/smart generated funcs

main highlights:

closes #22 : smart generated functions that compute derivative expressions on the fly when the user asks for them
remove make_method in favor of make_function, which has been given the smart generated function behavior
Allow users to pass mixed vectorized arguments.

Have you seen the error message ?
Is it a problem with the test suite, or some more fundamental issue with the design ?
evaluating compiled code: Error During Test
  Test threw an exception of type ErrorException
  Expression: want ≈ @inferred(fun(Der{1}, V, p))
  eval cannot be used in a generated function

I haven't seen that before, but I was able to figure out what is going wrong.
We aren't doing anything non-kosher in our code in Dolang. The issue is actually upstream with calculus.jl calling eval after doing a derivative.
The easy way around this would be to just move to requiring SymEngine and dropping support for Calculus. Given that libsymengine is installed with Conda, this shouldn't be a problem except perhaps for users behind a firewall. Do you think this would be a problem at the bank?

Yes, better not drop symengine. Can we just flag this test as known to fail ?

Do you mean we shouldn't drop calculus?
We could instead put SymEngine in the test/REQUIRE file which would make sure it is available for CI, but not a requirement for users.
And this code would come with perceived regressions as users with Calculus.jl only would no longer be able to evaluate derivatives where they previously were. To get around this I can make sure the code we create contains "static" versions of first and second derivatives and then uses @generated for higher order. This loses some of the elegance of this solution, but would ensure that all existing code continues working

But then we wouldn't test the system that users use...
So if I understand correctly what you're saying, Calculus is not working at all, so it is essentially incompatible with your PR. Is that right ?

Hmm, good point. Hopefully users can be on symengine for performance reasons, but I understand that in some settings it isn't worth the headache.
So if I make the change I hinted at where I fully produce code for the first and second order derivatives when make_function is called and only rely on @generated for derivatives order 3 and higher then we will be able to use Calculus.jl for orders 0, 1, and 2 (e.g. what was implemented/available before this PR).
The issue is the combination of Calculus.jl and @generated because@generated functions cannot ever call eval and Calculus.jl does call eval.

Yes, sorry for the pain. Maybe it's worth opening an issue against
Calculus.jl ?
On Mon, Jun 12, 2017 at 2:36 PM Spencer Lyon<EMAIL_ADDRESS>wrote:

Hmm, good point. Hopefully users can be on symengine for performance
reasons, but I understand that in some settings it isn't worth the headache.
So if I make the change I hinted at where I fully produce code for the
first and second order derivatives when make_function is called and only
rely on @generated for derivatives order 3 and higher then we will be
able to use Calculus.jl for orders 0, 1, and 2 (e.g. what was
implemented/available before this PR).
The issue is the combination of Calculus.jl and @generated because
@generated functions cannot ever call eval and Calculus.jl does call eval.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/EconForge/Dolang/pull/31#issuecomment-307791343, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AAQ5KTDg4Fo0k7AobYtE1oKFOV63rJvXks5sDT7pgaJpZM4N2ABk
.

Sure, I can try to open an issue there.
So does that mean that in the short run (e.g. now) you are in favor of producing the orders 1 and 2 derivative code when make_function is called?

How about this:

Inside make_function if Dolang.HAS_SYMENGINE is true, then we can stick with the full @generated functions implemented in this PR.
If Dolang.HAS_SYMENGINE then we will construct the code for orders 0, 1, and 2 and have make_function return it.

Then in the tests I will only test order 3 derivatives if Dolang.HAS_SYMENGINE is true.
That makes things a little less clean as code will branch based on dependencies, but it does allow us to preserve the best parts of each approach.

Ok, I think we are good to go.
This PR now does the following:

Regardless of backend, it allows for mixed-vectorized function calls (e.g. some arguments can be AbstractVector and will be implicitly repeated and others can be AbstractMatrix--one variable per column)
If Calculus.jl is used as the differentiation backend, then make_function will generate code for the levels and derivatives order 1 and 2 -- this avoids the error we saw with eval above. This is the upper limit on what was possible before this PR, so all functionality is preserved.
if SymEngine.jl as the differentiation backend then make_function will return a @generated function for all orders of derivative >= 0.

Tests pass on both 0.5 and 0.6 when Calculus.jl is used (as reported by CI) and on 0.5 and 0.6 with SymEngine (tested on my computer).

Thank you again. I'll test how it works with Dyno then merge
On Mon, 12 Jun 2017, 15:47 Spencer Lyon<EMAIL_ADDRESS>wrote:

Ok, I think we are good to go.
This PR now does the following:

Regardless of backend, it allows for mixed-vectorized function calls
(e.g. some arguments can be AbstractVector and will be implicitly
repeated and others can be AbstractMatrix--one variable per column)
If Calculus.jl is used as the differentiation backend, then
make_function will generate code for the levels and derivatives order
1 and 2 -- this avoids the error we saw with eval above. This is the
upper limit on what was possible before this PR, so all functionality is
preserved.
if SymEngine.jl as the differentiation backend then make_function
will return a @generated function for all orders of derivative >= 0.

Tests pass on both 0.5 and 0.6 when Calculus.jl is used (as reported by
CI) and on 0.5 and 0.6 with SymEngine (tested on my computer).
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/EconForge/Dolang/pull/31#issuecomment-307812161, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AAQ5KZ_6HiFVTYVYHDyj_orE9Rfkhtk9ks5sDU-XgaJpZM4N2ABk
.

OK so I have added a little bit to this branch -- we now have docs.
See them live here: http://www.econforge.org/Dolang/

@sglyon : this is really, really excellent. I had a look at the doc and it changes everything.
I'll merge now, and you can do a (pre)-release when you want.

Honnestly, being able to compute higher order derivatives on-demand is super awesome. The model import is going to be much faster, even testing for the residuals.


Test issue - ignore

Nothing to see here. I'll close this when I'm done testing. I edited the description again.

This is a comment.

Another comment


draft: added option to not copy files locally on load

this will also require python client changes to take advantage of the new option

I still think the default behavior should be not to copy the files, and the
default behavior in protobufs is generally the behavior if you don’t
specify a field (so the original field naming makes sense). We can add some
text to the protos and docs clarifying that the files you add are assumed
to be immutable and that we may cache results based on this assumption (and
that you should configure the load to copy files if this is a problem).
Fundamentally I think this comes back to the question “are we an engine or
a database”. If we’re a primary data store (database), we should copy the
data, but we’ve generally been moving towards being more of an engine and
trying to offload responsibility for data management. I think this is the
right direction - we don’t really need to play in the data management space
(we don’t have much to contribute there, really)
I’m ok with changing behavior with this change - we shouldn’t be afraid of
making aggressive changes at this stage, and it’s better to change defaults
now when the blast radius is minimal. We can always call this a breaking
change if we want to respect semver.
On Wed, Jul 5, 2023 at 8:57 PM Ben Chambers @.***>
wrote:

@.**** commented on this pull request.
In proto/kaskada/kaskada/v1alpha/table_service.proto
https://github.com/kaskada-ai/kaskada/pull/472#discussion_r1253799197:

@@ -157,6 +157,13 @@ message LoadDataRequest {

 FileInput file_input = 2;

}
+

// If true or unset, the file is copied to Kaskada's filesystem
// so that Kaskada can compute on the data even if the original file
// gets deleted.
//
// If set false, Kaskada reads the file in-place during compute.
google.protobuf.BoolValue copy_to_filesystem = 3;

If someone computes for one slice config, and then changes the file
expecting compute to update, it will only return the original data, since
we have already prepared the original file.
This doesn't seem possible. In order for us to have prepared it, we need
to have added the original URL to the table, and then run prepare on it
when we did a query. Unless we overwrite the original URL, this doesn't
seem like it could happen.
If we have prepared for one slice config, and then the underlying file
changes, any preparation for new slice configs would have different data.

Agreed with these, although we've discussed simplifying the system by
eliminating data tokens, etc. This would actually be a good part of that
(being able to read Parquet files directly from where they're stored).
Maybe change the bool to do_not_copy_to_filesystem or use_file_in_place ?
That works for me. Could even shorten to just in_place=True.
—
Reply to this email directly, view it on GitHub
https://github.com/kaskada-ai/kaskada/pull/472#discussion_r1253799197,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AABHREXNXPZX22JJ2DRVI7TXOYEPXANCNFSM6AAAAAAZ7NLSQQ
.
You are receiving this because your review was requested.Message ID:
@.***>

--
Ryan Michael
c. +1<PHONE_NUMBER>
w. www.datastax.com
https://www.facebook.com/datastax https://twitter.com/datastax
https://www.linkedin.com/company/datastax/ https://github.com/datastax/

If we make a change to the default behavior here, I think we should also drop dataTokens in the near future.
DataTokens are also more of a database feature. Without copying the file into our fileSystem we can't make the guarantees that we claim are possible from dataTokens.

Also, what do we do if the original file is deleted, but we already have prepared data for it?
Do we still allow compute?
What if a table has multiple files added in-place, and only a subset of them have been removed or we lose access permission to them?
Should we confirm that we still can access each original file in the table before we run compute?

I don't think the engine needs to solve for these cases so long as we communicate our expectations and provide actionable error messages. If a user loads a file and then deletes it they will have broken the API's contract. If we find this happening frequently for users we can talk to them about their needs and revisit these decisions as appropriate.

that makes sense, but what do we want to do in these cases?
Do we return an error if we lose access to a single file in a table? or only for all files in a table?
Do we only check for file existence at prepare time? If a new slice config is requested, and the data is no longer available, return an error stating this?

that makes sense, but what do we want to do in these cases?
Do we return an error if we lose access to a single file in a table? or only for all files in a table?
Do we only check for file existence at prepare time? If a new slice config is requested, and the data is no longer available, return an error stating this?

I think this is sort of like getting rid of data tokens -- over time we may move away from having a persistent database and any notion of "what is in a table" that lives outside of the current session. If we look at Spark, or even DuckDB etc. (other "engines") they have a notion of a "session". You create a session, define tables during the session, and execute queries over those tables. In this world, the "session" can be populated directly ("this table consists of these 3 parquet files or all files in this directory") or via "table providers" (if I query a table named Foo ask Iceberg for the files to use).
Then we'd have some kind of session API -- create a session, add tables to the session, then run a query or start a materialization using the state of the session.
I don't think that it changes anything in this PR, but it's more answering the question of what it might mean to move towards being just an "engine" and how we'd interact with files, etc. at that point.


Add missing API to utilize map of maps

map in maps
WIP

I just rebased the conflicted PR. Next, I'll fix any pending issue and bring in some local implementations related to this effort.

@kakkoyun I've faced this same issue when toying with map in maps.
https://github.com/aquasecurity/libbpfgo/actions/runs/5616260527/job/15218251963?pr=343#step:4:1328

@rafaeldtinoco Tracee local tests were green.

The commit c87a557 only fixed a part of the selftests (on arm64). See new errors (operation not supported):
#define ENOTSUPP	524	/* Operation is not supported */

@geyslan reword that commit with ENOTSUPP info before merge.

I just spoke to @geyslan that we have a few big problems in this approach, not coming from what Geyslan is proposing, but before. We started mixing libbpf functions that are "managed" by libbpf (always related to a BPF program, BPF map or BPF link) with low level functions that aren't supposed to be managed by libbpf (despite being exported). One example of this is bpf_map_create(). It provides a way to call BPF syscall and create a map but the resulting map is totally un-managed by libbpf (thus libbpfgo).
After couple of hours discussing we end up agreeing that we should have a new type "Bpf MapOfMaps" that will do all the abstraction of using the libbpf un-managed functions but making the type fully managed by libbpfgo.
This will be more clear in his next PR, which we agreed to have:

un-managed functions package (will contain exported by libbpf functions that can be used by external players but dont cause libbpf to manage resources).
all the rest of libbpfgo should rely in the stable API with exported functions that are managed (and all of these functions contain __ in their names.

With that said, I'll be the one reviewing a new PR soon to come after our talks.
Thanks @geyslan and I think we should seek for any un-managed libbpf function being exported by libbpfgo and move them to this un-managed package (so users are aware that using those functions are their full responsibility).


chore(ci/linux-packages): fix RPM packages name

We should use the major part of VERSION_NATIVE not RELEASE for RPM package name.
(We should use RELEASE only for RPM version.)
Fixes #1837.

https://github.com/apache/arrow-adbc/actions/runs/8998344814/job/24718303328?pr=1838#step:9:2570
Wrote: /root/rpmbuild/SRPMS/adbc-12-1.el9.src.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/adbc-driver-flightsql-devel-12-1.el9.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/adbc-driver-flightsql1-libs-12-1.el9.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/adbc-driver-flightsql1-libs-debuginfo-12-1.el9.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/adbc-driver-snowflake1-libs-debuginfo-12-1.el9.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/adbc-driver-postgresql1-libs-debuginfo-12-1.el9.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/adbc-driver-sqlite1-libs-debuginfo-12-1.el9.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/adbc-driver-manager1-libs-debuginfo-12-1.el9.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/adbc-debugsource-12-1.el9.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/adbc-driver-postgresql-devel-12-1.el9.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/adbc-debuginfo-12-1.el9.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/adbc-driver-sqlite-devel-12-1.el9.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/adbc-driver-postgresql1-libs-12-1.el9.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/adbc-driver-sqlite1-libs-12-1.el9.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/adbc-driver-manager-devel-12-1.el9.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/adbc-glib-doc-12-1.el9.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/adbc-glib-devel-12-1.el9.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/adbc-arrow-glib-doc-12-1.el9.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/adbc-driver-manager1-libs-12-1.el9.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/adbc-glib1-libs-12-1.el9.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/adbc-arrow-glib1-libs-12-1.el9.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/adbc-arrow-glib-devel-12-1.el9.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/adbc-arrow-glib1-libs-debuginfo-12-1.el9.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/adbc-glib1-libs-debuginfo-12-1.el9.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/adbc-driver-snowflake1-libs-12-1.el9.x86_64.rpm
Wrote: /root/rpmbuild/RPMS/x86_64/adbc-driver-snowflake-devel-12-1.el9.x86_64.rpm

adbc-glib1-libs not adbc-glib12-libs is used as expected.


wrong schedulingThroughput in density test

/kind bug
/area clusterloader
When calculating scheduling throughput in density test, I found the calculation is incorrect when running a small test of 300 saturation pods on 16 nodes. The log shows

I0227 17:38:29.247294 2069840 scheduling_throughput.go:103] SchedulingThroughput: starting collecting throughput data
I0227 17:38:34.247614 2069840 scheduling_throughput.go:118] SchedulingThroughput: labelSelector(group = saturation): 15 pods scheduled
I0227 17:38:39.247969 2069840 scheduling_throughput.go:118] SchedulingThroughput: labelSelector(group = saturation): 127 pods scheduled
I0227 17:38:44.248357 2069840 scheduling_throughput.go:118] SchedulingThroughput: labelSelector(group = saturation): 300 pods scheduled
I0227 17:38:49.248779 2069840 scheduling_throughput.go:118] SchedulingThroughput: labelSelector(group = saturation): 300 pods scheduled
I0227 17:38:54.249241 2069840 scheduling_throughput.go:118] SchedulingThroughput: labelSelector(group = saturation): 300 pods scheduled
I0227 17:38:55.132166 2069840 scheduling_throughput.go:131] SchedulingThroughput: gathering data

300 pods are scheduled within 15 seconds but gather stage happens after 25 seconds. In .json output, the average throughput is 12, which is exactly 300/25. But wait, we should exclude data when all pods are scheduled.
{
  "average": 12,
  "perc50": 3,
  "perc90": 34.6,
  "perc99": 34.6
}

Below is the part of configuration
- name: Collecting saturation pod measurements
  measurements:
  - Identifier: WaitForRunningSaturationDeployments
    Method: WaitForControlledPodsRunning
    Params:
      action: gather
- measurements:
  - Identifier: SaturationPodStartupLatency
    Method: PodStartupLatency
    Params:
      action: gather
- measurements:
  - Identifier: SchedulingThroughput
    Method: SchedulingThroughput
    Params:
      action: gather
      threshold: {{$SCHEDULER_THROUGHPUT_THRESHOLD}}

This is a know issue - we're going to rewrite this measurement to be based on prometheus metrics.
@mm4tt - FYI

Yeah, thanks for opening the issue. I talked about this some time ago with @jprzychodzen, he'll be looking into rewriting the measurements in the coming weeks.

@xial-thu thanks for bringing up this issue. Right now I've removed this confusing metric.
We are not using it in any test, and as stated already, there are know issues with this metric. Unless there is an exact use case for it, it's hard to discuss what should this metric mean.
Closing as resolved.

/close

@jprzychodzen thx for your reply. I remember 50 pod/s is set as a goal in community's document. So I'm a little surprised and confusing when you said you never use it. Would you explain a bit more?
It's not an exact use case for me. I'm just trying to set up a baseline for my system and evaluating possible key metrics. From my point of view, the official SLOs involves too many components and once they're not met, it's hard to debug the bottleneck. I agree that throughput is ambiguous and if we consider it as 'algorithms + binding', creating a pod is much faster than really starting it. If in most cases it doesn't make sense, it's okay to me to ignore it.
Looking forward to your reply.

@xial-thu thanks for you response.
Just to clarify - we didn't use average value of scheduling throughput metric. However, we are using maximum value (a little has changed with  #1093  form 99th percentile). In result, we were providing confusing metric (avg of scheduling throughput) that we did not use at all.
I've closed this issue as it was explicitly targeting avg of scheduling throughput - a metric that was just removed. To point to the right place in a code - we are targeting a maximum value for some X second window: scheduling_throughput.go. We are still using this metric and we are measuring it.
Hope that this helps.

Just to add one more thing. The goal you mentioned is actually 100 pods / s and it's still one of the official scalability goals. It's being continuously verified in our scale tests.


fix BankClientComponent never updating

About the PR

all entities with the BankClient component now get updated on passive income or whenever someone buys something
Why / Balance

bug fix
Technical details

removed the private DeductFunds method from the CargoSystem.Orders.cs in favor of UpdateBankAccount
changed the UpdateConsole method to use the UpdateBankAccount rather than writing directly to the StationBankAccount component, same for OnApproveOrderMessage method
BankBalanceUpdatedEvent actually fires now whenever the balance changes
Requirements

[x] I have read and am following the Pull Request and Changelog Guidelines.
[x] I have added media to this PR or it does not require an ingame showcase.

Breaking changes

Changelog

no fun

test fail fake...


Target NETStandard 2.0

:up::date: this is ready to check in now.

Can't re-enable tests due to https://github.com/aspnet/Hosting/issues/1082


Matches how wabt encodes the binary name section in wat2wasm

This PR is the result of hours of trying to figure out how people use
the custom name section in practice. The time loss was largely caused
by it being underspecified and also undocumented in implementations.

thanks for the pointers @mathetake!


TargetView with Navigation Drawer menu item

I am trying to use this BubbleShowcase for menuItem placed on NavigationView inside DrawerLayout but somehow bubble is not showing up. Please suggest how to deal with this. Any help with be appreciated.

Hello @sandeepsingh88
If you use this library in your project. please give some code snippet, how to use bubble show case on Navigational drawer hamburger icon.
Thanks.

fun showViewCase() {
BubbleShowCaseBuilder(this)
.title(getString(basket_show_case_view_title))
.description(getString(basket_show_case_view_description))
.arrowPosition(BubbleShowCase.ArrowPosition.TOP)
.backgroundColor(getColor(this, background_secondary))
.textColor(getColor(this, common_black))
.titleTextSize(16)
.descriptionTextSize(14)
.closeActionImage(getDrawable(R.drawable.ic_old_close_))
.apply { binding.bottomNavView.findItemView(R.id.basket)?.let(::targetView) }
.show()
}

not displayed messageView


Manage aws_eks_addon resources

what

Manage aws_eks_addon resources

why

To install addons using a variable

references

Closes https://github.com/cloudposse/terraform-aws-eks-cluster/issues/113
https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/eks_addon
https://github.com/juozasget/terraform-provider-aws/blob/0d232c2ccd5c09f9c130f64925a25b6fcd7b8b49/aws/resource_aws_eks_addon.go#L61

notes
module "eks" {
  # ...
  addons = [
    {
      addon_name               = "vpc-cni"
      addon_version            = "v1.7.5"
      resolve_conflicts        = "NONE"
      service_account_role_arn = null
    }
  ]
  # ...
}

/test all

/test all

/test all

/test all

/test all

/test all

This has been released as https://github.com/cloudposse/terraform-aws-eks-cluster/releases/tag/0.43.0 !

Testing single vpc-cni addon is not enough. At least add coredns, ideally all three: kube-proxy, vpc-cni and coredns should be tested. Otherwise resulting cluster differs from expected default EKS setup.
Also while doing so you might stumble across https://github.com/hashicorp/terraform-provider-aws/issues/20404. Workaround for this issue requires delaying installation of coredns addon until some workers are available. This is doable in terraform by adding something like depends_on = [aws_eks_node_group.workers] for addon resource, which isn't achievable with current implementation.

@z0rc I tested it out the recommended addons in a draft https://github.com/cloudposse/terraform-aws-eks-cluster/pull/126 and you're correct.
We cannot add a depends_on = [module.eks_node_group] to the aws_eks_addon resource since the node groups are created in its own module.
Perhaps it may be best to have the eks addons in its own module so the depends_on can be used or simply create the addons from outside the terraform-aws-eks-cluster module. 🤔

@z0rc please review #126 and let me know if that works for you


Discord Invite Link has expired

Your discord link is expired. Could you make a new one and update the documentation?

@duckofdeath87 which link has expired? Can you provide a screenshot abou the expiration error?

@dacongda can you test the link?

I can join the server via this link successfully

Me too.
@duckofdeath87 this is your own issue, like your account has been banned, just a guess


error while loading shared libraries: libssl.so.3

Hi.
My Previous Dockerfile works fine.
ARG VCS_REVISION

FROM docker.io/lukemathwalker/cargo-chef:latest-rust-1.71.0 as chef
WORKDIR app

FROM chef as planner
COPY . .
RUN cargo chef prepare --recipe-path recipe.json

FROM chef as builder
RUN apt-get update && apt-get install -y pkg-config libssl-dev
COPY --from=planner /app/recipe.json recipe.json
RUN cargo chef cook --release --recipe-path recipe.json
COPY . .
ARG VCS_REVISION
RUN VCS_REVISION=$VCS_REVISION cargo build --release

FROM gcr.io/distroless/cc-debian11
COPY --from=builder /app/target/release/tin /
CMD ["./tin"]

But changing it to the newest version gives me ./tin: error while loading shared libraries: libssl.so.3: cannot open shared object file: No such file or directory
- FROM docker.io/lukemathwalker/cargo-chef:latest-rust-1.71.0 as chef
+ FROM docker.io/lukemathwalker/cargo-chef:latest-rust-1 as chef. # doesn't work

I have added these lines, but the error persists.
FROM chef as builder
+ RUN apt-get update && apt-get install -y pkg-config libssl-dev
COPY --from=planner /app/recipe.json recipe.json
RUN cargo chef cook --release --recipe-path recipe.json
COPY . .
ARG VCS_REVISION
RUN VCS_REVISION=$VCS_REVISION cargo build --release

So, where should I add the pkg-config libssl-dev?
Thank you! :1st_place_medal:
Related:

https://github.com/LukeMathWalker/cargo-chef/issues/235
https://github.com/LukeMathWalker/cargo-chef/issues/98

That library is dynamically linked, therefore you need to install it in both your build stage and your runtime stage!


Add Object Relationships Option to Returned JSON Attributes

When performing an API request outside of pynautobot using ?include=relationships the relationships created under Extensibility for the object are returned. This information is not included whether get, all, or filter are used, and even if it's cast to a dictionary. There are instances where knowing the object on the other end of the relationship is valuable, such as:
If I'm querying VRFs under IPAM, what VLAN do I have a relationship with (I.E. my iBGP VLAN for MLAG or VPC)?

Makes sense to get this on into pynautobot to align with the included item.

@aetherrealm this is a behavior of the API, to pass include=relationships in pynautobot, you should do something like app.model.filter(..., include="relationships")


'other' has different root error?

Ripme version: 2.1.2
Java version: 1.8.0
Operating system: Win 10
Exact URL you were trying to rip when the problem occurred: Every URL
Please include any additional information about how to reproduce the problem: Just try and rip anything

Expected Behavior
It should rip pages.
Actual Behavior
Gives that error and doesn't rip anything.

please use java11, not java8.

please use java11, not java8.

How do i switch from java8 to java11?


CP-SAT should provide feasible solution before crashing (due to less RAM or any other reason which can be detected early on)

What language and solver does this apply to?
All / CP-SAT
Describe the problem you are trying to solve.
The application should not crash before providing a feasible solution (if any)
Describe the solution you'd like
The application provides a solution before crash
Describe alternatives you've considered
Call solution callback when RAM usage reaches 99%, but don't know how to implement.
Additional context
Add any other context or screenshots about the feature request here.

Don't know how to implement.


Unable to acquire token silently after B2C login and redirection to SPA redirectUri

Core Library
MSAL.js v2 (@azure/msal-browser)
Core Library Version
2.24.0
Wrapper Library
Not Applicable
Wrapper Library Version
None
Description
My understanding is that the B2C flow with MSAL.js for a sign-in only policy works in the following way (please correct if mistaken):

create msalInstance with the msal config
call msalInstance.handleRedirectPromise()
when the handleRedirectPromise promise returns, call loginRedirect with the correct scopes, which will redirect the user to a b2c login page, and on completion, navigate back to the SPA redirectUri
once the the b2c login is complete, and the user is navigated back to the SPA redirectUri, we use the msalInstance.acquireTokenSilent with the correct scopes and current active account passed in as function option params, so we can get all the user information such as the accessToken. This is how we translate the information the MSAL stores in the browser (sessionStorage in this case) to user information and an access token that I can use.

Steps 1-3 are working as expected. The issue is specifically that on step 4, after the redirect happens when I login, I am unable to acquire the token. There are no active accounts (when I attempt to retrieve with MSAL.js), and I am also unable to acquire the token with acquireTokenSilent. The error I am getting is the following:
BrowserAuthError: no_account_error: No account object provided to acquireTokenSilent and no active account has been set. Please call setActiveAccount or provide an account on the request.
The issue is that I can't call setActiveAccount when the active account does not exist (nothing exists for msalInstance.getAllAccounts().
I am using the following code for step 4 - which is run after the the successful login redirect to the redirectUri:
        const accounts = msalInstance.getAllAccounts();
        if (accounts?.length > 0) {
         msalInstance.setActiveAccount(accounts[0]);
        }

        if (msalInstance.getActiveAccount()) {
         const msalScopes = { scopes: ["my-example-b2c-web-api-scope"] }
         msalInstance
            .acquireTokenSilent(msalScopes)
            .then((tokenResponse) => {
              // Do something with the tokenResponse
              console.log('acquireTokenSilent res', tokenResponse);
            })
            .catch((error) => {
              console.log('acquireTokenSilent error', error);
              if (error instanceof msal.InteractionRequiredAuthError) {
                // fallback to interaction when silent call fails
                return msalInstance.acquireTokenRedirect(
                  msalScopes
                );
              }
            });

The issue is that because this.msalInstance.getAllAccounts() is null (empty), I cannot successfully retrieve the token information from the acquireTokenSilent call.
However, if I sign-in the first time, and get navigated back to the redirectUri, and then I run the sign-in again (the msalInstance.handleRedirectPromise() and then loginRedirect() code), I will successfully get the accounts and the token response from acquireTokenSilent. So I know that it most likely is not a configuration issue, or something to do with scopes or permissions.
The issue that needs to be figured out, is how can the token be retrieved on the successful navigation from the b2c login to the SPA redirectUri? Having to trigger a sign-in twice is not doable for the app use-case. I am hoping there is a better way to do this and to fix the issue of being able to retrieve the token on that initial redirect navigation to the redirectUri of the SPA.
The expected behavior is that when the SPA redirectUri is hit, that I will be able to get the access token and other user information. acquireTokenSilent doesn't seem to be working as expected for this use case.
Error Message
BrowserAuthError: no_account_error: No account object provided to acquireTokenSilent and no active account has been set. Please call setActiveAccount or provide an account on the request.
Msal Logs
n/a
MSAL Configuration
        const msalConfig = {
          auth: {
            clientId: 'example123',
            authority: 'b2c-example',
            redirectUri: 'localhost:4200/redirect-uri',
            knownAuthorities: ['my-b2c-web-api-scope'],
            postLogoutRedirectUri: 'localhost:4200/redirect-uri',
            navigateToLoginRequestUrl: true,
          },
          cache: {
            cacheLocation: 'sessionStorage',
            storeAuthStateInCookie: true,
          },
          system: {
            loggerOptions: {
              loggerCallback: (level, message, containsPii) => {
                if (containsPii) {
                  return;
                }
                switch (level) {
                  case msal.LogLevel.Error:
                    console.error(message);
                    return;
                  case msal.LogLevel.Info:
                    console.info(message);
                    return;
                  case msal.LogLevel.Verbose:
                    console.debug(message);
                    return;
                  case msal.LogLevel.Warning:
                    console.warn(message);
                    return;
                }
              },
            },
          },
        };

Relevant Code Snippets
     // initial code
    msalInstance
      .handleRedirectPromise()
      .then((tokenResponse) => {
        if (tokenResponse === null) {
          // If the tokenResponse === null, you are not coming back from an auth redirect.
          msalInstance.loginRedirect(this.msalApiScopes);
        } else {
          // If the tokenResponse !== null, then you are coming back from a successful authentication redirect.
          console.log('success res', tokenResponse);
        }
      })
      .catch((err) => {
        // handle error, either in the library or coming back from the server
        console.log('err', err);
      });

        // code that runs after the redirectUri returns
        const accounts = msalInstance.getAllAccounts();
        if (accounts?.length > 0) {
          msalInstance.setActiveAccount(accounts[0]);
        }

         const msalScopes = { scopes: ["my-example-b2c-web-api-scope"] }
         msalInstance
            .acquireTokenSilent(msalScopes)
            .then((tokenResponse) => {
              // Do something with the tokenResponse
              console.log('acquireTokenSilent res', tokenResponse);
            })
            .catch((error) => {
              console.log('acquireTokenSilent error', error);
              if (error instanceof msal.InteractionRequiredAuthError) {
                // fallback to interaction when silent call fails
                return msalInstance.acquireTokenRedirect(
                  msalScopes
                );
            });

Reproduction Steps
see initial description
Expected Behavior
Be able to get token through acquireTokenSilent method directly after the redirect back to the SPA redirectUri after the b2c login is completed. Not having to go through the handleRedirectPromise a second time
Identity Provider
Azure B2C Basic Policy
Browsers Affected (Select all that apply)
Chrome
Regression
No response
Source
External (Customer)

It doesn't look like @bmahall has been responding to issues, @jasonnutter and @hectormmg are you available to look at this?

Hi @danielvoigt did you tried using msal interceptor (https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/msal-interceptor.md). It internally handles acquireTokenSilent logic based on your configuration if you don't have any custom logic implementation.

Hi @danielvoigt did you tried using msal interceptor (https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-angular/docs/v2-docs/msal-interceptor.md). It internally handles acquireTokenSilent logic based on your configuration if you don't have any custom logic implementation.

Thanks for the suggestion. I'm currently using MSAL.js v2 for the browser (@azure/msal-browser), rather than the angular specific wrapper library. However I will attempt to re-implement this with the wrapper library if I'm unable to figure out the issue with the general MSAL browser lib.

@danielvoigt  Can you kindly refer to the below attached code snippet and check if it works:-
`msalInstance.handleRedirectPromise()
.then((tokenResponse) => {
    if (!tokenResponse) {
        const accounts = msalInstance.getAllAccounts();
        if (accounts.length === 0) {
            // No user signed in
            msalInstance.loginRedirect();
        }
    } else {
        // Do something with the tokenResponse
    }
})
.catch(err => {
    // Handle error
    console.error(err);
});`

Please note:   If you are calling loginRedirect or acquireTokenRedirect from a page that is not your redirectUri you will need to ensure handleRedirectPromise is called and awaited on both the redirectUri page as well as the page that you initiated the redirect from. This is because the redirectUri page will initiate a redirect back to the page that originally invoked loginRedirect and that page will process the token response.

@danielvoigt Can you please check:-

Value of the redirectUri and postRedirectUri should be in valid format, scope should be passed as an array.
Please carefully verify the value of the scope parameter being passed.

Get the account from token response as below:
let accountObj;
if (tokenResponse) {
accountObj = tokenResponse.account;
} else {
accountObj = this.app.getAllAccounts()[0];
}

When issuing a call to acquireTokenSilent() pass the active account along with the scope.

If none of this helps, please share verbose logs and output of : console.log('success res', tokenResponse) on my email mentioned in my profile on Github.
You are welcome to open a new issue for issues in msal-angular library.
Thanks for your patience.

@danielvoigt After looking into the source code you have linked above, it is possible that handleRedirectPromise has not finished when you call getAllAccounts().
Can you please ensure that handleRedirectPromise() completes, and then use getAllAccounts() API.
You could call getAllAccounts() inside the else block here:
`else {
      // If the tokenResponse !== null, then you are coming back from a successful authentication redirect.
      console.log('success res', tokenResponse);
      // SET ACTIVE ACCOUNT HERE
    }`

Let me know if this helps.

Had this same issue in React.
Relevant package versions:
@azure/msal-browser: ^2.32.2
@azure/msal-react: ^1.5.2
react: ^18.2.0
react-router-dom: ^6.3.0
Possible Root Cause
I suspect that there's a race condition between mzal's redirect handler and the web app's custom redirect handler. mzal's handler should complete execution before the custom handler. However, there is no way to ensure this with the current flow. As a result, the custom handler may observe an inconsistent auth state (e.g. no account object even after user authentication).
Workaround in React
const MicrosoftAuthRedirect = () => {
    const navigate = useNavigate();
    const { instance, accounts } = useMsal();
    const dispatch: Dispatch<AnyAction> = useAppDispatch();

    /* Component making auth request sets desired redirect URL in session storage */
    const redirectUrl: string | null = window.sessionStorage.getItem("redirect-url");

    /* Request to our custom backend which exchanges Microsoft access token to our own access token */
    const [microsoftLogin] = useMicrosoftLoginMutation();

    /* Called upon successfully receiving access token issued by our backend */
    const onLogin = (result: LoginSuccessResponse) => {
        dispatch(setToken({ token: result.accessToken }))
        navigate(redirectUrl || "/home");
    }

    /* Called upon successfully receiving access token issued by Microsoft */
    const onResponse = (value: AuthenticationResult) => {
        microsoftLogin({ accessToken: value.accessToken }).unwrap().then(result => onLogin(result), error => console.error(error));
    }

    /* PRECONDITION: Account object exists (i.e. accounts.length > 0)
       Called when account object is present. DO NOT immediately call
       on page load since this will result in a race condition with mzal's
       own redirect handler. Instead, utilize the useEffect(..., [accounts])
       hook to ensure mzal's redirect handler has populated the account object
       before attempting to access it.
    */
    const requestToken = () => {
        instance.acquireTokenSilent({
            ...loginRequest,
            account: accounts[0]
        }).then(result => {
            onResponse(result);
        });
    }

    /* This was the fix to the race condition */
    useEffect(() => {
        if (accounts.length > 0) {
            requestToken();
        }
    }, [accounts]);

    return (

Redirecting...

    );
}


[BUG]

Tiktok api not working in your code any more
This message appear :
{"function":"webapi()","reason":"Object of type JSONDecodeError is not JSON serializable","status":"failed","time":"1.5905s","value":"https://vm.tiktok.com/ZMFQEuNqE"}

I'm currently working on it, TikTok's API is changed.

Thanks man we wait you🥂

Fixed


Angular Beginner's Web App broken

Describe the bug
I made a web app following the angular guide, it worked a day ago when building it but today it's broken. Routing is broken. Every link leads to a blank screen
Link to the blitz that caused the error
https://stackblitz.com/edit/angular-cjrp25-9zzj1j?file=src%2Fapp%2Fapp.module.ts
Steps to reproduce
Click on the Checkout button, or any one of the phone names.
Expected behavior
Routing should work
Screenshots
No response
Platform
Browser name  = Chrome
Full version  = 96.0.4664.110
Major version = 96
navigator.appName = Netscape
navigator.userAgent = Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62
performance.memory = {
  "totalJSHeapSize": 103960103,
  "usedJSHeapSize": 96560103,
  "jsHeapSizeLimit":<PHONE_NUMBER>
}
Hash = bc2b78560fa0e6097e7f69d4e820659cab64d2c5

Additional context
No response

@Raufr1 Thanks for the report. I see some errors in the dev console:
ERROR Error: Uncaught (in promise): NullInjectorError: R3InjectorError(AppModule)[CartService -> HttpClient -> HttpClient -> HttpClient]:
  NullInjectorError: No provider for HttpClient!
NullInjectorError: R3InjectorError(AppModule)[CartService -> HttpClient -> HttpClient -> HttpClient]:
  NullInjectorError: No provider for HttpClient!

These errors also appear when I try to run the project locally, so I don't think this is a WebContainer issue.

@Raufr1
Your AppModule is missing the HttpClientModule in the imports array.
Without it, you can't use HttpClient.
By adding it, it'll work as expected.

Ohh. I'm dumb. Thanks man
Get Outlook for Android
From: Gerome Grignon @.>
Sent: Wednesday, January 5, 2022 6:03:28 PM
To: stackblitz/webcontainer-core @.>
Cc: Rana Rauf @.>; Mention @.>
Subject: Re: [stackblitz/webcontainer-core] Angular Beginner's Web App broken (Issue #523)
@Raufr1
Your AppModule is missing the HttpClientModule in the imports array.
Without it, you can't use HttpClient.
By adding it, it'll work as expected.
—
Reply to this email directly,
view it on GitHub, or
unsubscribe.
Triage notifications on the go with GitHub Mobile for
iOS or
Android.
You are receiving this because you were mentioned.Message
ID: @.***>


Investigate GRPC box client

The goal here is to only have to support one library for client/server.

grpcbox Review
Nova Labs fork appears to begin with commit 22d7a09bddf968327234f8f8b3413110a212b332 (v0.13.1). Since v0.13.1 in the original version, there appear to be minor improvements to error and timeout handling. These are mostly in client code. Since the fork, Nova Labs appears to have refactored the server stream process into a data structure, refined the server supervisor options, and made some optimizations to initialization. The Nova Labs fork adds grpcbox_telemetry_stats_handler. There do not appear to be any changes affecting client code.
grpcbox is primarily intended for a micro-services architecture where the services are well defined. As a result, it lacks an API to connect to an "arbitrary" server. All of the endpoints used by clients must be defined in system configuration.
grpcbox does not have an asynchonous interface to receiving data.
The remainder of this review is on grpcbox client code in the Nova Labs fork.
Client Example
Proto file Service definitions:
rpc GetFeature(Point) returns (Feature) {}
rpc RouteChat(stream RouteNote) returns (stream RouteNote) {}

Unary call:
Point = #{latitude => 409146138, longitude => -746188906},
{ok, Feature, HeadersAndTrailers} = routeguide_route_guide_client:get_feature(Point).

Stream call:
{ok, S} = routeguide_route_guide_client:route_chat(),
ok = grpcbox_client:send(S, #{location => #{latitude => 1, longitude => 1}, message => <<"hello there">>}),
{ok, #{message := <<"hello there">>}} = grpcbox_client:recv_data(S)),

grpcbox users are expected to use the generated functions to make client calls. The client calls do not specify the target server. Users define the client's server in sys.config:
{client, #{channels => [{default_channel, [{http, "localhost", 8080, []}], #{}}]}}

You can also define a specific channel, for example:
{client, #{channels => [
    {default_channel, [{http, "localhost", 8080, []}], #{}},
    {test_channel, [{http, "localhost", 18080, []}]}]}}

The specific channel can get specified as an option to calls:
{ok, Feature, HeadersAndTrailers} = routeguide_route_guide_client:get_feature(Point, #{channel => test_channel}).

For stream calls, the caller first allocates a stream for the rpc call, then uses the Stream to send requests and receive responses. There is no asynchronous interface to receive data.
Setup flow
Connections to client endpoints are created during grpcbox initialization:
grpcbox_app:start:

starts grpcbox_sup
calls grpcbox_channel_sup:start_child for each channel defined in the system config

grpcbox_channel:init

gproc_pool:new(ChannelName, BalancerType, [{size, length(Endpoints)}, ..] for each channel
grpcbox_subchannel:start_link for each endpoint in the channel

Unary request
For a unary request, the caller uses the generated client rpc function. This unary call is synchronous and waits for the rpc reply.
routeguide_route_guide_client:get_feature(Input):

grpcbox_client:unary

grpcbox_channel:pick

gproc:pick_worker (ets lookup)

grpcbox_client_stream:send_request

grpc_subchannel:conn

gen_statem:call

h2_client:start_link

h2_connection:new_stream

h2_stream_set:new_stream

h2_stream:start_link
h2_connection:send_body

h2_stream:set:send_what_we_can

h2_frame_data:new
h2_stream:send_data

sock:send

gen_tcp:send

recv_end

receive

recv_trailers
recv_data

grpcbox_client_stream:recv_msg

receive

Response is sent via a on_receive_data callback in grpcbox_client_stream set with h2_connection:new_stream. grpcbox_client_stream is the callback module.
on_receive_data(Data, State=#{stream_id := StreamId,
                              client_pid := Pid,
                              buffer := Buffer,
                              encoding := Encoding,
                              unmarshal_fun := UnmarshalFun}) ->
    {Remaining, Messages} = grpcbox_frame:split(<<Buffer/binary, Data/binary>>, Encoding),
    [Pid ! {data, StreamId, UnmarshalFun(Message)} || Message <- Messages],
    {ok, State#{buffer => Remaining}};

Stream request/response
Create the stream:
routeguide_route_guide_client:route_chat

grpcbox_client:stream

grpcbox_channel:pick

grpcbox_channel:pick_worker
grpcbox_client:stream:new_stream

grpcbox_subchanne:conn

gen_statem:call

h2_connection:new_stream

gen_statem:call

h2_stream_set:new_stream

h2_stream:start_link

h2_connection:send_headers

gen_statem:cast

sock:send

gen_tcp:send

Send streaming request:
grpcbox_client:send

grpcbox_client_stream:send_msg

h2_connection:send_body

gen_statem:cast

h2_stream_set:get
h2_stream_set:queued_data
h2_stream_set:send_what_we_can

h2_stream:send_data

gen_statem:cast

sock:send

h2_stream_set:upsert

Receive streaming response:
grpcbox_client:recv_data

grpcbox_client_stream:recv_msg

receive data - checks for 'DOWN' messages and receives trailers; checks for timeout and if the stream process is alive; uses selective receive

Data is delivered via a callback set when creating h2_stream.
h2_connection:handle_event({info, {tcp, ...}})

sock:recv
gen_statem:cast(self(), {frame, ...})
connected - state

route_frame

recv_data

h2_stream:send_event

gen_statem:cast

grpcbox_client:stream:on_receive_data

! {data, ...} for each message
receive in grpc_client_stream:recv_msg

Messages sent on streams traverse two intermediate processes before getting to gen_tcp. Messages received from streams also traverse two intermediate processes before getting to the process calling grpc_client_stream:rcv_data.

grpc_client
Local changes:
Branched at 02689e7992ef70b42b6b890db450ae4a7c21a50c (April 6, 2022)
Local changes in helium/grpc_client replaces http2_client with helium fork.
Adds proc_lib and http2_client as .app dependencies.
No changes in original version since fork.
Depends on http2_client.
http2_client local changes:
Branched at 8a6faf3ef1e0f3bb480d52d34ef5181258e99302 (Oct 11, 2017)
Local changes:

add connection timeout
changes connection's timeout
adds monitor of socket
catchall for ignoring settings frames

Flows
Examples
Proto file definition:
rpc RouteChat(stream RouteNote) returns (stream RouteNote) {}

Usage:
Create a new stream:
{ok, Connection} = grpc_client:connect(tcp, "localhost", 10000),
{ok, Stream} = grpc_client:new_stream(Connection, 'RouteGuide', 'RouteChat', route_guide).

Send a request:
P1 = #{latitude => 1, longitude => 2},
P2 = #{latitude => 3, longitude => 5},
grpc_client:send(Stream, #{location => P1, message => "something about P1"}),
grpc_client:send(Stream, #{location => P2, message => "something about P2"}).

Receive a response:
grpc_client:get(Stream).  % polls
grpc_client:rcv(Stream, 1000). % blocks

Connect
grpc_client:connect:

grpc_client_connection:new

http2_client:new_connection

gen_server:start_link

gen_tcp:connect`

grpc_client:new_stream:

grpc_client_stream:new

gen_server:start_link(grpc_client_stream, ...)`

grpc_client_stream:init`

grpc_client_connection:new_stream`

http2_client:new_stream

gen_server:call

grpc_client:send:

grpc_client_stream:send

gen_server:call

grpc_client_stream:send_msg

encode
grpc_client_connection:send_headers

http2_client:send_headers
gen_server:call

http2_client:do_send_headers

gen_tcp:send

grpc_client_connection:send_body

http2_client:send_data
gen_server:call

gen_tcp:send

grpc_client:get:

grpc_client_stream:get

gen_server:call

queue:out

grpc_client:rcv:

grpc_client_stream:rcv

gen_server:call

queue:out or noreply

Data is queued by grpc_client_stream on receiving 'RECV_DATA'

decode
info_response

gen_server:reply or queue data

http2_client:

handle_info

handle_packet`

handle_message0`

handle_message`

handle_data`

Owner ! 'RECV_DATA'

active_once

inet:setopts {active, once}

Note that there is no back pressure between http2_client and grpc_client_stream. If grpc_client:get/rcv is not called, decoded messages accumulate in the grpc_client_stream mailbox.
Data sent to the server traverses two processes before calling gen_tcp:send. Data from the server also passes through two intermediate processes before it is retrieved by the client application.

From a process architecture point of view, both grpcbox_client and grpc_client require two process hops to send a request to the server and to retrieve a response from the server. Neither supports an asynchronous interface to reading responses from the server. grpcbox_client has mechanisms for connection pooling/load balancing to the server. It does not appear that grpc_client supports this.
I think we should settle on grpcbox_client. There doesn't appear to be a significant process architecture difference as compared to grpc_client and there are some additional advantages:

grpcbox_client supports records for encoding/decoding messages so we can remove code translating from record to map and map to record.
We're using grpcbox for the grpc server
We can use grpcbox_client generated client code/functions


Whose this

In my opinion, JARVIS should have ability to identify persons and provide us information about him/her. This adds new feature of providing some information about a person. Bot will become able to answer questions like "Who is Sachin Tendulkar".

Hey @shreyas95, the current wiki module can be extended to include such type of queries. What do you think?
You may make a new Pull Request adding the test (Who is Sachin Tendulkar?) in test_wiki.py.

Continued in #82


My Ledger is stuck on "loading"

I have a problem with the ledger connection. When I want to create a new account attached to the ledger wallet I get stuck in loading.
I tried to reset the application but in vain. Since 15.02.2021 I keep trying but to no avail.
I noticed that this problem was also in January, do you think it will be solved. Below I leave the link where I read about the problem. Thank you!
https://support.polkadot.network/support/solutions/articles/65000173833-my-ledger-is-stuck-on-loading-on-polkadot-js

i also have the same problem since 18/02, the support help you ?

Yes, the operating system was the cause for me. I was using Windows 7,
it worked on Windows 10. I hope it helps.
dum., 21 feb. 2021, 19:56 Nadiaaa17<EMAIL_ADDRESS>a scris:

i also have the same problem since 18/02, the support help you ?
[image: screeshot apply polkadot]
https://user-images.githubusercontent.com/79416905/108633784-78685b00-7476-11eb-946c-c067ab7411eb.PNG
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/Zondax/ledger-kusama/issues/72#issuecomment-782897511,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AS4GFQAJ7DHQL66TNMDUZPLTAFCNTANCNFSM4XX6DV7A
.


Rename fingerprint.js so ad blockers don't block the file

Describe the bug
Ad blockers, such as uBlock, block the file fingerprint.js sometimes which promptly crashes the client.
To Reproduce
Unfortunately, it doesn't happen always on Codesandbox but I got it often.

Install uBlock origin and Privacy Badger
Open https://codesandbox.io/s/uppy-drag-drop-gyewzx?file=/src/index.js
Check console, it blocks the file (sometimes)

Expected behavior
tus-js-client doesn't use a filename that is on some block list for scripts

Ok, I can reproduce this with uBlock. I get following errors:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at<EMAIL_ADDRESS>(Reason: CORS request did not succeed). Status code: (null).

ModuleNotFoundError: Could not find module in path: 'tus-js-client/lib.esm/browser/fingerprint' relative to '/node_modules/tus-js-client/lib.esm/browser/index.js'

This problem should not occur if your application is bundled in a single files. But here the files are loaded individually, so the ad blockers get hung up on the name.
We can simply change the file name from fingerprint.js to fileSignature.js. That name would also be more descriptive.


feat: Enable passing a ref to TableCell

In order to a position a popover (using Floating UI) next to a table cell in a Tremor table, I needed to access the td element that is rendered by TableCell.
This PR adds forwardRef to TableCell so that it's possible to pass a ref to it, for example:
function Demo() {
  const cellRef = useRef(null);

  useEffect(() => {
    if (cellRef.current) {
      // anchor popover to cellRef.current
    }
  }, []);

  return (
    <>
      <TableCell ref={cellRef}>Peter Doe</TableCell>
      <TableCell>1.000.000</TableCell>
      <TableCell>Region A</TableCell>
     </>
  );
}

@fson thanks for submitting this!
I think we should make sure that the ref is forwarded to all components. We are working on a v2 currently where this will be the case. It may be worth though to implement ref forwarding for all components even before releasing the v2. We'll discuss this internally and come back to you.

@fson thanks for submitting this! I think we should make sure that the ref is forwarded to all components. We are working on a v2 currently where this will be the case. It may be worth though to implement ref forwarding for all components even before releasing the v2. We'll discuss this internally and come back to you.

So possibly before v2, you guys are probably going to release a version with ref forwarding?
Btw I love this library so much. I recently tried to use the input elements from the library such as  TextInput with react-hook-forms but it was giving me ref forwarding error. Waiting for a release with re forwarding included.

Hey @i701, we are actually planning to release the v2 with the ref forwarding end of this month if everything goes well :)

Closing since this is resolved in the newest release 🙂


Show my current location on the map

Using the Geolocaltion API, get the current position of the user and display it on the map.

Included feature with d39d04421417281fbd2475d47ee63597f2c311f9
However, the user must allow GPS on the mobile browser they are using.


pkg: fix versionStrings out of bound

add check to length of versionStrings
fix: #1086

Thanks a lot @chenliTW

Thank you!

Thanks


Properly define how to merge Pull Requests

Standardised strategy to merge Pull Requests was asked for.
Make sure this is also used regularly.
So this strategy should be simple.
Definitely do this, as this was addressed 3 times in the retro 1

Maybe somebody else than Felix can do this, as he is already tasked with one of our largest items for this sprint.

My idea is that somebody can read on / think of different ways to handle this and maybe create a poll in the end so that everybody can have a say.

main and dev branches are protected against direct pushes, which means that we want to do a Pull Request (PR) in order to merge a developed branch into these branches. Having developed a branch (let's call it feature-1) and we want to merge feature-1 branch into main branch.
Here is a standard way to merge pull requests:

Have all your local changes added, committed, and pushed on the remote feature-1 branch

git checkout feature-1
git add .
git commit -m "added a feature" --signoff  (don't forget the signoff ;) )
git push

Make sure your local main branch up-to-date

git checkout main
git pull main

Go to Pull Requests (https://github.com/amosproj/amos2023ws06-sales-lead-qualifier/pulls) > click on "New pull request" > make sure the base is main branch (or dev branch, depends on which branch you want to update) and the compare to be your feature-1 branch, as highlighted in the photo below and click "create pull requests":

wait for others to review your code, when we agree to the changes we would merge the PR.

In case of merge conflict:
Should we experience merge conflict after step 3, we should solve the merge conflicts manually, below the title of "This branch has conflicts that must be resolved" click on web editor (you can use vscode or any editor you want).
The conflict should look like this:

"<<<<<<< HEAD"
"// Your changes at feature-1 branch"
"======="
"// Data already on the main branch"
">>>>>>> main"

-choose which one of these you would adopt for the merge to the main branch, we would be better off solving the merge -conflicts together rather than alone, feel free to announce it in the slack group chat.
-mark it as resolved and remerge the PR again, there shouldn't any problem with it.
Feel free to add more about that matter here.

Hey there @ultiwinter ! Looks good, what about pushing deliverables files to the main? Do we also follow the guideline by creating a deliverable-n branch first where n is the respective sprint?

I think that deliverables are probably the only thing where it does not make sense, to push them to dev first, because they are basically the result of the main branch (to be honest, they should not be in version control at all, but there's not a lot we can do about that)

Unless we will be able to set up branch protection (which we currently do not have permission for), because then it would simply not be possible to push deliverables directly to main anymore

I think it might be good to not push to main to avoid main being ahead of dev. This merging strategy is also anchored in our team contract. This will force us to merge back from main at some point which is bad practice if not applying a hotfix. If our code is not ready and we need to push deliverables to main I would rather cherry pick the Deliverables folder to merge only the needed files into main.

I believe uploading deliverables directly to main shouldn't be an issue because it's isolated in the deliverables folder right? When we then merge our code to main, git will realize theres no conflict and auto merge the changes afaik. It's true that it violates our branching structure, but it was meant to keep our codebase stable, and as theres never any code in the deliverables folder I don't see an issue.
I would like to add one more requirement before merging a PR: All GitHub Action checks should pass. Since the pipeline is setup, it will run for all branches/PRs (you might need to merge dev into your feature branch once).

Having new deliverables pushed to main is not a problem. However, I believe
we would be better off having a standardized way and adhering to our
branching hierarchy. When we make new deliverables, merging into dev and
then directly merging dev into main shouldn’t be problem nor time
extensive. Hence, I add my voice to Felix’s opinion.
Lucca Baumgärtner @.***> schrieb am So. 29. Okt. 2023
um 10:36:

I believe uploading deliverables directly to main shouldn't be an issue
because it's isolated in the deliverables folder right? When we then merge
our code to main, git will realize theres no conflict and auto merge the
changes afaik. It's true that it violates our branching structure, but it
was meant to keep our codebase stable, and as theres never any code in the
deliverables folder I don't see an issue.
I would like to add one more requirement before merging a PR: All GitHub
Action checks should pass. Since the pipeline is setup, it will run for all
branches/PRs (you might need to merge dev into your feature branch once).
—
Reply to this email directly, view it on GitHub
https://github.com/amosproj/amos2023ws06-sales-lead-qualifier/issues/25#issuecomment-1784048079,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AWVZKTGPCUSISKWAAY6U5RTYBYISXAVCNFSM6AAAAAA6PJOQC2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTOOBUGA2DQMBXHE
.
You are receiving this because you were mentioned.Message ID:
@.***
com>

Rules for who is among the Reviewers