FIX-#1294: fixed 'value_counts' implementation

Signed-off-by: Dmitry Chigarev<EMAIL_ADDRESS>
What do these changes do?
This PR moves value_counts implementation to the API level, technically value_counts is groupby().size(), so this is the way it was implemented at the front-end.
Side-effects:
In addition to groupby itself, there are some more steps to cover the value_counts parameters, all of these steps can't be done via groupby, so they're applied to the counted values separately from groupby. These separate applying generates up to 3 extra backend-API calls, since there is no query optimizer (for pandas backend) that would pack multiple calls into a single one we're getting an extra overhead of potential resplitting the frame several times during a single value_counts call (more info at this comment).
This new behavior leads to a performance regression in certain cases (for pandas backend only), but as it was agreed, we're okay with this for now (we believe in a bright future with a decent query optimizer).
Performance changes:
Here are the results of ASV benchmarks, they were run on 24 cores with a "Big" dataset, #2730 branch against the current master.
Run command:
MODIN_CPUS=24 MODIN_TEST_DATASET_SIZE=Big asv continuous src/master HEAD --split --no-only-changed --launch-method=spawn -b "time_value_counts" --show-stderr

I manually added sort=False case, because sort_values() is currently defaulting to pandas and so we don't want to compare defaulting-to-pandas vs non-defaulting-to-pandas.
ASV results
=====================  SORT=FALSE  =========================

Benchmarks that have improved:

       before           after         ratio
     [6c23a23f]       [2b561f47]
                      <issue_1294>
-         283±6ms          193±4ms     0.68  benchmarks.TimeValueCountsFrame.time_value_counts((1000000, 10), ngroups='huge_amount_groups', subset=2, sort=False)
-        230±20ms          155±3ms     0.67  benchmarks.TimeValueCountsSeries.time_value_counts((1000000, 10), ngroups='huge_amount_groups', sort=False)
-         200±1ms          128±2ms     0.64  benchmarks.TimeValueCountsSeries.time_value_counts((5000, 5000), ngroups=100, sort=False)
-         218±3ms          134±1ms     0.62  benchmarks.TimeValueCountsSeries.time_value_counts((5000, 5000), ngroups='huge_amount_groups', sort=False)
-         641±3ms          360±5ms     0.56  benchmarks.TimeValueCountsFrame.time_value_counts((1000000, 10), ngroups='huge_amount_groups', subset=10, sort=False)
-        222±20ms          125±3ms     0.56  benchmarks.TimeValueCountsSeries.time_value_counts((1000000, 10), ngroups=100, sort=False)
-         390±2ms          203±5ms     0.52  benchmarks.TimeValueCountsFrame.time_value_counts((1000000, 10), ngroups=100, subset=10, sort=False)
-        663±10ms          248±7ms     0.37  benchmarks.TimeValueCountsFrame.time_value_counts((5000, 5000), ngroups='huge_amount_groups', subset=10, sort=False)
-        615±10ms          200±4ms     0.33  benchmarks.TimeValueCountsFrame.time_value_counts((5000, 5000), ngroups=100, subset=10, sort=False)
-        688±30ms          164±5ms     0.24  benchmarks.TimeValueCountsFrame.time_value_counts((5000, 5000), ngroups='huge_amount_groups', subset=2, sort=False)
-        619±30ms          142±2ms     0.23  benchmarks.TimeValueCountsFrame.time_value_counts((5000, 5000), ngroups=100, subset=2, sort=False)

Benchmarks that have stayed the same:

       before           after         ratio
     [6c23a23f]       [2b561f47]
                      <issue_1294>
         179±30ms          147±3ms    ~0.82  benchmarks.TimeValueCountsFrame.time_value_counts((1000000, 10), ngroups=100, subset=2, sort=False)

SOME BENCHMARKS HAVE CHANGED SIGNIFICANTLY.
PERFORMANCE INCREASED.

=====================  SORT=TRUE  =========================

Benchmarks that have improved:

       before           after         ratio
     [6c23a23f]       [2b561f47]
                      <issue_1294>
-         401±3ms          283±5ms     0.70  benchmarks.TimeValueCountsFrame.time_value_counts((1000000, 10), ngroups=100, subset=10, sort=True)
-        722±30ms          489±7ms     0.68  benchmarks.TimeValueCountsFrame.time_value_counts((5000, 5000), ngroups='huge_amount_groups', subset=2, sort=True)
-        708±20ms         267±10ms     0.38  benchmarks.TimeValueCountsFrame.time_value_counts((5000, 5000), ngroups=100, subset=10, sort=True)
-        678±30ms          221±7ms     0.33  benchmarks.TimeValueCountsFrame.time_value_counts((5000, 5000), ngroups=100, subset=2, sort=True)

Benchmarks that have stayed the same:

       before           after         ratio
     [6c23a23f]       [2b561f47]
                      <issue_1294>
         657±20ms         698±20ms     1.06  benchmarks.TimeValueCountsFrame.time_value_counts((5000, 5000), ngroups='huge_amount_groups', subset=10, sort=True)
          210±4ms          218±5ms     1.04  benchmarks.TimeValueCountsFrame.time_value_counts((1000000, 10), ngroups=100, subset=2, sort=True)
          196±3ms         196±10ms     1.00  benchmarks.TimeValueCountsSeries.time_value_counts((5000, 5000), ngroups=100, sort=True)
          223±3ms          203±2ms     0.91  benchmarks.TimeValueCountsSeries.time_value_counts((1000000, 10), ngroups=100, sort=True)

Benchmarks that have got worse:

       before           after         ratio
     [6c23a23f]       [2b561f47]
                      <issue_1294>
+         219±3ms         437±20ms     2.00  benchmarks.TimeValueCountsSeries.time_value_counts((5000, 5000), ngroups='huge_amount_groups', sort=True)
+         280±4ms          523±5ms     1.87  benchmarks.TimeValueCountsFrame.time_value_counts((1000000, 10), ngroups='huge_amount_groups', subset=2, sort=True)
+         256±7ms          430±7ms     1.68  benchmarks.TimeValueCountsSeries.time_value_counts((1000000, 10), ngroups='huge_amount_groups', sort=True)
+         656±6ms         824±60ms     1.26  benchmarks.TimeValueCountsFrame.time_value_counts((1000000, 10), ngroups='huge_amount_groups', subset=10, sort=True)

SOME BENCHMARKS HAVE CHANGED SIGNIFICANTLY.
PERFORMANCE DECREASED.

Expanded timings and comparison with pandas are posted here
Formal todo list:

[x] commit message follows format outlined here
[x] passes flake8 modin
[x] passes black --check modin
[x] signed commit with git commit -s
[x] Resolves #1294
[x] tests added and passing

@devin-petersohn implementation of value_counts via groupby.size at the API layer is good on paper, I also would like to have query compiler nice and clean, and don't move implementation to the backend of those operations, that could be processed at the front. However, when it comes to implementation, there are some details that need to be mentioned.
Implementation of value_counts at the API layer would look like this:
def value_counts(self, ...):
    counted_values = self.groupby(  # 1-st backend-API call: MapReduce + Broadcast
        by=subset or self.columns, sort=not sort, dropna=dropna
    ).size()
    if sort:
        counted_values.sort_values( # 2-nd backend-API call: FullAxisFn
            ascending=ascending
        )
    if normalize:
        counted_values = (                         # 3-th and 4-th API calls:
            counted_values / counted_values.sum()  #    sum: Map
        )                                          #    divide: Map + Broadcast
    return counted_values

As we can see, there are 4 calls to the backend-API now, some of which trigger the creation of FullAxisPartitions, which means concatenate all partitions, and then split it again (expensive operation). In an ideal world, backend-API calls shouldn't be expensive, however all those things with repartitioning and broadcasting make them so.
Implementations at the frontend look clean and helps to unload query compiler from unnecessary methods, but it also has the disadvantage of many backend-API calls. What is your opinion about this?

I think it is at most 4, but the common case of the sort argument can be handled at the groupby phase if ascending is False
def value_counts(self, ...):
    counted_values = self.groupby(  # 1-st backend-API call: MapReduce + Broadcast
        by=subset or self.columns, sort=sort and not ascending, dropna=dropna
    ).size()
    if ascending:
        counted_values.sort_values( # 2-nd backend-API call: FullAxisFn
            ascending=ascending
        )
    if normalize:
        counted_values = (                         # 3-th and 4-th API calls:
            counted_values / counted_values.sum()  #    sum: Map
        )                                          #    divide: Map + Broadcast
    return counted_values

Long term, this communication overhead will be resolved by the query optimizer.

sort argument can be handled at the groupby

It can't, since groupby(sort=True) sorts keys (values that we count) when value_counts(sort=True) sorts values (counts of values):
>>> sr = pandas.Series([1, 2, 2, 3])
>>> sr.value_counts(sort=True)
2    2
1    1
3    1
dtype: int64
>>> sr.groupby(sr, sort=True).size()
1    1
2    2
3    1

In a long term perspective, it's good to have this implementation at the front, but just mentioning that in comparison with 0.8.3 we will have a noticeable performance regression in value_counts in 0.8.4

@dchigarev I see, yes. So sort will still be necessary.
Do you have performance numbers if sort is False?

@devin-petersohn here is the current performance
MODIN_CPUS=16

Series.value_counts(sort=False)
    shape             ngroups
---------------- -------------------- -----------
(5000, 1)               100            157±3ms
(5000, 1)               2500           177±5ms
(1000000, 1)            100            157±10ms
(1000000, 1)            2500           192±8ms
(10000000, 1)           100            193±5ms
(10000000, 1)           2500           246±20ms
================ ==================== ===========

DataFrame.value_counts(sort=False)
    shape             ngroups         subset
---------------- -------------------- -------- -----------
(5000, 5000)             100            10      571±30ms
(5000, 5000)             100            3       527±80ms
(5000, 5000)             2500           10      766±40ms
(5000, 5000)             2500           3       738±100ms
(1000000, 10)            100            10      241±4ms
(1000000, 10)            100            3       183±6ms
(1000000, 10)            5000           10      350±20ms
(1000000, 10)            5000           3       241±10ms
(10000000, 10)           100            10      439±10ms
(10000000, 10)           100            3       286±20ms
(10000000, 10)           5000           10      694±40ms
(10000000, 10)           5000           3       389±30ms
================ ==================== ======== ===========

Currently, tests are failing because of #2811

@dchigarev Do we want this on 0.11? I think it would be good to add it there.

Yes, I'd also like to have this in 0.11, I'll add this issue to the release tracker when it'll be created

ASV changes
Run command:
MODIN_CPUS=24 MODIN_TEST_DATASET_SIZE=Big asv continuous src/master HEAD --split --no-only-changed --launch-method=spawn -b "time_value_counts" --show-stderr

=====================  SORT=FALSE  =========================

Benchmarks that have improved:

       before           after         ratio
     [6c23a23f]       [2b561f47]
                      <issue_1294>
