Improve the error message if we're unable to communicate with DCP

This seems like a transient error, so we should attempt to log as much useful information as possible to help us and the user diagnose the issue.
From https://github.com/dotnet/aspire/issues/1938:
fail: Microsoft.Extensions.Hosting.Internal.Host[11]
Hosting failed to start
System.Net.Http.HttpRequestException: No connection could be made because the target machine actively refused it. ([::1]:52594)
---> System.Net.Sockets.SocketException (10061): No connection could be made because the target machine actively refused it.
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken)
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 token)
at System.Net.Sockets.Socket.g__WaitForConnectWithCancellation|285_0(AwaitableSocketAsyncEventArgs saea, ValueTask connectTask, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.ConnectToTcpHostAsync(String host, Int32 port, HttpRequestMessage initialRequest, Boolean async, CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at System.Net.Http.HttpConnectionPool.ConnectToTcpHostAsync(String host, Int32 port, HttpRequestMessage initialRequest, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.AddHttp2ConnectionAsync(QueueItem queueItem)
at System.Threading.Tasks.TaskCompletionSourceWithCancellation1.WaitWithCancellationAsync(CancellationToken cancellationToken) at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken) at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken) at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken) at k8s.Kubernetes.SendRequestRaw(String requestContent, HttpRequestMessage httpRequest, CancellationToken cancellationToken) at k8s.AbstractKubernetes.ICustomObjectsOperations_CreateClusterCustomObjectWithHttpMessagesAsync[T](Object body, String group, String version, String plural, String dryRun, String fieldManager, Nullable1 pretty, IReadOnlyDictionary2 customHeaders, CancellationToken cancellationToken) at k8s.AbstractKubernetes.k8s.ICustomObjectsOperations.CreateClusterCustomObjectWithHttpMessagesAsync(Object body, String group, String version, String plural, String dryRun, String fieldManager, Nullable1 pretty, IReadOnlyDictionary2 customHeaders, CancellationToken cancellationToken) at Aspire.Hosting.Dcp.KubernetesService.<>c__DisplayClass10_01.<b__0>d.MoveNext() in //src/Aspire.Hosting/Dcp/KubernetesService.cs:line 40
--- End of stack trace from previous location ---
at Aspire.Hosting.Dcp.KubernetesService.ExecuteWithRetry[TResult](DcpApiOperationType operationType, String resourceType, Func2 operation, CancellationToken cancellationToken) in /_/src/Aspire.Hosting/Dcp/KubernetesService.cs:line 187 at Aspire.Hosting.Dcp.KubernetesService.ExecuteWithRetry[TResult](DcpApiOperationType operationType, String resourceType, Func2 operation, CancellationToken cancellationToken) in //src/Aspire.Hosting/Dcp/KubernetesService.cs:line 194
at Aspire.Hosting.Dcp.ApplicationExecutor.StartDashboardAsDcpExecutableAsync(CancellationToken cancellationToken) in //src/Aspire.Hosting/Dcp/ApplicationExecutor.cs:line 234
at Aspire.Hosting.Dcp.ApplicationExecutor.RunApplicationAsync(CancellationToken cancellationToken) in //src/Aspire.Hosting/Dcp/ApplicationExecutor.cs:line 91
at Aspire.Hosting.Dcp.DcpHostService.StartAsync(CancellationToken cancellationToken) in //src/Aspire.Hosting/Dcp/DcpHostService.cs:line 65
at Microsoft.Extensions.Hosting.Internal.Host.b__15_1(IHostedService service, CancellationToken token)
at Microsoft.Extensions.Hosting.Internal.Host.ForeachService[T](IEnumerable1 services, CancellationToken token, Boolean concurrent, Boolean abortOnFirstException, List1 exceptions, Func3 operation) Unhandled exception. System.AggregateException: One or more errors occurred. (No connection could be made because the target machine actively refused it. ([::1]:52594)) ---> System.Net.Http.HttpRequestException: No connection could be made because the target machine actively refused it. ([::1]:52594) ---> System.Net.Sockets.SocketException (10061): No connection could be made because the target machine actively refused it. at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken) at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.System.Threading.Tasks.Sources.IValueTaskSource.GetResult(Int16 token) at System.Net.Sockets.Socket.<ConnectAsync>g__WaitForConnectWithCancellation|285_0(AwaitableSocketAsyncEventArgs saea, ValueTask connectTask, CancellationToken cancellationToken) at System.Net.Http.HttpConnectionPool.ConnectToTcpHostAsync(String host, Int32 port, HttpRequestMessage initialRequest, Boolean async, CancellationToken cancellationToken) --- End of inner exception stack trace --- at System.Net.Http.HttpConnectionPool.ConnectToTcpHostAsync(String host, Int32 port, HttpRequestMessage initialRequest, Boolean async, CancellationToken cancellationToken) at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken) at System.Net.Http.HttpConnectionPool.AddHttp2ConnectionAsync(QueueItem queueItem) at System.Threading.Tasks.TaskCompletionSourceWithCancellation1.WaitWithCancellationAsync(CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.SendWithVersionDetectionAndRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpClient.g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
at k8s.Kubernetes.SendRequestRaw(String requestContent, HttpRequestMessage httpRequest, CancellationToken cancellationToken)
at k8s.AbstractKubernetes.ICustomObjectsOperations_CreateClusterCustomObjectWithHttpMessagesAsync[T](Object body, String group, String version, String plural, String dryRun, String fieldManager, Nullable1 pretty, IReadOnlyDictionary2 customHeaders, CancellationToken cancellationToken)
at k8s.AbstractKubernetes.k8s.ICustomObjectsOperations.CreateClusterCustomObjectWithHttpMessagesAsync(Object body, String group, String version, String plural, String dryRun, String fieldManager, Nullable1 pretty, IReadOnlyDictionary2 customHeaders, CancellationToken cancellationToken)
at Aspire.Hosting.Dcp.KubernetesService.<>c__DisplayClass10_01.<<CreateAsync>b__0>d.MoveNext() in /_/src/Aspire.Hosting/Dcp/KubernetesService.cs:line 40 --- End of stack trace from previous location --- at Aspire.Hosting.Dcp.KubernetesService.ExecuteWithRetry[TResult](DcpApiOperationType operationType, String resourceType, Func2 operation, CancellationToken cancellationToken) in //src/Aspire.Hosting/Dcp/KubernetesService.cs:line 187
at Aspire.Hosting.Dcp.KubernetesService.ExecuteWithRetry[TResult](DcpApiOperationType operationType, String resourceType, Func2 operation, CancellationToken cancellationToken) in /_/src/Aspire.Hosting/Dcp/KubernetesService.cs:line 194 at Aspire.Hosting.Dcp.ApplicationExecutor.StartDashboardAsDcpExecutableAsync(CancellationToken cancellationToken) in /_/src/Aspire.Hosting/Dcp/ApplicationExecutor.cs:line 234 at Aspire.Hosting.Dcp.ApplicationExecutor.RunApplicationAsync(CancellationToken cancellationToken) in /_/src/Aspire.Hosting/Dcp/ApplicationExecutor.cs:line 91 at Aspire.Hosting.Dcp.DcpHostService.StartAsync(CancellationToken cancellationToken) in /_/src/Aspire.Hosting/Dcp/DcpHostService.cs:line 65 at Microsoft.Extensions.Hosting.Internal.Host.<StartAsync>b__15_1(IHostedService service, CancellationToken token) at Microsoft.Extensions.Hosting.Internal.Host.ForeachService[T](IEnumerable1 services, CancellationToken token, Boolean concurrent, Boolean abortOnFirstException, List1 exceptions, Func3 operation)
at Microsoft.Extensions.Hosting.Internal.Host.StartAsync(CancellationToken cancellationToken)
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
at Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.RunAsync(IHost host, CancellationToken token)
at Aspire.Hosting.DistributedApplication.RunAsync(CancellationToken cancellationToken) in //src/Aspire.Hosting/DistributedApplication.cs:line 147
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
at System.Threading.Tasks.Task.Wait()
at Aspire.Hosting.DistributedApplication.Run() in //src/Aspire.Hosting/DistributedApplication.cs:line 155
at Program.

Closing in favor of https://github.com/dotnet/aspire/issues/2422


Wirthual/fix vision

[x] I have read the contributing guidelines
Self-reported review complexity:

[x] Low
[ ] Medium
[ ] High

Hi @ngxson ,
I saw you started working on the support for mllama. In this branch I added the new tensor names from Llama 3.2. I came accross 2 problems at this point:
add_tensor_info in gguf writer raises a Duplicated tensor name error for blk.{bid}.ffn_up. Is this layer doubled for vision and language parts and I need to prefix the name somewhere?
Another problem is the tokenizer loaded seems to have 1 token more than the specified in the vocab_size parameter so it errors out here:
        vocab_size = self.hparams["text_config"].get("vocab_size", len(tokenizer.vocab))
        assert max(tokenizer.vocab.values()) < vocab_size

Is the additonal token related to the image so this check needs to be changed?
Best,
wirthual

Thanks for your suggestion. However, my PR https://github.com/ggerganov/llama.cpp/pull/9687 targets llava (please read the descriptions for more info). This is to reduce the complexity and focus on developing a framework that can support multiple archs in the future.
llama-3.2 vision will be added at some point, so I'll keep this PR open.


Animating the Web-X Logo on Hover

I want to animate the web-x logo on header screen of (home screen) ,that  animate on **hover ** by cursor,
Are you raising this issue under hacktoberfest? (Remove this section if you are not a hacktoberfest participant)
Yes, I'm raising this issue under hacktoberfest.

Hacktoberfest-2022

Sounds great, assigning this issue to you.


Refactor Front-end E2E Test Suite

Expected Behavior

One should be able to run the E2E from a docker environment and see the result.
Current Behavior

The current test suite does not run in a docker environment due to its reliant on node to build and expose selenium, which in turn is relying on a system-wide JAVA installation.
Possible Solution

Purge local installation of chromedriver and selenium, and instead use docker to install these tool so that we can use them on a docker environment.
Steps to Reproduce

None of the test is working on Docker

Context (Environment)

Detailed Description

Possible Implementation

Checklist before submitting

[x] I have confirmed this using the officially supported Docker Compose setup using the local.yml configuration and ensured that I built the containers again and they reflect the most recent version of the project at the HEAD commit on the master branch
[x] I have searched through the other currently open issues and am confident this is not a duplicate of an existing bug
[x] I provided a minimal code snippet or list of steps that reproduces the bug.
[x] I provided screenshots where appropriate
[x] I filled out all the relevant sections of this template

Work on this has already been started and will be published together with #239

Fixed in https://github.com/concept-to-clinic/concept-to-clinic/commit/09d4bc5863f2fcf7e166d4b15cef01779a8b8dd4


Build connections to W3C ontologies

OBO Core is an opportunity to build bridges to other ontologies, particularly those connected to the W3C:

OWL Time
PROV: Provenance
The Organization Ontology
QUDT: Quantities, Units, Dimensions, and Data Types

I had trouble finding a proper list, although this search was helpful: https://www.w3.org/TR/?tag=data

What is the concrete implementation required for this; e.g. equivalence or skos axioms? Having an open ticket for general discussion OK too. Assigning @deepakunni3 as we have many mappings in biolink model already

I don't have a concrete plan, or even a complete list of W3C projects that we should to consider. In the past week I've seen these four mentioned in various OBO discussions, and I just wanted them listed together in a ticket.

I am very worried about scope creep for the core. Having as scope: 'Let's
model all of biology' is pretty bad already. If we also say: let's do that
by identifying the best possible resources to do that, I don't think we can
ever get anything done. Can we please stick to OBO ontologies, and better
yet foundry ontologies that have said they are willing to change for this
purpose? We can always expand scope later.
On Tue, Apr 16, 2019 at 11:57 AM James A. Overton<EMAIL_ADDRESS>wrote:

I don't have a concrete plan, or even a complete list of W3C projects that
we should to consider. In the past week I've seen these four mentioned in
various OBO discussions, and I just wanted them listed together in a ticket.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/OBOFoundry/Experimental-OBO-Core/issues/15#issuecomment-483800870,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ANN9IjuDtaEQCHv2FztCmeIQQaeCTo7Kks5vhh0NgaJpZM4cyQok
.

--
Bjoern Peters
Professor
La Jolla Institute for Allergy and Immunology
9420 Athena Circle
La Jolla, CA 92037, USA
Tel: 858/752-6914
Fax: 858/752-6987
http://www.liai.org/pages/faculty-peters

Do we have commitment to change from any ontology yet?
Scope creep is a worry but this ticket is just for exploration and gathering information, not for throwing out existing OBO classes

Reviewed OBO foundry member ontologies (not OBO library) have committed to
be part of a project of alignment and have committed to change for that
purpose. And that has worked quite well in the past: People/projects that
were willing to submit their ontologies for review have also been willing
to adjust based on feedback from the group during the review and beyond.
Far from perfect for sure, but that is the criteria we should enforce for
foundry membership going forward: If there is a change request that is
universally agreed on to make an ontology interoperate with others, but
that ontology can't do it (there might well be valid reasons), then that
(version) of the ontology should not be a member of the OBO foundry.
On Tue, Apr 16, 2019 at 7:46 PM Chris Mungall<EMAIL_ADDRESS>wrote:

Do we have commitment to change from any ontology yet?
Scope creep is a worry but this ticket is just for exploration and
gathering information, not for throwing out existing OBO classes
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/OBOFoundry/Experimental-OBO-Core/issues/15#issuecomment-483916267,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ANN9It3gCSncbuVqCNYx6qUJvwQcwctvks5vhosSgaJpZM4cyQok
.

--
Bjoern Peters
Professor
La Jolla Institute for Allergy and Immunology
9420 Athena Circle
La Jolla, CA 92037, USA
Tel: 858/752-6914
Fax: 858/752-6987
http://www.liai.org/pages/faculty-peters


Add stkGRO space

Changing token name on the UI

Would it be possible for you to just merge it for now? Hopefully I can do that from the next update.

Closing this PR for now, feel free to open it again once you've take a final decision.


LDA class faulty - "wrong shapes for given matrices" error due to unitialised variable

Using OpenCV 2.4.9 I wrote a small test program for the LDA (Linear Discriminant Analysis) and got strange runtime errors,
OpenCV Error: Bad argument (Wrong shapes for given matrices. Was size(src) = (2,1), size(W) = (2,1).) in subspaceProject, file /home/abuild/rpmbuild/BUILD/opencv-2.4.9/modules/contrib/src/lda.cpp, line 187
I noticed that it was dependent on a imshow() call before: if I removed it, the error vanished.   I used valgrind and got a warning:
Conditional jump or move depends on uninitialised value(s)
at cv::LDA::project(cv::_InputArray const&) (lda.cpp:1108)
by main (simple_lda_example.cpp:125)
I then inspected the original source code lda.cpp, and found that a class member _dataAsRow is used uninitialised and transposes the data passed to the algorithm.
This member is clearly a remnant of some test. It should be removed completely.
I also found that the same error is contained in OpenCV 3.0.0.
I am not allowed to attach the sample program, not even as txt, so I copy it into this description:
I copied the original lda.cpp locally and tested the fix in this way:
Makefile:
LOC= simple_lda_example
all: $(LOC)
clean:
rm $(LOC)
CXXFLAGS += -Wall -g
cppcheck:
cppcheck --enable=all *.cpp
$(LOC): LDLIBS += -lopencv_core -lopencv_contrib -lopencv_highgui
$(LOC): lda.o
Test program: simple_lda_example.cpp:
// Linear Discriminant Analysis example
//
// based on https://github.com/s4kibs4mi/opencv-2/blob/master/lda/src/main.cpp
//
// See overview http://www.bytefish.de/blog/pca_lda_with_gnu_octave/
// K Burger 2015 tested with Opencv 2.4.9
#include "opencv2/opencv.hpp"
#include
#include <stdio.h>
#include
#include
#include <stdlib.h>
using namespace std;
using cv::Mat;
typedef vectorcv::Point Contour;
void drawdots(cv::Mat & annot_image, const Contour& points, const cv::Scalar& color)
{
const int radius = 5, thick = -1;
for (unsigned i=0; i < points.size(); ++i)
cv::circle(annot_image, points[i], radius, color, thick);
}
static void addToContour(Contour& cont, const Mat& row)
{
cont.push_back( cv::Point(row.at(0,0)*10, row.at(0,1)*10) );
}
int main(int argc, const char *argv[]) {
// Example for a Linear Discriminant Analysis
// (example taken from: http://www.bytefish.de/wiki/pca_lda_with_gnu_octave)
double d[][2] = {
//{2, 0}, // test outlier for fun
{2, 3},
{3, 4},
{4, 5},
{5, 6},
{5, 7},
		{2, 1},
		{3, 2},
		{4, 2},
		{4, 3},
		{6, 4},
		{7, 6}
       //,{5, 7}  // test outlier for fun
};
int c[] = { //0, // test outlier
           0,0,0,0,0,
           1,1,1,1,1,1
           //,1   // test outlier
           };
const int n  = sizeof(c) / sizeof(int);
const int n2 = sizeof(d) / (2*sizeof(double));
cout << "n=" << n << endl;
if (n2 != n)
{
  cout << " Array sizes of d and c are not equal!" << endl;
  exit(1);
}

// convert into OpenCV representation
Mat data = Mat(n, 2, CV_64FC1, d);

vector<int> classes(c, c + n); // copy n elements into vector

// perform the lda
const int num_components = 1; // no of classes - 1, but we could omit this parameter
cv::LDA lda(data, classes, num_components);

// GNU Octave finds the following Eigenvalue:
//octave> d
//d =
//	 1.5195e+00
//
// Eigen finds the following Eigenvalue:
// [1.519536390756363]
//
// Since there's only 1 discriminant, this is correct.

cout << "Eigenvalues:" << endl << lda.eigenvalues() << endl;

// GNU Octave finds the following Eigenvectors:
//	octave:13> V(:,1)
//	V =
//
//	   0.71169  -0.96623
//	  -0.70249  -0.25766
//
// Eigen finds the following Eigenvector:
// [0.7116932742510111;
//  -0.702490343980524 ]
//

/* Opencv 2.4.9:
 Eigenvalues:
  [1.519536390756357]
 Eigenvectors:
  [0.8254890051644111;
    -0.814814578373492]
 Eigenvectors normalised:
  [0.7322600386582955;
    -0.7227911588480589]
 */

const Mat& ev = lda.eigenvectors();
cout << "Eigenvectors:" << endl << ev << endl;
cout << "Eigenvectors normalised:" << endl;
double x0 = ev.at<double>(0,0), x1 = ev.at<double>(0,1);
double len = sqrt(x0*x0 + x1*x1);
cout << ev/sqrt(len) << endl;

// lists of points for drawings: original training data class and predicted class
Contour class0, class1, class0pred, class1pred;

for (int i=0; i < n; ++i)
{
  // project a data sample onto the subspace identified by LDA
  Mat x = data.row(i);
  Mat predicted = lda.project(x);
  //cout << predicted << endl;

  // Caution: this would cause chaos: predicted.at<float>(0,0);
  double pred = predicted.at<double>(0,0);
  cout << "Projection of " << x << ": real class=" << classes[i] << "    predicted f=: "<< pred << " class=" << (pred <= 0 ? 0 : 1)<< endl;

  if (classes[i] == 0) addToContour(class0, x);
  else                 addToContour(class1, x);

  if (pred <= 0) addToContour(class0pred, x);
  else           addToContour(class1pred, x);
}

// image of original data
Mat image = Mat::zeros( 100, 100, CV_8UC3 );
drawdots( image, class0, cv::Scalar(255,0,0)); // blue
drawdots( image, class1, cv::Scalar(0,255,0)); // green

// image of predictions
Mat imageResult = Mat::zeros( 100, 100, CV_8UC3 );
drawdots( imageResult, class0pred, cv::Scalar(255,0,0)); // blue
drawdots( imageResult, class1pred, cv::Scalar(0,255,0)); // green

cv::imshow("data (class0 in blue)", image);
cv::imshow("prediction (class0 in blue)", imageResult);
cv::waitKey(0);

}

It is similar to https://github.com/Itseez/opencv/issues/5318
Fix for master is here: https://github.com/Itseez/opencv/pull/5320

ok thanks, did not see this. we could add my test-program to the sources.

closed as duplicate


Keycloak logout not working when used with next-auth

Hi, I was wondering if you could help me with the following issue please?
I'm trying to implement an authentication flow using next-auth and this keycloak-passport strategy.
Both libraries work great together when I log into my keycloak instance but when I log out, I seem to be logged out on the client side. But when I try to log in again using keycloak-passport I get the Unable to sign in page from next-auth

It seems to be logging out from the client side but the session seems to be persisted on the server side. When I hit my login page directly it redirects me to the account admin section on my keycloak instance so I'm definitely still logged in on the server.
I've tried to debug the logout flow to see if I can determine the problem but none of the console.log statements I placed in the handleSignOutSubmit() function are firing.
I opened an issue on the next-auth repo here which goes into more detail.
I'd be really grateful if you could point me in the tight direction on this please

@svarlamov Thanks a million for getting back to regarding this issue. I really appreciate it 🙂 I was hoping/praying that you may have some Jedi magic trick up your sleeve that would help me figure this out 😂
Thanks for the advice. It's after narrowing down the search for the root problem. I'll keep digging into this and if/when I come up with a solution, you'll be the first to know 💪

@woppers did you manage to figure out how to use nextjs with keycloak?

@phillystafford @svarlamov Any progress on this issue?

We have the same issue also here.. Any progress on this? The signout method from next-auth does not call the logout method of keycloak, resulting on a session still active on the server. The user is never asked again to enter the password. Which is critical for us after the signout. Thanks a lot for your input on this.


How to Get Started with Docker Machine

We ask that you please be patient as our team works through approving and publishing all articles/tutorials in a timely manner. Allow 1-3 days for a topic to be reviewed and/or approved - allow 3-7 days for an articles to be reviewed and/or published.
Be sure to visit our Resources Page for tools, resources, and example articles to go over.
NOTE: (Please ensure that you have only one open issue + linked pull request at a time. This will ensure that we complete the article in a timely manner from inception to publishing.)
NOTE: We tend to stray away or tend not to publish reviews/comparisons of commercial product offerings.
We're looking for the first 2-3 paragraphs of the article that appropriately summarize what your article will be about.
Proposed title of article
How to Get Started with Docker Machine
Introduction paragraph (2-3 paragraphs):
Docker Machine is a tool for provisioning and managing your Dockerized hosts (hosts with Docker Engine on them). Typically, you install Docker Machine on your local system. Docker Machine has its own command line client docker-machine and the Docker Engine client, docker. You can use Machine to install Docker Engine on one or more virtual systems. These virtual systems can be local (as when you use Machine to install and run Docker Engine in VirtualBox on Mac or Windows) or remote (as when you use Machine to provision Dockerized hosts on cloud providers). The Dockerized hosts themselves can be thought of, and are sometimes referred to as, managed “machines”.
If you have ever wanted to deploy and configure a Docker host with a single command from your own terminal you have come to the right place. Docker Machine enables you to provision and manage Docker systems in the cloud directly from your own terminal.
Using the Docker Machine tools installed locally you can deploy a new cloud server through the cloud APIs in seconds without ever opening a web browser. This guide shows what you need to get started on Ubuntu Linux but Docker Machine is also available on a number of other operating systems including macOS and Windows.
Key takeaways:
1.Setting up Docker Machine environment
2.Provisioning Docker host
3.Deploying containers to Docker hosts remotely
References:
Templates to use as guides

Hi, @vincentoriyo. Great topic suggestion. Since we focus on unique content, can you tell me how your tutorial will differ from this similar Docker Machine article?
Thanks,
Louise - Content Moderator

Hi, @louisefindlay23, this one doesnt give a beginner a clear way to get started with docker while this one will give basic understandings of the machine.

i.e "The Docker Client and the Docker Daemon communicate over REST APIs, even on the same system. One tool that can help you manage Docker Daemons running on different systems from our local workstation is Docker Machine." these are not covered on the existing article

Thanks, @vincentoriyo. Sounds great. Topic approved 🚀. Make sure to provide lots of detail in your article to benefit readers.


SyntaxError: The requested module '/src/components/Dashboard.tsx' does not provide an export named 'default'

Describe the bug
SyntaxError: The requested module '/src/components/Dashboard.tsx' does not provide an export named 'default'
Link to the Bolt URL that caused the error
https://bolt.new/~/sb1-sg4fy5c2
Steps to reproduce
Click on "New Client" or "Personal Information"
Expected behavior
I have to create a database and save all input client's information
Screen Recording / Screenshot
No response
Platform
Browser name = Chrome
Full version = <IP_ADDRESS>
Major version = 131
navigator.appName = Netscape
navigator.userAgent = Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36
performance.memory = {
  "totalJSHeapSize": 69962933,
  "usedJSHeapSize": 64981753,
  "jsHeapSizeLimit":<PHONE_NUMBER>
}
Username = Matthewkclee
Chat ID = 66462642c3ac

Additional context
No response

same problem i have, endless syntax error and an endless loop


Allow image header without guid

When the image header does not have the field guid the library throws an exception.
I understand that in this situation, the method  ReaderImpl::ReadImage2D should either return false or allow image headers without guid.
I encontered this problem when trying to read an e57 where the images have no guid. What is the reason to force the header to have a guid? I'm working with an e57 file from Matterport, you can download a sample file to reproduce the issue from here: https://support.matterport.com/s/article/Overview-of-Matterport-E57-File?language=en_US

Hi @vcampmany.
The guid is a required field of the Image2D structure.

(From the standard pg. 13.)

What is the reason to force the header to have a guid?

I don't know the reasons behind any the choices made in E57, but here it is from the standard:

<IP_ADDRESS> A Data3D or Image2D Structure shall be assigned a GUID when it is created. If any change is applied to the Structure (or to any of its descendents), then the Structure is considered to be a new version and should be assigned a new GUID. Similarly, every E57 file shall be assigned a file-level GUID, which is stored in the guid element of the Data3D Structure. If any change is made to the file, this change shall be regarded as creating a new version of the file, and the file shall be assigned a new file-level GUID.

I would suggest contacting the Matterport people to have them fix their writer.

Thanks for the reference @asmaloney , that makes sense. Could you send me a link to the standard? I couldn't find one without paying

I'm afraid the standard isn't available without paying ☹
No - I don't understand it either.

I also encountered this issue. In case it helps anyone else, I created this function to add the required field to prevent read errors:
void ensureImageGuids(const Reader& eReader) {
  // Some E57 lack the required GUID field
  auto imf = eReader.GetRawIMF();
  auto raw_images = eReader.GetRawImages2D();
  for (int i = 0; i < raw_images.childCount(); i++) {
    auto image = StructureNode(raw_images.get(i));
    if (!image.isDefined("guid")) {
      image.set("guid", StringNode(imf, ""));
    }
  }
}


Jc/graph ql server setup

Issue Type
[ ] Bug
[ x ] Feature
[ ] Tech Debt
Description
Created src folder and migrated all client and server content into it. Created schema.graphql and resolvers.ts files.
Ticket/Card Name
N/A
Steps to Reproduce Bug / Validate Feature / Confirm Tech Debt Fix
N/A
Expected behavior
N/A
Screenshots & Videos
N/A
Additional context
GraphQL server is still a WIP.

Great job!


Adding additional attributes in saml_response

Help with generating the saml_response
Hey all -
What does the syntax look like to send additional attributes, I want to specify groups/name/etc in here:
    encode_SAMLResponse(user.email)

I tried this, it doesn't work..
    encode_SAMLResponse(user.email, name: user.full_name, groups: [user.account_id])

Try: https://github.com/dev-develop/ruby-saml-idp


Quick link fix

Ready for merge. Accept when you can. More docs to come for Shuffle swarm.

You know what? Let me add the swarm documentation in this PR itself.

Ready for merge

Nice - thanks @0x0elliot :)


