Allow passing metadata to confirmSetupIntent

Is your feature request related to a problem? Please describe.
Currently, confirmSetupIntent does not allow us to pass metadata per https://github.com/stripe/stripe-react-native/blob/3378e6f24d92accfff4b6b8d66ae764561ba470b/src/types/SetupIntent.ts#L23.  metadata is part of the SetupIntent object and the Stripe api allows us to set it as well, for example, https://stripe.com/docs/api/setup_intents/update.  Maybe we can even add a updateSetupIntent method?
Describe the solution you'd like
Would be great if we can have a parameter to set the metadata for confirmSetupIntent
Describe alternatives you've considered
1.) Do this through server side
2.) possibly run a webview with only the Javascript Stripe SDK loaded and call, for example, confirmCardSetup through there
3.) eject from managed workflow and integrate Stripe with Android/iOS

Confirming a SetupIntent with a publishable key does not allow passing of metadata. Please pass metadata on the server-side when creating or updating the SetupIntent.


Better support in typescript

added missed exports declarations (Layout, Ripple)
export components by name besides default export (as provided in source files)
fixed missed references in navigation component for ButtonProps and LinkProps
removed duplicating declarations in components/

@ixrock I suppose this is backwards compatible?
If so then maybe this can be merged @javivelasco.
The PRQ only affects definition files.
Then afterwards I will probably also make a typescript-related PRQ, the onChange definition for the input is missing the event parameter.
Kind regards,


Currently replacements won't work if the C key is somewhere else or when cmd+c is not a shortcut for pasting

To make a snippet replacement, currently we are simulating cmd+v on macOS and ctrl+v on Linux and Windows. This won't work, when the v key in the current keyboard layout is not where it is in the US QWERTY layout. It also won't work, if cmd+v/ctrl+v is not an actual shortcut for pasting.
Possible solution
To solve the first issue is pretty easy. We have to find where the v key is in current layout by running the getKeyMap() on the native-keymap module.
Solving the second issue gets rid of the first one. We have to simulate global OS paste event. How to do this? We don't know. For the person that finds the solution we are going to send our awesome Quickwords stickers and you are going to land in our README file  😉

I think it's possible to emit OS level key combinations using this. It states that it works on both linux and mac. I searched the same for Windows and it does seem to be kinda easy to do in C++ or Python. But, I don't know how to integrate these in electron build/install process as they are native dependencies that are need to be build on client machine (at least for linux and mac)

We can always try to bridge to C++ with node-gyp, but using different plugins for Windows and different for the other two OSs seems like a nightmare to maintain. 😕

Hi,
Not sure I understand correctly the second part of this issue but if cmd / ctrl + v is not the current OS shortcut for pasting why not to provide a Preferences Menu where users could set shortcuts as set in their current OS / machine ? Obviously this setting could be have a default value to the most common value (I think so) cmd / ctrl + v shortcut.

@wastegaby That's a great idea! We are going to put this in our backlog and you can follow the progress here: #55. If you want to get stickers, just send me an email 😉

Glad to contribute.
I send you an email soon :-)


Add primary_disk_size to Server domain

API provides a field named primary_disk_size for servers which was missing.
This field is important if you want to check the possibility of a downgrade for a server.
https://docs.hetzner.cloud/#servers-get-a-server

Added the tests too.

Hey @Navid2zp,
thank you!


Px4 firmware nuttx 7.22+ kinetis missing Back Ports

Missing back ports causing serial issues:SBUS and QGC

@dagar, @LorenzMeier - let's get this in ASAP.


How to get access to :8081/visualobjects when deployed in Azure Cluster?

Hello!
Thanks for great example! Locally works great and I able to access localhost:8081/visualobjects endpoint. Though when I trying to deploy cluster to Azure I can't find the way I could access this page. First I made LB Rule for 8081, but as web service deployed on only one of five VMs (nodes) it only available if LB choose right VM to make request.
Could you please clarify how to make right deployment and config of VisualObject example to Azure Cluster.
Thanks in advance!

