recoco.Sleep doesn't seem to be working

This function is one of the least explained within the Pox library. However, I was optimistic when Lock worked as expected, but found that simply declaring recoco.Sleep(n=timeToWake) did nothing to affect the recoco process at all, and it simply continued executing. I also attempted this with recoco.Sleep(n), but likewise found it to not work. This frustrates my work as I now need to split multiple functions into Timer compatible functions in order to get any work done. Do you have any solutions to what might be causing this?

Are you yielding to it?  As with all the recoco BlockingOperations, you need to use it with yield.  There's an example of this in the messenger's tcp_transport.
In short, to sleep for three seconds inside a recoco task, you'd do:
yield recoco.Sleep(3)

There was some work on recoco which made this sort of error a bit more obvious, I believe, but I'm not sure if it will ever get merged, since I think it's likely that the next major work on recoco will be a pretty substantial rewrite to integrate it with Python 3's asyncio (or at least make use of Python 3's new async / yield semantics).

Ah, I see. This lines up with the other advice for other blocking operations but seems I was a bit pigheaded to notice those. Thank you very much, I suspect this will work (and also fix my use of locks, which I likewise did not use yield with.)

Apologies, but I got the chance to try this again, and it still doesn't seem to be working.
The way I'm using it is to attempt to use it as one would a typical python3 sleep. However, just writing yield recoco.Sleep(N) leads to function issues, as the yield interferes with the return values of my functions. I attempted to remedy this by having the yields be contained in their own functions which themselves call the recoco sleep, but this results in them not functioning at all.

def faux_sleep(time):
    print("We tried to sleep")
    yield recoco.Sleep(timeToWake = time)

def faux_acquire(lock):
    yield lock.acquire()

def faux_release(lock):
    yield lock.release()

And here's the call which should be delaying execution by 2 seconds, but does the full loop anyway
        for i in range(5):
            faux_sleep(2)
            #yield recoco.Sleep(timeToWake = 2, absoluteTime = False)

Still having issues with this, I've assumed that the yield Sleep argument would function like the typical blocking sleep, but it does not. I think a more intuitive example is required, as the yield structure is not compatible with the way I'm working and I would be forced to used timers as a functional sleep instead, which I'd prefer not to.

I'll see if I can provided some more information here.
Goal: Several functions I need to wait to see if a particular packet has successfully been delivered. As I expect to do this multiple times through one execution and have to return values, it would be convenient if I could do this all in one function over breaking it down into a chain of timed functions for each step.
Branch - Halosaur
Log.debug - No errors apparent when running, connections run smoothly. The yield recoco.Sleep(N) doesn't play nice with my program as I frequently am returning values back which breaks when I have to loop yield-Sleep commands.
I believe the rest of the information I've described sufficiently covers the behavior and example portions.

Uncertain if I'm testing this right, but the recoco scheduler doesn't seem to be executing any of the blocking functions. I added a print statement for recoco.Sleep to see if it was even working (because init definitely happens) as below. '
class Sleep (BlockingOperation):
  """
  Sleep for specified amount of time (seconds)
  None means unscheduler (i.e., sleep until an outside force wakes it)
  0 means reschedule for later (no additional time)
  """
  def __init__ (self, timeToWake = None, absoluteTime = False):
    if absoluteTime == False and timeToWake != None: timeToWake += time.time()
    self._t = timeToWake

  def execute (self, task, scheduler):
    print("Sleep executed!")
    if self._t is None:
      # Just unschedule
      return
    if self._t == 0 or self._t < time.time():
      # Just reschedule
      scheduler.fast_schedule(task)
      return
    scheduler._selectHub.registerTimer(task, self._t, True) # A bit ugly

And then I ran a test program to see if it would show up.
python3.9 pox.py log.level --DEBUG sleep --foo=foo
POX 0.8.0 (halosaur) / Copyright 2011-2022 James McCauley, et al.
WARNING:sleep:Foo: foo (<class 'str'>)
WARNING:sleep:Bar: False (<class 'bool'>)
DEBUG:boot:Not launching of_01
DEBUG:core:POX 0.8.0 (halosaur) going up...
DEBUG:core:Running on CPython (3.9.19/Apr 6 2024 17:57:55)
DEBUG:core:Platform is Linux-6.8.0-40-generic-x86_64-with-glibc2.35
INFO:sleep:Skeleton application ready (to do nothing).
DEBUG:sleep:Hey, are we gonna sleep or what?
DEBUG:sleep:Hey, are we gonna sleep or what?
DEBUG:sleep:Hey, are we gonna sleep or what?
DEBUG:sleep:Hey, are we gonna sleep or what?
DEBUG:sleep:Hey, are we gonna sleep or what?
INFO:core:POX 0.8.0 (halosaur) is up.
^CINFO:core:Going down...
INFO:core:Down.

No dice, something seems wrong with the scheduler, though I hesitate to be authoritative on that since the rest of POX's events for handling switches have worked without a problem. '
Is there a way to arbitrarily initiate normal threads without stopping recoco processes? Otherwise I think this program is virtually nonfunctional for my purposes and I need to be able to block within the controller.

Hello.
I took this week to see if I could discern the problem, and figured it out quickly thanks to your example.
I was not using the recoco.task class when doing my work. I am used to these blocking primitives working without explicit threading but it didn't occur to me this may not be the case for recoco. After testing with the following code and the skeleton launch function, it worked perfectly.
class time_task(Task):

    def __init__(self, time):
        self.time = time
        Task.__init__(self)
        log.info("Times up in task land!")

    def run(self):
        yield Sleep(2)
        log.info("Honk Shoo.")

def times_up():
    log.info("Times Up!")

def _go_up (event):
    # Event handler called when POX goes into up state
    # (we actually listen to the event in launch() below)
    log.info("Skeleton application ready (to do nothing).")

 #   log.info("We are going to sleep now.")
    try:

        t = time_task(2)
        t.start()
        #pass
       # yield recoco.Sleep(2)
        #recoco.Sleep(2)
        #recoco.Timer(2, times_up)
    except:
        log.info("Hey! This is throwing an exception!")

#    log.info("If you saw this instantly, it didn't work!")

I recommend for future users that there is an explicit guide for the recoco section which mentions the necessity of creating a new class which inherits from task, or at least cites the specific examples in that section. Now that I have this at my disposal, I think this issue is closed for me. Thank you for your assistance.

Yes, this has never been very well documented.  The new POX ichthyosaur comes with a new example component that I believe covers the material you were missing.  Sorry it hasn't been there for years already; I hope it helps future users.


relay-page-info doesn't follow actual Connection specification

Describe the bug
Apparently the Connection spec changed and startCursor and endCursor is might be nullable.
Unfortunately, I don't know why this information is not present in the rendered version as well. (https://relay.dev/graphql/connections.htm) but I reached out to the community to resolve this confusion.
To Reproduce
Define Relay's PageInfo
"""
Information about pagination in a connection.
"""
type PageInfo {
  """
  When paginating forwards, the cursor to continue.
  """
  endCursor: String

  """
  When paginating forwards, are there more items?
  """
  hasNextPage: Boolean!

  """
  When paginating backwards, are there more items?
  """
  hasPreviousPage: Boolean!

  """
  When paginating backwards, the cursor to continue.
  """
  startCursor: String
}

and then observe the issue
[@graphql-eslint/relay-page-info] Field `startCursor` must return non-null String or Scalar.
[@graphql-eslint/relay-page-info] Field `endCursor` must return non-null String or Scalar.

Expected behavior
Should pass as valid use-case
Environment:

OS: M1
@graphql-eslint/eslint-plugin": "3.10.0:
NodeJS: v16.13.0

Additional context
https://github.com/rmosolgo/graphql-ruby/issues/2872#issuecomment-625812125

I propose to create PR losing the rule for startCursor and endCursor. I'm willing to do the PR once we agree this is something we want to do (I truly belive it is) 🚀

Thank you for reporting it. While developing this rule I was looking at this page https://relay.dev/graphql/connections.htm#sec-undefined.PageInfo.Fields
Where was it written:

It must also contain fields startCursor and endCursor, both of which return non-null opaque strings.

Btw, I'll fix it today, feel free to share your experience with the new rules. Thank you @jukben!

@jukben @Balvajs fixed in<EMAIL_ADDRESS>


Add Chinese conversion function by bridging SwiftyOpenCC

A new item is added to the input method menu to toggle Chinese conversion on or off. Once the switch is on, the text input will be converted into Simplified Chinese.
The function bridge a Chinese conversion library SwiftyOpenCC. Since the library has only pure Swift interface, there are some class for bridging Objective-C and Swift code.

Is this already optimized for compiling against macOS 10.14 Mojave SDK?


Upgrade JupyterHub to version 1.0.0

At the moment, we are using JupyterHub version 0.9.6. An upgrade to the latest version might solve some corner cases that we see but also might break some workarounds that we put in place to make JupyterHub work.

We will skip directly to 1.1.0


boards: st: stm32h745i_disco: m7: Fix PHY address

According to the datasheet, the PHY address is 0x1. When changed to this value the PHY id is correctly read.
Before:
[00:00:00.602,000] <err> phy_mii: No PHY found at address 0

After:
[00:00:00.051,000] <inf> phy_mii: PHY (1) ID 7C111