Prepare for release v0.2.0

Changes Unknown when pulling 97d6da6efa980ab8a49a0214baa0de23bb23c8fc on prepare-release-v0.2.0 into ** on master**.


Move Key Vault session-records in the right location

Moves playback files to test/resources/session-records

Fixes #3045

Can one of the admins verify this patch?


iOS version?

Wondering if a similar procedure would work for iOS?
Thanks

@asher-pembroke I've never used an iOS and have never compiled for the same so I can't say much about it. But it doesn't seem impossible to me 🤔

This module won't work on iOS because it uses pyjnius (for Java classes), not pyobjus (I think for Objective-C classes).

@Python3-8 you're right! Also there are detailed docs about integrating social auth in iOS apps either using firebase or native way. So if anyone who has earlier worked with pyobjus and Obj-C can make it for iOS without much difficulty.


Chapter 11, page 221 - typo

In the Services folder in the BlazorWebServer project,

There is no such project in the solution. It should be BlazorWebApp project.

This should be "BlazorWebApp"


Draw less perform more

Issues
#99
#100
#104

Great work @pburnsdata !  Found a few bugs:

When nesting by folder and form, hitting Expand All places all forms after all folders.
Sometime Expand All reverts to a previous nesting when it's un-checked.

Also made some suggestions for modularizing addRowDisplayToggle and throwing in comments describing the data structure every step of the way.

