Download backend: Request all thumbnails for channel

In order to provide a rich display of unavailable content, thumbnails for the missing content is desired. When downloading the starter pack content, request all thumbnails for each channel. This is a new option for the remotecontentimport Kolibri task added after 0.16.0-alpha14. The option is ignored on older releases.
#549

Since https://github.com/learningequality/kolibri/pull/10780 was merged, I tested this out on my local checkout. Good news - it works. Bad news - it significantly slows down the initial starter pack download. I tried this with the Scientist starter pack since it appeared to be the smallest and it was spending a lot of time downloading thumbnails. Presumably this is because it includes wikiHow, which has 88 MB of thumbnails.

I tried this with the Scientist starter pack since it appeared to be the smallest and it was spending a lot of time downloading thumbnails. Presumably this is because it includes wikiHow, which has 88 MB of thumbnails.

Might it work to download the thumbnails later as a separate background step that happens after the onboarding flow?

This looks good. Moving it to draft to avoid merging it until Kolibri 0.16 alpha15 is released.

I changed it so that once the initial download completes, the remaining thumbnails are queued up for downloading in the background. It worked, but I can't say this is particularly robust since the background tasks aren't tracked and I'm not sure if Kolibri will restart them if they fail.
Here's a screenshot with TechBridge Girls showing 2 unavailable nodes after I ran kolibri with KOLIBRI_NAVIGATE_UNAVAILABLE=true:

@dbnicholson the other problem I see is that the UI won't be refreshed with the thumbnails after the background download completes. That's another other reason to have a frontend component directing/monitoring the background job.

@dbnicholson it is a bit hacky but I think it will work. As long as the for loop (the one after marking "COMPLETED") ends without Kolibri stopping. Once the tasks are scheduled Kolibri persists them and they are ran across Kolibri sessions.
The less-hacky way is: direct the collection download from the App root Vue component (kolibri_explore_plugin/assets/src/app.js). Today it is directed from the Download page (kolibri_explore_plugin/assets/src/views/DownloadPage.vue).

Agreed it is hacky. I probably need a bit more help here. I don't understand how directing it from the app component rather than the download view affects what's going on here. Could you explain?
Regardless, I think the idea would be that once the collection download completes then the frontend would call a separate backend API to initiate the background thumbnail download. Is that right? Would we want to track those tasks in the session state like the collection download?

@dbnicholson it is a bit hacky but I think it will work. As long as the for loop (the one after marking "COMPLETED") ends without Kolibri stopping. Once the tasks are scheduled Kolibri persists them and they are ran across Kolibri sessions.
The less-hacky way is: direct the collection download from the App root Vue component (kolibri_explore_plugin/assets/src/app.js). Today it is directed from the Download page (kolibri_explore_plugin/assets/src/views/DownloadPage.vue).

Agreed it is hacky. I probably need a bit more help here. I don't understand how directing it from the app component rather than the download view affects what's going on here. Could you explain?

I wish I have a clear understanding too! My gut feeling is that we want to monitor the background task in order to refresh the nodes thumbnail property in the frontend state after the download is completed. And we want that to happen in any view, not just the download view. The component that is always present is the root app, the parent of any every component.

Regardless, I think the idea would be that once the collection download completes then the frontend would call a separate backend API to initiate the background thumbnail download. Is that right? Would we want to track those tasks in the session state like the collection download?

Yes, maybe split the foreground collection stages from the background stages (extra metadata and thumbnails). My point is that this will need more thinking to happen in the background. Maybe start easy by adding this in fhe foreground first?
About persisting, we decided to go with session state for the download. Maybe it deserves a Django model to persist it in the database? I wouldn't change it for now.

@dbnicholson it is a bit hacky but I think it will work. As long as the for loop (the one after marking "COMPLETED") ends without Kolibri stopping. Once the tasks are scheduled Kolibri persists them and they are ran across Kolibri sessions.
The less-hacky way is: direct the collection download from the App root Vue component (kolibri_explore_plugin/assets/src/app.js). Today it is directed from the Download page (kolibri_explore_plugin/assets/src/views/DownloadPage.vue).

Agreed it is hacky. I probably need a bit more help here. I don't understand how directing it from the app component rather than the download view affects what's going on here. Could you explain?

I wish I have a clear understanding too! My gut feeling is that we want to monitor the background task in order to refresh the nodes thumbnail property in the frontend state after the download is completed. And we want that to happen in any view, not just the download view. The component that is always present is the root app, the parent of any every component.

OK, I think I understand. We more or less want something attached to the root app that tracks any outstanding download tasks (whether foreground or background) so that any view can see the status of those tasks if they need to.

Regardless, I think the idea would be that once the collection download completes then the frontend would call a separate backend API to initiate the background thumbnail download. Is that right? Would we want to track those tasks in the session state like the collection download?

Yes, maybe split the foreground collection stages from the background stages (extra metadata and thumbnails). My point is that this will need more thinking to happen in the background. Maybe start easy by adding this in fhe foreground first?

Note that @dylanmccall is doing something very similar in #579. I'm going to sync up with Dylan to see if we can converge on a way to handle these background downloads. If that doesn't seem like it's going to materialize quickly then I'll go back to the original commit that simply adds all_thumbnails=True to the content download. It really slows things down, though.

About persisting, we decided to go with session state for the download. Maybe it deserves a Django model to persist it in the database? I wouldn't change it for now.

I think the session state is fine. Kolibri already has all the information we need as long as we keep the job IDs. A couple lists of job IDs stored in the session state seems fine to me.

Note that @dylanmccall is doing something very similar in #579

Oh that's great! Seems to be the way to go for these thumbnails and the extras metadata.

This is ready for review again. I attempted to use the process from #579 to queue the background tasks and it didn't work. That method depends on the frontend to keep calling the ek-collections/update-download API to query and enqueue the tasks. Obviously it can't do that if it wants to move on.
Instead, I simply queue them in the background as before but a little nicer. I added a separate queue for background tasks, made the plugin restart them when the app starts, and made the enqueing happen in an explicit stage so that we don't reach COMPLETED until they're enqueued.
The idea is that the frontend can query the background and foreground queues for completion and update the UI as needed. I started to play with that but my Vue is too weak. I'm hoping someone else (looking at you @manuq) can implement that part since I believe it's generally needed to monitor the content tasks like the Device plugin does.


Implement watchdog interface

I tried implementing a TWDT interface. Added an example in the watchdog::task module on how I thought of using this implementation. To access the watchdog functionality, I implemented a Task struct in module task.
I don't know if esp-idf-hal is the correct crate to implement it.
My thoughts on the implementation:

there is one global TWDT which can be accessed by taking it.
when I take the watchdog, it is initialized with default params (set in sdkconfig)
to reconfigure them at runtime, reconfigure() can be called
in a thread Task::current() accesses the current task
on this task struct, the watchdog can be set/deleted/reset

While implementing, I noticed that the interface of TWDT changed a little from v4.4 to master. So in the future, some adjustments must be done to upgrade.

Hmmm, if the API is not safe (as I suspect), maybe a safer API would be something where

The Task structure is completely absent. Instead, you just have a Watchdog thing, that you can always new or take or even clone but cannot Send (how that works under the hood is not so interesting for now).
The moment you instantiate a Watchdog instance, it is automatically attached to the current task
Dropping the Watchdog instance (implicitly or explicitly) would detach the current task from it
Since the Watchdog instance is effectively task-local (it is not Send) the API as a result should be safe, because you WILL drop it (explicitly or implicitly) before the current task is over
Trying to create two Watchdog instances in the same task/thread should fail, or should use a single watchdog instance (so to say) for that task under the hood

The only question is if have the use case where you need to "feed" the watchdog for "another" task which is not your current task. But even with the existing approach, I don't think this is possible, or if it is possible, this is so by accident.

Of course we still have core::mem::forget which also makes my API unsafe, but at least it is not "easily" unsafe?

The Task structure is completely absent. Instead, you just have a Watchdog thing, that you can always new or take or even clone but cannot Send (how that works under the hood is not so interesting for now).

I thought of a single watchdog instance to configure it. Else, where does the configuration happen to make it clear the global watchdog is configured?

Since the Watchdog instance is effectively task-local (it is not Send) the API as a result should be safe, because you WILL drop it (explicitly or implicitly) before the current task is over

That's a good point. I tested it without removing the task from the watchdog, and it crashed.
I thought on this a second time, could there be a use case where you don't want to unsubscribe from the watchdog when the thread terminates and want the watchdog behavior to be triggered? But I don't think so.

The only question is if you have the use case where you need to "feed" the watchdog for "another" task which is not your current task. But even with the existing approach, I don't think this is possible, or if it is possible, this is so by accident.

It isn't possible to feed the watchdog of a specific task. esp-idf impl

core::mem::forget

I think using this you can break most of the apis when it depends on dropping at the end.
Concept
// send, sync, clone
struct WatchdogManager;

let twdt = peripherals.TWDT;
let mut wd_manager = watchdog::task::WatchdogManager::new(twdt); // init configure
let mut wd_manager = watchdog::task::WatchdogManager::new_configure(twdt, Config {});
wd_manager.reconfigure(Config {});

{
    let watchdog: impl Watchdog = wd_manager.subscribe_current();

    watchdog.feed();

    drop(watchdog);
}

The Task structure is completely absent. Instead, you just have a Watchdog thing, that you can always new or take or even clone but cannot Send (how that works under the hood is not so interesting for now).