Thanks for this contribution!
Also, there are probably others H7 boards that would need to be fixed, would you mind fixing them as well ? (we'll test on boards when possible)

I have checked following boards, and neither of them has a PHY at address 1. It would be great if anyone could double-check this.
Boards list:

nucleo_h723zg
nucleo_h743zi
nucleo_h745zi_q
nucleo_h753zi
stm32h735g_disco
stm32h745i_disco
stm32h747i_disco
stm32h750b_dk
stm32h7s78_dk
nucleo_h755zi_q

This list consists of all boards which mention "ethernet" and are based on H7 SOC.

nucleo_h723zg
nucleo_h743zi
nucleo_h745zi_q
nucleo_h753zi
stm32h747i_disco
nucleo_h755zi_q

These boards use LAN8742A PHY with PHYAD0 pin tied to GND. PHY address should be 0.

stm32h735g_disco
stm32h7s78_dk

These boards use LAN8742 PHY with PHYAD0 as RMII_RX_ER, pulled down to GND. PHY address should be 0.

stm32h745i_disco
stm32h750b_dk

These boards use LAN8740A PHY. Schematics say PHY Address: 01h.
However, I do not see Ethernet enabled on the stm32h750b_dk (?), so we shouldn't need to update it.

However, I do not see Ethernet enabled on the stm32h750b_dk (?), so we shouldn't need to update it.

You are correct. The "ethernet" came from rst file because my search parameters were too wide. I could add this so it is not an issue in the future, but I do not own this board and can not test it. Also, this PR will change two unrelated things so it is probably not a good idea.

LGTM.
Having to provide CONFIG_ETH_STM32_HAL_PHY_ADDRESS when the property is already present in DTS is not great, but that should be fixed in a separate PR.

I was wondering how you plan to remove the CONFIG_ETH_STM32_HAL_PHY_ADDRESS. I tried to resolve this by myself but I only came up with this code.
#define INST_ID 0

#if DT_CHILD_NUM_STATUS_OKAY(DT_INST_CHILD(INST_ID, mdio)) != 1
#error "More than 1 ethernet phy's enabled"
#endif

#define DEVICE_PHY_BY_NAME(n) DEVICE_DT_GET(n)
static const struct device *eth_stm32_phy_dev =
	DT_FOREACH_CHILD_STATUS_OKAY(DT_INST_CHILD(INST_ID, mdio), DEVICE_PHY_BY_NAME);
#endif

I do not know how to access the child node, but this approach is more generic because it does not require a certain node name in DTS.

LGTM.
Having to provide CONFIG_ETH_STM32_HAL_PHY_ADDRESS when the property is already present in DTS is not great, but that should be fixed in a separate PR.

Could be fixed by https://github.com/zephyrproject-rtos/zephyr/discussions/77782

Can you please add an issue with details and link that issue to this PR. After RC2 only bug fixes with an associated Github issue will be merged into the upcoming 4.0 release.


Article for checking if the brackets are balanced in a string using stacks

💥 Proposal
(A clear and concise description of what the proposal is.)
Have you read the Contributing Guidelines on Pull Requests?
Yes

@iamrajiv Please assign the issue to me.


v1.5.1 Hotfix Release Checklist

[ ] Create the v1.5.1-rc.1 Hotfix release (code changes) and test it
[ ] Create v1.5.1-rc.1 Tag [@berndverst ]
[ ] Performance tests passing  [@artursouza]
[ ] End to End tests passing on Linux and Windows [@berndverst]
[ ] Update the longhaul tests to use 1.5.1 [@halspang]
[ ] Create v1.5.1 Tag [@berndverst]
[ ] Update the documentation: Latest version & versions in supported releases [@greenie-msft]
[ ] Announce the hotfix release [@greenie-msft ]

PRs required for this Hotfix release.
Make sure to use release-1.5 branches only!
Components Contrib

[ ] https://github.com/dapr/components-contrib/pull/1329 (cherry-pick from master)
[ ] https://github.com/dapr/components-contrib/pull/1278 (cherry-pick from master)

Dapr/Dapr

[ ] https://github.com/dapr/dapr/pull/3919 (should be merged back to master)
[ ] https://github.com/dapr/dapr/pull/3892 (cherry-pick from master)
[ ] https://github.com/dapr/dapr/pull/3901 (cherry-pick from master)

CLI

[ ] https://github.com/dapr/cli/pull/835 (cherry-pick from master)

Create new Components-Contrib tag and release.

[ ] RC tag created
[ ] Update dapr/dapr go.mod to point to the components contrib release candidate tag
[ ] Release tag created
[ ] Release created

If this issue gets addressed in time we will also cherry-pick it into the hotfix release:
https://github.com/dapr/dapr/issues/3930

@berndverst we found resource leakage in tests before adoption of dapr, now we are waiting the hotfix version, can you cherry pick this pr in 1.5.1?
https://github.com/dapr/dapr/pull/3890
Now our adoption process is stuck due to this bug.

@berndverst we found resource leakage in tests before adoption of dapr, now we are waiting the hotfix version, can you cherry pick this pr in 1.5.1?
#3890
Now our adoption process is stuck due to this bug.

See my comment on the PR: I need to understand if this is a regression (have you not seen this with 1.4.x), and want to understand exactly what the impact is and under which conditions it occurs.

@rabollin doesn't look like anyone is working on it yet, so it isn't likely to make it into 1.5.1. Hopefully someone will take a look for 1.6.

Yes @darren-wang per the discussion on https://github.com/dapr/dapr/pull/3890 and the support from @yaron2 for cherry-picking this, it will be included in the 1.5.1 hotfix release.

Yes @darren-wang per the discussion on #3890 and the support from @yaron2 for cherry-picking this, it will be included in the 1.5.1 hotfix release.

Hi, when is v1.5.1 planned to release?

Yes @darren-wang per the discussion on #3890 and the support from @yaron2 for cherry-picking this, it will be included in the 1.5.1 hotfix release.

Hi, when is v1.5.1 planned to release?

Dec 6.


MUI-38631 - [Select][material-ui] Missing aria-multiselectable attribute on multiple Select component

Description
Missing aria-multiselectable attribute on multiple Select component
Steps to reproduce 🕹
Link to live example: https://codesandbox.io/s/nhnkzh?file=/Demo.tsx Steps:

Tab to the select component and open the select menu using spacebar
Use dev tools to inspect the menu
Note the  doesn't have the aria-multiselectable attribute set to true

Steps with JAWS screen reader:

Tab to the select component
Press spacebar to open the menu
JAWS announces "tag listbox"

Current behavior 😯
The Select component is missing the aria-multiselectable attribute when using the multiple prop. Screen readers read the Select listbox as a standard listbox.
Expected behavior 🤔
If the listbox supports selection of more than one option, the element with role listbox has aria-multiselectable set to true. Otherwise, aria-multiselectable is either set to false or the default value of false is implied.
(Source)
With this attribute set to true - the JAWS screen reader will read the Select as "extended selection list box".
As stated on MDN Web Docs "The aria-multiselectable attribute is the way to inform assistive technology users that they may select more than one item from the current selectable items if they so choose."
Reference to JAWS documentation "Multiple Selection List Boxes": https://www.freedomscientific.com/SurfsUp/Forms.htm
See Example 2 Multi-Select Listbox on w3.org: https://www.w3.org/WAI/ARIA/apg/patterns/listbox/examples/listbox-rearrangeable/
Code example of working model: https://codepen.io/pen?&prefill_data_id=63e06758-0048-4774-a720-87cddb15147e
Context 🔦
When a screen reader user interacts with the Select component they are not informed that multiple options can be selected if the Select is using the multiple prop.
closes https://github.com/mui/material-ui/issues/38631

[x] I have followed (at least) the PR section of the contributing guide

This code was written and reviewed by GitStart Community. Growing great engineers, one PR at a time.

@mj12albert this PR is ready for review

@mj12albert the test has been added, thanks for the review.


daopalpa

Official website of district administration office of palpa

Please make the changes @TheLearneer suggested and make a new pull request. Thank you


更新日志并添加本地开发环境跳转豁免 --story=119092682

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.cheynechen seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.You have signed the CLA already but the status is still pending? Let us recheck it.


fix(ci): fixed update-syscalls input.

What type of PR is this?
/kind bug
Any specific area of the project related to this PR?
/area CI
Does this PR require a change in the driver versions?
What this PR does / why we need it:
Which issue(s) this PR fixes:

Fixes #
Special notes for your reviewer:
Does this PR introduce a user-facing change?:

NONE

/milestone 0.15.0

Fixed: https://github.com/falcosecurity/libs/actions/runs/7928349905/job/21646429836

[APPROVALNOTIFIER] This PR is APPROVED
This pull-request has been approved by: FedeDP, LucaGuerra
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

OWNERS [FedeDP,LucaGuerra]

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

[APPROVALNOTIFIER] This PR is APPROVED
This pull-request has been approved by: Andreagit97, FedeDP, LucaGuerra
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

OWNERS [Andreagit97,FedeDP,LucaGuerra]

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment


I can't load videos which have extension mp4 (iOS)

I load videos which have extension mp4 then I waited too long for controller's intialization, it's nothing happened. I can't do anything. But I can do it success with files which have extension MOV. Please check this!
This happens only on iOS.
Thank you.

I close this issue. Because I found how to fix this. Just remove encode base64 file video path. Then it works

It still doesn't work.

Same here

sam here, not initializing at all on iOS. anybody has a solution?

This code from controller broke video player controller loading:
_video = VideoPlayerController.file(File(
          // https://github.com/flutter/flutter/issues/40429#issuecomment-549746165
          Platform.isIOS ? Uri.encodeFull(file.path) : file.path,
        )),

VideoPlayerController will loading permanently (cause of listener inside).
To fix this I had to store picked file in another place (cache for me) and rename filename.
Something like this:

  static Future<io.File?> saveToCache(
    io.File file, {
    String? forceFileName,
  }) async {
    final cacheDir = await getCachePath();
    if (cacheDir == null) return null;
    final updatedFileName =
        '${forceFileName ?? basenameWithoutExtension(file.path)}.${extension(file.path)}';
    final cachedFile = await file.copy('$cacheDir/$updatedFileName');
    return cachedFile;
  }

then initialize controller with new file
*dont forget to delete cached file after complete


feat: Supports wireless tuning via TCP

On some moving objects, connecting to SimpleFOC Studio via serial port can be somewhat inconvenient (though using a wireless serial connection is also an option). For existing embedded controllers like the ESP32, WiFi support is available. Therefore, we want to enable SimpleFOC Studio to connect to SimpleFOC hardware via a wireless network.
On the Arduino side, we can directly adapt and use the wireless tuning library without modifying the Simple FOC library.

Hi @SmallPond,
I'm currently a bit busy, but I will review your PR as soon as I have time. Thanks for your contribution! :)


aarch64

Hey its possible to support aarch64?  for now on 1.2.5 cdrdao i can rip my discs

Hey its possible to support aarch64? for now on 1.2.5 cdrdao i can rip my discs

Definitely would like to. I don't have any aarch64/arm64 Linux devices at the moment which makes it a bit tricky.


Geolocator example does not work

The Geolocator example depends on a package that is not generally available in pub.dev (baseflow_plugin_template). Please only use officially published packages, otherwise it is very time-consuming for beginners to find out how to install the package. Once I found out how to install the package, it appeared that the parameter "appBarActions" is used in the example, but not available in the BaseFlowPluginExample widget. A lot of time wasted.....

@Henk-Keijzer, the package is generally available as open-source software on GitHub. The pubspec.yaml clearly specifies the location and branch being used. Also the flutter pub get command will automatically download and cache the package on your local machine.
We do not intent to publish this package to pub.dev as this is a package we use only to give a common look to our example apps for our plugins and has no other value for developers outside Baseflow, which means it will just pollute the pub.dev repository.
That said, we can of course mention the use of this package in the README.md of the example App and elaborate a bit on how and why it is used.
Also I would not consider this "A lot of time wasted", you learned how to load packages from a Git repository (b.t.w. detailed information about this topic can be found here), which in our experience is very useful when developing enterprise grade apps.
I will keep this issue open as a reminder to improve the documentation. Thanks for reporting it.

Hi Martin, Thanks for your answer. The remark on "time wasted" was indeed a bit rude. Sorry for that.
Thanks to you and Baseflow for providing us with the geolocator package. Best regards, Henk

Talked with @mvanbeusekom and decided that this issue can be closed, as the template is available on pub.dev.


Add Bart Frenk as team member to the consensus team onboarding docs

Checklist

Branch

[x] Commit sequence broadly makes sense
[x] Commits have useful messages
[x] New tests are added if needed and existing tests are updated
[x] If this branch changes Consensus and has any consequences for downstream repositories or end users, said changes must be documented in interface-CHANGELOG.md
[x] If this branch changes Network and has any consequences for downstream repositories or end users, said changes must be documented in interface-CHANGELOG.md
[x] If serialization changes, user-facing consequences (e.g. replay from genesis) are confirmed to be intentional.

Pull Request

[x] Self-reviewed the diff
[x] Useful pull request description at least containing the following information:

What does this PR change?
Why these changes were needed?
How does this affect downstream repositories and/or end-users?
Which ticket does this PR close (if any)? If it does, is it linked?

[x] Reviewer requested

Welcome :tada:

bors r+

bors r+

bors retry


fastqc tools fails to use private genome for mapping

selecting a private genome to map against, fastqc utils fails with error from bowtie2-build that fasta file is empty

fixed https://github.com/aswarren/p3_fqutils/commit/7b033b20135e68ceaea498078cd72d6136ee436d


link Fashion-MNIST readme to this notebook

Hi, I'm the author of Fashion-MNIST dataset. I found the GANs results on Fashion-MNIST is very interesting, especially how ACGAN and infoGAN failed on Fashion-MNIST. I already highlighted this notebook in Fashion-MNIST README.md. I hope it is ok for you. 🙇
Here are the links:
https://github.com/zalandoresearch/fashion-mnist#other-explorations-of-fashion-mnist
https://github.com/zalandoresearch/fashion-mnist/blob/master/README.zh-CN.md#生成对抗网络-gans

Sure!! I'm very glad to hear you mentioning on my repository.


Exception Handling

Exception Handling while lm_dataformat writing. mailparser could not parse some emails from enron.

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


Remove extension_sidebar_*.[h|cc] from browserAction CL

Those classes should not placed in extensions/common, because these functionality are
only related to sidebar_api and sidebar_manager
extensions/common/extension_sidebar_defaults.cc                  |   18 +
extensions/common/extension_sidebar_defaults.h                   |   29 +
extensions/common/extension_sidebar_utils.cc                     |   37 +
extensions/common/extension_sidebar_utils.h                      |   29 +

It is done at 218a91a028aa75038bc57388b86a93c87148469e (API side) but need more clean up for browserAction CL.

I decided to remove this classes, because its functionality can be covered inside of sidebar_api classes.


fix some issues in chip_theme not nullable properties

when we use the actual version, some errors happen in running the app :
Error: A value of type 'TextStyle?' can't be assigned to a variable of type 'TextStyle' because 'TextStyle?' is nullable and 'TextStyle' isn't.
Error: The argument type 'Color?' can't be assigned to the parameter type 'Color' because 'Color?' is nullable and 'Color' isn't.
Error: A value of type 'Color?' can't be assigned to a variable of type 'Color' because 'Color?' is nullable and 'Color' isn't.

Sorry, I was very busy in the last few months))) 🙏