-         283±6ms          193±4ms     0.68  benchmarks.TimeValueCountsFrame.time_value_counts((1000000, 10), ngroups='huge_amount_groups', subset=2, sort=False)
-        230±20ms          155±3ms     0.67  benchmarks.TimeValueCountsSeries.time_value_counts((1000000, 10), ngroups='huge_amount_groups', sort=False)
-         200±1ms          128±2ms     0.64  benchmarks.TimeValueCountsSeries.time_value_counts((5000, 5000), ngroups=100, sort=False)
-         218±3ms          134±1ms     0.62  benchmarks.TimeValueCountsSeries.time_value_counts((5000, 5000), ngroups='huge_amount_groups', sort=False)
-         641±3ms          360±5ms     0.56  benchmarks.TimeValueCountsFrame.time_value_counts((1000000, 10), ngroups='huge_amount_groups', subset=10, sort=False)
-        222±20ms          125±3ms     0.56  benchmarks.TimeValueCountsSeries.time_value_counts((1000000, 10), ngroups=100, sort=False)
-         390±2ms          203±5ms     0.52  benchmarks.TimeValueCountsFrame.time_value_counts((1000000, 10), ngroups=100, subset=10, sort=False)
-        663±10ms          248±7ms     0.37  benchmarks.TimeValueCountsFrame.time_value_counts((5000, 5000), ngroups='huge_amount_groups', subset=10, sort=False)
-        615±10ms          200±4ms     0.33  benchmarks.TimeValueCountsFrame.time_value_counts((5000, 5000), ngroups=100, subset=10, sort=False)
-        688±30ms          164±5ms     0.24  benchmarks.TimeValueCountsFrame.time_value_counts((5000, 5000), ngroups='huge_amount_groups', subset=2, sort=False)
-        619±30ms          142±2ms     0.23  benchmarks.TimeValueCountsFrame.time_value_counts((5000, 5000), ngroups=100, subset=2, sort=False)

Benchmarks that have stayed the same:

       before           after         ratio
     [6c23a23f]       [2b561f47]
                      <issue_1294>
         179±30ms          147±3ms    ~0.82  benchmarks.TimeValueCountsFrame.time_value_counts((1000000, 10), ngroups=100, subset=2, sort=False)

SOME BENCHMARKS HAVE CHANGED SIGNIFICANTLY.
PERFORMANCE INCREASED.

=====================  SORT=TRUE  =========================

Benchmarks that have improved:

       before           after         ratio
     [6c23a23f]       [2b561f47]
                      <issue_1294>
-         401±3ms          283±5ms     0.70  benchmarks.TimeValueCountsFrame.time_value_counts((1000000, 10), ngroups=100, subset=10, sort=True)
-        722±30ms          489±7ms     0.68  benchmarks.TimeValueCountsFrame.time_value_counts((5000, 5000), ngroups='huge_amount_groups', subset=2, sort=True)
-        708±20ms         267±10ms     0.38  benchmarks.TimeValueCountsFrame.time_value_counts((5000, 5000), ngroups=100, subset=10, sort=True)
-        678±30ms          221±7ms     0.33  benchmarks.TimeValueCountsFrame.time_value_counts((5000, 5000), ngroups=100, subset=2, sort=True)

Benchmarks that have stayed the same:

       before           after         ratio
     [6c23a23f]       [2b561f47]
                      <issue_1294>
         657±20ms         698±20ms     1.06  benchmarks.TimeValueCountsFrame.time_value_counts((5000, 5000), ngroups='huge_amount_groups', subset=10, sort=True)
          210±4ms          218±5ms     1.04  benchmarks.TimeValueCountsFrame.time_value_counts((1000000, 10), ngroups=100, subset=2, sort=True)
          196±3ms         196±10ms     1.00  benchmarks.TimeValueCountsSeries.time_value_counts((5000, 5000), ngroups=100, sort=True)
          223±3ms          203±2ms     0.91  benchmarks.TimeValueCountsSeries.time_value_counts((1000000, 10), ngroups=100, sort=True)

Benchmarks that have got worse:

       before           after         ratio
     [6c23a23f]       [2b561f47]
                      <issue_1294>
+         219±3ms         437±20ms     2.00  benchmarks.TimeValueCountsSeries.time_value_counts((5000, 5000), ngroups='huge_amount_groups', sort=True)
+         280±4ms          523±5ms     1.87  benchmarks.TimeValueCountsFrame.time_value_counts((1000000, 10), ngroups='huge_amount_groups', subset=2, sort=True)
+         256±7ms          430±7ms     1.68  benchmarks.TimeValueCountsSeries.time_value_counts((1000000, 10), ngroups='huge_amount_groups', sort=True)
+         656±6ms         824±60ms     1.26  benchmarks.TimeValueCountsFrame.time_value_counts((1000000, 10), ngroups='huge_amount_groups', subset=10, sort=True)

SOME BENCHMARKS HAVE CHANGED SIGNIFICANTLY.
PERFORMANCE DECREASED.

@devin-petersohn @modin-project/modin-core just a reminder that this PR is ready and waiting for review

Here are the measurements of the value_counts implementation presented in this PR in comparison with pandas and a hypothetical value_counts implementation where all of the things like sort and normalize are directly located in the reduce phase (measured on this commit), this implementation can give us approximate timing of the value_counts behaviour with the future query optimizer, which would pack chaining FullAxis functions into a single engine's API call.
Series.value_counts
Number of unique values: 2

shape->
(5000, 1)

(1.000.000, 1)

(10.000.000, 1)

sort=True
sort=False
sort=True
sort=False
sort=True
sort=False

pandas
606±0μs
400±0μs
6.45±0ms
6.34±0ms
61.3±0ms
59.1±0ms

modin API
128±3ms
95.4±3ms
127±3ms
97.4±3ms
147±2ms
116±4ms

modin backend
58.3±1ms
56.8±1ms
56.5±0.5ms
56.4±1ms
63.7±0.6ms
63.8±0.3ms

Number of unique values: 100

shape->
(5000, 1)

(1.000.000, 1)

(10.000.000, 1)

sort=True
sort=False
sort=True
sort=False
sort=True
sort=False

pandas
612±0μs
383±0μs
7.94±0ms
7.74±0ms
61.3±0ms
59.1±0ms

modin API
160±3ms
98.8±1ms
166±8ms
102±2ms
179±3ms
114±5ms

modin backend
56.4±3ms
58.2±0.9ms
60.4±0.4ms
58.4±0.9ms
64.1±2ms
66.6±2ms

Number of unique values: 5000

shape->
(5000, 1)

(1.000.000, 1)

(10.000.000, 1)

sort=True
sort=False
sort=True
sort=False
sort=True
sort=False

pandas
776±0μs
446±0μs
24.1±0ms
23.7±0ms
245±0ms
246±0ms

modin API
299±4ms
105±1ms
313±7ms
117±2ms
356±9ms
163±3ms

modin backend
59.4±2ms
57.9±1ms
74.6±1ms
73.0±2ms
91.6±3ms
94.2±3ms

DataFrame.value_counts, length of the subset is 2
Number of unique values: 2

shape->
(5000, 1)

(1.000.000, 1)

(10.000.000, 1)

sort=True
sort=False
sort=True
sort=False
sort=True
sort=False

pandas
2.81±0ms
2.60±0ms
65.3±0ms
65.2±0ms
773±0ms
740±0ms

modin API
153±4ms
119±3ms
157±2ms
124±2ms
265±7ms
226±8ms

modin backend
71.4±3ms
74.7±1ms
79.3±4ms
79.0±3ms
129±5ms
141±2ms

Number of unique values: 100

shape->
(5000, 1)

(1.000.000, 1)

(10.000.000, 1)

sort=True
sort=False
sort=True
sort=False
sort=True
sort=False

pandas
2.90±0ms
2.55±0ms
67.0±0ms
65.8±0ms
721±0ms
713±0ms

modin API
197±0.8ms
123±1ms
205±5ms
129±4ms
286±10ms
219±5ms

modin backend
75.0±1ms
74.4±1ms
83.1±3ms
83.2±4ms
137±7ms
136±6ms

Number of unique values: 5000

shape->
(5000, 1)

(1.000.000, 1)

(10.000.000, 1)

sort=True
sort=False
sort=True
sort=False
sort=True
sort=False

pandas
3.57±0ms
3.02±0ms
109±0ms
110±0ms
842±0ms
846±0ms

modin API
339±20ms
135±4ms
396±7ms
160±8ms
518±8ms
296±0.4ms

modin backend
80.2±3ms
85.1±1ms
117±4ms
118±4ms
186±10ms
191±10ms

@devin-petersohn , just for clarification, are you saying about value_counts implementation via GroupBy at API level or QC level?

@YarShev I think it can be done either way. If we can make it efficient to do the value_counts at the API layer I think we probably should.

Ok, let's leave value_counts implementation at the API layer as it is now with envision of further optimization opportunities. @dchigarev , address current comments, please.

@gshimansky @modin-project/modin-core all the comments have been addressed, PR is ready for review

@gshimansky , could you file an issue to discuss your suggestion there?

@devin-petersohn could you please have a look?

@devin-petersohn conflicts were solved and CI is green

Needs review from @modin-project/modin-omnisci


flag_overdue task only works if it runs every day

Currently, the Rake task flag_overdue only looks for Reservations whose due dates were yesterday and so if it doesn't run one day those reservations will never be flagged as overdue. Instead, we should search for reservations whose due dates were yesterday or earlier and still have the status of checked_out so that one missed cron job (or a period without cron jobs) doesn't prevent proper reservation flagging.
Note that this should probably be done for flag_missed as well.

flag_missed already has this set, so it's just a matter of changing flag_overdue. I'm blocking this on #1273 since it requires editing the same file.

I rebased the branch for this issue onto the new one for #1273 and will wait to open a PR until #1273 is merged.


stable is out

Super, super minor, but I noticed that https://github.com/matteyeux/seprom-loader/blob/master/seprom.py#L169 can be updated with the new stable launched yesterday.
Incredibly low priority of course, just mentioning it for whenever you happen to touch that code again as it's a very small cleanup.

Hey,
Latest commit fixes it. And I created a new release, let me know if I have to fill a PR for the community plugins repo.
Also, you might want to inform the devs of iBoot64binja  as I used their code.

You're good, letting me know here is enough.
It looks like though that release has a release but no tag name associated with it? Sorry, I know it's a headache to do this since the tag/release process is a bit odd.
https://api.github.com/repos/martyx00/ghinja/releases/tags/1.0.1 shows nothing
For what it's worth, I wrote https://github.com/Vector35/release_helper to manage all the changes required to increment the version for you when you're ready to do a release as a one-liner.


✨ Enable the SyncerTunnel featuregate by default

Summary
This PR enables the SyncerTunel feature-gate by default.
Related issue(s)
Fixes #

Do we still need the privateKCPServer if we're not using the feature flag anymore ?

/lgtm

/lgtm


api docs: Migrate endpoints to OpenAPI and minor fixes.

Migration to OpenAPI of the documentation for the following endpoints:

POST /users
DELETE /users/me/subscriptions
POST /user_uploads

Plus a few fixes, mostly dedicated to improve the OpenAPI YAML file.
Testing Plan: API tests passed locally and compared the migrated docs side-by-side.

Looks great, merged, thanks @YagoGG!  I also merged a8d0fdce648ca212f369f82300c2c8d37cd817ba on top to make this make a bit more sense (you upload a file only in the context of wanting to include it in a message).  It looks like we're almost done with the OpenAPI migration?

Cool, makes sense!
And yeah, we're done with the migration :tada:.

Well, we're not done until we remove the old arguments.json type code, are we?

That's something we should probably discuss, because we use the remaining call_on_each_event key for the real time events docs, but it isn't used for describing arguments for an endpoint in our REST API, strictly speaking.
We use it to describe the arguments that can be passed to call_on_each_event, which calls /register under the hood.
IMO the easiest thing would be just putting that directly into the Markdown file in a code block.


Apply Form component to linode/settings/alerts page

Apply the Form component to the linode/settings/alerts page.  We'd like to change all the forms to use this form component in order to try to maintain consistency. This is the next form I've attempted to change to using the Form component for.

Coverage increased (+0.007%) to 85.012% when pulling a974a4aeae7d2ae4626211155b9c6144da2ae76b on abemassry:apply-form-component-alerts-page into 9884a46c33ac5bf3a1e6bd716240ae1867c1cd0d on linode:master.