I thought of a single watchdog instance to configure it. Else, where does the configuration happen to make it clear the global watchdog is configured?

That's OK and can still be modeled, as per your concept below.

Since the Watchdog instance is effectively task-local (it is not Send) the API as a result should be safe, because you WILL drop it (explicitly or implicitly) before the current task is over

That's a good point. I tested it without removing the task from the watchdog, and it crashed.
I thought on this a second time, could there be a use case where you don't want to unsubscribe from the watchdog when the thread terminates and want the watchdog behavior to be triggered? But I don't think so.

But when the thread terminates and you are still subscribed, your program will crash (just as you confirmed above), because TaskHandle_t is in fact a pointer, which - after the task it models had quit - is invalid and should not be used.

The only question is if you have the use case where you need to "feed" the watchdog for "another" task which is not your current task. But even with the existing approach, I don't think this is possible, or if it is possible, this is so by accident.

It isn't possible to feed the watchdog of a specific task. esp-idf impl

Indeed. However, it is possible to add a task to the watchdog from another thread (esp_task_wdt_add). Another question how useful that is:
esp_err_t esp_task_wdt_add(TaskHandle_t task_handle)

I think using this you can break most of the apis when it depends on dropping at the end.

Sure, but you shouldn't crash though. Regardless, this is the best we can do anyway with the existing ESP IDF C APIs which do not support Arc and weak refs, obviously.

Concept
// send, sync, clone
struct WatchdogManager;

For symmetry, WatchdogManager should perhaps be named TaskWatchdogDriver or just WatchdogDriver or TWDTDriver or WDTDriver

let twdt = peripherals.TWDT;

Obviously, TWDT should be lower case and either twdt or wdt or watchdog. The peripheral interface should be Twdt or Wdt or Watchdog, and finally, the (only) peripheral impl should be TWDT, WDT or WATCHDOG.

let mut wd_manager = watchdog::task::WatchdogManager::new(twdt); // init configure

Yes. Taking twdt by move, or by &mut ref. Check Perihperal and PerihperalRef.

let mut wd_manager = watchdog::task::WatchdogManager::new_configure(twdt, Config {});

Actually, new should always take a Config instance (by ref), just like all the other drivers do. We aim at symmetry here. The Config can have a const new() and implement Default.

wd_manager.reconfigure(Config {});

Optional but possible, IMO.

{
let watchdog: impl Watchdog = wd_manager.subscribe_current();

watchdog should be a struct, we don't need to implement an "interface" (trait). Once a trait appears in e-hal, we'll implement it on top of the struct.
The struct can be named as a variation of the TaskWatchdogDriver from above, with or without a "Driver" suffix. Perhaps WatchdogSubscription or WatchdogActivation or something. Note that it needs to be lifetimed by 'a, where 'a comes from TaskWatchdogDriver { pub fn subscribe_current<'a>(&'a self) -> WatchdogSubscription<'a>. Alternatively, you can do it under the hood with AtomicUsize and make sure, that the you call esp_task_wdt_deinit only when all WatchdogSubscription instances are dropped, and the TaskWatchdogTimer as well. To avoid dependencies on the alloc module, and because your TaskWatchdogTimer is a singleton, you can just use a static AtomicUsize throughout the code.

watchdog.feed();

drop(watchdog);

}

But overall, yes - the concept should work.

Now I implemented my concept following the naming conventions.

let mut another_driver = driver.to_owned();
let mut watchdog = driver.watch_current_task()?;
let mut watchdog_2 = another_driver.watch_current_task()?;

Currently, this will fail with ESP_ERR_INVALID_ARG what means current task is already subscribed.

let mut another_driver = driver.to_owned();
let mut watchdog = driver.watch_current_task()?;
let mut watchdog_2 = another_driver.watch_current_task()?;

Currently, this will fail with ESP_ERR_INVALID_ARG what means current task is already subscribed.
Solutions:

Option 1: Return Result<Option<WatchdogSubscription<'_>>, EspError> from watch_current_task() -> None if current task is already subscribed
Option 2: ignore error in watch_current_task() resulting from task already subscribed and in Drop of WatchdogSubscription resulting from current task is not subscribed at second drop