Master Playbook for ABI is getting failed with latest code on fresh MacBook

TASK [ssh_agent : Add ansible SSH key to ssh-agent] ***************************************************************************
fatal: [<IP_ADDRESS>]: FAILED! => {"changed": false, "msg": "Destination /Users/sumitsolanki/.bash_profile does not exist !", "rc": 257}
PLAY RECAP ********************************************************************************************************************
<IP_ADDRESS>                  : ok=14   changed=4    unreachable=0    failed=1    skipped=9    rescued=0    ignored=0

Fix for this issue has been merged into main branch through above mentioned pull request. Hence closing this issue.


Can't build Cygwin and Windows 10 without --force

I am trying to build and getting....
$ grunt package
Running "shell:npm-install" (shell) task
Warning: EINVAL, invalid argument Use --force to continue.

Aborted due to warnings.

Going to try and troubleshoot
grunt-cli v0.1.13
grunt v0.4.5

In addition when I do use --force I get the following...
 >> build/angular-message-format.js minified into build/angular-message-format.min.js
build\angular.js:4437: WARNING - Throw expression is not a minErr instance.
      throw err;
      ^

build\angular.js:10656: WARNING - Throw expression is not a minErr instance.
        throw e;
        ^

build\angular.js:12125: WARNING - Throw expression is not a minErr instance.
    throw e;
    ^

build\angular.js:15989: WARNING - Throw expression is not a minErr instance.
        throw e;
        ^

0 error(s), 4 warning(s)
>> build/angular.js minified into build/angular.min.js

But it does in fact finish

Could it be related to this line in the gruntfile...
"npm-install": {
    command: path.normalize('scripts/npm/install-dependencies.sh')
  },

And the fact that I am on windows w/ cygwin (aka paths getting hosed)?

I do not have access to this environment, but if you can figure this out
and create a clean PR, I see no problem in merging it

I think this is is only half the solution. You'll probably run into https://github.com/angular/angular.js/issues/11143 after this is fixed

Actually, the path.normalize should handle different platform file paths, so it's probably a different problem. Can you run the command --verbose?

shell:npm-install has been re-implemented in #12792.
@jrgleason, can you test if your issues are still there with the code on master ?


Not an issue, just an implementation question

Thanks for pointing me to this fork Colin.
As i wrote earlier, i´m currently using the PI and numpy.fft() to compute audio for a school project.
This is what i'm using to get the FFT out of a 44100Hz mic sample.
The current data length is 8192 np.int16 samples (some 0.2 seconds of audio)
def getFFT(data,rate):
    data=data*np.hamming(len(data))
    fft=np.fft.fft(data)
    fft=np.abs(fft)
    fft=10*np.log10(fft) #get decibels
    freq=np.fft.fftfreq(len(fft),1.0/rate)
    return freq[:int(len(freq)/2)],fft[:int(len(fft)/2)] # return X axis and power bands

This code (taken from SWHear.py lib, by Scott Harden) renders some 22k FFT  bands.
I kind of understand how to do the same in your GPU_FFT implementation by sending the right data type, however i fail to understand what the "bands_indexes" parameter is telling the function.
How would you implement audio_levels.compute() in order to yield 22k bands ?

Hello, there is indeed a lack of a real usage example here, what I don't have yet, but I can try to explain how to use the lib:
from rpi_audio_levels import AudioLevels
# the length of your audio samples is 8192 = 2**13
DATA_SIZE = 13
# how many frequency bands do you want to retrieve ?
BANDS_COUNT = 3  # (just an example)

audio_levels = AudioLevels(DATA_SIZE, BANDS_COUNT)

The raw computed fft will have a length of 2**(DATA_SIZE - 1).
With BANDS_COUNT = 3 I ask to only retrieve 3 computed values from this fft data.
But band_indexes are a way to specifiy which parts of this array of 4096 fft values I want to take for the resulting 3 bands, instead of splitting the fft in 3 equal parts (which is not what I want if the sound frequencies that are interesting me are only between 100 and 10000Hz for example).
# Each band can have a different width, and you will have to compute the indexes depending on the frequencies that interest you for each band
bands_indexes = [
        [500, 1000], # start and end idx for the 1st band (min of start idx is 0 here)
        [1000, 2000], # start and end idx for the 2nd band
        [2000, 4000]] # start and end idx for the 3st band (max of end idx is 4096)

Here the indexes come from nowhere, but you need some function to convert the frequency of each band into those indexes within this 4096-witdh fft data.
Such a function is not integrated into this lib, but it may be a good thing to have one in the future.
For example:
def calculate_bands_frequency(min_frequency, max_frequency):
    '''Calculate frequency values for each band'''
    print("Calculating frequencies for %d bands." % BANDS_COUNT)
    octaves = (np.log(max_frequency / min_frequency)) / np.log(2)
    print("octaves in selected frequency range ... %s" % octaves)
    octaves_per_channel = octaves / BANDS_COUNT
    frequency_limits = []
    frequency_store = []

    frequency_limits.append(min_frequency)

    for i in xrange(1, BANDS_COUNT + 1):
        frequency_limits.append(frequency_limits[-1]
                                * 10 ** (3 / (10 * (1 / octaves_per_channel))))
    for i in xrange(BANDS_COUNT):
        frequency_store.append((frequency_limits[i], frequency_limits[i + 1]))
        print("channel %d is %6.2f to %6.2f " % (i, frequency_limits[i],
                                                 frequency_limits[i + 1]))
    return frequency_store

sample_rate = 44100
min_frequency = 20
max_frequency = 20000
frequency_limits = calculate_bands_frequency(min_frequency, max_frequency)
freqs_left = [8192 * frequency_limits[i][0] for i in xrange(BANDS_COUNT)]
freqs_right = [8192 * frequency_limits[i][1] for i in xrange(BANDS_COUNT)]
bands_indexes = [(int(freqs_left[i] / sample_rate), int(freqs_right[i] / sample_rate))
                 for i in xrange(BANDS_COUNT)]

# Then retrieve audio levels each time you have new data
levels = audio_levels.compute(sound_data, bands_indexes)[0]
# sound_data must be a numpy array of 8192 real data with float dtype (np.float32), with only 1 dimmension

I hope this is a little more clear,
you can check the lightshowpi project that has a real usage example of the rpi-audio-levels lib in its https://bitbucket.org/togiles/lightshowpi/src/master/py/fft.py file.
I'm not sure I understand when you say "22k bands", what do you mean ? 22000 frequency bands ?

Thanks for taking the time to share the details and the spirit of the function. It is much clearer to me now. It makes perfect sense for all sorts of applications that will dig into specific bands.
I´m going to keep testing your code because the speed gain is a must for this project!. I tried it yesterday and no matter what give as input data, the compute() function is returning a  with 3 elements on all indexes... maybe i´m doing something wrong?. Idealy i would expect to get a DATA_SIZE/2 length array with the power values for all bands from 1 to DATA_SIZE/2, which i understand should be the first element of the Tuple type returned by compute().
My implementation is an acoustic "pure-tone cancelling device" for a final semester project.  Regarding the 22000 bands, thay are required to identify the frequency of the pure tone in space down to 1 decimal precision. (20000 Hz / 22000 Hz)
In order to cancel a pure tone with a "counter-tone", it must match exactly the same frequency, 180 degrees out of phase with the source. Offcourse, in practical terms 16384 bands should suffice.
The raspberry has a C-Media USB card whith a microphone to gather ambient sound on all audible frequencies. When it detects a spike on any band above 60dB, it identifies the frequency and generates a sine wave (counter-tone) and tests every possible phase, in order to create acoustic interference with respect to the source.
Finally it plays the tone with the same amplitude, 180 degrees out of phase, getting to the point where that particular frequency is fully attenuated in a specific portion of space.
I´ll pop the code into github soon, in case you want to check it out.