per discussion with @pburnsdata , we decided to optionalize the visit sort order variable because nested visit rows behave unusually without that variable


Add license notes on DSA (Algorithms and Data structures) and Containers

What does this PR do?
Add info based on https://github.com/EbookFoundation/free-programming-books/issues/11355
For resources
Description
This PR adds license notes to the following books located at books
A Field Guide To Genetic Programming - Riccardo Poli, William B. Langdon, Nicholas F. McPhee (PDF)
License found on 2nd page of pdf.
Algorithmic Graph Theory - David Joyner, Minh Van Nguyen, David Phillips (PDF)
License found on 1st page of the article.
Docker Tutorial - Anthony Baire (PDF)
License found on page 1st of pdf.
For book lists, is it a book? For course lists, is it a course? etc.
Is it a book.
Checklist:

[x] Read our contributing guidelines.
[x] Search for duplicates.
[x] Include author(s) and platform where appropriate.
[x] Put lists in alphabetical order, correct spacing.
[x] Add needed indications (PDF, access notes, under construction).
[x] Used an informative name for this pull request.

Follow-up

Check the status of GitHub Actions and resolve any reported warnings!

Thanks, and welcome to free-programming-books!


Move title to input for sprite upload buttons

On the upload sprite/costume buttons, Firefox looks for the title on the the input instead of the containing div, defaulting to “No file selected.”

This broke tooltips for Chrome, but it was a simple matter of setting it on both the input and the button.


onLoadEnd not called?

Hey — Thanks for your work! Everything works great, but onLoadEnd does not fire for me... no idea why. I've implemented it exactly as described in the readme. Any ideas?

onLoadEnd should works, my app use it to display network GIFs, I heavily rely on this method to get the real size of the images, can you paste you code here?


WebRTC streaming

First draft to implement the WebRTC protocol for video streaming as solution for #175
There are still some aspects to define such as signaling server and documentation for video client.

Looks good. Please let me know when you consider it finished and ready to be merged.

Can you please add some instructions to the README file to setup the streaming client and server?
Please note hat if required, we can add new configuration variables to the RD's settings menu (for example, to enable/disable the streaming, to set the destination URI, etc).

Yes, it still needs things to be done, for now I'm thinking in the following:
TODO