I don't think that's a great reason here and it's also more verbose.
On Dec 29, 2016 2:08 PM, "Abe Massry"<EMAIL_ADDRESS>wrote:

@abemassry commented on this pull request.
In src/linodes/linode/settings/layouts/AlertsPage.js
https://github.com/linode/manager/pull/879:

@@ -124,17 +124,14 @@ export class AlertsPage extends Component {

   <form onSubmit={this.onSubmit}>

   <Form onSubmit={() => this.saveChanges()}>

@eatonphil https://github.com/eatonphil consistency
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/linode/manager/pull/879, or mute the thread
https://github.com/notifications/unsubscribe-auth/ADvnmBG-Z1SGqpULBQqbTF70_M0voalXks5rNAU0gaJpZM4LXvew
.

Coverage increased (+0.09%) to 85.098% when pulling 106bc3668d727710e917c50aa95f28813a98f460 on abemassry:apply-form-component-alerts-page into 9884a46c33ac5bf3a1e6bd716240ae1867c1cd0d on linode:master.


Added George Benjamin to Contributors list

I'm quite elated about your pull request. I wanna evolve this project to addresses various problems faced by first-time contributors. I'd love to learn about your journey in open source community, the problems, pain points you had etc.
Could you explain how you felt when you went through the tutorial, made a pull request and learned that I merged it?
We’ve recently added Facebook share and tweet feature to our web app. Could you please go to https://roshanjossey.github.io/first-contributions/#social-share and share your first contribution to open source?
Also, check out projects with easy issues while you’re there.

Thanks a lot for this guide. It really helped me. I want to know why I had
merge conflicts when I followed the instructions exactly. Thank you.
On 13 Jun 2018 11:28 am, "Roshan Jossey"<EMAIL_ADDRESS>wrote:

I'm quite elated about your pull request. I wanna evolve this project to
addresses various problems faced by first-time contributors. I'd love to
learn about your journey in open source community, the problems, pain
points you had etc.
Could you explain how you felt when you went through the tutorial, made a
pull request and learned that I merged it?
We’ve recently added Facebook share and tweet feature to our web app.
Could you please go to https://roshanjossey.github.
io/first-contributions/#social-share and share your first contribution to
open source? Also, check out projects with easy issues while you’re there.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/Roshanjossey/first-contributions/pull/4905#issuecomment-396890936,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AmWlvA8LwdCTo7PpmCzHF0qCGLkiWWjgks5t8OlDgaJpZM4Ul7gb
.


update feature status page

We need to get this page updated for 0.8:
https://istio.io/about/feature-stages/

Updated the site with 0.8 features


Clipboard or terminal scrollback mnemonic vulnerability

Forward from

https://github.com/ethereum/staking-deposit-cli/issues/97

The 2020 Audit of staking-deposit-cli mentioned a task to properly clear the terminal buffer and clipboard to prevent the possibility of leaking the mnemonic.  This was investigated by Carl and he has concerns around cross-platform solutions.
Ultimately it may not be possible to resolve this for every usecase but something that should be investigated as is a likely output from any future audit.

My last comment is probably more related to #33


Archriss' showcase app swipe behaviour

Hi,
Can you please share what animationFunc & animationOptions do you use in the Archriss' showcase app? The feeling of the swipe in the example app and in the Archriss' showcase app drastically differ...

@grundmanise Well, nothing but the default values. But I'm pretty sure that what you're experiencing has to do with this.
I assume you are testing on an iOS device, aren't you? Can you try setting enableMomentum to false and see if this solves the 'feeling' issue?

@grundmanise Setting the ScrollView prop decelerationRate to 'fast' will probably help too ;)

Closing as there was no feedback.
Feel free to reopen if the provided suggestions didn't fix it for you.

While enableMomentumhelps, I am still not able to achieve the 'displaying one main slide' behavior.
For example, setting enableMomentum={false} and deceleration={'fast'} would achieve moving only one slide on every scroll - but the scroll still goes far to further slides and then moves reversely to snap to only the next item.
Something like this -

If the gif is too fast, this is what is happening(according to my best guess) -
When a finger is swiped quickly, the ScrollView scrolls far enough(as it should have in the ScrollView). But then due to enableSnap, the scroll is snapped to the slide next to the starting slide(note that enableMomentum is set to false).
Ideally, the decelerationRate prop(that is supported only on iOS) should solve this by not letting the scroll move far after the finger has been lifted. But that doesn't seem to solve the issue.
What I want to do ideally is something like below -

In this, the carousel moves only one slide however fast you swipe the scroll.

@prithsharma Thank you for the screencasts and the detailed explanation. To be honest, handling momentum is really tricky since there are huge differences between Android and iOS regarding ScrollView's behavior.
The app has been published with version 1.4.0 of the plugin, before we tried to enhance momentum's handling. Would you mind trying with that version and see if that solves the issue for you? Note that you will have to use two deprecated props, items and renderItems:
    _renderItem (data, index) {
        return (
            ...
        );
    }

    render () {
        <Carousel
          items={this.state.entries}
          renderItem={this._renderItem}
          sliderWidth={sliderWidth}
          itemWidth={itemWidth}
        />
    }

Thank you for the reply.
I tried doing this -

used version 1.4.0
kept enableMomentum as false and decelerationRate as fast.
refactored for using the old props, like you mentioned

With only these 2 changes on my earlier code, I didn't see any resolution of the problem quoted above. If anything, the snapping also became a little unpredictable. On a fast swipe, the scroll moving till after the next slide was still happening. Any more suggestions?
The bad thing is that I am not able to understand what is going inside and thus I almost feel dumb(:D) debugging this. @bd-arc can you help me with some pointers on what had changed since 1.4.0 that made you think that reverting to 1.4.0 could have solved this issue. If I understand better, maybe I' be able to give a better issue report and hopefully contribute.

@prithsharma Hi, I understand your need for clarification ;)
Since 1.5.0, we started using the onMomentumScrollEnd callback instead of relying solely on onScrollEndDrag. Unfortunately, momentum handling is both tricky and a bit buggy. Furthermore, its React Native implementation varies greatly between iOS and Android (see #34 for more information). That's why we're currently considering implementing our own PanResponder (#40), but this might take a while since it's not exactly a piece of cake.
What I can do for you at the moment is sharing our exact configuration for the Archriss app, which is pretty straightforward:

version 1.4.0 of the plugin
no enableMomentum prop (not implemented at that time)
showsHorizontalScrollIndicator={false}
snapOnAndroid={true}
inactiveSlideScale={0.95}
inactiveSlideOpacity={0.65}
removeClippedSubviews={false}

Setting snapOnAndroid to true might be the missing part in your case, since its default value is false with version 1.4.0.
Hope that helps!

Thanks a lot! Let me try this out and get back.

Thanks a lot again for sharing this.
I tried this out and I actually realized that the weird behavior that I have specified in my first GIF is actually the behavior of the Archriss Android app too. Explaining it better than before below -
Let's say there are 4 cards/slides - A, B, C, and D. If you are one slide A and swipe very fast, the ScrollView ends up scrolling to a C or D(momentarily) and then snaps to B. Attaching a GIF of the Archriss Android app(in slow motion) showing the same behavior:-

In the GIF above, consider the card with title 'ACTUALITÉS ...' to be A, the next one(ARTICLE TYPE) to be B and the one next to B(SIGNALER) to be C. And you'd see that starting from A, when you swipe very fast - you momentarily see C and then the view snaps to B. Note that in the GIF, I have tried to reset the first card to be 'ACTUALITÉS' to maintain A, B, C positions.
Updating the GIF for ideal behavior below:- (basically, this extra scroll to slide C shouldn't happen)

@prithsharma I totally get you, and that's what we're aiming at. Unfortunately, we rely on the RN ScrollView implementation at the moment, which clearly lacks some granularity to suit our needs.
That's why we're considering implementing our own PanResponder (see #40), but this is a whole new level. I'm afraid that, for now, you won't be able to provide the "feeling" you're after.

Very well. Thank you @bd-arc for talking through this. Appreciate it.
I'll be on the lookout. Will also see if I can contribute anything.

Hi @prithsharma did you get anywhere accomplishing the one-at-a-time feel you were going for?  Trying to build a player similar to Spotify with album artwork in the carousel, but am also encountering this issue where a fast swipe will go from A -> D, then snap back to B.

Hi @jasongrishkoff,
I'm currently trying to hack a way around ScrollView's erratic behavior. This is far from easy, but I'll let you know if I manage to achieve something useful.

Thanks @bd-arc! Ultimately just trying to force it to do one slide at a time, regardless of what sort of swipe action the user initiates.

Hi @jasongrishkoff,
I've just released version 3.2.0 which should help with your issue. Don't forget to test without enabling JS Dev Mode.
Note that there are a lot of issues at stake with how the carousel behave on Android, but it all comes down to React Native's implementation. In the near future, I'll be working on a custom scroller/PanResponder implementation in order to greatly enhance carousel's behavior and "feeling".

Thanks, @bd-arc. Testing this now. Does the below config look right for forcing a 1-at-a-time config?
            <ScrollView
              style={scrollview}
              scrollEventThrottle={200}
              directionalLockEnabled={true}
              decelerationRate={'fast'}
            >
                 <Carousel
                    ref={'carousel'}
                    data={data}
                    renderItem={this.renderItem}
                    sliderWidth={sliderWidth}
                    itemWidth={itemWidth}
                    hasParallaxImages={false}
                    firstItem={index}
                    initialNumToRender={5}
                    scrollEndDragDebounceValue
                    inactiveSlideScale={0.9}
                    inactiveSlideOpacity={0.7}
                    onSnapToItem={this.next}
                    scrollEndDragDebounceValue={0}
                />
            </ScrollView>

Oh, your carousel's container is a ScrollView? I must warn you that there are countless React Native issues about nested ScrollView (which the carousel basically is). As long as this for works for you, no need to panic, but stay alert ;-)
Regarding your config, this seems legit to me. Make sure to take a look at the release notes; you'll discover that prop scrollEndDragDebouncedValue has been removed.
You'll find below the exact configuration I used for this app which has been updated yesterday and which uses version 3.2.0 of the plugin. You can try it on Android and, pretty soon, on iOS to check that the "feeling" suits you.
<Carousel
    ref={(c) => { this._carousel = c; }}
    data={this.state.entries}
    renderItem={this._renderItem}
    sliderWidth={SLIDER_WIDTH}
    itemWidth={ITEM_WIDTH}
    hasParallaxImages={true}
    apparitionDelay={500}
    slideStyle={styles.slide}
    inactiveSlideScale={isIOS ? 0.96 : 0.92}
    inactiveSlideOpacity={0.65}
    autoplay={true}
    autoplayDelay={500}
    autoplayInterval={3000}
    enableMomentum={false}
    decelerationRate={'fast'}
    removeClippedSubviews={false}
/>

One final piece of advice: on Android, make sure to test carousel's performance and behavior without JS Dev Mode enabled, and ideally with a production build.

Wow, didn't realize I didn't need ScrollView -- I think I pulled that from the example file.  Going to use the settings you have above, without ScrollView :)
And totally understand re: production testing on Android.
Thanks for your help!  I'll let you know if anything looks wonky.

@jasongrishkoff You're right: I forgot that I've used a top-level ScrollView in the example... Well, apparently it can work ;-)
By the way, I've just release version 3.2.1 which fixes an issue introduced in 3.2.0.

Thanks :)

@prithsharma @bd-arc @jasongrishkoff any update on this issue..how this issue can be resolved. I am facing the same issue