https://github.com/pguillem/RaspPI3-acoustic-pure-tone-canceling

You're welcome. I've ve been inspired a lot by what I found on internet ;)
Your project seems interesting!
Your are right the first element of the tuple returned by compute() is the DATA_SIZE/2 length array with the power values for all bands.
With an input data length of 2^13, you could only retrieve a maximum of 2^12 fft values, and if you want as much bands as possible, bands_indexes should be:
bands_indexes = [[0,1], [1,2], [2,3], ...., [4095,4096]]
# or
bands_indexes = [(i, i+1) for i in xrange(2**(13-1))]

You would retrieve DATA_SIZE/2 bands. (Did you try with this bands_indexes value ?)
According to http://electronics.stackexchange.com/questions/12407/what-is-the-relation-between-fft-length-and-frequency-resolution , your frequency resolution is 44100 / 2 / 4096 = 5.383... Hz
And you would like a precision lower than 1Hz if I understood well ? So I'm not sure you can get such a frequency resolution with a sample rate of 44100Hz and data of only 8192 samples.
I'm not really an expert of FFT, and my memory would have to be refreshed, so please correct me if I'm wrong.
Thanks for sharing the code of your project, I may have a look into it when I have more time.

Great, i just managed to get the 4096 bars REALLY fast.
The program kept reaching a segmentation fault on the second FFT execution, but i realized it was due to my function re-creating the AudioLevels object over and over again.
As long as the code only creates the AudioLevels instance ONLY ONCE,... it works calling compute() again and again.
THANKS!!

cool ;)


How to get the nodes and edges of the graph using AQL Without start from the root.

Assume I have graph A→B, B→C, C→D, D->E, E->F , G->H, D->F and D->G
Now I wrote the below query to my graph to get the paths for the max depth 3 starts from the A.
FOR v,e,p IN 1..3 ANY 'A' GRAPH 'graph' RETURN distinct p
This will return A→B, B→C, C→D,
Now I have a usecase of getting the vertices and edges (or paths) from depth 3 to 4 of above graph start from the vertex D to get the result D->E, D->F , D->G
Is there a possible way of writing a query for this without getting all the paths again from 1..4

Hi @Wathsara!
I'm not totally sure I understand what you're trying to achieve.
For one thing, from what I understand, it sounds like you're looking for the OPTION { uniqueVertices: "global", bfs: true }, and want to omit the DISTINCT. See https://www.arangodb.com/docs/stable/aql/graphs-traversals.html for details.
Secondly, I do not quite get this:

Is there a possible way of writing a query for this without getting all the paths again from 1..4

I assume passing 3..4 as depth does not get you the desired results. Can you explain in more detail what result you need?
On a side note, it would make more sense to ask such a question on either StackOverflow or in our community slack, the Github issues are for bug reports..
Best,
Tobias

@goedderz Thank you for the reply and let me explain further with the diagram below

For the Above graph If I write the query FOR v,e,p IN 1..3 ANY 'A' GRAPH 'graph' RETURN distinct p (depth is 3, I started from A)
This will return A→B, B→C, B->I, I>J, C→D
Now my usecase is to get the vertices and edges (or paths) from depth 3 to 4 of above graph start from the vertex D to get the result D->E, D->F , D->G
If I pass like 3..4 then it will return the D->H, D->E, D->G and J->K and I dont want this J->k path to be retuned

@Wathsara In this example, you could either start an OUTBOUND traversal from D, instead of from A. Or you could add a FILTER p.vertices[3]._key == 'D' (or something similar) right after the traversal. Though the latter will internally still need to iterate all the other paths, so the first variant will be faster.

@goedderz Thank you and it warks for me.

bokachoda query kahan hai be? land bsdwala


fix: Stale Page Flicker Bug on switching pages.

Pull Request Template
Use this template to quickly create a well written pull request. Delete all quotes before creating the pull request.

Description
In this PR we are fixing the page flicker issue while switching between pages.
PR fixes following issue(s)
Fixes # (issue number)

if no issue exists, please create an issue and ask the maintainers about this first

Media

A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video

Type of change

Please delete options that are not relevant.

Bug fix (non-breaking change which fixes an issue)
New feature (non-breaking change which adds functionality)
Breaking change (fix or feature that would cause existing functionality to not work as expected)
Chore (housekeeping or task changes that don't impact user perception)
This change requires a documentation update

Testing

How Has This Been Tested?

Please describe the tests that you ran to verify your changes. Also list any relevant details for your test configuration.
Delete anything that is not relevant

[ ] Manual
[ ] JUnit
[ ] Jest
[ ] Cypress

Test Plan

Add Testsmith test cases links that relate to this PR

Issues raised during DP testing

Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR)

Checklist:
Dev activity

[ ] My code follows the style guidelines of this project
[ ] I have performed a self-review of my own code
[ ] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation
[ ] My changes generate no new warnings
[ ] I have added tests that prove my fix is effective or that my feature works
[ ] New and existing unit tests pass locally with my changes
[ ] PR is being merged under a feature flag

QA activity:

[ ] Speedbreak features have been covered
[ ] Test plan covers all impacted features and areas of interest
[ ] Test plan has been peer reviewed by project stakeholders and other QA members
[ ] Manually tested functionality on DP
[ ] We had an implementation alignment call with stakeholders post QA Round 2
[ ] Cypress test cases have been added and approved by SDET/manual QA
[ ] Added Test Plan Approved label after Cypress tests were reviewed
[ ] Added Test Plan Approved label after JUnit tests were reviewed

Summary by CodeRabbit

Refactor

Streamlined the editor canvas interface for enhanced performance.
Simplified rendering of components by removing unnecessary props and adjusting corresponding test cases.
Removed redundant attributes from the <Canvas> component for improved component usage without affecting logic or control flow.

/build-deploy-preview skip-tests=true

/build-deploy-preview skip-tests=true

/ok-to-test<EMAIL_ADDRESS>

lgtm


Feature/Programming Exercise/Trigger buttons should detect manual results and passed due dates

Checklist

[ ] I tested all changes and all related features with different users (student, tutor, instructor, admin) on the test server https://artemistest.ase.in.tum.de.
[x] ~Server: I added multiple integration tests (Spring) related to the features~
[x] ~Server: I added @PreAuthorize and check the course groups for all new REST Calls (security)~
[x] Server: I implemented the changes with a good performance and prevented too many database calls
[x] Server: I documented the Java code using JavaDoc style.
[x] ~Client: I added multiple integration tests (Jest) related to the features~
[x] ~Client: I added authorities to all new routes and check the course groups for displaying navigation elements (links, buttons)~
[x] Client: I documented the TypeScript code using JSDoc style.
[x] Client: I added multiple screenshots/screencasts of my UI changes
[x] Client: I translated all the newly inserted strings into German and English

Motivation and Context

Fixes #1014
Description

Single build trigger button: Check if the deadline has passed and if the participation's latest result is manual -> show warning modal
Trigger all builds button: Check if the deadline has passed -> show warning modal

Steps for Testing

Given a programming exercise that has a dueDate / buildAndTestAfterDueDate that has passed:

Log in to Artemis

Navigate to Course Administration > Programming Exercise > Participations

Click the trigger button for a single participation that has a manual result as its latest result => a modal should warn the instructor

Log in to Artemis

Navigate to Course Administration > Programming Exercise > Participations

Click the trigger all button => a modal should warn the instructor

Screenshots

Nicely done.
Works well for me

Thanks! I found a small bug when testing this again:
When a result is manual and you trigger the single build twice in a row, you are still warned the second time, because the comp still thinks it has a manual result. I added a websocket subscription for results in the build button.


Show fees in listings modal

needed as addition to auto teleport

please wait for the design

@exezbcz any progress on this,  I'd like combine it with #5130
also I guess this is would look like this right

@hassnian I have to change the bottom part of the modal a bit to fit the potential auto teleport there
will tag you once ready

@exezbcz this is maybe new issue or I can add it to this one ,  we need show the  0.3% on buy action support fee

need design
thanks


Improve and update documentation for version 3.0

Proposed structure:

Index (with introduction)
Getting started
Apps and APIs
Middleware
Routing
Requests (+ parameters)
Responses
Validation
Security
Parameters
Context
Exceptions
CLI
Testing

Is there any examples for uploading and accessing files. I am facing issues regarding this in connexion 3.0.
await connexion.request.form() makes the application go into a limbo..


for differences between interfaces and type aliases, add note about c…

…ompiler performance when using interfaces with extends vs type aliases with intersections

We wanted to avoid putting performance recommendations in this list before, that opinion could be worth re-examining but I'd probably recommend not merging

Given this is a direct link to the wiki, I'm not against including it.

sorry for closing. i force pushed in https://github.com/microsoft/TypeScript-Website/pull/3076#event-12629106864 and the PR was auto-closed and now prevents me from re-opening so I'm moving this to https://github.com/microsoft/TypeScript-Website/pull/3087


libvmi.WithMasqueradeNetworking(): return a single option instead of a slice

What this PR does
Before this PR:
libvmi.WithMasqueradeNetworking() was returning a slice of options. This is inconsistent with how libvmi is usually used, and enforces the user to create a slice than expand it which makes the code ugly for unnecessary reasons.
As an example, this is how calling it looked like:
			vmi := libvmifact.NewAlpineWithTestTooling(
				append(libnet.WithMasqueradeNetworking(), libvmi.WithCPUCount(1, 2, 1))...,
			)

After this PR:
libvmi.WithMasqueradeNetworking() returns a signle option like any other libvmi function. The code will look as following:
			vmi := libvmifact.NewAlpineWithTestTooling(
				libnet.WithMasqueradeNetworking(), libvmi.WithCPUCount(1, 2, 1)),
			)

Checklist
This checklist is not enforcing, but it's a reminder of items that could be relevant to every PR.
Approvers are expected to review this list.

[X] Design: A design document was considered and is present (link) or not required
[X] PR: The PR description is expressive enough and will help future contributors
[X] Code: Write code that humans can understand and Keep it simple
[X] Refactor: You have left the code cleaner than you found it (Boy Scout Rule)
[ ] ~Upgrade: Impact of this change on upgrade flows was considered and addressed if required~
[X] Testing: New code requires new unit tests. New features and bug fixes require at least on e2e test
[ ] ~Documentation: A user-guide update was considered and is present (link) or not required. You want a user-guide update if it's a user facing feature / API change.~
[ ] ~Community: Announcement to kubevirt-dev was considered~

