Fix escape function for POSIX systems in SCons.

This issue was originally created at: 2011-05-25 02:58:29.
This issue was reported by: sesarr.
sesarr said at 2011-05-25 02:58:29

Default escape function for POSIX systems in SCons breaks on filenames containing special chars like ( ) $  because it tries to escape them inside quotation marks.

   $ echo "\(\)" # Wrong
   \(\)

   $ echo '()' # OK
   ()

diff --git a/scons/scons-2.0.1/scons-local-2.0.1/SCons/Platform/posix.py
b/scons/scons-2.0.1/scons-local-2.0.1/SCons/Platform/posix.py
index 87de9df..aa6fedd 100644
--- a/scons/scons-2.0.1/scons-local-2.0.1/SCons/Platform/posix.py
+++ b/scons/scons-2.0.1/scons-local-2.0.1/SCons/Platform/posix.py
@@ -49,14 +49,7 @@ exitvalmap = {

 def escape(arg):
     "escape shell special characters"
-    slash = '\\'
-    special = '"$()'
-
-    arg = arg.replace(slash, slash+slash)
-    for c in special:
-        arg = arg.replace(c, slash+c)
-
-    return '"' + arg + '"'
+    return "'" + arg.replace("'", "'\''") + "'"

 def exec_system(l, env):
     stat = os.system(' '.join(l))

Looks like the code has changed here - the collections of special no longer includes parens, but I think the underlying comment is correct - since single and double quotes differ somewhat for POSIX shells, the escaped string should be forced to be single-quoted, not double-quoted.  shlex.quote does this (after using a regex to not-bother if there are no characters that actually need escaping):
    return "'" + s.replace("'", "'\"'\"'") + "'"

@mwichmann Should we switch to use shlex.quote?

I probably would - it's not "portable", but since it's only intended for the Platform/posix module, that's not a problem.

Note that the problem complained about here (escaping of parens) was probably fixed by ed53a2e548, which referenced a different issue, #2225, so I think we can close this in any case, up to @bdbaddog whether we further switch to using the (presumably) more tested routine from shlex.


Check enumerated values and defined terms

This came up in a private mail - add the capability to check tag values against enumerated values and defined terms in the DICOM standard.

I will not add checking defined terms, as they only define a subset of the possible values, and it is not possible to know if an undefined value is user-defined.


Possibly add SEH wrapping through linked libs

Suggestion
With the relatively new windows-targets crate already linking in target-specific libs, and all of the C definitions in the baseline dir, it should be possible to provide some wrapping mechanism similar to what the stub in microSEH does with wrapping C calls in the corresponding __try blocks to translate SEH to Rust Errors. LLVM already supports SEH on Windows and GCC supports it for AMD64 (there's some talk of x86 SEH online, but haven't dug too deep and if it's implemented it might not have a release yet). This would make a lot of things on Windows much more ergonomic (including a lot of unsafe functions in the windows and windows-sys crates) and less prone to crashing from an error generated outside of the Rust boundary.
Naturally different targets would come with different mechanisms for handling the exceptions, so the targets crate seems like a perfect place to add it in; all it'd need to do is send back a continue status to prevent further stack unwinding or crashing, and then it can forward the internal error information in a Rust struct (possibly #[rep(C)] so as to not need modifications to the underlying data)

Adding some folks who may have some comments on SEH in Rust as well as some who are currently using a mix of Rust and C to make it work. @sivadeilra @dpaoliello @zadjii-msft

As for me, we don't have metadata at the moment that calls out which functions use SEH so I don't think this is very actionable at the moment.
https://kennykerr.ca/rust-getting-started/how-are-crates-built.html

I'm somewhat surprised that something like that isn't tracked through the metadata yet; I'd assume the information is relevant internally and the win32 C/C++ docs do make mention of using the __try handlers in some places. Should I open an issue there to ask for including it in the metadata output?

I can transfer this issue to the Win32 metadata repo for discussion.


When npcs and companions go to sit down they go into t-pose

User Report

There is not enough information here to say if this is a real issue or not.

Needs more testing and reporting, I cannot replicate this issue and from what I can see no one else has either I will leave this open for now

Closing this, the person who reported the issue is being uncooperative, not to mention I cannot replicate the issue, this appears to be either a mod conflict or a vanilla bug, but simply put none of the research I have done indicates this is an issue with our mod.

Agreed.


setting our own icon to FAB button , doesn't fit the FAB button circle.

I am setting my own icon to FAB.
but it is not fitting in the FAB button , instead it is showing padding to the radius.
Sharing the image of the view.
As you can see the icon inside the FAB and white space outside the remaining area.

Please guide me through.

Can you just get .svg of what should be in the center of the fab, that is of those 3 dots? Android automatically shrinks your drawable to just fit the middle of the fab.
Set the color you wish for the rest of the fab.


The field pods is invalid

When deploying to CRC (OCP 4.13.4) and creating a minimal cr the instance shows "The field pods is invalid." under Pod Status and no pods are created.
Is there a known resolution for this?

Rebuilding fixed it.


Update and structure dev docs

Signed-off-by: Frank A. Zdarsky<EMAIL_ADDRESS>

@fzdarsky sorry to steal this from you but I noticed the build wasn't going through cleanly. @mangelajo or @sallyom can you takeover review since Frank and I both modified this


Update Generic Pages “portfolio”

Automatically generated by Netlify CMS

👷 Deploy Preview for tech-works-for-us processing.

Name
Link

🔨 Latest commit
75cd1223489150474cd2774c5bdb9bf9d8f2333f

🔍 Latest deploy log
https://app.netlify.com/sites/tech-works-for-us/deploys/63e15c29f320ce0009d86a74


[JavaScript] Refactor &  Compress Long

Refactor the code generator

Currently, JavaScript can only register a Object by Type.object, because the generator is too simple
Primitive generator of types like string、number can't be inlined in the holder collection, which cause necessary polymorphic that affect the performance

Enhancement performance

Currently, Buffer.latin1Slice would transfer from native code generated by JIT to v8 runtime, This has a significant impact on performance, so we use String.fromCharCode to create little string when the string length is less than 15.  It is a magic number, but I have tested it and it works fine.

Improve
When useSliceString is disabled, the performance of deserialization improves by 100%. It is 3 times faster than native JSON and twice as fast as protobuf.
When useSliceString is enabled, the performance of deserialization improves by 30%. It is 5 times faster than native JSON and 3 times faster than protobuf.
Before:
Disable useSliceString

Enable useSliceString

After:
Disable useSliceString

Enable useSliceString

@bytemain  Hi, could you please take a review, It remove the limit which mentioned in #1304

I checked the snapshot and donot sure is this a problem?

fantasitic work, this is the thing I wanted of a serialization framework

it seem that this is not a problem, all the call will happen in this closure

I checked the snapshot and donot sure is this a problem?

This is not a problem, but declare the readInner before the read is better. I will change it

@bytemain Hi, could you please take a review, It remove the limit which mentioned in #1304

I think you can add some test case in the #1304:

https://github.com/apache/incubator-fury/pull/1304/files#diff-9d33aa5fce03357373ad7c54b9636452600284f3e7153064438e277158a3e9cfR60

Looks good to me, but has some typo.
And we can improve the style of generated code, this can be done in further

Looks good to me, but has some typo.
And we can improve the style of generated code, this can be done in further

I fixed it and added an afterCodeGenerated hook to allow users to format the code. Formatting is not a default action, as I believe we should keep things simple and avoid including too many dependencies.


Conditional Dependencies

Improvement Description
View has several dependencies that are only used for niche features. View could install these conditionally based on the configuration. For example, if the database (unfinished but see #10) is postgres, view.py will then leverage pip and install the driver. If not, it remains uninstalled, as it seems silly to have dependencies that not all users need. Originally, attempt_import addressed this issue but that proved to be buggy and a headache.
This may also introduce a dependencies and auto_install setting in the configuration.
Improvement Request Example API
dependencies = ["pymongo"]
auto_install = false  # true by default

Anything else?
No response

Notice about this API
As this API comes near to being on the master branch, it should be noted that preinstalling dependencies (i.e., putting view's dependencies in the pyproject.toml) should be preferred over leveraging the conditional installation API at runtime.
This feature is meant generally to help with the batteries-detachable philosophy. For example, in #118, if something from ReactPy were to be needed, it would be installed via this API, but some sort of parser library (in the context of view.py, ujson would be a good example) for use in parsing requests, would be listed as a dependency in pyproject.toml and not something to be used via this API.
There is a chance that this will be deprecated in the future. It's not exactly View's place to start taking pip's job, so possibly just something like pip install view.py[react] would be a better solution.
However, before this has any chance of being marked for removal, a better system for managing dependencies should be created in View. Possibly something like a view dep command that messes with the pyproject.toml?

See RFC 1 #122


Repositioning of the glossary

As a response to this issue, here's the pull request to reposition the glossary. The glossary will be displayed at the bottom of the page instead of on top, but there's still a hyperlink below the search bar that will lead to the glossary, so you don't have to scroll all the way down.
Comparison of the top of the new FAQ page and the old FAQ page:

@larswmh Thanks.

@larswmh
Thank you for this PR! Do you see a way to get some more space between the "Geklärt" text and the headline of the Glossary?

Right now it looks a bit tight, I'd say 😅

@Ein-Tim thanks for the information! I'll try to find a solution for this as soon as possible. The spacing on my fullscreen window was perfectly fine when I tested it before my pull request, but now if it's a smaller size window the spacing gets tighter and eventually the sidebar is inside of the glossary

It's actually unreadable on a mobile device in landscape mode.

Thanks for both of your comments. The next commit will fix the sidebar going into the glossary, reassuring readability on smaller monitors or landscape mode on mobile devices for example. As for the other problems that this brought to my attention, like the Glossary title being unaligned with FAQ section titles, or the sidebar disappearing in the footer (which seems to have been an issue before too), I can't come up with a solution right now.

Thanks for taking care of it @larswmh!


FEATURE: Assigning functionality to cloud plants, such as purpose in puzzles.

CloudPlant class has been created, containing variables and getter and setter methods.


Fix doc comment on AssetActionMinimal

Objective
The doc comment on AssetActionMinimal links to itself instead of AssetAction

I think the second link can be entirely removed. We don't need to link twice in the same sentence. We can go even one step further and reword the sentence to avoid mentioning the name twice.

This repetition is present on AssetMetaMinimal, AssetActionMinimal, ProcessedInfoMinimal and arguably AssetMetaDyn, so it could have been intentional (maybe for clarity).
I personally don't care either way, but if you do want that change, I should update all of them. I'll think of an alternative phrasing, feel free to make suggestions.

Since the scope of this PR is quite small, I think you can re-scope it to remove all the repetitions. It may be reworded to something like:
/// Minimal version of [`X`].
///
/// Speeds up or enables serialization where the non-minimal version of the item is not needed.

Also keep in mind that when splitting in two sentences, repetition is less of a problem. In any case, there shouldn't be a double link.

This PR can be closed. The comment has been updated sometime around Asset V2. AssetMetaMinimal

This PR can be closed. The comment has been updated sometime around Asset V2.

This PR is post-assets-v2 and is about AssetActionMinimal rather than AssetMetaMinimal.

This PR is post-assets-v2 and is about AssetActionMinimal rather than AssetMetaMinimal.

Whoops! My bad 😅

rebasing to get new required ci jobs


fix in UIBundle:view.html.twig

important when entity doesn't have "createdAt" or "updatedAt"

thanks @apoberez, just for testing purposes could you please describe how to reproduce the issue this PR is fixing

if I have new entity without fields createdAt|updatedAt or they have other names such as "created" view will fail to render this entity

we can define some interface like "Timestampable" for example to unify this across hole project

Hi @apoberez,
your changes were successfully applied using patch of current PR because the source repository is unknown. Thanks for your contribution!


Update meta.yaml

Set lower bound for r-ravetools to >=0.1.0

Not sure how it is configured, but I also don't have write permissions here. But I can directly edit and push to the specific autotick branch. I've added the min bound on that branch, so go ahead and close this.


[BUG] Calendar events without location data are being skipped when parsing

Describe the bug
This may have been a previous check to ensure that location data is present for calendar events. Currently, if there is no location data in XML data, we are skipping parsing those events. This needs to be fixed.
To Reproduce
Steps to reproduce the behavior:

Set Calendar URL to https://xml.calendars.illinois.edu/eventXML13/6242.xml
For some of the events in this calendar, there is no location data as these are online events.
In SourceEvents, line 122, since there is no location data, these are skipped from parsing.
In events building block database, these events are not present.

Expected behavior
Since location is not a required field, calendar events without location should be parsed and stored in the database and based on the status, it needs to be either uploaded or updated in the events building block when using "Download" option.
Screenshots
Example event XML data:
<publicEventWS>
<calendarId>6242</calendarId>
<calendarName>Bike at Illinois Events</calendarName>
<eventId>33387595</eventId>
<recurrence>true</recurrence>
<recurrenceId>19390</recurrenceId>
<originatingCalendarId>6242</originatingCalendarId>
<originatingCalendarName>Bike at Illinois Events</originatingCalendarName>
<title>Bicycle Registration - Protect your bike!</title>
<titleURL>https://bike.illinois.edu/register-your-bike/</titleURL>
<eventType>Other</eventType>
<sponsor>Bike at Illinois</sponsor>
<dateDisplay>true</dateDisplay>
<startDate>10/12/2020</startDate>
<endDate>10/12/2020</endDate>
<timeType>ALL_DAY</timeType>
<startTime/>
<endTime/>
<endTimeLabel/>
<location/>
<description>
Bike registration is easy and mandatory!

All bicycles on campus must be registered in the University’s new National Bicycle Registration system. Your bicycle is not protected until you attach the registration tag (529 Shield) to your bike. There is a one-time $10 registration fee per bicycle to purchase the Shield. Registering your bicycle will increase the chance of recovering and returning your bicycle in case it is stolen. Learn more about bicycle registration here or go to go.illinois.edu/mybike.

The Registration Fee funds will help sustain the community-wide Project 529 bicycle registration system, contribute towards bicycle program on-campus and administrative costs. Learn the benefits of registering your bicycle with the University’s Project 529 National Bike Registration system.

Step-by-step instruction on how to register your bicycle:

Step – 1: Pay the one-time bicycle registration fee here – Bicycle Registration Fee form

Step – 2: Proceed to register your bicycle on the Project 529 Garage website using the link in the Bike Registration Fee payment confirmation email

Step – 3: Collect your 529 Shield from one of the several Shield pick-up locations, and install it on the frame of your bicycle. Enter the Shield ID on your bicycle profile to complete the registration

</description>
<speaker/>
<registrationLabel>Register Your Bike</registrationLabel>
<registrationURL>https://bike.illinois.edu/register-your-bike/</registrationURL>
<contactName>Sarthak Prasad</contactName>
<EMAIL_ADDRESS><contactPhone/>
<cost>$10</cost>
<EMAIL_ADDRESS><createdDate>9/2/2020</createdDate>
<editedBy/>
<editedDate>9/2/2020</editedDate>
Bike registration is easy and mandatory! Register now to protect your bicycle. All bicycles on campus must be registered in the University’s new National Bicycle Registration system. Your bicycle is not protected until you attach the registration tag (529 Shield) to your bike. There is a one-time $10 registration fee per bicycle.
<audienceFacultyStaff>true</audienceFacultyStaff>
<audienceStudents>true</audienceStudents>
<audiencePublic>true</audiencePublic>
<audienceAlumni>true</audienceAlumni>
<audienceParents>true</audienceParents>
<shareWithUrbanaEventsInChicagoArea>false</shareWithUrbanaEventsInChicagoArea>
<shareWithResearch>false</shareWithResearch>
<shareWithSpeakers>false</shareWithSpeakers>
<shareWithIllinoisMobileApp>true</shareWithIllinoisMobileApp>
<thumbImageUploaded>false</thumbImageUploaded>
<largeImageUploaded>false</largeImageUploaded>
<largeImageSize>0</largeImageSize>
<virtualEvent>true</virtualEvent>
</publicEventWS>

Additional context
Add any other context about the problem here.

<publicEventWS>
<calendarId>2622</calendarId>
<calendarName>Illinois ECE Calendar</calendarName>
<eventId>33399632</eventId>
<recurrence>false</recurrence>
<recurrenceId>0</recurrenceId>
<originatingCalendarId>2622</originatingCalendarId>
<originatingCalendarName>Illinois ECE Calendar</originatingCalendarName>
<title>West Monroe 101</title>
<titleURL/>
<eventType>Informational</eventType>
<sponsor>West Monroe</sponsor>
<dateDisplay>true</dateDisplay>
<startDate>1/27/2021</startDate>
<endDate>1/27/2021</endDate>
<timeType>START_AND_END_TIME</timeType>
<startTime>3:00 pm</startTime>
<endTime>4:00 pm</endTime>
<endTimeLabel/>
<location/>
<description>
West Monroe 101

Join our campus recruiters to learn about existing opportunities and what makes West Monroe a great place to work!

January 27, 2021 3:00pm - 4:00pm CT

 Sign Up Here

Event Description:

“Undeniably Different. Undeniable Results.” That’s the West Monroe motto and we aren’t just talking about our client deliverables. Find out firsthand what makes West Monroe different as a potential employer. From our cross-functional, collaborative teams to our structured mentorship and company culture - West Monroe will equip you with the resources and support which will result in in a one of-a-kind career. West Monroe is a people-first organization, which means our employees come first - always. During this session you’ll learn about what it means to join a medium-sized, culture rich organization that is committed to building the next generation of leaders.

</description>
<speaker/>
<registrationLabel/>
<registrationURL/>
<contactName/>
<contactEmail/>
<contactPhone/>
<cost/>
<EMAIL_ADDRESS><createdDate>1/15/2021</createdDate>
<editedBy/>
<editedDate>1/15/2021</editedDate>

<audienceFacultyStaff>false</audienceFacultyStaff>
<audienceStudents>true</audienceStudents>
<audiencePublic>false</audiencePublic>
<audienceAlumni>false</audienceAlumni>
<audienceParents>false</audienceParents>
<shareWithUrbanaEventsInChicagoArea>false</shareWithUrbanaEventsInChicagoArea>
<shareWithResearch>false</shareWithResearch>
<shareWithSpeakers>false</shareWithSpeakers>
<shareWithIllinoisMobileApp>true</shareWithIllinoisMobileApp>
<thumbImageUploaded>false</thumbImageUploaded>
<largeImageUploaded>false</largeImageUploaded>
<largeImageSize>0</largeImageSize>
<virtualEvent>false</virtualEvent>
</publicEventWS>

<publicEventWS>
<calendarId>2622</calendarId>
<calendarName>Illinois ECE Calendar</calendarName>
<eventId>33399632</eventId>
<recurrence>false</recurrence>
<recurrenceId>0</recurrenceId>
<originatingCalendarId>2622</originatingCalendarId>
<originatingCalendarName>Illinois ECE Calendar</originatingCalendarName>
<title>West Monroe 101</title>
<titleURL/>
<eventType>Informational</eventType>
<sponsor>West Monroe</sponsor>
<dateDisplay>true</dateDisplay>
<startDate>1/27/2021</startDate>
<endDate>1/27/2021</endDate>
<timeType>START_AND_END_TIME</timeType>
<startTime>3:00 pm</startTime>
<endTime>4:00 pm</endTime>
<endTimeLabel/>
<location/>
<description>
West Monroe 101

Join our campus recruiters to learn about existing opportunities and what makes West Monroe a great place to work!

January 27, 2021 3:00pm - 4:00pm CT

 Sign Up Here

Event Description:

“Undeniably Different. Undeniable Results.” That’s the West Monroe motto and we aren’t just talking about our client deliverables. Find out firsthand what makes West Monroe different as a potential employer. From our cross-functional, collaborative teams to our structured mentorship and company culture - West Monroe will equip you with the resources and support which will result in in a one of-a-kind career. West Monroe is a people-first organization, which means our employees come first - always. During this session you’ll learn about what it means to join a medium-sized, culture rich organization that is committed to building the next generation of leaders.

</description>
<speaker/>
<registrationLabel/>
<registrationURL/>
<contactName/>
<contactEmail/>
<contactPhone/>
<cost/>
<EMAIL_ADDRESS><createdDate>1/15/2021</createdDate>
<editedBy/>
<editedDate>1/15/2021</editedDate>

<audienceFacultyStaff>false</audienceFacultyStaff>
<audienceStudents>true</audienceStudents>
<audiencePublic>false</audiencePublic>
<audienceAlumni>false</audienceAlumni>
<audienceParents>false</audienceParents>
<shareWithUrbanaEventsInChicagoArea>false</shareWithUrbanaEventsInChicagoArea>
<shareWithResearch>false</shareWithResearch>
<shareWithSpeakers>false</shareWithSpeakers>
<shareWithIllinoisMobileApp>true</shareWithIllinoisMobileApp>
<thumbImageUploaded>false</thumbImageUploaded>
<largeImageUploaded>false</largeImageUploaded>
<largeImageSize>0</largeImageSize>
<virtualEvent>false</virtualEvent>
</publicEventWS>


Keyvault update param key_ops to key_operations

ADP meeting review meeting feedback to update param name key_ops to key_operations in keys and secrets client.

@samvaity @chlowell are we still tracking this for Preview 1?

Nevermind, saw that this is in PR already :).

Closed with #5993


[GLUTEN-2492][CH] fix posexplode cannot handle null value as argument

What changes were proposed in this pull request?
(Please fill in changes proposed in this fix)
(Fixes: #2492)
How was this patch tested?
(Please explain how this patch was tested. E.g. unit tests, integration tests, manual tests)
(If this patch involves UI changes, please attach a screenshot; otherwise, remove this)

===== Performance report for TPCH SF2000 with Velox backend, for reference only ====

query
log/native_3106_time.csv
log/native_master_09_11_2023_c93fea040_time.csv
difference
percentage

q1
44.61
44.05
-0.564
98.74%

q2
24.71
24.42
-0.294
98.81%

q3
38.33
37.16
-1.162
96.97%

q4
41.04
41.39
0.345
100.84%

q5
69.44
69.52
0.081
100.12%

q6
6.63
6.57
-0.055
99.17%

q7
86.73
83.17
-3.565
95.89%

q8
80.92
80.30
-0.616
99.24%

q9
115.69
117.13
1.438
101.24%

q10
47.47
47.78
0.311
100.66%

q11
19.52
21.01
1.494
107.65%

q12
24.77
26.08
1.311
105.29%

q13
49.74
50.52
0.772
101.55%

q14
17.76
13.64
-4.120
76.80%

q15
33.28
29.03
-4.249
87.23%

q16
15.72
16.10
0.381
102.42%

q17
119.40
119.95
0.552
100.46%

q18
162.40
162.64
0.243
100.15%

q19
12.37
12.83
0.459
103.71%

q20
29.83
29.04
-0.794
97.34%

q21
240.67
236.97
-3.700
98.46%

q22
15.69
15.62
-0.063
99.60%

total
1296.72
1284.93
-11.794
99.09%

map_from_arrays_unaligned is not exist in velox ?

map_from_arrays_unaligned is not exist in velox ?

yes, it's a specific function created to fix  https://github.com/oap-project/gluten/issues/2492


fix(controller): allow non superusers to manage their keys

Users were unable to remove their SSH keys. This PR fixes the Key management view configuration that was blocking the API access. The wrong view configuration was being inherited from api.views.BaseDeisViewSet.
Error using API directly:
$ http DELETE<EMAIL_ADDRESS>"Authorization:token <rochacon-token>"
HTTP/1.1 403 FORBIDDEN
Allow: GET, DELETE, HEAD, OPTIONS
Connection: keep-alive
Content-Encoding: gzip
Content-Type: application/json
DEIS_API_VERSION: 1.4
DEIS_PLATFORM_VERSION: 1.7.3
Date: Sat, 27 Jun 2015 00:58:41 GMT
Server: nginx/1.9.0
Transfer-Encoding: chunked
Vary: Accept-Encoding
X_DEIS_API_VERSION: 1.4
X_DEIS_PLATFORM_VERSION: 1.7.3

{
    "detail": "You do not have permission to perform this action."
}

Error using the CLI:
$ deis keys
=== rochacon Keys
<EMAIL_ADDRESS>ssh-rsa AAAAB3Nz...2eSfWk4irQ

$ deis keys:remove<EMAIL_ADDRESS>Removing<EMAIL_ADDRESS>SSH Key... 403 FORBIDDEN
Detail:
You do not have permission to perform this action.

Thanks for the contribution! Please ensure your commits follow our style guide. This code will be tested once a Deis maintainer reviews it.

Rebased branch to fix commit subject length and use latest master.

thanks for this! We're currently debugging issues with the integration tests right now (more than half are failing inconspicuously). We'll jump on this as soon as that's done. Thank you for your patience! :)

Aha, so it seems that the BaseDeisViewSet has the permission set of IsAppUser, which of course there's no app tied to a Key, in which case the key will fail to be updated.
Code LGTM! We just need to wait on our end to fix Jenkins.

Can admins still remove any user's key? I think admins should be able to remove a key, and a user should be able to remove his/her own key.

There is a IsOwnerOrAdmin permission set. Considering that admins had global access before, it only makes sense to keep that same behaviour, since there's no argument against it. @rochacon would you mind making that change?

@carmstrong @bacongobbler Agreed, admins must be able to remove users keys. I'll add a test for that and change the proper permission list.

Jenkins, add to whitelist.

Seems like admins were never able to delete users keys. I've made the following test and it breaks with the old permissions, the new ones and with IsOwnerOrAdmin.
I believe it is breaking due to this line in api.viewsets.OwnerViewSet
Test:
def test_admin_should_be_able_to_remove_users_keys(self):
    # Create Key with non superuser
    user = User.objects.get(username='autotest2')
    user_token = user.auth_token.key
    body = {'id'<EMAIL_ADDRESS>'public': RSA_PUBKEY}
    response = self.client.post('/v1/keys', json.dumps(body), content_type='application/json',
                                HTTP_AUTHORIZATION='token {}'.format(user_token))
    self.assertEqual(response.status_code, 201)
    # Use superuser to remove key
    admin = User.objects.get(username='autotest')
    admin_token = admin.auth_token.key
    response = self.client.delete('/v1/keys/{}'.format(body['id']),
                                  HTTP_AUTHORIZATION='token {}'.format(admin_token))
    self.assertEqual(response.status_code, 204)

In that case you may need something like the following in the KeyViewSet so it overrides the parent's behaviour. Good catch

@bacongobbler I wasn't sure if I should add this, since it looks like a new feature. Will override get_queryset and update the PR.

@bacongobbler @carmstrong, currently admins are not allowed to manage users keys. So, I'll not include this feature here.
I did started to implement this feature but there were some side-effects that deserves more UX design, such as admins listing all registered keys when using deis keys.
I'll open a new issue so we can discuss this.

I'll open a new issue so we can discuss this.

Sounds good to me. I created an issue (#3976) to ensure admins have proper permissions. Users and keys are two models of potentially many that they don't have proper access to.

@rochacon Could you try rebasing this? We merged some test fixes that will hopefully allow this to pass. Thanks!

@carmstrong Sure do, I'll rebase this and update the PR.
I have a draft of the issue for proper admin access, but got really busy and didn't opened it. I'll add some comments to #3976 with the initial work I did.

Rebased

@rochacon would you mind rebasing this once more? We had to fix up some of the stuff in master, specifically https://github.com/deis/deis/pull/3957 s what's blocking this PR from passing.

No problem @bacongobbler, rebased it
I see you guys released v1.8.0, I was hoping to have this fix in that version. Will the next release be the v1.9.0 milestone or is there a bugfix release planned?

since this isn't technically a bugfix it'll get into v1.9. Sorry about that!

Code LGTM. Note that this doesn't try to fix everything in this area: see #3976.

code LGTM. Thanks @rochacon :)

I'm back from vacations, nice to see this merged in! \o/


TLS-RPT report information missing

Documentation

Add information about TLS-RPT in general and related to MTA-STS to documentation

Test-PSMTASTSConfiguration

Add additional checks for TLS-RPT records to test function --> Must not be available for MTA-STS configuration to be valid

done by @BohrenAn . Thank you very much!


Allow that a query goes to a Query Group

Hi Guys,
At the moment it is not possible to say SET query_group TO 'low_priority' on the preactions option.
I assume that you open two connections for that. It should be possible to set this options because of timeouts and so on.

Seems like a reasonable feature to have. Feel free to submit a PR.


Typecheck path components

Type

[ ] Refactor
[x] Feature
[ ] Bug Fix
[ ] Optimization
[ ] Documentation Update

Description
I think in the next iteration it will be better to set the path and schema for it together in order to avoid storing useless PathInput in type parameters of HttpApiEndpoint
Related

Related Issue #
Closes #

Eventually I want to add something like this:
import { Schema } from "effect"

interface Endpoint<Name extends string, Path extends ReadonlyArray<Schema.Schema.Any>> {
  readonly name: Name
  readonly path: Path
}

type AnySchemaString = Schema.Schema<any, string, never> | Schema.Schema<any, string, any>

class HttpApiEndpoint {
  static get<Name extends string>(_name: Name): <const Path extends ReadonlyArray<AnySchemaString>>(
    strings: TemplateStringsArray,
    ...args: Path
  ) => Endpoint<Name, Path> {
    return (_strings, ..._args) => undefined as any
  }
}

export const endpoint: Endpoint<
  "findById",
  readonly [typeof Schema.NumberFromString]
> = HttpApiEndpoint.get("findById")`/api/${Schema.NumberFromString}`

Just needs to be explored further to see where the limitations are.

Yes - it's very elegant
the only point is that I would use aliases rather than positioning for components.
aliases seem to be more intuitive and readable.
class HttpApiEndpoint {
  static get<Name extends string>(
    _name: Name,
  ): <
    const Path extends ReadonlyArray<
      Record<string /* represents alias */, AnySchemaString>
    >,
  >(
    strings: TemplateStringsArray,
    ...args: Path
  ) => Endpoint<Name, Path> {
    return (_strings, ..._args) => undefined as any;
  }
}

export const endpoint: Endpoint<
  "findById",
  readonly [typeof Schema.NumberFromString]
> = HttpApiEndpoint.get("findById")`/api/directory/${{
  directoryId: Schema.NumberFromString,
}}/file/${{ fileId: Schema.NumberFromString }}`;

// client
findById({
  path: { directoryId: 1, fileId: 2 },
  // instead of
  // path: [1, 2]
});

// server
handler: ({ path }) => {
  path.directoryId;
  path.fileId;
};
// instead of
// handler: ({ path }) => {
//   path[0]
//   path[1]
// };

I am sure that at the type level we can guarantee disjoint alias names and that there is only one schema field in the record

https://github.com/Effect-TS/effect/pull/4035


Azure API for FHIR offline

We currently have an EHR system running on top of the Azure API for FHIR. One of the doctors needing to use the system have problems with their internet. We are exploring how we can cache the data locally and update when a string internet connection is available.
If anyone has experience for the use case please let me know.

These links could be helpful:

https://fhircast.org/
http://www.healthintersections.com.au/?p=2950

Maybe also ask in the FHIR Chat (https://chat.fhir.org/).

@dikokob we don't have any plans to provide an offline cache right now. For now I'm going to close as won't fix.


Will there be a cartoon/anime finetune?

Just that, asking if eventually would be possible to train an anime/cartoon finetune of this model?

There is no specific fine-tuning for cartoon data in our training. You can collect relevant data and follow the training guidelines for fine-tuning.


chore: update prisma to v5 (APPLICS-377)

Describe your changes
Ticket: APPLICS-377: Applications FO - Update prisma to v5

Updated package.json files for prisma and @prisma/client version 5
Run prisma generate
Made sure the project BC0110001 can be loaded

Type of change 🧩

[x] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
[ ] Documentation update
[x] Other (please explain in the description section above)

Checklist before requesting a review

[x] I have performed a self-review of my own code
[x] I have double checked this work does not include any hardcoded secrets or passwords
[ ] I have made corresponding changes to the documentation
[x] I have provided details on how I have tested my code
[x] I have referenced the ticket number above
[x] I have provided a description of the ticket
[ ] I have included unit tests to cover any testable code changes

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

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


[TONClient.queries] WebSocket Failed

I'm submitting a ...
 StackOverflow, personal fork, etc.)

% tondev info
TON Labs Dev Tools 0.17.7

default network/blockchain:

  Used version: latest
  Bound to host port: 8080
  Docker image: tonlabs/local-node:latest
  Docker container: tonlabs-local-node-alexnew running

Compilers:

  Used version: latest
  Docker image: tonlabs/compilers:latest
  Docker container: tonlabs-compilers-alexnew running

http://localhost:8080/graphql is accessible and works fine.
Any advices, please?

The problem is "WebSocket Failed" spam? If so, we are don't know why it happens and created a PR for ton sdk to hide it by flag, but sdk maintainer made a mistake when merging, and I think we should recreate that PR.
Or the prolem is a process hang outing with given no asserts results?

Yes, you're right. The process is hang outing with given no asserts results. This is a problem.
And regarding "WebSocket Failed", I don't think it is spam because it appears during manager.createClient(['http://localhost:8080/graphql']) call from this line:
https://github.com/wintexpro/echpochmak/blob/master/tests/example.test.js#L6
For me, it looks like createClient() is not working properly.
May be this is a bug.
May be this is a my local settings error but as I said I can connect to localhost:8080/graphql without any issues.
So, please, advise me any additional method to help you in troubleshooting this issue.
Thanks!

@asnov Thanks for the feedback, can you tell me what operating system and node.js version you have?

$ uname -a
Darwin Alexeys-MacBook-Pro.local 18.7.0 Darwin Kernel Version 18.7.0: Fri Oct 30 12:37:06 PDT 2020; root:xnu-4903.2<IP_ADDRESS>~1/RELEASE_X86_64 x86_64
$ node -v
v12.7.0

Maybe you can use http://l<IP_ADDRESS>:8080 instead of http://localhost:8080/graphql?

@RTSTALER , I am on the next system:
$ uname -a
Darwin Alexeys-MacBook-Pro.local 18.7.0 Darwin Kernel Version 18.7.0: Fri Oct 30 12:37:06 PDT 2020; root:xnu-4903.2<IP_ADDRESS>~1/RELEASE_X86_64 x86_64
$ node -v
v12.7.0

Will try to test it on macos. May be the reason is network features in Docker Desktop for Mac...

I changed to http://<IP_ADDRESS>:8080. Here is what I get:
Stopping [tonlabs-local-node-alexnew]... ✓
Removing [tonlabs-local-node-alexnew]... ✓
Creating tonlabs-local-node-alexnew... ✓
Starting tonlabs-local-node-alexnew... ✓
[getClientConfig] for server "http://<IP_ADDRESS>:8080" failed {
  message: 'request to http://<IP_ADDRESS>:8080/graphql?query=%7Binfo%7Bversion%7D%7D failed, reason: socket hang up',
  data: {
    http_url: 'http://<IP_ADDRESS>:8080/graphql',
    ws_url: 'ws://<IP_ADDRESS>:8080/graphql'
  }
}
[TONClient.queries] WebSocket Failed
[getClientConfig] for server "http://<IP_ADDRESS>:8080" failed {
  message: 'request to http://<IP_ADDRESS>:8080/graphql?query=%7Binfo%7Bversion%7D%7D failed, reason: socket hang up',
  data: {
    http_url: 'http://<IP_ADDRESS>:8080/graphql',
    ws_url: 'ws://<IP_ADDRESS>:8080/graphql'
  }
}
[TONClient.queries] WebSocket Failed
[getClientConfig] for server "http://<IP_ADDRESS>:8080" failed {
  message: 'request to http://<IP_ADDRESS>:8080/graphql?query=%7Binfo%7Bversion%7D%7D failed, reason: socket hang up',
  data: {
    http_url: 'http://<IP_ADDRESS>:8080/graphql',
    ws_url: 'ws://<IP_ADDRESS>:8080/graphql'
  }
}
[TONClient.queries] WebSocket Failed
[getClientConfig] for server "http://<IP_ADDRESS>:8080" failed {
  message: 'request to http://<IP_ADDRESS>:8080/graphql?query=%7Binfo%7Bversion%7D%7D failed, reason: socket hang up',
  data: {
    http_url: 'http://<IP_ADDRESS>:8080/graphql',
    ws_url: 'ws://<IP_ADDRESS>:8080/graphql'
  }
}
[TONClient.queries] WebSocket Failed
[getClientConfig] for server "http://<IP_ADDRESS>:8080" failed {
  message: 'request to http://<IP_ADDRESS>:8080/graphql?query=%7Binfo%7Bversion%7D%7D failed, reason: socket hang up',
  data: {
    http_url: 'http://<IP_ADDRESS>:8080/graphql',
    ws_url: 'ws://<IP_ADDRESS>:8080/graphql'
  }
}
[TONClient.queries] WebSocket Failed
[getClientConfig] for server "http://<IP_ADDRESS>:8080" failed {
  message: 'request to http://<IP_ADDRESS>:8080/graphql?query=%7Binfo%7Bversion%7D%7D failed, reason: socket hang up',
  data: {
    http_url: 'http://<IP_ADDRESS>:8080/graphql',
    ws_url: 'ws://<IP_ADDRESS>:8080/graphql'
  }
}
[TONClient.queries] WebSocket Failed
[getClientConfig] for server "http://<IP_ADDRESS>:8080" failed {
  message: 'request to http://<IP_ADDRESS>:8080/graphql?query=%7Binfo%7Bversion%7D%7D failed, reason: socket hang up',
  data: {
    http_url: 'http://<IP_ADDRESS>:8080/graphql',
    ws_url: 'ws://<IP_ADDRESS>:8080/graphql'
  }
}
[TONClient.queries] WebSocket Failed
[TONClient.queries] WebSocket Failed
[TONClient.queries] WebSocket Reconnected

At the same time opening http://<IP_ADDRESS>:8080/graphql?query=%7Binfo%7Bversion%7D%7D in the browser gives me correct page with {info{version}} GraphQL-request.

@asnov  Update the package in npm, the output should show you more information about the error

how i can install
npm install -g toncli
this


Clean AWS provisioning logic to prepare for debugging concurrent Skyplane usage

This is necessary for the Sky camp workshop.
Changes:

Shift from random UUIDs to consistent machine IDs
Extract networking logic to AWSNetwork
Extract key management logic to AWSKeyManager
Extract pricing logic to AWSPricing

@JasonDing0401 Please quickly review the changes I made to config.py in order to make UUIDs consistent. I will use these for key generation for AWS, so they should be consistent and always set.

@ShishirPatil Please review the changes to aws_cloud_provider carefully since I extracted network logic into a separate function. For Sky camp, I will probably want to provision different resource scopes across people. I also want to make deprovision only remove a user's own VMs, and only delete VPCs when they run skyplane deprovision --all.

@JasonDing0401 I think getnode will always return something but may not be consistent with multiple network interfaces. Since we write it to the config file, it should be consistent though.


Particular case of mutually recursive function not working

For some reason the following code does not work
(letrec ((odd?
          (letrec ((even? (lambda (n) (if (= n 0) 1 (odd? (- n 1))))))
            (lambda (n) (if (= n 0) 0 (even? (- n 1)))))))
  (odd? 3))

However, adding the letrec for even? inside the lambda works:
(letrec ((odd? (lambda (n)
                 (letrec ((even? (lambda (n) (if (= n 0) 1 (odd? (- n 1))))))
                   (if (= n 0) 0 (even? (- n 1)))))))
  (odd? 3))

Since this also happens on the Lean alternative implementation, we believe that this is the expected behavior rather than a bug. So we should address this issue later, with a more robust strategy to deal with a wider range of ways to express recursions.
For now, the rule of thumb is to define recursive calls as straightforward binds of symbols to lambdas in the letrec block.

Although I'm sure it's not exactly the same, something about this reminds me of #3 (lol, number three). The idea of an env becoming 'lost' may be conceptually useful as we work through this.

I think I know the issue. When we find a function in a recursive environment, then we extend its closure-environment at the time it is found. That is how we provide recursion currently.
What's happening in the bad example, is that the binding to odd? is an inner function. This does indeed get its environment extended as expected. However, this mechanism doesn't have any contract with the binding of even?. The associated function is not ever found as a 'recursive lookup', so there should be no expectation that its environment will be extended.
This is just an explanation which more clearly explains why the 'rule of thumb' @arthurpaulino describe is actually what should be expected based on an understanding of how Lurk's letrec does and is intended to function now.

In other words, the hypothesis that odd? should be available inside the definition of even is simply mistaken. You can reason through this by considering the bindings available lexically when even is defined. Clearly, odd? is not in scope — and the letrec only grants the extra, magical, scope to the function bound.
In fact, on consideration, this behavior is already documented in our tests. This test exists exactly to show the expected behavior (and happens to use the same examples…): https://github.com/lurk-lab/lurk-rs/blob/8fd97899fbf7776de650059d850d63ef7aacb1c5/src/proof/nova.rs#L1767-L1788
The only difference is that the example code uses the 'concise' form:
(letrec ((foo (lambda (…) …))
               (bar (lambda (…) …)))
   …)

whereas the example in this issue manually expands it (as evaluation itself does) to
(letrec ((foo (letrec ((bar (lambda (…))))
                        (lambda (…) …)))
   …)

I think most of the confusion here comes because we're not used to reading code that avoids the concise form, so didn't recognize that this is a direct replication of the explanatory test case.
Another way to phrase the final response here is, "Yes, this issue demonstrates that Lurk's letrec still does not provide mutual recursion."
However, the more constructive observation is that there is indeed a clever way to obtain mutual recursion from the more limited self-recursion Lurk's letrec provides. This means we could actually implement mutual recursion as a macro (mutrec), as a 'built-in' macro (like the existing transformations, including the 'concise' form of letrec), or even perhaps as the new default expansion of letrec, replacing the current one and providing (it seems) strictly better behavior.
Interesting!

In other words, the interesting point about the original issue was not actually, "Mutual recursion is surprisingly broken in some case," which we always knew. But rather it is, "But Lurk is perfectly capable of expressing mutual recursion if we transform concise letrec's differently." Nice find, @gabriel-barrett.

Correcting myself slightly: It's not true that the first (bad) example is exactly the same as the test demonstrating the error. That would actually expand to
(letrec ((even (lambda (n)
                 (if (= 0 n)
                     t
                     (odd (- n 1))))))
  (letrec ((odd (lambda (n)
                  (even (- n 1)))))
    (odd 2)))

Nevertheless, the general point remains. There are many ways to misuse Lurk's focused self-recursion construct (letrec) in the hope of extracting mutual recursion. There is also a way (the second, 'good') example to accomplish that goal in a way that is simple and relatively efficient.
Since accomplishing this does require that all bindings be to lambda forms defining functions, I think maybe we should define mutrec as a construct which can only be used to do that. Then we can omit the lambda from the syntax.
An example like the original could then be written:
(mutrec ((even? (n) (if (= n 0) true (odd? (- n 1))))
         (odd? (n) (if (= n 0) false (even? (- n 1))))
  (odd? 3))

And it would then become
(letrec ((even? (lambda (n)
                  (letrec ((odd? (lambda (n)
                                   (if (= n 0) nil (even? (- n 1))))))
                    (if (= n 0) t (odd? (- n 1))))))
         (odd? (lambda (n)
                 (letrec ((even? (lambda (n)
                                   (if (= n 0) t (odd? (- n 1))))))
                   (if (= n 0) nil (even? (- n 1)))))))
  (odd? 3))

This example does highlight one annoying point about the idea. In order to make all of the bound functions available in the body, we would need to separately define each entry point. If it's okay to have only a single entry point, then that's not necessary.
However, I think we can probably come up with a way to build on this idea and also obtain all the bindings in one pass, probably by introducing new continuation types.

Alternately, maybe it will be better to pursue one of the other strategies. I think we can get the properties we want by making the recursive lookups smarter. This will still require some tweaks to the continuations, but basically, when searching a recursive env, we can hold on to the enclosing recursive env as we descend, then use that as the env with which to extend the closure.
In light of the above expansion, I now slightly lean toward that approach.

In that model (the one involving making recursive lookups smarter), we wouldn't even need a new construct. Then this
(lettrec ((even? (n) (if (= n 0) true (odd? (- n 1))))
         (odd? (n) (if (= n 0) false (even? (- n 1))))
  (odd? 3))

would 'just work'. The rule would be that all bindings within a single 'concise' letrec would have all other bindings available within the bodies of any functions directly defined as the value of those bindings. I think this is exactly what we want to express, and a change to the lookup and function-env-extension mechanism seems like the simplest and most direct way to effect it.


Changed cursor to pointer on Language change

Changes the cursor to pointer while changing Language. #48

Nice. Thanks.


Use coredns for a common/1.8 provider

Coverage remained the same at 45.778% when pulling 538329df9b272118c447bd8744e7dd43bf9b8df2 on saheienko:add_coredns into 23f4a8652e881a0258a1b69c85e6ab18faffd2f2 on supergiant:master.

Yeap, it should be for release 1.0 at first.


Changing volume durning ad results in 100% volume on every click

First of all, thanks for this great (and the only working) plugin. :+1:
But, there is one issue rendering it pretty annoying for end users.
If you play ad and change the volume, every click you make after the change results in volume being set to 1, in the ad AND in the video playing after the ad ends.
I've tracked the error back to line 335 in ad-ui.js.
The problem is that there aren't any checks to find out where the user click, if it's inside the volume controls or not, and so the volume is always set to 1.
My dirty fix was to simply check if the clicked element had id my-video_ima-slider-level-div assuming the ID of video element is my-video so the IDs match. That fixed it for me but maybe checking for the class would be better.
I am using the latest version of videojs-ima and videojs version 5.20.5 (as newer versions don't work)
UPDATE
This helped and it's working fine, wrap function AdUi.prototype.changeVolume:
AdUi.prototype.changeVolume = function (event) {
  if( event.target.classList.contains('ima-slider-level-div') ){ // <- added
    var percent = (event.clientX - this.sliderDiv.getBoundingClientRect().left) / this.sliderDiv.offsetWidth;
    percent *= 100;
    // Bounds value 0-100 if mouse is outside slider region.
    percent = Math.min(Math.max(percent, 0), 100);
    this.sliderLevelDiv.style.width = percent + '%';
    if (this.percent == 0) {
      this.addClass(this.muteDiv, 'ima-muted');
      this.removeClass(this.muteDiv, 'ima-non-muted');
    } else {
      this.addClass(this.muteDiv, 'ima-non-muted');
      this.removeClass(this.muteDiv, 'ima-muted');
    }
    this.controller.setVolume(percent / 100); // 0-1
  } // <- added
};

Hi,
I do see some issues with clicking on the content video and that affecting the volume, but I want to make sure I'm actually seeing your bug and not some other bug. What are the exact steps to reproduce your issue? I'm when I click on the ad, I actually get the volume being set to 0.

Hi Yuri,
I have been trying to set up example case for the pas hour and I can't even get it to work anymore.
I am sorry I can't be more helpful here.
The not working example is here, I don't know if it's the VAST urls I am using but it's only basic files:
<script src="http://imasdk.googleapis.com/js/sdkloader/ima3.js"></script>
<script src="./videojs/video.js"></script>
<script src="./js/videojs-contrib-ads.js"></script>
<script src="./js/videojs-ima.js"></script>

plus css styles.
the initialization script:
(function(){
  videojs('my-video', {
    controls: true,
    responsive: true,
    fluid: true,
  }, function(){
    var player = this;
    player.on('volumechange', function(){
      console.info('volume', player.volume());
    });
    player.ima({
      id: 'my-video',
      adLabel: 'Ad',
      showCountdown: true,
      adTagUrl: '<?php echo $_GET['url']; ?>' //is set via form
    })
  });
})();

But the volume value passed to AdUi.prototype.changeVolume() is set elsewhere, that I am unable to find out. Maybe there is issue borrowed somewhere deeper.

Hi all,
I am taking a look into this issue and am trouble reproducing. The current videojs-ima plugin does not use the following if statement wrapper :
if( event.target.classList.contains('ima-slider-level-div') ){
However I am not able to see this bug. Because of that I am going to close this issue. However, please reopen if this issue does still exist and include steps to reproducing it. I would be very interested in adding a fix for it but need the steps to reproduce.


NavBar doesn't appear while scrolling to top

It happens when you scroll fast to the top:

We should check the throttle tailing options

:tada: This issue has been resolved in version 0.7.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:

:tada: This issue has been resolved in version 1.6.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


WIP: Provide method addition

Changelog

provide method added for

Socket
SocketApp
HttpAttribute
Response
HttpApp

Unit test case added for Socket's provide
Unit test case added for HttpApp's provide

Closes #477

Closing this PR in favour of smaller scoped PRs.
Comments will be resolved in them.


iFrame problem

I put asp .net core MVC application in the iframe of oidc-client-js application. I get an error in the console:
Refused to display 'http://localhost:12406/connect/authorize?client_id=dashboard_viewer&redirect_uri=http%3A%2F%2Flocalhost%3A12496%2Fsignin-oidc&response_type=id_token token&scope=openid profile roles core_logic_facade&response_mode=form_post&nonce=636428092725221109.NDQ2OWQ0MGMtZWQyMy00OGVhLWEwMzItNGNkNmE3MjU4MWUxYzdiYTAxNWQtYjYzMi00MjlhLWJiNjItZGVkMTliM2E2MDMz&state=CfDJ8Irk0l47HfFNhSEOlj01Rv7ySxaLQyfqDcdFeNxkvMy7wbwt-K1obKOm1WnJ0ADEwWKolYmbcWGMbibB1dWOYH26qidI6J-GYL0Xr6Yr9g4_b02_NkkMazFJrWkSWo9-ffzAapO_PIU8p5g1UXkXY7phQq_TLNTJeAWT8ZlVKrpDnQnyOZeA8qeeSPpzerhCbO1XsKdrhoyC75bTMUEOhWYiq3Pg9_jEjzjyDK-X-u1128TCX70TDzhhMSz7pcKVhQ3DcpU4KAAYd09fK8YM14Zxc8Tt8ptnAHRwvEDjpSJW-B30PxlUUsSWMB6mIL9IzKBc9dptGcqEu1waWnDpL3uWig9FNRiCQWqhsrINDfDsoluVxbsjWD1ywM9MT-rbF0rrPQJGvQHbvTZ87C-yM3Ia8u9ATmd7kjSSvM3FZX5H&x-client-SKU=ID_NET&x-client-ver=<IP_ADDRESS>' in a frame because an ancestor violates the following Content Security Policy directive: "frame-ancestors http://localhost:12496"
I've tryed to modify X-Frame-Options in SecurityHeadersAttribute of QuickStart exmaple. But nothing helped. How can I solve problem?

That's up to your hosting app to decide. Check the code in the quickstart SecurityHeaders filter to control .

@brockallen SequrityHeaders filter does not impact on /connect/authorize endpoint.

Ah yes, now I think I see what's happening. Sounds like your page hosting the iframe has CSP that prohibits what you're trying to do. So you should control it the way you need.

@brockallen Where is the problem? In the site which i put in iframe or in site which contains iframe?

@brockallen
Problem in this code:
        private void AddCspHeaders(HttpContext context)
        {
            var formOrigin = Response.Request.RedirectUri.GetOrigin();
            // 'unsafe-inline' for edge
            var value = $"default-src 'none'; frame-ancestors {formOrigin}; script-src 'unsafe-inline' 'sha256-VuNUSJ59bpCpw62HM2JG/hCyGiqoPN3NqGvNXQPU+rY=';";

            if (!context.Response.Headers.ContainsKey("Content-Security-Policy"))
            {
                context.Response.Headers.Add("Content-Security-Policy", value);
            }

            if (!context.Response.Headers.ContainsKey("X-Content-Security-Policy"))
            {
                context.Response.Headers.Add("X-Content-Security-Policy", value);
            }
        }

In my ASP .NET Core application I use OpenIdConnect authorization. So it uses FormPost response mode. That's why IdSrv add frame-ancestors {formOrigin}; to CSP and asp .net core application not working in iFrame.

@Astimus  how did you solve your problem?

All set on this issue -- can we close?

I'm having the same issue.
I'm trying to display a client in an iframe provided by the Identityserver host.
The problem is that 'self' is not included inside frame-ancestors. That means the client can display itself in an iframe but the identityserver can't. Is there any security risk to include "self" to the frame-ancestors in general? There is no way to override that part. I even tried to make a middleware that replaces that header but it doesn't work as the response already started to be send.

I'm still unclear on the issue here. Is your client not running at http://localhost:12496? If it is, then the CSP should work and allow the authorize endpoint in the iframe.
@WolfspiritM I don't know if your issue is the same or not. If it's different, please open a new issue.

Closing due to lack of response. If you still have issues, feel free to reopen.

I believe @brockallen is right, there's no real issue in identityserver here.
I believe the issue is the client, is using a Referrer policy that is not sending referral/redirect information. In which case, the code in AddCspHeaders is defaulting to frame-ancestors: none
In my case, this "breaks" the OIDC-client JS Session checking code which uses an iframe.
I changed my client server to always use Referrer Policy with strict-origin-when-cross-origin, which should allow the web browser to send back the correct redirect and thus allow the frame-ancestors to render properly allowing the client to operate the iframe.
See https://www.w3.org/TR/referrer-policy/#ref-for-referrer-policy-strict-origin-when-cross-origin-2

Just a note, I implemented Referrer and it still is not retrieving the referrer to insert into frame-ancestor when /session  is called. I'm going to dig a little further into the Response.Request.RedirectUri.GetOrigin(); code.

I have a SPA at one url my-spa.vasont.com, that is calling my-identity.vasont.com using OIDC js. Everything worked great until I implemented some new security headers on my id server implementation. Specifically, X-Frame-Options sameorigin. It broke Chrome.Removed X-Frame-Options and CSP frame-ancestors and session call is working again.


Cannot read property 'slice' of null

Got this error while doing some react server side rendering
Stack trace
 TypeError: Cannot read property 'slice' of null
    at dispatchHttpRequest (E:\Projects\real-estate\node_modules\axios\lib\adapters\http.js:84:37)
    at httpAdapter (E:\Projects\real-estate\node_modules\axios\lib\adapters\http.js:19:10)
    at dispatchRequest (E:\Projects\real-estate\node_modules\axios\lib\core\dispatchRequest.js:52:10)
    at process._tickCallback (internal/process/next_tick.js:103:7)

Action
import axios from 'axios';

export const FETCH_USER = 'FETCH_USER';
export const FETCH_POSTS = 'FETCH_POSTS';
const GET_POSTS_URI = '/api/posts';

export const fetchPosts = () => {
        let posts = axios.get(GET_POSTS_URI).catch(err => console.log(err));
        return {
            type: FETCH_POSTS,
            payload: posts
        }
}

API
app.get('/api/posts', function(req, res, next) {
    Post.model.find()
        .exec()
        .then(function(posts) {
            res.send(posts);
        }, function(err) {
            return next(err);
        });
})

I still got the JSON response in the network tab in dev tool, but I could not retrieve the JSON response in the reducers

I got the same error and i realized that:

In client-side, when get a short-URI like /api/posts, axios known what host is base on base url in browser.
But in server side rendering, it doesn't known.
So, you must provide full-URI for axios.
Hope this help !

Yes, I think @tinpee is right. Thank you!

@nickuraltsev I'm facing the same issue.
My config however is the following
const api = axios.create({ timeout: 5000 });
api.defaults.baseURL = config.outAPI; // This is some endpoint that i get from the config
api.get('/api/something');

However, if i use the following code then i'm not getting this issue.
const api = axios.create({ timeout: 5000, baseURL: config.outAPI });
api.get('/api/something');

I do think it something worth looking into... even though there is a workaround which is using the full url


Minor cleanups for the Flink implementation

I've cleaned up the Flink implementation a bit:

I removed the print() statements of the intermediate streams. print() will print the stream to the worker's stdout. In thise case, there were 5 print statements, for each intermediate stream.
I added new configuration parameters for setting the buffer timeout (affects latency / throughput)
I added a config param for enabling fault tolerance (disabled by default)
The parallelism is now set to use all cluster resources. Ideally, the parallelism is set to the total number of slots available in the overall cluster. So if there are 10 Taskmanagers with 16 slots, Flink can run with a parallelism of 160. Also note that you can set a default parallelism on the ExecutionEnvironment for all operators.

Thanks a lot for the great work with the benchmarks!

@rmetzger looks good I am +1 on merging this in.  Did you get anything about a CLA?  Have you filed one with Yahoo before.  Because this is the first pull request to this repo I want to be sure the automated triggers are all working.

CLA is valid!

OK the post just after mine answers that question.

+1
But let's tag master as being the version used in the blog before we merge.

+1


Sveltosis: Treat arrow functions as regular function declarations

Hi there!
This is a clumsy approach to treat arrow functions equal to regular function declarations.
I usually write my functions as arrow functions like so (as a matter of personal taste, I find it more readable):
<script>
const myClickHandler = (event) => {
  console.log('do something')
}
</script>

<button on:click={myClickHandler}>Click Me</button>

Before this PR the generated code looked like this:
<script>
  let myClickHandler = null;
</script>

<button
  on:click={(event) => {
    myClickHandler(event);
  }}>Click Me</button
>

So the ArrowFunction was detected as VariableDeclaration, which is not wrong, but the generated code wouldn't work anyway.
Edit:
~With this PR, the generated code looks like this~ (have to check that).
It should keep the ArrowFunction as is. I'm running out of time for today :/
This is not perfect, but I created this PR to start the discussion. :)
Caveats
This might have some issues depending how the ArrowFunction was declared. E.g. if destructuring is involved, the code breaks very likely.
Fixes #1182

Okay.. The current version of fatArrow.svelte as input generates the following svelte file:
<script>
  clickHandler1 = (event) => {
    console.log("do something 1");
  };

  function clickHandler2(event) {
    console.log("do something 2");
  }
</script>

<button
  on:click={(event) => {
    clickHandler1(event);
  }}>Button 1</button
>
<button
  on:click={(event) => {
    clickHandler2(event);
  }}>Button 2</button
>

(note the missing const).
In vue this looks worse:
<template>
  <div>
    <button @click="clickHandler1($event)">Button 1</button>
    <button @click="clickHandler2($event)">Button 2</button>
  </div>
</template>

<script>
import { defineComponent } from "vue";

export default defineComponent({
  name: "fat-arrow",

  methods: {
    clickHandler1: (this.clickHandler1 = (event) => {
      console.log("do something 1");
    }),
    clickHandler2: function clickHandler2(event) {
      console.log("do something 2");
    },
  },
});
</script>


Fix link

closes https://github.com/MicrosoftDocs/OfficeDocs-SkypeForBusiness/issues/8989
The current link does not work anymore, proposing to replace with Microsoft 365 official channel alternative

@SerdarSoysal PR has been copyedited and is ready for final review, could you please check and merge? Thanks!

@tiburd Can you help me with the review/merge?


[Removal]:

Hotspot Name
Radiant Lava Crab
Hotspot b58 Address
11BuUHR2bmpaVR4gQjsfuPXU2YpaTyy1XDzoh2yyEdfafSd9zH3
Discord Handle
Bios #3442
Hotspot Manufacturer
Bobcat
Removal Reason
Due to the absence of reasonable cause
Modifications
No
Extra forwarders
Yes
Extra antennas
No
Additional Information
Hi Nova Lab, Helium inc.,
Me and my friends own about 17 Hotspots, which are deployed in 2 different Cities:

11x Hotspots in Bismark (Altstadt), Germany >>
https://explorer.helium.com/iot/cities/YmlzbWFyayAoYWx0bWFyaylzYWNoc2VuLWFuaGFsdGdlcm1hbnk

6x Hotspots in Kilis Merkez/Kilis, Turkey >>
https://explorer.helium.com/iot/cities/a2lsaXNraWxpc3R1cmtleQ

I noticed that the 11 hotspots were added to the denylist without me knowing the reason. The other 6 hotspots are not effected even though they were all configured the same! The 11x hotspots are beeing hosted by elderly people and due to the lack of there Knowledge in IT and communication , I connected them to a VPN that my company uses in Berlin in order to maintain them and reset the devices when needed, which is very helpful to track/keep performance.
I remember being the first to deploy 6 devices in Bismark, Germany, and then invited friends to join the network, which are kept on separate account/address.
I can imagine that the algorithm interpretates the vpn configuration as spoofing, which is not the case. The port forwarding mechanism for the devices in Turkey has already been disabled, as it affects stability of the connection there.
I manage to turn off the vpn if it was the cause of adding the hotspot to the denylist. Will a removale be approved?
Looking forward to a positive response.
Sincerely yours,
Bios
Ps. I use my own Python script for the tracking/taxing. An export of the hotspots will be attached.
Export Hotspots.xlsx

So:

You and your friend own all 11 hotspots in Bismark yes?
i.e. you confirm all 11 of these are controlled by you and your friend:

Can you explain why these 11 hotspots don't seem to witness any hotspots outside of Bismark?

I have to go back over 3 weeks before they were denylisted to get any witness outside of Bismark - and that is in the centre of Berlin which is a bit odd?

Can you provide any photos of the view taken from any of these 11 installs?
I.e. provide a name/b58 and a photo from inside the host property looking out of the window

Dear KXI1,
i have no idea if you are an employer from Nova Lab or Helium inc. Anyway i will be glade to provide some information.

Yes.. The Hotspots are shared umong me and my Friends. i own only 6 which are on one account.

We were looking for a place where there are no hotspots around to benefit from the 1.0 Transmichen scale. The rewards are extremely low and the main idea was to expand outside crowded Areas. Related to the strange witness, about a month ago we had 2 attempts to sell the whole Bundell at once, which happened in Berlen without any success. This is still no explanation and I have no idea why one of the hotspots keeps witnissing the same hotspot in Berlin.

We had and still have plans to sell the hotspots and after the ban the devices have taken off and are now on their way back to Berlin.  The same will be done to some of the Hotspots in Turkey (possibly will be sold there). For photos i have to look in my whatsapp for old ones. They will as far as i know will not be near a window.

We are no longer thinking of redistributing the hotspots, as this would require a lot of time and monitoring without any significant benefit. Nevertheless, it would be beneficial for all of us if the devices were removed from the denylist in order to pass them on to others.
Thanks..
Bios

Dear KXI1,
i have no idea if you are an employer from Nova Lab or Helium inc. Anyway i will be glade to provide some information.

Yes.. The Hotspots are shared umong me and my Friends. i own only 6 which are on one account.
We were looking for a place where there are no hotspots around to benefit from the 1.0 Transmichen scale. The rewards are extremely low and the main idea was to expand outside crowded Areas. Related to the strange witness, about a month ago we had 2 attempts to sell the whole Bundell at once, which happened in Berlen without any success. This is still no explanation and I have no idea why one of the hotspots keeps witnissing the same hotspot in Berlin.
We had and still have plans to sell the hotspots and after the ban the devices have taken off and are now on their way back to Berlin.  The same will be done to some of the Hotspots in Turkey (possibly will be sold there). For photos i have to look in my whatsapp for old ones. They will as far as i know will not be near a window.

We are no longer thinking of redistributing the hotspots, as this would require a lot of time and monitoring without any significant benefit. Nevertheless, it would be beneficial for all of us if the devices were removed from the denylist in order to pass them on to others.
Thanks.. Bios

I'm not connected to Nova, I'm just a community member. But I'm afraid I'm the only one here it would seem.
You will need to provide evidence these devices really are/were asserted where you claim they are/were.
The photos as described above for say 2 installs will provide this proof.
If they really were hosted in Bismark, but you have now removed them and took no photos at the time, then the best thing would be to go back to Bismark and ask the ex-hosts if you could take a photo from the location where they were until recently located. The photos have to be of a view so that it can be matched to a satellite photo.


Add example for amp-experiment

This is a sample for amp-experiment.
This does not use the sticky user feature, we can create a different example using it later.
@sebastianbenz PTAL

Add a few comments.

@sebastianbenz PTAL

@sebastianbenz PTAL

LGTM - however the development links don't work reliably. Usually I have to manually reload the page at least once - even if it is opened in a new tab.
@lannka is there a way to avoid this? This might lead to some confusion otherwise.

@sebastianbenz Can you try using incognito windows and see if the probles persists? It doesn't happen for me.

Validation error:
error.js:58The <amp-pixel> src attribute must start with "https://" or "//". Invalid value: http://example.com/track/?xname=button-color-experiment&xvar=VARIANT(button-color-experiment)

@kul3r4 it works in an incognito window

@sebastianbenz Could you please try also yourself with this change?

I see the following errors:

@lannka I applied the fix but I am still having some errors. Could you PTAL?

@sebastianbenz I can't reproduce the error anymore, could you please try it again and see if you still get the error?

Works now. We don't event need to open the dev test links in a new tab, instead use the full url, e.g.:
  * #amp-x-button-color-experiment=red

LGTM  - once this is done.

One more thing: should we rename the css rule: test-button -> button-experiment?

LGTM


pull request for e2e test at 11/14/2016 03:15:09

:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

optest/docs/updated_at.md
:white_check_mark:Succeeded

Details

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


Add ability to format .leex templates

Hi,
Any chance we could add formatting for .leex templates (LiveView templates)?
Thank you for all the work on this very helpful extension!

This would be a great enhancement (we could implement it as a code action with respect to LSP). And we would want to support .eex files at the same time.

Hi @axelson! I've been trying a lot of alternatives to get both .eex and .leex files to format properly in VSCode.
One of them involves using Beautify that does not indent the files properly.
Do you have any idea how to approach adding this functionality to the extension?
PS.: I see that there's another extension that supposedly does this, but I haven't tested. I also dunno if this conflicts with ElixirLs.

Superseded by https://github.com/elixir-lsp/elixir-ls/issues/660


question about / 10.7.1 Exposure cohort

Hello.  I was just scanning the chapter on SQL and was looking at  10.7.1 Exposure cohort.  There are two discrepancies.
First, the text below says We take the first drug exposure per person but in fact, the SQL does not do exactly this -- it constructs a synthetic structure having the minimal begin and minimal dates for the given person that match the concept criteria.  Now, this might be a case if exposures do not intersect.
Second, the SQL here doesn't do what the corresponding auto-generated SQL does.  The auto-generated SQL for drug exposure criteria handles the possibility of a NULL end-date,
COALESCE(C.drug_exposure_end_date, (C.drug_exposure_start_date + 1*INTERVAL'1 day')), it also has slightly different logic, it ensures the end_date is within the observation period.  This may not be relevant.

It seems this entire example was removed.  Closing.

Thanks @clarkevans ! The example wasn't removed, just someone forgot a closing curly bracket somewhere earlier in the book causing all subsequent chapters to be rendered inaccurately.
I've now adapted the example as you suggested.

Martijn,
I'm not sure why PARTITION BY is used so much in the SQL logic
generated by OHDSI.  However, I think it may be unnecessary in this
case... something like this should also work (untested)...
SELECT 1 AS cohort_definition_id,
  cohort_start_date,
  cohort_end_date,
  subject_id
FROM (
  SELECT drug_exposure_start_date AS cohort_start_date,
    COALESCE(drug_exposure_end_date,
             DATEADD(DAY, 1, drug_exposure_start_date)
    ) AS cohort_end_date,
    person_id AS subject_id
  FROM @cdm_db_schema.drug_exposure
  INNER JOIN @cdm_db_schema.concept_ancestor
    ON drug_concept_id = descendant_concept_id
  WHERE ancestor_concept_id IN (1335471, 1340128, 1341927,
    1363749, 1308216, 1310756, 1373225, 1331235, 1334456,
    1342439) -- ACE inhibitors
  ORDER BY drug_exposure_start_date
  LIMIT 1
) first_exposure

Also, as I recall, in the generated logic, the the final cohort_end_date
is chosen to be the MINIMUM of  cohort_end_date and observation_period_end_date

For hand-crafted SQL, this could probably be reduced much further... here's untested.
This relies upon non-standard LEAST function which could be portable handled, it
works on PostgreSQL and MySQL.  Translation to MSSQL isn't that challenging.
SELECT 1 AS cohort_definition_id,
       e.drug_exposure_start_date AS cohort_start_date,
       LEAST(p.observation_period_end,
           COALESCE(e.drug_exposure_end_date,
               DATEADD(DAY, 1, e.drug_exposure_start_date)
       ) AS cohort_end_date,
    e.person_id AS subject_id
  FROM @cdm_db_schema.drug_exposure AS e
  WHERE EXISTS (
     SELECT 1
       FROM @cdm_db_schema.concept_ancestor AS a
       ON e.drug_concept_id = a.descendant_concept_id
      WHERE a.ancestor_concept_id IN (1335471, 1340128,
          1341927, 1363749, 1308216, 1310756, 1373225,
          1331235, 1334456, 1342439)) -- ACE inhibitors
  INNER JOIN @cdm_db_schema.observation_period p
     ON e.person_id = p.person_id
  WHERE p.observation_period_end_date >
        e.drug_exposure_start_date
    AND DATEDIFF(DAY,
            p.observation_period_start_date,
            e.drug_exposure_start_date) >= 365;


alarm on sleep ?

Hi,
Thank you for sharing this library.
I see that on suspend it is stopped, and so does no give alarms.
Can't accelerometer give alarms (and wake up from suspend) ?
I see in another device I have (mediatek watch) that it has built-in movement detection, which (probably) wakes up from sleep (I see sleep counters increment with "uptime" command), so how did they do it ?
Thank you for the time,
Ran

Hi,
I've added link for the "image" of this feature in the watch:
https://drive.google.com/file/d/0B22GsWueReZTVXpPNGVkMU53Vms/view?usp=sharing
Thank you,
Ran

Hi @ranshalit
The example I gave is in a context of an activity, i.e. sensor data is sent only when the activity is in a foreground. That's why the callback is not called when the phone is put on sleep.
I'm not really sure how to achieve what you want but a wild guess would be to use a BroadcastReceiver which would initialize the library as well as acquire a WAVE_LOCK (either partial or full) to always get data from the sensor.
Anyway, this is not related to the library in itself but more about how you use it, therefore I'll close the issue. But good luck for your project :)


how to protect our app's data using Android permissions.

NOTE: All 1st-time contributors should know Topic approval and PR submission does NOT guarantee your Topic/Article will be published. Our team of Peer Reviewers and Content Moderators will review all PRs that come in to make sure they adhere to the standard of quality we expect from the EngEd community.
We expect all community memebers to go through provided examples, resources, and previously published material before submitting content. As a rule of thumb, please only submit articles (pull requests) that are complete, formatted correctly, and include a fully polished article (ready to be published and error free).
All revisions and edits should be completed on your own forked repo (as to not take up room in the queue). Any PR that is submitted incomplete (meaning not ready to be published as is) will be closed. A PR being closed does NOT mean the article can not be published (or fixed) it simply means that the edits, revisions, and fixes will happen outside of the queue.
Topic Suggestion
Enter topic suggestion here...
Pre-submission advice
By following all our pre-submission advice and reviewing our Resources folder, you will maximise your chances of your topic being approved.
We ask that you please be patient as our team works through approving and publishing all articles/tutorials in a timely manner.
Allow 1-3 days for a topic to be reviewed and/or approved - allow 3-7 days for an articles to be reviewed and/or published (subject to vary depending on volume and/or backlog of articles).
Be sure to visit our Resources Page for tools, resources, and example articles that will help you propose and write a successful article.
Please ensure that you have only one open issue + linked pull request at a time. This will ensure that we complete the article in a timely manner from inception to publishing.)
We tend to stray away or tend not to publish reviews/comparisons of commercial product offerings.
Writing sample(s):
Include any links or writing samples - to help our team better gauge your writing quality.
Proposal Submission
Proposed title of article
how to protect our app's data using Android permissions.
Use keyword research to improve your article's SEO.
Proposed article introduction
In the this section, we will discuss how to protect our app's data using Android permissions.
Android permissions are used to protect our app's data from being accessed by other apps on the user's device. We can specify which permissions our app needs in the AndroidManifest.xml file.
There are two types of permissions: normal permissions and dangerous permissions. Normal permissions are used to access basic data and features on the device, while dangerous permissions are used to access sensitive data and features on the device.
We will need to add the following line of code to the AndroidManifest.xml file inside the tag. This line of code will tell our app that we need a dangerous permission called RECORD_AUDIO, which allows us to access audio from the device's microphone.

If we don't add this line of code, our app will not be able to access the user's microphone and will throw an error.
Now that we have added the required permission, we need to update our _recordAudio() method so that it will only work if the user has granted us this permission
For example, if the article is based on machine learning, use the following: [Machine learning] Introduction to Machine Learning.
If the article is based on developing an Android application, use the following: [Android] Developing Apps using Android.
ONLY viable topics to pick from:

API
Artificial Intelligence
Blockchain
Containers
Edge Computing
Languages
Machine Learning
Networking
Node.js
Security

Key takeaways

how Users can control which apps have access to their data by choosing whether or not to grant the requested permissions.
what are normal permissions and dangerous permissions.
how to protect our app's data using Android permissions.
how to show app installed on device after install it.

Article quality
How is your article unique? Tell us what makes your approach different from similar articles that have published on the same topic?
Is yours more in-depth? Does it cover additional topics? Do you provide handy tips or anecdotal advice?
References
Please list links to any published content/research that you intend to use to support/guide this article.
Conclusion
Finally, remove the Pre-Submission advice section and all our blockquoted notes as you fill in the form before you submit.
We look forwarding to reviewing your topic suggestion.
Templates to use as guides

How To Guide Template
Software Review Template
Tutorial Template

This is out of our preferred topics area. Please feel free to suggest an alternate topic to explore. 🚀


Throwing errors is breaking promise return and returning multiple promise

Version: 6.13.1
Installed by CocoaPods
I have the following function which should be creating a new class called Objectand returning it as a promise. The function self.objectCreator.add(object) is writing the model to a database and after that it should also be connected to another model called OtherObject with . self.otherObjectCreator.add(object: object).
I don't get any errors when I remove the guard let object = object else line. But I have to make a optional check cause the otherObjectCreator.add needs a non optional parameter.
I read through the troubleshooting and could manage to fix some errors by returning the promise self.otherObjectCreator.add(object: object) but any way. I thought this is a normal case of using PromiseKit? Is there something wrong with seal.fulfill(self.queryFromId(id: uuid))?
Futhermore I need to return two promises. How can I achieve this? (see the line "so this should be somehow return the two promises")
Hope you can help me here or give me an advice how to proceed here
func newObject() -> Promise<Object>{
    let object = Object()

    return firstly {
        self.objectCreator.add(object)
    }
    .then { object in // <- got exception: Unable to infer complex closure return type; add explicit type to disambiguate

        guard let object = object else {
            throw ObjectError()
        }

        // returns Promise of OtherObject
        return self.otherObjectCreator.add(object: object)

    // so this should be somehow return the two promises
    return Promises(self.otherObjectCreator.addObject(object: object), Promise.init(object))

    }
    .then { (otherObject, object) in
    return object
    }
}

This is the function body of self.objectCreator.add. The function body of self.otherObjectCreator.addObject is more or less the same.
func add(_ model: Object) -> Promise<Object?>{

            let uuid = UUID().uuidString

            model.id = uuid

      return Promise<T?> { seal in

          self.transaction(write: { (database) in
              database.add(mode)
          }) { result in

              switch(result){
              case .success(_):
                 // is returning the type `Object?`
                  seal.fulfill(self.queryFromId(id: uuid))
              case .failure(let error):
                  seal.reject(error)
              }
          }

      }

  }

Unable to infer complex closure return type; add explicit type to disambiguate

As the troubleshooting guide and the error both say, provide the closure return type:
.then { object -> Promise<OtherObject> in

so this should be somehow return the two promises

You didn’t specify what you were trying to achieve, so I can only guess. But probably you want when().
return when(fulfilled: self.otherObjectCreator.addObject(object: object), Promise.init(object))
```

You should read our documentation.

Unable to infer complex closure return type; add explicit type to disambiguate

As the troubleshooting guide and the error both say, provide the closure return type:
.then { object -> Promise<OtherObject> in

so this should be somehow return the two promises

You didn’t specify what you were trying to achieve, so I can only guess. But probably you want when().
return when(fulfilled: self.otherObjectCreator.addObject(object: object), Promise.init(object))
```

You should read our documentation.


frontend-only example fails to build

I cloned master and opened kotlin-frontend-plugin\examples\frontend-only\build.gradle using IntelliJ IDEA 2017.2.5 Community Edition on Windows 10. Building the project produces:

Would you mind setting up a  .travis.yml that verifies these examples build correctly?

What kotlin plugin version do you use? For sure project should be built via gradle.
You also can check fo r IDEA's settings Build, Execution, Deployment -> Build Tools -> Gradle -> Runner
In fact I already have CI configuration that is passing

In fact I already have CI configuration that is passing

I see it passing on TeamCity. ✅

For sure project should be built via gradle.
You also can check fo r IDEA's settings Build, Execution, Deployment -> Build Tools -> Gradle -> Runner -> Delegate IDE build/run actions to gradle

Thanks, that was not checked. It'd be great to add a readme to the examples folder mentioning this.


App was rejected on F-Droid

A few weeks/months ago the Ehrenamtskarte was more or less silently removed from the F-Droid store.
The reason for this is that our build process used proprietary Android libraries by Google.
Those libraries were never delivered to F-Droid users, as they were stripped during packaging.
Initial F-Droid merge request: https://gitlab.com/fdroid/fdroiddata/-/merge_requests/10382
Related issue of another app: https://gitlab.com/fdroid/fdroiddata/-/merge_requests/10991

@IzzySoft

OK, then s/if/when/ wink Should the need arise. Though it's be sad if a project dedicated to Ehrenamt would only be available via walled gardens and thus make it unavailable to some of us. Which is why I offer to take it into my repo as compromise.

Thanks!
Yes, I'd personally love to have it on F-Droid. But somebody has to put effort into maintaining it for F-Droid.
As a developer at Digitalfabrik I think it is better to include all of Digitalfabrik's apps in this discussion and: Either all apps or none of the apps is on F-Droid.
The biggest concern on my side is that we will never have proper insights on how many users are using the apps through F-Droid. Without this information its difficult to justify development time and resources.

Personally, I don't really agree with the F-Droid maintainers to remove this app. That's basically why I don't want to invest personal/free time into bringing the app again to F-Droid.
I think the exclusion is driven by ideology and not by practical reasons.

As a developer at Digitalfabrik I think it is better to include all of Digitalfabrik's apps in this discussion and: Either all apps or none of the apps is on F-Droid.

Multiple options here:

bring them all there
split them across repos (those meeting F-Droid's inclusion criteria go there, the others to a different repo)
set up your own F-Droid repo (not as hard to accomplish as you might think, see e.g. Setting up a simple binary F-Droid repo and its follow-up Extend the „simple binary repo“: Screenshots & more)
let's see if we can bring them to my repo

The 3rd option might be the one fitting you best, as you remain in full control – though the first option has more user-trust.

The biggest concern on my side is that we will never have proper insights on how many users are using the apps through F-Droid. Without this information its difficult to justify development time and resources.

If you need to justify that, well… you could ask for voluntary information (like a popup after the app has been opened for the 10th time, stating your needs and asking for a single ping-back). With us privacy folks, one first needs to earn a lot of trust before we allow you a "tracker" – and most won't be fine with a proprietary one.

Personally, I don't really agree with the F-Droid maintainers to remove this app.

I didn't follow that in detail, but IIRC it was due to a non-free dependency. And in that case the reasoning is perfectly clear: it violates the inclusion criteria. And there are no exceptions in such a case; if we make one exception here, why wouldn't there be another one there? And where's the line? No "Der Zweck heiligt die Mittel" with this, sorry.
On a different topic: It never hurts to show the card at places not advertising acceptance. Got a discount today on a boat trip, as the ships there are partially funded by the Freistaat Bayern. Nice :smiley:

Oh, I just noticed this isn't the original thread – and it has a different initial post:

Those libraries were never delivered to F-Droid users, as they were stripped during packaging.

That would be weird. IIRC the team investigated the resulting APK and found things there. As said, the discussion was a bit lengthy and I didn't follow it entirely (some other app(s) was/were affected the same way). The corresponding post is this one where one of the core members ran an in-depth build analysis. I'd basically go with Hans' conclusion (it would need an Anti-Feature but were allowed to stay) – but I'm no developer and thus lack the arguments there. If I could follow the entire thing to its last cell and still have the same opinion, I'd put up the argument.
That said, you have the reason why I'd accept it into my repo if you want to have it there. Concerning the other apps of Digitalfabrik you've mentioned, we must see one-by-one if they meet the (less strict) criteria of my repo.

The corresponding post is this one where one of the core members ran an in-depth build analysis.

I actually never saw that analysis before. There was another which had different results before. I'm a little bit shocked that the ehrenamtskarte app was removed, without officially letting us know the exact reasons via email. I was not aware that maplibre is the actual problem.
Also discussion the ehrenamtskarte app in some random other apps thread is not ideal.
So basically the exclusion is based on miss-communication. I'm happy to exclude the mentioned class files, which should be trivial (after some investigation).

If you need to justify that, well… you could ask for voluntary information

This is out of scope for us. Implementing such lightweight tracking is additional effort we can not really justify.

On a different topic: It never hurts to show the card at places not advertising acceptance. Got a discount today on a boat trip, as the ships there are partially funded by the Freistaat Bayern. Nice smiley

Yes :D I've heared that a few times already! Should try it myself!

So all in all, I would be happy about a report about the exclusion of the ehrenamtskarte. If we get that (via email or a Github issue here), we can evaluate the effort and implement it or look for alternatives.
I was really confused because I thought we were excluded because the build process required to download a library from Google, without including it in the final artifact. I was never aware or problems related to maplibre.

I was a bit confused about that myself, but thought I must have missed a part (as pointed out, not being an Android developer myself I felt lost in some places). Like Hans wrote: If it just references some non-free things, it should at most get the NonFreeDep Antifeature (if those parts are really needed for the functionality) and that's it.

So basically the exclusion is based on miss-communication. I'm happy to exclude the mentioned class files, which should be trivial (after some investigation).

That'd be great! If you'd open an issue for that here (for you to solve – i.e. the implementation tasks) I could try to point a team mate to that so you'd get feedback on whether that'd be sufficient (or what else might be amiss). Once solved it can be carried over to F-Droid again to re-enable the app.

I would be happy about a report about the exclusion of the ehrenamtskarte.

As I cannot really follow that, I'm afraid I cannot give you such report. All I noticed was Ehrenamtskarte being suddenly dragged in; I then ran my scanner and stated there was no such library included but the code had just some references (potential calls) to them. which might justify NonFreeDep, but not more.

I thought we were excluded because the build process required to download a library from Google

In that case, the initial MR for including your app would have failed.

I was never aware or problems related to maplibre.

And I'm not even sure if maplibre doesn't just use the same class names (like microG does). But again, I'm no Android dev – so I might not be exactly the right person to argue the details. Which is why I proposed to have a dedicated issue here for that – and I see if I can get a team member to take a look.

@maxammann take a look here.  Looks like maplibre has tackled the issue already. Maybe that could help re-establish Ehrenamtskarte?

@maxammann take a look here.  Looks like maplibre has tackled the issue already. Maybe that could help re-establish Ehrenamtskarte?

Not sure if maplibre changed anything. That thread is quite long, so I'm not sure what exactly the issue is, or in which version it was fixed.

If I understood this correctly, a newer version of maplibre solved it – but I totally lost track if some additional adjustments were needed. Indeed that issue got quite long – too long to be followed easily if you were not fully involved from the start, I'm afraid. Which is why I linked to the comment I hoped to have the most relevant notes for you…

We are currently not planning to release on F-Droid. We might upload FLOSS APKs to Github Releases in the future.

@maxammann please drop me a note when the APKs are available, so I can list the app in my repo again. Looking forward to that!

Sure, we will let you know! I would estimate that will be around April 2023. We are working on another app which is called "Nürnberger Sozialpass". That will use the same technical foundations.
After that is done we can do the low-prio stuff :)

Hi @maxammann, I see you started tagging releases again. Is there any hope the APKs will soon be attached there as well? :smiley:

cc @sarahsporck @f1sh1918 @michael-markl

We have removed the metadata from fdroiddata since all versions are diabled.

It seems, this is related: https://gitlab.com/fdroid/fdroiddata/-/commit/cba1111cbca58b5f069325da6be61fb61ea31e58

@maxammann @sarahsporck @f1sh1918 @michael-markl any news concerning the APK – so I could see to have the listing in my repo updated (which still has the one with the old applicationId)?

@maxammann @sarahsporck @f1sh1918 @michael-markl I see there was a new release 2 weeks ago, but no APK attached :cry: Is this still planned for the folks outside PlayStore, or do we have to abandon all hope?

@maxammann @sarahsporck @f1sh1918 @michael-markl I see there was a new release 2 weeks ago, but no APK attached :cry: Is this still planned for the folks outside PlayStore, or do we have to abandon all hope?

We gonna provide apks soon.

Usually it takes around two weeks until everything was tested and shipped from beta to production.
you can find the apks now on the release page. thx for reminder.
https://github.com/digitalfabrik/entitlementcard/releases/tag/v.3.2.0

Thanks!


Delete local objects that are no longer synced

After fetching /library/keys, find all local objects that aren't listed and delete them.

I currently have all the local object file caching turned off. I need to do more testing to see how well it works across browsers.
Safari pre-17 only gives 1GiB of space, which fills up very quickly.

I have to rethink caching in general, so I'm closing this for now.


Allow CompletionItem.detail to show syntax coloring

Feature request
Provide an api for syntax coloring the .detail section in a CompletionItem. For example, in:

The function alert(message?: any): void text would be colorized as typescript code.
Two possible ideas on how this could be implemented:
Proposal 1
Allow detail to be a MarkdownString
export class CompletionItem {
     ...
    detail?: string | MarkdownString;
    ...
}

Pros

Support other text markup such as bolding text

Cons

Perhaps too flexible since the detail text should always be a single line.

Proposal 2
Add a new language field for the detail string:
export class CompletionItem {
    ...
    detail?: string;
    detailLanguage?: string;
    ...
}

Pros

Standardized API that makes it very clear what the intended use case is

Cons

Less flexibility

I'm more in favor of something along the lines of the second proposal

@jrieken Can you  please take a look at these proposals and let me know if you have any feedback or another idea of how this could be implemented

I'm not sure if this should be a separate issue, but what about applying the same solution to SignatureInformation.label?

@KamasamaK The UI that shows labels is really minimal and the idea of the label is to be not much more than a single word. What is your use-case?

@jrieken Are you referring to the UI for CompletionItem.label? It appears to me like the UI for SignatureInformation.label is largely the same as CompletionItem.detail and would be as long as the full signature which can be many words. Perhaps this is just an issue of inconsistent naming.
Here are examples from VS Code's TypeScript extension:
Completion

Signature

Moving out of October as this needs some more thought.
@jrieken brought up some concerns:

Additional colors could be overwhelming. Current detail coloring is intentionally subdued

The code returned by extensions for the details is not always valid. TypeScript for example returns strings like:
interface Foo
var Foo: Foo

I've opened https://github.com/Microsoft/TypeScript/issues/19052 on the TS side to discuss how we could address this

(from https://github.com/microsoft/vscode/issues/106862#issuecomment-716604513)
I actually don't think that we want this. Today, details show inline with the item label or atop the documentation. We cannot render markdown as inline label which would mean no-details for markdown-style-details which then would make then just like documentation. So, the low hanging thing is to use the documentation property which does support markdown and then either leave out details or have some plain text in there.
Also, we have plans for richer labels that allow to show things like label, signature, qualifier, and type (https://github.com/microsoft/vscode/issues/39441). With that details would only be shown in the details panels and when omitted it isn't shown.

@jrieken Is that actually planned out for a release?

@kjeremy Do you mean #39441? The work is kinda done tbh. There is some API finalisation mostly around the question if we should name those label parts with "programming terms" like signature, qualifier, and type or if we should use generic terms like description, detail etc. What has hold us back is TS being unable to implement this and therefore us being unable to selfhost/verify this