[ ] Finish a first implementation.
[ ] Add user settings for streaming or not and its respective parameters.
[ ] Move current video stream method as a LegacyVideoStreaming plugin.
[ ] Add Signaling server. (?)
[ ] Prepare a different repository as example for RD WebRTC streaming.
[ ] Write down a client connection example in README.

The last point I think is better to no mess around the main project, since will be different purposes. Respect the signaling server, maybe its better for functionality include a signaling server, but it can be added in another time. A second repository is proposed since many approaches are based in React or NodeJS that uses the WebSocket communication classes. Respect Andreas1331/android-webrtc-dji repository its implementation is based in Socket.IO which is a server-client library, being not generic enough. In this regard, it is better to keep with native WebSocket management since is language-agnostic for client/server side.
For the LegacyVideoStreaming.java plugin I don't know exactly where all the code is, can you @kripper or @ricardohalfeld maybe do this part?
I will working on this code during the following days, any comment please let me know.

In case you mean to use a second repo for those external resources (as a library used by RD), yeah, that makes sense too.

My thought was mainly because I'm using this repo as signaling server base, but a minimal implementation, just for example, could be possible.

I believe the signaling server could be handy to not relay on external componentes/configurations.

If that is the case, I don't know if Android could handle a new thread with the WebSocket server, but I did a look and there are some Android-based WebRTC server application. Another aspect to consider is the necessity to plug the stream into a multi-streaming platforms. Additionally, the computational impact of include a server inside RD can be high.

I believe we can also include git submodules in RD referencing an external repo used to build and distribute those web resources.

For now is the most easy and straightforward way to have a initial version. Then, can dig more into more efficient or simple ways.

If your model is not supported, maybe ...

Curiously, the other day I accidentally change the video mode from the display UI and was able to acquire video from QGC. Actually, I should change the video mode two or three times to keep the stream on, at the first change the video stream works just one sec. If I leave working for about 5 minutes the RD freezes and there is any GUI responding to commands. I was trying to access the setting and activate the logs, but the touch was not captured.
I think is a compatible model, but there is a bug somewhere. Some Logcat lines messages appears to be related to the OpenGL instantiation and use. Maybe the bug is related with some Texture treatment from some video feed.
After achieving a first version I could try to reorganize the code in an attempt to fix that behavior. Do you remember any lines or classes to guide my search? Or maybe explaining the classes relationship to better understand how it works.

Have you tried streaming to gstreamer?...

I actually didn't knew that is possible to stream to gstreamer. Have you already worked with that? I will must dig more on how its work for better assessment of application. Meanwhile, we can ask the QGC team about its integration.

I believe the best move is to include in RD whatever is necessary to stream from the drone to a gstreamer endpoing receiving WebRTC.
Changing the QGC's gstreamer receirver to support WebRTC is 1 line of code (to generate the gstreamer command line).
Just any simple Android based signaling client implementation should do:
https://github.com/nkming2/webrtc-signaling-client-android
How are you currently watching the stream?
Are you accesing some kind of embedded HTTP server?

Curiously, the other day I accidentally change the video mode from the display UI and was able to acquire video from QGC.

Without glitches? Sometimes the glitches appear when you move the camera.
@The1only thinks it's related with the UDP stack. Actually one user reported here that QGC was working on Linux but not on Windows. We tried to change his network configurations (MTU?), but it didn't work on his Windows environment (only on his Linux Box). I believe, maybe his Linux Box had a completely different network setup. You can search the conversation in the issues.
But, don't get confused: if you saw the video stream working perfectly inside RD, it means nothing. The problem is only when streaming to QGC.
I believe the problem is in the NAL splitter code which fails with some models. DJI has some magic codes for each model and uses different formats. The home-made NAL splitter code is probably not mature/well maintained and has only been hacked with some models.
The idea of pivoting to WebRTC is more because so we have a stable streaming implementation (I hope).

See: https://github.com/RosettaDrone/rosettadrone/issues/122

How are you currently watching the stream?
Are you accesing some kind of embedded HTTP server?

At the current stage I'm able to stablish connection through websocket to the Signaling server, at least is what the logcat
show accordingly the socket callback. However, the stream connection to the client is still not connected yet. As proposed in the code of Andreas1331 the WebRTCClient side is working, or I think it is.
One main concern is regarding the DJICodecManager since is already being instantiated in MainActicity, and now in the DJIVideoCapturer. This can be problematic? Should being sharing the same  DJICodecManager's instance?

Without glitches? Sometimes the glitches appear when you move the camera.

With one change appears part of the image and a green space, after other video mode activation/deactivation, the stream is stable with a little delay. Nevertheless, apparently that run other processess, being more computational demanding since it does not respond to touch events.

One main concern is regarding the DJICodecManager since is already being instantiated in MainActicity, and now in the DJIVideoCapturer. This can be problematic? Should being sharing the same DJICodecManager's instance?

Yes. But I believe I added code to disable all problematic video code in MainActicity to support the RawVideoStreamer plugin.
I don't remember if DJICodecManager was a shared instance. But if you experience problems, try disabling video related stuff. It shuold work as good as the original WebRTC sample app.
At one point I think I saw the video streaming correctly to QGC, but I'm not sure if it was stable. I always thought that changing video resolution mode could make some difference, but I was not able to reproduce the hack, or it was not stable (green glitches).

