Refactor await and yield implementation and enable async iteration

Overview
The goals of this change are to:

Enable async generators
Streamline and simplify the relationship between generators, async functions, and async generators.
Make async functions and generators more JIT-friendly by reducing the number and complexity of supporting helpers.
Improve code readability and maintainability.

The primary architectural change is to perform yield resume logic and branching directly in bytecode, rather than relying on the ResumeYield helper, and to desugar all async functions and async generators to normal generators. This allows us to eliminate the special-case GeneratorReturnException exception type.
In order to perform yield resume logic in bytecode, we resume the generator by creating a dynamic object with "value" (an arbitrary var) and "kind" (tagged int) fields. Branch instructions are inserted to deal with the various "kind" cases: "normal", "return", and "throw".
To desugar async functions and async generators to normal generators, we introduce a new type ID to represent "await results". Async generators then test for this type ID when determining whether their internal coroutine is "awaiting" or "yielding".
Changes
Architectural

Remove ResumeYieldData. Instead, resume the generator with a "resume yield object" containing "value" and "kind" properties.
Remove GeneratorReturnException. The bytecode is now responsible for returning based on the resume yield kind.
Remove opcodes ResumeYield, Await, AsyncYield, AsyncYieldStar, AsyncYieldIsReturn.
Add new opcode and helper for NewAwaitObject. This object type is yielded when awaiting and is uniquely distinguished by type ID from "normal" yield results.
Remove ResumeYield and ResumeYieldStar opcodes and helpers. When generators are resumed, the resume yield object is loaded into the yield register and the resume logic is performed in bytecode.
Make async generators a subclass of JavascriptGenerator.
Enable flag ES2018AsyncIteration by default.

JIT

Remove unused GeneratorResumeYieldLabel.
Rename GeneratorLoadResumeYieldData to GeneratorResumeYield.
Remove support for ResumeYield. GeneratorResumeYield is inserted immediately after the bail-in instr and takes care of loading the resume yield object.

ByteCode

Rename EmitDummyYield to EmitStartupYield.
Remove unnecessary wrapping of async function body in try/catch. Exception handling is performed by library code that wraps the coroutine.
Move startup yield after function declaration hoisting to unify module and generator code paths.
Implement iterator next method caching to match spec.
Replace tryScopeRecordsList and loop "parent node linking" with a single mechanism for performing cleanup in both the branch-in-loop cases and yield cases.
Implement yield star evaluation logic in bytecode.
Implement yield resume branching in bytecode.
Await return operand in async generators to match spec.
Add new error message for when yield * inner iterator does not have a "throw" method.

Parser

Remove ParseNodeLoop. The only purpose of this node type was to store an outer statement reference used when emitting jump cleanup. This information is now maintained in the bytecode generator's jumpCleanupList.

Library

Move JavascriptAsyncGeneratorFunction into a new file.
Add type ID for async generators.
Remove unnecessary JavascriptPromiseAsyncSpawnExecutorFunction.
Use more readable names for CreateIteratorResultObject functions.
Use more readable names for async function support classes.
Move JavascriptAsyncFunction into a new file (previously code was split between JavascriptPromise and JavascriptGeneratorFunction).
Move JavascriptAsyncGeneratorFunction into a new file.
Create locked library types for await objects and resume yield objects.
Move "copy arguments to heap" logic into JavascriptGenerator::New.

Performance
This change results in a small performance increase on the ARES-6 benchmark.

Scenario
Average Time
Change over baseline

ARES-6/Basic (No JIT)
3671ms
3.96% faster

ARES-6/Basic (JIT)
2502ms
2.56% faster

It's nice to see the horrible OP_ResumeYield logic replaced.
A little sad to see that much of my implementation of AsyncGenerators is removed/re-written here BUT I can see that this way of doing it is a lot neater.
A couple of things stand out to me by way of future improvements:

The startup yield is only needed when the generator has complex parameters - there was code to put a relevant condition around it in the PR to enable jitting generators - obviously that PR as it stands is dead with this change but that enhancement seems worth bringing across to me.
In my asyncGenerator implementation I cached the continuation methods for the async generator rather than creating them every time obviously doing that has some memory cost but I figure it should be worth it for performance and the same could/should be done for async functions.
Similarly the await object should only need to be created once and could be cached in an internal slot
The caching of the iterator Next property is missing in some other places not just generators

Hi @rhuanjl - I was a bit nervous about posting this PR given there were so many changes to what you had done, which was awesome work given the existing generators implementation. But particularly with JITing coming I want to take this opportunity to clean up the existing oddness. Apologies!

In my asyncGenerator implementation I cached the continuation methods for the async generator rather than creating them every time obviously doing that has some memory cost but I figure it should be worth it for performance and the same could/should be done for async functions.

Oh right, I had forgotten about that, and it was a good idea. Hopefully this change will make it a bit easier to apply the same optimization to async functions (since there are fewer continuation functions to worry about).

Similarly the await object should only need to be created once and could be cached in an internal slot

Yes! I was trying to figure out whether it would be better to store it in a C++ field or create a register for it in bytecode, but I didn't try to implement it either way yet.

The caching of the iterator Next property is missing in some other places not just generators

Right. My idea was to go ahead and take care of the bytecode part here, and then use your existing PR for the remaining changes to the library code. I think I got all of the bytecode here?

Those changes look great! We can bring them in after this one gets landed.
For the TTD stuff, I don't really know it either but I think @boingoing could help when we get there. I'm also trying to consider what we want to do with TTD longer-term.

Awesome!! 😊😊

Remove unnecessary wrapping of async function body in try/catch. Exception handling is performed by library code that wraps the coroutine.

Ooh! Will that fix #4630, I wonder...? 🤞

Remove unnecessary wrapping of async function body in try/catch. Exception handling is performed by library code that wraps the coroutine.

Ooh! Will that fix #4630, I wonder...? 🤞

It doesn't - BUT it lays the groundwork for an easy fix of #4630 that I have ready to submit after this lands (if someone doesn't beat me to it).

Note that the *_ReuseLoc variants should not be used the first time a code sequence writes to a register, only the 2nd and subsequent times. So:
R3 = LdFld R4.x
R3 = LdFld_ReuseLoc R5.x
Not:
R3 = LdFld_ReuseLoc R4.x
R3 = LdFld_ReuseLoc R5.x
The reason is that _ReuseLoc tells the JIT not to start a new lifetime. So in the above example, each _ReuseLoc op extends an existing lifetime of R3.

Thanks, @pleath I was wondering about that. I'll update with a fix.

@zenparsing do you think you'll be able to update this so we can land it? Or should I pull it down, update for the comments above and open a new PR?

@rhuanjl This PR was already updated per @pleath's comments above. I'll try to rebase, regenerate bytecode, and give it another review within a couple of days.