@bd-arc
I am facing same issue with in my app. Here is my env details
react-native: 0.49.0,
react: 16.0.0-beta.5
react-native-snap-carousel: 3.7.2
Here my code
 <Carousel
        data={Enteries}
        renderItem={({ item, index }) => <SliderEntry data={item}  />}
        sliderWidth={sliderWidth}
        itemWidth={itemWidth}
        contentContainerCustomStyle={styles.sliderContentContainer}
        onSnapToItem={activeSlide}
        layout={'stack'}
        loop={false}
        hasParallaxImages={true}
        directionalLockEnabled={true}
        scrollEventThrottle={200}
        enableMomentum={false}
        apparitionDelay={500}
        decelerationRate={'fast'}
        removeClippedSubviews={false}
        scrollEndDragDebounceValue={500}
      />

Still we have issue regarding swiping more then one cards


Forever Regen Bug

You always regen health out of battle, even in the pause menu.

Fixed via e08a8fc1795df99fc6bd7d7deb6b0d4c2f390085

Wait I meant 4e34bfbdbd630ef9e7a4a1de01abb812165b2cde hahaha


Post meme command error.

It won't automatically post memes, when it execute the post meme command, it never press the post button.

Does it log any error? It's most like something with your buttonClick and/or commandInterval cooldowns, try changing the values.

No response, assuming it has been fixed by the last v1 fix


Limit height of previews

Scans of very long documents, e.g. Kassenbons, result in very (!) long preview images

Adding max-height: 300px; to .doc-image looks fine.

Yep, did not think about that.
I agree.
Fixed in 35afdef


v0.7.0_23: Years are not increasing linearly

SEVERITY: Major
MODULE: Mountain Chart
PLATFORM:

Windows 7 / Chrome 45.0
iPad Air 2 iOS(8.3) / Safari 8.0
Android Nexus-5 (5.1.1) / Chrome 44.0
Nexus 9 (5.0.1) / Chrome 45.0

RELEASE: v0.7.0
STEPS TO REPRODUCE:

Navigate to URL: http://static.gapminderdev.org/vizabi/release/v0.7.0/preview/mountainchart.html
Mountain chart page will be loaded
Click full screen button under “RESPONSIVENESS”
Click play
Note that years are not increasing linearly.

ACTUAL RESULTS:
Years are not increasing linearly. They are jumping by skipping one year.
EXPECTED RESULTS:
Years should be shown linearly
SCREENSHOT:

@k6Labz i guess it's fixed by now. see develop branch here http://static.gapminderdev.org/vizabi/develop/preview/mountainchart.html

Retest Result: Passed
Environment: Develop branch - http://static.gapminderdev.org/vizabi/develop/preview/mountainchart.html
Platform: Windows 7 / Chrome 45.0


feat request: support nzPlacement in nz-menu / nz-submenu

What problem does this feature solve?
Currently you cannot create a menu with different placement options, similar to nz-dropdown.
Thus, if you put nz-submenu with nzMode="horizontal", which is located in nz-header, on the right side of the header, nz-submenu goes beyond the visible area.
Example screenshot of the current behavior:

What does the proposed API look like?
nz-submenu of nz-menu in nzMode="horizontal" should support nzPlacement directive with at least bottomLeft and bottomRight values or correctly place sumenu on the screen automatically depending on the current position.

Property
Description
Type
Default

[nzPlacement]
placement of pop menu
'bottomLeft' | 'bottomCenter' | 'bottomRight' | 'topLeft' | 'topCenter' | 'topRight'
'bottomLeft'

This doesn't seem to be implemented yet or is it? Any workaround?

+1


Locks not showing up in Homebridge

I followed through the documentation, made a new account with the Dev account, i can login through the TTLock app with the new username and see my locks, but i cannot see the locks through homebridge, I'v gone over everything and triple checked, but cant get it to work.

Logs:
[2/3/2023, 2:04:16 AM] [HB Supervisor] Restarting Homebridge...
[2/3/2023, 2:04:16 AM] [HB Supervisor] Starting Homebridge with extra flags: -I
[2/3/2023, 2:04:16 AM] [HB Supervisor] Started Homebridge v1.6.0 with PID: 66644
[2/3/2023, 2:04:17 AM] Loaded config.json with 0 accessories and 3 platforms.
[2/3/2023, 2:04:18 AM] Loaded 3 cached accessories from cachedAccessories.
[2/3/2023, 2:04:18 AM] ---
[2/3/2023, 2:04:20 AM] Loaded plugin<EMAIL_ADDRESS>[2/3/2023, 2:04:20 AM] Registering platform 'homebridge-config-ui-x.config'
[2/3/2023, 2:04:20 AM] ---
[2/3/2023, 2:04:20 AM] The plugin "homebridge-govee" requires Node.js version of ^14.21.2 || ^16.19.0 || ^18.13.0 which does not satisfy the current Node.js version of v16.16.0. You may need to upgrade your installation of Node.js - see https://homebridge.io/w/JTKEF
[2/3/2023, 2:04:21 AM] Loaded plugin<EMAIL_ADDRESS>[2/3/2023, 2:04:21 AM] Registering platform 'homebridge-govee.Govee'
[2/3/2023, 2:04:21 AM] ---
[2/3/2023, 2:04:21 AM] Loaded plugin<EMAIL_ADDRESS>[2/3/2023, 2:04:21 AM] Registering platform 'homebridge-ttlock.ttlock'
[2/3/2023, 2:04:21 AM] ---
[2/3/2023, 2:04:21 AM] Loading 3 platforms...
[2/3/2023, 2:04:21 AM] [Govee] Initializing Govee platform...
[2/3/2023, 2:04:21 AM] [Govee] Initialising plugin v7.9.1 | System darwin | Node v16.16.0 | HB v1.6.0 | HAPNodeJS v0.11.0...
[2/3/2023, 2:04:21 AM] [TTLock] Initializing ttlock platform...
[2/3/2023, 2:04:21 AM] [Govee] Plugin initialised. Setting up accessories....
[2/3/2023, 2:04:21 AM] Homebridge v1.6.0 (HAP v0.11.0) (Homebridge D151) is running on port 51370.
[2/3/2023, 2:04:23 AM] [Govee] [LAN] client enabled and found 0 device(s).
[2/3/2023, 2:04:23 AM] [Govee] [HTTP] client enabled and found 3 device(s).
[2/3/2023, 2:04:26 AM] [Govee] ✓ Setup complete. Have time to give this plugin a review? https://bit.ly/hb-govee-review

Plugin Config:
{
    "name": "TTLock",
    "clientid": “xxx”,
    "clientsecret": “xxx”,
    "username": “xxx”,
    "password": “xxx”,
    "batteryLowLevel": 20,
    "maximumApiRetry": 5,
    "platform": "TTLock Platform"
}

Environment:

Plugin Version: v1.1.0
Homebridge Version: v1.6.0
Node.js Version: v16.16.0
NPM Version: 9.4.0
Operating System: macOS

Try to manually edit the config with what I have below. Easiest way to get there, if you're not familiar is by clicking "Config" in the top right corner. Then change this line:
"platform": "TTLock Platform"
To this:
"platform": "ttlock"
Then restart Homebridge.
If that doesn't work, are you not seeing the lock under the "Accessories" tab on the homebridge website or you're not seeing the lock on the Home macOS/iOS app?

Another thing to try is adding it to its own Child Bridge. It's been a while since I set mine up and I think I remember something about the creator saying it could slow down the main bridge if it's not on its own child bridge.
Might be worth updating Node.js if none of those work. I'm currently running v18.12.1 and have been since I installed.

So i updated my json config from:
"platform": "TTLock Platform"
To:
"platform": "ttlock"
and also updated my Node.js to version v18.14.0
But still no locks showing up in Homebridge Dashboard, the locks are currently managed by my Admin1 account, I logged into Admin1 and added my new account (generated via TTLock API) as an Authorized Admin to the locks. I'm thinking this may be the issue to why its not showing up in the Homebridge dashboard, I don't want to remove my locks from Admin1 account, is there any other way to get the locks to work without reseting them and provisioning to the new account.

I'm not sure if there is a way to do that. When I set it up, I had my primary everyday account signed in on my phone. Then I made an admin account online.
After that, I made a new "normal" account and transfered the locks from my TTLock app to the new "normal" account.
There might be a way around doing it that way but I haven't dove deep enough into it to say for sure.

@esraell - As far as I understand TTLock's API, @dale-tectorsolutions is correct.  Using the developer account you created for everything will be the easiest way to move forward.  I'll look at the API docs and see if there is a way to get locks that have been shared.  If anyone wants to look into adding that functionality, I'd be grateful!


docs: adding Can the user delete patches from their device?

Status
READY
Description
Adds a new section Can the user delete patches from their device?
Which covers what happen if users delete the application data in their devices.

Closing this for now


refactor: clean test directories

Refactor for two separate test directories and clean configuration template.

Duplicate of #5


Create protobuf message for Population bucket.

Creates population bucket proto message. This message type will be used to calculate populations of given demographics

not needed


Error when trying to running ijsinstall in terminal.

I use a Mac running on Monterey V12.6. I have gone through the necessary installation steps on the npm website, but when I run ijsinstall I return the following code:
Error parsing Jupyter version: Selected Jupyter core packages...
IPython          : 8.2.0
ipykernel        : 6.9.1
ipywidgets       : 7.6.5
jupyter_client   : 6.1.12
jupyter_core     : 4.9.2
jupyter_server   : 1.13.5
jupyterlab       : 3.3.2
nbclient         : 0.5.13
nbconvert        : 6.4.4
nbformat         : 5.3.0
notebook         : 6.4.8
qtconsole        : 5.3.0
traitlets        : 5.1.1

I have tried installing jupyter again and repeated the process multiple times but I run into the same error. Any help would be much appreciated!

Worked randomly immediately after I wrote this. If anyone has any solutions however please do leave them, I have a feeling this won't last.


echo with acbuild run writes a file on the host

AcBuild Version:
$ acbuild version
acbuild version v0.4.0
appc version 0.8.5

Given the following line:
acbuild run -- echo 'eval "$(rbenv init -)"' | tee /etc/profile.d/rbenv.sh

a file is generated on the host machine running acbuild rather than inside the container.  The end goal here is to have eval "$(rbenv init -)" written into the file /etc/profile.d/rbenv.sh within the container image.
Is this misuse on my part or a bug?

What's happening here is the shell on the host is interpreting the pipe and running the tee command, instead of those things being passed into acbuild. You can invoke a shell inside of acbuild to do the pipe logic for you if you wish:
acbuild run -- /bin/sh -c 'echo \'eval "$(rbenv init -)"\' | tee /etc/profile.d/rbenv.sh'

Thanks for the quick reply!  Seems to be something funky going on with the quotes though.


Fix package.json version when building npm packages

After generating a package with: dagger run go run ./cmd package --version 10.2.0-pre.ab12c34d
Before this change:
$ cat<EMAIL_ADDRESS>| jq .version
"10.2.0-pre"

After this change:
$ cat<EMAIL_ADDRESS>| jq .version
"10.2.0-pre.ab12c34d"

also, unsure what's going to happen with the pre suffix in this case too, @kminehart

Added more information on the PR, the -pre suffix is mantained.

ersion is version without the v, hence the variable name :sweat_smile:


Edgex mqtt error

I am using edgex and communicating with espc6 microcontroller using mqtt protocol. Edgex V2.3 is running on docker environment. Ubuntu 22.04 OS environment is used. Followed https://docs.edgexfoundry.org/2.3/examples/Ch-ExamplesAddingMQTTDevice/ link. From the link i am testing "Execute SET Command" using curl command from bash shell. I am getting success status 200 for up-to 9 tabs or windows. From 10th tab on wards  i fails with error code 500. I tested the same on two machines with different configurations like intel i3 processor with 8Gb ram and another i7 processor with 16Gb ram. I am getting same results i.e. up-to 9 tabs getting success 200 code. I need help on how to increase more number of tabs or connections to edgex mqtt device. As i have more microcontrollers connecting to edgex using mqtt. Please guide.