I did some changes and I was able to receive video on firefox.
The websocket connection is based in this gist that helps a lot.
There are some aspects that still needs to be improved, for example, the received video is in grayscale (I'm testing on a Phantom 4 Pro), I don't know why. I already commented some video-related code but still.
Additionally, there are some texture/surface related logs that must be addressed.
Also, a hangup message to disconnect the client is required.
I will try to make a more simple implementation of the client-side, for now I recommend this repo and add a DJIStream page, modify the WS server, and include the Andreas1331's WebRTCManager.js.
DJIStream.js
import {useRef, useState, useEffect} from 'react';
import {Button, Typography, Input} from 'antd';
import styles from<EMAIL_ADDRESS>import * as log from 'loglevel';
import { DroneStreamManager } from '../utils/WebRTCManager'; // Adjust the import path as needed

const {Title, Paragraph} = Typography;
const {TextArea} = Input;

const URL_WEB_SOCKET = process.env.NEXT_PUBLIC_WEB_SOCKET;
let localStream;
let localPeerConnection;
let sendChannel;
let receiveChannel;

const servers = {'iceServers': []};
const pcConstraints = {
    'optional': [
        {'DtlsSrtpKeyAgreement': true},
    ],
};

log.setLevel("DEBUG");

function App() {
    const [startButtonDisabled, setStartButtonDisabled] = useState(true);
    const [joinButtonDisabled, setJoinButtonDisabled] = useState(true);
    const [callButtonDisabled, setCallButtonDisabled] = useState(true);
    const [hangupButtonDisabled, setHangupButtonDisabled] = useState(true);
    const [sendButtonDisabled, setSendButtonDisabled] = useState(true);
    const [sendMessage, setSendMessage] = useState('');
    const [receiveMessage, setReceiveMessage] = useState('');
    const [videoTagId, setVideoTagId] = useState('Phantom4Prov0');
    const [droneId, setDroneId] = useState('Phantom4Pro');
    // const [clientId, setClientId] = useState('');
    const [renderLocalStream, setRenderLocalStream]= useState(false);
    const ws = useRef(null);

    useEffect(() => {
        const wsClient = new WebSocket(URL_WEB_SOCKET);
        ws.current = wsClient;

        wsClient.onopen = () => {
            log.debug('ws opened');
            setStartButtonDisabled(false);
        };

        wsClient.onclose = () => log.debug('ws closed');

        return () => {
            wsClient.close();
        };
    }, []);

    const sendWsMessage = (type, body) => {
        log.debug('sendWsMessage invoked', type, body);
        ws.current.send(JSON.stringify({
            event: type,
            data: body,
        }));
    };

    const start = () => {
        log.debug('start invoked');

        setStartButtonDisabled(true);
        setJoinButtonDisabled(false);

        DroneStreamManager.setupSocketEvent(ws.current, droneId);
    };

    const join = () => {
        log.debug('join invoked');

        if (!droneId) {
            log.error('droneId is empty');
            alert('droneId is empty');
            return;
        }

        // if (!clientId) {
        //     log.error('clientId is empty');
        //     alert('clientId is empty');
        //     return;
        // }

        setJoinButtonDisabled(true);
        setCallButtonDisabled(false);

        // sendWsMessage('join', { isSource: false, socketID: droneId, peerSocketId: clientId });
        localStream = DroneStreamManager.createDroneStream(droneId, videoTagId)
    };

    const callOnClick = () => {
        log.debug('callOnClick invoked');

        setCallButtonDisabled(true);
        setHangupButtonDisabled(false);
        // if (typeof(myVariable) != "undefined") {
        //     if (localStream.getVideoTracks().length > 0) {
        //         log.debug(`Using video device: ${localStream.getVideoTracks()[0].label}`);
        //     }
        //     if (localStream.getAudioTracks().length > 0) {
        //         log.debug(`Using audio device: ${localStream.getAudioTracks()[0].label}`);
        //     }
        // }

        localStream.startDroneStream();
    };

    const hangupOnClick = () => {
        log.debug('hangupOnClick invoked');
        DroneStreamManager.closeDroneStream(droneId);
        setHangupButtonDisabled(true);
        setCallButtonDisabled(false);
    };

    const renderHelper = () => {
        return (

                <Input
                    placeholder="Drone Socket ID"
                    style={{width: 240, marginTop: 16}}
                    value={droneId}
                    onChange={(event) => {
                        setDroneId(event.target.value);
                    }}
                />
                <Button
                    onClick={start}
                    style={{width: 240, marginTop: 16}}
                    type="primary"
                    disabled={startButtonDisabled}
                >
                    Start
                </Button>
                <Button
                    onClick={join}
                    style={{width: 240, marginTop: 16}}
                    type="primary"
                    disabled={joinButtonDisabled}
                >
                    Join
                </Button>
                <Button
                    onClick={callOnClick}
                    style={{width: 240, marginTop: 16}}
                    type="primary"
                    disabled={callButtonDisabled}
                >
                    Call
                </Button>
                <Button
                    danger
                    onClick={hangupOnClick}
                    style={{width: 240, marginTop: 16}}
                    type="primary"
                    disabled={hangupButtonDisabled}
                >
                    Hangup
                </Button>

        );
    };

    return (

                <Title>WebRTC</Title>
                <Paragraph>This is a simple demo app shows how to build a WebRTC app with a signaling server from scratch.</Paragraph>

                    {renderHelper()}
                    {/* {renderTextarea()} */}

                    <video
                        id={videoTagId}
                        autoPlay
                        style={{width: 640, height: 480}}
                    />

    );
}

export default App;

WS Server:
const debug = require('debug')(`${process.env.APPNAME}:wss`);
const WebSocket = require('ws');

// Store connected clients
const clients = new Map();

function init (port) {
    debug('ws init invoked, port:', port)

    const wss = new WebSocket.Server({ port });
    wss.on('connection', (socket) => {
        debug('A client has connected!');

        // Assign a unique ID to the connected client
        const id = Math.random().toString(36).substring(2, 15);
        clients.set(id, socket);
        console.log('A client has connected!, ID:', id);

        socket.on('error', debug);
        socket.on('message', message => onMessage(wss, socket, message));
        socket.on('close', message => onClose(wss, socket, message));
    })
}

function send(wsClient, type, body) {
    debug('ws send', body);
    wsClient.send(JSON.stringify({
        event: type,
        data: body,
    }))
}

const findClientID = (map, val) => {
    for (let [k, v] of map) {
        if (v === val) {
            return k;
        }
    }
    return null;
}

function clearClient(wss, socket) {
    // clear all client
    let socketClientID = findClientID(clients, socket);
    clients.delete(socketClientID);
}

function onMessage(wss, socket, message) {
    debug(`onMessage ${message}`);
    console.log(`onMessage ${message}`);

    const parsedMessage = JSON.parse(message)
    const type = parsedMessage.event
    const data = parsedMessage.data
    // Logical socket ID
    let socketClientID = findClientID(clients, socket);
    // console.log('Client Socket ID', socketClientID);

    // Requested socket ID
    let socketID;
    if (parsedMessage.socketID) {
        // console.log('SocketID in root');
        socketID = parsedMessage.socketID;
    }
    else {
        // console.log('SocketID in data');
        socketID = data.socketID;
    }

    // console.log('socketID', socketID);
    // console.log('clientsID', clients.keys());

    switch (type) {
        case 'webrtc_msg': {
            console.log('Sending webrtc_msg message from', socketClientID, 'to', socketID);
            let wsClient = clients.get(socketID);
            data['socketID'] = socketClientID;

            if (wsClient)
                send(wsClient, 'webrtc_msg', data);
            else
                console.error('Unable to sent, no socket found!')
            break;
            // socket.to(receivee).emit('webrtc_msg', from_id, msg);
        }
        default:
            break;
    }

    // // Send message back to all clients connected
    // wss.clients.forEach(client => {
    //     if (client !== socket && client.readyState === WebSocket.OPEN) {
    //         client.send(message, { binary: isBinary });
    //     }
    // });
}

function onClose(wss, socket, message) {
    debug('onClose', message);
    clearClient(wss, socket);
}

module.exports = {
    init,
}

Modified WebRTCManager:
const iceConfiguration = {
    iceServers: [
        {
            // urls: 'stun:stun.l.google.com:19302'
            urls: 'stun://<IP_ADDRESS>:8090'
        }
    ]
}

class KeyError extends Error {
    constructor(message) {
        super(message);
        this.name = "KeyError";
    }
}

export class DroneStreamManager {
    static ongoingStreams = {};
    static socket = null;

    /**
    * Returns the handle to the drone stream, but will throw an exception if the droneID is invalid
    * @param {String} droneID The socket id of the drone which the stream belongs to
    * @returns {DroneStream} A handle to the stream object if one exists
    */
    static getStreamByDroneID(droneID) {
        if (droneID in this.ongoingStreams) {
            return this.ongoingStreams[droneID];
        }
        else {
            throw new KeyError(`DroneID ('${droneID}') not found in dictionary of ongoing streams`);
        }
    }

    static setupSocketEvent(socket, droneID) {
        this.socket = socket;
        console.log('setupSocketEvent set');
        socket.onmessage = (message) => {
            console.log(`onMessage ${message.data}`);
            const data = JSON.parse(message.data);
            if (data.event === 'webrtc_msg') {
                console.log('setupSocketEvent webrtc_msg message');
                const droneStream = this.getStreamByDroneID(droneID);
                droneStream.handleIncomingSocketMsg(data.data);
                console.log("Found drone " + droneStream + " that is receiving a webrtc_msg (" + data.data.socketID + ")");
            }
        };
    }

    static createDroneStream(droneID, videoTagID) {
        // TODO: Prevent streams from getting instantiated if they are already ongoing
        let stream = new DroneStream(droneID, videoTagID);
        this.ongoingStreams[droneID] = stream;
        return stream;
    }

    static closeDroneStream(droneID) {
        // This should trigger the connection state event on DroneStream
        console.log("Closing drone stream for " + droneID);
        let stream = this.getStreamByDroneID(droneID);
        stream.peerConnection.close();
        delete this.ongoingStreams[droneID];
        stream.peerConnection = null;
        stream = null;
    }
}

class DroneStream {
    /**
    * Returns the encapsulated variables and functions used for streaming video from a drone
    * @param {String} droneSocketID The socket id of the drone to establish a P2P connection to
    * @param {String} srcID The id of the HTML Video tag to render the result to
    */
    constructor(droneSocketID, srcID) {
        this.droneSocketID = droneSocketID;
        this.streamObj = document.getElementById(srcID);

        this.createPeerConnection();
    }

    sendMessage(message) {
        console.log('Client sending message: ' + message + " to drone ID: " + this.droneSocketID);
        DroneStreamManager.socket.send(JSON.stringify({ event: 'webrtc_msg', socketID: this.droneSocketID, data: message }));
    }

    handleIncomingSocketMsg(message) {
        // This client receives a message
        console.log('Client received message:', message);
        // An 'answer' is the response of another client after making an 'offer'.
        if (message.type === 'answer') {
            this.peerConnection.setRemoteDescription(new RTCSessionDescription(message));
        }
        else if (message.type === 'candidate') {
            var candidate = new RTCIceCandidate({
                sdpMLineIndex: message.label,
                candidate: message.candidate
            });
            this.peerConnection.addIceCandidate(candidate);
        }
    }

    startDroneStream() {
        this.peerConnection.createOffer()
            .then((offer) => {
                console.log("WebRTC offer created: " + offer);
                return this.peerConnection.setLocalDescription(offer); // IMPORTANT: Remember to return this Promise
            })
            .then(() => {
                console.log("WebRTC local description set: " + this.peerConnection.localDescription);
                this.sendMessage(this.peerConnection.localDescription);
            })
            .catch((reason) => {
                // An error occurred, so handle the failure to connect
                console.log('createOffer() error: ', reason);
            });
    }

    handleOnTrack(event) {
        this.streamObj.srcObject = event.streams[0];
        return false;
    }

    handleOnConnectionStateChange(event) {
        switch (this.peerConnection.connectionState) {
            case "new":
            case "checking":
                console.log("Connecting…");
                break;
            case "connected":
                console.log("Online");
                break;
            case "disconnected":
                console.log("Disconnecting…");
                break;
            case "closed":
                console.log("Offline");
                break;
            case "failed":
                console.log("Error");
                break;
            default:
                console.log("Unknown");
                break;
        }
    }

    createPeerConnection() {
        try {
            // NOTE: We will need one RTCPeerConnection for each drone we are connecting to
            this.peerConnection = new RTCPeerConnection(iceConfiguration);  // Our P2P connection with another client (drone)
            this.peerConnection.onicecandidate = (event) => {
                if (event.candidate) {
                    this.sendMessage({
                        type: 'candidate',
                        label: event.candidate.sdpMLineIndex,
                        id: event.candidate.sdpMid,
                        candidate: event.candidate.candidate
                    });
                } else {
                    console.log('End of candidates.');
                }
            }

            /* Error handling */
            // This error might just be thrown when one or another peer disconnects
            this.peerConnection.onicecandidateerror = (event) => { throw new Error("[WebRTC](OnIceCandidateError) something went wrong with ice candidates") };

            // When we receive a stream from the other client
            this.peerConnection.ontrack = (event) => { this.handleOnTrack(event); };
            this.peerConnection.onconnectionstatechange = (event) => { this.handleOnConnectionStateChange(event); }

            // Configure transceivers to only receive, not send
            this.peerConnection.addTransceiver('video', { 'direction': 'recvonly' }); // Only accept video, don't send it
            this.peerConnection.addTransceiver('audio', { 'direction': 'recvonly' }); // Only accept audio, don't send it

            console.log("Created RTCPeerConnection: " + this.peerConnection);
        } catch (e) {
            console.log('Failed to create PeerConnection, exception: ' + e.message);
        }
    }
}

There are some aspects that still needs to be improved, for example, the received video is in grayscale (I'm testing on a Phantom 4 Pro), I don't know why.

Does it work correctly when you test Andreas1331's original repo?

I didn't reproduce the Andreas1331's original repo since there is no Android project and I did not know how do it.
I just grabbed the code as a plugin folder, and created the Websocket logic. I  will do some code cleaning to understand better, create a new clean project must be ideal to discard, but it will take time for me to do it.
The video color can be related to the comments in the DJIVideoCapturer, lines 56 or 83 about the buffer or encoding respectively. Or could be the client decoding side, I don't know yet. Maybe could it be related to the surface/texture log lines.
Another aspect to check is if related to some specific aircraft models. In DJIVideoCapturer there is an special treatment for a "DJI Air 2S", which includes a VideoDataListener. I will create a more simple client-side implementation for you to test and ensure if is vehicle agnostic, or special cases must be considered.

I didn't reproduce the Andreas1331's original repo since there is no Android project

Andreas1331's original repo mentions this link where they posted a build.grade file than can be imported in Android Studio.
In case of nasty troubles, try to run his code outside RD.

I look at it, but with my zero experience with Android I did not went further. I double checked the compatibility with the current video feed and is not viable, I had to comment a lot of code in MainActivity to make it work.
It is worth trying to run test in other clients and device, there is a post mentioning some OS difference regards the image codec.
Maybe gstreamer should be an option to solve this?
Additionally, I already setup a minimal webrtc-client for browser. Should I add a folder at the root of this repo? How should be addressed this changes?.

Should I add a folder at the root of this repo? How should be addressed this changes?

The webrtc client should be a different repo than RD. We should have a README file on the RD repo documenting how to setup everything.

It is worth trying to run test in other clients and device

I guess the problem is on the streaming side, not on the client.
You should ideally start from a known working setup, and then start replacing things to find out what exactly is causing the problem.
Try contacting Andreas1331 or the author of the blog he used as a reference.
Using gstreamer to receive the stream is also a good idea, to discard a problem with the webrtc client and to document the gstreamer command-line required for QGC.

Hi, I downloaded the DJI video decode sample project, and repeated the same steps to include the WebRTC streaming plugin, of course not as a plugin but as raw as possible to replicate it, and now I'm unable to connect to the signaling server. I checked with RD and it is working, so the problem must be with the example project.
I check the INTERNET android permission and is ok, but I'm having troubles to make the connection works, do you know what can it be? Or what should I check ?

Ok I solved, it just required the android:usesCleartextTraffic="true" in the application tag on the Manifest file. Now the socket is connecting.
Nevertheless, the following error appears when the WebRTC client send the request.
java_vm_ext.cc:591] JNI DETECTED ERROR IN APPLICATION: JNI NewGlobalRef called with pending exception java.lang.ClassNotFoundException: Didn't find class "org.webrtc.WebRtcClassLoader" on path: DexPathList[[dex file "/data/data/com.dji.videostreamdecodingsample/code_cache/.overlay/base.apk/classes.dex", zip file "/data/app/~~HrVfJiq0fUuLEFjwgGr_jg==/com.dji.videostreamdecodingsample-DgsIqG7Hd7IAUScwpgBVFg==/base.apk", dex file "InMemoryDexFile[cookie=[0, -5476376646205021344]]", dex file "InMemoryDexFile[cookie=[0, -5476376646205021120]]"],nativeLibraryDirectories=[/data/app/~~HrVfJiq0fUuLEFjwgGr_jg==/com.dji.videostreamdecodingsample-DgsIqG7Hd7IAUScwpgBVFg==/lib/arm64, /data/app/~~HrVfJiq0fUuLEFjwgGr_jg==/com.dji.videostreamdecodingsample-DgsIqG7Hd7IAUScwpgBVFg==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]
                                                                                java_vm_ext.cc:591]   at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:259)
                                                                                java_vm_ext.cc:591]   at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:379)
                                                                                java_vm_ext.cc:591]   at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
                                                                                java_vm_ext.cc:591]   at java.lang.String java.lang.Runtime.nativeLoad(java.lang.String, java.lang.ClassLoader, java.lang.Class) (Runtime.java:-2)
                                                                                java_vm_ext.cc:591]   at java.lang.String java.lang.Runtime.nativeLoad(java.lang.String, java.lang.ClassLoader) (Runtime.java:1126)
                                                                                java_vm_ext.cc:591]   at void java.lang.Runtime.loadLibrary0(java.lang.ClassLoader, java.lang.Class, java.lang.String) (Runtime.java:1080)
                                                                                java_vm_ext.cc:591]   at void java.lang.Runtime.loadLibrary0(java.lang.Class, java.lang.String) (Runtime.java:1003)
                                                                                java_vm_ext.cc:591]   at void java.lang.System.loadLibrary(java.lang.String) (System.java:1661)
                                                                                java_vm_ext.cc:591]   at boolean org.webrtc.NativeLibrary$DefaultLoader.load(java.lang.String) (:21)
                                                                                java_vm_ext.cc:591]   at void org.webrtc.NativeLibrary.initialize(org.webrtc.NativeLibraryLoader, java.lang.String) (:44)
                                                                                java_vm_ext.cc:591]   at void org.webrtc.PeerConnectionFactory.initialize(org.webrtc.PeerConnectionFactory$InitializationOptions) (:294)
                                                                                java_vm_ext.cc:591]   at void com.dji.videostreamdecodingsample.WebRTC.WebRTCClient.initializeFactory(android.content.Context) (:73)
                                                                                java_vm_ext.cc:591]   at org.webrtc.PeerConnectionFactory com.dji.videostreamdecodingsample.WebRTC.WebRTCClient.getFactory(android.content.Context) (:48)
                                                                                java_vm_ext.cc:591]   at void com.dji.videostreamdecodingsample.WebRTC.WebRTCClient.createVideoTrackFromVideoCapturer() (:132)
                                                                                java_vm_ext.cc:591]   at void com.dji.videostreamdecodingsample.WebRTC.WebRTCClient.<init>(java.lang.String, android.content.Context, org.webrtc.VideoCapturer, com.dji.videostreamdecodingsample.WebRTC.WebRTCMediaOptions) (:59)
                                                                                java_vm_ext.cc:591]   at com.dji.videostreamdecodingsample.WebRTC.WebRTCClient com.dji.videostreamdecodingsample.WebRTC.DJIStreamer.addNewClient(java.lang.String) (:40)
                                                                                java_vm_ext.cc:591]   at void com.dji.videostreamdecodingsample.WebRTC.DJIStreamer.lambda$setupSocketEvent$0(java.lang.String, java.lang.String) (:63)
                                                                                java_vm_ext.cc:591]   at void com.dji.videostreamdecodingsample.WebRTC.DJIStreamer.a(java.lang.String, java.lang.String) (:-1)
                                                                                java_vm_ext.cc:591]   at void com.dji.videostreamdecodingsample.WebRTC.a.onMessage(java.lang.String, java.lang.String) (:-1)
                                                                                java_vm_ext.cc:591]   at void com.dji.videostreamdecodingsample.WebRTC.websocket.SocketListenersBinder.lambda$setOnEventResponseListener$7(java.lang.String, com.dji.videostreamdecodingsample.WebRTC.websocket.OnEventResponseListener, com.dji.videostreamdecodingsample.WebRTC.websocket.SocketEvents$ResponseMessageEvent) (:78)
                                                                                java_vm_ext.cc:591]   at void com.dji.videostreamdecodingsample.WebRTC.websocket.f.accept(java.lang.Object) (:-1)
                                                                                java_vm_ext.cc:591]   at void io.reactivex.rxjava3.internal.observers.LambdaObserver.onNext(java.lang.Object) (:63)