@zenparsing Please could you rebase this and regen the bytecode? I'll give it another review - I think I'm familiar enough now with most of this logic.
(I've got some follow up PRs I want to open)

Merged as https://github.com/microsoft/ChakraCore/commit/c848d4d8d50c0dfb4a23540a9ee6cd023fa029c1


Apis and Microservices Projects - Exercise Tracker: User Stories missing

Describe your problem and - if possible - how to reproduce it
There are no User Stories provided for this project neither in the glitch example nor in the github repo.
However, I found the User Stories in one of the forum posts.
Other API projects have user stories in both glitch example as well as in the github repo.
Example URL Shortener project -

glitch example
github repo

Add a Link to the page with the problem
https://learn.freecodecamp.org/apis-and-microservices/apis-and-microservices-projects/exercise-tracker/

I can look into doing a pull request at https://github.com/freeCodeCamp/boilerplate-project-urlshortener/ to add the User Stories to the ReadMe

I submitted the below PR to add the user stories to the readme file in the github repo https://github.com/freeCodeCamp/boilerplate-project-exercisetracker/pull/6

@ezioda004 Is this still an issue?

It looks like the user stories were added to the github boilerplate, but have not been imported to the glitch project.

I don't think the user stories need to be in the example project. They have been added to the boilerplate repo and the boilerplate glitch project.


Running editSettings() resets the discoverability settings

When I run the following function to update the description of my subreddit, I notice that my discoverability options re-add me to /r/all.
public async updateSidebarContent(updatedContent: string): Promise<void> {
    return this.r(this.subreddit).getSettings().then(settings => {
      this.r(this.subreddit).editSettings({
        ...settings,
        description: updatedContent
      })
    })
}

After checking the output of getSettings(...) I noticed that the only thing other than the description is a property called default_set, which seems to be tied to this discoverability option.
I considered adding this as a PR, but after checking the Reddit API docs this property doesn't seem to be listed, although it IS listed as a property in a comment on getSettings() in Subreddit.js, so I thought I'd double-check here first if anyone knew about this property, if this property is actually the culprit, or whether there is a reason it's not included in the SubredditSettings type before sending a PR your way.

This is probably related to #134. There is a PR for it but it's unfinished #154

Ah yeah, that looks like it should resolve the issue, especially adding the catch-all.
Since this PR looks dead, would you be okay with me forking from master and replicating these changes in a new PR?

Go for it

Thanks for approving/merging. Out of interest, will you be creating a new release in the near future?

Since we've only done bugfixes and no features, I'll release a patch version this weekend

Sadly, I've unearthed a handful of other settings that are also being reverted to default, namely free-form reports, allowing multiple images to be selected, and the recommendation settings. I'll create a separate PR to add these to the relevant interface(s).

Yes, this can be avoided by fixing #134. Your fix only added the ability to add settings that were not part of what snoowrap expects. Interfaces are great, but to prevent resetting settings issue #134 needs to be solved

Is there a particular approach you're happy to lean towards? My JavaScript and TypeScript knowledge isn't great, but from what I can tell an indexer should allow users to add additional properties to the SubredditSettings interface. Something along the lines of this:
export interface SubredditSettings {
  ...
  spoilers_enabled?: boolean;
  default_set?: boolean;
  [key: string]: any;
}

Types should be strongly typed, adding any sort of catch-all will not work correctly as then using a setting name of foobar will not throw errors. Your PR added another option and also made it possible to send in any key you want, which is correct in implementation details since the user can then provide something we aren't covering in the interface, but still be strongly typed in TypeScript.
What should be done here is simply expanding on the SubredditSettings interface to cover the settings that are missing

That makes sense. I was a bit worried about adding some in, as they don't seen to be referenced in the official Reddit API documentation, but I'll probably work on getting a more complete interface pushed up at some time this weekend.


Allow violations to be set on a package

There are a situations where it is desirable to explicitly set the list package violations rather than have it be generated from the todo files stored on disk. This PR adds an optional parameter to do just this.
Today, specifically, https://github.com/shageman/visualize_packs uses this to give users the option of hiding nested packages. In this case it adds all nested violations to the parent-level pack. I believe there are more use-cases in the realm of analyzing the potential impact of violation changes to the overall graph structure.

I'm wondering if we should allow this use case to show up in one or two other places before we create a change to this API.
Another alternative might simply be if we store the PackageTodo as a struct property of the Package. Then you can just construct a new set to do the analysis you need, e.g.
package.with(package_todo: my_todo)

@alexevanczuk I believe to have addressed your idea in the refactor of this change. Instead of passing in the odd stored_violations it is now simply violations.


Allow IPV6 ranges for Metallb addon

This PR allows to use IPv6 ranges or CIDR when enabling metallb addons.
Closes #245
Also verify you have:

[x] Read the contributions page.
[x] Submitted the CLA form, if you are a first time contributor.

The CLA is requiring informations I do not have... so I cannot sign it.

@telometto since microk8s 1.28 you can start in dual mode: https://microk8s.io/docs/how-to-dual-stack
With previous versions or if you want do it by yourself there is a HOW-TO in the community forums: https://discuss.kubernetes.io/t/microk8s-ipv6-dualstack-how-to/14507
For metallb addons, you can deploy it with an ipv4 range and after that either

add a new IPAddressPool with an ipv6 range or
edit the default-addresspool and replace the ipv4 range with an ipv6 one (or just add it)

If you want to access your pods using ipv6 from somewhere outside the  cluster,  you will need an ipv6 loadbalancer  service: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#service-type-loadbalancer.

@stalb Yeah, I followed the how-to guide, but I guess there's something not working properly on my end because:

I can reach the deployments via IPv4 but not IPv6 using a browser.
I can fetch data using curl from both the IPv4 and IPv6 addresses from the server, but not from a different machine.
None of the pods/deployments can reach the internet.

Since MetalLB on Microk8s does not accept IPv6 ranges during configuration - which is why I came here to open an issue - I've had to manually edit the configuration using kubectl edit ipaddresspool -n metallb-system.
Here are some configuration details:
Output of kubectl get ipaddresspool -n metallb-system -o yaml
apiVersion: v1
items:
- apiVersion: metallb.io/v1beta1
  kind: IPAddressPool
  metadata:
    annotations:
      kubectl.kubernetes.io/last-applied-configuration: |
        {"apiVersion":"metallb.io/v1beta1","kind":"IPAddressPool","metadata":{"annotations":{},"name":"default-addresspool","namespace":"metallb-system"},"spec":{"addresses":["<IP_ADDRESS>-<IP_ADDRESS>","::ffff:<IP_ADDRESS>-::ffff:<IP_ADDRESS>"]}}
    creationTimestamp: "2024-06-27T11:22:31Z"
    generation: 2
    name: default-addresspool
    namespace: metallb-system
    resourceVersion: "31789"
    uid: ### REDACTED ###
  spec:
    addresses:
    - <IP_ADDRESS>-<IP_ADDRESS>
    - ::ffff:<IP_ADDRESS>-::ffff:<IP_ADDRESS>
    autoAssign: true
kind: List
metadata:
  resourceVersion: ""

/var/snap/microk8s/common/.microk8s.yaml
---
version: 0.1.0
extraCNIEnv:
  IPv4_SUPPORT: true
  IPv4_CLUSTER_CIDR: <IP_ADDRESS>/16
  IPv4_SERVICE_CIDR: <IP_ADDRESS>/24
  IPv6_SUPPORT: true
  IPv6_CLUSTER_CIDR: fd02::/64
  IPv6_SERVICE_CIDR: fd99::/108
extraSANs:
  - <IP_ADDRESS>

/etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by
# the datasource.  Changes to it will not persist acress an instance.
# To disable cloud-init's network configuration capabilities, write a file:
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
  renderer: networkd
  version: 2
  ethernets:
    enp3s0:
      critical: true
      dhcp4: true
      dhcp6: true

  vlans:
    enp3s0.7:
      id: 7
      link: enp3s0
      addresses:
        - "<IP_ADDRESS>/24"
        - "::ffff:<IP_ADDRESS>/64" # test

Testing Firefox service
---
apiVersion: "v1"
kind: "Service"
metadata:
  name: "ff-service"
  namespace: "webbrowsing"
  annotations:
    metallb.universe.tf/loadBalancerIPs: <IP_ADDRESS>,::ffff:<IP_ADDRESS>
spec:
  selector:
    app: "webbrowsing"
  ipFamilyPolicy: "PreferDualStack"
  ipFamilies:
    - "IPv4"
    - "IPv6"
  ports:
    - name: "ff-https-webui"
      port: 443
      targetPort: 3001
      protocol: "TCP"
  type: "LoadBalancer"

I am not using a cloud provider;  I'm running it on bare-metal (at home) so I guess I am out of luck 🤷 I just went back to regular IPv4, which works fine.

@telometto@telometto
It may be a problem with IPv6 forwarding

sudo ip6tables -S should display -P FORWARD ACCEPT (if not, enable it with sudo ip6tables -P FORWARD ACCEPT)
sudo  sudo sysctl  net.ipv6.conf.all.forwarding should show net.ipv6.conf.all.forwarding = 1 (if not, enable it with sudo sysctl -w net.ipv6.conf.all.forwarding=1)
if you have a firewall you could have to add rules to allow traffic from host to microk8s (and vice-versa)

I'm also not sure that using IPv4-Mapped addresses (::ffff:a.b.c.d) is a good idea, since they should be used to route traffic from ipv6 clients to ipv4 servers.
If your ISP supports ipv6, normally it should give you a class 64 (or event a 60 or 56), so you can borrow a subrange for metallb.
Otherwise since you are using privates ipv4 addresses, you can also use privates  ipv6 addresses (for example fda0::/64) for metallb.
Can be a problem with IP forwarding

sudo ip6tables -S should display -P FORWARD ACCEPT (if not enable it with sudo ip6tables -P FORWARD ACCEPT)
sudo  sudo sysctl  net.ipv6.conf.all.forwarding should show net.ipv6.conf.all.forwarding = 1 (if not enable it with sudo sysctl -w net.ipv6.conf.all.forwarding=1)
if you have a firewall you could have to add rules to allow traffic from host to microk8s (and vice-versa)

I'm not sure either that  using IPv4-Mapped addresses (::ffff:a.b.c.d) is a good idea, since they should be used to route from ipv6 clients to ipv4 servers.
If your provider supports ipv6, normally it should give you a class 64 (or event a 60 or 56), so you can borrow a subrange for metallb.
Otherwise since you are using privates ipv4 addresses, why not use also privates  ipv6 addresses (for example fda0::/64 or something like that) for metallb.

Hey @stalb
Thank you for creating this PR.
I see the tests failing with Enabling MetalLB\nYour input value (fd00) is not a valid IP Range\n which seems to be related to arguments being passed the old(multi-addon) style with <addon>:<arg1>:<arg2>:.... In this situation the IPv6 ranges are broken since : is also used for splitting args. For this we would need to adjust the enable script of the addon to accept unix style --arg arguments and update the tests the same way.
And related to the CLA form, what fields/information are you referring to? Maybe I can clarify/help there.

The cla requires a Canonical Project Manager or contact I cannot fill.
see canonical/ubuntu.com#12814

The cla requires a Canonical Project Manager or contact I cannot fill. see canonical/ubuntu.com#12814

Thanks for the update @stalb, you can use "Konstantinos Tsakalozos" for the manager field.

@berkayoz thanks for the help.
I've submitted the CLA, but I still don't see what's wrong for the linter in tests/test-addons.py: I just changed some strings.

I do not understand what's wring with the CLA verification:

Checking the following users on GitHub:
Check in the signed list service

stalb ✕ (has not signed the CLA)

Checking the following user on Launchpad:

<EMAIL_ADDRESS>✕ (has no Launchpad account)

Since I do have a launchpad account with this email<EMAIL_ADDRESS>and I also signed the CLA.

Sometimes it takes a bit to update the list, seems like it is fine now.
I'll fix the linting issues and get to merging, many thanks!


Unknown behavior when insert value has single quote

I am trying to generate an SQL insert statement where the string value to be inserted have single quote.
from pypika import  Table, MySQLQuery

columns = ['country','city']
values  = ['KE',"test 'city"]

testtable = Table('testtable')

q = MySQLQuery.into(testtable)\
    .columns(columns) \
    .insert(values)

print(str(q))

The generated SQL statement is :
INSERT INTO testtable (country,city) VALUES ('KE','test ''city')
As you can see the "test 'city" value becomes 'test ''city' in the final query. AFAIK this is not the way to escape quotes in mysql. Something like this will work for me:
INSERT INTO testtable (country,city) VALUES ('KE','test \'city')
Any idea how the single quote becomes double quotes? Can pypika help me  escape the single quote using a backslash?

The issue is in the ValueWrapper class. It only supports doubling the quote character. I haven't found a nice workaround.
https://github.com/kayak/pypika/blob/30574f997c80851f7e940ad09a63e14a98871dd3/pypika/terms.py#L378


Ability to Sort Desktops

I would like to be able to sort and reorder virtual desktops

This is a great and exciting tool so far and I am very excited to see it grow and evolve.
Thanks, Team!

Reorder is now in Build 21337 of Windows Insider

https://blogs.windows.com/windows-insider/2021/03/17/announcing-windows-10-insider-preview-build-21337/


Update dependencies: Ecto and Phoenix

Currently, addict depends on:
{:phoenix, ">= 0.8.0"}
{:ecto, ">= 0.6.0"}

While current version of those packages are:
{:phoenix, ">= 0.10.0"}
{:ecto, ">= 0.9.0"}

I suggest to update the dependencies.

@c-rack It's always nice to have dependencies up to date, but I'd postpone this until we really need those dependencies bumped; the reason for this is that there may be people using Addict with an older version of Phoenix/Ecto and this kind of requirement might be really cumbersome for them :smile:

:+1: I'd like to use this library but it looks like I can't right now :).