Currently, the EdgeX v3.1(Napa) is the LTS version. Could you please use the latest release version of EdgeX?

First we tried with v3.1(Napa), there also we faced same problem. So, we tested with V2.3. Here also getting same problem.

Could you provide the configuration.yaml file, profile.yaml and device.yaml?
Some error log with text is preferred.

It seems not an EdgeX issue. Did you test the MQTT connection with the esp32 device using your script?
And, you should use the latest version of EdgeX that the community can support you as well.

On the bash shell, curl command is given to set the message in edgex. I am sending curl command using shell script which will send command for every 45 secs in a loop. I tested this on 10 tabs simultaneously. Until 9 tabs i am getting success status code 200.
For the first tab, the response is getting within 2 secs. As the tabs increases the response getting time interval is increasing. At the 9th tab the response time interval is nearly 4 to 5 sec. At the 10th tab the response time interval is more than 5 secs.
Initially only error 500 is coming when there is no response from edgex.  Later i changed some settings in consol 1.ResponseFetchInterval value changed from 500ms to 1000ms. 2.Corecommand service request timeout from 45s to 60secs. 3.KeepAlive to 3600. From then on-wards i am getting "err: HTTP request timeout","statusCode":503", error.
I want to know where is the option in the edgex to increase the http request timeout.

It's not a timeout setting issue. The status code 503 means your devices didn't return anything.
Try to connect the esp devices using curl directly .

I tested connection with esp device using curl directly. I tested it with 10 tabs simultaneously. There is no loss in data from all the tabs. The curl command i used is "i=100; while :; i=$((i+1)); do curl -d $i mqtt://localhost/command/espc7/newmessage/set/293d7a00-66e1-4374-ace0-07520103c95f; sleep 45; done". Attached screenshot

.

I'll test the case in a few days.

I tested the same with raspberry pi pico board and edgex. I did concurrent tabs upto 20, sending curl requests to edgex on mqtt. There is no loss in the connection. I think there is problem with the mqtt on esp32. Thanks for your support.

@nbenhur Please close the issue, thanks.


Allow variables inside volume mount

I currently to build a solution for developers to build their applications locally via drone ci.
As the home directory of the user varies, something like this came to my mind, when they try to run drone exec:
volumes: $USER_HOME/.m2:/drone/.m2
and having the user run it via something like this:
drone exec --repo.trusted --secret USER_HOME=/home/foo
Unfortunately there seems to be no variable support available for volumes.
Would it be possible to add support for it to drone?

we recently made changes to secrets and this is now possible:
http://readme.drone.io/usage/secret-guide/
note you need to change $USER_HOME  to ${USER_HOME}
you will also need to update your cli to get the latest version


Blog_Application: Controller test

In this milestone I Implemented the following:
Write a test for controllers

When the response status is accurate
When the accurate template is provided
When the response body includes the accurate placeholder text

Test Preview

Thanks for the review and approval keep up the good works @TedLivist


User Secrets flatten settings

Please update this article to state that user secrets are flattened so that you can not nest settings such as AppSettings: { TestSetting1: "this is a test" } using the command line. What you get from the command is AppSettings:TestSetting1: "this is a test.". I saw where this was added as a bug, then closed as being intentional. The documentation should reflect this.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 9c99993c-c983-6fda-6c3a-ce4ec8c1d5db
Version Independent ID: ba688ac2-e90e-fce5-f60d-40c2553c3efd
Content: Safe storage of app secrets in development in ASP.NET Core
Content Source: aspnetcore/security/app-secrets.md
Product: aspnet-core
GitHub Login: @Rick-Anderson
Microsoft Alias: scaddie

@MasterSkriptor  do you have a link to the bug?

@Rick-Anderson I don't think this is a bug, necessarily. From the documentation this is its intended function. It also works the same when you call it from code. For some reason it confused me, and it turned out that I had another issue that was giving me the issues. I thought it may be a good idea to clarify that the settings were not nested. It says that they are here: https://docs.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-2.1&tabs=windows
Notice that they use hierarchies all through out this documentation. But if you use the dotnet user-secrets set key value command it is flattened in the secrets.json file. I'm sure, however you guys have enough to work on. So feel free to close this issue if you like.

@natemcmaster Thoughts on this?

Flattening is intended behavior of tools, but it's okay for users to use structured objects in JSON if they want. The structure won't round trip through dotnet-user-secrets or some VS extensions, though.


[BUG] Something spinning when choosing a destination VM for a PF rule

(IP address not fetched?)

Same happens in other forms - i.e. when adding a destination VM for a LB rule (happens only after you select a VM, before pressing OK)

@andrijapanicsb please test and close against latest master

LGTM, can see/use Secondary IPs as well, etc.


"Mark as Spam" and Spam history in Settings doesn't seem to be working correctly

Initial investigation shows the modpol search server side is indeed returning the correct results, so this may be a client side issue


refactor(presets): simplify jest presets structure

Summary

Simplify the create presets codes to be easier in debugging and reduce complexity.
Test plan

Green CI
Does this PR introduce a breaking change?

[ ] Yes
[x] No

Other information
N.A.

Pull Request Test Coverage Report for Build 6017

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage decreased (-0.02%) to 93.228%

Totals

Change from base Build 6015:
-0.02%

Covered Lines:
1133

Relevant Lines:
1167

💛  - Coveralls


PATCH verb not allowed

Hello,
I have established a connection to SFDC using databasedotcom gem. I have materalized Case and use them for index and show. Everything works fine but  when I perform I try to update I got a HTTP Method 'PATCH' not allowed. here is the controller#action failing:
@sfdc.materialize("Case")
@case = Case.find(params['Id'])
@case.update_attributes('Description' => params[:case]['Description'])

Here is the full error:
Databasedotcom::SalesForceError in CasesController#update

HTTP Method 'PATCH' not allowed. Allowed are HEAD,GET,POST

Rails.root: /Users/vzmind/rails/apps/ev-demo
Application Trace | Framework Trace | Full Trace

databasedotcom (1.2.3) lib/databasedotcom/client.rb:376:in `ensure_expected_response'
databasedotcom (1.2.3) lib/databasedotcom/client.rb:334:in `with_encoded_path_and_checked_response'
databasedotcom (1.2.3) lib/databasedotcom/client.rb:316:in `http_patch'
databasedotcom (1.2.3) lib/databasedotcom/client.rb:250:in `update'
databasedotcom (1.2.3) lib/databasedotcom/sobject/sobject.rb:69:in `update_attributes'
app/controllers/cases_controller.rb:33:in `update'

As this is working on console, I thought may be ActionDispatch might restrict the verb used from the application. But PATCH verb as been added already one year https://github.com/rails/rails/commit/d446392f76c063d9f04396a1d3ca9e314a521671
Then I have tried to understand what could be failing at lib/databasedotcom/client.rb:376 but I am not sure to really understand what could cause such error:
def ensure_expected_response(expected_result_class)
  response = yield

  unless response.is_a?(expected_result_class || Net::HTTPSuccess)
    if response.is_a?(Net::HTTPUnauthorized)
      if self.refresh_token
        response = with_encoded_path_and_checked_response("/services/oauth2/token", { :grant_type => "refresh_token", :refresh_token => self.refresh_token, :client_id => self.client_id, :client_secret => self.client_secret}, :host => self.host) do |encoded_path|
          response = https_request(self.host).post(encoded_path, nil)
          if response.is_a?(Net::HTTPOK)
            parse_auth_response(response.body)
          end
          response
        end
      elsif self.username && self.password
        response = with_encoded_path_and_checked_response("/services/oauth2/token", { :grant_type => "password", :username => self.username, :password => self.password, :client_id => self.client_id, :client_secret => self.client_secret}, :host => self.host) do |encoded_path|
          response = https_request(self.host).post(encoded_path, nil)
          if response.is_a?(Net::HTTPOK)
            parse_auth_response(response.body)
          end
          response
        end
      end

      if response.is_a?(Net::HTTPSuccess)
        response = yield
      end
    end

    raise SalesForceError.new(response) unless response.is_a?(expected_result_class ||  Net::HTTPSuccess)
  end

  response
end

Anybody already exposed to such behavior?

That's a  mistake on my side. The error returned is confusing. As I already experienced before PATCH limitation of Net Ruby library, I though it could be that again before checking an obvious mistake.
This is clearly better:
@sfdc.materialize("Case")
@case = Case.find(params[:case]['Id'])
@case.update_attributes('Description' => params[:case]['Description'])


Improvements to render test parity

This changelist implements a number of improvements to the parity of render tests between GLSL and OSL, including the following:

Render with a unit sphere in both GLSL and OSL, adjusting the zoom in OSL to compensate for framing differences.
Increase the environment map sample count in GLSL.
Increase the rays per pixel for lit surfaces in OSL.
Increase the tolerance for error messages in testrender.

RenderTests_StandardSurface.pdf

Here's a comparison of standard_surface_brass_tiled between GLSL and OSL, showing the visual impact of aligning cameras and render settings.

Notice that there's still a slight UV coordinate mismatch between the two renders, which appears to be a geometric difference between the polygonal sphere in OpenGL and the parametric sphere in testrender.


Improve page readability in python client documentation

Currently, when extended text content is added to table descriptions in the Python client documentation, the content is squeezed into narrow columns, making it a bit difficult to read.
I would propose couple changes to the mkdocs.yml configuration:

Switch to docstring_section_style: "spacy" (this style might improve table formatting by allocating more space to the description column).
Enable the following options for better page aesthetics:

separate_signature: true (this separates the method signature from the rest of the content, making it clearer.)
show_category_heading: true (this introduces category headings, adding some better structure.)

To illustrate the difference, I provide these two examples:
Current view
Suggested view

Sounds like a good idea!
Question: What do the little 'add to clipboard' buttons next to the function definitions actually copy?


Integrate duckduckgo_search as a search backend

It would be nice to have less coupling with a specific search backend, in this case it's Bing and opt for other solutions such as
duckduckgo_search

Hi! Thanks for the great work. Is there any chance that you could create a smaller pr with only docker and lower version of python required ?
I have slightly different vision regarding the configuration (will add this week probably) relying on yaml.
I tested the pr version of xoxo and chat loop appears to be broken for me

Hi! Thanks for the great work. Is there any chance that you could create a smaller pr with only docker and lower version of python required ?
I have slightly different vision regarding the configuration (will add this week probably) relying on yaml.
I tested the pr version of xoxo and chat loop appears to be broken for me

I will separate the PR. I am currently down very deep in a rabiit hole of alpaca(llama) as an inference backend.
Currently working on optimum library to add a support for exporting a model into ONNX format so that optimizations could be taken to make fast inferences.

Hi,
I've ended up droping bing search completly and just relaced it with duckduckgo


Android Tests run slow

Describe the bug
Android tests run unnecessarily slow
To Reproduce
Steps to reproduce the behavior:
Running the tests will show that Espresso is waiting a lot, because an activity is not resumed.
Expected behavior
The tests shouldn't take so long to run
Smartphone (please complete the following information):

Device: doesn't matter
OS: doesn't matter

Additional context
Seems to be caused by the idling and synchronizations of AndroidTests. Since the Dispatcher is not swapped, when synchronizing with requests it seems to be stoping by waiting on the activities root.

It seems to be waiting for the Activity since the ActivityLifecycleMonitorRegistry still listens to the activity's callback.
That's because instead of activityScenario.close() we just destroy the activity.

Reopening because of the issue Splash activity happy flow taking long.
However removing milestone, since it's now lower priority