2024-08-12 12:23:25.917 12253-12253 mdecodingsample         com.dji.videostreamdecodingsample    A  java_vm_ext.cc:591]   at void io.reactivex.rxjava3.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.g() (:202)
                                                                                java_vm_ext.cc:591]   at void io.reactivex.rxjava3.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run() (:256)
                                                                                java_vm_ext.cc:591]   at void b.a.a.a.b.c$b.run() (:123)
                                                                                java_vm_ext.cc:591]   at void android.os.Handler.handleCallback(android.os.Message) (Handler.java:942)
                                                                                java_vm_ext.cc:591]   at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:99)
                                                                                java_vm_ext.cc:591]   at boolean android.os.Looper.loopOnce(android.os.Looper, long, int) (Looper.java:211)
                                                                                java_vm_ext.cc:591]   at void android.os.Looper.loop() (Looper.java:300)
                                                                                java_vm_ext.cc:591]   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:8232)
                                                                                java_vm_ext.cc:591]   at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
                                                                                java_vm_ext.cc:591]   at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:580)
                                                                                java_vm_ext.cc:591]   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:1028)
                                                                                java_vm_ext.cc:591]
                                                                                java_vm_ext.cc:591]     in call to NewGlobalRef
                                                                                java_vm_ext.cc:591]     from java.lang.String java.lang.Runtime.nativeLoad(java.lang.String, java.lang.ClassLoader, java.lang.Class)

I just truncated the lines, apparently there is a double calling to some lib. I will upload the code to a repository and also create the client side repository.
I don't know how to continue, if trying to make it work in the isolated example code source or trying to organize better the video-related code of RD to isolate the problem.

Congratulations.
java.lang.ClassNotFoundException are normally easy to solve.

I don't know how to continue, if trying to make it work in the isolated example code source or trying to organize better the video-related code of RD to isolate the problem.

Whatever you feel is easier to achieve.
The initial working sample code is only required if you hit a wall and need a working case as a reference to find out what exactly is different and failing in your RD integration.

The java.lang.ClassNotFoundException was not so simple and was related to the proguard file as mentioned in a stackoverflow  post, so I disable the VideoFeed inside the android apk just to reduce the workload and added the websocket line to connect to the signaling server.
Here is the Android project repo and the WebRTC client-server repo. The obtained result is the same as the one in RD. I though that the image was in grayscale, but actually have the other color channels distorted. For example, if centered in the scene there is a window, more at the right is the window distorted in space highlighting the red channel, and on the other side the same distorted window highlighting the blue channel.
I do not know what can be the issue, do you have any thought? I matched the library version with those in RD to make it reproducible. The code can be easily download and executed, as usual you will require a new DJI app key.

Here is the Android project repo

This is a combination of
DJI-Mobile-SDK-Tutorials/Android-VideoStreamDecodingSample with https://github.com/Andreas1331/android-webrtc-dji/tree/main, right?
Maybe add this at the beginning of the README file.

Please send a picture. It sounds as you are seeing tree copies of the image for each RGB channel, so maybe it's just a format match between the sender and the receiver.

Maybe open an issue on https://github.com/angel-ayala/DJIVideoStreamDecodingSample and ask Andreas1331.

Good news! I was able to receive the video in a proper way, the streaming side is now working ok.
I already opened an issue on the Andreas1331's repo asking about it but in their code, on the DJIVideoCapturer class have a comment regards the codec capabilites.
Apparently the codec seems to be different on each Android device, on the original implementation uses the NV12 but in my case I required the I420. I still must update the isolated repository with those changes, but it is working ok. Also I still need to include those changes inside RD to check.
The only thing that worries me, is the current video feed method. I think that we could use the DJIVideoStreamDecoder from the isolated repository inside RD to organize better the video-related code of MainActivity and with that, have video in the surface/texture view and as a streaming service. I also believe that this could fix the video received by QGC.

Congratulations. I'm very happy for you.
Yes, every model has different codecs. We can define formats for every model.
All object instances and resources than can be shared, should be shared.

An important aspect that I forgot to mention is that when the video streaming starts, the texture video feed stops. Additionally, the WebRTC streaming is not being stopped.

The only thing that is missing is the Plugin Settings, how can I add the form for the WebRTC config?

Search for any of the settings menu options string.
There is a class with all the settings.
It's very simple.

An important aspect that I forgot to mention is that when the video streaming starts, the texture video feed stops. Additionally, the WebRTC streaming is not being stopped.

Is it interrupted when the smartphone screen turns off? Can you reproduce? Some message in the log?

Ah, you mean the rendering of the screen inside the RD app, right?
Yes, I remember this in-app screen stops working when you start grabbing frames for streaming (I experienced the same when
I wrote the RawVideoStreamer plugin).
I'm not sure if it's possible to have both working at the same time.
A workaround is to send the grabbed frame to the in-app screen.
If it's too slow/resource intensive, just render every n-frames.

There is a class with all the settings.

Actually is a xml file that contains the settings. It was really easy, I just encapsulated a few lines of code in new methods to enhance readability.

Is it interrupted when the smartphone screen turns off? Can you reproduce? Some message in the log?