@bkochendorfer sorry about that, what Phoenix and ecto versions are you running?

  defp deps do
    [{:phoenix, "~> 0.10.0"},
     {:phoenix_ecto, "~> 0.1"},
....

FYI, I was able to get this to work by vendoring the library locally and updating the dependencies. The only major difference from the example_app in this repo is adding the csrf_token to each post request. You can get this pretty easily in your template using <%= get_csrf_token %>.

Could the dependency be specified with > 0.8.0, thus allowing everybody to use it? I know it will fail due to csrf but that should be fixable.

Why do the dependencies need to be strict? If everything is following semver, surely the only issue is making sure major doesn't increment?

Yup, you're right guys. I'll update the semver accordingly. Thanks all for raising the issue!

Really minor, but could you push to Hex with the relaxed deps? Currently pulling direct from here, so not really an issue, but would be nice for it to just define deps as normal

Should be fixed on hex.pm v0.0.5 :smile:


Error running gradle local installation

I set up Gradle home and disabled gradle.wrapper in vscode settings like below:
"java.import.gradle.home": "C:\ktapp\gradle",
"java.import.gradle.user.home": "C:\ktapp\repo\gradle",
"java.import.gradle.wrapper.enabled": false,
"java.import.gradle.java.home": "C:\ktapp\jdk",
The Gradle Springboot project could be loaded successffly, and most of the gradle functions work well except for below two:
1, error message prompt while clicking "GRADLE DAEMONS" the Gradle plugin from the left bar.
++++++++Error Message++++++++
Error running gradle local installation: Command failed: "C:\ktapp\gradle" "--status" "quiet" '"C:\ktapp\gradle"' is not recognized as an internal or external command, operable program or batch file.
+++++++++++++++++++++++++
If I clear gradle.home and enable gradle.wrapper, then the Gradle program could be downloaded to gradle.user.home and the Gradle daemons would be shown.
2, The Java class could not be compiled automatically, I'm not sure whether it is a bug, I have to run compile or build task every time. It is a little inconvenient.

transferred it from vscode-maven repo since the issue is related to the features of vscode-gradle extension.

Root cause is here: https://github.com/microsoft/vscode-gradle/blob/9ac3ffecdda84a52e6ae1c2bffed7be2f7ef47df/extension/src/views/gradleDaemons/services/GradleLocalInstallation.ts#L19
Should find the gradle executable from the gradle home folder instead of directly using it.

Root cause is here:
https://github.com/microsoft/vscode-gradle/blob/9ac3ffecdda84a52e6ae1c2bffed7be2f7ef47df/extension/src/views/gradleDaemons/services/GradleLocalInstallation.ts#L19
Should find the gradle executable from the gradle home folder instead of directly using it.

yes, thank you!

BTW, I was recently busy with other work. It would be great if community contribution can be made for this issue.


Create broadlink

Description:
Support broadlink RM device
The broadlink platform can create covers that combine components and provides the ability to run scripts or invoke services for each of the open, close, stop, and position commands of a cover.
Set the travel time to achieve precise control
Example entry for configuration.yaml (if applicable):
cover:
  - platform: broadlink
    host: <IP_ADDRESS>
    mac: 'B4:43:0D:D5:25:CD'
    covers:
        bedroom_cover:
          travel_time: 9
          position_sensor: binary_sensor.door_window_sensor
          name: "bedroom_cover"
          command_open: 'sgY0AAwfIQoMHwwfCyAMHyAKIAoMHyAKDB8MHwwfDB8gCyAKDB8MHwsfCx8MHwwfIAohCgwAAUMAAAAA'
          command_close: 'sno0ACALIAsLIB8LCyALIAsgCyAgCyALHwsgCwsgCyALIAsgCyALIAsAAUQLICALCyALIAsgCyAAAAAA'
          command_stop: 'src0AB8LIAsLIAshCiELIAoAAUUKIR8LCyELIAsgCyAgDB8MCyAfDAohCyAKIAsgHwwfCwsgCyEAAAAA'

        living_cover:
          name: "living_cover"
          command_open: 'sgY0AAwfIQoMHwwfCyAMHyAKIAoMHyAKDB8MHwwfDB8gCyAKDB8MHwsfCx8MHwwfIAohCgwAAUMAAAAA'
          command_close: 'sno0ACALIAsLIB8LCyALIAsgCyAgCyALHwsgCwsgCyALIAsgCyALIAsAAUQLICALCyALIAsgCyAAAAAA'
          command_stop: 'src0AB8LIAsLIAshCiELIAoAAUUKIR8LCyELIAsgCyAgDB8MCyAfDAohCyAKIAsgHwwfCwsgCyEAAAAA'

        garage_door:
          name: "garage_door"
           position_sensor: binary_sensor.door_window_sensor
          command_open: 'sgY0AAwfIQoMHwwfCyAMHyAKIAoMHyAKDB8MHwwfDB8gCyAKDB8MHwsfCx8MHwwfIAohCgwAAUMAAAAA'
          command_close: 'sno0ACALIAsLIB8LCyALIAsgCyAgCyALHwsgCwsgCyALIAsgCyALIAsAAUQLICALCyALIAsgCyAAAAAA'

Why not use https://home-assistant.io/components/cover.template/ ?

@Danielhiversen
Easy setting
Do not need to pass broadlink swich
Support travel time
Direct support HK windows covers
template configuration trouble
Especially when there are multiple curtains

If you do not use the plug-in
Still have to set up a script to run better

I very much think we should not have protocol-level codes as part of the configuration…

I think this will be very helpful for the RF controlled curtains and the garage
At least at my side, many people use it

I still think it is better to use the template cover

@Danielhiversen
Because most RF curtains do not have state feedback
Replace the state with the timeline
Using templates can get tricky
For curtains with state sensing and feedback, I also highly recommend templates

There is another reason
HK does not support curtain types with a pause button if there is no timeline(position status)...
This is helpful for ease of use and experience


OBJ_new_nid: lock may not be initialized before used by this function

On platforms, where TSAN_REQUIRES_LOCKING defined (e.g. MSC with stdatomics), in OBJ_new_nid, ossl_obj_nid_lock may not be initialized before CRYPTO_THREAD_write_lock on it. The lock init here, but it called only from OBJ_obj2nid or OBJ_create.
In this usage pattern, ossl_obj_nid_lock remains uninitialized when first used.

https://github.com/openssl/openssl/pull/22350
Please test with that PR, should fix the issue

This applies to master and 3.1 only as in 3.0 the OBJ_new_nid (and any other OBJ_ calls) aren't supposed to be thread safe.

@t8m ACK the problem won't appear there as OBJ_new_nid attempts no locking operations


Refactor: Change loud to normal notifications, see #155

Remove multiple exclamation marks.
Exchange multiple periods with a horizontal ellipsis.
Exchange macOS with the correct OS X name of the OS.

thanks for PR. could you please remove macOS changes to OS X, as it is now called macOS

@rimusz I did not know that. Thanks for the heads up! Will change.

@rimusz Renamed, rebased and squashed into a single commit. Looks good to you?

cool thanks, will review and merge later one, doing house duties right now :)