The issue seems to be related to https://github.com/android/android-test/issues/676
Since it actually hangs when the activityScenario.moveToState(Lifecycle.State.DESTROYED) / activityScenario.close() is called


Crash Unhandled exception windows

So I am developing a plugin a for a software and was trying to use filament api for graphics engine. I was able to build Suzanne using the filament static libs and include headers and Suzanne source code in visual studio 2017 and it runs fine in both release and debug builds. Then next step was to try to run suzanne code within the plugin code project but I am getting crashes so I am trying to debug it.
I am getting access violation reading location 0xFFFFFFFFFFFFFF when I try to set intensity on the ibl in the suzanne example code
 auto ibl = FilamentApp::get().getIBL()->getIndirectLight();         ibl->setIntensity(100000);
The mIntensity shows as "unable to read memory"  when I break and try to debug it in the IndirectLight.h.  First I thought it might be having problem casting to FIndirectLight using upcast but then If I comment out that IBL code then upcasting tcm.getinstance() runs fine without error.
I also had code to add two more Suzanne model with different default material like so:
filament::MaterialInstance* mi = FilamentApp::get().getDefaultMaterial()->createInstance();
		mi->setParameter("baseColor", RgbaType::LINEAR, LinearColorA{ 1, 1, 1, 1 });
		mi->setParameter("roughness", 0.01f);
		mi->setParameter("metallic", 1.0f);

I get the same unhandled exception error when it tries to createInstance().
I have made sure to add sdl2.dll and the envs(ibl) folder that has the ibl in the host application main directory so I think it should be able to find the ibl. Not sure what's going on as suzanne debug build project without the host application seems to work fine. Any idea what's going on ? Thanks for you help !

What's the host application and how are you initializing the engine? It's tough to debug this without seeing more of your code. A stack trace would also be helpful.