Release note

NONE

/sig code-quality

Thank you @iholder101! Great initiative! I only request 2 changes

Nice catch! Thanks @fossedihelm, PTAL

Hi again @fossedihelm!
I've missed some more usages that were added during the rebase, now they're all addressed :)
Also, pull-kubevirt-unit-test-arm64's failure is unrelated to this PR. It fails over unable to manipulate /tmp's contents, exiting which occurs on other PRs as well (e.g. here)

Sorry, missed the latest push.
/lgtm

This pull-request has been approved by: EdDev
Once this PR has been reviewed and has the lgtm label, please ask for approval from iholder101. For more

The bot asked to ask you :)
But it seems you need to rebase now :/

This pull-request has been approved by: EdDev
Once this PR has been reviewed and has the lgtm label, please ask for approval from iholder101. For more

The bot asked to ask you :)

:laughing:

But it seems you need to rebase now :/

Yeah it'll be challenging to merge this due to rebases..
Let's hope some other reviewer can look at this soon enough

/approve
@iholder101 Thank you!

/lgtm
Let's try to reduce the conflicts


Problem is due to Discord.Net's RPC implementation. Hopefully fixed next beta.

DiscordPTB client and Discord.net concrete2 branch fixes.


Setup DR with SQL Managed Instance

I am not sure how to setup DR with Managed Instance. With SQL Database we can have Active Geo-Replication but what Managed Instance? Geo-Instance not going to work here because it can hours to restore the data to a new Instance.

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

ID: 28ca1f7f-5a34-0f23-10ce-3ff24c76db97
Version Independent ID: 5c4a22c4-78fc-911d-9fa0-8dfab1653b6e
Content: Azure SQL Database Managed Instance Overview
Content Source: articles/sql-database/sql-database-managed-instance.md
Service: sql-database
GitHub Login: @bonova
Microsoft Alias: bonova

@vikaskumawat80 Thank you for the detailed feedback. We are actively investigating and will get back to you soon.

@vikaskumawat80 geo-replication support is coming to public preview very soon.

@vikaskumawat80 We will now proceed to close this thread. If there are further questions regarding this matter, please comment and we will gladly continue the discussion.


Inconsistent naming of duplicate file/folder

…erent folder names

Resolved / Related Issues
Items resolved / related issues by this PR.

Closes #1352

Details of Changes
Add details of changes here.

Added end of line check ($) to the regex filter when searching for a duplicate (n) at the end of the file or folder name. Duplicate files or folders will only have (n) at the end of the name, and not in the middle as the issue highlighted. This fix resolves that issue.

Validation
How did you test these changes?

[x]  Ran tests through Regex Tester. Given that the only change is a regex match filter, no other changes were made.
[ ] Built and ran the app (I was unable to build the app as received directly from GitHub, so couldn't do this)

Hi, thanks for this contribution. Unfortunately I'm not able to reproduce the linked issue. For me duplicating a folder named "something" simply results in a folder "something - Copy" being created. Is it different for you? Are you able to reproduce the issue (without this change)?

Hi, unfortunately this would not fix the linked issue. The function GenerateUniquePath() is not called in that scenario. The new name is actually selected by the system.

Yes, I figured this out after I was able to build and test. The issue remains (I can replicate the issue) and I am trying to figure out where the renaming actually happens.

I can replicate the issue

Funny I can't (also on main), when duplicating a folder the new name simply has "- Copy" appended at the end.
Are you trying in a local or network folder?
If you wish we can talk on discord, I'll point you where the renaming happens.

Perfect. I'll find you on Discord.
On Fri, 26 Nov 2021, 16:05 Marco Gavelli, @.***> wrote:

I can replicate the issue
Funny I can't (also on main), when duplicating a folder the new name
simply has "- Copy" appended at the end.
Are you trying in a local or network folder?
If you wish we can talk on discord, I'll point you to where the renaming
happens.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/files-community/Files/pull/7071#issuecomment-980001347,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AACBERBZLDULUHZOFAGEUR3UN6H3PANCNFSM5IYPZIYA
.
Triage notifications on the go with GitHub Mobile for iOS
https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675
or Android
https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub.


Use PascalCase for all file names.

If possible, would be neat to have main.swift in each example. This way - using tool like Xcodegen you can easily spit out a corresponding Xcode project all configured.

Yes, PascalCasing shouldn't apply to main.swift files as they are the entry point for each executable product.

@rxwei for the reference: does "all file names" include Bash scripts (e.g. Transformer/download_model.sh) and Python sources (e.g. Transformer/encoder.py) or is my assumption that this only relates to Swift sources correct?

It only applies to Swift file names, yes. Thanks for checking!


Time filter needs to update every fixed interval of time

This part:

displays the time since the timestamp of the tweet. However, it does not update.

Solution turned out to be pretty easy. Used this: https://github.com/urish/angular-moment#timeago-directive
(angular-moment was already included)


Tipselection wip

WIP -
Headers + structs + tip selection algorithm sketch

Maybe move /common/concensusto /ciri/concensus ?


 not support dynamic sql

when statementType is "STATEMENT"，not support #{}  placeholder
<select id="getUserByEntity" statementType="STATEMENT" resultType="com.blog4java.mybatis.example.entity.UserEntity">         select         <include refid="userAllField"/>         from user         <where>             <if test="id != null">                 AND id = #{id}             </if>             <if test="name != null">                 AND name = #{name}             </if>             <if test="phone != null">                 AND phone = #{phone}             </if>         </where>     </select>

@harawata

MyBatis by default uses JDBC PreparedStatement which supports placeholders and #{} works with these. When you specify statementType="STATEMENT" then simple Statement will be used and it doesn't support setInt(), setString() etc. That's why #{} will not work. You can still use ${} but it may lead to SQL Injections. I guess this is expected behavior and not a bug.

thank you, i agree  ,  #{} means  replace #{...} with  ?  and  then  call  PreparedStatement .setXXX()  function set value ， ${} means sql  joint


Behavior:virtual-list bugs?

# 1
When adding a new item to the virtual-list and scrolling down(using vlist.lastElementChild.scrollIntoView()) immediately,
the item is added at an incorrect location.

# 2
When changes (delete/replace) occur in virtual-list items, scroll bars are not rendered correctly.

# 3
Certain virtual-list item is rendered multiple times intermittently. (see Test Message 500)

Sample project used for the above test is here.
vlist-test-sample.zip

These are not the behavior bugs but rather is misunderstanding of how that behavior works.
Here:
https://github.com/c-smile/sciter-js-sdk/commit/21ff5f8e46d721713780f6411691298065dcb9f9
I've added documentation and updated the sample.
Note use of record indexes as keys works only in case of non-modifiable lists.
But in your case record keys shall be permanent - record once appeared on the list shall not change the key. And that is where your code fails.


Add ability to run DSE on readOnlyRootFilesystem

Fixed by https://github.com/k8ssandra/management-api-for-apache-cassandra/pull/538


Fix NJ scrape

NJ contains encoding errors in certain records, mainly from 2005-2007 depending on the scraper run.
For example, from a recent copy of newjersey_warn_raw.csv downloaded from the platform project:
MAYNE PHARMAÂ,PARAMUSÂ,4/6/07Â,67Â

Records can be found by opening in Excel and reverse-sorting on EFFECTIVEDATE field.

This is a duplicate for #156


Use 'esy release' command

This PR makes reason-cli release process based on esy release command.
Also:

I've reconfigured CI to run a build matrix over "release types" x "OSes"
Removed Node 6.1.x from Node versions (not sure why we needed exactly 6.1.x there)
CI: removed Node 5 (it's not supported anymore, see Node release schedule)

Travis is still building macOS instances but they will be fine. Ready for review!

Wonderful.


Tile dispatcher

Added the ability to load tiles with formats other than byte[] with the TileFetchDispatcher and TileLayer.

An initial reaction.
I see the tile fetcher as just returning raw data. In this case the format chosen is a byte[]. But a byte array could be anything. In this case it is an image but it does not have to be. I choose for byte array (long ago) because that is a format that is more clear to me than a stream. A stream could have different implementations and may or may not need to be disposed. But these days most data comes as streams over http, and serializing a stream to a specific format is common, so perhaps it should be a stream instead. I would prefer this over returning something of type object.
Still, now we do a conversion to bitmap, but for vector tiles (that is your purpose, right?) something else needs to be done. Thinking about a solution.

In the 'vectortiles' branch there is a GenericTileLayer and a TileLayer which is derived from that and uses a TileParser as argument. Not sure I like that. TileParser is still quite abstract. You would expect the T to be of the type of tile that it returns. In the case of the derived TileLayer that is a Raster (an IGeometry), but that is a type that is used nowhere in the interface. You just put a Raster in a Feature, a list of Features is returned and the geometry is cast to Raster later on in the renderer.
TileParser just turns the byte array into a Raster. Since the raster is nothing more than the raw data there is no real conversion here, but this is the place where such conversion would be appropriate.
What about just injecting a method for parsing to geometry? No generics needed.

Still, now we do a conversion to bitmap, but for vector tiles (that is your purpose, right?) something else needs to be done. Thinking about a solution.

Perhaps it is possible to return a interface like ITile. Than Raster implements ITile.

What about just injecting a method for parsing to geometry? No generics needed.

Isn't this, what I'm doing? I use FetchToFeature to generate a feature from the result. But at two places, byte[] is hard coded, so I had to replace this.
I don't want to change big things. You know, V2 is comming. So I try to get, what I want, with so small changes as possible. Ok, callout wasn't a good example for this ;-)
Do you have an enterprise version with profiler? Sometimes the map movement is a little bit slow. Would be nice to see some profiles, for what the time is wasted.

What about just injecting a method for parsing to geometry? No generics needed.

Isn't this, what I'm doing? I use FetchToFeature to generate a feature from the result. But at two places, byte[] is hard coded, so I had to replace this.

Yes, this is what you are doing given the current architecture. But in the currently architecture you need to inject the converter into the TileLayer and then into the TileDispatcher. I am now thinking of away in which the TileDispatcher could be more stupid. Maybe it should not contain a conversion to Geometry.

Do you have an enterprise version with profiler? Sometimes the map movement is a little bit slow. Would be nice to see some profiles, for what the time is wasted.

I could take a look at that. What kind of situations do you see this? Which samples? What do you do?

Also now there are two methods injected, perhaps there could be one.

Also a more meta remark about these discussions around MRs. I wrote most of the original code in here, but it was a long time ago and it takes some time to get the full picture back. Usually I try to start a conversation before I have the full picture. The conversation itself helps me to get it back. So my initial remarks might be off the mark. I am sorry about this but I prefer to start the conversation with partial knowledge instead of studying it more because the conversation helps me to get my mind going on a topic.

First of all, I would like to say, that one reason, why I like Mapsui and BruTile is their flexibility. With only a few changes, you could do fantastic new things.
This PR is one of this things. With only a few changed lines, the same code code be used for raster and vector tiles. Ok, if you have both in mind, you would have made it here and there a little bit better, but it works.
I assume, that you not very deep in the world of Mapbox GL vector tiles, so I would give you a short information about them. First of all, I use Mapbox GL format for feature data and styling. There are other formats out there (one of the mostly know is Mapsforge), which I always have in mind. Mapbox GL uses a so called style file in JSON format. This contains general informations about the file, all sources, that are used and the styling for this sources. Sources could be raster and vector tiles. The styling is divided in in layers, where the layers are drawn in that order, that they have in the style file. Each style layer refers to a source and a layer in the source data (if it is a vector source). This styles are dynamically and could change with zoom and other context dependent parts.
When loading a tile, you get a number of style layers (normally around 100) with features, that belong to this layer. Some features belong to more than one style layer. This could be e.g. roads, which drawn twice (bigger and smaller to get framed roads).
So how to bring this to Mapsui? Loading the style file is made with Newtonsoft.Json. Reading the features is made by BruTile, which could read MBTile files and online MVT data. At the end, I have style layers with their belonging features.
Now I have to bring this informations into Mapsui and on the screen. There are different ways to do this. First I could create one layer for each style layer and add a provider, which returns the right features. Second I could return a tile, containing all style layers and features, that are belong to this. Here are again two ways: return a ready drawn tile as drawable or return a list of features with belonging styles. A third would be to create a raster tile from the data.
In the moment I create a drawable tile with prerendered pathes, that are drawn each time with the correct style. The path is created when loading the feature data. It is one path per style layer. So I loose the feature information for MapInfo. But it works fast and relayable. For this I need this PR.
And I have another problem with the TileLayer. It works good, when a tile isn't in the tile source. It makes a fallback and looks, if there is a tile with a lower zoom level and uses this to draw the map. Works good for raster tiles, because they overwrite underlaying lower resolution tiles. But with vector tiles, this doesn't work. They draw only lines and have free parts between them. If you than draw two tiles, you see the underlying tile between the tile on top. For this, TileLayer should have a clipping mechanism. Only that tile part, that is missing, should be drawn. For example, if you draw a map in zoom level 7 and you only have one tile out of four for this and you get the tile in zoom level 6, you should draw only this parts of tile in zoom level 6, that you don't have in zoom level 7. Up to now I don't know how to do this. Perhaps you have an idea for this.

And I have another problem with the TileLayer. It works good, when a tile isn't in the tile source. It makes a fallback and looks, if there is a tile with a lower zoom level and uses this to draw the map. Works good for raster tiles, because they overwrite underlaying lower resolution tiles. But with vector tiles, this doesn't work. They draw only lines and have free parts between them. If you than draw two tiles, you see the underlying tile between the tile on top. For this, TileLayer should have a clipping mechanism. Only that tile part, that is missing, should be drawn. For example, if you draw a map in zoom level 7 and you only have one tile out of four for this and you get the tile in zoom level 6, you should draw only this parts of tile in zoom level 6, that you don't have in zoom level 7. Up to now I don't know how to do this. Perhaps you have an idea for this.

A quick response to this part. There is an IRenderGetStrategy which has two implementations in Mapsui, the RenderGetStrategy which is used as default and the MinimalRenderGetStrategy. You can pass in the MinimalRenderGetStrategy in the TileLayer constructor and it will not draw the higher level tiles. There will be holes when a tile is not fetched yet, but you will not have tiles drawn on top of each other.
About clipping. Not looked at the current code yet, but I know I have implemented this at some point, perhaps in another renderer. I remember because I was very surprised the clipping was a lot slower than actually drawing the full image. So, for performance no clipping was the best option. But without clipping there is already a problem in the current implementation if you have semi-transparent tile layers. It looks really ugly if you have tiles with just roads and a transparent background.

This is the virtual earth layer with semi transparency while not all tiles are loaded yet. The brighter parts is where two semi transparent tile levels are drawn on top of each other. Here it is not so problematic but some tile services are slower and then it is better to use the MinimalRenderGetStrategy. The MinimalRenderGetStrategy could also be used to improve performance, the default RenderGetStrategy has a fancy recursive search which could take more time (but we never measured).

This is the virtual earth layer with semi transparency while not all tiles are loaded yet. The brighter parts is where two semi transparent tile levels are drawn on top of each other. Here it is not so problematic but some tile services are slower and then it is better to use the MinimalRenderGetStrategy. The MinimalRenderGetStrategy could also be used to improve performance, the default RenderGetStrategy has a fancy recursive search which could take more time (but we never measured).

If you would like to keep the recursive strategy it should be possible to set a clip rectangle when drawing part of a 'bigger' tile to fill the area of a smaller tile that is missing. The clip rectangle should of course be the size of that missing smaller tiles.

Good to know. Than I test the MinimalRenderGetStrategy with my own overdraw version, which could create each tile from a tile with lower zoom level. No problem with vector tiles, which are always look good :-)