thanks, all good, I have merged it :)


Compile Error: No Such Package

I have been trying to install this for my AMD GPU but when I try to compile I am getting an error and I'm not sure why.
ERROR: Analysis of target '//tensorflow/tools/pip_package:build_pip_package' failed; build aborted: no such package '@grpc//third_party/nanopb': BUILD file not found on package path

Hello, this is indeed curious. Can you confirm to me which version of Bazel are you using? Also have you made any local changes to this repository?
This BUILD file is supposed to be downloaded as part of grpc and can be found in bazel-tensorflow/external/grpc/third_party/nanopb/BUILD. Can you find that BUILD file manually? Did Bazel report any other error before the one you posted?
All I can think of is to completely remove the cache and try again. The cache folder is: realpath $(realpath bazel-tensorflow)/../... Let me know how you are getting on with that issue.

The Bazel version I am using is 0.16.0. I did apply a change to the repository for gettid() conflict from your comment https://github.com/codeplaysoftware/tensorflow/issues/27#issuecomment-582386964 . Also, there does not seem to be an external folder.

Ah alright I understand a bit more the issue then and I was able to reproduce it. Unfortunately I do not see an easy way of fixing this. The proper solution would be pull the changes from upstream and bump our TF version to at least 1.11 I believe. This is not planned at the moment.
Let me remind you that these changes are only needed if you want to use Python 3.7 or more recent. For now I would suggest using Python 3.6 or older.


