Science-Blog-5: wrong number of warned individuals

Where to find the issue

Science-Blog-5
Describe the issue

In Science-Blog-5 is stated: "... it can be estimated that for each individual providing a warning, 19 individuals receive a red warning."
Actually the number of people who will be warned must be smaller.
As explained in "2.2 Purpose 2 – Warning others" data is taken from the CWA data donation. Here however, often one device seems to report more than once a "red risk".
For example: there are 29.663.951 "red risk" warnings for June/July 2022 reported by CWA Dashboard. (Just summing up ppa_risk_red_daily from "Warnings received by data donors".) This exceeds the number of CWA users and still doesn't take into account, that only about half of the users participate in data donation.
Suggested change

The number of warned individuals in Science-Blog-5 should be reevaluated and reconsidered.
Maybe the CWA data donation can be fixed, so that each "red warning" is only reported once.

Internal Tracking ID: EXPOSUREAPP-14099

Hi @Mtagxx, thanks for reporting this potential inconsistency! Please give us some time to double-check the 19 individuals figure.
Regarding the 29 million "red risk" warnings in June/July 2022: please note that this figure does not represent unique users/devices. If I'm not mistaken, reported number for a given day represents how many devices have received a new "red risk" warning on that day, meaning that on the previous day¹, the warning was not "red risk". So the sum of these numbers may well exceed the number of CWA users. I would only be concerned if the reported number of a single day exceeded the number of CWA users.
Anyway, we'll also double-check this along with the 19 individuals and get back to you!
¹ technically, it's not "previous day" but "previous time the device reported PPA data". Given the large number of devices that report PPA data and due to several retry-mechanisms on the same day if reporting PPA data failed the first time on a given day, we approximate it to "previous day".

Hi @mlenkeit,
Assuming that there are about 30 million CWA users and half of them participate in data donation then there are about 15 millions who report data. During March 2022 there were 26 million red warnings reported by data donors, which would mean that every app showed a red warning 1.7 times on average during March. During April 2022 there were 17.5 million red warnings reported. So again every app show a red warning this month again. And so on ...
That doesn't look right to me. So thanks, if you'll look into that!