The host application is After effects. I am using the exact suzanne sample app code to make sure I can replicate things first as a plugin. So just like in FilamentApp like so : mFilamentApp->mEngine = Engine::create(config.backend);
![image]
You can see the call stack below:  (https://user-images.githubusercontent.com/36080456/50621860-d3c1e280-0ed6-11e9-9422-6af60a69c032.png)

After Effects calls plugins from at least 2 different threads. Are you initializing filament on the same thread you’re using to call setIntensity? Filament methods can only be called from a single thread.

I am calling filament code in DoClick() after effects PF_Event_DO_CLICK click event. I didn't realize doclick was being called by two separate thread. If that's the case then that's why the crash is happening.  Need to figure out how to call on the same thread in after effects.

Why do you think ae calls plugins from 2 different threads? Is it because there is "external code" in callstack between those two calls? Here is the filament suzanne app with static lib without the host application which runs completely fine but also has that "external code" in between those two calls .

I also looked up the after effects sdk and it only has two threads UI and Render thread. So anything on effects ui like click event should only be within the UI thread.

Actually I found out that the debug suzanne static lib build without host app also crashes on exit. Looks like the material gets destroyed before the instances according to comment. I remember the debug static build without host app once did crash exactly like the one in host app but after that it just crashes on exit now. There might be some problem with debug build.

debug suzanne static lib build without host app

I'm not sure what you mean by this. Do you mean the unmodified Suzanne demo? I'm able to run that in both Debug and Release without any crashes. (There was a crash upon exiting (#674), but I don't think that's related.)
In order to help I need to see a minimum code sample that reproduce the issue.

Yes it's slight modified Suzanne demo but it's using static libraries as opposed to the full source code.  Here is the link to the whole visual studio 2017 project that crashes on exit in debug build.
https://drive.google.com/file/d/14zvrZ52bmT34tsOQsSRJShMpXT6jG1ZL/view?usp=sharing
I am not sure if this crash is related to the after effects plugin project because the ultimate goal is to make is suzanne demo work inside an after effects plugin.

I am surprised but I am able to launch Suzanne demo code inside after effects with code below, but as soon as I add the commented portion of the code: setting ibl intensity or getting default material I crash with same error I mentioned in the first post.
Config config;
	config.title = "suzanne";
	// config.backend = Backend::VULKAN;
	config.iblDirectory = FilamentApp::getRootPath() + IBL_FOLDER;

	App app;
	auto setup = [config, &app](Engine* engine, View* view, Scene* scene) {
		auto& tcm = engine->getTransformManager();
		auto& rm = engine->getRenderableManager();
		auto& em = utils::EntityManager::get();

		// Create textures. The KTX bundles are freed by KtxUtility.
		auto albedo = new image::KtxBundle(TEXTURES_ALBEDO_S3TC_DATA, TEXTURES_ALBEDO_S3TC_SIZE);
		auto ao = new image::KtxBundle(TEXTURES_AO_DATA, TEXTURES_AO_SIZE);
		auto metallic = new image::KtxBundle(TEXTURES_METALLIC_DATA, TEXTURES_METALLIC_SIZE);
		auto normal = new image::KtxBundle(TEXTURES_NORMAL_DATA, TEXTURES_NORMAL_SIZE);
		auto roughness = new image::KtxBundle(TEXTURES_ROUGHNESS_DATA, TEXTURES_ROUGHNESS_SIZE);
		app.albedo = KtxUtility::createTexture(engine, albedo, true, false);
		app.ao = KtxUtility::createTexture(engine, ao, false, false);
		app.metallic = KtxUtility::createTexture(engine, metallic, false, false);
		app.normal = KtxUtility::createTexture(engine, normal, false, false);
		app.roughness = KtxUtility::createTexture(engine, roughness, false, false);
		TextureSampler sampler(TextureSampler::MinFilter::LINEAR_MIPMAP_LINEAR,
			TextureSampler::MagFilter::LINEAR);

		// Instantiate material.
		app.material = Material::Builder()
			.package(RESOURCES_TEXTUREDLIT_DATA, RESOURCES_TEXTUREDLIT_SIZE).build(*engine);
		app.materialInstance = app.material->createInstance();
		app.materialInstance->setParameter("albedo", app.albedo, sampler);
		app.materialInstance->setParameter("ao", app.ao, sampler);
		app.materialInstance->setParameter("metallic", app.metallic, sampler);
		app.materialInstance->setParameter("normal", app.normal, sampler);
		app.materialInstance->setParameter("roughness", app.roughness, sampler);

		view->setAntiAliasing(View::AntiAliasing::NONE);
		view->setSampleCount(32);
		view->setDepthPrepass(View::DepthPrepass::DISABLED);

		//auto ibl = FilamentApp::get().getIBL()->getIndirectLight();
		//ibl->setIntensity(100000);

		// Add geometry into the scene.
		app.mesh = MeshReader::loadMeshFromBuffer(engine, RESOURCES_SUZANNE_DATA, nullptr, nullptr,
			app.materialInstance);
		auto ti = tcm.getInstance(app.mesh.renderable);
		app.transform = mat4f{ mat3f(1), float3(0, 0, -4) } *tcm.getWorldTransform(ti);
		rm.setCastShadows(rm.getInstance(app.mesh.renderable), false);
		scene->addEntity(app.mesh.renderable);
		tcm.setTransform(ti, app.transform);

		/*

		filament::MaterialInstance* mi = FilamentApp::get().getDefaultMaterial()->createInstance();
		mi->setParameter("baseColor", RgbaType::LINEAR, LinearColorA{ 1, 1, 1, 1 });
		mi->setParameter("roughness", 0.01f);
		mi->setParameter("metallic", 1.0f);
		//mi->setParameter("emissive", RgbaType::LINEAR, LinearColorA{ 1, 1, 1, 10 });

		app.mesh2 = MeshReader::loadMeshFromBuffer(engine, RESOURCES_SUZANNE_DATA, nullptr, nullptr, mi);
		auto ti2 = tcm.getInstance(app.mesh2.renderable);
		app.transform2 = mat4f{ mat3f::rotate(-0.8, float3{ 0, 1, 0 }), float3(2.0, 0, -3) } *tcm.getWorldTransform(ti2);
		rm.setCastShadows(rm.getInstance(app.mesh2.renderable), false);
		scene->addEntity(app.mesh2.renderable);
		tcm.setTransform(ti2, app.transform2);

		filament::MaterialInstance* mi2 = FilamentApp::get().getDefaultMaterial()->createInstance();
		mi2->setParameter("baseColor", RgbaType::LINEAR, LinearColorA{ 0, 0, 0, 1 });
		mi2->setParameter("roughness", 0.01f);
		mi2->setParameter("metallic", 0.5f);
		mi2->setParameter("reflectance", 0.9f);

		app.mesh3 = MeshReader::loadMeshFromBuffer(engine, RESOURCES_SUZANNE_DATA, nullptr, nullptr, mi2);
		auto ti3 = tcm.getInstance(app.mesh3.renderable);
		app.transform3 = mat4f{ mat3f::rotate(0.8, float3{ 0, 1, 0 }), float3(-2.0, 0, -3) } *tcm.getWorldTransform(ti3);
		rm.setCastShadows(rm.getInstance(app.mesh3.renderable), false);
		scene->addEntity(app.mesh3.renderable);
		tcm.setTransform(ti3, app.transform3);
		*/

	};

	auto cleanup = [&app](Engine* engine, View*, Scene*) {
		Fence::waitAndDestroy(engine->createFence());
		engine->destroy(app.materialInstance);
		engine->destroy(app.mesh.renderable);
		engine->destroy(app.material);
		engine->destroy(app.albedo);
		engine->destroy(app.normal);
		engine->destroy(app.roughness);
		engine->destroy(app.metallic);
		engine->destroy(app.ao);
	};

	FilamentApp::get().run(config, setup, cleanup);

The crash at ibl->getIndirectLight() occurs because FilamentApp::get().getIBL() returns NULL. Change the code to:
auto ibl = FilamentApp::get().getIBL();
assert(ibl);             // <-- will crash here
auto indirectLight = ibl->getIndirectLight();
indirectLight->setIntensity(100000);
...

to see what I mean. This is because your app can't find the IBL. You need to check your working directory, IBL path, etc.
The error message upon exit,

reason: destroying material "aiDefaultMat" but 2 instances still alive".

occurs because you've created 2 new material instances (mi and mi2) but did not destroy them before exiting. To avoid this error, destroy them just like app.materialInstance is destroyed: engine->destroy(app.materialInstance).

I just tried your code and the ibl pointer is not null so the assert does not fail. I also checked the ibl path : C:\Program Files\Adobe\Adobe After Effects CC 2015\Support Files\envs\venetian_crossroads and I have ibl ktx files in that path
I see I need to manually delete everything I create.  Thanks.

Note that the message about undestroyed objects is more a warning. If you destroy the engine all resources will be cleaned up automatically. It's there to indicate a potential programming errros.

In the example project I uploaded it actually crashes not just a warning but this is not a big problem.
Crash on setting ibl params like intensity and rotation and when creating default material instance worries me. I made sure  the ibl is in the right path.  I also added the generated  folder that has resources/ textures and material in it to the host application directory. I am not sure if the generated folder is needed as  I thought all suzanne resources would get pulled from suzanne-resources.lib and common-resources.  The suzanne textures are rendering fine its the two default lit materials that I created crashes when creating instance: filament::MaterialInstance* mi = FilamentApp::get().getDefaultMaterial()->createInstance();

The default materials are not loaded from disk, they're compiled directly into filament.lib.
At this point you're able to run your modified standalone Suzanne demo successfully without crashing, correct? The 2 crashes (IBL / default material instance creation) only occur when you try to run Filament inside of an After Effects plugin?

That is correct.

It does not crash while creating engine material but it crashes further down the line when its rendering and trying to get the rotation on the indirect light.  The indirect light is corrupt anyways which we know from trying to set intensity. So why does the other filamentapp default material that has the different params crashes?

Could you try stepping in the IBL.cpp code (it’s part of the samples source code) when the app is initialized so we can understand why you’re getting an invalid IBL?

As you can see filament is finding the ibl and skybox ktx files.

It also looks like its building the IBL data structure correctly (at least there are no null pointers).

And that's the end of loading IBL

Here is the image where we are trying to upcast from IndirectLight to FIndirectLight while trying to set intensity. To the left is the standalone filament suzanne app and to the right is the after effects plugin. If you look at the upcast returned the left one has valid IndirectLight, mreflectionsMapHandle and mIrradianceMapHandle but the after effects one on the right has unable to read memory.

Stepping over after this step, left one steps fine but right one crashes

That's why I initially thought there was some problem upcasting. Not sure what's going on.

The issue isn't with upcast, it's with a corrupt filament::IndirectLight pointer. Note how the this pointer (0x3b24d...) inside of setIntensity differs from mIndirectLight (0x0000...) inside IBL::loadFromKtx.
I'm confused about the stack trace in your last screenshot. It seems like FilamentApp:run is calling out to After Effects handlers? What did you change inside of FilamentApp::run?

You are correct but it seems like the mIndirectLight pointer inside ibl is correct if you look at the one on the right of the image below but when we get indirect light from ibl ibl->getIndirectLight() which goes through the upcast we get an invalid pointer for IndirectLight. The non-zero numbers are in the pointer are front somehow. That's weird.
I haven't changed any code in FilamentApp::run as I am building against a static filament.lib. As you can see on the left part which is the standalone suzanne build that there is also SDL_main() code being called between FilamentApp::run and setting intensity code. I feel like it's because of the settupCallback() in FilamentApp::run.

Finally I figured it out! Looks like the sample-app.lib was corrupt, so instead I imported the sample app source code itself and removed the sample-app.lib and no crash on set intensity. Material was still crashing, so instead of getting default material from Filament app I created the material in the main code like this:
 app.mi1  = Material::Builder()
			.package(RESOURCES_AIDEFAULTMAT_DATA, RESOURCES_AIDEFAULTMAT_SIZE)
			.build(*engine)->createInstance();

Thank you Ben and Romain so much for your help. I really appreciate it !

I'm glad you figured it out! Let us know if you have more questions.


Add support for TestNG

Scott supports JUnit4 and 5, but It would be nice to support TestNG as well.
To achieve this, the system has to be extended in at least the following places:

This class is responsible to determine what methods should be instrumented to track behavior. This should be modified to mark TestNG methods as well.
The same class is responsible to determine what classes should be instrumented with integration to the test framework. For example in the case of JUnit4, it marks a class to be injected with a ReportingRule it the class contains a @Test method. Similarly to the first point, this should be augmented to handle TestNG code.
Finally, the instrumentation part of the code has to be extended to inject TestNG specific code to the tests (marked by the previous point) to handle failing test cases and print the report. See visitMethod and visitEnd in this class to see how it's handled for the JUnit4 Reporting Rule.

For more info about the architecture, please see the development guide.

Moved to the idea list in wiki.

mark testng methods in this class

Hi @geofflangenderfer,
Yes, TestDiscoveryMethodVisitor was renamed to DiscoveryMethodVisitor as part of an API stabilization when new configuration options were introduced. May I ask where did you bump into the old name? I'd be happy to clean up obsolete documentation.
Cheers,
Dávid

I was thinking about using scott with testng. This is one of the first roadblocks I ran into. I thought I would share my findings for the next person. Hopefully I have time at some point to look at this.


A11y_AzureDataStudio(Schema,Dacpac,Backup)_Restore Database Dialog_Restore Plan_AI4D: The table under heading "Restore Plan" has no name.

#A11yMAS; #A11yTCS; #A11y_ADS_Schema_Dacpac_Backup; #Azure Data Studio; #DesktopApp; #Win10;
Environment Details:
Application Name: Azure Data Studio
Application Version: 1.10.0-insider (user setup)
Commit: 1ff9a2ec4c7b88be01666bdd470bbbb4ab95716e
Date: 2019-08-09T07:49:00.254Z
VS Code 1.37.0
Electron: 4.2.7
Chrome: 69.0.3497.128
Node.js: 10.11.0
V8: 6.9.427.31-electron.0
OS: Windows_NT x64 10.0.18362
Additional Details:
Tools Name: Accessibility insight tool
MAS References: MAS4.1.2,MAS1.3.1
Repro Steps:

Launch Azure Data Studio application.
Connect to server with windows credentials.
Navigate to Connections from left menu.
Expand the server connected in step 2.
Right click an on prem database and select restore from Context menu.
Provide source & destination values.
Launch AI4D.
Verify that table present under Restore Plan section has name or not.

Actual:
The table under heading "Restore Plan" has no name present for it when the AI4D is hovered over it.
Same issue has been observed for Restore check box and Expiration Column option present under the same table. Refer Attached screenshot for more information.
Expected:
There should be an appropriate name present for the table that represents the information in the table.
Recommendations:
Refer below link which is repository of bug fixes code snippets: https://microsoft.sharepoint.com/teams/msenable/mas/pages/browse-fixes.aspx
User Impact:
Screen reader users will not understand/relate any information that has been announced from the table. Users will not be able to co relate the information.
MAS Reference:
MAS 4.1.2-https://microsoft.sharepoint.com/:w:/r/teams/msenable/_layouts/15/WopiFrame.aspx?sourcedoc={248054a6-5e68-4771-9e1e-242fb5025730}
MAS 1.3.1- https://microsoft.sharepoint.com/:w:/r/teams/msenable/_layouts/15/WopiFrame.aspx?sourcedoc={54f28d1f-a2d1-4dcd-84e1-5c9b87e8aba4}
Attachment Reference:

I have verified this issue on,
Version: 1.12.0-insider (user setup)
Commit: bca7c8e6bda229d2d71415d1b9e941dcce387db0
Date: 2019-09-30T08:16:25.292Z
VS Code: 1.38.0
Electron: 6.0.9
Chrome: 76.0.3809.146
Node.js: 12.4.0
V8: 7.6.303.31-electron.0
OS: Windows_NT x64 10.0.18362
and observed that this issue has been fixed. Hence I am closing this issue.
Attachment:


Ability to inject build config, auto-imports, global funcs etc. in another Node env (Storybook, Jest)

Describe the feature
Currently if you want to use Nuxt with Storybook or Jest you can't really do it unless you introduce hacks that replicate global functions and auto-imported component behaviors which is not only very time consuming, but as I already mentioned - very hacky.
Not just that, but the Vite build config is encapsulated pretty deeply inside Nuxt internals so it's also not possible to re-use the same build config for other tools like Storybook.
Extracting the build config
I did some debugging and found out that you can use loadNuxt() from @nuxt/kit to initialize a Nuxt instance, subscribe to the "vite:extend" hook which receives the final vite config and invoke bundle() from @nuxt/vite-builder, which will then build the final vite config and put it through the aforementioned hook.
You have to throw an error in that hook to kill the actual bundling process, but at least this way you can actually access the vite config from an external script.
Actually running this logic from within the Storybook builder is practically impossible, however, cause there's some transpilation going on (by Storybook/Esbuild?) which does something that breaks various imports in @nuxt/vite-builder/@nuxt/kit.
Errors like:
Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: No "exports" main defined in<EMAIL_ADDRESS>
or if you downgrade estree-walker to v2 and get past that error, then you get the next one:
Error: Package subpath './transform' is not defined by "exports" in ./node_modules/unctx/package.json

(unctx/package.json actually does define a ./transform sub-path, but I think this happens cause storybook/esbuild convert all ESM modules to CJS for some reason)
I don't know how to solve these issues properly, but it's clear that it's possible to get the Vite config out and thus it shouldn't be too hard to implement.
Setting up a Node.js/Vue environment to be like the Nuxt one
Haven't done much investigation in this area, but this would involve:

Setting up global directives & components (auto-imports)
Setting up global functions

Maybe one of the Nuxt packages could export a function that sets this up in any kind of environment, whether its Jest or Storybook?
Additional information

[X] Would you be willing to help implement this feature?
[X] Could this feature be implemented as a module?

Final checks

[X] Read the contribution guide.
[X] Check existing discussions and issues.

This is definitely somethiing I'd love to help set up and get working for anyone who is working on an integration like Storybook, Jest, Histoire, etc.
You can see the approach I'm currently using in https://github.com/danielroe/nuxt-vitest.

@danielroe Didn't look through it very thoroughly, but it looks like you're doing the inverse of what I was attempting - instead of injecting Nuxt into X (Storybook/Vitest), you're injecting X into Nuxt. That does seem like a better idea, cause then you don't actually need to mock anything as everything's running inside a real Nuxt environment.
Not sure how that would work for Storybook, however, considering that we want the Storybook app frame to be its own app and only the preview/canvas iframe to be ran with Nuxt 🤔

No, it does inject Nuxt into X. We only start Nuxt briefly to grab the configuration.

No, it does inject Nuxt into X. We only start Nuxt briefly to grab the configuration.

Ah, alright I'll have a deeper look into it at some point

Hi! I've recently been working on integrating Storybook with Nuxt as well and came up with this module: https://github.com/yassilah/nuxt-storybook It's very much wip but it basically just merges the Nuxt and Storybook vite configs. The only thing of course is that you don't have access to the actual Nuxt intance (e.g. app.config, runtime config)...

Let's track in https://github.com/nuxt/nuxt/issues/14534.
We currently do this in https://github.com/danielroe/nuxt-vitest and the new storybook module does similarly.


A question about V5 (Not a problem related question)

I heard Style2PaintsV5 can help users draw but I’m wondering how. I always dreamed about a specific program doing this kind of thing. So would V5 like redraw the image based from user input?

https://github.com/youyuge34/PI-REC
This repo may help you, but still in early research stage.


Save Error: Object reference not set to an instance of an object

Hello, I'm running into an error when save as excel file.
file attached.
Thanks.
BR,
Rome.
works.xlsx

Thanks. Fixed.


[Bug]: UnicodeEncodeError: 'charmap' codec can't encode character

Is there an existing issue for the same bug?

[X] I have checked the existing issues.

Branch name
main
Commit ID
3ae8a87
Other environment information
No response
Actual behavior
Ran into this issue:
PS C:\PYTHON\ragflow> python .\deepdoc\vision\t_ocr.py --inputs "C:\TMP\PDF_Test\Old_file.pdf"
[HUQIE]:Build default trie
[HUQIE]:Build trie C:\PYTHON\ragflow\rag/res\huqie.txt
[HUQIE]:Faild to build trie,  C:\PYTHON\ragflow\rag/res\huqie.txt 'charmap' codec can't decode byte 0x9d in position 20: character maps to <undefined>
  File "C:\PYTHON\ragflow\deepdoc\vision\t_ocr.py", line 56, in <module>
    main(args)
  File "C:\PYTHON\ragflow\deepdoc\vision\t_ocr.py", line 45, in main
    f.write("\n".join([o["text"] for o in bxs]))
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.11_3.11.2544.0_x64__qbz5n2kfra8p0\Lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
UnicodeEncodeError: 'charmap' codec can't encode character '\uff16' in position 581: character maps to <undefined>

when using this old PDF:
https://doi.org/10.1021/ie00095a027
Expected behavior
No response
Steps to reproduce
adding

encoding='utf-8' to the open function fixed it for me:

with open(outputs\[i] + ".txt", "w+", encoding='utf-8') as f:

Additional information
ragflow is awesome! THX guys!

Thanks for following.

@PiMaV, setting the below environment variables on system level (not inside python) should solve the issue:
PYTHONIOENCODING=utf-8
PYTHONUTF8=1
Like this if you have a windows machine:

related issue from another repo: https://github.com/getomni-ai/zerox/issues/47


Use enumerate

They both written in C, so no performance difference (I hope so).

Oh, I didn't know enumerate supports offsets. Thanks!


Icon location

Love the splash screen, thank you.
My LaunchScreen.xib has a 80x80 logo image set centered with X/Y constrains. When I run my app, my LaunchScreen is displayed with my logo image centered properly.
However, that being said, the splash screen logo (also set to 80x80) is displayed about 10/15 pixels lower. Is there any way we can add padding to the splash screen logo so as to align both the splash screen logo and the LaunchScreen logo?
This may be because I have navigation items set.
Thanks.

Hi @saren-p. I think its definitely because your navigation bar.
You can take a look at #6. There are a couple of good options for you to try there.
Let me know how it goes 👍

Duplicated of #6


Can we remove the white option in .jshintrc?

The white option forces a space after function and before (). This is not an idiomatic standard and I think it should be removed.

I think this issue is obsolete following our implementation of ESLint.

It's a setting available in ESLint, but yup, disallowed in the eslint file that was migrated into standard https://github.com/cfpb/front-end/blob/master/.eslintrc#L478


Responsibility of visitMethod() method in XmlClass.java is not clear and its not well documented

I'm working on LORM metric implementation, and as part of my solution I have to implement a MethodVisitor and integrate it to visitMethod() method in XmlClass.java which is currently implemented as follow:
final Directives dirs = new Directives();
        if ((access & Opcodes.ACC_SYNTHETIC) != Opcodes.ACC_SYNTHETIC) {
            String visibility = "default";
            if ((access & Opcodes.ACC_PUBLIC) == Opcodes.ACC_PUBLIC) {
                visibility = "public";
            } else if (
                    (access & Opcodes.ACC_PROTECTED) == Opcodes.ACC_PROTECTED) {
                visibility = "protected";
            } else if ((access & Opcodes.ACC_PRIVATE) == Opcodes.ACC_PRIVATE) {
                visibility = "private";
            }
            dirs.add("method")
                    .attr("name", mtd)
                    .attr("desc", desc)
                    .attr("ctor", "<init>".equals(mtd) || "<clinit>".equals(mtd))
                    .attr("static", (access & Opcodes.ACC_STATIC) == Opcodes.ACC_STATIC)
                    .attr("abstract", (access & Opcodes.ACC_ABSTRACT) == Opcodes.ACC_ABSTRACT)
                    .attr("public", (access & Opcodes.ACC_PUBLIC) == Opcodes.ACC_PUBLIC)
                    .attr("visibility", visibility)
                    .attr("bridge", (access & Opcodes.ACC_BRIDGE) == Opcodes.ACC_BRIDGE)
                    .append(new TypesOf(desc));
            this.methods.add(dirs);
        }
        return new OpsOf(dirs, super.visitMethod(access, mtd, desc, signature, exceptions));

but I found that the current implementation is very complex and not clean, and that this method has a lot of responsibilities that are not well documented beside that there is no clean way to add another MethodVisitor which would be responsible for concepts extraction.
So I think that the design of this method should be revisited and each part should be refactored to its own MethodVisitor and that this visitMethod() should only responsible for aggregating those parts.

@paulodamaso/z please, pay attention to this issue


[Chery-pick][branch-2.3][BugFix] Fix main branch version rollback failed when fe restarting b…

What type of PR is this：

[x] BugFix
[ ] Feature
[ ] Enhancement
[ ] Refactor
[ ] UT
[ ] Doc
[ ] Tool

Which issues of this PR fixes ：

Fixes #12871
when main version create hudi catalog rollback to 2.3version , fe can not restart.
Problem Summary(Required) ：

Checklist:

[ ] I have added test cases for my bug fix or my new feature
[ ] This pr will affect users' behaviors
[ ] This pr needs user documentation (for new or modified features or behaviors)

[ ] I have added documentation for my new feature or new function

run starrocks_fe_unittest

run starrocks_tscancode


Implement CryptoInputStream and CryptoOutputStream supports any AES m…

…odes

Test needs to be addressed in separate PR.

Thanks @winningsix for the comments on the formats and naming!

LGTM. There are still some some tailing space. We can remove them when committed. Thanks @jerrychenhf for the contribution.

Is there any way in Eclipse be able to list the tailing space?

And by the way, does the tailing space the a strict format style enforced by Hadoop or other projects?
I think the default eclipse format style will also, add trailing space lines when enter to change the lines.

Remove all the trailing space.
Though, I am still thinking that the some trailing space in empty lines in code blocks are actually valid and natually. Remove all the trailing space may not a universal rule. Hadoop code still has a lot of such cases, for example, the empty line has spaces appended to form the same indent within the same block. Eclipse automatically provide this when press ENTER in a block.
public int readAndProcess()
throws WrappedRpcServerException, IOException, InterruptedException {
while (true) {
...
    if (!connectionHeaderRead) {

Hi @jerrychenhf
Thank you for the update.
I use Intellij to remove the tailing space automatically. I find a solution for Eclipse in the stackoverflow. You can have a try.
For Spark, there's a script to check the tailing space and other code style under the path dev/scalastyle. Besides that when we use reviewboard to do the code review, it will highlight the tailing white space in red color.
If I understand well, you may mean the 5th answer in this page.  If Hadoop accepts the tailing white space, I think we could also follow it since different community can have his own preference.

Merged to master.


SSR components with v-html is remounted when page is hydrated

Version
2.6.10
Reproduction link
https://codesandbox.io/s/vue-ssr-raw-iframe-rerender-l9xni
Steps to reproduce
Create a minimal ssr app, with a component that uses v-html, and in the v-html content add an iframe.
Enable break on subtree modifications in chrome on the body element to see that the content is re-rendered.
What is expected?
Iframe is loaded once in the network panel
What is actually happening?
Iframe is loaded when the page loads and before hydration happens, and again after page is hydrated.

Changing the text on mount triggers a rerender and sets the innerHTML again, triggering the new request (I only get two requests).

@posva My suggestion is that if the data doesn't change between ssr render and page load's hydration, it should not re set the innerHTML of the bound element

Isolate the v-html in a component so it doesn't re render

The component, in this case an iframe, re-renders when no changes to component data are made. This results in 2 requests for the same iframe url being made. One on SSR, one on mount.


ChunkedEncodingError: Connection broken

Hi,
When I query by using %%kql code, I have the following error message:
ChunkedEncodingError: ("Connection broken: ConnectionResetError(10054, 'An existing connection was forcibly closed by the remote host', None, 10054, None)", ConnectionResetError(10054, 'An existing connection was forcibly closed by the remote host', None, 10054, None))
But when I limit the results in few rows,e.g.,
| limit 2
The execution of code is success.
Is this error caused by Kusto side restriction? Anything that I can do in my notebook?

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: f497838f-e309-f36a-43af-6d58b5e6b1e9
Version Independent ID: 0cf67eee-4f79-9b23-7ec7-2ed347d68cb4
Content: Use a Jupyter Notebook to analyze data in Azure Data Explorer
Content Source: data-explorer/kqlmagic.md
Service: data-explorer
GitHub Login: @orspod
Microsoft Alias: orspodek

@slowlyswimming Thanks for the question. Github forum is dedicated for docs related issues. For any technical queries or clarifications, we encourage to utilise Microsoft Q & A platform. Kindly raise your query on Microsoft Q&A Platform

Thanks @ShaikMaheer-MSFT for sharing me the correct place. I will close this ask and post there.


chore: Set up a CI/CD pipeline with CircleCI

Follow the CircleCI configuration for calendar-dates/.circleci/config.yml
Make sure to add "test" configuration so the test is run for each PR.
And also constraint the size <= 1kb.

not stale

not stale

not stale


Fix some router security and code style issues

Follow the current routing scopes, the notification belongs to a course, they will naturally pipe through authentication checks, course checks sand staff checks.
Separate admin routes from student/staff routes.
Clean up unnecessary comments and use query styles in the piping fashion (which aligns with the current code base).
Try to use Logger instead of IO for logging.

Closing as per offline discussion.


Specify conda channel for dependencies (osqp and lapack)

It would be useful to automatically install

lapack from the conda-forge channel
osqp from the oxfordcontrol anaconda channel

when we execute the install command:
conda install -c cvxgrp cvxpy
I am not sure if the users already do it automatically or if they have to add channels separately. It seems that for the lapack package they have to run a separate command.
@mcg1969 is there a way to specify the dependencies' channels from the conda recipe?
This is related to https://github.com/conda/conda/issues/988.

No, the channels cannot be specified within the conda recipe (meta.yaml) itself. You could add the channels to the CI scripts though.
However, there needs to be another solution here. It is not good practice to depend on a particular channel's package like this. That is to say, you really don't want to force someone to add conda-forge to their channel list just to use your package. You need to find a way to get lapack more universally. Perhaps from scipy?

In CI scripts we can add the oxfordcontrol channel. However for everyday users, they should be able to run conda install -c cvxgrp cvxpy and not get an outdated or unsupported version of one of cvxpy's dependencies (OSQP being the one I'm worried about).
@bstellato if the conda-forge version of OSQP will no longer be updated, then we can simply update cvxpy's minimum version of OSQP to something higher than can be found on conda-forge. It looks like setting osqp >= 0.4.1 would do the trick. That specification would need to be made in the conda recipe (https://github.com/cvxgrp/cvxpy/blob/master/conda-recipe/meta.yaml#L31), and setup.py (https://github.com/cvxgrp/cvxpy/blob/master/setup.py#L39).

The conda recipe will be updated at some point but we are not supporting it ourselves. We are supporting our version https://github.com/oxfordcontrol/osqp-recipes for which @mcg1969 helped a lot to simplify the build and deploy scripts.

I see.
@SteveDiamond @akshayka what do we need the lapack dependency for?

Lapack is used in SCS conic projections I think

The Anaconda installation instructions now say to add the oxfordcontrol channel.


Expose more Ninja-related build options

I've been testing out the ninja=yes build option (introduced in #89452) and found myself wanting a little bit more control out of it.
Instead of it always generating a build.ninja file regardless of build options, forcing me to run SCons whenever I want to switch said build options, it would be nice if you could have multiple Ninja files. As it turns out, this is already supported by SCons through the NINJA_FILE_NAME construction variable, so this PR adds a build option (ninja_file) to set that variable.
I also noticed that the setting of the disable_execute_ninja option that's currently happening does not seem to work at all for me (on Windows with SCons 4.8.0). Ninja will always run after SCons has run, as opposed to just emitting the Ninja file and stopping. This is contrary to what the documentation states, but the documentation also mentions this other construction variable called NINJA_DISABLE_AUTO_RUN that serves the same purpose. That one does work for me, for some reason, so this PR switches to use that instead. I also threw in a build option to control it, rather than effectively hardcoding it to false like before, which seemed like it might be useful to anyone who wants to use Ninja but doesn't want to run it separately all the time.
I should also mention that I am relatively new to SCons, so I could be misunderstanding how these construction environments/variables work, or whether it's even appropriate to be setting them like this. If there's some way of injecting these NINJA_FILE_NAME and NINJA_DISABLE_AUTO_RUN construction variables from the system environment I'd love to know.

I'd be curious to hear your take on this, @Riteo, given that you authored the original ninja option.

Yeah, that disable_execute_ninja part is weird. On 4.6.0 it worked fine. I just updated to your version and it now does not work. I wonder if that's a bug :/

See #94993 and #94805.

See #94993 and #94805.

I actually tried from HEAD with this change already in and it does not work still :gdsweat:

Yeah I meant this change might have broken the behavior, despite being suggested by a SCons upstream maintainer.

Thanks!