Review Design Wireframe: Terms & Conditions page

[ ] Visual Hierarchy
[ ] Layout
[ ] Consistency
[ ] Screen size
[ ] Usability Principles
[ ] Web Content Accessibility Guidelines (WCAG)
[ ] Colors
[ ] Fonts
[ ] Whitespace and padding
[x] Image quality
[x] Iconography
[ ] Micro interactions
[ ] Error states and feedback
[ ] Browser compatibility
[ ] Performance Optimization
[ ] Design documentation

See Design wireframe/prototype checklist for more info

Desktop

Header: The arrow in "About Us" and "More" have different space between, would be better if they have the same distance.
Subscribe to newsletter: You could enhance it by adding something that distinguishes this section from the rest of the page. This makes it easier to differentiate what the terms are and what the newsletter is.
Footer: The middle section is not centered properly.

Mobile

Font size: The font size is not scalable, and both have 32px. On desktop, this looks fine, but on mobile, it looks too large.
Covering law: is the only element with the text not centered, that makes a bit weird the consistency of the page.
Newsletter: same as before, add some element to distinguish from the terms.
Footer: The logo and "Follow Us" has very little padding on the top

PD: nice work :)

Arrows is connected to "more" not "about us" its to indicate a drope down if more content is added.
*Since footer and nav is mention i several issues, but with different comments - it needs to be one issue with one precise description. Same with the newsletter. *


location bounds

Hello all!
Thanks for amazing LocationPicker, this library helped me a lot!
I am curious if there's possibility to set latitude / longitude bounds (like Android's LatLngBounds)
for ViewController (northeast and southwest coordinates I guess)

You can set a preferred distance, if that's what you mean:
// optional region distance to be used for creation region when user selects place from search results
locationPicker.resultRegionDistance = 500 // default: 600


Expose parsed config through a web URL (/config)

curious if the goal is to result in something like a green/red timeline, similar to other .. probing .. software? :)

@stevemcghee Sorry for the late response, I was on vacation. Getting red/green timelines will be really nice but I wasn't exactly aiming for that. Cloudprober doesn't have transactional model for UDP probe for example -- we just send some packets and collect responses asynchronously. Ping probe will probably also move to the same model. It will be easier to show timeline with history for HTTP probe.
I was thinking of starting with some basic information first in the UI. We can show the trend for all probe types and history only for HTTP probes.


Development Server failure

Describe the bug
When I created a new React or Preact project with Vitejs, the development server was not working.
Reproduction
pnpm create vite  // React or Preact
System Info
System:
    OS: Linux 5.17 Arch Linux
    CPU: (8) x64 12th Gen Intel(R) Core(TM) i3-12100F
    Memory: 10.13 GB / 15.44 GB
    Container: Yes
    Shell: 5.8.1 - /bin/zsh
  Binaries:
    Node: 16.14.2 - ~/.nvm/versions/node/v16.14.2/bin/node
    Yarn: 1.22.18 - ~/.nvm/versions/node/v16.14.2/bin/yarn
    npm: 8.5.0 - ~/.nvm/versions/node/v16.14.2/bin/npm
  npmPackages:
    @vitejs/plugin-vue: ^2.3.0 => 2.3.1
    vite: ^2.9.0 => 2.9.1

Used Package Manager
pnpm
Logs
[139/1062]
  This is a bug in the "vite:dep-pre-bundle" plugin. Plugins provide metadata for a
  given path in an "onResolve" callback. All metadata provided for the same path must be
  consistent to ensure deterministic builds. Due to parallelism, one set of provided
  metadata will be randomly chosen for a given path, so providing inconsistent metadata
  for the same path can cause non-determinism.

9:25:38 AM [vite] error while updating dependencies:
Error: Build failed with 2 errors:
node_modules/react-dom/cjs/react-dom.development.js:16:20: ERROR: [plugin: vite:dep-pre-
bundle] Detected inconsistent metadata for the path "node_modules/react/index.js" when i
t was imported here:
node_modules/react/cjs/react-jsx-dev-runtime.development.js:16:20: ERROR: [plugin: vite:
dep-pre-bundle] Detected inconsistent metadata for the path "node_modules/react/index.js
" when it was imported here:
    at failureErrorWithLog (/home/mohammadraufzahed/Workspace/Personal/NFT-preview-card-
component/node_modules/esbuild/lib/main.js:1603:15)
    at /home/mohammadraufzahed/Workspace/Personal/NFT-preview-card-component/node_module
s/esbuild/lib/main.js:1249:28
    at runOnEndCallbacks (/home/mohammadraufzahed/Workspace/Personal/NFT-preview-card-co
mponent/node_modules/esbuild/lib/main.js:1034:63)
    at buildResponseToResult (/home/mohammadraufzahed/Workspace/Personal/NFT-preview-car
d-component/node_modules/esbuild/lib/main.js:1247:7)
    at /home/mohammadraufzahed/Workspace/Personal/NFT-preview-card-component/node_module
s/esbuild/lib/main.js:1356:14
    at /home/mohammadraufzahed/Workspace/Personal/NFT-preview-card-component/node_module
s/esbuild/lib/main.js:666:9
    at handleIncomingPacket (/home/mohammadraufzahed/Workspace/Personal/NFT-preview-card
-component/node_modules/esbuild/lib/main.js:763:9)
    at Socket.readFromStdout (/home/mohammadraufzahed/Workspace/Personal/NFT-preview-car
d-component/node_modules/esbuild/lib/main.js:632:7)
    at Socket.emit (node:events:526:28)
    at addChunk (node:internal/streams/readable:315:12)

Validations

[X] Follow our Code of Conduct
[X] Read the Contributing Guidelines.
[X] Read the docs.
[X] Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
[X] Make sure this is a Vite issue and not a framework-specific issue. For example, if it's a Vue SFC related bug, it should likely be reported to https://github.com/vuejs/core instead.
[X] Check that this is a concrete bug. For Q&A open a GitHub Discussion or join our Discord Chat Server.
[X] The provided reproduction is a minimal reproducible example of the bug.

Duplicate of #7683


allow organization admins to create org secrets

currently only administrators can manage organization secrets.  This should be extended to organization administrators. Use the organization membership endpoint for this:
https://developer.github.com/v3/orgs/members/#get-your-organization-membership
not all providers support organization or organization membership endpoints. In this case, the system should still allow system admins to manage all organization secrets.

closed by 4572cc8dddc01d0f6b1f41bda62877a0a6047c49 and available in :latest

Hi. I think in gitea this doesn't work.
Only if my user is Drone System Admin, I can create org secrets.
When a user is not Drone admin, but it is Gitea Org Admin, it gives a {"message":"Forbidden"} error


website document bug

https://mxnet.incubator.apache.org/architecture/overview.html#using-simpleop-on-envarguments
"
To enable kwargs, use set_enable_kwargs(bool enable_kwargs) in registration. Then, in forward functions and gradients, additional arguments are contained in env.kwarg, which is defined as std::vector std::string> >. Use the DMLC parameter structure to simplify parsing keyword arguments. For more details, see the guide on parameter structure.
"
"which is defined as std::vector std::string> >" is not correct although from the docs/architecture/overview.md is right.