Hello,
I am assuming it was successfully published to your cluster (and if your cluster is secure you have configured it appropriately  https://azure.microsoft.com/en-us/documentation/articles/service-fabric-visualstudio-configure-secure-connections/)? And you are verifying this using service fabric explorer @  http://vyunev.regionus.cloudapp.azure.com:19000/Explorer/index.html (replaced with the appropriate endpoint)?
When you setup the LB rule, I assume you followed the instructions @ https://azure.microsoft.com/en-us/documentation/articles/service-fabric-cluster-creation-via-portal/
Have you been able to publish any other app (say to port 80) to the cluster and access it?
The webservice may be running as single instance, since it is a stateless service; only the actor project is stateful and has partitions.  When accessing it at Azure, you need to provide the FQDN (Fully Qualified Domain Name), so it would be something like http://vyunev.regionus.cloudapp.azure.com:8081/visualobjects/  (replace with the appropriate endpoint)
Regards,
Mani
From: vyunev<EMAIL_ADDRESS>Sent: Wednesday, January 20, 2016 1:57 AM
To: Azure-Samples/service-fabric-dotnet-getting-started<EMAIL_ADDRESS>Subject: [service-fabric-dotnet-getting-started] How to get access to :8081/visualobjects when deployed in Azure Cluster? (#11)
Hello!
Thanks for great example! Locally works great and I able to access localhost:8081/visualobjects endpoint. Though when I trying to deploy cluster to Azure I can't find the way I could access this page. First I made LB Rule for 8081, but as web service deployed on only one of five VMs (nodes) it only available if LB choose right VM to make request.
Could you please clarify how to make right deployment and config of VisualObject example to Azure Cluster.
Thanks in advance!
—
Reply to this email directly or view it on GitHubhttps://github.com/Azure-Samples/service-fabric-dotnet-getting-started/issues/11.

I have the same problem, and my cluster is unsecured.
@vyunev any update ?

When you deploy the application to the cloud, set the instance count for the web service to be -1. See the Cloud.xml application parameter file.

Finally solved it, inside the service port config (a.k.a ServiceManifest.xml) there is a port setting. After changing it to 19080 - the default http port my cluster was listening to, everything started working.

It is not recommended to reuse the cluster management endpoint port. Open port 8082 for the load balancer and use that port in the sample.


🛠 add liquibase-aws-license-service

add liquibase-aws-license-service
feat: cmd/populator/modules.go
feat: internal/app/packages.json

@sayaliM0412 this looks good.  I did notice the update packages action failed.  Any ideas there, @mcred ?

@sayaliM0412 this looks good. I did notice the update packages action failed. Any ideas there, @mcred ?

PR already here: https://github.com/liquibase/liquibase-package-manager/pull/413


Spurious results in record count

I have set up a set of nine Lookup Rollup Summaries with the same parent (Contact) and child (Download Records) object.  Each Download Record is linked to one of nine Sector records and has a date.  On the Contact record I have a numeric field for each of the Sectors.  The idea is to maintain a record at the Contact level of the number of downloads of each Sector that a Contact has made over the past 24 months.  The Lookup Rollup Summaries are the same with the exception of the Sector ID and the numeric results field.
The problem is that the record count returned by the Lookup Rollup Summaries is incorrect and I can see no pattern as to why the numbers are not adding correctly.  Has anyone got any ideas on this?

I have found a solution to this but am leaving the issue open to see if anyone can give an explanation:
I resolved the issue by changing the relative date filter from LAST_N_Months:24 to LAST_N_DAYS:730
Does anyone know why this worked?

@LawranceT, unfortunately without seeing some of the sample records that are and are not being included I am not much help. This does sound like a problem in the generated SOQL query so you should be able to troubleshoot and review without too much trouble outside of DLRS. You should also be able to get a report built that does the same thing and compare numbers.
If you can find that you SOQL queries are working as expected and DLRS is still not working correctly please let me know and with the specific examples we can try and figure it out.
To confirm, LAST_N_MONTHS and LAST_N_DAYS include different periods. LAST_N_MONTHS starts on the last day of the previous month and then goes back through 24 months. So if I ran that SOQL right now it would include from Jan 31st 2019 back through Feb 1st 2017. LAST_N_DAYS being a little different would include Feb 20th 2019 back through Feb 20st 2017.
I would assume you're comparing this to some other output for validity, do you expect its filters align more closely to the Months or Days?
Depending on how frequently these Download Records are created you might find that your data becomes stale and old rather quickly. Filter on relative dates can become complicated. If you haven't already you may want to think about performing a full recalculation on some periodic basis that makes sense for when things roll off your data set in additional to the realtime rollup.
The other thing I would ask, are you sure you want to aggregate by Name? Normally we recommend aggregating by Id when counting the number of children records. Depending on your type of name field it might be equally unique or you might be intending to count only unique names. Just thought I would call it out as that can easily be the cause of unexpected numbers. Likely not as changing your date range seems to have provided the expected values.
For your current rollup you should be able to run a query very similar to
SELECT Contact__c, COUNT(NAME) from Download_Record__c WHERE Sector__c = 'a1Z1v000003vXfzEAE' AND Date__c = LAST_N_MONTHS:24 GROUP BY Contact__c
(Likely adding an additional WHERE clause element to limit it to your test Contact Id)
Then compare that to
SELECT Contact__c, COUNT(NAME) from Download_Record__c WHERE Sector__c = 'a1Z1v000003vXfzEAE' AND Date__c = LAST_N_DAYS:730 GROUP BY Contact__c

Hi
Many thanks for this, you have identified the problem - several of the
records that I expected and wanted included in the result were dated this
month and so were being excluded from the roll-up when using LAST_N_MONTHS,
but were included with LAST_N_DAYS.
Thanks for taking the time to help.
Best wishes
Lawrance

Lawrance Titterton
NGO Business Services
Skype: lawrance.titterton.caf
+44 7974 073 736 UK
+256  775 139 340 Uganda
On Thu, 21 Feb 2019 at 14:50, Heber<EMAIL_ADDRESS>wrote:

@LawranceT https://github.com/LawranceT, unfortunately without seeing
some of the sample records that are and are not being included I am not
much help. This does sound like a problem in the generated SOQL query so
you should be able to troubleshoot and review without too much trouble
outside of DLRS. You should also be able to get a report built that does
the same thing and compare numbers.
If you can find that you SOQL queries are working as expected and DLRS is
still not working correctly please let me know and with the specific
examples we can try and figure it out.
To confirm, LAST_N_MONTHS and LAST_N_DAYS include different periods.
LAST_N_MONTHS starts on the last day of the previous month and then goes
back through 24 months. So if I ran that SOQL right now it would include
from Jan 31st 2019 back through Feb 1st 2017. LAST_N_DAYS being a little
different would include Feb 20th 2019 back through Feb 20st 2017.
I would assume you're comparing this to some other output for validity, do
you expect its filters align more closely to the Months or Days?
Depending on how frequently these Download Records are created you might
find that your data becomes stale and old rather quickly. Filter on
relative dates can become complicated. If you haven't already you may want
to think about performing a full recalculation on some periodic basis that
makes sense for when things roll off your data set in additional to the
realtime rollup.
The other thing I would ask, are you sure you want to aggregate by Name?
Normally we recommend aggregating by Id when counting the number of
children records. Depending on your type of name field it might be equally
unique or you might be intending to count only unique names. Just thought I
would call it out as that can easily be the cause of unexpected numbers.
Likely not as changing your date range seems to have provided the expected
values.
For your current rollup you should be able to run a query very similar to
SELECT Contact__c, COUNT(NAME) from Download_Record__c WHERE Sector__c =
'a1Z1v000003vXfzEAE' AND Date__c = LAST_N_MONTHS:24 GROUP BY Contact__c
(Likely adding an additional WHERE clause element to limit it to your test
Contact Id)
Then compare that to
SELECT Contact__c, COUNT(NAME) from Download_Record__c WHERE Sector__c =
'a1Z1v000003vXfzEAE' AND Date__c = LAST_N_DAYS:730 GROUP BY Contact__c
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/afawcett/declarative-lookup-rollup-summaries/issues/798#issuecomment-466027839,
or mute the thread
https://github.com/notifications/unsubscribe-auth/Agz2ATocUC_Pw_ODyXC_kSDEOeDvj8MIks5vPrJGgaJpZM4bGwqU
.

@afawcett  Many thanks for this, you have identified the problem - several of the records that I expected and wanted included in the result were dated this month and so were being excluded from the roll-up when using LAST_N_MONTHS, but were included with LAST_N_DAYS.
Many thanks as always for the support and a great product

PS - The name in this instance is an auto-number, so is unique.


Can't build from latest commit (v0.27.1) [NixOs]

Hyprland Version
github:hyprwm/Hyprland/2fed1badbfb3b5a10641ee41c55d7fa7c21682c8
Bug or Regression?
Bug
Description
I've got a build error from new release. Idk if i'm doing something wrong.

How to reproduce
change flake commit :3
nixos-rebuild test
Crash reports, logs, images, videos
No response

you need to update wlroots

you need to update wlroots

I will try, thx u

Worked just fine for me, CI is also passing. Do you perhaps have inputs.hyprland.nixpkgs.follows = "nixpkgs"?

v0.17.1
uhhh?

inputs.hyprland.nixpkgs.follows = "nixpkgs"

v0.27.1 typo error sorry.

Worked just fine for me, CI is also passing. Do you perhaps have inputs.hyprland.nixpkgs.follows = "nixpkgs"?

Yes, but not working :/

Yeah, you may want to remove that.

Yeah, you may want to remove that.

Without that, it doesn't compile either. And I also have wlroots updated.

Not sure if these kind of comment are helpful but I am also suffering from this problem. I guess only put comments like this if no one has done it. Are these comments useful?

Never mind, I have made a mistake, Hyprland was compiling but segfaulted on starting. however after another nix flake update it appears to have been fixed.

I did not fix it. It fixed itself when the github action that updates wlroots in nix decided to work. It was kind of finnicky. So I rewrote it in https://github.com/hyprwm/Hyprland/pull/2749.


SetValue on Date and Time fields v8.2.3.x OnPrem

Problem:
When I try to set the value on a Date and Time field on the Appointment entity i get an error.
Error:
System.InvalidOperationException
  HResult=0x80131509
  Message=unknown error: Element
...
 is not clickable at point (368, 342). Other element would receive the click:

  (Session info: chrome=72.0.3626.119)
  (Driver info: chromedriver=2.38.552522 (437e6fbedfa8762dec75e2c5b3ddb86763dc9dcb),platform=Windows NT 10.0.16299 x86_64)
  Source=WebDriver
  StackTrace:
   at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
   at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
   at OpenQA.Selenium.Remote.RemoteWebElement.Click()
   at OpenQA.Selenium.Support.Events.EventFiringWebDriver.EventFiringWebElement.Click()
   at Microsoft.Dynamics365.UIAutomation.Api.XrmPage.<>c__DisplayClass21_0.<SetValue>b__0(IWebDriver driver)
   at Microsoft.Dynamics365.UIAutomation.Browser.DelegateBrowserCommand`1.ExecuteCommand(IWebDriver driver, Object[] params)
   at Microsoft.Dynamics365.UIAutomation.Browser.BrowserCommand`1.Execute[T1,T2,T3,T4,T5,T6,T7,T8,T9](IWebDriver driver, T1 p1, T2 p2, T3 p3, T4 p4, T5 p5, T6 p6, T7 p7, T8 p8, T9 p9)
   at Microsoft.Dynamics365.UIAutomation.Browser.BrowserPage.Execute[TResult](BrowserCommandOptions options, Func`2 delegate)
   at Microsoft.Dynamics365.UIAutomation.Api.XrmPage.SetValue(DateTimeControl date)
   at Db.Crm.Test.AutomatedRegression.Test.AppointmentTests.CanCreateAppointment() in C:\src\dbcrm-global-testing\src\Db.Crm.Test.AutomatedRegression\Db.Crm.Test.AutomatedRegression.Test\AppointmentTests.cs:line 102

Code:

System:
Version 1612 (<IP_ADDRESS>) (DB <IP_ADDRESS>) on-premises
EasyRepro version: "Dynamics365.UIAutomation.Api" version="9.1.0"
Is this a bug or am i just doing it wrong ? :-)

Hello @jeesondk ,
This is how i use it :
        xrmBrowser.Entity.SetValue("sheduledstart", DateTime.Parse("11/11/2018"));
        xrmBrowser.ThinkTime(2000);

I assumed that "sheduledstart" is the name of the field where you want to put the date in.
Maybe this works for you aswell.
Best regards
Dolph

@Dolph-Dragon
Thanks for the reply, but i disagree :-)
using SetValue(string, DateTime) is depricated

Even if I use the depricated method I still get the same error as i described above :-)

I noticed that your CRM version is v8.2 but you are using v9.1 API's.  Have you tried the v8.2 API's and get the same error?
As an FYI, most of the v9.1 API's will work on older versions.  We try to build them to be resilient to application change but there may be subtle differences between the versions that we either can't address or didn't have time.


Update lodash query example for lodash 4 in README.md

Currently, the example not work with lodash 4 which is specified in package.json. I fixed it :-)

Thank you :+1:


Screen orientation / Speed units

Can't display in portrait mode in chrome browser. Also would like to see NM as ground speed unit

My apologies for the huge delay in this response.
Browser Orientation
Orientation is a tricky topic with this project because it is hard to tell with 100% accuracy what device the user is using and how they want the app oriented. Even using phone accelerometer data, as an example, may be invalid if the phone is mounted to the control column. For this reason, the app will always orient itself in a 'landscape' style. Currently, there is no way to tell the application to force portrait mode.
If you are using a desktop

One workaround is to resize your browser window to a landscape configuration.
Alternately, the chrome developer tools can be used to set the browser viewport to simulate a specific device. More info on that here.

If you believe it would be beneficial to have a button on the display to force a portrait mode, please let me know.
Ground Speed Units
You can change the ground speed unit to be any unit you prefer by modifying the configuration.js file:
/** ******************************** SPEED ********************************* **/
var speedTape = {
  lowerSpeed: 0,
  upperSpeed: 200,
  speeds: [
    {
      color: COLORS.WHITE,
      start: 55,
      end: 115
    },
    {
      color: COLORS.GREEN,
      start: 64,
      end: 140
    },
    {
      color: COLORS.YELLOW,
      start: 140,
      end: 171
    },
    {
      color: COLORS.RED,
      start: 171,
      end: 200
    }
  ],
  units: UNITS.MPH // <----- Units for displaying speed. 'UNITS.KTS' for knots.
};
/** ******************************** ***** ********************************* **/

Available units are as follows:
UNITS.KTS  // Knots
UNITS.MPH  // Miles per Hour
UNITS.KPH  // Kilometers per Hour
UNITS.FPM  // Feet per Minute
UNITS.FPS  // Feet per Second
UNITS.MPS  // Meters per Second
UNITS.MPM  // Meters per Minute

Keenan,
A button to force portrait would be very useful. "I" have never seen anyone flying with a tablet on their yoke in landscape mode. Thank you!
Doug
Doug Du Plessis

From: Keenan Nicholson<EMAIL_ADDRESS>Sent: Sunday, December 8, 2019 9:59:50 PM
To: knicholson32/stratux_ahrs<EMAIL_ADDRESS>Cc: dougduplessis<EMAIL_ADDRESS>Author<EMAIL_ADDRESS>Subject: Re: [knicholson32/stratux_ahrs] Screen orientation / Speed units (#20)
My apologies for the huge delay in this response.
Browser Orientation
Orientation is a tricky topic with this project because it is hard to tell with 100% accuracy what device the user is using and how they want the app oriented. Even using phone accelerometer data, as an example, may be invalid if the phone is mounted to the control column. For this reason, the app will always orient itself in a 'landscape' style. Currently, there is no way to tell the application to force portrait mode.
If you are using a desktop

One workaround is to resize your browser window to a landscape configuration.
Alternately, the chrome developer tools can be used to set the browser viewport to simulate a specific device. More info on that herehttps://developers.google.com/web/tools/chrome-devtools/device-mode#viewport.

If you believe it would be beneficial to have a button on the display to force a portrait mode, please let me know.
Ground Speed Units
You can change the ground speed unit to be any unit you prefer by modifying the configuration.js file:
/** ******************************** SPEED ********************************* /
var speedTape = {
lowerSpeed: 0,
upperSpeed: 200,
speeds: [
{
color: COLORS.WHITE,
start: 55,
end: 115
},
{
color: COLORS.GREEN,
start: 64,
end: 140
},
{
color: COLORS.YELLOW,
start: 140,
end: 171
},
{
color: COLORS.RED,
start: 171,
end: 200
}
],
units: UNITS.MPH // <----- Units for displaying speed. 'UNITS.KTS' for knots.
};
/ ******************************** ***** ********************************* **/
Available units are as follows:
UNITS.KTS  // Knots
UNITS.MPH  // Miles per Hour
UNITS.KPH  // Kilometers per Hour
UNITS.FPM  // Feet per Minute
UNITS.FPS  // Feet per Second
UNITS.MPS  // Meters per Second
UNITS.MPM  // Meters per Minute
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHubhttps://github.com/knicholson32/stratux_ahrs/issues/20?email_source=notifications&email_token=ADJ24MNR6CUPT2GPZPPW7KTQXW7DNA5CNFSM4IDSK5SKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEGHYCCQ#issuecomment-563052810, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ADJ24MPTGVBNVLG6CVBWNA3QXW7DNANCNFSM4IDSK5SA.

Great example, I'll re-open this and start looking into it. Thanks for the suggestion!

Just finished adding a button in the menu ("Toggle Rotation" - have to scroll to see it) that forces the screen to rotate orientations. It is still recommended to lock screen orientation on your device, but in that locked state you should now be able to set portrait or landscape. Let me know how it works for you - it seems to work well in Chrome and on my iPhone, but not all devices act the same in these regards.

Hi Keenan, in landscape mode the readability is very good. But in my opinion the further development should prefer the portrait mode - Doug is right.
In portrait mode the readability should be improved, and furthermore portrait mode offers the possibility for splitting the screen like Aspen Avionics E5: AHRS in the upper section, compass arc in the lower section. The compass arc should be selectable orientated in geographic = true north and magnetic north and should have a bug for selectable input the GPS-desired track or magnetic heading referring to this. Next a HSI screen with lateral course deviation could computed  ... and with your code the iPhone is a very great instrument for checking the certified installed avionics.
I don´t know, if the iPhone´s magnetic sensors are suitable. Or would it be more suitable upgrading the stratux project with a magnetic sensor?
Please open isssues according to my suggestions.
Thanks and kind regards
Franz


[Bug Report] Problem with multiple selection table and header filter

Element UI version
2.12.0
OS/Browsers version
Windows 10 / Chrome 77.0.3865.90 (Build oficial) (64 bits)
Vue version
2.6.10
Reproduction Link
https://codepen.io/lucianoorsi/pen/oNNNXmX?&editable=true
Steps to reproduce
Select items from the table and then filter with the header filter.
What is Expected?
That can be selected and filtered at the same time without losing the selection.
What is actually happening?
In a table with multiple selection and header filter, when it is filtered, the selection is lost.

+1 same here


pull request for e2e test at 01/15/2017 22:45:09

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


Less strict requirements for node version

yay! Thanks. I have been testing the latest with a downgraded version of node, working well so far. I will test the upgrade later too.

If you're using<EMAIL_ADDRESS>there should be no problems with the latest node 😉

thanks!


Updates for poetry

A few poetry-related updates uncovered when spinning up the CalHR repo.

I'd love to figure out a way to test this a bit better, cf #11


Update classifiers, make README display correctly on PyPI

Makes the short description display correctly on PyPI (https://github.com/pypa/packaging-problems/issues/201)
Makes the README display correctly on PyPI (https://github.com/pypa/packaging-problems/issues/202)
Updates the classifiers for improved discoverability / classification

This PR is now ready to merge.


(PUP-1931) Fix mount provider failure w/o options

Previously, when not specifying options to a mount resource, puppet
would fail with an opaque resource. It would create a bogus fstab entry
without an options field.
This commit adds in the default option to ensure that the options
field is created and valid for all mount resources.
Contribution originally from Mark Bainter<EMAIL_ADDRESS>

CLA signed by all contributors.

I'd like to see tests that verify it's still possible to get an empty string (no defaults) if one so chooses/desires in their manifest.

@branan I updated the spec tests to include the empty string situation. I'm not sure how effective they are though

Looks good to me.

@branan who would be a good person from CS to get to look at this change?

@Sharpie maybe? He should at least know who to forward it to :)
The question: Does switching the default to "defaults" (while still allowing an empty string when it's specified explicitly) constitute a crazy enough change that it could piss off users/custoemrs?
I suspect "no, as long as we document it", since it's an obviously sane thing for us to be doing :)

I actually haven't spent a lot of time mounting volumes with my bare hands. On the surface, this change seems reasonable --- but the best source of input would be the community and Professional Services.

@Sharpie is there someone in Professional Services that would be a good person to ask about this update?

One thing you should keep in mind: A default does not only apply when creating the resource, but everytime options is left blank. So let's just say I want to mount my dvd with puppet resource /mnt/dvd ensure=mounted and I already have an /etc/fstab entry for /mnt/dvd. Since I have not specified options on the command line, the new default of defaults will apply and effectively change my /etc/fstab. Without the change, puppet will ignore the current options with the drawback that puppet also leaves options blank when making a new fstab entry.
Having said that I am in favour of sane defaults for the options property (not only for linux) but this should be implemented at a provider level when actually writing /etc/fstab (IIRC the parsed provider can implement a pre_gen hook that could check if the options field is empty) or treated as a breaking change. At least that would be my opinion on that :-)

@melissa Unfortunately, I can't pick a fstab expert off the top of my head. The best source of input for this change may be the puppet-dev mailing list.
I agree with @stschulte: we should avoid overwriting any on-disk options if a resource declaration doesn't specify a value for this parameter.

Unfortunately, I'm not an fstab expert either :(
@stschulte I'm trying to wrap my brain around what you said. Since I have such little experience with fstab, please correct me if I'm wrong:
As it stands

Creation of a new entry

:options => ""; fstab options will be set to an empty string
options not set; fstab options will be set to an empty string
:options => "something,valid"; fstab options will be set to something,valid

Updating an existing entry

existing options blank

:options => ""; fstab options will remain an empty string
options not set; fstab options will remain an empty string
:options => "something,valid"; fstab options will be set to something,valid

existing options set to existing,stuff

:options => ""; fstab options will be reset to an empty string
options not set; fstab options will remain set to existing,stuff
:options => "something,valid"; fstab options will be reset to something,valid

With my change

Creation of a new entry

:options => ""; fstab options will be set to an empty string
options not set; fstab options will be set to defaults
:options => "something,valid"; fstab options will be set to something,valid

Updating an existing entry

existing options blank

:options => ""; fstab options will remain an empty string
options not set; fstab options will be set to defaults
:options => "something,valid"; fstab options will be set to something,valid

existing options set to existing,stuff

:options => ""; fstab options will be reset to an empty string
options not set; fstab options will be reset to defaults
:options => "something,valid"; fstab options will be reset to something,valid

So, if someone has an existed fstab entry that has options set to an empty string, this entry is technically unmountable, from what I understand. I agree we shouldn't overwrite options if the fstab is already set to something valid, but what if it isn't? Like the case where it's an empty string? Since that's an existing entry, should we leave it as is, or set it to defaults?

@melissa you are absolutly correct about the current behaviour and the expected behaviour once your patch is applied.
If puppet currently sets options to an empty string (either because options is explicitly set to "" or because puppet creates the resource while options was not set) we are left with an invalid /etc/fstab entry. Because the entry is invalid, Puppet will not be able to parse the entry correctly on any subsequent run. This happens because the field seperator in /etc/fstab is any number of whitespace, so puppet will interpret the dump (the one next to options field) as the options
Example:
Create an fstab entry with no option:
# puppet resource mount /mnt/test device=/dev/test fstype=tmpfs ensure=present
Notice: /Mount[/mnt/test]/ensure: defined 'ensure' as 'defined'

Reread the fstab entry. Notice that options is read as 0 which is actually the dump field:
# puppet resource mount /mnt/test
mount { '/mnt/test':
  ensure  => 'unmounted',
  device  => '/dev/test',
  dump    => '0',
  fstype  => 'tmpfs',
  options => '0',
  target  => '/etc/fstab',
}

The parsing itself is correct, because man fstab states: Each filesystem is described on a separate line.  Fields on  each  line are separated by tabs or spaces.
That beeing said:
Since that's an existing entry, should we leave it as is or set it to defaults? - I'd argue that we should not try to fix an incorrect entry because we wouldn't know how to fix it. If an fstab entry has to have x fields seperated by whitespace and we only find x-1 fields, we cannot say which one is which.
So in short:

setting options explicitly to an empty string should not be allowed (by the validate method of the property). But not setting options at all should be allowed.
setting fstype explicitly to an empty string should not be allowed (by the validate method of the property). Not setting fstype at all should be allowed
when actually writing an entry to fstab we should check that all mandatory fields are set (according to man fstab on Linux, only dump and pass (the last two fields) are allowed to be absent) and either set default values (like your proposal for the options property) or fail.

Does that make sense?

@stschulte Yes, it does. Thank for your the clarification and explanation here! I'll get started on updatting this pull request

Hmm, I'm running into some trouble figuring out the best way to do that. Do you have any advice for me @stschulte ?

Thanks to @haus, I think this is what we want to be doing. I still have to update the tests though.

Alright, I'm running into some trouble with these tests. @joshcooper @Sharpie @stschulte any advice for me on the best way to test this change with rspec?

@melissa I'm :+1: here once the commit messages are in order

@joshcooper and @kylog if either of you have a change, it would be very helpful to get your opinion on this. I believe it's just about wrapped up

I'm :+1:

@stschulte thank you for your guidance on this so far! I'd very much appreciate if you could look over the code, and let us know if you approve or not, and if not, where any changes/improvements should be made.
@mbainter I believe you were the one who originally started this work. Could you take a look at this fix and let me know what you think?

This looks good to me. I'm :+1: .

Looks good here as well.  :+1:


Tidyup g.plot function

I did not create an issue for this as it is relatively minor work:
This PR tidies up the g.plot function:

In some files (Actigraph csv) it was not displaying the non-wear rectangles (yellow/brown) correctly. I think this is because I was using timeline in fractions of days.  I have now rewritten the code to look at epoch number and that seems to have addressed the issue.
Re-ordered code to be more logical.
Tidied up syntax.
Move duplicated code to functions.
Moved GGIR function g.createdcoordinates inside g.plot because that is the only location where the function was used. It is a short function and had not value outside GGIR. So, by moving it we shorten the package tutorial a little bit and have one less function and documentation file.

Checklist before merging:

[ ] Existing tests still work (check by running the test suite, e.g. from RStudio).
[ ] Added tests (if you added functionality) or fixed existing test (if you fixed a bug).
[ ] Updated or expanded the documentation.
[ ] Updated release notes in inst/NEWS.Rd with a user-readable summary. Please, include references to relevant issues or PR discussions.
[ ] Added your name to the contributors lists in the DESCRIPTION and CITATION.cff files.

Everything looks good! Tested in some actigraph csv files and it works as expected. Only minor comments:

Should we plot params_general[["acc.metric"]] instead of ENMO or the first acceleration metric found in IMP?
Should we add a legend to the plot? Although maybe not needed.

Should we plot params_general[["acc.metric"]] instead of ENMO or the first acceleration metric found in IMP?

Sounds good, I propose using the first acceleration metric in IMP as people only use these QC plots as a quick impression of movement. We need to keep a constant y-axis to ease comparing plots. So, maybe the y-axis then needs to be a bit expanded, e.g. 0.0-1.0 g instead of 0.0-0.8 g.

Should we add a legend to the plot? Although maybe not needed.

Yes, because for us it is clear but for new users the plot is probably not intuitive. Let's then clarify non-wear (yellow), additional non-wear (brown), clipping blocks (purple), and segments masked from the data because of study protocol (hashed).

Codecov Report

Merging #614 (ed03b57) into master (c2eacd5) will decrease coverage by 0.00%.
The diff coverage is 67.14%.

@@            Coverage Diff             @@
##           master     #614      +/-   ##
==========================================
- Coverage   72.18%   72.18%   -0.01%
==========================================
  Files          94       93       -1
  Lines       10915    10925      +10
==========================================
+ Hits         7879     7886       +7
- Misses       3036     3039       +3

Impacted Files
Coverage Δ

R/g.plot.R
70.21% <67.14%> (-1.62%)
:arrow_down:

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

I have now updated the code to:

use the first acceleration metric available in the data
show legend
minor updates to font and spacing

Also, I have tested this in both without temperature (Actigraph) and with temperature (GENEActiv).


Add feature for extracting images from pdf and recognizing text from images.

Description
It is for #10423 that it will be a useful feature if we can extract images from pdf and recognize text on them. I have implemented it with PyPDFLoader, PyPDFium2Loader,  PyPDFDirectoryLoader, PyMuPDFLoader, PDFMinerLoader, and PDFPlumberLoader.  RapidOCR is used to recognize text on extracted images.  It is time-consuming for ocr so a boolen parameter extract_images is set to control whether to extract and recognize. I have tested the time usage for each parser on my own laptop thinkbook 14+ with AMD R7-6800H by unit test and the result is:

extract_images
PyPDFParser
PDFMinerParser
PyMuPDFParser
PyPDFium2Parser
PDFPlumberParser

False
0.27s
0.39s
0.06s
0.08s
1.01s

True
17.01s
20.67s
20.32s
19,75s
20.55s

Issue
#10423
Dependencies
rapidocr_onnxruntime in RapidOCR

@eyurtsev @baskaryan would it be possible to have a look at this? It may be a  great feature to add. :)

this is awesome, thank @SuperJokerayo!!


Possible to reference Handle method with <see... and cref?

One very exciting possibility of a source-generated mediator implementation is to ease the pain of tracking down what methods are called by the mediator, at design time. At runtime, step-through debugging makes this a breeze, but at design-time you must parse the generated code and follow a few steps in order to find the handler code, which is not something I want to force on my fellow developers.
Does the source generator know enough context to include an xml comment linking to the handler method? An example of this is the MVVM Community Toolkit source generators for RelayCommands, which generate the following
/// <summary>Gets an <see cref="global::CommunityToolkit.Mvvm.Input.IAsyncRelayCommand"/> instance wrapping <see cref="Initialize"/>.</summary>
public global::CommunityToolkit.Mvvm.Input.IAsyncRelayCommand InitializeCommand => initializeCommand ??= new global::CommunityToolkit.Mvvm.Input.AsyncRelayCommand(new global::System.Func<global::System.Threading.Tasks.Task>(Initialize));

This pattern has helped immensely to decouple our code, but it would be nice to have our cake and eat it to - the analyzers for unhandled messages and command are another huge usability bump!

Interesting, yeah sounds like a good idea :+1:


Ws connection failed (localhost, docker)

Describe the bug
The ws connection from angular app on port 3000 doesn't work (connection failed)
To Reproduce
Steps to reproduce the behavior:

Launch the docker container
Launch angular application
See error printed on browser console

Expected behavior
Connection established on local port 3000 as of original mapping on docker compose definition

Nevermind, i did a rework on my personal forks on both sides to make it work.
I have excluded docker for all things except the postgresql

Issue closed


[IT] - DRAFT - Testing Changes

Testing fixes from malorezzanzo64 work
DO NOT MERGE

No easy task. Every conflict needs manual review. I'll do this on the original PR.


Some minor clean-up for router-service conversions

Some fairly minor suggestions related to #278.

Nice! Thanks @travisbrown!


How to create multiple global keys for the flutter-tags?

How to create multiple global keys for the flutter-tags?
If i try to create i get:
"
I/flutter (16281): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter (16281): The following assertion was thrown while finalizing the widget tree:
I/flutter (16281): Duplicate GlobalKey detected in widget tree.
I/flutter (16281): The following GlobalKey was specified multiple times in the widget tree. This will lead to parts of
I/flutter (16281): the widget tree being truncated unexpectedly, because the second time a key is seen, the previous
I/flutter (16281): instance is moved to the new location. The key was:
I/flutter (16281): - [LabeledGlobalKey#f8617]
I/flutter (16281): This was determined by noticing that after the widget with the above global key was moved out of its
I/flutter (16281): previous parent, that previous parent never updated during this frame, meaning that it either did
I/flutter (16281): not update at all or updated before the widget was moved, in either case implying that it still
I/flutter (16281): thinks that it should have a child with that global key.
I/flutter (16281): The specific parent that did not update after having one or more children forcibly removed due to
I/flutter (16281): GlobalKey reparenting is:
I/flutter (16281): - Column(direction: vertical, mainAxisAlignment: start, crossAxisAlignment: center, renderObject:
I/flutter (16281): RenderFlex#0d732 relayoutBoundary=up1 NEEDS-PAINT)
I/flutter (16281): A GlobalKey can only be specified on one widget at a time in the widget tree.
"
════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
The following assertion was thrown while finalizing the widget tree:
Multiple widgets used the same GlobalKey.
The key [LabeledGlobalKey#f8617] was used by multiple widgets. The parents of those widgets were:

Column(direction: vertical, mainAxisAlignment: start, crossAxisAlignment: center, renderObject: RenderFlex#0d732 relayoutBoundary=up1 NEEDS-PAINT)
Column(direction: vertical, mainAxisAlignment: start, crossAxisAlignment: center, renderObject: RenderFlex#0cfc5 relayoutBoundary=up1 NEEDS-PAINT)
A GlobalKey can only be specified on one widget at a time in the widget tree.
When the exception was thrown, this was the stack:
#0      GlobalKey._debugVerifyGlobalKeyReservation... (package:flutter/src/widgets/framework.dart:246:13)
#1      _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:379:8)
#2      GlobalKey._debugVerifyGlobalKeyReservation.. (package:flutter/src/widgets/framework.dart:193:19)
#3      _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:379:8)
#4      GlobalKey._debugVerifyGlobalKeyReservation. (package:flutter/src/widgets/framework.dart:189:26)

OR instead use the  in a localkey

hi @Lix-ai, could you please share the code?


Vickel: Watch srisasthabuilders.com

Vickel requests the watch of the watch_keyword srisasthabuilders\.com. See the MS search here and the Stack Exchange search in text, in URLs, and in code.

Approved by Jeff Schaller in Charcoal HQ

srisasthabuilders\.com has been seen in 1 true positive, 0 false positives, and 0 NAAs.


Rename McLTT modules into McTT

Although the repo itself is renamed, there are some leftover "McLTT"s in this codebase.
They should be renamed.

also remember to change the hintdb to mctt as well.

#262 changed the main branch. Now we need to port the change into ext/prop-eq branch (which is probably even less complex, as infra-related changes are all done in that PR).

A merge will handle almost everything, no?

https://github.com/Beluga-lang/McTT/blob/2f662c95703ceb3766a2cc57a4a592ba4f349ec2/theories/Makefile#L46-L47
leftover
What is this? is it still needed?

@HuStmpHrrr Oh, yes. That's a helper target (which generates _CoqProject automatically). I will update that one as well.

@HuStmpHrrr
A merge will handle almost everything, no?

For example, _CoqProject added some modules, so we need to change them to use Mctt.


TripAdvisor Scrapper

Description
Fetching details regarding hotels based on URL. Added description in documentation
Resolves: #591
Checklist

Before submitting this pull request, kindly verify that the ensuing checkpoints have been reached.

[x] Have you adhered to the repository's defined coding convention rules?
[x] Have you updated the 'documentation.md' file with the method/function documentation?
[x] Have you sent a message along with the result or response?
[x] Have you used the try-catch technique?
[x] Has the method/class been added to the documentation (md file)?

Screenshots

Additional Notes/Comments

Any additional remarks or suggestions concerning this pull request are welcome.

I certify that I have carried out the relevant checks and provided the requisite screenshot for validation by submitting this pull request.
I appreciate your contribution.

Great work @Juhibhojani !!
Do not forget to

Share your contribution on socials(twitter mainly), tag us and Clueless 🫂
Give this repository a star ✨
Follow Clueless Community on GitHub ✅


Modules: don't assume that FindOpenSSL version regex finds something.

Makes the find module work with BoringSSL, which doesn't have the info in the opennslv.h header: https://github.com/google/boringssl/blob/82d0ffbac1a892e23b63d055b67b7d93e489af3e/include/openssl/opensslv.h

Thanks.  Applied as commit e937b4c3879e1ee0770b465c0cdcbb6a960ba892.


Added motr contributer

Thanks @bansisoni .  The whole reason we are doing this is because we want to grow our contributor number in our parent repo which is our most visible repo.  So submitting multiple names in one PR defeats that purpose.  :)

Thanks @bansisoni .  The whole reason we are doing this is because we want to grow our contributor number in our parent repo which is our most visible repo.  So submitting multiple names in one PR defeats that purpose.  :)


New version

I uploaded a new exe version here:
shorturl.at/inpU6

Invest your time by reading my previous response, I told you to read what PR is.
Next time your threads will be closed / blocked if you continue that.

whatever, a bot account


generate references to load scripts in packages

Implements #3325

A test is failing, I'm pretty sure it's unrelated as it fails for me on my local machine using the .paket/paket.exe used by this repo
Paket.IntegrationTests.InstallSpecs.#3062 install should use external azure functions v1 lock file from http Paket.IntegrationTests.dll 4 sec 225 ms

Error:
     Conflict detected:
      - External "azurefunctions-v1-packet.lock" requested package System.Buffers: 4.0
      - System.IO.Compression 4.3.0 requested package System.Buffers: >= 4.3

     Please try to relax some conditions or resolve the conflict manually (see http://fsprojects.github.io/Paket/nuget-dependencies.html#Use-exactly-this-version-constraint).

Yes please ignore that test, it is broken for some time and needs to be fixed by @forki ;)

Yes please ignore that test, it is broken for some time and needs to be fixed by @forki ;)

Thanks, labelled it as flaky

Looks like Travis CI is pretty flaky too.  Can we move off Mono 5.4 to something a bit more modern?

I'm fine with mono update. But usually just random other stuff breaks
Don Syme<EMAIL_ADDRESS>schrieb am So., 5. Aug. 2018, 14:34:

Looks like Travis CI is pretty flaky too. Can we move off Mono 5.4 to
something a bit more modern?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/fsprojects/Paket/pull/3326#issuecomment-410517321,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AADgNJvJ2CuBpwI-NU_lYvpnpoK_ACA5ks5uNuZYgaJpZM4VvE4z
.


I tried improving the component structure

I tried improving the project by extracting components and helper functions. This is may improve the reusability

This may conflict with #45. If one of them is merged i will take a look at the other one :)


Websocket hangs when calling iris.WebsocketConnection.Leave() on Disconnect (retested)

platform: Windows 10
I retested the problem mentioned in the caption with the following program and found that the problem still exists in the current release and also v0.0.3.  Actually the demo code below illustrates two problems. Here is a brief description of how to reproduce them:

The source code below is a single program that can be used as client or server.
To run as server, you may simply run: "go run main.go server". The server will receive connection and handle requests as it is. Here is a dump of the sample console message that the server will output:
C:\Users\User\Projects\Go\src\gp2\src\gp2\wsserver>go run main.go server
_____      _
| |    ()
| |  ____ _  ___
| | | || |/ |
| || |  | |_
|||  |||_/ 4

Mon, 23 Jan 2017 23:36:22 GMT: Running at <IP_ADDRESS>:9090
socket.OnConnect()
OnObjectUpdated() message:2;all;2.UsrSchedule_v1_1, time taken: 0s
OnObjectUpdated() message:2;all;2.UsrSchedule_v1_1, time taken: 0s
OnObjectUpdated() message:2;all;2.UsrSchedule_v1_1, time taken: 0s
OnObjectUpdated() message:2;all;2.UsrSchedule_v1_1, time taken: 0s
OnDisconnect(): client disconnected!
socket.OnConnect()
OnObjectUpdated() message:2;all;2.UsrSchedule_v1_1, time taken: 0s
OnDisconnect(): client disconnected!
socket.OnConnect()
OnJoin() time taken: 0s
OnObjectUpdated() message:2;all;2.UsrSchedule_v1_1, time taken: 0s
OnObjectUpdated() message:2;all;2.UsrSchedule_v1_1, time taken: 0s
OnDisconnect(): client disconnected!_

To run as client, you may simply run: "go run main.go client". It will connect to the server and keep sending and receiving messages. You can disconnect it after running for 10 seconds by killing this process. The client will output to console something like this:

C:\Users\User\Projects\Go\src\gp2\src\gp2\wsserver>go run main.go client
objectupdate 1
2017-01-23 23:37:17.9047114 +0800 CST Received: go-websocket-message:objectupdate;0;2.UsrSchedule_v1_1.1
objectupdate 2
2017-01-23 23:37:19.9070407 +0800 CST Received: go-websocket-message:objectupdate;0;2.UsrSchedule_v1_1.2
exit status 2

If you repeat step 3, everything is fine. I mean, the server is able to handle the new client connection without problem, because OnDisconnect will not call c.Leave()

Uncomment the line 163: "// c.Leave("server2")" to  "c.Leave("server2")" and run the server again. This time, the server will only be able to handle client request once. If the client disconnects, the server will still accept incoming connection, but will not be able to respond message anymore.

Apart from the problem mentioned above, I also notice that the server will not respond to message that are sent immediately after connection established. Take a look the following function in main.go. If you comment the line 104 "time.Sleep(time.Second)", you will see that the server will not respond to the "join" request. Yet, messages after that are handled without problem.

func ClientLoop() {
	for {
		time.Sleep(time.Second)
		err := ConnectWebSocket()
		if err != nil {
			fmt.Println("failed to connect websocket", err.Error())
			continue
		}
		time.Sleep(time.Second)
		err = SendMessage("2", "all", "join", "dummy2")
		go sendUntilErr(2)
		recvUntilErr()
		err = CloseWebSocket()
		if err != nil {
			fmt.Println("failed to close websocket", err.Error())
		}
	}

}

// main.go: the testing program. This is line 1
package main

import (
	"fmt"
	"os"
	"strings"
	"time"

	"github.com/kataras/iris"

	"golang.org/x/net/websocket"
)

// WS is the current websocket connection
var WS *websocket.Conn

func main() {
	if len(os.Args) == 2 && strings.ToLower(os.Args[1]) == "server" {
		ServerLoop()
	} else if len(os.Args) == 2 && strings.ToLower(os.Args[1]) == "client" {
		ClientLoop()
	} else {
		fmt.Println("wsserver [server|client]")
	}
}

/////////////////////////////////////////////////////////////////////////
// client side
func sendUntilErr(sendInterval int) {
	i := 1
	for {
		time.Sleep(time.Duration(sendInterval) * time.Second)
		err := SendMessage("2", "all", "objectupdate", "2.UsrSchedule_v1_1")
		if err != nil {
			fmt.Println("failed to send join message", err.Error())
			return
		}
		fmt.Println("objectupdate", i)
		i++
	}
}

func recvUntilErr() {
	var msg = make([]byte, 2048)
	var n int
	var err error
	i := 1
	for {
		if n, err = WS.Read(msg); err != nil {
			fmt.Println(err.Error())
			return
		}
		fmt.Printf("%v Received: %s.%v\n", time.Now(), string(msg[:n]), i)
		i++
	}

}

//ConnectWebSocket connect a websocket to host
func ConnectWebSocket() error {
	var origin = "http://localhost/"
	var url = "ws://localhost:9090/socket"
	var err error
	WS, err = websocket.Dial(url, "", origin)
	return err
}

// CloseWebSocket closes the current websocket connection
func CloseWebSocket() error {
	if WS != nil {
		return WS.Close()
	}
	return nil
}

// SendMessage broadcast a message to server
func SendMessage(serverID, to, method, message string) error {
	buffer := []byte(message)
	return SendtBytes(serverID, to, method, buffer)
}

// SendtBytes broadcast a message to server
func SendtBytes(serverID, to, method string, message []byte) error {
	buffer := []byte(fmt.Sprintf("go-websocket-message:%v;0;%v;%v;", method, serverID, to))
	buffer = append(buffer, message...)
	_, err := WS.Write(buffer)
	if err != nil {
		fmt.Println(err)
		return err
	}
	return nil
}

// ClientLoop connects to websocket server, the keep send and recv dataS
func ClientLoop() {
	for {
		time.Sleep(time.Second)
		err := ConnectWebSocket()
		if err != nil {
			fmt.Println("failed to connect websocket", err.Error())
			continue
		}
		time.Sleep(time.Second)
		err = SendMessage("2", "all", "join", "dummy2")
		go sendUntilErr(2)
		recvUntilErr()
		err = CloseWebSocket()
		if err != nil {
			fmt.Println("failed to close websocket", err.Error())
		}
	}

}

/////////////////////////////////////////////////////////////////////////
// server side

// OnConnect handles incoming websocket connection
func OnConnect(c iris.WebsocketConnection) {
	fmt.Println("socket.OnConnect()")
	c.On("join", func(message string) { OnJoin(message, c) })
	c.On("objectupdate", func(message string) { OnObjectUpdated(message, c) })
	c.OnDisconnect(func() { OnDisconnect(c) })

}

// ServerLoop listen and serve websocket requests
func ServerLoop() {
	// // the path which the websocket client should listen/registed to ->
	iris.Config.Websocket.Endpoint = "/socket"
	iris.Websocket.OnConnection(OnConnect)
	iris.Listen("<IP_ADDRESS>:9090")

}

// OnJoin handles Join broadcast group request
func OnJoin(message string, c iris.WebsocketConnection) {
	t := time.Now()
	c.Join("server2")
	fmt.Println("OnJoin() time taken:", time.Since(t))
}

// OnObjectUpdated broadcasts to all client an incoming message
func OnObjectUpdated(message string, c iris.WebsocketConnection) {
	t := time.Now()
	s := strings.Split(message, ";")
	if len(s) != 3 {
		fmt.Println("OnObjectUpdated() invalid message format:" + message)
		return
	}
	serverID, _, objectID := s[0], s[1], s[2]
	err := c.To("server"+serverID).Emit("objectupdate", objectID)
	if err != nil {
		fmt.Println(err, "failed to broacast object")
		return
	}
	fmt.Println(fmt.Sprintf("OnObjectUpdated() message:%v, time taken: %v", message, time.Since(t)))
}

// OnDisconnect clean up things when a client is disconnected
func OnDisconnect(c iris.WebsocketConnection) {
	// c.Leave("server2")
	fmt.Println("OnDisconnect(): client disconnected!")

}

I have fixed the c.Leave() when disconnected and I was able to send messages too from a new client connection, but this is not the problem you should never call connection functions after Disconnect, it's auto-leaving from all rooms.
BUT I have the feeling that your bug report is something different, it's caused by buffered channel send and receive, I have more experience that I had when I started this library, so I think I'm able to fix all these problems by removing the channel type of code and use locks which will win us some performance boost also, I'll notice you when I finish the conversion in order to test your code again ok?

As we already noticed, the c.OnDisconnect is to release any external resources ( example: a list of connected clients) and not to call its internal methods, as c.Leave because it leaves from all connected rooms when is disconnected automatically. By the way I have tested the c.Leave on c.OnDisconnect and it seems to work (on browser as client) and we were able to send messages and put more clients online, so the term hanging on c.Leave inside c.OnDisconnect I think it's wrong, but I'm open to look it further if you can share us the code that you're using (the current code doesn't shows me anything and I can't reproduce your issue).
BUT, I will investigate that and probably will change the internal way of passing messages and events across the websocket server. I'll notify you when you will be able to re-run your code to verify the results :)

Thanks for your prompt reply! Actually I wrote the source code above as simple tester to isolate the two problems without other library. (I just dunno why the tab formatting of it doesnt work here). I can reproduce the problem with this piece of source on windows 10. Yet, I think the problems may not appear in every platform, or especially the one that causes message lost.

@antlaw I have changed the code (in my computer) and works faster and better organized but... you know what I just remember? I created this library mostly because Iris was depended(v2,v3,v4, v5) on the fasthttp and not the golang stdlib net/http. But now (after 2 Jan 2017) Iris is based on net/http so I though.. why should we need a different websocket library for Iris ? gorilla websocket is not an option by itself but I remembered a library I used to use:  socket.io which supports lower protocols also, so why we need this library now..?

@antlaw On github you have to follow the markdown syntax, I am assuming that you are a fan of stackoverflow, right?  :) for example to create a code snippet for go you use:
```go

my code here

for html:

for general highlighting:
one-line:  my one line highlight
multiline:
multiline
general-purpose highlight

@antlaw On github you have to follow the markdown syntax, I am assuming that you are a fan of stackoverflow, right?  :)
I converted the code on my computer but I am not pushing yet to the repository because I'm thinking that for new iris versions we should just use the socket.io instead of kataras/go-websocket which is only-websocket library. I created this library because these days (on iris v2 -> iris v5) no one else did a fasthttp supported websocket library, but now Iris is based on new net/http so why I should continue 're-create the world' while other libraries for websockets (and other protocols) exists already?

Pause the development of go-websocket is just fine, coz I agree with u that there is no point to re-invent the wheel. I, from a user point of view, concern about is how to to work socket.io with iris together. Says, if there is an example to show a server can use IRIS to listen http and use socket.io for websocket, that should be good enough for us to migrate the existing codes.

@antlaw You don't need a special example (Although I will add an example of this on iris-contrib/examples too*)  of using socket.io with new Iris version, their websocket server is just exporting an http.Handler (as kataras/go-websocket does),
which can be registered using iris.ToHandler like other external net/http middleware that already exists , look:
package main

import (
    "log"
    "github.com/kataras/iris"
    "github.com/googollee/go-socket.io" // the socket.io lib
)

func main() {
    server, err := socketio.NewServer(nil)
    if err != nil {
        log.Fatal(err)
    }
    server.On("connection", func(so socketio.Socket) {
        log.Println("on connection")
        so.Join("chat")
        so.On("chat message", func(msg string) {
            log.Println("emit:", so.Emit("chat message", msg))
            so.BroadcastTo("chat", "chat message", msg)
        })
        so.On("disconnection", func() {
            log.Println("on disconnect")
        })
    })
    server.On("error", func(so socketio.Socket, err error) {
        log.Println("error:", err)
    })

    // register the handler, to the endpoint,
    // convert the websocket server (which is http.Handler) to iris.Handler
    // using the iris.ToHandler func helper.
    iris.Any("/my_endpoint", iris.ToHandler(server))

    iris.Listen(":8080")
}

Test that and tell me the results, its client side it's the socket.io library you already know, for more info go there: https://github.com/googollee/go-socket.io .
I'll push the new changes to this repo and for the last time I will ask you to re-run your code to tell me if the bug you mentioned is fixed,  please stay tuned, kataras/go-websocket is not dead until we fix the bug :)

Sure. Tested both problems. Here is the result:

The problem of c.Leave() is fixed. That means the following works without problem.

// OnDisconnect clean up things when a client is disconnected
func OnDisconnect(c iris.WebsocketConnection) {
	c.Leave("server2")
	fmt.Println("OnDisconnect(): client disconnected!")

}

If client sends message to server immediately after connection, the server will not handle it. (same as before).

One more thing, if I use IRIS 5, problem 1 will still be there.

Yes, iris v5 uses the kataras/go-weboskcet 0.0.3 tag, I will solve that in a minute, I just finished with the cors middleware and a cors router plugin, sorry for late.
But I don't understand the 2. , if client sends a message to the server after connection closed what do you expect to happens?

Yes, iris v5 uses the kataras/go-websocket 0.0.3 tag, I will solve that in a minute, I just finished with the cors middleware and a cors router plugin, sorry for late.
But I don't understand the 2. , if client sends a message to the server after connection closed what do you expect to happens?

I expect that every message sent from client should be received by the server successfully, if there is no network problem. In the code below, the message sent by the line "err = SendMessage("2", "all", "join", "dummy2") will not be received by the server, unless I uncomment the line //time.Sleep(time.Second).
''' go
// ClientLoop connects to websocket server, the keep send and recv dataS
func ClientLoop() {
for {
time.Sleep(time.Second)
err := ConnectWebSocket()
if err != nil {
fmt.Println("failed to connect websocket", err.Error())
continue
}
//time.Sleep(time.Second)
err = SendMessage("2", "all", "join", "dummy2")
go sendUntilErr(2)
recvUntilErr()
err = CloseWebSocket()
if err != nil {
fmt.Println("failed to close websocket", err.Error())
}
}
}

Here you're sending the message before websocket close and closing the connection immediately, are you sure that is this a 'server-side' issue and not client-side issue? We don't have a golang client-side specific library for kataras/go-websocket, so I am assuming that you're using the gorilla's one?

The function recvUntilErr() will receive messages until disconnection. You may refer the source of the whole testing program to the first message in this thread. Here is recvUntilErr() :
func recvUntilErr() {
	var msg = make([]byte, 2048)
	var n int
	var err error
	i := 1
	for {
		if n, err = WS.Read(msg); err != nil {
			fmt.Println(err.Error())
			return
		}
		fmt.Printf("%v Received: %s.%v\n", time.Now(), string(msg[:n]), i)
		i++
	}

}

Yes but we don't have an WS.Read function anywhere, I can't understand what it's doing under the hoods. I have to see your internal golang client source, I can't be sure what's going on if I don't have something to investigate and to test on

Yes but we don't have an WS.Read function anywhere, I can't understand what it's doing under the hoods. I have to see your internal golang client source, I can't be sure what's going on if I don't have something to investigate and to test on.
Could you please make a private or public repository with an example which re-produces the issue and share the link with me in order to have a shared source code base of the problem? Thanks for your time!

Yes but we don't have an WS.Read function anywhere (I assuming that you use the gorrila's one, but I aksed before and I didn't get an answer, so I am not sure what lib or self-code you use for your client-side) , I can't understand what it's doing under the hoods. I have to see your internal golang client source, I can't be sure what's going on if I don't have something to investigate and to test on.
Could you please make a private or public github repository with an example which re-produces the issue and share the link with me in order to have a shared source code base of the problem? And I promise you that the issue will be solved very fast with this way. Thanks for your time!

Yes but we don't have an WS.Read function anywhere (I can see from the previous comment that you use the "golang.org/x/net/websocket" but why? go-websocket is based on gorilla 's implementation not x/net/websocket's ) , I can't understand what it's doing under the hoods. I have to see your internal golang client source, I can't be sure what's going on if I don't have something to investigate and to test on.
Could you please make a private or public github repository with a gorilla/websocket client-side + kataras/go-websocket server-side example which re-produces the issue and share the link with me in order to have a shared source code base of the problem? And I promise you that the issue will be solved very fast with this way. Thanks for your time!

Yes but we don't have an WS.Read function anywhere (I can see from the previous comment that you use the "golang.org/x/net/websocket" but why? go-websocket is based on gorilla 's implementation not x/net/websocket's ) , I can't understand what it's doing under the hoods. I have to see your internal golang client source, I can't be sure what's going on if I don't have something to investigate and to test on.
Could you please make a private or public github repository with a gorilla/websocket client-side + kataras/go-websocket server-side example which re-produces the issue (because I wasn't able to reproduce that) and share the link with me in order to have a shared source code base of the problem? And I promise you that the issue will be solved very fast with this way. Thanks for your time!

Yes but we don't have an WS.Read function anywhere. I can see from the previous comment that you use the "golang.org/x/net/websocket" but why? go-websocket is based on gorilla 's implementation not x/net/websocket's . I don't know the implementation of /x/net/websocket but I have read a lot of comments that it has many bugs and it is not recommended for use, so maybe it's not kataras/go-websocket issue.
I can't be sure what's going on if I don't have something to investigate and to test on.
Could you please make a private or public github repository with a gorilla/websocket client-side + kataras/go-websocket server-side example which re-produces the issue (because I wasn't able to reproduce that) and share the link with me in order to have a shared source code base of the problem? And I promise you that the issue will be solved very fast with this way. Thanks for your time!

Yes, I cannot 100% sure the problem is from the server, but my original client is written in c#, and I encountered the problem. I tried a couple of things and experienced that if the client wait for 500ms or so before sending the first message, the problem will not occur anymore. Then I write the tester program (source code below) and found that a simple golang client will also hit the same problem as well. Therefore, I suspect that the problem is from the server.
I am not familarize with posting on public github repository, so I'd rather post it here. You can see that the client is using "golang.org/x/net/websocket".
To run the program is easy:

go run main.go server  // it will listen and process incoming request.
go run main.go client  // it will connect the server, join a broadcast group, and keep sending/receiving data.

package main

import (
	"fmt"
	"os"
	"strings"
	"time"

	"github.com/kataras/iris"

	"golang.org/x/net/websocket"
)

// WS is the current websocket connection
var WS *websocket.Conn

func main() {
	if len(os.Args) == 2 && strings.ToLower(os.Args[1]) == "server" {
		ServerLoop()
	} else if len(os.Args) == 2 && strings.ToLower(os.Args[1]) == "client" {
		ClientLoop()
	} else {
		fmt.Println("wsserver [server|client]")
	}
}

/////////////////////////////////////////////////////////////////////////
// client side
func sendUntilErr(sendInterval int) {
	i := 1
	for {
		time.Sleep(time.Duration(sendInterval) * time.Second)
		err := SendMessage("2", "all", "objectupdate", "2.UsrSchedule_v1_1")
		if err != nil {
			fmt.Println("failed to send join message", err.Error())
			return
		}
		fmt.Println("objectupdate", i)
		i++
	}
}

func recvUntilErr() {
	var msg = make([]byte, 2048)
	var n int
	var err error
	i := 1
	for {
		if n, err = WS.Read(msg); err != nil {
			fmt.Println(err.Error())
			return
		}
		fmt.Printf("%v Received: %s.%v\n", time.Now(), string(msg[:n]), i)
		i++
	}

}

//ConnectWebSocket connect a websocket to host
func ConnectWebSocket() error {
	var origin = "http://localhost/"
	var url = "ws://localhost:9090/socket"
	var err error
	WS, err = websocket.Dial(url, "", origin)
	return err
}

// CloseWebSocket closes the current websocket connection
func CloseWebSocket() error {
	if WS != nil {
		return WS.Close()
	}
	return nil
}

// SendMessage broadcast a message to server
func SendMessage(serverID, to, method, message string) error {
	buffer := []byte(message)
	return SendtBytes(serverID, to, method, buffer)
}

// SendtBytes broadcast a message to server
func SendtBytes(serverID, to, method string, message []byte) error {
	buffer := []byte(fmt.Sprintf("go-websocket-message:%v;0;%v;%v;", method, serverID, to))
	buffer = append(buffer, message...)
	_, err := WS.Write(buffer)
	if err != nil {
		fmt.Println(err)
		return err
	}
	return nil
}

// ClientLoop connects to websocket server, the keep send and recv dataS
func ClientLoop() {
	for {
		time.Sleep(time.Second)
		err := ConnectWebSocket()
		if err != nil {
			fmt.Println("failed to connect websocket", err.Error())
			continue
		}
		time.Sleep(time.Second)
		err = SendMessage("2", "all", "join", "dummy2")
		go sendUntilErr(2)
		recvUntilErr()
		err = CloseWebSocket()
		if err != nil {
			fmt.Println("failed to close websocket", err.Error())
		}
	}

}

/////////////////////////////////////////////////////////////////////////
// server side

// OnConnect handles incoming websocket connection
func OnConnect(c iris.WebsocketConnection) {
	fmt.Println("socket.OnConnect()")
	c.On("join", func(message string) { OnJoin(message, c) })
	c.On("objectupdate", func(message string) { OnObjectUpdated(message, c) })
	c.OnDisconnect(func() { OnDisconnect(c) })

}

// ServerLoop listen and serve websocket requests
func ServerLoop() {
	// // the path which the websocket client should listen/registed to ->
	iris.Config.Websocket.Endpoint = "/socket"
	iris.Websocket.OnConnection(OnConnect)
	iris.Listen("<IP_ADDRESS>:9090")

}

// OnJoin handles Join broadcast group request
func OnJoin(message string, c iris.WebsocketConnection) {
	t := time.Now()
	c.Join("server2")
	fmt.Println("OnJoin() time taken:", time.Since(t))
}

// OnObjectUpdated broadcasts to all client an incoming message
func OnObjectUpdated(message string, c iris.WebsocketConnection) {
	t := time.Now()
	s := strings.Split(message, ";")
	if len(s) != 3 {
		fmt.Println("OnObjectUpdated() invalid message format:" + message)
		return
	}
	serverID, _, objectID := s[0], s[1], s[2]
	err := c.To("server"+serverID).Emit("objectupdate", objectID)
	if err != nil {
		fmt.Println(err, "failed to broacast object")
		return
	}
	fmt.Println(fmt.Sprintf("OnObjectUpdated() message:%v, time taken: %v", message, time.Since(t)))
}

// OnDisconnect clean up things when a client is disconnected
func OnDisconnect(c iris.WebsocketConnection) {
	c.Leave("server2")
	fmt.Println("OnDisconnect(): client disconnected!")

}

OK, this is very helpful, I'll start to see what's going on, in the meanwhile stay online please because I may ask you some questions, thanks for sharing!

It's running well, can you tell me what code you comment and it's failing because I tried to comment these:
	// THIS:	time.Sleep(time.Second)
		err := ConnectWebSocket()
		if err != nil {
			fmt.Println("failed to connect websocket", err.Error())
			continue
		}
		// AND THIS time.Sleep(time.Second)

and the app was running and sending messages as expected, maybe I didn't understand the issue, could you explain it with comments in the code please?

When the client connects to the server, you can see that the server outputs something like this:
...
Sat, 28 Jan 2017 01:21:21 GMT: Running at <IP_ADDRESS>:9090
socket.OnConnect()
OnJoin() time taken: 0s
OnObjectUpdated() message:2;all;2.UsrSchedule_v1_1, time taken: 0s
OnObjectUpdated() message:2;all;2.UsrSchedule_v1_1, time taken: 0s
OnObjectUpdated() message:2;all;2.UsrSchedule_v1_1, time taken: 0s
OnDisconnect(): client disconnected!
If you see the line "OnJoin() time taken...", that means the server is able to receive the first message from the client. "OnObjectUpdated() message:2" are subsequent messages received.
OK, when u comment the second time.Sleep() in the ClientLoop() and run the client again, the server console will not output "OnJoin() time taken...", yet it is able receive the subsequent messages.
// ClientLoop connects to websocket server, the keep send and recv dataS
func ClientLoop() {
	for {
		time.Sleep(time.Second)
		err := ConnectWebSocket()
		if err != nil {
			fmt.Println("failed to connect websocket", err.Error())
			continue
		}
                // comment the line below will trigger the bug
		//time.Sleep(time.Second)
		err = SendMessage("2", "all", "join", "dummy2")
		go sendUntilErr(2)
		recvUntilErr()
		err = CloseWebSocket()
		if err != nil {
			fmt.Println("failed to close websocket", err.Error())
		}
	}

}

Yes... I can see it now, so the join (which also is just a websocket custom message) is injected by other writer (the emitter to all), right?

There are only two kind of messages:

Join request. It tells the server that the client wants to join a broadcast group.
Object Update. It tells the server that "I have an object updated". The server will broadcast this message to the broadcast group. Therefore, once the client sends object update, it will receive the same message broadcast from the server.

I guess that you may now figure out the logic behind: if the join request is missed somehow, the client will not receive broadcast from server. Then, in the client side, you can only see that it keeps sending message to server, but nothing can be received, because it fails to join the broadcast group.

Good morning, I just woke up, sorry for late but I had to sleep I was too tired.
Yes I see the problem now, I missed it at the first place  because I though it has to do with the disconnect message and no the join.

Good morning, I just woke up, sorry for late but I had to sleep I was too tired.
Yes I see the problem now, so the issue is not the title described, websocket doesn't hangs ever. I missed it at the first place  because I though it has to do with the disconnect message and no the join.

Good morning, I just woke up, sorry for late but I had to sleep I was too tired.
Yes I see the problem now, so the real/primary issue is not the title described, websocket doesn't hangs ever. I missed it at the first place  because I though it has to do with the disconnect message and no the join.

OK, some results:

I opened about 20 terminal windows (with no wait to send the first message) and I get more weird concurrent error message( yes... and I am protecting the code with locks correctly) it seems that I missed a step when I read the code of gorilla websocket, they do not have mutex on websocket connection.write method I though that this is managed internally but it doesn't, so i fix that

I understand where's the problem, it's what we both can imagine, the client connects, receives a connected signal and start sending messages but the server's OnConnection is not fired immediately because we should make some things first to the connection (join to a room of it self, start pinger, start reader). If I change the order and put the fireOnConnection it will work as expected, because your event now catches the "join" event immediately, but this is not the solution I want. I must find a way to make a list of pending messages and when all are ready then the OnConnection will get the correct pending events

OK, Finally. It should be fixed now. The issue was the ping handler, I set it and change the order of the events, (both "On" and "Emit" works as before without issue*)
I tested it with 800 clients start running at the same exactly time, I fixed also a bug on writer.
Please verify that it works as expected :)

Thanks very much for your prompt response. Yes, I rerun the test program and confirm that both problems are fixed.
btw, do u know how many clients a web socket server can handle concurrently? I understand that this question is not a good one as that depends on the hardware configuration of the server and also the message rate. Put it this way: how many concurrent clients do you think it can handle?  (I read a blog saying that the writer has tested a single server can handle 600K concurrent clients with 1 message/sec and it occupied about 64Gb Ram.)

Thank you for your report, you really helped me to solve that, it was bigger than I originally thought!!!
As for your question, do not trust blogs about these things because it depends on many variables around your app. There is not so-much software limit to that (for the kataras/go-websocket and iris) but if you use channels in your app it depends on how much capacity your buffered will be

Thank you for your report, you really helped me to solve that, it was bigger than I originally thought!!!
As for your question, do not trust blogs about these things because it depends on many variables around your app. There is not so-much software limit to that (for the kataras/go-websocket and iris) but if you use channels in your app it depends on how much capacity your buffers will be. Most go (websocket+http) apps can handle very much large number of connections without the need of making something special. If it goes to a space that your server can't handle more and it leaks then you have two options: horizontal scale (different machines) or vertical (same machine but better hardware), and if you think that your code is the problem then search for it, it depends I can't really help you without a real-world example of your live-app :/

Thank you for your report, you really helped me to solve that, it was bigger than I originally thought!!!
As for your question, do not trust blogs about these things because it depends on many variables around your app. There is not so-much software limit to that (for the kataras/go-websocket and iris) but if you use channels in your app it depends on how much capacity your buffers will be. Most go (websocket+http) apps can very much large number of connections without the need of making something special, go is really fast on that field comparing to other solutions. If it goes to a space that your server can't handle more and it leaks then you have two options: horizontal scale (different machines) or vertical (same machine but better hardware), and if you think that your code is the problem then search for it, it depends I can't really help you without a real-world example of your live-app :/

Thank you for your report, you really helped me to solve that, it was bigger than I originally thought!!!
As for your question, do not trust blogs about these things because it depends on many variables around your app. There is not so-much software limit to that (for the kataras/go-websocket and iris) but if you use channels in your app it depends on how much capacity your buffers will be. Most go (websocket+http) apps can very much large number of connections without the need of making something special, go is really fast on that field comparing to other solutions( I think this is the answer to your question). If it goes to a space that your server can't handle more and it leaks then you have two options: horizontal scale (different machines) or vertical (same machine but better hardware), and if you think that your code is the problem then search for it, it depends I can't really help you without a real-world example of your live-app :/

Welcome. That's the way I can also contribute to the IRIS community. If you find that the test program is useful as an example, please feel free to put it as one of the IRIS example.
Correct me if I am wrong: websocket + http is horizontally scalable if the solution does not require broadcast capability. Imagine that we are going to create a real time map in game, where a user's realtime activity will be broadcasted to nearby users. If we have multiple websocket servers and they do not connect to each other, we will encounter a case that an update cannot be broadcasted to all nearby users, because they are served by different websocket servers.  To solve the problem, I can only think of a two-layer arhitecture: create a parent Websocket server and all others are connected to it. Every broadcast message will be passed to the parent server, which will then be broadcasted to all other web socket servers. Such a solution is workable, but not elegant enough.

If you find that the test program is useful as an example, please feel free to put it as one of the IRIS example.

I already did that on my local computer (:P), I'll commit the changes to the iris-contrib/examples repo too with your name below, but you can do a PR if you feel that you have time here.

create a parent Websocket server and all others are connected to it.

That's one solution but you don't win a lot because that server will have the same traffic and processes if it contains the full logic, a thing like this to work should have the minimal code and must escape fast, so I'm thinking a better solution a load balancer websocket server which will broadcast to all other websocket servers and let them to do the job, so this websocket server will connect the user with the rest of the websocket servers, no the opposite, correct ?

If you find that the test program is useful as an example, please feel free to put it as one of the IRIS example.

I already did that on my local computer (:P), I'll commit the changes to the iris-contrib/examples repo too with your name below, but you can do a PR if you feel that you have time here.

create a parent Websocket server and all others are connected to it.

That's one solution but you don't win a lot because that server will have the same traffic and processes if it contains the full logic, a thing like this to work should have the minimal code and must escape fast, so I'm thinking a better solution a load balancer websocket server which will 'redirect' the user to one of the n  (or the 'nearest' ) websocket servers and let them to do the job, so this websocket server will connect the user with the rest of the websocket servers, no the opposite, correct ?

a load balancer websocket server which will 'redirect' the user to one of the n (or the 'nearest' ) websocket servers and let them to do the job

Here you may have an assumption that broadcast messages are sent to only a subset of users, but not all. The loadbalancer needs to the logic to determine which websocket server to redirect to (the nearest one). Let's take a look a use case:
In a multplayer online game, each player is located at a point of a map. They can move from one region to another. Things happened in a region has to be broadcasted to every players in that region. Messages from game master has to be broadcasted to every players.
In the above case, we actually have two challenges:

How to arrange player connection so that they are in the same "region". The load balancer needs to have logic to determine which websocket server should a player connect to. More, if a player moves from a region to another, there should be logic to disconnect from the old websocket server and then connect to a new one. Likely, the IRIS user has to implement the two logic himself, as the load balancer do not have the knowledge to do so.

For system messages that have to be broadcasted to every player, every websocket server has to do the job.

The above use case is quite common. Says, in a stock market, an end-user needs to receives realtime stock quote of a particular stock symbol (says, NASDAQ:APPL), which is a logical partion like region mentioned above. At the same time, every end-user needs to receive market indices update (says, NASDAQ, and DOW changes).
If load balancer solution exposes interfaces to allow programmer to implement the two logic above, then it works nicely.


Fixed CoC link in README

After the file name was changed from code-of-conduct.md to CODE_OF_CONDUCT.md the README.md was never updated.

Thanks! 😊


Hostname "xxxx.client" doesn't match network configuration

Description
ALVR Version: v20.9.1
The client on the device refers to itself as having a hostname of "xxxx.client". I noticed before in a previous version of ALVR that it used to be "xxxx.client.alvr". Hostname has a very specific meaning in networking. In my network I have configured a domain, so my desktop for example can be reached by pinging "tricky-desktop.private.example.com". Devices getting IP addresses on the network get a full hostname. Most consumers get a basic local network configuration on their routers, with the local network being set as "xyz.local", for example.
If I ping the headset I get responses from "quest.private.example.com". Pinging "1818.client", as it currently shows, gets nothing.
I suppose then the question/request here is, where does this "xxxx.client" convention come from? Is it a bug in the headset (Quest 3 in this case) or is it something ALVR does? And, of course, if it is something in ALVR, can it be fixed to use the real hostname? The other option is that maybe it is just a device name that anyway doesn't need the "hostname" label attached.

The original idea was to add TLS authentication, but then we didn't implement it. Now in the master branch, the hostname is used for mDNS and needs to end with .local..

The currently carries no meaning at all, so it doesn't matter and it'll match up and actually carry meaning on the next major release.


isValid not present on $scope

Im trying to add buttons to my view that bind to the isValid scope property to enable/disable the submit button depending on whether the form is valid or not.
It's not working for me, and when i use the chrome extension to check the scope of the json editor, I see my schema and startval on the scope but not the isValid property.
here is my view:
`Save

`
here is the controller:
angular.module('testApp')
    .controller('ChannelViewEditController', function ($scope, $http, $stateParams) {

        if ($stateParams.id) {
            $scope.myStartVal = $http.get(webBase + 'api/channels/' + $stateParams.id);
        }

        $scope.mySchema = $http.get('jsonschemas/' + $stateParams.ChannelTypeName + '.json');

        $scope.submit = function () {
            $http.post(webBase + '/api/boxes', JSON.stringify($scope.model))
                .then(function (res) {
                    $scope.response = res.data;
                });
        }

        $scope.onChange = function (model, editor) {
            debugger;
        }

                $scope.submit = function () {
                    $http.post(webBase + '/api/channels', JSON.stringify($scope.model))
                        .then(function (res) {
                            $scope.response = res.data;
                        });
                }
    });

I am doing something wrong here? Also, how can I pass the json editor control reference to my onChange function?
Thanks,

got it - the buttons have to be within the  tags


Support for i18n locales

This pull request brings support for i18n locales handled the same way NextJS would!
Simply pass an i18n config object into Pilot's config. It can be formatted the same exact way as NextJS accepts theirs. Once provided with a defaultLocale and multiple locales, Pilot will call getProps with that locale field inside the context. Prop results also get cached separately from other locales.
It's also possible to switch locally by hardcoding it in route changes fly('/ja/example) or passing it as an option: fly('/example', undefined, { locale: 'ja' }).
I've also exposed getLocale, getLocales, getDefaultLocale, and getProps functions as part of the Pilot instance.
PilotArea now accepts a config value it will pass on and direct config props such as nextRouter and logLevel have been deprecated.

:tada: This PR is included in version 1.1.0 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Add missing prop types for native props in Android

Fixes this issue:

Using react-native 0.13.1

@kusamakura could you help me understand what these are for? scale, translate and rotation (transforms) are passed using the style prop under a key of transform.

@nickhudkins Yes, they're passed via transform, but for some reason RN Android throws an error (like the one above) if you didn't define those in the prop types.
I found a similar hack here: https://github.com/teamrota/react-native-gmaps/blob/master/index.android.js#L23

I think this is resolved now on master! Let me know if not and submit a new PR please :) Sorry I have been inactive here!


Prefill Fix

This will sync the Input Component's value with the preFill param passed in. This is helpful when validating a form that has been re-rendered.

:+1:


[JVM] Fix source file searching for jvm

Correctly identify path of fuzzers for JVM project in annotated-cfg dict.

Seems that the CI for ClusterFuzzLite is broken since #1857.


[fix] unable attach file when temp files pagination exists

Coverage increased (+0.009%) to 84.274% when pulling 7bc30172074f138abb4af5d5fa259fc0aae735b8 on fix-temp-files-api into f329d862167bfbc62a4e501351f164104fc2e3ae on master.