I just test it, and yes the stream continues even when I turn off the screen. The log only shows the decoder messages saying that is running. I think that it will be necessary the onPause and onResume methods in the Plugin class to be able to stop the streaming, and start the streaming in this case. Or something similar.

I'm not sure if it's possible to have both working at the same time.
A workaround is to send the grabbed frame to the in-app screen.

I look up some information about this, and yes they are mutually exclusive. I found this and this GitHub issues that mention it. The most easy workaround appears to be drawing an image in the respective ImageView, but it will have a certain impact in the RD performance.
Other solution could be drawing the YUV data in a surface, which is achievable by EGL but appears to be very complex to do at first sight. I also found two helper classes from the WebRTC library that can be helpful to so this, I don't know.
YuvConverter:

Class for converting OES textures to a YUV ByteBuffer. It can be constructed on any thread, but should only be operated from a single thread with an active EGL context.

YuvHelper:

Wraps libyuv methods to Java. All passed byte buffers must be direct byte buffers.

However, I think that concurrent video feed and streaming must be done in a another PR since it will require to modify the code in MainActivity .

Just to mention that the DJI support center about live stream recommends the WebRTC protocol, RTSP is also possible but the SDK does not have a built-in function.
Community users also reported that there is also a problem using the SDK's LiveStreamManager when YUV data is activated.

I'm going to merge and test in the next weeks.
Feel free to provide further improvements.
Thanks for your great contribution.

Ok, I will update it
I didn't check the gstreamer part, mainly because is also new to me, but I can dig a bit how to implement in the following weeks. Maybe as a v2.


Display management

Acknowledge each connected display and allow config.
Related to #74 #73.

Closing without resolution. This issue either affects too few users or there are too many issues with higher impact to be working on. It is possible to re-open or re-visit this issue at a later time. If you feel this issue is important, please give a thumbs-up reaction to the first post. You may track this issue from the pinned meta-tracker at the top of the issues home page.


Add Foundry Virtual Tabletop

Adds Foundry Virtual Tabletop dedicated server
Note:

Both Linux and Windows are supported - the template is configured to download its own Node.js, and so is able to run on each platform regardless of whether Node.js, or the correct version, is otherwise installed on the system. The UI allows selection by the user of the desired version (must be at least v14.x)
The user is required to supply a (timed) download URL from the Foundry VTT login portal in order to download/update the server
Minimal settings are configured given that the server has a web interface for configuring them, and in many cases AMP can't handle them anyway (due to starting null values)

Thanks. It's been tested by a couple of other people in Discord and no issues.
I've updated the extra steps URI to point to Discourse.

After the next AMP release I will add ARM support.


Header object key regex was too restrictive

The standard name regex, as used for re-usable header objects in the #/components/headers object is too restrictive for use in the headers object keys themselves.
As per RFC7230 several additional characters are allowed in header names.

Would you double-check this now? It appears that the headers object is gone now (replaced by a map), so I'm not sure how we should use this new regex... maybe it's not needed.

Hi @timburks - looking at the latest schema I can see:

there is a headersOrReferences map
there is a headers map used by the requestBody/encoding property (should this also be headersOrReferences -possible defect in the spec?)
we are not yet removing the name and in properties of the copied parameter object definition
there is no restriction on the naming of the keys of headersOrReferences (additionalProperties is used instead of patternProperties)
the rule for objects under components is that they must satisfy the regex ^[a-zA-Z0-9\.\-_]+$
however that rule does not apply outside components
therefore it is currently problematic to use one map definition for all headers maps

I can raise an issue on the OAS repo asking for clarity...

@MikeRalphson, thanks for reviewing this!
@tfesenko asked if the headers map in the encoding object could contain references as a side question in this issue, but I suppose this change hasn't been made yet.
I've updated the schema builder to remove the name and in properties from the header object.
I hadn't noticed the regex restriction on objects under components but can add that, which will also change "additionalProperties" to "patternProperties" for those objects.
How to represent the other maps is a question worth discussing. Should we replace additionalProperties with patternProperties for all maps and use ".*" for maps with unrestricted keys? Are there any other maps that will have key restrictions?

Thanks @timburks I knew I'd seen a mention of the encoding header issue somewhere.
name and in removal LGTM.
I wonder if additionalProperties might perform better for schema validators than patternProperties with a universal regex? I think at this late stage it is unlikely that any other key restrictions will be added.
There is little risk with people defining headers that break the RFC7230 spec, as the API implementation would probably not be able to send them.


Change to first kind Chebyshev points

Fun(x->x<0?0:1,[-1.,0.,1.])
breaks cause second kind points evaluate at endpoints.  I can't see a reason not to use first kind points which avoid endpoints.

I keep running into issues with this one so I'll take care of it soon

If we change to first kind points, we should be able to use the function values to implement endpoint singularity detection.

On the other hand, Chebyshev points of the first kind do not nest nearly as efficiently as points of the second kind. On branch:
chebyshevpoints(2)
chebyshevpoints(6)
chebyshevpoints(18)

chebyshevpoints(5;kind=2)
chebyshevpoints(9;kind=2)
chebyshevpoints(17;kind=2)

This can now be closed. Further advantages include:

roots of large Funs based on Chebyshev series are about 40% faster
can create Funs with removable singularities at the middle of the interval

Fun(x->bessely0(abs(x))-2/π*besselj0(x)*log(abs(x)),Chebyshev([-2.,2.]))

Recycling function samples is another issue.


fix: update wording for create a time server

Checklist:

[x] I have read freeCodeCamp's contribution guidelines.
[x] My pull request has a descriptive title (not a vague title like Update index.md)
[x] My pull request targets the main branch of freeCodeCamp.
[x] I have tested these changes either locally on my machine, or GitPod.

Closes #46941

I have tested on a local copy of the site.

hi @jjz13744, thanks for opening this PR, I have closed it for being stale


Cannot open http://localhost

I cannot open http://localhost after I built this project by "docker-compose up --build -d". The web shows "This site can't be reached". Is anybody here meet the same question? I really need your help!

Hi. I have been quite busy in recent weeks so I cannot thoroughly look into what is going on for you. Make sure to have correct .env files in both server and client.

Hi. I cannot understand those tips from the Readme.
"

UPDATE 2022-06-30: WISE provides geojson for some of the maps. To access those geojson, download geojson.json from Google Drive, and then import them into MongoDB.

Create .env file for server and client following the template (should be same as template, change if you know what you are doing) (The template refers to server/.env.template and client/.env.template)
"
Can you teach me how to  import geojson.json into MongoDB?
Where are server/.env.template andclient/.env.template`? I do not find them in SORACode.
Sincerely appreciate your help！

Hi thanks for your help. I finally run the quick_start python script by sora-svl! And it works with Apollo7.0.
But I really wanna to know why Api-Only mode needs pressing the ON button in sora-svl?
And python-api sim.run() is not work.
Sincerely thank you for your help again!

Hi, I tried to mimic the original WISE svl cloud as much as possible, and this is how it used to work.
In your python script you can send an http request to the local cloud to trigger api only mode, the sim.run().

Ok I got your idea. But I have a new issue now.
I encountered a problem when I want to use Visual Editor. It is no-maps here!
This is a so tough question for me. Looking forward to your reply sincerely.

Hi, I haven't used visual editor, and the goal of this project is to just support API only simulations.

I wanna to test the planning module of Apollo7.0 by sora-svl. How can I created the scenarios which I designed for test planning? It is too difficult to set obstacles only by python api without json files saved by VSE.

I see. That is a feature I didn't know about. I only knew about NPC obstacles https://github.com/lgsvl/PythonAPI/blob/master/quickstart/13-npc-follow-waypoints.py
Unfortunately I would not be implementing more to support these. I am also a full time student so I was hoping the open source community can work together to get all the features supported.

Wahoo! I think you has already done a good job yet. Thanks for your contribution! Let's make the project better together.

Thanks for the feedback as well!

Hi Bro. I find a new question about MonoBleedingEdge's libmonobdwgc-2.0.so. I want to run LGSVL simulator by remote desktop of RDP connect. And I found the question is that LGSVL-simulator can be running in my server host Ubuntu but can not be started by Xrdp  Remote Desktop. And I use gdb ./simulator to catch errors which shows that the libmonobdwgc-2.0.so may have some problems to be imported. Needless to say, I really need your help! Thanks.

@sixiaixixiya Hi sorry I just got my own stuff done and I am coming back to try to answer questions. I am not familiar with the setup you are using (remote desktop, XRDP, etc.) therefore I might not be able to help with this.

That's OK! Never mind. But I have one more question now. I want change the http://localhost of SORA wise to avoid url address conflicts with my local Gitlab. I try to change the port 80 of nginx to 81 and change the .env of client to  http://localhost:81. I cannot use it normally though it  can be compiled successfully. Also I just find the container of your 4 database will be stopped when I open my url http://localhost:81.
In a word. I wish you can teach me how to change the url and the port 80of database container sincerely!

I haven’t tried changing ports but I believe all you have to change is actually this line
https://github.com/YuqiHuai/SORA-SVL/blob/49d3d068f35069ecec438d149d45c272b4316261/docker-compose.yml#L34
change it to 81:80 and see if it works?

Thanks! I did it.
change docker-compose.yml --- 81:81
change .env of client ---localhost:81
change nginx.cofig --- listen:81
do not change mogon/setup import.sh!
now I can open url: localhost:81 it work well!

Sounds good! Well I’m glad it is working! But I meant you probably could get it working by just changing that one line to 81:80, not 81:81.
You changed a few more places that were meant for communication between containers. But you got really lucky and got everything working!


User warning

For security reasons, the app should warn the user when the android patchlevel is too low, especially before enabling bluetooth.

This could potentially scare users from using the app.
I see the security aspect though.
There are settings to have Bluetooth LE beacon scanning active, even if Bluetooth itself is "switched off", however the app doesn't recognize this and warns about disabled Bluetooth.
Either Bluetooth is always on, even when "turned off" (thus enabling beacon scanning) and this wouldn't fix that
or
The app (/API) needs to be able to work with BLE scanning only without displaying a warning about disabled Bluetooth.
I don't know if the vulnerabilities only affect classic BT

A user using an insecure OS generally has more severe problems than Bluetooth. It is not the task of Apps to warn users that the foundation they are running on is insecure.

Thanks for this proposal. We'll move it into the cwa-wishlist repository where it might be available for feedback for a wieder audience.


How to create send and receive media / photo

Hi, i want to ask how to send message image from photo gallery in swift?
here is the function after select photo and then sending the image
    func  imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    var image : UIImage
    image = (info[UIImagePickerControllerOriginalImage] as? UIImage)!
    var photoItem = JSQPhotoMediaItem()
    photoItem.image = image

    let fullMessage = JSQMessage(senderId: OneChat.sharedInstance.xmppStream?.myJID.bare(), senderDisplayName: OneChat.sharedInstance.xmppStream?.myJID.bare(), date: NSDate(), media: photoItem)
    messages.addObject(fullMessage)
    let mediaItem:JSQMessageMediaData = fullMessage!.media
        photoItem = mediaItem as! JSQPhotoMediaItem

    if (mediaItem.isKindOfClass(JSQPhotoMediaItem)) {

        if let recipient = recipient {

            OneMessage.sendMessage("image", to: recipient.jidStr, completionHandler: { (stream, image) -> Void in
                JSQSystemSoundPlayer.jsq_playMessageSentSound()
                self.finishSendingMessageAnimated(true)
            })
        }
    }
    self.dismissViewControllerAnimated(true, completion: nil)
}`