Hi @zhaoyao73, thanks for pointing out the C API rendering issues! Do you know how we can fix them? It would be great if you are willing to contribute to them.
http://mxnet.incubator.apache.org/community/contribute.html
@leleamol could you please take a look.

Hi @zhaoyao73, thanks for pointing out the C API rendering issues! Do you know how we can fix them? It would be great if you are willing to contribute to them.
http://mxnet.incubator.apache.org/community/contribute.html
@leleamol could you please take a look.

HI Ianking520,
the overview.md file from github repo is correct but the html version is not right(website's page is not correct), so I am not sure how you guys generated the html file for that website. that is the bug from. If it is md file bug I would have already send the PR already. :)

Interesting, @aaronmarkham again if you know something about .md and Html compatibility issue


Connection through oracle connection manager

Hi,
We usually connection through an Oracle Connection Manager, so the JDBC Url looks like:
username/password@"(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=OFF)(FAILOVER=ON)(ADDRESS=(PROTOCOL=TCP)(HOST=ocmhost1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbserver1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=ocmhost2)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbserver1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=ocmhost1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbserver2)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=ocmhost2)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbserver2(PORT=1521)))(CONNECT_DATA=(UR=A)(SERVER=DEDICATED)(SERVICE_NAME=db1.a.database))(SOURCE_ROUTE=yes))"

(DESCRIPTION=
(ADDRESS_LIST=
(LOAD_BALANCE=OFF)
(FAILOVER=ON)
(ADDRESS=(PROTOCOL=TCP)(HOST=ocmhost1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbserver1)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=ocmhost2)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbserver1)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=ocmhost1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbserver2)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=ocmhost2)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbserver2)(PORT=1521)))
(CONNECT_DATA=
(UR=A)
(SERVER=DEDICATED)
(SERVICE_NAME=db1.a.database)
)
(SOURCE_ROUTE=yes)
)

Will this be possible with go-ora? anybody have any suggestions?

actually I use the url parameter to build this description and send to server so I will add url option to pass this string and I will use regex to extract server, port, service

That will be really nice, then basically the JDBC URL's can be used almost as-is.

actually I use the url parameter to build this description and send to server so I will add url option to pass this string and I will use regex to extract server, port, service

But is this going to work?
When looking at connection_string.go and function newConnectionStringFromUrl:
	if q != nil {
		for key, val := range q {
			switch strings.ToUpper(key) {
			//case "DATA SOURCE":
			//	conStr.DataSource = val
			case "SERVICE NAME":
				ret.ServiceName = val[0]

You change the case to upper, thats fine, but how do you match the _ underscore sign?
Perhaps I overlooked your code too quickly for replacing _ with a whitespace. Currently I specify it as SERVICE_NAME

I make new release to add this feature.
just use function go_ora.BuildJDBC(user, pass, connStr, urlOptions)
I make a brief description about usage in readme file
can you test it and inform me about the result

what I am doing is read url parameter and store it in ConnectionOption object then use this information to make network connection and send (description=... string which is build also from ConnectionOption
when you send (description=... as a parameter I will do the reverse ==> read data from (description=... and store it in ConnectionOption then make network connection and send the entered (description=... string

I make new release to add this feature. just use function go_ora.BuildJDBC(user, pass, connStr, urlOptions) I make a brief description about usage in readme file
can you test it and inform me about the result

I think we are almost there, but not yet :-)
Taking the bare minimum tot make a db connection:
func main() {
	connStr := `(DESCRIPTION=
	(ADDRESS_LIST=
	   (LOAD_BALANCE=OFF)
	   (FAILOVER=ON)
	   (ADDRESS=(PROTOCOL=TCP)(HOST=cmhost1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbhost1)(PORT=1521))
	   (ADDRESS=(PROTOCOL=TCP)(HOST=cmhost2)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbhost1)(PORT=1521))
	   (ADDRESS=(PROTOCOL=TCP)(HOST=cmhost1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbhost2)(PORT=1521))
	   (ADDRESS=(PROTOCOL=TCP)(HOST=cmhost2)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbhost2)(PORT=1521))
	)
	(CONNECT_DATA=
	(UR=A)
	(SERVER=DEDICATED)
	(SERVICE_NAME=s4019.a.database)
	)
	(SOURCE_ROUTE=yes)
	)`
	databaseUrl := go_ora.BuildJDBC("USERBAME", "PASSWORD", connStr, nil)
	conn, err := sql.Open("oracle", databaseUrl)
	if err != nil {
		fmt.Println(err)
		return
	}
	err = conn.Ping()
	if err != nil {
		fmt.Println(err)
		return
	}

}

The response when running:
no address passed in connection string
The way we need to connect to Oracle databases due to corporate policies is via an OCM, the response I am seeing now is from the OCM itself.

I guess we are reaching out to one of the CMHOSTs but not to the DB itself.

no address passed in connection string this error message come from the client line# 160 connect_option.go
means failed to get server information from passed (description...
can you run this code and see if it give error?
connStr := `(DESCRIPTION=
	(ADDRESS_LIST=
	   (LOAD_BALANCE=OFF)
	   (FAILOVER=ON)
	   (ADDRESS=(PROTOCOL=TCP)(HOST=cmhost1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbhost1)(PORT=1521))
	   (ADDRESS=(PROTOCOL=TCP)(HOST=cmhost2)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbhost1)(PORT=1521))
	   (ADDRESS=(PROTOCOL=TCP)(HOST=cmhost1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbhost2)(PORT=1521))
	   (ADDRESS=(PROTOCOL=TCP)(HOST=cmhost2)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbhost2)(PORT=1521))
	)
	(CONNECT_DATA=
	(UR=A)
	(SERVER=DEDICATED)
	(SERVICE_NAME=s4019.a.database)
	)
	(SOURCE_ROUTE=yes)
	)`
	op := &network.ConnectionOption{}
	fmt.Println(op.UpdateDatabaseInfo(connStr))
	fmt.Println(op.Servers)

about the picture the driver should get list of servers from connect string then try to connect to them one by one until get successful connection

no address passed in connection string this error message come from the client line# 160 connect_option.go means failed to get server information from passed (description... can you run this code and see if it give error?
connStr := `(DESCRIPTION=
	(ADDRESS_LIST=
	   (LOAD_BALANCE=OFF)
	   (FAILOVER=ON)
	   (ADDRESS=(PROTOCOL=TCP)(HOST=cmhost1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbhost1)(PORT=1521))
	   (ADDRESS=(PROTOCOL=TCP)(HOST=cmhost2)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbhost1)(PORT=1521))
	   (ADDRESS=(PROTOCOL=TCP)(HOST=cmhost1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbhost2)(PORT=1521))
	   (ADDRESS=(PROTOCOL=TCP)(HOST=cmhost2)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbhost2)(PORT=1521))
	)
	(CONNECT_DATA=
	(UR=A)
	(SERVER=DEDICATED)
	(SERVICE_NAME=s4019.a.database)
	)
	(SOURCE_ROUTE=yes)
	)`
	op := &network.ConnectionOption{}
	fmt.Println(op.UpdateDatabaseInfo(connStr))
	fmt.Println(op.Servers)

The output:
<nil>
[{TCP cmhost1 1521} {TCP dbhost1 1521} {TCP cmhost2 1521} {TCP dbhost1 1521} {TCP cmhost1 1521} {TCP dbhost2 1521} {TCP cmhost2 1521} {TCP dbhost2 1521}]

no address passed in connection string this error message come from the client line# 160 connect_option.go means failed to get server information from passed (description... can you run this code and see if it give error?
connStr := `(DESCRIPTION=
	(ADDRESS_LIST=
	   (LOAD_BALANCE=OFF)
	   (FAILOVER=ON)
	   (ADDRESS=(PROTOCOL=TCP)(HOST=cmhost1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbhost1)(PORT=1521))
	   (ADDRESS=(PROTOCOL=TCP)(HOST=cmhost2)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbhost1)(PORT=1521))
	   (ADDRESS=(PROTOCOL=TCP)(HOST=cmhost1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbhost2)(PORT=1521))
	   (ADDRESS=(PROTOCOL=TCP)(HOST=cmhost2)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbhost2)(PORT=1521))
	)
	(CONNECT_DATA=
	(UR=A)
	(SERVER=DEDICATED)
	(SERVICE_NAME=s4019.a.database)
	)
	(SOURCE_ROUTE=yes)
	)`
	op := &network.ConnectionOption{}
	fmt.Println(op.UpdateDatabaseInfo(connStr))
	fmt.Println(op.Servers)

But using fully qualified domain names its empty:
		   (ADDRESS=(PROTOCOL=TCP)(HOST=cmhost1.ocm.net)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbhost1.db.net)(PORT=1521))
		   (ADDRESS=(PROTOCOL=TCP)(HOST=cmhost2.ocm.net)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbhost1.db.net)(PORT=1521))
		   (ADDRESS=(PROTOCOL=TCP)(HOST=cmhost1.ocm.net)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbhost2.db.net)(PORT=1521))
		   (ADDRESS=(PROTOCOL=TCP)(HOST=cmhost2.ocm.net)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=dbhost2.db.net)(PORT=1521))

Then its empty:
no address passed in connection string
[]

no problem I will update the function that extract server information

do you update the driver to 2.4.8

do you update the driver to 2.4.8

Yes :-)

no problem I will update the function that extract server information

It looks the regex at line 90 in connect_option.go will not extract FQDN's:
r, err := regexp.Compile(`(?i)\(\s*HOST\s*=\s*(\w+)\s*\)`)

I make new release and update regex

I changed it locally at two places:
r, err := regexp.Compile(`(?i)\(\s*HOST\s*=\s*(\S+)\s*\)`)
r, err := regexp.Compile(`(?i)\(\s*SERVICE_NAME\s*=\s*(\S+)\s*\)`)

Then the result is:
<nil>
[{TCP cmhost1.ocm.net)(PORT=1521) 1521} {TCP dbhost1.db.net)(PORT=1521) 1521} {TCP cmhost2.ocm.net)(PORT=1521) 1521} {TCP dbhost1.db.net)(PORT=1521) 1521} {TCP cmhost1.ocm.net)(PORT=1521) 1521} {TCP dbhost2.db.net)(PORT=1521) 1521} {TCP cmhost2.ocm.net)(PORT=1521) 1521} {TCP dbhost2.db.net)(PORT=1521)) 1521}]