Regarding the profiler: I have a little speed problem. If I test on Android, than it renders the map after a Navigator.ZoomIn() some times. Is fast enough, but if the zoom is very high, this is getting slow. Up to zoom level 14 (it is the zoom level, where the mbtiles file has entries), the render times are between 10 and 80 ms. If I go to zoom level 15, then the times are around 200 ms, but saw also 800 ms. On zoom level 26 we are around 1700 ms. That is something you could see. And you see on the screen four lines. On level 14 you see complete Monaco with hundreds of lines. So I'm not sure, what's going on. It is always the same amount of paths (all is rendered from zoom level 14 tiles). Perhaps the lines are bigger and so more pixels have to been drawn.
So, sometimes a profiler would be helpful :-)

Btw. you didn't say something about this PR. Do you think, it is possible to do this? Perhaps without many changes, because of V2? It is a small change, that should not have any impact on others.

Btw. you didn't say something about this PR. Do you think, it is possible to do this? Perhaps without many changes, because of V2? It is a small change, that should not have any impact on others.

I am looking into a way to do this. But I would prefer one method that is injected. To allow this the TileLayer and TileDispatcher should be organized a little different. Maybe the TileDispatcher should be more like the Delayer, which is a class that does not know what the actions it has to execute are about.

Is there a way I could reproduce the performance problem?

I am looking into a way to do this. But I would prefer one method that is injected. To allow this the TileLayer and TileDispatcher should be organized a little different. Maybe the TileDispatcher should be more like the Delayer, which is a class that does not know what the actions it has to execute are about.

But this is a bigger thing. We could add some problems before release V2. So it would be better to do this small change and do the rest later.

Is there a way I could reproduce the performance problem?

You could use my branch “VectorTileTest” and the project “VectorTiles” to test it. There must be the VectorTiles project in the same directory as the Mapsui folder.
In the meantime I found the profiler function of VS 2019. And I tested to create an extra path for each vector tile feature. If I do this, than it is going extrem slow. So creating one path per layer is the fastest way.
I would say, that the problem is, that the clipping isn’t correct. Perhaps the complete tile is drawn in extra high resolution, but only a small part is visible. Will try to get this.

I tested a little bit more, but it is strange.
If I zoom into the map, the number of OnPaintSurface() increases. Higher zoom level are followed by more calls to OnPaintSurface(). On zoom level 27 the function is called 26 times. There is only one tile visible and there is no mouse movement. Even, if the map isn't visible on the screen, because another window is hiding the app, than OnPaintSurface()is called. Very strange.

Do you use the MinimalRenderGetStrategy?

No, I use the normal one.

Ok, one thing I found is, that when exit the map (move over a button and so on), a RefreshData() is called. This call updates all layers, which leads to a call OnPaintSurface() for each layer. Perhaps we should set a flag, so that only after the refresh of the layer a invalidate is called. But only TileLayer() invalidates the canvas. And if I only have one tile on screen (zoom level 19), the invalidate is called 30 times. I checked this with a normal tile source like in the samples and found, that there invalidate is called only two times when you on such zoom levels, where only one tile fills the complete screen. I don't understand this. Why calls my TileLayer 30 times invalidate, where as the normal tile layer with a OSM provider calls only twice.
But now, I assume, that I found the problem. It is, because vector tiles work up to zoom level 30 (and higher), I try to add resolutions up to zoom level 30.  But than the tile fetcher trys to fetch many tiles, which it doesn't find. But each look up leads to a refresh of the map.
So the question is, how to work with a tile source, that has zoom levels 0 to 14, but could be zoomed in up to 30. If the zoom is e.g. 24, the tile source should return the zoom level 14 tile (and look only for this, because tile sources max zoom level is 14).

The TileSchema specifies the levels (Resolutions). The max zoom level is 14 then the resolution should not have levels 'deeper' than that. If it has levels specified where it has no tiles the schema is considered incorrect. In the past an exception was thrown when a tile was not found but later we got a bit less strict.
Below is an example of TileSource created with a schema with min level 0 en max level 14:
private static HttpTileSource CreateTileSource()
{
    return new HttpTileSource(new GlobalSphericalMercator(0, 14),
        "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
        new[] { "a", "b", "c" }, name: "OpenStreetMap",
        attribution: OpenStreetMapAttribution, userAgent:"OpenStreetMap in Mapsui");
}

oh, there is still an Exception, perhaps only the MBTiles returns no exception. Take a look at the TileFetchDispatcher.FetchOnThread, where the exception is caught, and TileFetchDispatcher.FetchCompleted. The exception is passed on as an Error field to the MapControl, the MapControl does no refresh when the Error field is set. Perhaps this is different in your implementation.

Btw, there is also the IFetchStrategy, which also has a minimal version, the MinimalFetchStrategy. This might be confusing. There is a strategy for fetching tiles from the cache (IRenderGetStrategy) and a strategy to fetch tiles from the web service, or the mbtiles file (IFetchStrategy). The IFetchStrategy might amplify your problem because it always fetches the tiles at the higher levels. This is to have some tiles to fall back on for the IRenderGetStrategy