Option 2 is not possible to implement if you think about it for a while.
You should do Option 1, but we already discussed once that Result<Option<...>> is pointles. Please simply return `Result<WatchdogSubmission<'_>, EspError> as you do now. It is just that we have to be sure, that only one subscription to a task succeeds.

Sorry for the delay here. I'm releasing esp-idf-hal v0.40 ATM; I'll get back to your PR over the weekend.

I think, now it's all done.

Seems C is failing on v5.0 builds, would you mind taking a look at that?

For some reason the CI isn't running on that last commit, I can't even force it to run from here as it doesn't see the workflow files. Perhaps a rebase is needed?

@teamplayer3 Still failing for the esp32c3.

@ivmarkov found the mistake, please rerun.

@ivmarkov  What should I do with get_idle_task()? It is only used by watchdog, but a nice to have function as well?

move it into watchdog
make it public
add a #![cfg(<same as watchdog>)]

Hopefully the last time!

How can I fix the current error in xtensa-esp32s3-espidf, release/v4.4?

No idea what is going on with the CI. It seems to be a CI problem, yet it is failing only with this PR. Let me merge and see if the main CI would build.


Enable firewall protection on KMS KeyVault

Is this a request for help?: No

Is this an ISSUE or FEATURE REQUEST? (choose one): Feature Request

What version of acs-engine?:
Version: v0.24.3
GitCommit: ad007b644
GitTreeState: clean

Orchestrator and version (e.g. Kubernetes, DC/OS, Swarm)
Kubernetes 1.11
What happened:
I deployed a new cluster and specific in the API model "enableEncryptionWithExternalKms": true. KeyVault created as expected, but without firewall rules.
What you expected to happen:
Allow creating (or create by default) a rule that allows access only from the cluster VNet, maybe limit only to the master subnet.
How to reproduce it (as minimally and precisely as possible):
Deploy a cluster with "enableEncryptionWithExternalKms": true.
Anything else we need to know:

Also, is the key created on KeyVault can be of type HSM?

@omerlh thanks for the feedback.

Allow creating (or create by default) a rule that allows access only from the cluster VNet, maybe limit only to the master subnet.

This makes sense. I will add this as a default to acs-engine.

is the key created on KeyVault can be of type HSM?

Currently we only support creation of a standard sku key vault for this feature. To create HSM-protected keys, you will need to use the Premium service tier: https://docs.microsoft.com/en-us/azure/key-vault/key-vault-get-started#HSM
I will create an issue to track this issue on https://github.com/Azure/kubernetes-kms

Thanks :) Should I as a customer should worry about key rolling? What do you recommend?

@omerlh
From https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/#providers
[KMS is]

The recommended choice for using a third party tool for key management. Simplifies key rotation, with a new DEK generated for each encryption, and KEK rotation controlled by the user.

From https://github.com/Azure/kubernetes-kms

Currently KMS plugin for Kubernetes does not support KMS KEK rotation scenarios. This means if you choose to create a new key version in KMS, the cluster will fail to decrypt as it won't match the KEK used for encryption at the time the cluster was created.

You can also follow this issue: https://github.com/Azure/kubernetes-kms/issues/8

Thank you!


RVM support & rspec --init support

Always generate RVM .ruby-version file defaulting to the same Ruby used to run juwelier command
Support generating RVM files via the --rvm option, yielding .ruby-version and .ruby-gemset
Avoid generating both .ruby-version and .ruby-gemset via the --no-rvm option
Run bundle install after adding files to generated project when using --bundler
Run rspec --init after adding files to generated project when using --rspec option (generating spec directory just like Jeweler did. This addresses my reported issue https://github.com/flajann2/juwelier/issues/13)
Fix Juwelier's version in the version.rb file (will need another update when the next bump happens, please keep in mind)

(note: depends on https://github.com/flajann2/juwelier/pull/11 to pass the tests since it fixes the test suite, which was broken prior to my changes)
p.s. if you need maintainers, I’d be happy to help maintain Juwelier and Jeweler since I’ve been relying on since the mid 2000s and autoinstall for users of Glimmer DSL for SWT during scaffolding.

Just a quick note that one of my projects generated by Juwelier won a Fukuoka Ruby Award Competition 2022 Special Award:
https://andymaleh.blogspot.com/2022/02/glimmer-dsl-for-libui-wins-fukuoka-ruby.html
http://www.digitalfukuoka.jp/topics/187?locale=ja
The point I am trying to make is my projects not only rely on Juwelier, but require it to quickly scaffold new desktop applications.
It would be really great if this project would go back to being regularly maintained (which I thought was the whole point of splitting from Jeweler in the first place!).
Again, if you need help as an extra contributor, it is in my best interest to have this project continue to be maintained, and even florish! I do not like any of the competing products, and would much prefer using Juwelier (or Jeweler) instead.
Cheers!


defaultTerminal not working on Linux

in julia-client.coffee there's a defaultTerminal property that seems to appropriately set the terminal based on platform, but when I look at my settings on Linux the terminal setting is set to the windows value.
I set a breakpoint in defaultTerminal and reloaded and it looks like process.platform is undefined while the package is loading? :disappointed:

Should be fixed by #37. Settings are showing linux terminal as Default: x-terminal-emulator -e now.

@ssfrr Is this still an issue?

Nope, looks solved. thanks.


Fix case-insensitive comparison in Session.get_adapter

While trying to get the adapter for an url, the url is lowered before comparing with the prefix, but the prefix is not, so if it contains non-lowercase characters (eg. https://example.com/sOmE_WeiRD_pReFIX/), it won't return the correct adapter.
The other solution is to lower the prefix while adding the adapter. I have opted for the first solution to isolate in one place the case-insensitivity feature.
Edit:
Another alternative could be to document that the prefix should be passed lowered to Session.mount() (this is what I am doing for now to work-around the issue).

Yes, I will update the pull requests with them.

Codecov Report

Merging #4349 into master will not change coverage.
The diff coverage is 100%.

@@           Coverage Diff           @@
##           master    #4349   +/-   ##
=======================================
  Coverage   88.28%   88.28%
=======================================
  Files          18       18
  Lines        2031     2031
=======================================
  Hits         1793     1793
  Misses        238      238

Impacted Files
Coverage Δ

requests/sessions.py
95.55% <100%> (ø)
:arrow_up:

Continue to review full report at Codecov.

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

@Lukasa I have added one test to check that it works with mixed case, another to check that the comparison is case-insensitive (this two are the ones that would have been failing before), and also another test to check prefix matching works as expected, ie. returning the adapter with the longest prefix that match (as I haven't found any test about it).

Mind bringing this branch up to date with master?

Done!

Thanks! 🎉


The ESP32 cannot ping the router

I used an ESP32 and a router to collect channel status information, set the router as AP and ESP32 as STA, and finally used ESP32 to ping the router, which failed. Come to consult。

Excuse me, I would like to ask you about the difference between ESP32 and Intel5300 in collecting CSI. Could you give me some advice?

@2422092593zhangshuo See https://github.com/espressif/esp-csi/issues/22

Thank you very much. Is the length of CSI  received by ESP32 related to the number of antennas on the router?

The CSI data I collected was carried out under the condition of 20MHz HT,no seconary_channel and stbc. The length of CSI data is 256，how should LLTF and HT-LTF subcarrier indexes be distinguished. Could you give me some help? Thank you

@2422092593zhangshuo
#define CSI_SUBCARRIER_LLTF_LEN                  52 /**< 6 ~ 31 33 ~ 58 ---> 52 */
#define CSI_SUBCARRIER_HTLTF_LEN               56 /**< 66 ~ 122       ---> 56 */
#define CSI_SUBCARRIER_STBC_HTLTF_LEN   56 /**< 123 ~ 191      ---> 56 */

Thanks you for the reply. Calculated in this way, LLTF_LEN is  52,HTLTF_LEN is 56 STBC_HTLTF_LEN is 68.
what's your opinion? Could you give me some advice? Thank you.

Thanks you for the reply. Calculated in this way, LLTF_LEN is  52,HTLTF_LEN is 57 STBC_HTLTF_LEN is 69.
what's your opinion? Could you give me some advice? Thank you.

Thanks you for the reply. Calculated in this way, LLTF_LEN is 52,HTLTF_LEN is 57,STBC_HTLTF_LEN is 69.
what's your opinion? Could you give me some advice? Thank you.

Because some of the sub-carriers have very small amplitude variances, they are filtered

Thank you.The length of CSI data I collected was 256.
#define CSI_SUBCARRIER_LLTF_LEN                  52 /< 6 ~ 31 33 ~ 58 ---> 52 */
#define CSI_SUBCARRIER_HTLTF_LEN               56 /< 66 ~ 122       ---> 56 */
Can I take it this way？

This needs to be judged based on the received Wi-Fi communication protocol, see: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/wifi.html#wi-fi-channel-state-information

Hello, @2422092593zhangshuo
Closing this issue, feel free to reopen with more updates. Thanks.


[CP Staging] fix Split amount is not selected

Details

Fixed Issues

$ https://github.com/Expensify/App/issues/42207
PROPOSAL: https://github.com/Expensify/App/issues/42207#issuecomment-2113471527
Tests

Open app
Go to FAB > Split expense.
Enter amount and select participants.
On confirmation page, double click on the split amount input.
The value in the input will be selected.

[x] Verify that no errors appear in the JS console

Offline tests

QA Steps

Open app
Go to FAB > Split expense.
Enter amount and select participants.
On confirmation page, double click on the split amount input.
The value in the input will be selected.

[x] Verify that no errors appear in the JS console

PR Author Checklist

[x] I linked the correct issue in the ### Fixed Issues section above
[x] I wrote clear testing steps that cover the changes made in this PR

[x] I added steps for local testing in the Tests section
[x] I added steps for the expected offline behavior in the Offline steps section
[x] I added steps for Staging and/or Production testing in the QA steps section
[x] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
[x] I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

[x] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[x] MacOS: Desktop

[x] I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
[x] I followed proper code patterns (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
[x] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method

[x] If any non-english text was added/modified, I verified the translation was requested/reviewed in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I followed the guidelines as stated in the Review Guidelines
[x] I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] I verified that if a function's arguments changed that all usages have also been updated correctly
[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:

[x] I verified that all the inputs inside a form are aligned with each other.
[x] I added Design label and/or tagged @Expensify/design so the design team can review the changes.

[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.

Screenshots/Videos

Android: Native

Android: mWeb Chrome

iOS: Native

iOS: mWeb Safari

MacOS: Chrome / Safari

https://github.com/Expensify/App/assets/161821005/c31748bf-3907-4944-a944-3e86e73ff148

MacOS: Desktop

🚀 Cherry-picked to staging by https://github.com/Beamanator in version: 1.4.74-2 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

@Expensify/applauseleads please QA this PR and check it off on the deploy checklist if it passes.

Works on staging! 👍

🚀 Deployed to production by https://github.com/chiragsalian in version: 1.4.74-6 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅


Ionic 3 content does not scroll when you add tap gesture

This works fine

This does not work....scrolling fails

<ion-item *ngFor="let person of people" (tap)="someFunction()">

This also does not work....scrolling fails

<ion-item *ngFor="let person of people" (press)="someFunction()">

hi, i have the same bug, first i thinking was the ionic 3 update but a test an remove (tap) event an everything work fine
issue 11050

Thanks for opening this issue.
I replaced tap event with click event and now it's working fine.
I had some issues before with click event that's why I was using tap.

I'm having this issue too. I use both 'tap' and 'press' on my componenents so using click is not an option unless I stop using that press event as as well.
Any other workaround short of reverting to the previous version of Ionic?

Yup I also use both press and tap. Even swipe gesture brings some inconsistencies on scrolling...it works and then breaks.....

Same here! But only with Android device - testing with Xperia M4 Android 5.0.
I´m using WKWebView, so I´m not sure if this problem occurs also on iOS with UIWebView.

Look like I've got the same problem with (swipe) on iOS. Still trying to reproduce it with a simple app
(My issue I opened/closed: https://github.com/driftyco/ionic/issues/11134

This issue #11137 sounds related too btw.

I also have this problem using an  where the items have a (press) gesture attached.

I spend so many hours on this...can't reproduce my scroll problem in a simple app but on the other hand can't solve the problem in my app with Ionic 3 :(
@jgw96 are you guyz more successful?

I honestly can't figure out what makes one of my pages different than the others. It works on one, but does not work on another. It seems that whatever element has the (press) gesture attached cannot be used to scroll the content.

Me neither can't figure out what's wrong. I just noticed that maybe my pages, where the scroll is freezing in Ionic 3 and not in 2, contains probably more DOM elements and components than in the other pages of my app

For me, this was occurring when using the (tap) event on an <ion-item> within an <ion-list>. Changing that event to (click) resolved the issue for me. It's also important to mention that scrolling was only affected on Android. iOS scrolling of an <ion-list> with a (tap) event on each <ion-item> was working fine.

For me the problem was most probably finally not related to this issue. After hours and days I figured out that, if you are using like me the module SwingModule (angular2-swing), for an unknown reason, if you use the (swipe) event on a scroll or list, even not in the same page as where you are using the swing itself, the scroll or list gonna be frozen respectively not scrollable.
If I remove the SwingModule from my imports in app.module, then scroll and list combined with an event (swipe) are scrollable too again.

I'm not using swing, just for the record. Just a (press) event.

Hello,
I have the same behavior here:
<ion-list [virtualScroll]="dataArticlesFiltered_ToView" approxItemHeight="200px"
                              approxHeaderHeight="0px" approxFooterHeight="0px" approxItemWidth="100%"
                              virtualTrackBy="trackByArticles">

                        <ion-card *virtualItem="let article;let idx = index"
                                  (click)="ViewArticle($event, article, null)"
                                  (swipe)="SwipeArticle(article, $event, index)"

<EMAIL_ADDRESS>                                  class="article-ion-card article-ion-card-onecolumn"
                                  [ngClass]="{'articleRead_AdaptiveView': (article.hide && viewType != 'HiddenNews') || (article.read && viewType != 'ReadNews') }">
                            <ArticleViewAdaptive [article]="article"></ArticleViewAdaptive>
                        </ion-card>
                    </ion-list>

With (swipe) event => Scroll is not working
Without (swipe) event => Scroll is working
There was a similar behavior with a previous version "Press gesture and scroll conflict " https://github.com/driftyco/ionic/issues/8109

I am having the same problem (Ionic 3.0.1, Angular 4.0.0). This happens with any combo of 2 or more events (click and swipe, for example).
List scrolling was working just fine in Ionic 2 and it's now broken after upgrading.
Some code here to illustrate the problem.

I'm having the same issue. Most of people commenting here got this using *ngFor, i tried hard coding some cards with a press  and when the cards reach the bottom of the screen (like 4 or 5 cards) the scrolling doesn't works, but when it has only 2 or 3 itens and they don't reach the bottom of the page the scrolling works fine. Using (tap) or (press) or both of then in a haven't altered anything.

I'm having this issue too. When I use the (swipe) the scroll stop working on Android.

Hello, all! Just wanted to update this issue. I will be adding this one to our list of issues to consider for the next release milestone.

I didn't had this issue with (tap) but I had blocked scroller on Android and iOS devices when using (click) and (swipe) inside ion-scroll/ion-list.
Guess what, after a couple of weeks, it's now solved (I tested the issue in my app on real devices, iPhone 6, Nexus 5X and Samsung Edge)!
Don't know why because I wasn't working on that today. What I could say, except some development not related to that I updated app-scripts and reinstalled all my dependencies:

Update to "@ionic/app-scripts": "1.3.6"
rm -r node_modules
npm install

and I also updated cordova and both platform
npm install cordova -g
ionic platform rm ios
ionic platform add<EMAIL_ADDRESS>ionic platform rm android
ionic platform add<EMAIL_ADDRESS>Hope you guys gonna be as lucky as I'm :)
Your system information:
Cordova CLI: 6.5.0
Ionic Framework Version: 3.1.0
Ionic CLI Version: 2.2.1
Ionic App Lib Version: 2.2.0
Ionic App Scripts Version: 1.3.6
ios-deploy version: 1.9.0
ios-sim version: 5.0.13
OS: macOS Sierra
Node Version: v7.2.1
Xcode version: Xcode 8.3 Build version 8E162

Thanks for sharing @peterpeterparker
Same thing here, the problem is solved with the update to Ionic.3.1.1

Hello all! Since this issue was fixed in ionic 3.1.1 I am going to close this issue for now. Thanks for using Ionic everyone and thanks for the patience on this issue.

The problem does not seem to be resolved。
I'm using ionic  -3.6.0。
I use “swipe”  and  “overflow:scroll” at the same time.
it  Can not scroll。
“click”  event  can

The same as @zds-jack .
It works before, but after I upgraded the ionic(or ionic-angular) version, it can't.

This bug is not fixed even in ionic 3.8.1. When you have elements which listen for tap events inside an ion-scroll element, scrolling is not working properly anymore. You can only scroll when you manage to start swiping on the scroll container itself. When the swipe gesture starts on an element which listens for tap, scrolling does not work.
Changing tap to click event immediately fixes the scrolling problem.

It's a real problem. Changed click events to tap and on android it does not allow to scroll on those items. Why in half a year nobody tried to fix this issue?

Still reproducible for me

For anyone still having these issues, I've found a workaround for (press) events. They're far from ideal, I'll admit it myself, but I think they could help in a pinch. As a forewarning, I only use the press event and so don't have a way to allow for short press events (like the ionic press event) and long press events to coexist on the same Component, though this code could easily be adapted to allow for it.
Code
in your component's controller:
@HostListener('touchstart', ['$event'])
  touchStart = (event: TouchEvent) => {
    this.currentTouch = event;

    this.timeout = setTimeout(() => this.onPress(event), 1000);
  }

  onPress(event: TouchEvent){
    if (this.currentTouch != null) {
      let touch: Touch = this.currentTouch.touches[0];
      let thisElem: Element = this.elRef.nativeElement;
      let otherElem: Element = document.elementFromPoint(touch.clientX, touch.clientY);
      console.log('testing util');

      if (HTMLUtils.hasChild(thisElem, otherElem)) {
        console.log('Press');
        //Do things here
      }
    }
  }

  @HostListener('touchmove')
  onEnter = (event) => {
    this.currentTouch = event;
  }

  @HostListener('touchend')
  onLeave = (event) => {
    window.clearTimeout(this.timeout);
    this.currentTouch = null;
  }

And here's the HTMLUtils.hasChild() code:
public static hasChild(parent: Element, target: Element) {
        let children: HTMLCollection = parent.children;
        for (let i: number = 0; i < children.length; i++) {
            let item: Element = children.item(i);

            if (item == target) {
                return true
            } else {
                return this.hasChild(item, target);
            }
        }

        return false;
}

Again, this solution is pretty stopgap since you need to add private members to the controller class and a whole bunch of code for not much, but it works well enough for me in the meantime.

sorry - but after nearly a year i have to ask this ...
is there still hope? i really need the customizable (tap) event instead of click's :/

this needs a fix;/

I fixed my issue.
For my particular situation the issue was that the ion-grid was populated using a *ngFor looping over te result of a function call. The consequence was that the ion-grid was constantly being refreshed, which continually interrupted scrolling.
I refactored the ion-grid to use a property rather than a function call, and now my ion-grid is scrolling fine.

For those still looking to enable scrolling,
Please see this solution,
https://github.com/hammerjs/hammer.js/issues/1014#issuecomment-372513548

This has not been fixed, scrolling does not work when the touch start under elements with (press)


Downgrade log message severity when there are multiple security definitions

My Swagger spec has multiple security definitions (for Basic auth and JWT/Bearer auth), and whenever I start my server I see lots of output telling me that Connexion isn't going to verify the passed credentials.
This PR downgrades the message severity. There is a similar message at debug level for when the API has Basic auth, as Connexion doesn't validate that either.
py27-dredd runtests: commands[1] | ./test_api.sh
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:17] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
info: Configuration './dredd.yml' found, ignoring other arguments.
info: Starting backend server process with command: python ./run.py
info: Waiting 3 seconds for backend server process to start.
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**
[08/May/2017 13:23:20] WARNING connexion.operation ... More than one security requirement defined. **IGNORING SECURITY REQUIREMENTS**

Changes proposed in this pull request:

Downgrade message severity

It makes sense to me.

👍

I'm not entirely sure --- while I clearly see that there is a lot of log spamming, it's quite a dangerous (and unexpected) behavior of Connexion just ignoring multiple security definitions without any warning or informational output. I generally expect software to "work as expected" and tell me if it cannot do so (ignoring multiple security defs is certainly "not working as expected" from the user POV).

I can understand your point. The counterpoint I can give is that Connexion
already ignores security definitions for APIs which only have basic auth
without warnings or output (other than than at debug level). I also think
that it'll never be possibly for Connexion to verify every arbitrary
security method that could be implemented in an API, so making so much log
output in those cases is not helpful.
Another solution I could propose would be to log that particular message to
a sub logger, which would let me disable that logger in my application
without changing the semantics for anyone else.
Em ter, 9 de mai de 2017 21:35, Henning Jacobs<EMAIL_ADDRESS>escreveu:

I'm not entirely sure --- while I clearly see that there is a lot of log
spamming, it's quite a dangerous (and unexpected) behavior of Connexion
just ignoring multiple security definitions without any warning or
informational output. I generally expect software to "work as expected" and
tell me if it cannot do so (ignoring multiple security defs is certainly
"not working as expected" from the user POV).
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/zalando/connexion/pull/448#issuecomment-300293336,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AA0qSjMRpGaEx2B263W_D6_gLezfrQl3ks5r4M4ZgaJpZM4NVkgC
.

@jakul you convinced me with the example of Connexion silently ignoring basic auth if there is only one security def! :smile:

:+1:

Yaaaaay 🎉
Thanks for the good work on this library guys. It's helped me to enforce
"documentation first" APIs at work, instead of the "what's documentation?"
APIs we had before 😀
Em ter, 9 de mai de 2017 22:30, Henning Jacobs<EMAIL_ADDRESS>escreveu:

Merged #448 https://github.com/zalando/connexion/pull/448.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/zalando/connexion/pull/448#event-1075405299, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AA0qShcvyshfB-I9VDTrJeYy8g-UK6mlks5r4NrsgaJpZM4NVkgC
.

@jakul thanks for the nice words and yes, I also struggle with people seeing Swagger/OpenAPI primarily as "documentation" (i.e. they regard it as an afterthought).


scheduling: add skip_on_overtime option

@danielnorberg S3WaitIT is failing and it's my fault (sorry, I broke the master once). bf25c9d3e330eee11c9fa5f96675b625c963e6b8 fixed it. So please rebase from master.


Automatically convert URLs in values into links in the dashboard

Description
Automatically convert URLs in values and properties into links:

GridValue is used in many places:

Resource properties, structured logs properties, span propertries
Env vars
Message on structured logs grid

There is a limitation: it doesn't work together with highlighting. Highlighting is only supported over plain text, not HTML. That means links are disabled when you begin searching with a filter and you go back to the current experience.
Getting these two features to work together properly is quite tricky. Will require building up a model of the text and transforming it when applying different operations (adding in links, adding in highlights)
Addresses https://github.com/dotnet/aspire/issues/6175
Fixes https://github.com/dotnet/aspire/issues/4845
Checklist

Is this feature complete?

[x] Yes. Ready to ship.
[ ] No. Follow-up changes expected.

Are you including unit tests for the changes and scenario tests if relevant?

[ ] Yes
[x] No

Did you add public API?

[ ] Yes

If yes, did you have an API Review for it?

[ ] Yes
[ ] No

Did you add <remarks /> and <code /> elements on your triple slash comments?

[ ] Yes
[ ] No

[x] No

Does the change make any security assumptions or guarantees?

[ ] Yes

If yes, have you done a threat model and had a security review?

[ ] Yes
[ ] No

[x] No

Does the change require an update in our Aspire docs?

[ ] Yes

Link to aspire-docs issue:

[x] No

This is an impactful change with some risk. Post 9.0 feature.

Please take another look. I came back to his and did some more testing and noticed that content wasn't properly HTML encoded. Required a change in order of operations when parsing logs and content.

Please hold off on merging this for a day as I'm looking at https://github.com/dotnet/aspire/pull/6230 today for 9.0 and will want to backport it. There's overlap here which would make that backport difficult/risky.


Add missed third-party dependencies  for ubuntu

Fix for compile time errors:

Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" failed.
Compiler: CMAKE_CXX_COMPILER-NOTFOUND

Could not find zlib

Could not find openssl

Could not find curl

Issue #, if available:
Description of changes:
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

Thank you for identifying this problem and providing a possible solution. We pushed changes to the developer_preview branch that should resolve the issue. See 6b40704b. We are closing this pull-request. Please let us know if our solution does not work for you.


Fastlane android deploy issue

New Issue Checklist

[x] Updated fastlane to the latest version
[x] I have read the Contribution Guidelines

Issue Description
I am using fastlane for android builds. I have a lane with does a check build and a lane that deploys to hockey app. Both of these work fine. However, when I try to do a lane that deploys the app, it seems like fastlane is not setup correctly.
Complete output when running fastlane, including the stack trace and command used
Starting: ....
[19:49:34][Step 2/2] in directory: ....
[19:49:35][Step 2/2] [15:49:35]: Could not find fastlane in current directory. Would you like to set it up?
[19:49:35][Step 2/2]
[19:49:35][Step 2/2] Looking for related GitHub issues on fastlane/fastlane...
[19:49:35][Step 2/2]
[19:49:35][Step 2/2] ➡  How to call deliver download_metadata from fastlane
[19:49:35][Step 2/2]    https://github.com/fastlane/fastlane/issues/5397 [closed] 8
[19:49:35][Step 2/2]    3 weeks ago
[19:49:35][Step 2/2]
[19:49:35][Step 2/2] ➡  Jenkins cannot find FastLane
[19:49:35][Step 2/2]    https://github.com/fastlane/fastlane/issues/4864 [closed] 0
[19:49:35][Step 2/2]    26 May 2016
[19:49:35][Step 2/2]
[19:49:35][Step 2/2] ➡  Deliver - Non-Interactive Mode not working for initial setup
[19:49:35][Step 2/2]    https://github.com/fastlane/fastlane/issues/4820 [closed] 1
[19:49:35][Step 2/2]    27 May 2016
[19:49:35][Step 2/2]
[19:49:35][Step 2/2] and 1 more at: https://github.com/fastlane/fastlane/search?q=Could%20not%20retrieve%20response%20as%20fastlane%20runs%20in%20non-interactive%20mode&type=Issues&utf8=✓
[19:49:35][Step 2/2] /Library/Ruby/Gems/2.0.0/gems/fastlane_core-0.50.2/lib/fastlane_core/ui/interface.rb:132:in `crash!': [!] Could not retrieve response as fastlane runs in non-interactive mode (FastlaneCore::Interface::FastlaneCrash)
[19:49:35][Step 2/2] 	from /Library/Ruby/Gems/2.0.0/gems/fastlane_core-0.50.2/lib/fastlane_core/ui/implementations/shell.rb:119:in `verify_interactive!'
[19:49:35][Step 2/2] 	from /Library/Ruby/Gems/2.0.0/gems/fastlane_core-0.50.2/lib/fastlane_core/ui/implementations/shell.rb:97:in `confirm'
[19:49:35][Step 2/2] 	from /Library/Ruby/Gems/2.0.0/gems/fastlane_core-0.50.2/lib/fastlane_core/ui/ui.rb:14:in `method_missing'
[19:49:35][Step 2/2] 	from /Users/autoloop/.gem/gems/fastlane-1.101.0/lib/fastlane/commands_generator.rb:256:in `ensure_fastfile'
[19:49:35][Step 2/2] 	from /Users/autoloop/.gem/gems/fastlane-1.101.0/lib/fastlane/commands_generator.rb:48:in `block (2 levels) in run'
[19:49:35][Step 2/2] 	from /Library/Ruby/Gems/2.0.0/gems/commander-4.4.0/lib/commander/command.rb:178:in `call'
[19:49:35][Step 2/2] 	from /Library/Ruby/Gems/2.0.0/gems/commander-4.4.0/lib/commander/command.rb:178:in `call'
[19:49:35][Step 2/2] 	from /Library/Ruby/Gems/2.0.0/gems/commander-4.4.0/lib/commander/command.rb:153:in `run'
[19:49:35][Step 2/2] 	from /Library/Ruby/Gems/2.0.0/gems/commander-4.4.0/lib/commander/runner.rb:444:in `run_active_command'
[19:49:35][Step 2/2] 	from /Library/Ruby/Gems/2.0.0/gems/fastlane_core-0.50.2/lib/fastlane_core/ui/fastlane_runner.rb:36:in `run!'
[19:49:35][Step 2/2] 	from /Library/Ruby/Gems/2.0.0/gems/commander-4.4.0/lib/commander/delegates.rb:15:in `run!'
[19:49:35][Step 2/2] 	from /Users/autoloop/.gem/gems/fastlane-1.101.0/lib/fastlane/commands_generator.rb:246:in `run'
[19:49:35][Step 2/2] 	from /Users/autoloop/.gem/gems/fastlane-1.101.0/lib/fastlane/commands_generator.rb:20:in `start'
[19:49:35][Step 2/2] 	from /Users/autoloop/.gem/gems/fastlane-1.101.0/lib/fastlane/cli_tools_distributor.rb:58:in `take_off'
[19:49:35][Step 2/2] 	from /Users/autoloop/.gem/gems/fastlane-1.101.0/bin/fastlane:5:in `<top (required)>'
[19:49:35][Step 2/2] 	from /Users/autoloop/.gem/bin/fastlane:23:in `load'
[19:49:35][Step 2/2] 	from /Users/autoloop/.gem/bin/fastlane:23:in `<main>'
[19:49:35][Step 2/2] Process exited with code 1
[19:49:36][Step 2/2] Step Build (Command Line) failed

Configuration Files
Please copy the complete content of your Fastfile and any other configuration files you use below:
Fastfile:
desc "Deploy a new version to the Google Play"
  lane :store do |options|
  gradle(task: "clean",
           properties: {
           'versCode' => options[:build_number]
           })
    gradle(task: "assembleRelease",
          properties: {
          'versCode' => options[:build_number]
          })
    supply
  end

Environment
fastlane version (run fastlane -v):
fastlane_version "1.100.0"
Do you use bundler to execute fastlane (i.e. bundle exec fastlane)?
no
Do you use a Ruby environment manager (e.g. chruby, rbenv, rvm)?
no

@mattfred Can you share the command you're running and the directory you're running it in?

This was an issue with git. I have it fixed now. Thanks


Just wanted to say thanks

I couldn't find any type of comment section in github but I have been looking for this type of application for years now. So happy I stumbled upon it. Great work!!!

Thank you for your kind words!


Can find module js ?

Instructions
Please fill out the template below to the best of your ability and include a label indicating which tool/service you were working with when you encountered the problem.
Node 16.14.2
Problem
<what is the problem you've encountered?>
I use processFolder api with setEnv to build js script with import constract to be binding with address map, but when i import flow-cadut/generator it cant find this module ?
Steps to Reproduce

Acceptance Criteria

Context
<what are you currently working on that this is blocking?>

Could be CommonJS problem... :thinking:
Can you try import instead?

@MaxStalker  https://github.com/onflow/flow-cadut/blame/main/package.json#L28-L57  it was on this line , the publish package was built to ./package/dist/somefile.js  example for generator which is :
./generator/dist/generator.module.js
another thing that prebuild template wasn't in generator, i duntknown why can u give it a try ?

@hotrungnhan thanks for the notes :)
Will take a look now.

@hotrungnhan templates are pre-built here:
https://github.com/onflow/flow-cadut/blob/main/generator/src/templates/index.js
Checking now if they are included in the bundle.

const path = require("path")
const { processFolder } = require("flow-cadut/generator");

(async () => {
    const input = path.resolve("./scripts");
    const output = path.resolve("./dist");
    await processFolder(input, output);
    console.log("✅ Done!");
})();

this is my sample can u try ?

@MaxStalker  is't code ok ? i check on version 0.15.0 do not work as well.

@hotrungnhan working on it, sorry it took a bit more time than I anticipated :sweat_smile:

@hotrungnhan working on it, sorry it took a bit more time than I anticipated 😅

=)) respect ><

Can you give a try to version 0.1.16-alpha.4?

@MaxStalker  it print out the file list , but the output folder isn't generated


Write Once Property

Ability to have a write once property.

Right now the closest to this is GettableProperty. This can have a default value (possibly a callable) that is set on instantiation and unchanged after that.
This is slightly different than a property that can be written once by the user.

Sounds interesting. What's the use case?

This is similar to a GettableProperty with a dynamically created default value. For example, here UidModel has date_created, an immutable property set on construction: https://github.com/aranzgeo/omf/blob/v0.9.0/omf/base.py#L21
Write once property would be for something similar, where the value on construction would need to be provided by the user, rather than set to a programatic default. However, I haven't yet encountered a use-case for that, which is why this is still a pending issue.

I'm inclined to close this since no valid use case has come up. The closest thing is something like an api key that is generated once, displayed to the user, then inaccessible after that. However, I don't think something like that is within the scope of properties.


--editor to select the parser to use

Changes proposed in this Pull Request:

Add the hability to force editor use to parse input. (Usefull for Shell, CI, ....)

I'll test it ASAP. It looks good to me though. Thanks


Test bench attempt

I sat down with Vito this time and wrote the manager. I also wrote the test bench, but I still haven't tested it yet (gotta read up on cmake in the morning). I wanted to commit my changes tonight just so I have something to show for my work!

Good job so far. You have one failed test and one test that infinitely loops. I'll merge it when you fix that.

Closing this because #28 includes these commits


feat: Add support for spot instances node groups.

PR o'clock
Description
Please explain the changes you made here and link to any relevant issues.
This is to implement feature request #1107.
It allows creating nodegroups with spot instances, as described in https://aws.amazon.com/about-aws/whats-new/2020/12/amazon-eks-support-ec2-spot-instances-managed-node-groups/
example usage:
module "eks" {
  // [...]
  node_groups = {
    spot-inst-managed = {
      name             = "spot-managed-${var.cluster_name}"
      desired_capacity = 2
      max_capacity     = 20
      min_capacity     = 2
      instance_type    = ["m5.large", "m5a.large", "m5d.large", "m5ad.large"]
      capacity_type    = "SPOT"
    }

Checklist

[x] CI tests are passing
[x] README.md has been updated after any changes to variables and outputs. See https://github.com/terraform-aws-modules/terraform-aws-eks/#doc-generation

Could you also update the example here with the new capacity_type option?
https://github.com/terraform-aws-modules/terraform-aws-eks/blob/master/examples/launch_templates_with_managed_node_groups/main.tf
This will be easier for future references

Could you also update the example here with the new capacity_type option?
https://github.com/terraform-aws-modules/terraform-aws-eks/blob/master/examples/launch_templates_with_managed_node_groups/main.tf
This will be easier for future references

Managed spot instance node pools add support for mixed instance types. Would it be possible to make the instance_type accept a list of instance types in addition to a string?

Managed spot instance node pools add support for mixed instance types. Would it be possible to make the instance_type accept a list of instance types in addition to a string?

@brannondorsey I'm updating the documentation to make it obvious.

@brannondorsey I'm updating the documentation to make it obvious.

Thanks for that docs change 😸
We're currently using this module and have had to make our managed spot instance node groups out of band without Terraform. I appreciate this small PR which will make our lives much easier. 🙏

Thanks for that docs change 😸
We're currently using this module and have had to make our managed spot instance node groups out of band without Terraform. I appreciate this small PR which will make our lives much easier. 🙏

Any idea when this might land in a new release? We're looking to use this functionality this week and are contemplating if we should just vendor this branch into our code base or wait for a new release of the module with these changes included.

Any idea when this might land in a new release? We're looking to use this functionality this week and are contemplating if we should just vendor this branch into our code base or wait for a new release of the module with these changes included.

What's the process to get a PR reviewed here?

What's the process to get a PR reviewed here?

What's the process to get a PR reviewed here?

Looks like @barryib has write access. Pinging him for you.

What's the process to get a PR reviewed here?

Looks like @barryib has write access. Pinging him for you.

What's the process to get a PR reviewed here?

Looks like @barryib has write access. Pinging him for you.
Merci @barryib!

What's the process to get a PR reviewed here?

Looks like @barryib has write access. Pinging him for you.
Merci @barryib!

Maybe if I try @dpiddockcmp also

Maybe if I try @dpiddockcmp also

Hi @max-rocket-internet! Would it be possible to get a review for this PR pretty please?

Hi @max-rocket-internet! Would it be possible to get a review for this PR pretty please?

When will this PR get merged?

When will this PR get merged?

When will this PR get merged?

This is my first PR... I have no experience on how long it usually takes to get a review.

When will this PR get merged?

This is my first PR... I have no experience on how long it usually takes to get a review.

@psoares, have you please tested your fix that it works?

@psoares, have you please tested your fix that it works?

Tested it 👍

Thank you 😉
Any idea why the merge is still blocked?

Tested it 👍

Thank you 😉
Any idea why the merge is still blocked?

Yes we need one of the maintainers to approve the PR

Yes we need one of the maintainers to approve the PR

also interested in this, any estimations?

also interested in this, any estimations?

How will this work with a launch template and wanting to pick multiple instance types? Do I create a launch template per instance type and then a node group per launch template?
Basically, I have a launch template, and I want a spot instance node group of "any of these instance types" (which it looks like your example supports, if you don't specify a launch template).
Maybe that's a separate thing? I can leave the instance type off the launch template, but then the node group module ignores the instance type I specify on the group itself. Should that be the case?

How will this work with a launch template and wanting to pick multiple instance types? Do I create a launch template per instance type and then a node group per launch template?
Basically, I have a launch template, and I want a spot instance node group of "any of these instance types" (which it looks like your example supports, if you don't specify a launch template).
Maybe that's a separate thing? I can leave the instance type off the launch template, but then the node group module ignores the instance type I specify on the group itself. Should that be the case?

How will this work with a launch template and wanting to pick multiple instance types? Do I create a launch template per instance type and then a node group per launch template?
Basically, I have a launch template, and I want a spot instance node group of "any of these instance types" (which it looks like your example supports, if you don't specify a launch template).
Maybe that's a separate thing? I can leave the instance type off the launch template, but then the node group module ignores the instance type I specify on the group itself. Should that be the case?
Edit: Looking at the AWS help when creating a new node group I see When using a launch template do not specify instanceTypes, diskSize or remoteAccess in the node group configuration. These properties must be configured within the launch template itself. which suggests it's doing things properly.

I've been scratching my head on this one for a few days. I even opened #1192. I'll let you know if I find a way. So far I've been able to do a launch template, but not override it's parameters with a launch configuration to handle multiple instance types...

How will this work with a launch template and wanting to pick multiple instance types? Do I create a launch template per instance type and then a node group per launch template?
Basically, I have a launch template, and I want a spot instance node group of "any of these instance types" (which it looks like your example supports, if you don't specify a launch template).
Maybe that's a separate thing? I can leave the instance type off the launch template, but then the node group module ignores the instance type I specify on the group itself. Should that be the case?
Edit: Looking at the AWS help when creating a new node group I see When using a launch template do not specify instanceTypes, diskSize or remoteAccess in the node group configuration. These properties must be configured within the launch template itself. which suggests it's doing things properly.

I've been scratching my head on this one for a few days. I even opened #1192. I'll let you know if I find a way. So far I've been able to do a launch template, but not override it's parameters with a launch configuration to handle multiple instance types...

I just merged https://github.com/terraform-aws-modules/terraform-aws-eks/pull/1129 and it adds the SPOT support for managed node groups.
@psoares can we close this PR as it duplicates https://github.com/terraform-aws-modules/terraform-aws-eks/pull/1129 ?

I just merged https://github.com/terraform-aws-modules/terraform-aws-eks/pull/1129 and it adds the SPOT support for managed node groups.
@psoares can we close this PR as it duplicates https://github.com/terraform-aws-modules/terraform-aws-eks/pull/1129 ?

Closing since the feature was implemented and merged through #1129.

Closing since the feature was implemented and merged through #1129.

@barryib, should we redo this PR to fix #1211 ?

@barryib, should we reopen this PR to fix #1211 ?

Nope. Thanks and sorry for the delay.


Update Pulsar Container

Simply startup script using defaults.

Hi @aahmed-se! It seems that 2.2.0 is not released yet :D

my mistake it's actually another change for something else, will mark it wip for now

This is ready for review now

Comments addressed

Made the changes

@bsideup let me know if there any more comments.

@bsideup is there anything else to change ?

@aahmed-se it looks great, thank you 👍

Released for preview in 1.9.0-rc2, to be published on Bintray.
Thanks @aahmed-se!


urlq hooks return momentarily stale results

Describe the bug
When rendering a React component that call a urql hook with different variables/query between renders, the return value of the hook returns stale results (without the fetching=true flag) momentarily.
E.g with the following component:
const MyComponent = (props) => {
  const [{ fetching, data }] = useQuery({
    query: `{ todos { id } }`,
    variables: props.id
  });

  console.log(fetching, data);

  return fetching ? <Loading /> : <List data={data.todos} />;
};

rendering <MyComponent id={1} />, waiting for the results and then rendering <MyComponent id={2} /> results in the following lines printed on the console:
// first render with id=1
true undefined
// we get response from backend
false { todos: <todosForId=1> }
// second render with id=2 (WRONG)
false { todos: <todosForId=1> }
// on next tick, we get the fetching=true
true undefined
// we get response from backend
false { todos: <todosForId=2> }

Steps to reproduce
I've created the following test for src/hooks/useQuery.test.tsx that currently fails :
it('sets fetching to true after changing query', () => {
  // Only mock the response once
  client.executeQuery.mockReturnValueOnce(empty);
  const wrapper = renderer.create(<QueryUser {...props} />);
  expect(state).toMatchObject({ fetching: false });

  wrapper.update(<QueryUser {...props} variables={{ myVar: 4321 }} />);

  // This fails!
  expect(state).toMatchObject({ fetching: true });

  // Once `setImmediateState()` gets executed, `fetching` is true.
  setTimeout(() => {
    expect(state).toMatchObject({ fetching: true });
  }, 400);
});

Expected behavior
I expect that when passing a different query or variables, the return value immediately get invalidated by having fetching: true, to avoid showing stale results on the UI.
Actual behavior
The query returns the previous value.
Additional context
N/A

This behaviour may be intended, but wanted to flag it anyways just in case it isn't 🙂

This may be normal, but it’s hard to tell. In a lot of cases React updates aren’t synchronous anymore. They may not even run in the same tick, hence the act helper was introduced for testing.
urql does guarantee that the first result is never stale on mount and reflects all the data it has, but any further update is subject to React’s scheduling.
So if you update your test code with act according to their new guides you may find it to just work 🙂

Gonna close this one, thanks again folks for the quick response!


Cannot read property 'appendChild' of undefined

Issue type
I'm submitting a ...  (check one with "x")

[x] bug report
[ ] feature request
[ ] question about the decisions made in the repository

Issue description
Current behavior:

When a lazy loaded module is opened, a NbOverlayContainerAdapter gets constructed along with it which wont have its setContainer() called. This causes the nbDialog to fail in _createContainer()
Expected behavior:

setContainer() should be called, or createContainer() should append to document body if container undefined
Steps to reproduce:

I am using ngx-admin, I am calling an overlay container. Clicking that results in an error. I have looked up to nebular and the issue provided is to wrap app.component.html within . But Remember ngx-admin has its app.component template as just . The Pages module is wrapped within a layout template . The temporary solution provided shrinks my view content and it is all into a smaller window. Because i presume we have a layout inside a layout again. (ngx-sample-layout comes with its own  tag with all the header and sidebar content.
Related code:
https://stackblitz.com/edit/nebular-overlay-container-adapter-bug?file=src%2Fapp%2Fapp.component.html

insert short code snippets here

Other information:
npm, node, OS, Browser
<!--
Node, npm: `node --version` and `npm --version`
OS: Windows (7/8/10). Linux (incl. distribution). macOS (El Capitan? Sierra?)
Browser: Chrome/Safari/Firefox/etc?
-->

Angular, Nebular
<!--
Check your `package-lock.json` or locate a `package.json` in the `node_modules` folder.
-->

Hello,
Any news on this issue ?

I had the same issue with a nested child route, had a working <nb-select> on the main <nb-layout> and i wanted to have another <nb-select> on a sub child route, app router > child > child.
I SOLVED it by wrapping the third <router-outlet> like this
<nb-layout>
 <nb-layout-column>
     <router-outlet></router-outlet>
  </nb-layout-column>
</nb-layout>

Sub child Module
@NgModule({
  imports: [
    ......
    NbSelectModule
  ]
})

@Nebular 4.x.x
@Angular 8.x.x

Solved this problem by removing the providers in @NgModule
@NgModule({
    imports: [...MODULES, ...NB_MODULES, ...FR_MODULES],
    exports: [...MODULES, ...NB_MODULES, ...PIPES, ...COMPONENTS, ...ENTRY_COMPONENTS, ...DIRECTIVES],
    declarations: [...COMPONENTS, ...ENTRY_COMPONENTS, ...PIPES, ...DIRECTIVES],
    entryComponents: [...ENTRY_COMPONENTS],
    providers: [
        ...NbThemeModule.forRoot(
            {
                name: 'default',
            },
            [DEFAULT_THEME, COSMIC_THEME, CORPORATE_THEME, DARK_THEME],
        ).providers,
    ],
})

@kainysheva can you exaplain how you resolved this?


Fixed and disabled fast image projection

Small fixes for fast project_image option and disabled it by default on bokeh plots.

Why disabled by default?

Because it's not actually safe, I'll have to follow up in a later PR.

Okay, tests passing, going to merge and release.


dcos-cli does not install on arch

$ docker run -it base/archlinux /bin/bash
$ pacman -Syu
$ pacman -S python-virtualenv python-pip
$ mkdir -p dcos && cd dcos && \
curl -O https://downloads.mesosphere.io/dcos-cli/install.sh && \
bash ./install.sh . http://pool-5d44-elasticl-i3e25g6agoox-1339750650.us-west-2.elb.amazonaws.com && \
source ./bin/env-setup
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  3654  100  3654    0     0  14963      0 --:--:-- --:--:-- --:--:-- 14975
Traceback (most recent call last):
  File "/usr/sbin/pip", line 9, in <module>
    load_entry_point('pip==7.1.2', 'console_scripts', 'pip')()
  File "/usr/lib/python3.5/site-packages/pkg_resources/__init__.py", line 568, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/usr/lib/python3.5/site-packages/pkg_resources/__init__.py", line 2720, in load_entry_point
    return ep.load()
  File "/usr/lib/python3.5/site-packages/pkg_resources/__init__.py", line 2380, in load
    return self.resolve()
  File "/usr/lib/python3.5/site-packages/pkg_resources/__init__.py", line 2386, in resolve
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/usr/lib/python3.5/site-packages/pip/__init__.py", line 15, in <module>
    from pip.vcs import git, mercurial, subversion, bazaar  # noqa
  File "/usr/lib/python3.5/site-packages/pip/vcs/subversion.py", line 9, in <module>
    from pip.index import Link
  File "/usr/lib/python3.5/site-packages/pip/index.py", line 30, in <module>
    from pip.wheel import Wheel, wheel_ext
  File "/usr/lib/python3.5/site-packages/pip/wheel.py", line 35, in <module>
    from pip._vendor.distlib.scripts import ScriptMaker
  File "/usr/lib/python3.5/site-packages/pip/_vendor/distlib/scripts.py", line 14, in <module>
    from .compat import sysconfig, detect_encoding, ZipFile
  File "/usr/lib/python3.5/site-packages/pip/_vendor/distlib/compat.py", line 66, in <module>
    from urllib.request import (urlopen, urlretrieve, Request, url2pathname,
ImportError: cannot import name 'HTTPSHandler'

Looks like a bug with pip. Probably a really old version. Can you try sudo pip install -U virtualenv pip?
On Tue, Dec 8, 2015 at 6:23 AM Dr. Stefan Schimanski <
<EMAIL_ADDRESS>wrote:

$ docker run -it base/archlinux /bin/bash
$ pacman -Syu
$ pacman -S python-virtualenv python-pip
$ mkdir -p dcos && cd dcos &&
curl -O https://downloads.mesosphere.io/dcos-cli/install.sh &&
bash ./install.sh . http://pool-5d44-elasticl-i3e25g6agoox-1339750650.us-west-2.elb.amazonaws.com &&
source ./bin/env-setup
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
100  3654  100  3654    0     0  14963      0 --:--:-- --:--:-- --:--:-- 14975
Traceback (most recent call last):
File "/usr/sbin/pip", line 9, in
load_entry_point('pip==7.1.2', 'console_scripts', 'pip')()
File "/usr/lib/python3.5/site-packages/pkg_resources/init.py", line 568, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/usr/lib/python3.5/site-packages/pkg_resources/init.py", line 2720, in load_entry_point
return ep.load()
File "/usr/lib/python3.5/site-packages/pkg_resources/init.py", line 2380, in load
return self.resolve()
File "/usr/lib/python3.5/site-packages/pkg_resources/init.py", line 2386, in resolve
module = import(self.module_name, fromlist=['name'], level=0)
File "/usr/lib/python3.5/site-packages/pip/init.py", line 15, in
from pip.vcs import git, mercurial, subversion, bazaar  # noqa
File "/usr/lib/python3.5/site-packages/pip/vcs/subversion.py", line 9, in
from pip.index import Link
File "/usr/lib/python3.5/site-packages/pip/index.py", line 30, in
from pip.wheel import Wheel, wheel_ext
File "/usr/lib/python3.5/site-packages/pip/wheel.py", line 35, in
from pip._vendor.distlib.scripts import ScriptMaker
File "/usr/lib/python3.5/site-packages/pip/_vendor/distlib/scripts.py", line 14, in
from .compat import sysconfig, detect_encoding, ZipFile
File "/usr/lib/python3.5/site-packages/pip/_vendor/distlib/compat.py", line 66, in
from urllib.request import (urlopen, urlretrieve, Request, url2pathname,
ImportError: cannot import name 'HTTPSHandler'
—
Reply to this email directly or view it on GitHub
https://github.com/mesosphere/dcos-cli/issues/386.

Only did the 4 commands listed above, just replay them locally.

Okay, thanks!
On Tue, Dec 8, 2015 at 10:50 AM Dr. Stefan Schimanski <
<EMAIL_ADDRESS>wrote:

Only did the 4 commands listed above, just replay them locally.
—
Reply to this email directly or view it on GitHub
https://github.com/mesosphere/dcos-cli/issues/386#issuecomment-162978316
.

The binary cli makes this install easier, and works great on arch:


TimeConverter + csproj

Added TimeConverter class + unit tests for it.
Migrated xproj to csproj since xproj is outdated now.

Thanks so much for this!
Could you add a tests file like this?
Otherwise I'll be really happy to merge this once I've fixed the build process under csproj, but that one's on me!

Yes, tests are in TimeConverterTests.cs.
Build process is currently broken, I hope it would be easy to repair it, just build directly from csproj.

Hi Anna,
I've updated the build process and pulled in your classes. I also thought it would be a good idea to include fractions of seconds and a leap-year unit in the class so have added those.
I've opened PR #7 if you'd like to give it a look over? Hope it's okay that I've broken the code away from your PR, it was just easier than wrangling with git, this time!

Hi Nick-Lucas,
I think your changes are ok. Sorry for this mess, I should supply the changes in two different pull requests and from different branches.

Not a problem at all, for something this small it's hardly worth the extra effort, and it's a good prompt for me to finally update this solution!
I'll push out a new version with your changes shortly :)


Feature: Add buttons for common phrases

Because of an accident that I had recently, I am unable to speak for the next few weeks and I started using this app as a tool for communication. I like that the app is simple and clutter free, but I would suggest one addition and that is to give the user the possibility to save common phrases like "Yes" or "I'm ok with that" and have multiple buttons below the EditText for quick access to those phrases.
Cheers :)

Hello Frederik,
My apologies for taking so long to respond to this.  I'm glad to hear that you have found my TTS Util app useful.
Thanks to the efforts of @woheller69, the next version of the app will have four memory buttons in the 'Read text' screen.  These can be used to save and quickly retrieve common phrases.  You can see what it will look like here.  It would not be difficult to add more buttons in the future, if that is desirable.
The ability to generate wave files from input text (issue #15) will also, once it is implemented, make this easier.

This feature is now available in version 3.0.0 of the application.  Do please let me know if four buttons is insufficient, it would be trivial to increase the number.

Hey, thanks for implementing the feedback 😎
I just tested it and it seems to work fine, however, since I am able to speak again, I am no longer daily driving the app. Hence, somebody else needs to test the daily usefulness 😎
Cheers and thanks again for your help 😎

Hello again,
You're very welcome.  Thank you for taking the time to test this new
feature.  I may add two extra buttons in the next version; four doesn't
seem like enough to me.


Error getting focused window (macOS)

I noticed that record & replay fail when in Google Meets, but this also extends to calls like Discord (with no video being sent)
To reproduce:  I just got into an empty discord voice channel and ran NaiveReplay. This still occurs if I am "deafened" (no microphone or audio being transmitted)
An example of the message, followed by a segfault:
2023-05-27 01:36:14.192 | ERROR    | openadapt.window._macos:get_active_window:69 - Error getting focused window
zsh: segmentation fault  python3 -m openadapt.record "testing"

However, the recording still proceeds and stalls at this stage:
2023-05-27 01:36:15.198 | INFO     | __mp_main__:write_events:215 - event_type='window' starting
2023-05-27 01:36:15.221 | INFO     | __mp_main__:write_events:215 - event_type='screen' starting
2023-05-27 01:36:15.228 | INFO     | __mp_main__:write_events:215 - event_type='action' starting

I noticed my fans started spinning more aggressively after failed recordings, and received this from ps
  PID TTY           TIME CMD
2591 ttys000    0:00.13 -zsh
2651 ttys000    0:00.03<EMAIL_ADDRESS>-c from multiprocessing.resource_tracker import main;main(12)
2652 ttys000   12:16.87<EMAIL_ADDRESS>-c from multiprocessing.spawn import spawn_main; spawn_main(tra
2653 ttys000   12:21.22<EMAIL_ADDRESS>-c from multiprocessing.spawn import spawn_main; spawn_main(tra
2654 ttys000   12:21.63<EMAIL_ADDRESS>-c from multiprocessing.spawn import spawn_main; spawn_main(tra
2682 ttys000    0:00.03<EMAIL_ADDRESS>-c from multiprocessing.resource_tracker import main;main(9)
2683 ttys000   12:14.65<EMAIL_ADDRESS>-c from multiprocessing.spawn import spawn_main; spawn_main(tra
2684 ttys000   12:14.18<EMAIL_ADDRESS>-c from multiprocessing.spawn import spawn_main; spawn_main(tra
2685 ttys000   12:14.90<EMAIL_ADDRESS>-c from multiprocessing.spawn import spawn_main; spawn_main(tra
3279 ttys000    0:00.03<EMAIL_ADDRESS>-c from multiprocessing.resource_tracker import main;main(9)
3280 ttys000    1:40.91<EMAIL_ADDRESS>-c from multiprocessing.spawn import spawn_main; spawn_main(tra
3281 ttys000    1:40.87<EMAIL_ADDRESS>-c from multiprocessing.spawn import spawn_main; spawn_main(tra
3282 ttys000    1:36.87<EMAIL_ADDRESS>-c from multiprocessing.spawn import spawn_main; spawn_main(tra
3390 ttys000    0:00.03<EMAIL_ADDRESS>-c from multiprocessing.resource_tracker import main;main(9)
3391 ttys000    0:03.96<EMAIL_ADDRESS>-c from multiprocessing.spawn import spawn_main; spawn_main(tra
3392 ttys000    0:04.33<EMAIL_ADDRESS>-c from multiprocessing.spawn import spawn_main; spawn_main(tra
3393 ttys000    0:04.17<EMAIL_ADDRESS>-c from multiprocessing.spawn import spawn_main; spawn_main(tra

Uh oh
should  pkill -f python
result:
/opt/homebrew/Cellar/python@3.10/3.10.11/Frameworks/Python.framework/Versions/3.10/lib/python3.10/multiprocessing/resource_tracker.py:224: UserWarning: resource_tracker: There appear to be 17 leaked semaphore objects to clean up at shutdown
  warnings.warn('resource_tracker: There appear to be %d '

(x4),
but processes are all still killed.
Workarounds:
Just leaving the call instantly resolves all issues, but this isn't the best approach.
Possible fixes:

Notify the user that something is wrong, and use a fall-back recording method without window states.
Kill the process via terminate() / SIGTERM if we failed to capture window state

Best solution would be to get around this entirely, but I'm not entirely sure what is actually causing this, since other actions like streaming music on spotify has no effect on this.

Thanks @0dm ! I noticed similar behavior, my assumption is that it has something to do with conflicting requests to the accessibility API. Resolving this may require stepping through that to understand.
I haven't seen a similar output from ps on my machine however. Google led me to this issue on Pyinstaller:
https://github.com/pyinstaller/pyinstaller/issues/4865
Are you running this from the Pyinstaller'd GUI?

No Pyinstaller or GUI

https://developer.apple.com/documentation/bundleresources/information_property_list/protected_resources/requesting_authorization_for_media_capture_on_macos
Related: https://stackoverflow.com/questions/70228524/macos-request-files-and-folders-access-from-python
https://gist.github.com/ghazi-mansoor/5da8a86267fa2cf7996fcc5f84c96996


Couldn't be compiled on 4.x Linux(which I have expected)

Hi,
I'm trying it on the 4.4.0 arm linux and it couldn't be compiled, saying that

main.c:255:28: error: ‘struct file’ has no member named ‘f_dentry’
afinfo = PDE_DATA(filep->f_dentry->d_inode);

But I have expected this because the file structure could change from version to version. I'd like to know wether you plan to update this project to support the latest kernel. If you don't, could you provide me with some reference where I can find such examples?
BTW, since you can do hijackings, is there a way to defend such attacks? Take the keylogger as an example, you have registered a modified keyboad notifier, is there any method to prevent an unauthorized process from doing so?
Thanks

This has not been tested, but it compiles now, theres 2 places in main.c that need this update:
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 10, 0)
afinfo = PDE(filep->f_dentry->d_inode)->data;
#elif LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
afinfo = PDE_DATA(filep->f_dentry->d_inode);
#else
afinfo = PDE_DATA(filep->f_path.dentry->d_inode);
#endif

Well, nowadays we have arrived at 5.x version...

Well, nowadays we have arrived at 5.x version...

Hi, guys. I want  to cross-compile it for Linux 4.1.x, but it throwed out this error. What can I do?

it seems that it points to wrong lib. the asm/bitsperlong.h is in  arch/arm/include/asm.

Well, nowadays we have arrived at 5.x version...

it's really strange. if I compile it in my Linux 4.15. it works well. but when I cross-compile it threw out the problem.


Krane project has been closed in favor of Machine

Reference: https://github.com/krane-io/krane

Please sign your commits following these rules:
https://github.com/docker/docker/blob/master/CONTRIBUTING.md#sign-your-work
The easiest way to do this is to amend the last commit:
$ git clone -b "patch-1" git@github.com:joelhandwell/swarm.git somewhere
$ cd somewhere
$ git commit --amend -s --no-edit
$ git push -f

Ammending updates the existing PR. You DO NOT need to open a new one.

LGTM
Ping @vieux @dongluochen

LGTM


Turkish Translation

strings.txt

There is also a help file
https://github.com/woheller69/Arity/blob/master/app/src/main/assets/help-en.html

I understand, I'm new to translating on GitHub and I'm just gaining experience. It seems I need to check if the applications have a help file.

That is very app specific :-)

Please try.
-Uninstall
-Remove .zip and install
app-release.apk.zip

Hi,The version you sent me works and the translation is correct.I'm sorry to keep you waiting, but I guess I need to buy a new PSU now since my computer has a cable burn. I'm not sure if my motherboard is damaged or not.But I still apologize to you. Because I was the one who said I would translate for you, and now I've let you down. I hope you will forgive me. When I make my computer usable again, I will try to translate your projects into Turkish.Best Regards,Ertuğrul10 Eyl 2023 22:14 tarihinde woheller69 @.***> yazdı:
Please try.
-Uninstall
-Remove .zip and install
app-release.apk.zip
—Reply to this email directly, view it on GitHub, or unsubscribe.You are receiving this because you authored the thread.Message ID: @.***>