That looks much better :-)
Now when trying to actually make an connection:
	databaseUrl := go_ora.BuildJDBC("USERNAME", "PASSWORD", connStr, nil)
	conn, err := sql.Open("oracle", databaseUrl)
	if err != nil {
		fmt.Println(err)
		return
	}
	err = conn.Ping()
	if err != nil {
		fmt.Println(err)
		return
	}

The result is:
dial tcp: lookup dbhost2.db.net)(PORT=1521)): no such host
It cannot directly connect to such dbhosts, it needs to connect through the Oracle Connection Manager, but it looks like its trying to make a direct connection.

Sure it will make direct connection to the host specified in the (ADDRESS= statement
I think you need to do the following
connect to OCM host:port and pass your own connection string?
if OCM host:port is present in connection string try to put as first (ADDRESS=

can you pass this option
urlOption := map[string]string {
    "TRACE FILE": "trace.log",
}
databaseUrl := go_ora.BuildJDBC("USERNAME", "PASSWORD", connStr, urlOption)

this will create trace file that show what happen during connection

if the Oracle Connection Manager  present in the address list thus the program will try to connect to it and you can find this in the log file

I fix reading service, SID and instances if they contain . or -
now you can do:
1- use BuildJDBC and here the program will read connection information from connection string and will try to connect to servers one by one (order in connection string)
2- use BuildUrl and pass urlOptions contain connStr as follow:
urlOptions := map[string]string {
    "connStr":  "(description=.....",
}
databaseUrl := go_ora.BuildUrl(primary_server /*can be empty*/, port, user, password, service/*should be empty*/, urlOptions)

the difference here is that you can specify primary server to connect to with port
note:
* other servers used in connection string will be added after primary server and the program will try to make connection to them after primary server fail
* service in BuildUrl should be empty as service information will be load from connection string

I fix reading service, SID and instances if they contain . or - now you can do: 1- use BuildJDBC and here the program will read connection information from connection string and will try to connect to servers one by one (order in connection string) 2- use BuildUrl and pass urlOptions contain connStr as follow:
urlOptions := map[string]string {
    "connStr":  "(description=.....",
}
databaseUrl := go_ora.BuildUrl(primary_server /*can be empty*/, port, user, password, service/*should be empty*/, urlOptions)

the difference here is that you can specify primary server to connect to with port note: * other servers used in connection string will be added after primary server and the program will try to make connection to them after primary server fail * service in BuildUrl should be empty as service information will be load from connection string

Using the following code:
	op := &network.ConnectionOption{}
	fmt.Println(op.UpdateDatabaseInfo(connStr))
	fmt.Println(op.Servers)

	urlOptions := map[string]string{
		"TRACE FILE": "trace.log",
		"connStr":    connStr,
	}
	databaseUrl := go_ora.BuildUrl("", 1521, "USERNAME", "PASSWORD", "", urlOptions)
	conn, err := sql.Open("oracle", databaseUrl)
	if err != nil {
		fmt.Println(err)
		return
	}

	err = conn.Ping()
	if err != nil {

		fmt.Println(err)
		return
	}

The response:
<nil>
[{TCP ocmhost1.ocm.net 1521} {TCP dbhost1.db.net 1521} {TCP ocmhost2.ocm.net 1521} {TCP dbhost1.db.net 1521} {TCP ocmhost1.ocm.net 1521} {TCP dbhost2.db.net 1521} {TCP ocmhost1.ocm.net 1521} {TCP dbhost2.db.net 1521}]
Not data packet

I can provide you with the trace.log, but prefer to send it directly to you if needed ;-)

ok send the server and service read correctly and connection done but response is not as expected

Sent.
:-)

yes I receive your email I will examine the file and inform you

I see the file:
1-  the server using packet encryption encryption
2- connection proceed well until reach authentication. the client send packet as usual by the server respond with empty data packet which is abnormal
because the data is encrypted I need to ask you question? are you using OS Auth?
also I note something form you code above
// third parameter in BuildUrl is service name which should be ""
// but you pass "USERNAME"
// the operand before urlOptions is password which is empty
// when you pass an empty password this means you need to connect
// through OS Auth and this explain what happen in log file
databaseUrl := go_ora.BuildUrl("", 1521, "USERNAME", "PASSWORD", "", urlOptions)
	conn, err := sql.Open("oracle", databaseUrl)