Hi @Mtagxx, the "19 individuals" figure is still being checked but we can already provide an update on how exactly the "red risk" warnings are calculated:
Semantically, it represents devices that have received a new "red risk" warning that day. That's devices where the risk level is reported as "red risk" (and displayed as a red card) and the date that's displayed on the card (i.e. the most recent date) is newer compared to the previous time the device sent data (usually the previous day, see previous post from me). This is reported as most recent date changed (yes/no).
Please find an example and some more technical details below.
In March 2022, the 7-day-incidence was at an all-time high in Germany with figures reported close to 2.000 (cf. https://www.rki.de/pandemieradar). Accordingly, we saw spikes in CWA in the "Sharing behavior" figure and in the "Warnings received by data donors" figure as you can see in the CWA Dashboard, as well as in the number of Diagnosis Keys that were being shared and published to warn other users. In April 2022, the 7-day-incidence was declining but still at a rather high level.
I hope this helps to explain the numbers that you see on the CWA Dashboard.
If not, could you please elaborate why the ~26 million "red risk" warnings for March and ~17.5 million for April don't "look right" to you?
Example
Let's take a look at an example and assume we look at a timeframe of Day 1 to Day 5.

Device A

Day 1 - CWA shows "green risk" card without encounter (i.e. no warning)
The device reports risk_level=green and most_recent_date_changed=no.

Day 2 - CWA shows a "red risk" card (i.e. warning) with the most recent encounter on Day 1.
The device reports risk_level=red and most_recent_date_changed=yes. ➡ counted

Day 3 to 5 - CWA continues to show the "red risk" card from Day 2.
The device reports risk_level=red and most_recent_date_changed=no on each of these days.

This device would be counted towards "Warnings received by data donors" with "red risk" only on Day 2

Device B

Day 1 - CWA shows "green risk" card without encounter (i.e. no warning)
The device reports risk_level=green and most_recent_date_changed=no.

Day 2 - CWA shows a "red risk" card (i.e. warning) with the most recent encounter on Day 1.
The device reports risk_level=red and most_recent_date_changed=yes. ➡ counted

Day 3 - CWA continues to show the "red risk" card from Day 2.
The device reports risk_level=red and most_recent_date_changed=no.

Day 4 - CWA shows a "red risk" card (i.e. warning) with the most recent encounter on Day 3.
The device reports risk_level=red and most_recent_date_changed=yes. ➡ counted

Day 5 - CWA continues to show the "red risk" card from Day 4.
Behind the scenes, it received another warning about an encounter on Day 2. This is displayed in the Contact Journal, but not on the home screen, because although it's a new warning, it refers to a date before the most recent "high risk" encounter (i.e. "red").
The device reports risk_level=red and most_recent_date_changed=no.

This device would be counted towards "Warnings received by data donors" with "red risk" on Day 2 and on Day 4.

In total, the statistics would for "Warnings received by data donors" would show a count of "red risk" reported for Day 2 as 2 for for Day 4 as 1. On the other days, it would be zero.
Technical Details
In case you're interested, the database query for calculating the "red risk" warnings is the following SQL statement:
SELECT submitted_at, count(*) as "red_risk_count" FROM exposure_risk_metadata WHERE risk_level = 3 and "most_recent_date_changed" ='t' GROUP BY submitted_at ORDER BY submitted_at;

Hi @mlenkeit,
thank you for your elaborate answers which answers all of my questions! I Your example "Device B" shows, that the number of "red warnings" can be higher than the number of warned individuals and that there is no obvious relation between both numbers. That's what I wanted to remark to Science-Blog-5.

@Mtagxx I’m glad to hear that the examples helped to explain the numbers. With this information, do you still have reason to assume that the number of 19 individuals who receive a red warning is too high and “must be smaller”?
If yes, could you elaborate why? If not, you can close this issue with the Close issue button below.

@mlenkeit, well I guess I don't quite understand your question. The assumption in Science-Blog-5 is, that the number of red warnings equals the number of individuals with red warning. In my opinion this is not quite correct. In your example you showed how 2 devices/individuals produce a total of 3 red warnings, which is a factor of 1.5. I suspected that this factor is in reality something like 3 or 4. As long as in reality the factor is small, let's say below 2, than it is not worth to spend much more time on discussing this topic any further and you just may close this issue.

@Mtagxx
You might also be interested in Was sagt eine rote Warnung bei hohen Inzidenzen noch aus? published today, Nov 30, 2022.

Hi @MikeMcC399, very interesting! Thanks for the hint!

@Mtagxx

Thanks for the hint!

Would you like to consider closing this issue? It seems like the discussion is now finished or do you think that the article "Science Blog 5" needs to be changed?

How many active users does the Corona-Warn-App have?  (DE)

Closing this issue now as the questions have been answered and there has been no further activity. Thanks to everyone for participating.


Mui-Series Safari 11 Compatibility

Any mui-series animations seem to fail in Safari 11, including the Motion UI landing page

Confirmed as well. Confirmed with a phone that was running io10 where the animations worked and then upgraded to 11 and it stopped working. Its just blank now.

Yes, this is pretty annoying.

Will motion-ui be further developped by zurb? Last code commits are 2 years old. Will this Safari problem be solved in future?

Seems no longer maintained, which is a bummer because there is no clear cross-compatibility for using other animation frameworks like animate.css or anime.js. Seems that they called it a day since October 2016.

I am able to reproduce it. See https://codepen.io/ncoden/pen/wmNvWG

So this comes at least from a bug with animation-play-state breaking the animation in Safari. But it works after a refresh...
There is probably an other bug as on the demo page the animation does not run after a refresh. However there is the same weird effect in the developer console as in the bug codepen: when they are animated, ::before and ::after pseudo-elements appear and disappear from the elements and make them vibrating (yeah, weird).
A solution would be to use the same approach as animate.css and only apply animation-delay when the animation should run.

benefits: this works on all browsers.
downsides: once started, the animation is never "paused" but runs in background.

So this comes at least from a bug with animation-play-state breaking the animation in Safari. But it works after a refresh...
There is probably an other bug as on the demo page the animation does not run after a refresh. However there is the same weird effect in the developer console as in the bug codepen: when they are animated, ::before and ::after pseudo-elements appear and disappear from the elements and make them vibrating (yeah, weird).
A solution would be to use the same approach as animate.css and only apply animation-delay when the animation should run.

benefits: this works on all browsers.
downsides: once started, the animation is never "paused" but runs in background.

Poke @eltonmesquita @daneden @WarenGonzagaOfficial What do you think ? Were you aware of this bug at animate.css ?

See also: http://elrumordelaluz.github.io/csshake/#1
shake-freeze does not work in Safari. Animation can be paused later without problem, but they will never start when they are paused on page load. poke
@elrumordelaluz

Hello there, I am not aware on this since I am not user of any apple product... but recently I made a major upadate on animate.css which I add delays on it as part of class options.

I've tested the minimalist codepen (https://codepen.io/ncoden/pen/QmYLzy) on iPhone 6 with

iOS 9.3
iOS 10.2
iOS 11.3

In each case the animation can't be paused and gets somehow reset on click (depending on when you click).
Seems this bug exists for quite a long time: I've found some post abt iOS 8
https://stackoverflow.com/questions/27362216/webkit-animation-play-state-not-working-on-ios-8-1-probably-lower-too
Afterwards I've tested the 'Series Animations' section of this page on the devices
https://zurb.com/playground/motion-ui#animationDemo

iOS 9.3 animation runs as expected
iOS 10.2 animation doesn't run but only toggles from invisible to visible on button click
iOS 11.3 animation doesn't run and doesn't become visible on button click

@ncoden why exactly did you test animation-play-state in your codepen?
I didn't find it in the motion-ui.css. Seems to be a general iOS problem.

A solution would be to use the same approach as animate.css and only apply animation-delay when the animation should run.

What do you have in mind here? 1000s delay to keep it initially running and set it to 0s once the animation is actually supposed to run or do you mean sth else?

why exactly did you test animation-play-state in your codepen?

animation-play-state is used my mui-series to play it only with .is-animating set.

With animation-play-state: paused set, the animation does not start on macOS Safari 11, even with animation-play-state: running defined later.
Without animation-play-state: paused set, the animation plays well on macOs Safari 11.

What do you have in mind here?

Sorry, I meant animation-duration, defined only when the animation should run.

@SassNinja

why exactly did you test animation-play-state in your codepen?

animation-play-state is used my mui-series to play it only with .is-animating set.

With animation-play-state: paused set, the animation does not start on macOS Safari 11, even with animation-play-state: running defined later.
Without animation-play-state: paused set, the animation plays well on macOs Safari 11.

What do you have in mind here?

Sorry, I meant animation-duration, defined only when the animation should run.

With animation-play-state: paused set, the animation does not start on macOS Safari 11, even with animation-play-state: running defined later.

So your codepen https://codepen.io/ncoden/pen/QmYLzy doesn't work for you on macOS Safari 11?
For me it does! I just tested on Safari 11.0.2 on macOS High Sierra and the animation works as expected. Initially paused and running after click.

Sorry, I meant animation-duration, defined only when the animation should run.

Alright, but anyway similar to what I imagined regarding animation-delay.
So you mean setting initially a huge duration (instead of paused) and setting it to reasonable value  on click (instead of running), right?
.animation {
	animation-duration: 5000s;
}
.animation.is-animating {
	animation-duration: 5s;
}

If that's what you're talking about I'm afraid it's not a good solution because it's a hard reset of the animation instead of pause.
But unfortunately I don't know a good solution either – it's simply missing / buggy feature support of iOS.

Did you opened the debug mode in a new window ? The animation works when embeded in an inframe or after refreshing the page.

Strange it also works for me in debug mode – no difference.

It's the way others animation frameworks works: applying animation-duration or animation-name only when the animation should run. This either reset the animation or let it play in the background. But it's the only solution I found to make it works in Safari 11.

I'm afraid I haven't got it yet.
If I change the codepen as described in your code example it doesn't work in Safari 11 any more (in debug mode). Precisely I can start the animation by clicking the button but I'm not able to stop it with further clicks.
Just to be sure we're talking about the same thing.
Is this what you mean?
https://codepen.io/KaiTheGreat/pen/YLZqWO

Strange it also works for me in debug mode – no difference.

Make sure to open the Debug mode in a new Safari window, without url opened before. Before refresh, animation does not start. After refresh, animation works well.
See:

Also:

There is probably an other bug as on the demo page the animation does not run after a refresh. However there is the same weird effect in the developer console as in the bug codepen: when they are animated, ::before and ::after pseudo-elements appear and disappear from the elements and make them vibrating (yeah, weird).

Is this what you mean?

See:

With the "Duration" solution
Based on CSShack
Based on animate.css

Make sure to open the Debug mode in a new Safari window, without url opened before. Before refresh, animation does not start. After refresh, animation works well.

Really odd behavior (why does it work after page refresh?!) but I was able to reproduce by following your steps.

See:

With the "Duration" solution
Based on CSShack
Based on animate.css

Thanks for the pens!
I did fork them all (unfortunately I don't have a pro account) and have tested them in debug mode:

"Duration" solution works
CSShack doesn't work (due to pause/running)
animate.css works

So the duration solution seems indeed to be the best/only cross browser solution.
However is has the downside that the animation gets stopped/reset immediately instead of pausing it.
But since it's more important to have a working animation in all browser that can't be really paused instead of having an animation that can be paused but only works in certain browsers, I would go with the duration solution and add a clear note in the release notes (breaking change).
What do you think?

What do you think?

I agree. I prefer a little 🏠 over a 🏰 that collapse on the first rain. I hoped you'll come with an awesome magic CSS fix but it seems this just cannot be fixed.
I'm still not sure about one thing: should we change the current mui-series paused behavior to ensure a maximum compatibility and introduce a downside, or should we split that into 2 features like "reset" (works everywhere) and "pause" (doesn't work on Safari) ? It may be a stupid question because people generally expect web features to work on all browsers (I'm looking at you Google).

I'll go for a mixed approach: making "reset" the default behavior when .is-animated is removed, and add some new modifiers to make the animation "pause" instead.
So we favour a large compatibility but still allow to use the old behavior.

I hoped you'll come with an awesome magic CSS fix but it seems this just cannot be fixed.

Right, there seems to be no real alternative to animation-play-state: paused.
So unfortunately no magic this time.

I'll go for a mixed approach: making "reset" the default behavior when .is-animated is removed, and add some new modifiers to make the animation "pause" instead.

That sounds as the best solution to me.
Default working in all browsers and advanced feature with note in the docs that it's not supported in Safari.

Ok I got this working with a way more complicated workaround:

Apply the first frame properties to the element (so it works like animation-fill-mode: both)
Set animation-name only when the animation play

The downside is the same: the animation cannot be paused but only reset.

I'm late for the party but here are my 2 cents on the issue:
First of all, I'm not aware of the MUI code and never used it so I might be a bit off.
If this is a breaking issue only on one version of one browser, I don't think that changing the default behaviour is a good idea. I think a better solution would be to have some big warnings on the docs about it and how to avoid it, maybe add a optional helper class/mixin/whatever to deal with the issue. If things are critical treat this in the js side with UA sniffing, which usually is considered bad but in a case like this is one of the best solutions.
Most importantly, filling a bug on the browser's issue tracker would be the way to go.
Anyway, those are just my - maybe out of context - thoughts.

If this is a breaking issue only on one version of one browser, I don't think that changing the default behaviour is a good idea.
-- @eltonmesquita

The bug is present on all macOS Safari versions I tested (8, 9, 11...), including the latest. So it affects something like 2% of our users. Latest Safari version is in our compatibility list (last 2 versions) and the usage is high enough to consider it in a consistent API across browsers.
Also, most often, the animation is started and never paused. IMHO, dropping the pause behavior by default will not have much impact and it can still be recovered for the animations that require it.
With the UA sniffing to switch between the two system, animations would work on all browsers, and would be pausable on all browsers but macOS Safari. So this is the best solution but require to add some JS to Motion UI (which is CSS only). Without the JS included we still need to decide what we want to preserve: the pause behavior or the Safari compatibility.

Most importantly, filling a bug on the browser's issue tracker would be the way to go.

You're right.

Actually I think I found a way better fix:
Safari supports animation-play-state and animation-fill-mode but bugs and never  start the animation when animation-play-state: paused is set by default. If animation-play-state: paused is set later, Safari should pause the animation like others browsers.
So we could have the following behavior:

At first no animation-name is set and the first frame properties are applied. So it looks like the animation is paused at the first frame.
Start the animation with .is-animating which set animation-name. So the animation start.
Pause the animation with .is-paused which se animation-play-state: paused. So the animation is paused (on all browsers).
Restart the animation by removing .is-paused
Reset the animation by removing .is-animating

✅ No JS required
✅ No sniffing of browser-specific code
✅ Pausable animations on all browsers
I'll make some tests and open a PR. I hope it will work as like imagined it.

I'll make some tests and open a PR. I hope it will work as like imagined it.

It works. Play, pause and reset is now availaible on all browsers. See https://github.com/zurb/motion-ui/pull/108


Handling multiple forms in one step

Is there a proper way to handle multiple forms in one step in a wizard, e.g. MultipleFormWizardView, which would accept a sublist of forms for each step. Was this considered an additional feature in the future?

Perhaps not the best solution, but currently I am working on a project where I need to combine several forms into one form. Here is my solutions:
class AggregateForm(forms.Form):
    """
    """

    template_name = "aggregate_form.html"

    # extra field to accecp this combination of forms
    confirm_actions = forms.BooleanField(
        label="Confirm these actions",
        required=False,
        initial=True,
    )

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        initial = kwargs.get("initial")

        def update_widgets(name, form, template=None, extras=None):
            if extras is None:
                extras = {}

            new_form = form(prefix=self.prefix, initial=initial[f"{name}_data"], **extras)
            if template:
                new_form.template_name = template
            setattr(self, f"{name}_form", new_form)

        update_widgets(
            "form1",            # some label for form
            Form1,              # Form1 is a model form
            "form1_view.html",  # template for this form
            extras={},          # extra parameters for form
        )

        update_widgets(
            "form2",
            Form2,
            "form2_view.html",
            extras={},
        )

AggregateFormSet = forms.formset_factory(AggregateForm, extra=0)

and in the view, in the get_form_initial():
from django.forms.models import model_to_dict

#...

    def get_form_initial(self, step):
        if step == "the_step":
            initials = []
            for ...:  # collect initial data
                initials.append(
                    {
                        "form1_data": model_to_dict(model1_obj),
                        "form2_data": model_to_dict(model1_obj),
                    }

            return initials

        return self.initial_dict.get(step, {})

and finally in the master template aggregate_form.html:
...
{{ form.form1_form }}
{{ form.form2_form }}
...


URL rewrite using dynamic data in JWT

Leverage the URL rewrite capabilities of Nginx (ex: using the ngx_http_rewrite_module module) and perform a rewrite where the destination URL contains data from the JWT.
Example:

The Nginx endpoint being called is /api/userinfo and the JWT passed by the client contains a field user_id: sandrino123
The rewritten URL to the downstream endpoint becomes https://server01/legacy/api/getuserinfofor/$user_id (where $user_id is a value from the JWT in the Authorization header)

This supports dynamic url rewriting and custom response.
https://github.com/tarachandverma/nginx-openidc


Silent error breaking installNodeHeaders

The published npm package v0.2.2 doesn't seem to include the fix in Pull Request #7 which I believe is causing installNodeHeaders to be broken for me. I'm having trouble catching any errors. Seems to silently fail.
I also can't get npm to successfully install straight from Github to give the latest commits a try.

For the case that the headers don't exist, it will look for the files and error. There seems to be multiple issues going on here:

fs.stat throws if the given path does not exist. Therefore this line will throw await fs.stat(canary) https://github.com/paulcbetts/electron-rebuild/blob/master/src/main.js#L17
This thrown error doesn't seem to be catching properly. I'm less familiar with babel and can't find much documentation on its es7 features. I did read that a surrounding try/catch should catch the error according to the specification, but I could not get it to work for me. Perhaps the issue lies in Promisify, but I haven't looked into it.

As a hotfix, I tried making it use fs.statSync and removing the promisify on fs and await for that line. It worked, but then I got another issue. The spawn command that is issued exits immediately and the operation never actually runs. I can run the command straight from the command line with the default USERPROFILE variable (which means headers go in the wrong place), but if I change this env variable, it hangs and never times out.
I'm using Windows 8.1 and Node 0.12.x

@bzuillsmith These weirdo bugs all sound like the time that Babel runtime broke compatibility with previous versions in a patch... can you try going into node_modules\electron_rebuild and doing npm install and see if rebuilding against latest works?

@paulcbetts I can only install the latest from npm's repo. No change. For some reason, installing straight from GitHub fails for me. I get ENOENT on lib/cli.js and it backs out. I'm not sure what would be dependent on that during install :/

@paulcbetts And I am proven wrong. A clone and npm install got the installNodeHeaders test to pass. I'll copy it over to my project and see if it works.

@paulcbetts Ok, I'm dumb. I was using this in a grunt task and I didn't set up this.async() correctly so it was exiting immediately after the first async call into the electron-rebuild api.
However, the tests don't all work and that was throwing me off too. Each time I npm test, I have to first delete test-dist.


Unable to run locally node v18.13.0

Following the readme instruction the viewer would not run locally using v18.13.0

Thanks for the data, @antonioortegajr ... I believe I have fixed the issue with a recent PR. There are definitely issues with the README.md with respect to doing development on the viewer app, but npm run dev should work correctly in Node v16 AND v18.
FWIW, I'm currently prioritizing my work on the viewer's replacement, which is a Quasar/VueJS app currently at GitHub for smartdown-quasar and is demoable at https://doctorbud.com/smartdown-quasar/. I intend to soon migrate that repository to the smartdown GitHub organization.

related PR https://github.com/smartdown/viewer/pull/38

Woking in node 18.13.0
Cloned repo npm i and dist directory built and runs as expected. 🚀


how i delete this issue?

You can't delete issues on GitHub.
In general, it is more useful to just close the issue and leave a comment on what went wrong on how you've solved it. That way, it still provides value to others.
Just deleting the contents is really not helpful.


build error with rustc 1.2.0-nightly

Hi,
I use rustc 1.2.0-nightly (fbb13543f 2015-06-11).
there are several build errors in src/output.rs and src/reader.rs, e.g.:
src/reader.rs:623:44: 623:48 help: add #![feature(rustc_private)] to the crate attributes to enable
src/reader.rs:626:24: 626:30 error: use of unstable library feature 'rustc_private'

...

src/output.rs:249:44: 249:54 help: add #![feature(convert)] to the crate attributes to enable
src/output.rs:252:33: 252:40 error: use of unstable library feature 'rustc_private'

i updated src/lib.rs and added:
#![feature(rustc_private)]
#![feature(convert)]
#![feature(collections)]

and still get the following error, can you fix it @sivadeilra @brandonchinn178?
src/bin/testg.rs:26:1: 26:8 error: macro undefined: 'grammar!'
src/bin/testg.rs:26 grammar! {

Yea, I still got rustc_private compile time errors, but I didn't know how to deal with it

the rustc_private issue is fixed, but more important is the following issue, do you know how to fix it?
src/bin/testg.rs:26:1: 26:8 error: macro undefined: 'grammar!'
src/bin/testg.rs:26 grammar! {

Is #[macro_export] above the grammar macro_rule?
Is #[macro_use] above the export?
Are you importing the racc package above all other modules?

i get the error when i build the racc project: cargo build...

can you comment?

I don't know, I think it has something to do with how @sivadeilra declared the macro_rule

there are the following decl in the testg.rs file:
#![feature(plugin)]

#![allow(non_upper_case_globals)]
#![allow(dead_code)]
#![allow(non_camel_case_types)]
#![allow(unused_variables)]
#![allow(unstable)]

#[plugin]
#[macro_use]
extern crate log;

hi, i fixed the build for rust nightly. please merge.

Merged.  Thanks!
On Wed, Jun 24, 2015 at 2:36 PM, geraldstanje<EMAIL_ADDRESS>wrote:

hi, i fixed the build for rust nightly. please merge.
—
Reply to this email directly or view it on GitHub
https://github.com/sivadeilra/racc/issues/4#issuecomment-115019328.

does it work as expected? what is missing in the project? can you update the readme?

Sorry, I merged it without testing it. I've been out of the loop for a
while, now.
On Thu, Jun 25, 2015 at 12:27 PM, geraldstanje<EMAIL_ADDRESS>wrote:

does it work as expected? what is missing in the project? can you update
the readme?
—
Reply to this email directly or view it on GitHub
https://github.com/sivadeilra/racc/issues/4#issuecomment-115369971.

do you plan to jump into the loop again?

Yes.  I'm out of town for most of July but intend to pick up development when I return.
-----Original Message-----
From: "geraldstanje"<EMAIL_ADDRESS>Sent: 6/25/2015 5:03 PM
To: "sivadeilra/racc"<EMAIL_ADDRESS>Cc: "sivadeilra"<EMAIL_ADDRESS>Subject: Re: [racc] build error with rustc 1.2.0-nightly (#4)
do you plan to jump into the loop again?
—
Reply to this email directly or view it on GitHub.

please merge my update.


PostgresNumeric type

The recommended way to work with NUMERIC columns in an existing Postgres DB is via String. It would be nice to have a PostgresNumeric type that encapsulated the numeric parsing logic as well as conversion methods to / from Decimal, Float, Double, String, etc.
class Account: Model {
    var balance: PostgresNumeric
}

print(account.balance.lossyDouble) // Double
print(account.balance.string) // String

FWIW, if Decimal could support lossless conversion to / from NUMERIC (seems unlikely), we could consider using that type instead.

Well, we should in any case make a Decimal in the model map to a Numeric on the Postgres side. For the primary use case (like amounts of money) this will always be exact. It's only insanely large magnitudes that might not be representable anymore in Decimal I guess.
It doesn't make much sense to use the Postgres specific type in any model because there is nothing that can be done with it (like multiplying it with a Decimal in Swift). The type makes only sense in the table, but never in code if there is no seamless interaction with other Swift types.

The type makes only sense in the table, but never in code if there is no seamless interaction with other Swift types.

I would argue that making the interaction seamless hides the fact that a lossy conversion is happening which could surprise people. With what I've proposed here, it's still possible to work with the value in Swift, it's just more clear from the code that precision loss may occur. If / when someone needs to track down why precision is being lost, it will be immediately clear:
class Account: Model {
    var balance: PostgresNumeric
}

let account = try Account.find(42, on: db).wait()
account.balance.lossyDecimal += 3.14
try account.save(on: db).wait()

The thing that is bugging me here is that this particular addition for example will be guaranteed not to be lossy. Like most anything we'll do with Decimals there.
But I agree on your point that hidden loss of precision is a very bad thing.

The thing that is bugging me here is that this particular addition for example will be guaranteed not to be lossy.

Couldn't it be lossy if the current balance is within +/- 3.14 of Decimal's precision threshold?

Maybe I'm off, but Decimal doesn't have a precision in that sense.
Decimal stores this number as two integers: 314 and -2 which is 314 * 10 ^ -2
Any number can be represented by two Integers exactly (as long as your Integers can be arbitrarily large) using a * 10 ^ b.
First Int is all the digits you have in the number, while the second is shifting the comma b places left or right.

@tkrajacic I wish Decimal stored that way, but unfortunately no. It uses this weird mantissa thing that stored 8 UInt16 instances. Don't ask me how it works, I have no idea 😄.

Summarizing the conversation from team chat:
Thanks to @tkrajacic for pointing out that Decimal works differently than Double / Float. It works more like 2 integers, one before and after the decimal place. With each integer's relative max/min depending on the other one.
This means that Decimal is always precise within its max/min bounds. This still means that there can be lossyness when converting to / from NUMERIC, but it's at least less likely. Because of this, it seems appropriate to allow Decimal to convert to / from NUMERIC while also providing a lossless PostgresNumeric type for edge cases.

I hope you don't mind if I weigh back in on this discussion here. I'm the one who originally brought this up in chat.
I've been experimenting with this and I believe you can convert without loss from NUMERIC to Decimal.
Take a look at the NumericVar struct from numeric.c file in Postgres: https://github.com/postgres/postgres/blob/master/src/backend/utils/adt/numeric.c
typedef struct NumericVar
{
	int			ndigits;		/* # of digits in digits[] - can be 0! */
	int			weight;			/* weight of first digit */
	int			sign;			/* NUMERIC_POS, NUMERIC_NEG, or NUMERIC_NAN */
	int			dscale;			/* display scale */
	NumericDigit *buf;			/* start of palloc'd space for digits[] */
	NumericDigit *digits;		/* base-NBASE digits */
} NumericVar;

This is what is returned (as binary) in convertFromPostgreSQLData(_ data: PostgreSQLData). I have had some success unwrapping this and buf represents the digits before the decimal and digits represents the digits after the decimal. It is big endian. NumericDigit is a char in c. digits, weight and dscale are still a mystery to me.
But given this info from Postgres shouldn't it be possible to losslessly convert this to a Decimal?

Here is the extension I was using for experimentation:
extension Decimal: PostgreSQLDataConvertible {

    public static func convertFromPostgreSQLData(_ data: PostgreSQLData) throws -> Decimal {
        guard let binary = data.binary else { throw PostgreSQLError(identifier: "decimalPostgresqlDataConvertible", reason: "Could not convert from PostgreSQL data") }

        let byteArray: [UInt16] = binary.toArray(type: UInt16.self)
        var convertedByteArray = byteArray.map { $0.bigEndian }

        Swift.print(convertedByteArray)

        return 0
    }

    public func convertToPostgreSQLData() throws -> PostgreSQLData {
        return PostgreSQLData(PostgreSQLDataFormat.numeric, text: self.description)
    }

}

It is not a correct solution but if you look at the log you can see the info returned from Postgres. Take a look at the integers in the array and you can see that one is the number before the decimal and another is the number after the decimal.

@acwright dscale is how many significant digits are after the decimal, to get rid of trailing 0s. You can see the current implementation here that converts NUMERIC to Swift.String.

But given this info from Postgres shouldn't it be possible to losslessly convert this to a Decimal?

No, I don't think so. You can configure NUMERIC to have custom precision and scale NUMERIC(p,s). If do you NUMERIC(1,1) for example, then 1.2 would fit, but 12.34 would not. So, in this case, converting between Swift.Decimal and NUMERIC would definitely be lossy. It's obviously not likely that you would declare NUMERIC(1,1) in a real use case, but you can see the point that these types are not equivalent.
Despite that, for reasons mentioned in my previous comment, I think for most uses cases converting between Decimal and NUMERIC won't be lossy, and should work fine. In edge cases where it is lossy, people will be able to opt in to using PostgresNumeric which represents NUMERIC losslessly.

This has been added here https://github.com/vapor/postgres-nio/pull/23.


List mediaItems without the readDevData authorization scope

I love this library 👍
I use it to list users pictures, in a purely read-only fashion, my code looks like this :
GPhotos.initialize(with: Config())
GPhotos.authorize(with: [.openId, .readOnly], completion: { _, _ in
    GPhotosApi.mediaItems.list(completion: { _ in })
})

This asks the user for 2 authorizations (.readOnly and .readDevData) :

But I don't need the .readDevData authorization (at least I think so)
In GPhotosResource.swift :
internal struct scopes {
    static let read: ScopeSet = ([.readOnly, .readDevData], [.readAndAppend])

Both are required, so changing the line 16 to this would solve my issue :
static let read: ScopeSet = ([.readOnly], [.readDevData, .readAndAppend])

However I'm not sure this is the way to go, is it the wanted behavior to always ask for .readDevData alongside .readOnly ?

Valid point. I treated the read scope as read-only access to all photos, user-added or added from your app. But the latter should be optional considering your use case. Thanks for pointing out!

Fixed in ac1e0a6

Awesome thank you very much!


Improves message Querying the mapped value of task '<task>' property '<some property>' before task '<task>' has completed is not supported

Expected Behavior
The following message is really odd

Querying the mapped value of task ':module:generateClass' property 'generatedClassDir' before task ':module:generateClass' has completed is not supported

In the trend of

https://github.com/gradle/build-tool-roadmap/issues/49

What do you think about indicating the underlying reason : e.g.
Execution failed for task ':module:generatedClass'.
> Calling 'project.file' during a task execution is not supported
  > Querying the mapped value of task ':module:generateClass' property 'generatedClassDir' before task ':module:generateClass' has completed is not supported calling `map` during task execution

Current Behavior (optional)
I was rewriting some tasks written using the Kotlin DSK ta a task class, The DSL code made use of
project.file(generatedClassDir.map { it.file("some/path/to/A.java") })

Let's ignore that this line could be improved for a moment.
Using this line in this code
val generateClass by tasks.registering(GenerateClass::class)
abstract class GenerateClass : DefaultTask() {
    @OutputDirectory
    val generatedClassDir: DirectoryProperty = project.objects.directoryProperty()
        .convention(project.layout.buildDirectory.dir("generated/sources/version/java"))

    @TaskAction
    fun generate() {
        project.file(generatedClassDir.map { it.file("some/path/to/A.java") })
        // not useful to reproduce
    }
}

And executing generateClass results in the following message
Execution failed for task ':module:generatedClass'.
> Querying the mapped value of task ':module:generateClass' property 'generatedClassDir' before task ':module:generateClass' has completed is not supported

It took more time than necessary that I shouldn't call project.file(<file property>) during the execution
Context
Converting a kotlin DSL task to a task class

Related but different than #16777

This issue needs a decision from the team responsible for that area. They have been informed. Response time may vary.

This looks like a deeper issue where a task is accessing its own output property through the provider API and poses a problem, but it should not. The informed team will decide on the best course of action (either a deeper investigation or improving the error message).


cli: Fix reading the configuration from GlobalOptions

Use the GlobalOptions in the ReporterCommand and
UploadResultCommand. Otherwise these command fail with a
NullPointerException.
This is a fixup for 5f7ebe5.

Merged without waiting for CI to make the reporter usable again.


List forma required for Paracesis-like gear

Description
I'm nearing the end of my collection, and mostly just have the Kuva/Tenet weapons to level. Since each costs 5 forma to get to max, this will cost a fair bit of plat.
I'd like to know how much exactly without having to sum it up by hand - seems similar to crafting components, so it'd be cool if the site could calculate that.
Extra Information
N/A

Added under the crafting components


[question] How can I implement the equivalent of before/after each?

I would like to be able to perform some tasks before and after each test, i.e. clear/set localstorage, etc.
How can I do this with storybook interaction testing?

Hey there, for beforeEach I tend to use the decorators function, which is called on each render of the story
const mock = jest.fn();

const componentMeta: ComponentMeta<SomeComponenet> = {
    title: 'Some component',
    component: SomeComponenet,
    decorators: [
        Story => {
            mock.mockClear();
            return <Story />;
        },
    ],
};

export default componentMeta;

export const shouldDoStuff: ComponentStoryObj<SomeComponenet> = {
    play: async ({ canvasElement }) => {
      // do stuff that calls mock....
      expect(mock).toBeCalled();
    },
};

export const shouldDoOtherStuff: ComponentStoryObj<SomeComponenet> = {
    play: async ({ canvasElement }) => {
      // do nothing
      expect(mock).toBeCalled(); // will give you an error, as it was cleared in the 'decorators' above
    },
};

Hi @realappie , thank you for the tip. We are doing something very similar for the beforeEach at the moment in our components. However, it is custom made and not intuitive. We also dont have a solution for the afterEach yet.
I think Storybook should provide a beforeEach and an afterEach for each component. This would align it with many other testing frameworks.

Hey everyone! Thanks for opening this issue. That's definitely something we are considering implementing, but unfortunately such functionality isn't built in in Storybook.
However! You can achieve something very similar, by using Storybook's existing concepts. Let me map them out for you.
BeforeAll - Storybook preview.js file
The preview file is called once, in Storybook. It's useful to load global configuration like css, etc. This is a good place for a "beforeAll" implementation.
BeforeEach - Storybook loaders
Storybook loaders are executed before the story renders. They can be set globally in preview, or per component on meta, or per story. This is a good place for a "beforeEach" implementation.
AfterEach - End of the Storybook play function
The play function is executed after the story renders. That's where you will add your interactions or test code, and after all of it is executed, it would be the best place to clean up. Therefore, you could add a "cleanup" step at the end of your play function.
Code snippets
Here's an example that shows a complete use case with all of these potential hooks:
// .storybook/preview.ts
import { configure } from '@storybook/testing-library'
import { expect } from '@storybook/jest'

// Scenario: preconfiguring testing-library globally
configure({ testIdAttribute: 'data-test' })

// Scenario: extending expect globally with a custom matchers
expect.extend({
  toBeANumber(received) {
    const pass = typeof received === 'number'
    if (pass) {
      return {
        message: () => `expected ${received} not to be a number`,
        pass: true,
      }
    } else {
      return {
        message: () => `expected ${received} to be a number`,
        pass: false,
      }
    }
  },
})

console.log("[HOOK] BEFORE ALL - GLOBAL")

// Button.stories.ts
import { StoryObj, Meta } from '@storybook/react'
import { expect, jest } from '@storybook/jest'
import { userEvent, within } from '@storybook/testing-library'

import { Button } from './Button'

let clickSpy = jest.fn()

const meta = {
  component: Button,
  args: {
    children: 'Button',
    onClick: clickSpy,
  },
  // loaders are called before a story renders
  // if put in the meta, they will be equivalent to a "beforeEach"
  // if put in the story, they will be equivalent to a "beforeStory"
  loaders: [
    async (context) => {
      // you use context to check story annotations like args, etc, if you'd like.
      // clean up mock usage between stories
      clickSpy.mockClear()
      clickSpy.mockImplementation(() => console.log('foobar', context))
      console.log('[HOOK] BEFORE EACH - BUTTON')
      return {}
    },
  ],
  play: async () => {
    console.log('[HOOK] AFTER EACH - BUTTON')
  },
} satisfies Meta<typeof Button>
export default meta

type Story = StoryObj<typeof meta>

// here, the "beforeEach" will be called because of the loader
export const Default: Story = {
  play: async ({ canvasElement, args }) => {
    const canvas = within(canvasElement)
    const button = await canvas.findByRole('button')
    await userEvent.click(button)
    await expect(args.onClick).toHaveBeenCalledTimes(1)

    // but the "afterEach" will have to be called manually
    // given that this story overrides the play function
    await meta.play()
  },
}

// here, the "beforeEach" and "afterEach" will be called
export const Disabled: Story = {
  args: {
    disabled: true,
  },
}

I know this is not amazing, but should be enough to unblock you while we work on proper APIs for these lifecycle hooks!


fix(autocomplete-demo): reactiveStates length

@crisbeto CLA verification is successful, what next do, resubmit the pull request?

Need a second CLA verification ？

@gozeon your PR needs to be rebased on master

I am an entry-level programmer, please forgive me


dart:typed_data error with flutter_eval 0.4.7 and Flutter 3.0

'dart:typed_data' not need in 3.3.0. but it's needed for 3.0.5.  flutter_eval require flutter: ">=3.0.0 <3.4.0"
/Users/zmtzawqlp/Documents/flutter/3.0.0/.pub-cache/hosted/pub.flutter-io.cn/flutter_eval-0.4.7/lib/src/flutter_eval.dart
Originally posted by @zmtzawqlp in https://github.com/ethanblake4/flutter_eval/discussions/9#discussioncomment-3714380

Fixed in v0.5


Chess: Move D2 to C3

Please do not change the title. Just click "Submit new issue". You don't need to do anything else :D

@JeffGreenlee42 Whaaaat? The move d2c3 is invalid!
Maybe someone squeezed a move before you. Please try again.


output_file argument provokes error in Optislang object constructor

🔍 Before submitting the issue

[X] I have searched among the existing issues
[X] I am using a Python virtual environment

🐞 Description of the bug
osl=Optislang(output_file=r'd:\tmp\logilfe.txt')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "D:\ansysdev\pyoptislang\src\ansys\optislang\core\optislang.py", line 229, in __init__
    self.__osl_server: OslServer = self.__init_osl_server("tcp")
  File "D:\ansysdev\pyoptislang\src\ansys\optislang\core\optislang.py", line 255, in __init_osl_server
    return TcpOslServer(
  File "D:\ansysdev\pyoptislang\src\ansys\optislang\core\tcp_osl_server.py", line 1035, in __init__
    self._start_local(ini_timeout, shutdown_on_finished)
  File "D:\ansysdev\pyoptislang\src\ansys\optislang\core\tcp_osl_server.py", line 2343, in _start_local
    raise RuntimeError("Cannot get optiSLang server port.")
RuntimeError: Cannot get optiSLang server port.

📝 Steps to reproduce
Try to create an Optislang object with the output_file argument.
💻 Which operating system are you using?
Windows
📀 Which ANSYS version are you using?
23 R2
🐍 Which Python version are you using?
3.10
📦 Installed packages
-e git+https://github.com/pyansys/pyoptislang.git@936b6b8a08d6e4da053412b9fdab7e8ea54853c9#egg=ansys_optislang_core
importlib-metadata==6.7.0
psutil==5.9.5
zipp==3.15.0

@optislangdeveloper  Will close this as duplicated (https://github.com/ansys/pyoptislang/issues/147). Do you agree?

Yes 👍
Gesendet von Outlook für iOShttps://aka.ms/o0ukef

Von: Ronny Fahlberg @.>
Gesendet: Thursday, June 22, 2023 1:30:18 PM
An: ansys/pyoptislang @.>
Cc: Jakob Schneider @.>; Mention @.>
Betreff: Re: [ansys/pyoptislang] output_file argument provokes error in Optislang object constructor (Issue #144)
[External Sender]
@optislangdeveloperhttps://github.com/optislangdeveloper Will close this as duplicated (#147https://github.com/ansys/pyoptislang/issues/147). Do you agree?
—
Reply to this email directly, view it on GitHubhttps://github.com/ansys/pyoptislang/issues/144#issuecomment-1602477393, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AVRT3EWGPZR3XANNJVTIY33XMQUEVANCNFSM6AAAAAAZO37T4M.
You are receiving this because you were mentioned.Message ID: @.***>


Fix sloppy PGN generation

const c = new Chess();
c.load_pgn('1. e4 d5 2. Nf3 Nd7 3. Bb5 Nf6 4. O-O');
c.history().length // === 7
c.pgn(); // === '1. e4 d5 2. Nf3 Nd7 3. Bb5 Ngf6 4. O-O' <-- notice Ngf6
const c2 = new Chess();
c2.load_pgn(c.pgn()); // === false
c2.history().length; // === 5

231b4103 switched sloppy = false to generate_moves({ legal: false }) in the PGN generation code, but chess.js's own PGN loader doesn't accept this sloppier notation. My guess is that this was a typo (since the "false" and "true" booleans were swapped when switching "sloppy" out for "legal").
I've included a regression test, which fails in master:
  ● Regression Tests › Github Issue #286 - pgn should not generate sloppy moves

    expect(received).toBe(expected) // Object.is equality

    Expected: "1. e4 d5 2. Nf3 Nd7 3. Bb5 Nf6 4. O-O"
    Received: "1. e4 d5 2. Nf3 Nd7 3. Bb5 Ngf6 4. O-O"

      1722 |       const chess = new Chess()
      1723 |       chess.load_pgn('1. e4 d5 2. Nf3 Nd7 3. Bb5 Nf6 4. O-O')
    > 1724 |       expect(chess.pgn()).toBe('1. e4 d5 2. Nf3 Nd7 3. Bb5 Nf6 4. O-O')
           |                           ^
      1725 |     });
      1726 | });
      1727 |

cc @jafayer

Good find and thanks for the PR!


failing execute install.sh

Heya.
I am trying the UPS EP-0136 on a RPI 4B 4GB and getting problem executing install script from this repository.
OS System Its Last Raspberry OS With Desktop (2021-03-04-raspios-buster-armhf)
pi@raspberrypi:~/upsplus $ bash install.sh
[info] Welcome to 52Pi Technology UPS Plus auto-install Program!.
[info] More information please visit here:.
[info] -----------------------------------------------------.
[info] https://wiki.52pi.com/index.php/UPS_Plus_SKU:_EP-0136.
[info] -----------------------------------------------------.
[info] Start the configuration environment check....
[ ok ] Network status is ok....
[info] Start the software check....
[ ok ] git has been installed..
[info] Installing pi-ina219 library....
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting pi-ina219
  Downloading https://files.pythonhosted.org/packages/fe/c9/5d9adad5393ad93d4b804324305e3505bc28becfe831ea3dc30dfa9825c0/pi_ina219-1.4.0-py2.py3-none-any.whl
Collecting mock (from pi-ina219)
  Downloading https://files.pythonhosted.org/packages/5c/03/b7e605db4a57c0f6fba744b11ef3ddf4ddebcada35022927a2b5fc623fdf/mock-4.0.3-py3-none-any.whl
Collecting Adafruit-GPIO (from pi-ina219)
  Downloading https://www.piwheels.org/simple/adafruit-gpio/Adafruit_GPIO-1.0.3-py3-none-any.whl
Collecting adafruit-pureio (from Adafruit-GPIO->pi-ina219)
  Downloading https://www.piwheels.org/simple/adafruit-pureio/Adafruit_PureIO-1.1.8-py3-none-any.whl
Requirement already satisfied: spidev in /usr/lib/python3/dist-packages (from Adafruit-GPIO->pi-ina219) (3.4)
Installing collected packages: mock, adafruit-pureio, Adafruit-GPIO, pi-ina219
Successfully installed Adafruit-GPIO-1.0.3 adafruit-pureio-1.1.8 mock-4.0.3 pi-ina219-1.4.0
[ ok ] pi-ina219 Installation successful..
[info] Installing smbus2 library....
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting smbus2
  Downloading https://files.pythonhosted.org/packages/c8/bf/62ef029fb7077fc87c3539f7365859bccc6cedb2bb20796b737b788c8d09/smbus2-0.4.1-py2.py3-none-any.whl
Installing collected packages: smbus2
Successfully installed smbus2-0.4.1
[ ok ] smbus2 Installation successful..
[info] create /home/pi/bin directory....
[info] Create python3 script in location: /home/pi/bin/upsPlus.py Successful.
[ ok ] Create UPS Plus IoT customer service python script successful.
[info] Create crontab list for pi user..
cp: imposs\u00edvel analisar '/var/spool/cron/crontabs/pi': No such file or directory
* * * * * /usr/bin/python3 /home/pi/bin/upsPlus.py
* * * * * /usr/bin/python3 /home/pi/bin/upsPlus_iot.py
[info] crontab has been created successful!.
Traceback (most recent call last):
  File "/home/pi/bin/upsPlus.py", line 21, in <module>
    ina = INA219(0.00725, address=0x40)
  File "/home/pi/.local/lib/python3.7/site-packages/ina219.py", line 116, in __init__
    self._i2c = I2C.get_i2c_device(address=address, busnum=busnum)
  File "/home/pi/.local/lib/python3.7/site-packages/Adafruit_GPIO/I2C.py", line 64, in get_i2c_device
    return Device(address, busnum, i2c_interface, **kwargs)
  File "/home/pi/.local/lib/python3.7/site-packages/Adafruit_GPIO/I2C.py", line 97, in __init__
    self._bus = Adafruit_PureIO.smbus.SMBus(busnum)
  File "/home/pi/.local/lib/python3.7/site-packages/Adafruit_PureIO/smbus.py", line 125, in __init__
    self.open(bus)
  File "/home/pi/.local/lib/python3.7/site-packages/Adafruit_PureIO/smbus.py", line 150, in open
    self._device = open("/dev/i2c-{0}".format(bus), "r+b", buffering=0)
FileNotFoundError: [Errno 2] No such file or directory: '/dev/i2c-1'
[FAIL] UPS Plus Installation is Incomplete! ... failed!
[info] Please visit wiki for more information:.
[info] -----------------------------------------------------.
[info] https://wiki.52pi.com/index.php/UPS_Plus_SKU:_EP-0136.
[info] -----------------------------------------------------.

I will try one more time.

little differences with sudo. (just able to read the crontab )
pi@raspberrypi:~/upsplus $ sudo bash install.sh
[info] Welcome to 52Pi Technology UPS Plus auto-install Program!.
[info] More information please visit here:.
[info] -----------------------------------------------------.
[info] https://wiki.52pi.com/index.php/UPS_Plus_SKU:_EP-0136.
[info] -----------------------------------------------------.
[info] Start the configuration environment check....
[ ok ] Network status is ok....
[info] Start the software check....
[ ok ] git has been installed..
[info] Installing pi-ina219 library....
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting pi-ina219
  Downloading https://files.pythonhosted.org/packages/fe/c9/5d9adad5393ad93d4b804324305e3505bc28becfe831ea3dc30dfa9825c0/pi_ina219-1.4.0-py2.py3-none-any.whl
Collecting mock (from pi-ina219)
  Downloading https://files.pythonhosted.org/packages/5c/03/b7e605db4a57c0f6fba744b11ef3ddf4ddebcada35022927a2b5fc623fdf/mock-4.0.3-py3-none-any.whl
Collecting Adafruit-GPIO (from pi-ina219)
  Downloading https://www.piwheels.org/simple/adafruit-gpio/Adafruit_GPIO-1.0.3-py3-none-any.whl
Collecting adafruit-pureio (from Adafruit-GPIO->pi-ina219)
  Downloading https://www.piwheels.org/simple/adafruit-pureio/Adafruit_PureIO-1.1.8-py3-none-any.whl
Requirement already satisfied: spidev in /usr/lib/python3/dist-packages (from Adafruit-GPIO->pi-ina219) (3.4)
Installing collected packages: mock, adafruit-pureio, Adafruit-GPIO, pi-ina219
Successfully installed Adafruit-GPIO-1.0.3 adafruit-pureio-1.1.8 mock-4.0.3 pi-ina219-1.4.0
[ ok ] pi-ina219 Installation successful..
[info] Installing smbus2 library....
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting smbus2
  Downloading https://files.pythonhosted.org/packages/c8/bf/62ef029fb7077fc87c3539f7365859bccc6cedb2bb20796b737b788c8d09/smbus2-0.4.1-py2.py3-none-any.whl
Installing collected packages: smbus2
Successfully installed smbus2-0.4.1
[ ok ] smbus2 Installation successful..
[info] create /root/bin directory....
[info] Create python3 script in location: /root/bin/upsPlus.py Successful.
[ ok ] Create UPS Plus IoT customer service python script successful.
[info] Create crontab list for pi user..
* * * * * /usr/bin/python3 /root/bin/upsPlus.py
* * * * * /usr/bin/python3 /root/bin/upsPlus_iot.py
[info] crontab has been created successful!.
Traceback (most recent call last):
  File "/root/bin/upsPlus.py", line 21, in <module>
    ina = INA219(0.00725, address=0x40)
  File "/usr/local/lib/python3.7/dist-packages/ina219.py", line 116, in __init__
    self._i2c = I2C.get_i2c_device(address=address, busnum=busnum)
  File "/usr/local/lib/python3.7/dist-packages/Adafruit_GPIO/I2C.py", line 64, in get_i2c_device
    return Device(address, busnum, i2c_interface, **kwargs)
  File "/usr/local/lib/python3.7/dist-packages/Adafruit_GPIO/I2C.py", line 97, in __init__
    self._bus = Adafruit_PureIO.smbus.SMBus(busnum)
  File "/usr/local/lib/python3.7/dist-packages/Adafruit_PureIO/smbus.py", line 125, in __init__
    self.open(bus)
  File "/usr/local/lib/python3.7/dist-packages/Adafruit_PureIO/smbus.py", line 150, in open
    self._device = open("/dev/i2c-{0}".format(bus), "r+b", buffering=0)
FileNotFoundError: [Errno 2] No such file or directory: '/dev/i2c-1'
[FAIL] UPS Plus Installation is Incomplete! ... failed!
[info] Please visit wiki for more information:.
[info] -----------------------------------------------------.
[info] https://wiki.52pi.com/index.php/UPS_Plus_SKU:_EP-0136.
[info] -----------------------------------------------------.

Sorry my friends.
My bad.
Missing Raspberry4 /boot/config.txt configuration on bottom of page
Installation GOOD!


DisplayServer: An open window sometimes interferes with UndoRedo

Godot version:
4.0-dev
OS/device including version:
Kubuntu 20.10
Issue description:
In some cases, an open window prevents the editor's global UndoRedo. When the window is closed, Ctrl+Z and Ctrl+Shift+Z work fine.
Steps to reproduce:

Open Project Settings Editor.
Add a custom setting and delete it.
Press Ctrl+Z: the setting won't back (in 3.2 it works).
Close Project Settings Editor.
Press Ctrl+Z ("Undo: Delete Item" will appear in the output log).
Open Project Settings Editor and make sure the setting is back now.

Minimal reproduction project:
—

Still reproduced in 4f298237b.

Can't reproduce in alpha 8
@dalexeev Can you test again?

Can't reproduce.


Change handling of semicolon in block braces

The fix prevents Style/SpaceBeforeSemicolon, Style/SpaceAfterSemicolon and Style/SpaceInsideBlockBraces from auto-correcting in an infinite loop.

Thanks @jonas054. Your comments led me deeper into the issue. This very case seems to have already been acknowledged in cli_spec.rb, but I've now updated the PR to provide an alternative solution. Take it or leave it :)

Changed space_required_before_lcurly? to space_required_after_lcurly?. Thanks again, @jonas054.

That's all I had. The code looks good to me. :+1:


Not able to install msodbcsql18

Why i am not able to install msodbcsql18,
i follow full instruction given here https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver15
keep note that i tried these whole installation steps in ubuntu 22.04(docker container)

i also try on earlier version of ubuntu and debian maybe some thing wrong with package respository.
Thank you

@Ryn0K - Thanks for your question. It looks like you're working through an issue with your scenario or implementation, rather than an issue with the documentation. Please consider these resources:

SQL Server on Microsoft Q&A
DBA Stack Exchange
Stack Overflow

sir only question why i can't able to install msodcsql18

Hi @Ryn0K This board supports the documentation. The links above might help with troubleshooting.

ok let me try


all angle router does not get consistent names

all angle router does not get consistent names
https://github.com/gdsfactory/gdsfactory/actions/runs/5113997431/jobs/9193803571
@tvt173

since when, @joamatab ? do you know what change triggered this?

not sure what triggered it, the new difftest catches this issues now as it detects cell name changes that are not at the top level

sure, i can take a look... i'd suspect it has to do with floating point numbers passed as part of the transformation...
in this case, i suppose it would be good if we can get the names to come out the same consistently. but i'm wondering if, in general, we want difftest to be this picky... usually i'm happy if the top-level cell name + XOR is correct, and I would look at a netlist regression for any changes like this to cell names or parameters. i.e. sometimes i might make changes to a cell hierarchy and want to confirm that the layout still comes out the same (XOR-clean) independent of changes to hierarchy/logical structure. i haven't tried the new difftest yet, but I think it would be nice if we are still able to confirm this

hi @joamatab , I believe this one was fixed by #1781


Support multiple build systems such as pure make, catkin, ament, etc

This PR introduces new cmake files that allow libpointmatcher to be built natively with ROS catkin, or to rather be built as it has been, with a pure cmake setup that works on Windows, Mac OS or Linux.
I created new cmake files with the config needed, and additionally enabled the unit tests on the ROS side. With this new config it would also be possible to build and release a libpointmatcher ROS package.
All feedback is warmly welcome. I will try to tag all regulars users of libpointmatcher that I know of.

@AlexandreG87 After the Python bindings are merged, could you help me to adapt the changes in this MR? To provide support for them with catkin and cmake builds.

@AlexandreG87 After the Python bindings are merged, could you help me to adapt the changes in this MR? To provide support for them with catkin and cmake builds.

@YoshuaNava Yes, I can help you.

@AlexandreG87 Thanks a lot :slightly_smiling_face:

@peci1 I have addressed most of the comments on the libnabo PR here as well.

@YoshuaNava is this PR still relevant?

@pomerlef I think it would be very nice to have this change, but the changes needed have accumulated. I would prefer to close the current PR and open a new one in the future, with more organization from my side (e.g. a table where we list small PRs with minimal and better scoped changes).
(This also applies to the mirror on the libnabo repo)

alright, I'm closing it!


send debug events for flutter lifecycle events

@Hixie, this sends flutter lifecycle events as observatory debug events. These are a little easier to watch for on the debug client side, and much less high volume, than the timeline events.
The route event is more of an FYI - I don't expect to land it this PR. The text I currently get for it is MaterialPageRoute<Null>("/", animation: AnimationController(⏭ 1.000; paused; for MaterialPageRoute<Null>(/))). I'd instead want something like / or /foo. In the fullness of time, it'd be great to be able to set and get the route, and receive events when it changes.

updated, ptal


Building apk issue on Flutter

I'm getting error on building apk using google_mobile_ads: ^5.2.0
e: E:/Android Studios/Gradle/.gradle/caches/transforms-3/6fecbd83857dd01e1c1629b6cc29fa28/transformed/jetified-play-services-ads-23.4.0-api.jar!/META-INF/java.com.google.android.gms.libs.filecompliance.proto_file_access_api_type_kt_proto_lite.kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.9999, expected version is 1.7.1.
e: E:/Android Studios/Gradle/.gradle/caches/transforms-3/6fecbd83857dd01e1c1629b6cc29fa28/transformed/jetified-play-services-ads-23.4.0-api.jar!/META-INF/third_party.java_src.protobuf.current.java.com.google.protobuf.kotlin_only_for_use_in_proto_generated_code_its_generator_and_tests.kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.9999, expected version is 1.7.1.
e: E:/Android Studios/Gradle/.gradle/caches/transforms-3/6fecbd83857dd01e1c1629b6cc29fa28/transformed/jetified-play-services-ads-23.4.0-api.jar!/META-INF/third_party.java_src.protobuf.current.java.com.google.protobuf.kotlin_shared_runtime.kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.9999, expected version is 1.7.1.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:compileReleaseKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction
   > Compilation error. See log for more details

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

Flutter Doctor:
Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, 3.24.1, on Microsoft Windows [Version 10.0.22635.4371], locale en-US)
[√] Windows Version (Installed version of Windows is version 10 or higher)
[√] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
[√] Chrome - develop for the web
[√] Visual Studio - develop Windows apps (Visual Studio Community 2022 17.8.0)
[√] Android Studio (version 2024.1)
[√] VS Code (version 1.94.2)
[√] Connected device (3 available)
[√] Network resources

• No issues found!

Kotlin Version (setting.gradle)
plugins {
    id "dev.flutter.flutter-plugin-loader" version "1.0.0"
    id "com.android.application" version "7.3.0" apply false
    id "org.jetbrains.kotlin.android" version "1.7.10" apply false
}

Hi @md-rifatkhan, it looks you're using an incompatible kotlin version. Try using 1.9.0


Ability to use custom revival in JSON parse

For example here: https://github.com/nodefluent/node-sinek/blob/10296469e7eca9f5e4b801e23b7e3b0ee9c9587e/lib/librdkafka/NConsumer.js#L448
need to use custom revival for custom json parsing

you can###  simply tell sinek to not parse the values to json by passing false for the toJSON argument. consume(syncEvent = null, asString = true, asJSON = false, options = {})

this way you will be able to handle the parsing of messages yourself

Ok, thanks :+1:


Add mechanism to report errors

Right now we have the OnError extension to TaskBuilder that catches an error and let the script handle it (or rethrow it). But the problem with this is that it does not work well if we want to preserve the stack trace. Maybe we could implement a mechanism that let us act on an error but not recover from it.
Original question: https://twitter.com/RichardSimp/status/542791945764892672

Added this is PR #145. Good to merge?


Test probability distribution matches the expected probabilites

Follows are my observation, but can be more than these:

Unexpected actions compared to baseline
Unexpect n_contacts (negative values)

It's understandable that the hypotheses are arbitrarily set based on the LA's input, but this also suggests that the hypothesis parameters setup should be considered carefully.

After a careful evaluation of this task, I think this is not a reasonable task. The reason for this is that the probability strictly depends on the matrices which are defined by the user. The process for calculating it is correct, but more than having a v. trivial test in which we compare expected vs obtained probabilities (which I don't think is a useful test as the calculation is very trivial) I don't think this brings us a bigger advantage

Let's close it for now but I may want to look back at it after we have a complete simulation. In that case, if we observe too many conflicts, I may think about either rejecting some baselines or revising the hypothesis.


[FEAT] Rebuild command that ignores build state

Is your feature request related to a problem? Please describe.
Sometimes my projects need to be rebuilt even though yarn.build doesn't recognize it. Sometimes external factors changed that have an outcome on the build, that are not easily deduced.

Describe alternatives you've considered
Deleting the build cache before running yarn build, but that deletes the cache for all modules, not just the target. And it's not as nice as a purpose-built command.

Bummer: https://yarnpkg.com/cli/rebuild 😄

Ooh, try yarn build --ignore-cache, I added that recently. Can also be done on a targeted build so yarn build packages/example --ignore-cache
I'm gonna find some time soon to write out some detailed documentation.

That works very well. I don't think I need anything else for this 😄


Add Undistortion filter

Just a high level comment: I think it would make sense to separate the "undistortion" filter loading from disk, from the function that applies it. This would also eliminate the work of generating the lut. You could instead pass in the loaded LUT.

Hi @cpehle and @Jegp
I closed this pull request and opened #48 instead. We can discuss how to handle the LUT when more than one mapping needs to be done (undistortion, rotation, spatial sampling).


Add Homescreen layout

Please add the launcher page.

The home screen should look as in the below wireframe.
https://wireframe.cc/MkQ8BU


Quicksilver is not codesigned

For previous discussions, see #2555
Quicksilver is currently not codesigned on release, causing issues with users opening it on their computer.
Attempts were made to fix codesigning in #2647, however those changes only codesign the app and not the DMG. Currently outstanding is codesigning the DMG.
This is the main blocking issue before we can get 2.0 out.

I'd like to continue working on this.
$ xcrun notarytool submit Quicksilver\ 1.6.1.dmg --wait --team-id '...' --apple-id '...' --password '...'
Conducting pre-submission checks for Quicksilver 1.6.1.dmg and initiating connection to the Apple notary service...
Error: HTTP status code: 403. Invalid or inaccessible developer team ID for the provided Apple ID. Ensure the Team ID is correct and that you are a member of that team.

@skurfer would you add me to your Apple "team," which should allow me to sign using my own ID and password?
Based on https://help.apple.com/developer-account/#/dev3e8818774 it should be:
https://developer.apple.com/account ->  People -> Manage Users; my name and Apple ID from email address we've used for correspondence.

I don’t see “People”. Maybe because I have an individual membership and not a business?

Ah, that makes sense.

If you’re enrolled in the Apple Developer Enterprise Program...

WOOHOO! Got it.

What a relief.
@skurfer @pjrobertson can you guys take a look at https://github.com/quicksilver/Quicksilver/actions/runs/1913370728?
I think the hard part (of signing) is done, but I'm sure there are a few more tweaks before merging. Specifically, I'm going to do a little tinkering tomorrow with (fake) repo secrets and convince myself of the security here. Again, I think limiting the qssign step to tags instead of all pull requests should go a long way here.
Also, I'd like some feedback on https://github.com/quicksilver/Quicksilver/pull/2655#issuecomment-1054379715 -- specifically I think we'll probably want to continue the current logic for naming the DMG (the version part), but I think we'll likely need to manually keep track of the git tag to have it properly named in the file uploaded to releases. Will tinker with this as well.
Good progress though, I'm psyched.

Whoa! Notarization works and the DMG is accepted. Nice work! (I tried building and notarizing locally as well and got the same result.)
What’s with the notarytool crash? Was it on one of the status checks? Because the process obviously worked.
One small thing: My keychain profile is called “Quicksilver Notarization”. Can you make that an environment variable that just defaults to “Quicksilver” instead of hard-coding it?

As an alternative, we could take 1.6.1 from the tag, which would give us some flexibility to e.g.: git tag 1.6.1-hotfix && git push --tags -> Quicksilver 1.6.1-hotfix.dmg

What’s the use case? Would we ever want to release something with a version number that looked like that? Or would that only affect the DMG filename and not the app’s version?
FYI, the version ultimately comes from QS_INFO_VERSION in Configuration/Developer, not Info.plist.

Wooh! DMG and .app all verify correctly. Great work Nate!
As for triggering release builds, tags could work, but I still think simply pushing a commit “RELEASE” to master is simple enough. Some other thoughts in favour of this:

I think it’s more readable to those visiting the repo - they can see the release info right in the commit history
I’m not a big fan of how Github displays tags, as I think it can be confusing for users: e.g. I go to download what looks like version 1.6.1 (v1.6.1.tar.gz) of Quicksilver and it ends up being a load of jumbled code.
As Rob pointed out - the version number doesn’t come from the tag itself, but from the QS_INFO_VERSION val - so by just pushing a commit to master, we wouldn’t need to actually create anything new.

I would also say we stay away from the idea of non-conforming naming/version numbers: e.g. ‘1.6.1-hotfix’ - I think that may just cause headaches down the line.
But tags vs. commit message - I could go either way really.
 Looks like they were created by Nate. Can those be deleted?

On 1 Mar 2022, at 10:13, Rob McBroom @.***> wrote:
Whoa! Notarization works and the DMG is accepted. Nice work! (I tried building and notarizing locally as well and got the same result.)
What’s with the notarytool crash? Was it on one of the status checks? Because the process obviously worked.
One small thing: My keychain profile is called “Quicksilver Notarization”. Can you make that an environment variable that just defaults to “Quicksilver” instead of hard-coding it?
As an alternative, we could take 1.6.1 from the tag, which would give us some flexibility to e.g.: git tag 1.6.1-hotfix && git push --tags -> Quicksilver 1.6.1-hotfix.dmg
What’s the use case? Would we ever want to release something with a version number that looked like that? Or would that only affect the DMG filename and not the app’s version?
FYI, the version ultimately comes from QS_INFO_VERSION in Configuration/Developer, not Info.plist.
—
Reply to this email directly, view it on GitHub https://github.com/quicksilver/Quicksilver/issues/2654#issuecomment-1054911415, or unsubscribe https://github.com/notifications/unsubscribe-auth/AABEXH2MRVW2B7C2AJYOHATU5QTTNANCNFSM5PDFSMCA.
Triage notifications on the go with GitHub Mobile for iOS https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675 or Android https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.
You are receiving this because you were mentioned.

Security:
Their overview is pretty good: https://docs.github.com/en/actions/security-guides/security-hardening-for-github-actions
It covers topics like code injection via maliciously crafted PR titles (e.g. pull request title a"; ls $GITHUB_WORKSPACE"), masking secret values in logs, and requiring specific privileges for PRs that modify files in github/workflows via CODEOWNERS:
https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners

I added a CODEOWNERS file to /.github to protect workflows from alteration
I added a fake secret (now deleted) and made a few PR pushes to see if I could leak it
It seems difficult to leak secrets in the logs visible in the WebUI:

These are all masked:

echo "${{ secrets.QS_FAKE_SECRET }}"
echo -n "${{ secrets.QS_FAKE_SECRET }}"
QS_SECRET="${{ secrets.QS_FAKE_SECRET }}"; echo "$QS_SECRET"
QS_SECRET="${{ secrets.QS_FAKE_SECRET }}"; bash -c 'echo "$QS_SECRET"'

It is unsurprisingly not difficult to leak in artifacts:

echo "${{ secrets.QS_FAKE_SECRET }}" > my_secret
add an action to persist artifact my_secret
download artifact, contains secret in plain text

I also used a separate account that I have, created a new repo, and then issues a PR from my main account that added a file to .github/workflows/ in order to simulate someone creating a new action / see what would happen in the situation of a malicious PR.
It does note on the page for managing secrets:

Secrets are environment variables that are encrypted. Anyone with collaborator access to this repository can use these secrets for Actions.
Secrets are not passed to workflows that are triggered by a pull request from a fork.

In keeping with this, in my testing, the secret was blank when the action was run from a PR sent in by a user that did not have write access to the test repository.
So I think this all seems pretty good.

@skurfer

What’s with the notarytool crash?

I have no idea, wasn't really sure how to debug it either.

My keychain profile is called “Quicksilver Notarization”. Can you make that an environment variable that just defaults to “Quicksilver” instead of hard-coding it?

How about I just make it default to Quicksilver Notarization? It might as well default to yours, since none of us have the setup for notarization (you're the only one that should be able to successfully run qssign locally).
dc6cb77dab02e328b0fc4152d868a989417a38ac

What’s the use case? Would we ever want to release something with a version number that looked like that?

For a beta release, for example.

Or would that only affect the DMG filename and not the app’s version?

I would think both -- continuing the example of a beta release, the DMG to make it obvious when a user goes through their downloads folder a month later  that this was Quicksilver 2.0-beta.dmg, and in the app version for use in submitting logs or crash reports.

FYI, the version ultimately comes from QS_INFO_VERSION in Configuration/Developer, not Info.plist.

Right, gotcha.
I don't think the tag naming thing is particularly important, I'm fine going without if there's not a terrible lot of enthusiasm. We can always revisit later, it shouldn't hold us back.

As for triggering release builds, tags could work, but I still think simply pushing a commit “RELEASE” to master is simple enough. Some other thoughts in favour of this:

I think it’s more readable to those visiting the repo - they can see the release info right in the commit history
I’m not a big fan of how Github displays tags, as I think it can be confusing for users: e.g. I go to download what looks like version 1.6.1 (v1.6.1.tar.gz) of Quicksilver and it ends up being a load of jumbled code.
As Rob pointed out - the version number doesn’t come from the tag itself, but from the QS_INFO_VERSION val - so by just pushing a commit to master, we wouldn’t need to actually create anything new.

To clarify -- the release itself will actually go to the Releases tab. The action by default uses the tag name as the release name; I'm not sure (though I can try to figure out) how to run arbitrary code in the Release action to scrape the name from e.g. xcodebuild -showBuildSettings.

I would also say we stay away from the idea of non-conforming naming/version numbers: e.g. ‘1.6.1-hotfix’ - I think that may just cause headaches down the line.

No problem, we can revisit if we want to consider for beta testing at some point.

There are multiple artefacts here: https://github.com/quicksilver/Quicksilver/actions/runs/1913370728 Ideally there’d just be the DMG

I'm not sure I agree -- the way I see it, the build artifacts serve a few purposes:

to pass the raw materials from the build action to the sign action (DMG_INGREDIENTS)
to allow us to debug build issues and behavior without necessarily having to build locally

this is why I included the build settings there, though on second though I think I'll move this into DMG_INGREDIENTS and just move it back out before building the DMG from the directory
Example: user reports an issue. We can make a change, push to a branch, have the user download and run the build qs.app artifact to see if the issue is resolved.

Additionally, IMO we do not generally want to build the full codesigned dmg for all PRs -- in part because these are all officially signed. In my mind, it would make sense to only really sign a release-quality product. Perhaps I'm being too cautious here, but I wouldn't want some incompletely considered code from a feature branch be in the wild with an official signature on it. As a side-note, I'd previously had some concerns about users creating a malicious PR that could get signed (and could jeopardize the legitimacy of the cert if Apple caught wind), but it looks like secrets are empty for non-contributor PRs, so it should just fail.
So I think the tags and build artifacts solve a few issues in a pretty easy way and have a few advantages:

I can limit the sign action to run only on a new tag, so code that is "not quite ready" doesn't carry an official signature
tags can be GPG signed
a tag provide a really easy way to provide the release name
I think of tags as the de-facto way to check out a release build from a repo; git checkout "$(git tag --sort=creatordate | tail -n 1)" is a pretty common move when I'm building from source.

 Looks like they were created by Nate. Can those be deleted?

Had forgotten about those. I'll take a look.

 Looks like they were created by Nate. Can those be deleted?

Done
mapfile -t tags < <(git tag --sort=creatordate --format='%(authorname) %(refname:lstrip=2)' |
  awk '/^Nathan Henrie/ { print $NF }')

for tag in "${tags[@]}"; do
  git tag --delete "${tag}"
  git push origin :refs/tags/"${tag}"
done

Re: spaces in filename, I bet it's this, which references https://docs.github.com/en/rest/reference/releases#upload-a-release-asset:

GitHub renames asset filenames that have special characters, non-alphanumeric characters, and leading or trailing periods.

Oh, and just double checking from the downloaded dmg:
$ file Contents/MacOS/Quicksilver
Contents/MacOS/Quicksilver: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64:Mach-O 64-bit executable arm64]
Contents/MacOS/Quicksilver (for architecture x86_64):	Mach-O 64-bit executable x86_64
Contents/MacOS/Quicksilver (for architecture arm64):	Mach-O 64-bit executable arm64
$ file ./Contents/Resources/QSDroplet.app/Contents/MacOS/QSDroplet
./Contents/Resources/QSDroplet.app/Contents/MacOS/QSDroplet: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64:Mach-O 64-bit executable arm64]
./Contents/Resources/QSDroplet.app/Contents/MacOS/QSDroplet (for architecture x86_64):	Mach-O 64-bit executable x86_64
./Contents/Resources/QSDroplet.app/Contents/MacOS/QSDroplet (for architecture arm64):	Mach-O 64-bit executable arm64

@pjrobertson can make arm64 builds now :)
I'm still working on a couple minor issues:

[ ] can we get rid of the ugly but perhaps unimportant NSFileHandleOperationException Broken pipe error?
[ ] Do we need to --force codesigning?

Looks good!
Releases with source code + a DMG are good, as long as the source code files are named descriptively (Source Code (zip) and Source Code (tar.gz) work.

In my mind, it would make sense to only really sign a release-quality product.

Agreed. Signed release only on a new tag or a special commit to master. Looks like you've gone with tag - looks good.

To clarify -- the release itself will actually go to the Releases tab.

OK, that's good. I like that

(In reply to 'there should only be a DMG in artefacts): I'm not sure I agree -- the way I see it, the build artifacts serve a few purposes...

OK, no problem then. If we're not expecting average users to go find artefacts, and we have a 'Release', then I'm fine with this.

@pjrobertson can make arm64 builds now :)

For Quicksilver, but not plugins I guess ;-) hahaha. Jokes aside: I think we should stick to one person in charge of the release process. Historically it's been Rob.
With that said, there are a few steps in the release process page which are still manual (maybe that's best for now):

upload to the website with qs-push-plugin
Pull the latest transifex changes
Update gh-pages so this page gets updated
Update download.php on qsapp.com

One other point:

Can we rename ci.yml (and the name: build to something a little more descriptive?)

For Quicksilver, but not plugins I guess

I will probably create a generic GitHub Actions workflow for plugins, perhaps then :)

... which are still manual (maybe that's best for now):

👍

Pull the latest transifex changes

I don't know what a transifex is (yet), but looks like https://www.transifex.net/projects/p/quicksilver/ is down.
$ dig +short 'transifex.net'
$

https://downforeveryoneorjustme.com/transifex.net?proto=https&www=1

Can we rename ci.yml (and the name: build to something a little more descriptive?)

Creativity is often not my strong suit. How about github-actions.yml and name: xcodebuild? I'm open to suggestions here :)

What’s with the notarytool crash? Was it on one of the status checks?

@skurfer Broken pipe error is resolved, seems to have been due to notarytool ... | awk '{ print $2; exit }', where the early exit was because the submission ID appears multiple times, but clearly notarytool didn't like being hung up on. Changed to just overwrite a variable id and only print it once (at the END).

So I think all my major issues and concerns have been addressed at this point. I've rebased, squashed, and force-pushed, so I think https://github.com/quicksilver/Quicksilver/pull/2655 is ready to merge, which should close this issue.
I'm happy to make more changes if desired -- just let me know!


Update Description.ko.md

Content of this PR: Use more official term used by Apple

Sorry, I forgot to merge this PR.
The change will be applied when CotEditor 5.0.1 is released.


Upgrade Intern for better ES6 compat

This is currently broken. See https://github.com/theintern/intern/issues/115#issuecomment-137567526

The Intern issue appears to have been fixed in 3.0.3. This makes the devbox build very slow (compiling PhantomJS takes forever) though this should be resolved by https://github.com/candy-chat/candy/pull/418.

Seems to be only the functional tests on Safari which fail now. Not sure why yet.


TextInput: Scrolling in to view not taking padding into consideration

Description
When using a multiline TextInput and writing content, the text itself will stay in view, but the padding below the content is not visible so the text is barely visible.
React Native version:
react: ^16.13.1 => 16.13.1
react-native: ^0.63.0 => 0.63.0

Steps To Reproduce

Create a TextInput component with multiline={true} and a fixed height so that it stays above the keyboard
Add a 40px padding to the TextInput
Enter content that should overflow the visible area.
Watch as you get to the bottom and your padding disappears until you manually scroll

Expected Results
It should allow your padding (or some other value) to push the text further up into the text view so it's easier to see (see Notes, Mail, etc. apps for examples of what it should do).
Snack, code example, screenshot, or link to a repository:
<TextInput style={{ height: 200, padding: 40 }} multiline={true} />

Gif of the issue in action

I can see what you want here, and I can also see how it's working correctly from a certain point of view. The scroll into view is based on the caret which never pushes down into that padding that you've provided. What you really want is for it to be scrolled additionally into view with some extra space. The question is whether that should happen at all points in the text or just at the end. This is tricky. I don't know if the padding should be included or if there is another path to get the larger scroll into view window.

Totally agree, it's doing what it should be in that it's keeping my text in view :)
On the other hand, it seems like there should be some way to add either additional vertical offset under the text so it's not tucked so close to the bottom, or that padding should be taken into consideration when scrolling down. I don't necessarily know the best way to handle it, and it may honestly end up as a feature request for a verticalScrollOffset or something along those lines if this is the intended behavior. Looking at most apps with full height text inputs (notes, mail, Notion, etc.) it seems like most of them have some sort of distance between the keyboard and the bottom of the text.
I tried every way I could think of to do that but couldn't find a way using TextInput.

@mikefogg was this behaving the same for you on Android and iOS? Trying to split out what's the native behavior here versus what RN should do.

Hey @chrisglein! Sorry about the delay there, unfortunately, I can't easily test it out on Android (my environment isn't set up for that quite yet). If this is waiting on me to get some more details on that, I'll prioritize and try and get it done.
I did manage to create the same type of experience on iOS and honestly, this seems like this is just "how it works" on iOS too... interesting.

Side note, the swift code for this is:
import SwiftUI

struct TextView: UIViewRepresentable {
    @Binding var text: String

    func makeUIView(context: Context) -> UITextView {
        var textView = UITextView()
        textView.textContainerInset = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)
        textView.backgroundColor = UIColor.init(red: 0.90, green: 0.90, blue: 0.90, alpha: 1.0)
        textView.font = UIFont.systemFont(ofSize: 20.0)
        return textView
    }

    func updateUIView(_ uiView: UITextView, context: Context) {
        uiView.text = text
    }
}

struct ContentView: View {
    @State var text = ""

    var body: some View {
        TextView(text: $text).frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity)
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

I wanted to ask if you still experience this issue.
I'm planning to do 1-2 months of opensource and I'm preparing a list of tasks.
I have been contributing to facebook/react-native for 4 years and I specialize on the Text/TextInput components.
Thanks a lot