I set my IFetchStrategy to 30, so I always get a tile, even if I have only zoom level 0 in the mbtiles file.
Ok, the problem is this: I have a mbtiles file with up to zoom level 14. Now I want to draw the map in, say, zoom level 20. In this zoom level I need, say, 8 tiles. All this 8 tiles have the same source, the tile in zoom level 14, the max of the mbtiles file. So I want to stop to check for this zoom level 20 tiles and return a zoom level 14 tile with larger extent. This is than drawn on the canvas. This would be the best way.
Another way could be to do the same in tile creation. I have this, so it would be possible to create all 8 tiles for zoom level 20. But this isn't so good. All this tiles waste space in the cache and it needs time to create them.
The question is: which is the best way to do this? Could TileLayer/FetchTileDispatcher be used for this?

Ok, one thing I found is, that when exit the map (move over a button and so on), a RefreshData() is called. This call updates all layers, which leads to a call OnPaintSurface() for each layer. Perhaps we should set a flag, so that only after the refresh of the layer a invalidate is called. But only TileLayer() invalidates the canvas.
But now, I assume, that I found the problem. It is, because vector tiles work up to zoom level 30 (and higher), I try to add resolutions up to zoom level 30.  But than the tile fetcher trys to fetch many tiles, which it doesn't find. But each look up leads to a refresh of the map.
Now I changed it in this way, that my TileSource only delivers tiles up to the max zoom level (in this case 14). Beyond this level, it returns null. That work great. But than the ViewportLimiter stops zooming in. Ok, so I set ZoomMode to ZoomMode.Unlimited which should help. This doesn't work, because ZoomHelper doesn't respect this entry. It returns always the last resolution entry from Map.Resolutions, which in turn returns the resolutions of the layers. So what to do? ZoomMode isn't in interface IViewportLimiter and so I don't know, if Map.Limiter has such a property, because it is of type IViewportLimiter.
But if this is all solved, it is lightnig fast :D
So the question is, how to work with a tile source, that has zoom levels 0 to 14, but could be zoomed in up to 30. If the zoom is e.g. 24, the tile source should return the zoom level 14 tile (and look only for this, because tile sources max zoom level is 14).

@charlenni Sorry, I could not find time for this this week. The skiasharp testing took more time than planned and starting up homeschooling takes more time.

Oh, and I thought, that this change find its way into the next Nuget. So it is very complicated to test the vector tile sample. Should have someone, which could confirm my performance problems.

@pauldendulk Short reminder. And happy easter!

@charlenni Sorry, got lost in the other PRs. Will give this priority next week. Happy easter to you too!

@pauldendulk A short reminder. 2.0.0-rc.3 is out, but this PR isn’t part of it.

You could use my branch “VectorTileTest” and the project “VectorTiles” to test it. There must be the VectorTiles project in the same directory as the Mapsui folder.

If I checkout that branch some projects can not be loaded:

@charlenni What I would like to avoid is to use object in the interface. We now have a byte[], Perhaps a Stream would be better, since the source is usually a stream coming from an http request, database or file system. However, the current byte[] can function as the equivalent, it is basically a Stream in another format. That stream can subsequently be converted to any other type in the TileFetchDispatcher. It can easily be converted to Stream with new MemoryStream(myByteArray). The downside of this is performance, It is converted twice, once inside BruTile, once inside Mapsui. This only happens when fetching the tile, not in the render loop, so the impact is not that big.
My idea was to show how this worked in your branch, but I can into the load error.

@charlenni Ik started thinking about a better solution in the tilelayer-rework branch but radical changes come too mind. Wat about creating a specific VectorTileLayer at this point, which just copies a lot of code from the TileLayer. Merging more of that code should be done in the beta of 3 which could start soon.

A normal bitmap TileSource delivers a ready rendered image as byte[] or stream. My TileSource returns no byte[] or stream, but an object. In this case a Drawable, something that could draw itself in a canvas when this is invalidated. So I couldn't change this to a stream nor a byte[].
So the only way, if you don't want to use objects, you have to create an interface, that has one function, which could create a feature of the returned object.
Mapsui is completely designed to use bitmap data for the map. The TileProvider/TileSource concept is shorten to this. If you use vector data, than you have more parts: a provider for vector data (could be a mbtiles file or a http source), a style file, a styler, which combines vector data and style data and a renderer, which draws this all to canvas.
Regarding the error: you need the Mapsui branch and the complete VectorTile project, which should be in the same folder than Mapsui.
projects/Mapsui
projects/VectorTiles

Did you download the other project too? Had to do this, because of the missing PR here. So I need a special Mapsui version to test my project. Couldn't use the normal Mapsui NuGet package.

@charlenni Ik started thinking about a better solution in the tilelayer-rework branch but radical changes come too mind. Wat about creating a specific VectorTileLayer at this point, which just copies a lot of code from the TileLayer. Merging more of that code should be done in the beta of 3 which could start soon.

Yes, could be made. But the only changes are contained in this PR.
Do you like this approach more? Should I create my own VectorTileLayer and copy the complete code?

I thought about it. A TileDispatcher should fetch tiles, but shouldn't know anything about the type of the tile. It gets tile indexes and a tile source and fetches this tiles. For that, it must not know anything about the structure of this tiles. Tiles could be bitmaps, vector data, drawables or even sounds.
In this case the TileDispatcher converts tile data into bitmap features. This is the problem. And the problem is even earlier: TileSource.GetTile() returns also a byte[]. Both problems are solved by this PR. With this PR TileDispatcher need not to know anything abut the tile data. It gets a function for retriving tiles from TileSource and convert them to a feature.
If you use streams instead of byte[], than you make nothing better. TileDispatcher is not variable.

Regarding the error: you need the Mapsui branch and the complete VectorTile project, which should be in the same folder than Mapsui.
projects/Mapsui
projects/VectorTiles

Perhaps I don't understand but it seems to me that the VectorTiles project is not inside your git folder. The Mapsui project folder has .git folder. Everything you want to add to the git repository should be in that folder or a subfolder, but you VectorTiles project seems to be outside of it. In the solution (which is in the root) you point to a csproj that with "..".
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VectorTiles", "..\VectorTiles\VectorTiles\VectorTiles.csproj", "{4272E906-8F41-41C7-8B10-9F392F3B061A}"

Do you like this approach more? Should I create my own VectorTileLayer and copy the complete code?

No, i dislike it, but close to a release a workaround like this might be the best solution. We should strive for reuse of simple basic components. Our components should be designed for this. You remark about the fetcher not knowing about the type of tile fits into such a design. But the exact way to do this needs some time.

The use of a Drawable changes things. I have to form a picture of how this works.
This is a Xamarin.Forms Drawable?
Converting to platform specific types is an important performance improvement. Something like that should be done. Why a Drawable and not a SkiaSharp object? It only works in Forms right?
Do you use MapInfo, or how does that work? Is it just the click event of Forms? Does the Drawable itself contain the info?

In this case a drawable is a SKDrawable from SkiaSharp. It is a object, that has a Draw function, with which the object could draw itself to a SKCanvas. With this, I could draw the vector tile with right settings for e.g. given zoom factor. So the streets could be drawn with a stroke width which is specially calculated for the given float zoom factor. To be clear: a VectorTile is an object, that draws itself each time a OnPaintSurface event is called.
VectorTiles is an independent project and has nothing to do with Mapsui except, that it uses Mapsui as a library. You told me, that this is the way you prefer for extensions. But I could only test this, if I have the right Mapsui (see this PR). Without this special Mapsui version, VectorTiles wouldn’t work. That’s the reason, why I like to have this PR. Than it would be possible to develop VectorTiles with the normal NuGet package of Mapsui. If not, everyone has to create his/her own Mapsui version, which is difficult.
So to use ist now, you have to download the mentioned VectorTiles project, place it beside Mapsui and use the VectorTilesTest branch. There I added the projects (universal VectorTiles, VectorTiles.MapboxGL and a Forms example) to test. VectorTiles is independent from Forms and could be used for all other platforms of Mapsui. I use normally Forms, because it’s fast and easy to build and test it on Android, iOS and UWP, if you want to see, how fast it is. VectorTiles uses a user defined renderer and works only with the SkiaSharp renderer, because (see above) it draws itself each time to the canvas.

For SKDrawable see the description. I added this to SkiaSharp especially for for this VectorTiles implementation.

The drawable approach sounds good. For v3 of Mapsui I want all the transformations to skia objects to be done in a background thread so the rendering itself can be as fast as skiasharp can be. Perhaps something similar can be used. Mapsui will be 2.0.0 will be out this weekend or soon after, so work in v3 can start soon.
Do you think it would be an option to transform all Mapsui features (so, points, lines, polygons and tiles) into a SKDrawable?
My idea has always been that various developers maintain their own libraries where each can reuse the others. For this to work effectively there have to be clear boundaries between these projects, clear responsibilities. For instance I would love it if there was a solid shapefile reading library that I could use. So yes, i think this is a good idea. Work needs to be done on defining clear interfaces and responsibilities. For the MapView it turned out there was too much entanglement, that's why that did not work out in it's initial form.
About this PR. I do not like the object in the interface. Perhaps there is not better approach, but that is hard for me to judge at this point. If you can help me get to get the run your use case on my machine I could help to find a solution.
You say that without this PR it is not possible to use Mapsui as a library. That is a serious problem I would like to help fix, but right now I do not understand why this is the case. A workaround would be to make a copy of the tilelayer, right? Perhaps simplify that copy to the bare minimum you need for you use case. Is this not correct?

I’m out, but will answer this evening.

The drawable approach sounds good. For v3 of Mapsui I want all the transformations to skia objects to be done in a background thread so the rendering itself can be as fast as skiasharp can be. Perhaps something similar to this can be used. Mapsui 2.0.0 will be out this weekend or soon after, so work in v3 can start soon.

Sounds good.
One point where this can help is by converting polylines and polygons once to a SKPath and reuse this to draw it again and again.

Do you think it would be an option to transform all Mapsui features (so, points, lines, polygons and tiles) into a SKDrawable?

Should be no problem. A SKDrawable is a little bit like a SKPicture (saves all draw commands and replys them when used with SKCanvas.DrawPicture()), but draws itselft instead of predrawn commands. So you could decide what to draw in the moment the canvas is updated. The new custom renderers are like SKDrawable. Thinking about it, I would say, they are the same. So expanding the custom renderer concept would be enough. With this, I would say, that all features and their renderers should be moved to this concept.

My idea has always been that various developers maintain their own libraries where each can reuse the others. For this to work effectively there have to be clear boundaries between these projects, clear responsibilities. For instance I would love it if there was a solid shapefile reading library that I could use. So yes, i think this is a good idea. Work needs to be done on defining clear interfaces and responsibilities. For the MapView it turned out there was too much entanglement, that's why that did not work out in it's initial form.

No, I would say, it worked. But there are many things, that have to be changed for this concept. There was the change to have a common MapControl part for all MapControls. That wasn't a thing for Forms, but for all implementations.
I assume, that there must be more changes to go in this direction. But Mapsui is a very good starting point, because it is very easy to implement new things.