if the above is the code used to produce this log file then do one of the following
1- use BuildJDBC as you didn't pass and primary server in BuildUrl
2- correct BuildUrl calling as follow
databaseUrl := go_ora.BuildUrl("", 1521, "",  "USERNAME", "PASSWORD", urlOptions)
	conn, err := sql.Open("oracle", databaseUrl)

I see the file: 1- the server using packet encryption encryption 2- connection proceed well until reach authentication. the client send packet as usual by the server respond with empty data packet which is abnormal because the data is encrypted I need to ask you question? are you using OS Auth? also I note something form you code above
// third parameter in BuildUrl is service name which should be ""
// but you pass "USERNAME"
// the operand before urlOptions is password which is empty
// when you pass an empty password this means you need to connect
// through OS Auth and this explain what happen in log file
databaseUrl := go_ora.BuildUrl("", 1521, "USERNAME", "PASSWORD", "", urlOptions)
	conn, err := sql.Open("oracle", databaseUrl)

if the above is the code used to produce this log file then do one of the following 1- use BuildJDBC as you didn't pass and primary server in BuildUrl 2- correct BuildUrl calling as follow
databaseUrl := go_ora.BuildUrl("", 1521, "",  "USERNAME", "PASSWORD", urlOptions)
	conn, err := sql.Open("oracle", databaseUrl)

using BuildJDBC:
	urlOptions := map[string]string{
		"TRACE FILE": "trace.log",
	}

	databaseUrl := go_ora.BuildJDBC("USERNAME", "PASSWORD", connStr, urlOptions)
	conn, err := sql.Open("oracle", databaseUrl)
	if err != nil {
		fmt.Println(err)
		return
	}

The response is:
Can't ping connection: missing port in address
But the port is specified in the "(description=....." connStr, I would expect it will grab from there.
Using BuildUrl:
	query := "SELECT BANNER FROM v$version"

	urlOptions := map[string]string{
		"TRACE FILE": "trace.log",
		"connStr":    connStr,
	}

	databaseUrl := go_ora.BuildUrl("dbhost1.db.net", 1521, "", "USERNAME", "PASSWORD", urlOptions)
	conn, err := sql.Open("oracle", databaseUrl)
	if err != nil {
		fmt.Println(err)
		return
	}

I get a proper response:
BANNER:  Oracle Database 19c EE Extreme Perf Release <IP_ADDRESS>.0 - Production
So a hit here :-)
But, if dbhost1.db.net is not available will it then automatically switch to dbhost2.db.net as specified in connStr?

yes a list of servers is build from ADDRESS_LIST with same order
you tell me you get proper response:- means problem solved?

yes a list of servers is build from ADDRESS_LIST with same order
you tell me you get proper response:- means problem solved?

Yes when using BuildUrl and specifying the primary server is works, so we can close the issue.
Using BuildJDBC, it doen NOT work:
Can't ping connection: missing port in address

I think no need for BuildJDBC I will remove in the future

Then I will stick to BuildUrl.
Lets close the issue.
Thanks for your support!

I change BuildJDBC to be a shortcut like this
func BuildJDBC(user, password, connStr string, options map[string]string) string {
	if options == nil {
		options = make(map[string]string)
	}
	options["connStr"] = connStr
	return BuildUrl("", 0, "", user, password, options)
}

test it if it is ok or not

I change BuildJDBC to be a shortcut like this
func BuildJDBC(user, password, connStr string, options map[string]string) string {
	if options == nil {
		options = make(map[string]string)
	}
	options["connStr"] = connStr
	return BuildUrl("", 0, "", user, password, options)
}

test it if it is ok or not

This is the way to go!
Now its I can just drop-in the conStr and there is no need to select a primary server.
It tested OK


error occurs - crashes everything

one one list, timeout or any error in general, should not crash everything
Logs 1.docx

I have encountered this issue as well.


Flutter / Dart support?

Do you plan to offer Flutter and Dart support?   Flutter is rapidly taking off as a Cross Platform Mobile development platform.   I haven't seen any Azure plugins, but I have seen many for AWS!
https://github.com/trending
Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 0b787325-589c-b5f5-f530-7f1fe12e075e
Version Independent ID: 6d678569-0ebe-f2ef-ecd7-69cc62b4b7be
Content: Azure Active Directory v2.0 authentication libraries
Content Source: articles/active-directory/develop/active-directory-v2-libraries.md
Service: active-directory
GitHub Login: @CelesteDG
Microsoft Alias: celested

@MohitGargMSFT Done!   Microsoft needs to get on this!      https://feedback.azure.com/forums/169401-azure-active-directory/suggestions/34635757-flutter-dart-support
https://github.com/trending
As of today:=
Xamarin Forms has 2k likes
Flutter has over 28k likes!

@Jeremywhiteley Thanks. The Identity service team must be aware of it and with your feedback logged they will get more visibility on the customer ask. I will let service team know about it from my end as well.

Is there any development?

The only thing I have seen is this.   https://pub.dev/packages/simple_auth_flutter.

https://pub.dev/packages/aad_oauth
The above add_outh one works fine for me than https://pub.dev/packages/simple_auth_flutter . There is one issue to fix(https://github.com/Earlybyte/aad_oauth/issues/14)

Has any one used below firebase microsoft azure authentication and making microsoft graph api calls?
https://firebase.google.com/docs/auth/ios/microsoft-oauth

I haven’t.  But I don’t think Microsoft cares about flutter even though,  LinkedIn, a wholly owned subsidiary of Microsoft which has over 610 million registered users, released new statistics unveiling Flutter as the top growing skills among the software engineers.  http://bit.ly/2E2vqk9

Any updates?

Azure still does not provide a flutter package? We need support for mobile, desktop and web.

looking for a package to be able to use the sass token  🤧


[Router] Missing parts of documentation

I've started using the new new new router (v3 alpha) and I have noticed a few things missing from the documentation. @Foxandxss asked me to open an issue here to list them.
I will update this issue whenever I find new stuff missing.
Current list:

[ ] Directive queryParams to add query params to a routerLink: linky. Even if you know its name, it's nowhere to be found in the doc
[ ] How to access url parameters from a parent component. Let's say that you have a route like: /hero/:id/edit, and when you're in the /edit view & you want the hero id, you need to do: this.router.routerState.parent(this.route).params
[ ] How to lazy load components with the router (using the SystemJSComponentResolver, or a custom one like I did to make it work with Webpack)
[ ] How to dynamically add new routes to the config https://github.com/angular/angular/issues/9527
[ ] How to define a default route when there is no match, for example a 404 page, and how to redirect all to one route (if you don't want a 404 but prefer to redirect to a default route), currently it seems that you have to do:

{
    path: '**',
    redirectTo: ''
}

Thanks, this is nice!

See also this stackoverflow issue which reminds us that we have some documenting to do.

What's the status of this @brandonroberts ?

Query Params are covered in the dev guide
Route tree information will be in the advanced chapter
Lazy loading is covered in the dev guide
Dynamically adding new routes could go in the upcoming advanced chapter
Wildcard routes are mentioned in the dev guide