`
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
var image : UIImage
image = (info[UIImagePickerControllerOriginalImage] as? UIImage)!
var photoItem = JSQPhotoMediaItem()
photoItem.image = image
    let fullMessage = JSQMessage(senderId: OneChat.sharedInstance.xmppStream?.myJID.bare(), senderDisplayName: OneChat.sharedInstance.xmppStream?.myJID.bare(), date: NSDate(), media: photoItem)
    messages.addObject(fullMessage)
    let mediaItem:JSQMessageMediaData = fullMessage!.media
        photoItem = mediaItem as! JSQPhotoMediaItem

    if (mediaItem.isKindOfClass(JSQPhotoMediaItem)) {

        if let recipient = recipient {
            OneMessage.sendMessage("image", to: recipient.jidStr, completionHandler: { (stream, image) -> Void in
                JSQSystemSoundPlayer.jsq_playMessageSentSound()
                self.finishSendingMessageAnimated(true)
            })
        }
    }
    self.dismissViewControllerAnimated(true, completion: nil)
}  `

Hello @Koutenshidatshu I don't understand the problem here, this is not an issue at all, you should ask this kind of question on StackOverflow. Closing this now


Error in a dependency which uses gopkg.in (Gin branch: master)

What version of dep are you using (dep version)?
v0.5.0
What dep command did you run?
dep init
What did you expect to see?
I've a running project using the Gin Framework (branch: master), I just did:

dep init
I expected that everything will be working but I'm getting an error when my project bootstrap.

What did you see instead?
my-project/vendor/github.com/gin-gonic/gin/binding
vendor/github.com/gin-gonic/gin/binding/yaml.go:30:13: undefined: yaml.NewDecoder
I checked that file and notice that there is an import using "gopkg.in":
package binding

import (
	"bytes"
	"io"
	"net/http"

	"gopkg.in/yaml.v2"
)

What can I do to use that framework with Dep?

Can you paste the contents of dep init -v or dep ensure -v ?
Is there a public repository we can reproduce this on?

facing same issue when I do go get github.com/gin-gonic/gin  any way to fix it?

github.com/gin-gonic/gin/binding
../../go/src/github.com/gin-gonic/gin/binding/yaml.go:30:13: undefined: yaml.NewDecoder

@rexfordnyrk I still haven't figured out what the actual problem is, but it has something to do with upgrading from gin 1.3 to 1.4. If I clear out my dep artifacts(toml, lock, and vendor) and do a fresh dep init, things seem to work.

@jlnaps well since I couldnt get a work around I ended up going along with go mod and that seemed to work.


Fixed Medium Issue 1 (React.js)

This React application implements a simple To-Do list allowing users to add, update, and delete items. It utilizes React Hooks for state management and localStorage for persistence, ensuring that the data persists even after a browser refresh.
Pull Request Type
What kind of change does this PR introduce?
[x] Feature
What is the current behavior?
N/A (This PR introduces a new feature)
What is the new behavior?
This PR adds functionality to create a simple To-Do list application in React, allowing users to add, update, and delete To-Do items. State management is handled using React Hooks, and localStorage is used for state persistence.
Other information
N/A

Merged

This is an automated message from Fork, Commit, Merge [BOT].

Thank you for your contribution! Your pull request has been merged. The files have been reset for the next contributor.
What's next?
If you're looking for more ways to contribute, I invite you to check out our forkcommitmerge.io website repository. The repository contain real issues that you can help to resolve or create some of your own if you see any bugs or want to add new features to the site, etc. You can also check out the Influences section in the README to find more projects similar to this one.
Also please leave a star to this project if you feel it helped you, i would really appreciate it.
I look forward to seeing your contributions!


How cancel drop node

Thanks for this library.
I have 2 tree.
I allow to drag node from tree a to tree b only.
is there an option to cancel drop node after I set accept callback to true in tree b when the node is out from the tree area?

This works however seems pretty hacky. Would be nice if the event had a preventDefault method or something to that effect.

@mattdarveniza +1

https://github.com/angular-ui-tree/angular-ui-tree/pull/589 address this, but is not yet merged.

Aha, thanks for the heads up :)

#589 has been merged


compilation fails with no-ui

crypto\store\loader_file.c(56): error C2065: 'UI_INPUT_FLAG_DEFAULT_PWD': undeclared identifier
I do assume the #if !defined(OPENSSL_NO_UI) checks in https://github.com/openssl/openssl/blob/master/crypto/store/loader_file.c are missing.

Hmmm...  Using UI is an integral part of OSSL_STORE, so that would mean that turning off UI would turn off OSSL_STORE, which is unfortunate.
However, this has me thinking that both UI and OSSL_STORE are really composed of two things each, 1) a core API for which one can build methods, and 2) one or more method that implements the functionality (a console method for UI, a file loading method for OSSL_STORE.
So I'm what I'm wondering is if it's really interesting to disable the core libraries (and why), or are the methods the real thing one might want to disable?
What say you, @matbech?

In the lack of an answer, I think I'll opt for making UI non-disablable.  However, I'll make the default built-in method UI_OpenSSL disablable, with the assumption that this is important to be able to do on small devices for the same reason no-stdio may be a good idea.
As a side effect, this also simplifies other routines, like PEM_def_callback and EVP_read_pw_*, as they currently make more assumptions about the default UI they use than they should.
I hope this option will be satisfactory.

That sounds like a good idea. An option like no-ui-console would then exclude UI_OpenSSL and set the default ui method to UI_null. On Windows, this would remove imports for ReadConsoleW and co., which was one of the reasons no-ui was originally used.

Cool, I'm glad we're on the same page :-)

This sounds like a bug.  Can you open an issue for it?

Issue opened:
https://github.com/openssl/openssl/issues/5465


Client-side generated signatures are handled incorrectly

The path name of signatures is based on their corresponding artifact. However bintrayUpload currently uses some home-grown information container which looses this information. Hence the signature path name is created incorrectly and the signatures for different files conflict and overwrite each other. See below for a transcript.
Uploading to https://api.bintray.com/content/kotarak/kotkade/gradle-plugin/1.4.0/de/kotka/gradle/gradle-plugin/1.4.0/gradle-plugin-1.4.0.jar...
Uploaded to 'https://api.bintray.com/content/kotarak/kotkade/gradle-plugin/1.4.0/de/kotka/gradle/gradle-plugin/1.4.0/gradle-plugin-1.4.0.jar'.
Uploading to https://api.bintray.com/content/kotarak/kotkade/gradle-plugin/1.4.0/de/kotka/gradle/gradle-plugin/1.4.0/gradle-plugin-1.4.0.pom...
Uploaded to 'https://api.bintray.com/content/kotarak/kotkade/gradle-plugin/1.4.0/de/kotka/gradle/gradle-plugin/1.4.0/gradle-plugin-1.4.0.pom'.
Uploading to https://api.bintray.com/content/kotarak/kotkade/gradle-plugin/1.4.0/de/kotka/gradle/gradle-plugin/1.4.0/gradle-plugin-1.4.0.asc...
Uploaded to 'https://api.bintray.com/content/kotarak/kotkade/gradle-plugin/1.4.0/de/kotka/gradle/gradle-plugin/1.4.0/gradle-plugin-1.4.0.asc'.
Uploading to https://api.bintray.com/content/kotarak/kotkade/gradle-plugin/1.4.0/de/kotka/gradle/gradle-plugin/1.4.0/gradle-plugin-1.4.0.asc...
Uploaded to 'https://api.bintray.com/content/kotarak/kotkade/gradle-plugin/1.4.0/de/kotka/gradle/gradle-plugin/1.4.0/gradle-plugin-1.4.0.asc'.

Hi Meikel,
thanks for your contribution! We'll review and merge the PR ASAP. Can you please take a look here for a CLA signature?
Thanks!

CLA signed.


1.5.1beta2

Codecov Report

Merging #806 into master will increase coverage by 4.84%.
The diff coverage is 72.22%.

@@            Coverage Diff             @@
##           master     #806      +/-   ##
==========================================
+ Coverage   27.67%   32.51%   +4.84%
==========================================
  Files          36       36
  Lines        6512     6520       +8
==========================================
+ Hits         1802     2120     +318
+ Misses       4710     4400     -310

Impacted Files
Coverage Δ

Aerial/Source/Models/DisplayDetection.swift
60.91% <100%> (+0.81%)
:arrow_up:

...urce/Controllers/PreferencesWindowController.swift
55.66% <100%> (+4.47%)
:arrow_up:

Aerial/App/AppDelegate.swift
70.27% <100%> (+12.57%)
:arrow_up:

...ial/Source/Controllers/PWC Tabs/PWC+Displays.swift
26.92% <25%> (-0.17%)
:arrow_down:

Aerial/Source/Views/AerialView.swift
27.26% <46.66%> (+0.26%)
:arrow_up:

Aerial/Source/Models/ErrorLog.swift
59.52% <50%> (+49.62%)
:arrow_up:

Aerial/Source/Controllers/Preferences.swift
55.22% <71.42%> (+1.69%)
:arrow_up:

Aerial/Source/Models/Cache/VideoCache.swift
32.47% <78.26%> (+2.11%)
:arrow_up:

... and 8 more

Continue to review full report at Codecov.

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


CameraConfiguration' object is not callable

While running the python script with configuration object i m getting the following error. Seems like object is not callable.
review_config = picam2.preview_configuration()
TypeError: 'CameraConfiguration' object is not callable

In the latest release all the xxx_configuration methods were renamed to to create_xxx_configuration.
So you need to call create_preview_configuration() as in the updated example here:
https://github.com/raspberrypi/picamera2/blob/main/examples/preview.py

Thanks @Tim-Brown-NZ