About this PR. I do not like the object in the interface. Perhaps there is not better approach, but that is hard for me to judge at this point. If you can help me get to get the run your use case on my machine I could help to find a solution.

I will try.
If your Mapsui folder is at C:\Projects\Mapsui than download the VectorTiles repository and place it at C:\Projects, so that you have the following two folders
C:\Projects\Mapsui
C:\Projects\VectorTiles

Now open your VS and select your Mapsui project. Change the Branch to VectorTilesTest. Now you should see some additionally projects like VectorTiles, VectorTiles.MapboxGL and some samples like Mapsui.Samples.Forms.Android, Mapsui.Samples.Forms.iOS and Mapsui.Samples.Forms.UWP. Be carefull. They are not in the Mapsui sample folder. Start the Mapsui.Samples.Forms.UWP sample to test it.

You say that without this PR it is not possible to use Mapsui as a library. That is a serious problem I would like to help fix, but right now I do not understand why this is the case. A workaround would be to make a copy of the tilelayer, right? Perhaps simplify that copy to the bare minimum you need for you use case. Is this not correct?

You have not only to copy the TileLayer, but also for the TileFetchDispatcher and its objects.
The TileLayer is so flexible, that you could use it for bitmap and vector tiles with only such a small change. To be correct, the TileLayer is capable of handling both, but the TileFetchDispatcher, which is created by the TileLayer, isn't. With this PR you could fetch anything, that is tile oriented. And because you don't know, what you fetch with TileFetchDispatcher, there should be an object instead of a byte[]. Not all tiles are byte[]. That's all. And this is difficult to do with an interface.

Thanks for you update. I got your sample to work and started work on some changes, but there are too many changes to add them to this release.
Instead I will just accept your PR, so you can continue your work on vectortiles with more ease. However, I will start on a different setup for TileLayer in 3.0.0-alpha.1 soon after the v2 release. So, more changes on your side will be needed there.
See here more work on the new TileLayer:
https://github.com/Mapsui/Mapsui/blob/feature/tilelayer-rework/Mapsui/Layers/TileLayer.cs#L152
The TileFetchDispacher is now free of the byte[] type, similar to what you proposed. The TileLayer only used the byte[] in the conversion to Feature, in the two methods at the bottom. I think will already work for your problem. I am not sure if this will stay like this.

@charlenni So, my plan is the release the current master branch as 2.0.0.

This all sounds good.
Worked the samples for you? Did you tried it? Fast enough up to now? Do you think it is a good way to go?

Yes, they worked. The performance was okay but not spectacular yet. My profiler showed a lot of processing in the fetcher, which makes sense because the conversion is now there.
I disabled fetching on majorChange and did mostly panning but performance of panning was still not very good and the profiler still showed high use of fetcher logic, which I don't really understand.
Performance should be one of the main things to focus on in v3.

When I disable the timer it seems to be significantly faster.
        protected override void OnDraw(SKCanvas canvas)
        {
            canvas.Save();

            //var watch = new System.Diagnostics.Stopwatch();
            //watch.Start();

            foreach (var bucket in Buckets)
            {
                if (bucket != null)
                    bucket.OnDraw(canvas, Context);
            }

            //watch.Stop();
            //System.Diagnostics.Debug.WriteLine($"Draw VectorTile ({TileInfo.Index.Level}/{TileInfo.Index.Col}/{TileInfo.Index.Row}): {watch.ElapsedMilliseconds}");

            canvas.Restore();
        }

This is how I disabled fetching on majorChange
        public override void RefreshData(BoundingBox extent, double resolution, bool majorChange)
        {
            if (!majorChange) return;

            if (Enabled && extent.GetArea() > 0 && _tileFetchDispatcher != null && MaxVisible >= resolution && MinVisible <= resolution)
            {
                _tileFetchDispatcher.SetViewport(extent, resolution);
                _fetchMachine.Start();
            }
        }


fix: undeclared variable c

I was trying to compile the current master on linux and it failed because of an undeclared variable c. I fixed the issue in the loop, without further understanding what the loop actually does. yara now builds again without errors.

@googlebot I signed it!

unneed double assignment


Install with gem

Please restore the possibility to install liftoff using gem.
Rationale

gem is installed with the system in OSX. There is no need to install additional tools to make it work
homebrew needs administrator provileges. This is bad. Some machines (in particular in a corporate environment) don't have it, and thus can't install. (Whereas gem can install in a $GEM_HOME located in $HOME/gems for example, that does not need any admin privileges)
Homebrew makes the installation process more complex for those who want to dig in right away. We need to search for Homebrew on the internet for those who don't know it yet to know how to install it, then go back to liftoff to install it… installing a tool to install a tool is kinda too much meta :smile: and discourage some users.

Requiring admin privileges in the main problem here, but having to install a tool to install another is just as discouraging.

Hi there, I use macports, so installing homebrew will make a mash from my OS X. Is it possible to install it not from brew?

@Pitometsu As noted above, you can always install it manually using the tarballs in the releases tab. I'm not planning on officially supporting any other automated installation methods, though.


AttributeError: 'FrozenDict' object has no attribute 'scaling_factor'

Description
Calling the scaling_factor of vae reports an error, does anyone know the reason?
Steps to Reproduce
111
Expected Behavior
python3 main.py --text "a hamburger" --workspace trial --cuda_ray --dir_text
Environment
Ubuntu 20.04 python3.9

@yudefu Hi, you need to update diffusers and transformer to the latest version, as they update quite frequently.

i stumbled over the same stone, perhaps adding  it to README.md
pip install --upgrade diffusers
pip install --upgrade transformers

Nice idea, I have added them in https://github.com/ashawkey/stable-dreamfusion#trouble-shooting.


Add default target image name parameter for build to Docker daemon

When to.image is not configured, building to Docker daemon will now succeed and give the image the default tag of projectName:projectVersion using properties defined in build.gradle/pom.xml.
When running the original image build task with a missing target image configuration, it throws an error.
Fixes #352

Note - tested this manually; going to write automated tests tomorrow.

:+1:
I guess it's tricky to make this work for registry based jib builds huh?  There'd need to be a way to specify registry and project but without the final image name and tag component.  Sure would be nice though.. :)

Yeah, we talked a bit about it yesterday. Figured it would be a bit too involved to fit into the beta release, so maybe after!

:+1:


Typings are missing a license

Hi,
I'd like to use these typings for a work project, but my employer requires a license for any imported code.
Could you add a LICENSE file with whichever license covers the typings?
I've linked the Apache 2 license because it's often used for typings: http://www.apache.org/licenses/LICENSE-2.0.txt
Thank you,
Kyle

Fixed in #32.


Stop using password for MariaDB localhost users

Fixes #10926
Status
not-tested
Description
This PR removes the use of MYSQL_PASS within WMCore and unittest setup (docker image), such that database access is done via localhost passwordless.
Is it backward compatible (if not, which system it affects?)
NO
Related PRs
A complement for: https://github.com/dmwm/deployment/pull/1117
External dependencies / deployment changes
Required deployment changes: https://github.com/dmwm/deployment/pull/1119

test this please

sigh, I don't manage to get it tested in any simple way. I am going to get this merged, including the deployment PR and try to build a new docker image. @goughes FYI


UI changes to support VM reconfiguration

https://github.com/ManageIQ/manageiq/pull/418
https://bugzilla.redhat.com/show_bug.cgi?id=1065573
@dclarizio  - this is WIP - I want to add a few more rspecs - is also dependent on #418 being merged

@dclarizio, @lfu - please review.
As only the backend VMware changes are in, it will only work for VMware.
Needs #418 merged to work for RHEV.

miq-bot remove-label wip

@lfu can you review and verify this fixes the issue?  Thx, Dan

@dclarizio @lgalis UI changes look good :+1:
I will rebase #418 after this is merged.


P and Q used after key generation

I'm using OpenSSL 1.1.1d
My question is: in theory, when generating a new RSA key, P and Q primes can be discarded after the key is generated.
Does OpenSSL follow this? Specifically, I am having some problems when trying to do the initial TLS handshake, using a valid certificate and a valid private key, but only with n, d and e defined. Of course, the key is generated elsewhere.
Thanks

P and Q are typically not discarded since they're used as part of the CRT optimization. OpenSSL should support RSA keys without CRT parameters (alas RSA dates to an era of cryptography where we were extremely bad at standardizing things so there are many ad hoc variations on RSA private keys), but the standard RSAPrivateKey serialization requires all the CRT parameters, so it's possible whatever you're doing involves serializing them and your key is getting messed up in the process.
https://tools.ietf.org/html/rfc8017#appendix-A.1.2

OpenSSL can handle keys without p and q present - although performance will be impacted. I do recall a problem not that long ago where someone had a key where p/q were present but set to 0 - which was causing some problems!

OpenSSL can handle keys without p and q present - although performance will be impacted. I do recall a problem not that long ago where someone had a key where p/q were present but set to 0 - which was causing some problems!

That was my problem!

That was my problem!

Great! So can we close this issue?

Great! So can we close this issue?
Yes! Thanks


Need ARM templates documented as well

Currently all areas around working with Azure Migrate centers around UI based setup. There is no documentation to create project via ARM templates.

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

ID: 8c08a6ab-bff4-aacd-a39f-ad86485ab535
Version Independent ID: 2af1f15e-ce33-c843-8f02-32bf0c8e261c
Content: Create and manage Azure Migrate projects - Azure Migrate
Content Source: articles/migrate/create-manage-projects.md
Service: azure-migrate
GitHub Login: @rayne-wiselman
Microsoft Alias: raynew

@artisticcheese Thanks a lot for sharing your feedback , assigning this issue to our document author @rayne-wiselman to further evaluate the feedback and see if we need to have a backlog item to create the documentation.

Thanks for your feedback!  I've opened an internal backlog item to do this over the next few weeks. Since we're tracking internally I'll close this issue.
#please-close


Enable Login v1

This will add the login command to spoon.
For now, I think that the command should prompt the user to create and provide their own Personal Access Token, mainly because configuring an OAuth flow for a CLI seems like it's going to require us to use express to spawn a route on localhost that GitHub can pass OAuth Tokens to.. and that feels like too much for v1 of this login command.
TODO

[x] Ensure that the login command instructs the user to provide a personal access token with specific scopes.
[x] Ensure that we're doing an initial check for the validity of the token, and reprompting if the token is invalid (e.g. not a token at all, doesn't contain the appropriate scopes)
[x] Save the token to a known configuration file for use by all other commands
[x] Allow users to preemptively provide a token using a flag
[ ] Write tests

closes: #18

This is working as an MVP, sans tests.