Feature request: remote include()

I normally edit scripts locally and then have to rsync them over to a remote server for execution.  I think it would be very useful if RemoteREPL had a macro like @remoteinclude() which would read a script from the local filesystem, but load it on the connected remote server.

You can do this by combining @remote with base.include_string:
julia@localhost> include_string(@__MODULE__, @remote(read("foo.jl", String)), "foo.jl")

I suppose we could have a "Repl magic" shortcut (similar to %module) for this such as
julia@localhost> %rinclude foo.jl

That would allow for local tab completion too.

I implemented this general idea in #38.  I just called the command %include for simplicity.

Thanks!  That works very well for single line includes.
What do you think about scanning the included file and recursively looking for additional includes to load?
Something like this, but automatically getting the paths of the necessary files to include recursively:
https://fredrikekre.github.io/Literate.jl/v2/customprocessing/#Example:-Replacing-include-calls-with-included-code

Ok let's support recursive include(path) with the restriction that path must be a string literal. This is done in #39.
The implementation based on string substitution in the Literate docs is fairly crude (if nice and simple). Instead I've done this by parsing and expression manipulation so we can get proper paths for all files.


Support produce message failure auto retry

In message related module, we should auto retry when producing messages failed. The following parts should be considered:

How to determine whether a produce is retriable or not. Simply retrying might result in duplicate messages.
Let you specify max retry times and retry backoff policy.
How to react when exceed max retry times. Throw exception, log or send to another error channel.

Closing this issue.
Because it's not active for a long time.
If anyone have similar issue, please create issue in new repo: https://github.com/Azure/azure-sdk-for-java/issues


UndisclosedPassword object wasn't fully instanciated

Q
A

Documentation
no

Bugfix
yes

BC Break
no

New Feature
no

RFC
no

QA
no

Description
Added missing parent constructor call, which prevented the validator to get completley instanciated

I will add a test in the next couple of days. :)

All right, took me a bit longer to get this small additions done, but hey, here they are. ;)

Thanks, @benjaminhirsch!


Bug: Server crashes on start

When starting up the server using tag version 2022.9.0-dev.4. I made no other change besides for the version (upgraded from 2022.9.0-dev.2), this was previously working.
The server immediately crashes with the following error:
/corredor/node_modules/chartjs-plugin-colorschemes/src/colorschemes/index.js:3
import * as brewer from './colorschemes.brewer';
^^^^^^

SyntaxError: Cannot use import statement outside a module
    at wrapSafe (internal/modules/cjs/loader.js:1001:16)
    at Module._compile (internal/modules/cjs/loader.js:1049:27)
    at Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
    at Object.require.extensions.<computed> [as .js] (/corredor/node_modules/ts-node/src/index.ts:851:44)
    at Module.load (internal/modules/cjs/loader.js:950:32)
    at Function.Module._load (internal/modules/cjs/loader.js:790:12)
    at Module.require (internal/modules/cjs/loader.js:974:19)
    at require (internal/modules/cjs/helpers.js:101:18)
    at Object.<anonymous> (/corredor/node_modules/@cortezaproject/corteza-js/src/shared/types/chart/colorschemes.ts:2:22)
    at Module._compile (internal/modules/cjs/loader.js:1085:14)
corteza_corredor_1 exited with code 1

@Fajfa
Did you see this issue?
It's still occuring on 2022.9.0-rc.2

Did not see it no, someone else is already working on a fix regarding this

Great thank you

@skamensky
Could you double check this, we can't seem to replicate it.
Even if trying to import what you are importing (not sure where that comes from if you don't import it)

I can reproduce it even by just running docker run cortezaproject/corteza-server-corredor:2022.9.0-dev.4
Do you not get that same error?
You can go to https://labs.play-with-docker.com/ for a clean tetsing environment

Now did you?

Someone else is working on this task. They have managed to replicate it and you can expect the fix to be in 2022.9.1
Which should be released sometime in the middle of the next week

Great and thanks. No rush. I just wanted to make sure you could reproduce it.

Confirming that 2022.9.1 does fix this issue


Unable to dynamically load assemblies for exe .NET Core 3.0 apps

Issue Title
Unable to dynamically load assemblies for exe .NET Core 3.0 apps
General
Repro steps:

[x] Create a .NET Core 3.0 Desktop app - App-A
[x] Create a .NET Core 3.0 Console app - App-B
[x] Create a .NET Core 3.0 Class Library - App-C
[x] Create a .NET Standard 2.0 Class Library - Lib
[x] Add dynamic assembly loading code into each one of the apps:
Assembly.Load(new AssemblyName(name))
[x] Execute each one of them while invoking the assembly loading code

Expected: All are able to load the assembly dynamically
Actual: Only App-C is successful

Thanks for reporting, @godrose .
@ericstj @joperezr  is this something you could help with, since it's related to usage of .NET Standard libraries?

I'm not sure i fully understand what you mean by a .NET Core 3.0 Desktop app, do you mean an app that targets .net framework? Same question goes for the class library, is it an actual app or is that a library? If you could attach a minimal repro solution with all projects we can take a look.

1 month no response, closing. Feel free to reopen if there is more info available. Thanks!


Added possibility to change "forecast" text

added $forecast_text variable and "forecast_text" config file option
this way, the forecast text can be adjusted/translated

Hi,
I'm not sure if I'm following correct protocol here, if not, please accept my apologies.
I translated my output of ansiweather, only "forecast" stuck out, so I rewrote two lines.
I actually found ansiweatherrc files online with "forecast_text:".. all the more reason to add the option.

Sorry, got caught up with other things. At first sight, this looks reasonable. Will try to review and merge soon, thanks for your contribution!

Merged, thanks!


refactor: consider switching to jest for testing

Since the admin interface is React it might be useful to use Jest for server and web client.

react friendly
speed
stackshare
easily converted

While a good suggestion I don't think this needs an open issue to track this.


When using Content Negotiation, and the CoerceStupidBrowsers convention,...

... content is negotiated as HTML even when the browser requests json.  This fixes by adding an additional check for json.

Will revisit this in another form.. a lot has changed since. Thanks!


i18n(ja) update ja/nav.ts

Description (required)
I updated ja/nav.ts because it is outdated.
I added some new translations of nav content and removed outdated content.
I also sorted out existing content.

Related issues & labels (optional)

Closes #
Suggested label:i18n

Lunaria Status Overview
🌕 This pull request will trigger status changes.

Learn more
By default, every PR changing files present in the Lunaria configuration's files property will be considered and trigger status changes accordingly.
You can change this by adding one of the keywords present in the ignoreKeywords property in your Lunaria configuration file in the PR's title (ignoring all files) or by including a tracker directive in the merged commit's description.

Tracked Files

Locale
File
Note

ja
nav.ts
Localization changed, will be marked as complete.

Warnings reference

Icon
Description

🔄
The source for this localization has been updated since the creation of this pull request, make sure all changes in the source have been applied.


WiFi and Ethernet Bridge?

Perhaps I'm missing this ability as an inherent part of the base libraries, but I cannot seem to get Wi-Fi and Ethernet servers to operate in one program. The intent is to connect one or the other based on if Ethernet is physically connected, or default to Wi-Fi if Ethernet isn't connected at startup. Removing Ethernet would start the Wi-Fi AP and server. Both listen for clients after switching.
I have not been able to successfully split the startup functions and declarations based on input feedback. I can compile a logic tree that starts one or the other, but there seems to be a problem with the class when trying to connect. It appears to me that the items to consider are as follows:
EthernetServer server( );
Ethernet.begin( );
EthernetClient client = server.available( );
WiFiServer server( );
WiFi.softAP( );
server.begin ( );
WiFiClient = server.available( );
Is it possible to merge these two functionally without major changes?

You have to give the servers different names, such as server and wifiServer
Try the following sketch for ESP32 and see both Ethernet and WiFi can coexist, and one is still working if the other fails
#if !(ESP32)
  #error This code is for ESP32 only
#endif

#define USE_ETHERNET          true

#include <WiFi.h>
#include <WebServer.h>

#include <SPI.h>
#include <Ethernet.h>

const char* ssid     = "your-ssid";
const char* password = "your-password";

// Enter a MAC address and IP address for your controller below.

byte mac[] =
{
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};

// Select the IP address according to your local network
IPAddress ip(192, 168, 2, 100);

EthernetServer server(80);

WiFiServer wifiServer(80);

const int led = 13;

void setup(void)
{
  // Open serial communications and wait for port to open:
  Serial.begin(115200);
  delay(1000);
  Serial.println("\nStarting HelloServer on " + String(ARDUINO_BOARD));

  //////////////////////////////////////////////

  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  /////////////////////////////////////////////

#if defined(ESP32)
  // Use the correct pin for ESP32
  #define USE_THIS_SS_PIN   27

  #if ( USE_ETHERNET || USE_ETHERNET_LARGE || USE_ETHERNET2 || USE_ETHERNET_ENC )
    // Must use library patch for Ethernet, EthernetLarge libraries
    // ESP32 => GPIO2,4,5,13,15,21,22 OK with Ethernet, Ethernet2, EthernetLarge
    // ESP32 => GPIO2,4,5,15,21,22 OK with Ethernet3

    //Ethernet.setCsPin (USE_THIS_SS_PIN);
    Ethernet.init (USE_THIS_SS_PIN);
  #endif
#endif

  // start the ethernet connection and the server:
  //Ethernet.begin(mac, ip);
  Ethernet.begin(mac);

  server.begin();

  Serial.print(F("HTTP EthernetWebServer is @ IP : "));
  Serial.println(Ethernet.localIP());

  //////////////////////////////////

  wifiServer.begin();

  Serial.print(F("HTTP WiFiWebServer is @ IP : "));
  Serial.println(WiFi.localIP());
}

void processClient(Client &client, bool fromWiFi = false)
{
  if (client)
  {
    if (fromWiFi)
      Serial.println("New WiFi client");
    else
      Serial.println("New Ethernet client");

    // an http request ends with a blank line
    boolean currentLineIsBlank = true;

    while (client.connected())
    {
      if (client.available())
      {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank)
        {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
          client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("");

          if (fromWiFi)
            client.println("
Hello to WiFi client
");
          else
            client.println("
Hello to Ethernet client
");

          // output the value of each analog input pin
          for (int analogChannel = 0; analogChannel < 6; analogChannel++)
          {
            int sensorReading = analogRead(analogChannel);
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(sensorReading);
            client.println("
");
          }
          client.println("");
          break;
        }

        if (c == '\n')
        {
          // you're starting a new line
          currentLineIsBlank = true;
        } else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }

    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disconnected");
  }
}

void loop()
{
  // listen for incoming clients
  EthernetClient client = server.available();

  processClient(client, false);

  // listen for incoming clients
  WiFiClient wifiClient = wifiServer.available();

  processClient(wifiClient, true);
}

But to use the high level EthernetWebServer and ESP32 WebServer is currently not ready, unless the library is modified to avoid conflicts.
I don't think I'll spend time to modify the library as this use case is not popular.

Thank you for that example. Helped getting it going, and I understand the oddity of wanting both connections. They do work just fine with small data having both run simultaneously. I tested them rapidly, connecting on and off and sending multiple HTTP requests, and they hold pretty steady. I guess I don't need to separate either/or. Trying to separate them, it didn't like use of the classes for some reason with Ethernet.
I only made a couple changes, but for others who may have similar questions and search their way into this closed issue, this can be a working connection at least using ESP32-Wrover to W5500 using an HTTP/HTML website with minimal data.

This method does not comply with handler.
After separating wifi sever as  WiFiServer serverWifi(80);
I'm getting error like this
in setup() serverWifi.on("/", handleRoot);  //'class WiFiServer' has no member named 'on'  //conflicting with ethernet
in loop() serverWifi.handleClient(); //previous definition of 'class RequestHandler' //conflicting with ethernet

@sdrshnptl
Thanks for chipping in.
Anyway, you're confused between WiFiServer and WebServer libraries. Only the latter can provide higher-level functions such as
serverWifi.on("/", handleRoot);

Try to change the sketch to
#if !(ESP32)
  #error This code is for ESP32 only
#endif

#define USE_ETHERNET          true

#include <WiFi.h>
#include <WebServer.h>

#include <SPI.h>
#include <Ethernet.h>

const char* ssid     = "your-ssid";
const char* password = "your-password";

// Enter a MAC address and IP address for your controller below.

byte mac[] =
{
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};

// Select the IP address according to your local network
IPAddress ip(192, 168, 2, 100);

EthernetServer server(80);

WebServer wifiServer(80);

const int led = 13;

void handleWiFiRoot()
{
  wifiServer.send(200, "text/plain", "Hello from ESP32 WiFi!");
}

void setup(void)
{
  // Open serial communications and wait for port to open:
  Serial.begin(115200);
  delay(1000);
  Serial.println("\nStarting WiFi_Ethernet_ESP on " + String(ARDUINO_BOARD));

  //////////////////////////////////////////////

  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  /////////////////////////////////////////////

#if defined(ESP32)
  // Use the correct pin for ESP32
  #define USE_THIS_SS_PIN   27

  #if ( USE_ETHERNET || USE_ETHERNET_LARGE || USE_ETHERNET2 || USE_ETHERNET_ENC )
    // Must use library patch for Ethernet, EthernetLarge libraries
    // ESP32 => GPIO2,4,5,13,15,21,22 OK with Ethernet, Ethernet2, EthernetLarge
    // ESP32 => GPIO2,4,5,15,21,22 OK with Ethernet3

    //Ethernet.setCsPin (USE_THIS_SS_PIN);
    Ethernet.init (USE_THIS_SS_PIN);
  #endif
#endif

  // start the ethernet connection and the server:
  //Ethernet.begin(mac, ip);
  Ethernet.begin(mac);

  server.begin();

  Serial.print(F("HTTP EthernetWebServer is @ IP : "));
  Serial.println(Ethernet.localIP());

  //////////////////////////////////

  wifiServer.on("/", handleWiFiRoot);

  wifiServer.begin();

  Serial.print(F("HTTP WiFiWebServer is @ IP : "));
  Serial.println(WiFi.localIP());
}

void processClient(Client &client, bool fromWiFi = false)
{
  if (client)
  {
    if (fromWiFi)
      Serial.println("New WiFi client");
    else
      Serial.println("New Ethernet client");

    // an http request ends with a blank line
    boolean currentLineIsBlank = true;

    while (client.connected())
    {
      if (client.available())
      {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank)
        {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
          client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("");

          if (fromWiFi)
            client.println("
Hello to WiFi client
");
          else
            client.println("
Hello to Ethernet client
");

          // output the value of each analog input pin
          for (int analogChannel = 0; analogChannel < 6; analogChannel++)
          {
            int sensorReading = analogRead(analogChannel);
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(sensorReading);
            client.println("
");
          }
          client.println("");
          break;
        }

        if (c == '\n')
        {
          // you're starting a new line
          currentLineIsBlank = true;
        } else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }

    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disconnected");
  }
}

void loop()
{
  // listen for incoming clients
  EthernetClient client = server.available();

  processClient(client, false);

  wifiServer.handleClient();
}

Thanks!
Will check and update!

Major Releases v2.0.0

Make breaking changes to permit coexistence with ESP32 WebServer and ESP8266 ESP8266WebServer libraries
Add and modified examples

From v2.0.0, you can use simultaneously both EthernetWebServer and ESP32 WebServer  as follows
// To demonstrate the coexistence of this EthernetWebServer and ESP32 WebServer library

#define USE_ETHERNET          true

#include <WiFi.h>
#include <WebServer.h>

#include <SPI.h>
#include <EthernetWebServer.h>

const char* ssid     = "your_ssid";
const char* password = "your_password";

// Enter a MAC address and IP address for your controller below.

byte mac[] =
{
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};

// Select the IP address according to your local network
IPAddress ip(192, 168, 2, 100);

EthernetWebServer ethernetServer(80);
WebServer wifiServer(80);

const int led = 13;

void handleEthernetRoot()
{
  ethernetServer.send(200, "text/plain", "Hello from ESP32 Ethernet!");
}

void handleWiFiRoot()
{
  wifiServer.send(200, "text/plain", "Hello from ESP32 WiFi!");
}

void setup()
{
  // Open serial communications and wait for port to open:
  Serial.begin(115200);
  delay(1000);
  Serial.println("\nStarting WiFi_Ethernet_Complex_ESP32 on " + String(ARDUINO_BOARD));

  //////////////////////////////////////////////

  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  // start the ethernet connection and the server:
  //Ethernet.begin(mac, ip);
  Ethernet.begin(mac);

  ethernetServer.on("/", handleEthernetRoot);

  ethernetServer.begin();

  Serial.print(F("HTTP EthernetWebServer is @ IP : "));
  Serial.println(Ethernet.localIP());

  //////////////////////////////////

  wifiServer.on("/", handleWiFiRoot);

  wifiServer.begin();

  Serial.print(F("HTTP WiFiWebServer is @ IP : "));
  Serial.println(WiFi.localIP());
}

void loop()
{
  // listen for incoming clients
  ethernetServer.handleClient();

  wifiServer.handleClient();
}

Hey @khoih-prog !
I really appreciated your work!
Now I can do WIFI and Ethernet at same time!

There is small addition
Please add following to update server port in runtime  in client mode
httpClient.updatePort(server_port);
in  "Ethernet_HttpClient.cpp"
void EthernetHttpClient::updatePort(uint16_t new_port)
{
  iServerPort = new_port;
}

in "Ethernet_HttpClient.h"
void updatePort(uint16_t new_port);

I have a problem: "ESP32 compiling error". how fix it?

I have a problem: "ESP32 compiling error". how fix it?

Those errors have a broad range, please share the error log to fellow members in the new issue.

In file included from C:\Users\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6/tools/sdk/include/wifi_provisioning/wifi_provisioning/wifi_config.h:18:0,
from C:\Users\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6/tools/sdk/include/wifi_provisioning/wifi_provisioning/manager.h:20,
from C:\Users\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\WiFi\src/WiFiGeneric.h:31,
from C:\Users\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\WiFi\src/WiFiSTA.h:28,
from C:\Users\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\WiFi\src/WiFi.h:32,
from C:\Users\OneDrive\Belgeler\Arduino\test\test.ino:3:
C:\Users\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6/tools/sdk/include/lwip/lwip/inet.h:142:58: error: expected identifier before '(' token
#define inet_aton(cp, addr)             ip4addr_aton(cp, (ip4_addr_t*)addr)
^
c:\Users\OneDrive\Belgeler\Arduino\libraries\Ethernet_Generic\src/Dns.h:48:9: note: in expansion of macro 'inet_aton'
int inet_aton(const char aIPAddrString, IPAddress& aResult);
^
c:\Users\OneDrive\Belgeler\Arduino\libraries\Ethernet_Generic\src/Dns.h:48:46: error: expected ',' or '...' before 'IPAddress'
int inet_aton(const char aIPAddrString, IPAddress& aResult);
^
C:\Users\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6/tools/sdk/include/lwip/lwip/inet.h:142:71: note: in definition of macro 'inet_aton'
#define inet_aton(cp, addr)             ip4addr_aton(cp, (ip4_addr_t)addr)
^
C:\Users\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6/tools/sdk/include/lwip/lwip/inet.h:142:58: error: expected identifier before '(' token
#define inet_aton(cp, addr)             ip4addr_aton(cp, (ip4_addr_t)addr)
^
c:\Users\OneDrive\Belgeler\Arduino\libraries\Ethernet_Generic\src/Dns_Impl.h:118:16: note: in expansion of macro 'inet_aton'
int DNSClient::inet_aton(const char* address, IPAddress& result)
^
c:\Users\OneDrive\Belgeler\Arduino\libraries\Ethernet_Generic\src/Dns_Impl.h:118:47: error: expected ',' or '...' before 'IPAddress'
int DNSClient::inet_aton(const char* address, IPAddress& result)
^
C:\Users\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6/tools/sdk/include/lwip/lwip/inet.h:142:71: note: in definition of macro 'inet_aton'
#define inet_aton(cp, addr)             ip4addr_aton(cp, (ip4_addr_t*)addr)
^
In file included from c:\Users\OneDrive\Belgeler\Arduino\libraries\Ethernet_Generic\src/EthernetClient_Impl.h:55:0,
from c:\Users\OneDrive\Belgeler\Arduino\libraries\Ethernet_Generic\src/Ethernet_Generic_Impl.h:60,
from c:\Users\OneDrive\Belgeler\Arduino\libraries\Ethernet_Generic\src/Ethernet_Generic.h:82,
from c:\Users\OneDrive\Belgeler\Arduino\libraries\EthernetWebServer\src/EthernetWebServer.h:58,
from C:\Users\OneDrive\Belgeler\Arduino\test\test.ino:7:
c:\Users\OneDrive\Belgeler\Arduino\libraries\Ethernet_Generic\src/Dns_Impl.h: In member function 'int DNSClient::ip4addr_aton(const char*, int ()(ip4_addr_t))':
c:\Users\OneDrive\Belgeler\Arduino\libraries\Ethernet_Generic\src/Dns_Impl.h:145:7: error: 'result' was not declared in this scope
result[dots++] = acc;
^
c:\Users\OneDrive\Belgeler\Arduino\libraries\Ethernet_Generic\src/Dns_Impl.h:161:3: error: 'result' was not declared in this scope
result[3] = acc;
^
In file included from C:\Users\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6/tools/sdk/include/wifi_provisioning/wifi_provisioning/wifi_config.h:18:0,
from C:\Users\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6/tools/sdk/include/wifi_provisioning/wifi_provisioning/manager.h:20,
from C:\Users\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\WiFi\src/WiFiGeneric.h:31,
from C:\Users\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\WiFi\src/WiFiSTA.h:28,
from C:\Users\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\WiFi\src/WiFi.h:32,
from C:\Users\OneDrive\Belgeler\Arduino\test\test.ino:3:
c:\Users\OneDrive\Belgeler\Arduino\libraries\Ethernet_Generic\src/Dns_Impl.h: In member function 'int DNSClient::getHostByName(const char*, IPAddress&, uint16_t)':
c:\Users\OneDrive\Belgeler\Arduino\libraries\Ethernet_Generic\src/Dns_Impl.h:173:28: error: invalid cast from type 'IPAddress' to type 'ip4_addr_t* {aka ip4_addr*}'
if (inet_aton(aHostname, aResult))
^
C:\Users\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6/tools/sdk/include/lwip/lwip/inet.h:142:71: note: in definition of macro 'inet_aton'
#define inet_aton(cp, addr)             ip4addr_aton(cp, (ip4_addr_t*)addr)
^
In file included from c:\Users\OneDrive\Belgeler\Arduino\libraries\Ethernet_Generic\src/EthernetClient_Impl.h:55:0,
from c:\Users\OneDrive\Belgeler\Arduino\libraries\Ethernet_Generic\src/Ethernet_Generic_Impl.h:60,
from c:\Users\OneDrive\Belgeler\Arduino\libraries\Ethernet_Generic\src/Ethernet_Generic.h:82,
from c:\Users\OneDrive\Belgeler\Arduino\libraries\EthernetWebServer\src/EthernetWebServer.h:58,
from C:\Users\OneDrive\Belgeler\Arduino\test\test.ino:7:
c:\Users\OneDrive\Belgeler\Arduino\libraries\Ethernet_Generic\src/Dns_Impl.h:180:18: error: ambiguous overload for 'operator==' (operand types are 'IPAddress' and 'u32_t {aka unsigned int}')
if (iDNSServer == INADDR_NONE)
^
c:\Users\OneDrive\Belgeler\Arduino\libraries\Ethernet_Generic\src/Dns_Impl.h:180:18: note: candidate: operator==(uint32_t {aka unsigned int}, u32_t {aka unsigned int})
In file included from C:\Users\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\cores\esp32/Arduino.h:150:0,
from C:\Users\AppData\Local\Temp\arduino-sketch-84DFC43EDFB58593C816EE62BC3CDF1A\sketch\test.ino.cpp:1:
C:\Users\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\cores\esp32/IPAddress.h:63:10: note: candidate: bool IPAddress::operator==(const IPAddress&) const
bool operator==(const IPAddress& addr) const
^
Multiple libraries were found for "SPI.h"
Used: C:\Users\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\libraries\SPI
Not used: C:\Users\OneDrive\Belgeler\Arduino\libraries\SPI
exit status 1
Compilation error: exit status 1

Major Releases v2.0.0

Make breaking changes to permit coexistence with ESP32 WebServer and ESP8266 ESP8266WebServer libraries
Add and modified examples

From v2.0.0, you can use simultaneously both EthernetWebServer and ESP32 WebServer as follows
// To demonstrate the coexistence of this EthernetWebServer and ESP32 WebServer library

#define USE_ETHERNET          true

#include <WiFi.h>
#include <WebServer.h>

#include <SPI.h>
#include <EthernetWebServer.h>

const char* ssid     = "your_ssid";
const char* password = "your_password";

// Enter a MAC address and IP address for your controller below.

byte mac[] =
{
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};

// Select the IP address according to your local network
IPAddress ip(192, 168, 2, 100);

EthernetWebServer ethernetServer(80);
WebServer wifiServer(80);

const int led = 13;

void handleEthernetRoot()
{
  ethernetServer.send(200, "text/plain", "Hello from ESP32 Ethernet!");
}

void handleWiFiRoot()
{
  wifiServer.send(200, "text/plain", "Hello from ESP32 WiFi!");
}

void setup()
{
  // Open serial communications and wait for port to open:
  Serial.begin(115200);
  delay(1000);
  Serial.println("\nStarting WiFi_Ethernet_Complex_ESP32 on " + String(ARDUINO_BOARD));

  //////////////////////////////////////////////

  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  // start the ethernet connection and the server:
  //Ethernet.begin(mac, ip);
  Ethernet.begin(mac);

  ethernetServer.on("/", handleEthernetRoot);

  ethernetServer.begin();

  Serial.print(F("HTTP EthernetWebServer is @ IP : "));
  Serial.println(Ethernet.localIP());

  //////////////////////////////////

  wifiServer.on("/", handleWiFiRoot);

  wifiServer.begin();

  Serial.print(F("HTTP WiFiWebServer is @ IP : "));
  Serial.println(WiFi.localIP());
}

void loop()
{
  // listen for incoming clients
  ethernetServer.handleClient();

  wifiServer.handleClient();
}

i used exactly this code but i get error like above

You have to update to ESP32 core v2.0.5

packages\esp32\hardware\esp32\1.0.6

Next time when having fatal error, read the README.md again, especially Prerequisites

Also don't post on closed issue.


Turn on dynamicScreenSpaceError by default

Description

This PR:

Sets tileset.dynamicScreenSpaceError to true, enabling this optimization for lowering the resolution of tiles far away in horizon views
Adds missing code in the Cesium3DTilesetConstructor to assign initial values based on constructor options
Fixes the 3D Tiles Inspector SSE Density slider (which wasn't updating the tileset), as this is helpful for testing.
Improves the documentation for dynamicScreenSpaceError* parameters

Example of it in action: local Sandcastle -- open up the Update section and adjust the SSE Density/Factor sliders:

Issue number and link

Fixes #6143
Fixes #11715
Fixes #11677

Testing plan

Choosing better defaults
Tomorrow I plan to focus on selecting better default values for these parameters.
I'm going to start with the performance testing page from https://github.com/CesiumGS/cesium/issues/4196#issuecomment-1843560992
(here modified to use the copy of CesiumJS from npm build release and the local Cesium Dev server) - performance-local.html.txt.
This involves:

Make more versions the perf testing page as needed to get a variety of datasets and camera views. I want to also include One World Terrain and Melbourne.
I want to do a visual inspection using the 3D Tiles Inspector. How large can I increase the SSE factor/density without the quality loss being obvious? (Note: for Google P3DT, Google Earth serves as a visual benchmark)
Once I narrow down the range of values, performance test a few more cases to verify that the changes give a performance boost everywhere.

Author checklist

[x] I have submitted a Contributor License Agreement
[x] I have added my name to CONTRIBUTORS.md
[x] I have updated CHANGES.md with a short summary of my change
[x] I have added or updated unit tests to ensure consistent code coverage
[x] I have update the inline documentation, and included code examples where relevant
[x] I have performed a self-review of my code
[x] Experiment with different SSE Factor and SSE Density settings to get the best performance without a noticeable reduction in quality (See Testing Plan above)

In setting up Maxar's One World Terrain base globe, I'm realizing that dynamic screen space error doesn't really impact this dataset much. Even the smallest tiles are relatively large, so to get a good horizon view you have to position the camera very far above the dataset (where the dynamicSSE has essentially no effect). So I'll try other datasets.

Today I've been experimenting with the dynamicScreenSpaceErrorFactor and dynamicScreenSpaceErrorDensity.
First I kept the density the same and adjusted the SSE Factor. 8 px seemed to be reasonable for most views I tried for the default density.
However, then I looked at the density value and realized that right now the fog is very close to the camera! And compared with scene.fog.density, it is a whole order of magnitude larger (closer to camera)
One conceptual thing I learned today. If you compare our fog function with a normal distribution, equate the exponents and solve for the standard deviation (i.e. distance to inflection point, you get: $$\sigma = \frac{1}{2\rho}$$ (where sigma is the stddev and rho is the density). This is handy for estimating how far away the fog's inflection point is from the camera.
So the existing dynamicSSEDensity default of 0.00278 gives a fog distance of around 180m, that's pretty close to the camera.
Meanwhile scene.fog.density of 2e-4 = 0.0002 gives a fog distance of 2.5 km. This seems more in the ballpark of a horizon view in reality (though it depends on elevation)
So I think the thing to do will be set the density default to match terrain (to avoid unnecessary loss in visual quality), and then adjust the SSE factor (maybe it can be made a bit higher than 8 to compensate performance wise?)

This morning I set dynamicScreenSpaceErrorDensity to 2e-4 like terrain, and then explored the SSE Factor setting for this configuration.
Considering that the "fog" is now a lot further into the distance, you can dial up the SSE Factor more without huge changes in visual appearance. For P3DT and Melbourne, 24 px seemed to be the highest I could go before it became noticeable, at least to my eyes (visual quality is subjective). The difference was most noticeable for the Tokyo aerial view, so here are some screenshots for comparison:

No dynamic SSE
density 2e-4, SSE factor 16
density 2e-4, SSE factor 24

I also ran the performance tests again:

Configuration
Average time to first load (s)
% difference from no fog

No Fog
7.989
N/A

Fog with old defaults (density 0.00276, SSE Factor 4)
5.678
-28.93%

Fog with density 2e-4, SSE Factor 16
5.216
-34.71%

Fog with density 2e-4, SSE Factor 24
4.888
-38.82%

Raw data:
Performance Stats CSV
Snapshot of testing HTML files: (these require a local release build of CesiumJS)
performance-melbourne.html.txt
performance-p3dt.html.txt
So even though I had to reduce the density parameter, it's still better performance than the old defaults!
@ggetz what do you think, is 24 a reasonable default, or would it be better to pick a more conservative value (say 16 or less) for now until #11716 is implemented?
One other detail to put things in perspective: I notice that for terrain, the SSE Factor is equal to the maxSSE for terrain (2, compared with 3D Tiles which uses 16 as the default). This would mean 16 is roughly analogous. 24 is a bit more intense than that in comparison

I talked with @ggetz, a summary:

I should check my unit tests for race conditions, for some reason specs are failing on the command-line (both in CI and locally)
the SSE Factor value of 24 seems good
but to be extra sure, get a comparison screenshot between 3D Tiles P3DT and Google Earth to make sure it looks reasonable
Add unit tests for checking the default parameter values
For the changelog:

condense the entries about the defaults into one entry.
The changes about the inspector go in the widgets section, not the engine section

@ggetz Here's a visual comparison of CesiumJS and Google Earth. Again I used Tokyo as that had the biggest visual difference compared
CesiumJS (density 0.0002, SSE Factor 24)

Google Earth:

I find it hard to spot specific differences, as they're small and lost in the high-frequency details of the image. If anything, Google Earth looks a bit lower resolution in the distance.

Strange, the picking test timing seems to be sensitive to the dynamic SSE feature, but I'm not sure why.
I'm looking at the test "Scene/Pick > pickFromRay > picks a tileset" (though there are other similar tests also affected).
The main difference I notice is the timing of loading the tile and content. For some reason tileset.tilesLoaded is true before the content is ready, and this leads to doing the picking call too early for the test to succeed. I'm not sure why this only seems to happen when dynamicScreenSpaceError is on.

Dynamic SSE off (test works)
Dynamic SSE on (test fails)

Some other observations:

When the picking happens, the camera is above the tileset, so dynamic SEE is computed as 0 (not a horizon shot)
however, the root tile has a transform that puts it somewhere in the US. This transform is replaced with a new ENU transform that puts it at cartographic(0, 0), but for the first few frames technically dynamic SSE is applied and acts like an almost-horizon view. So that tile gets culled until the new matrix is applied. I wonder if this is related.
the picking pass itself isn't affected by dynamic SSE, as picking uses an ortho frustum. the problem is that picking happens too early.

Sandcastle to show the test setup

@ggetz this is ready for review again!

@ggetz I addressed your feedback!

Awesome, thanks @ptrgags!


Release/0.4.4

Codecov Report

Merging #37 (7fb0025) into main (c0f254a) will not change coverage.
The diff coverage is n/a.

:exclamation: Current head 7fb0025 differs from pull request most recent head b576141. Consider uploading reports for the commit b576141 to get more accurate results

@@            Coverage Diff            @@
##              main       #37   +/-   ##
=========================================
  Coverage   100.00%   100.00%
=========================================
  Files            6         6
  Lines          149       149
=========================================
  Hits           149       149

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 c0f254a...b576141. Read the comment docs.


Add version number to paket.restore.targets

Description
We have multiple developers working on the same repository and we see that paket.restore.targets is changing a lot of the time.
We assume that different versions of paket are used by different developers which causing the paket.restore.targets file to be updated/downgraded when different developers work on the repo. Even with paket "magic mode" there may be some delays as to when one developer gets an update and when another developer does.
If we could have the version number of paket to which the paket.restore.targets file belongs inside the file then developers can see whether they are behind on a paket version.
This would also open up the possibility to only update the paket.restore.targets when the version is newer and maybe warn that you are using an older version of paket.

Imho the solution ist to force the team to use same paket version. Just put "version x.yyy.z" on top of the dependencies file

That might be an option, but would that mean we need to manually update to the next Paket version every time?

You Inc that version when you think a Bugfix is important for you. You
don't need to catch all paket updates anyway.
Am Mo., 19. Nov. 2018, 09:54 hat Sander Aernouts<EMAIL_ADDRESS>geschrieben:

That might be an option, but would that mean we need to manually update to
the next Paket version every time?
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/fsprojects/Paket/issues/3430#issuecomment-439816389,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AADgND-5besNmCC4jmsEKQewdKlrBrSvks5uwnHGgaJpZM4Yonh-
.

I did some quick tests, is it correct that version x.yyy.z is only used when you run paket through paket.boostrapper.exe in "magic mode".

it's for magic mode yes. but IIRC normal bootstrapper should use it as well /cc @vbfox

The search logic should work in magic and normal mode, the nearest paket.dependencies is found and parsed (Current folder, then parent, then parent up to the root)
And in general if you have a team of developers, please, Please, PLEASE pin paket version, for repeatability sake it's essential (Well IMHO as an user of Paket in a team of 10 for 5+ years now). Otherwise different developers might get different behaviors (and they will) and you won't be able to trust that what builds on your machine will build on the build server, or even repeat an old build to debug something in 1 month.

One thing I don't remember is if the non-magic bootstrapper check the version and re-downloads if it finds a paket.exe (I didn't change it in anyway)
If I might ask, why not magic mode ?


Fix indentation in the devenv script

Part of the script was less indented than the root, which makes most of the final script indented by 2 spaces.
For some reason, this makes fish run ignore the shebang and run it with sh, which doesn't work.

Note: after running nixpkgs-fmt, the change is not about indenting the lines that were not indented enough (https://github.com/cachix/devenv/blob/main/src/devenv.nix#L107-L114, for the record), but de-indenting the rest. I'm very sorry about the diff.


Add dark mode theme in 2347

Fixes : #2347

@mansi066 resolve the conflict

@mansi066 Finish it by 7 p.m., or it will not be accepted.


Support arrow key navigation for Lightbox.web.tsx

this adds arrow key navigation to the photo viewer
renamed onEscape to onKeyDown

fixed eslint nitpicks, tested again and confirmed


Reconnect

I wonder how you manage reconnects and retry connecting to the server when it is down. I could try to call client->connect() repeatedly ( I mean after io.run() exits, call c->connect() and io.run() again), but it doesn't seem very elegant. So maybe I should check for error connection refused (or other similar) in error handler and then set timer that would call c->connect() again? Or maybe there is some other option? I had traumatic past experiences with timers and boost::asio but maybe it is best to try and reconcile now?

And also one more question. Assuming that I don't readily have access to io_context that the client object uses, can I retrieve it somehow from it?

It is currently changing. Which version of mqtt_cpp are you using ? v7.0.0 or master ?

So maybe I should check for error connection refused (or other similar) in error handler and then set timer that would call c->connect() again?

What kind of error are you asking ? Underlying network error before MQTT connection is established or after MQTT connection is established?

So maybe I should check for error connection refused (or other similar) in error handler and then set timer that would call c->connect() again?

What kind of error are you asking ? Underlying network error before MQTT connection is established or after MQTT connection is established?

It doesn't matter, I can simply check what I receive when and then check for them. This is not a problem.

It is currently changing. Which version of mqtt_cpp are you using ? v7.0.0 or master ?

v7.0.0, pulled from tag v7.0.0. I could use master, but I hoped for some stability so that we could start developing. On the other hand it would take some time before we are finished, so maybe this is not a problem right now.

In v7.0.0,
call connect() from close or error handler. You can directly call it but usually set boost::asio::deadline_timer and call connect() from timer handler.
In master,
if MQTT connection is established, then call connect() from close or error handler.
If MQTT connection is not established (that mean underlying network error), then call as follows:

sync_client

If you use connect() with boost::system::error_code& ec, then check ec and call connect().
If you use connect() without boost::system::error_code& ec, then catch exception and call connect().

async_client

You can use only async_connect(). It has async_handler_t as the parameter. You can call async_connect() from the handler.

I mean after io.run() exits, call c->connect() and io.run() again

If you use the approach above I commented, io.run() is never finished.

I mean after io.run() exits, call c->connect() and io.run() again

If you use the approach above I commented, io.run() is never finished.

Yes, that's true. It is because timer handler is still pending. But it will be pending only if i post it on io_context. And my problem is that if I don't have io_context used for client initialization at hand (for example I am in different file and in different context, I don't see any way to obtain it from the client. In short I don't see any way to get io_context from the client - is that true?
I checked API documentation and failed to find it. It doesn't mean that there is no such way, is that there is no simple way to do it I think. Once again, I'm on v7.0.0.

So you're just looking got a "get_io_context()" member function?

I am looking for both solution, which i got, and grt io context member.
Sorry for a mess, I answer from phone using email.
On Fri, Oct 25, 2019, 19:08 Michael Jones<EMAIL_ADDRESS>wrote:

So you're just looking got a "get_io_context()" member function?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/redboltz/mqtt_cpp/issues/526?email_source=notifications&email_token=ACDVYR75N4YXHLGT7Y4TBVLQQMRYLA5CNFSM4JFDOQHKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOECI665Q#issuecomment-546434934,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ACDVYR2MJZV4DATJKV5B273QQMRYLANCNFSM4JFDOQHA
.

@ineffective I would love to see a pull request from you that adds a get_io_context(), or io_context() public member function to endpoint.hpp. It should only be about 5 lines of code, and should take approximately 15 minutes.
Up for it?

No problem i think, but i'll be unable to do it before monday
unfortunately. If it is  still actual by that time i, ll gladly do it.
On Fri, Oct 25, 2019, 20:05 Michael Jones<EMAIL_ADDRESS>wrote:

@ineffective https://github.com/ineffective I would love to see a pull
request from you that adds a get_io_context(), or io_context() public
member function to endpoint.hpp. It should only be about 5 lines of code,
and should take approximately 15 minutes.
Up for it?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/redboltz/mqtt_cpp/issues/526?email_source=notifications&email_token=ACDVYRYXUGJOJ6GLAQ6XEDDQQMYOXA5CNFSM4JFDOQHKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOECJDXOA#issuecomment-546454456,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ACDVYR2DPMW3HQBOGHRYKADQQMYOXANCNFSM4JFDOQHA
.

I understand what the problem is.
I thought that you can get io_context as follows:
    auto c = MQTT_NS::make_sync_client(ioc, argv[1], argv[2]);
    auto&ioc = c->socket()->get_io_context();

But I noticed that it outputs a compile error.
I need to fix tcp_endpoint.hpp and ws_endpoint.hpp, then you can call as follows:
    auto c = MQTT_NS::make_sync_client(ioc, argv[1], argv[2]);
    auto exe = c->socket()->get_executor();
    boost::asio::deadline_timer tim(exe);

See
https://www.boost.org/doc/libs/1_71_0/doc/html/boost_asio/reference/basic_stream_socket/get_executor.html
https://www.boost.org/doc/libs/1_71_0/doc/html/boost_asio/reference/basic_stream_socket/executor_type.html
https://www.boost.org/doc/libs/1_71_0/doc/html/boost_asio/reference/basic_deadline_timer/basic_deadline_timer.html
I'm still not sure why executor_type is copyable and why get_executor() returns value type. Also I'm not sure user needs to manage gotten executor lifetime or not. I guess user doesn't need to manage it. I guess that executor_type has the pointer io_context internally.
Anyway I need to time for investigation.

Also I'm not sure user needs to manage gotten executor lifetime or not.
I guess user doesn't need to manage it.

It's true.

I guess that executor_type has the pointer io_context internally.

It's wrong. Old io_service became to io_context. And io_context has executor. Some of responsibilities are moved into executor. You can create deadline_timer using executor. And executor is copyable.

@ineffective , could you try #528 ?

Now, you can also call a wrapped function as follows:
    auto exe = c->get_executor();

Hi, I see that it is still opened and scheduled for v8. From my perspective everything works fine so it seems that this issue can be closed.


adding 1.0  in the CI

Yaqub helpfully noticed that 1.0 was not on the travis CI, it should be I guess.

Codecov Report

Merging #207 into dev will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##              dev     #207   +/-   ##
=======================================
  Coverage   83.11%   83.11%
=======================================
  Files          31       31
  Lines        2008     2008
=======================================
  Hits         1669     1669
  Misses        339      339

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 dc02869...854f9e5. Read the comment docs.


Detect Javascript files generated by Protocol Buffers

Protobuf added Javascript support in 3.0.0 Beta 2.

@zbrock Thanks for the pull request!

It doesn't seem to be used very much on GitHub: search results. @arfon Is there a requirement on this for generated files?
Maybe we could turn this into a more generic heuristic rule...?

Maybe we could turn this into a more generic heuristic rule...?

Yeah, I think that might be a good idea.

@pchaigno yeah, it's a newly supported language target in ProtoBufs. Not surprised there aren't many usages. We keep running into it in our private repo. Small PRs to .proto files yield large diffs that aren't meant to be viewed by humans.

@arfon Happy to take a look at improving it either in this PR or in a follow up! What are you thinking?

@pchaigno Anything else I can do to help here?

Merged manually. Thanks @zbrock 👍


Extensions requiring reloads should be at the top

Had a badge in the extension view and took awhile to find the extension requiring the reload because it was deep in my extension list. If the extension needs to be acted on I would prefer it be bumped to the top of the view

It should be shown in the top. Did you try refreshing the view?

I did not try refreshing the view and I currently do not have any extensions that need updating to test this again.
The process was

Reload window for extensions to update
New extension is found with an extension requiring an update
🐛 Extension is buried deep in the list.

Update I hit this again, refreshing the list does fix it. Not sure if that's a good enough solution 🤷

I see. We do not move extensions automagically because that can cause jumping in the UI. Hence it requires user action.


chore: viewport support demo

Nice! I think that the mouse position should be fixed. I tried with the following code:
    pub fn cursor(&self) -> IcedMouse::Cursor {
        self.mouse_position
            .map(|point| Point {
                x: (point.x * self.wayland_scale_factor as f32) / self.scale_factor() as f32,
                y: (point.y * self.wayland_scale_factor as f32) / self.scale_factor() as f32,
            })
            .map(IcedMouse::Cursor::Available)
            .unwrap_or(IcedMouse::Cursor::Unavailable)
    }

Nice! I think that the mouse position should be fixed. I tried with the following code:
    pub fn cursor(&self) -> IcedMouse::Cursor {
        self.mouse_position
            .map(|point| Point {
                x: (point.x * self.wayland_scale_factor as f32) / self.scale_factor() as f32,
                y: (point.y * self.wayland_scale_factor as f32) / self.scale_factor() as f32,
            })
            .map(IcedMouse::Cursor::Available)
            .unwrap_or(IcedMouse::Cursor::Unavailable)
    }

Ok. I think it is ok. can you take a try?

Nice! I think that the mouse position should be fixed. I tried with the following code:
    pub fn cursor(&self) -> IcedMouse::Cursor {
        self.mouse_position
            .map(|point| Point {
                x: (point.x * self.wayland_scale_factor as f32) / self.scale_factor() as f32,
                y: (point.y * self.wayland_scale_factor as f32) / self.scale_factor() as f32,
            })
            .map(IcedMouse::Cursor::Available)
            .unwrap_or(IcedMouse::Cursor::Unavailable)
    }

Ok. I think it is ok. can you take a try?

It works! I tried to use the counter_multi example on two different monitors (with StartMode::AllScreens) one with HiDPI and a "normal" one.
No blurry interface and the mouse worked well on both layers!

Ok, I will merge it


Restore last view selection when opening app

Enhancement/feature request: Instead of opening to "No Selection", open to the last used selection.
Why does NetNewsWire always open to no view selection? I'd prefer restoring the last view or (gasp) maybe some people would like a preference for it.
I nearly always open NetNewsWire to All Unread. On iOS (14 beta) I was offered a shortcut for this which is fun when I see it and use it. But on macOS I end up doing Open NetNewsWire, Command-Shift-R, Command-1, Command-2; which is habit now but reliably updates from Feedbin and opens the All Unread view up-to-date.
(Apologies if this is already an open issue. I did try a few searches to find something.)

That has been implemented and is coming in the upcoming NNW 5.1 for Mac release.


Numbering plan of Cote d'Ivoire/Ivory Coast has changed

Important fact: Phony only works with international phone numbers. It needs the country code to be able to identify the number's country and rules.
What I did

Use Phony on Ivory Coast numbers after the numbering plan change of Jan 31, 2021 (8 digits became 10 digits)

What happened

new correct numbers are plausible.

What I expected to happen and why

new correct numbers are plausible

Handled in #478 by @wthys


Fix skipped api-something pages

Currently, pages that start with api (like apis or apiculture) are being skipped by the plugin.
This PR fixes the issue by adding the missing nodePath.sep in the skip condition and a test.

@felipeptcho great PR, thank you!

@all-contributors please add @felipeptcho for code, bug


where  is Star-Shaped Box Feature Representation and Bounding Box Refinement in the code

in vfnet_raw_head.py, i don't see the star-shaped bounding box feature representation
and the bounding box refinement. I  am interested in there and want to know how to do it

You should look at vfnet_head.py.

thank you very much


Environment issues when running

Hello,
While running in server environment with custom data,
Could not load library libcudnn_cnn_infer.so.8. Error: libcuda.so: cannot open shared object file: No such file or directory
Please make sure libcudnn_cnn_infer.so.8 is in your library path!
I'm trying to run it in a Docker environment because I get an error like,
If you have any docker files used, could you please help?

With tensorflow 2.10 version it works fine.
(https://hub.docker.com/layers/tensorflow/tensorflow/2.10.0-gpu-jupyter/images/sha256-a72deb34d32e26cf4253608b0e86ebb4e5079633380c279418afb5a131c499d6?context=explore)


Update on documentation of Loop-level parallelism

Original author: Seonmyeong Bak
Original issue: https://charm.cs.illinois.edu/redmine/issues/1771

Our current OpenMP integration supports more pragmas over the initial version.
So, the documentation should be updated.
In addition, API for controlling PEs on node-level parallelization also should be added to the documentation.

Original author: Seonmyeong Bak
Original date: 2018-01-09 23:14:27

~~https://charm.cs.illinois.edu/gerrit/#/c/3495/~~ https://github.com/UIUC-PPL/charm/commit/6aeaeb6eab2558484feb2326ca4b97a24a4ff075


Hide shapes of territories for 2nd and 3rd rounds as well

Idea
Although, rotation of territory images works fine on 3rd round, because the too specific storing method of the information that whether the 'show-image-button' was pressed, hiding the image doesn't take any effect there. And on the 2nd round, where neighbouring territories are to be guessed, it should be implemented that those neighbouring territories also hide, if that checkbox is checked in the settings.

Something is wrong, if both the rotation is checked and the hiding.

Something is wrong, if both the rotation is checked and the hiding.

Oh, because hide rotation is also a button, so it won't place the show-map-button. It's because the safety check here:
    if (getIndexByProperty(image.childNodes, undefined, "button") < 0) { // if the button is not already there


[ISSUE #2639] Remove unnecessary property 'REAL_TOPIC' and 'REAL_QID' when put real schedule msg.

What is the purpose of the change
For-#2639

Coverage increased (+0.2%) to 51.839% when pulling ba5ee4fa69ae07fa34ea356cb6b2226c138a949e on horizonzy:fix-2639 into d8f88c51eb50e43a6bce3fce1ed14f49714ff108 on apache:develop.

Coverage increased (+0.2%) to 51.839% when pulling ba5ee4fa69ae07fa34ea356cb6b2226c138a949e on horizonzy:fix-2639 into d8f88c51eb50e43a6bce3fce1ed14f49714ff108 on apache:develop.

Any progress？


Use Server-Sent Events instead of custom long-polling in Maestro Studio

Impact

Maestro Studio can now run in multiple tabs simultaneously
Improves Maestro Studio performance

Background

Custom long-polling was causing simultaneous API calls to hang (mostly in Chrome)
Switching to Server-Sent Events instead
In order to mock SSEs we need to upgrade MSW to the fetch release candidate version. Context: https://github.com/mswjs/msw/blob/feat/standard-api/MIGRATING.md#support-readablestream-mocked-responses

Hey @Leland-Takamine Some integration test are failing with the last commit.


Suggest: / commands in Discord

Discord has this new function that when you do / you get command suggestions for custom bots. Maybe you can do this for your great bot. Toggleable if possible because maybe some people don't want it.
https://www.reddit.com/r/discordapp/comments/ke1p8b/we_can_now_make_custom_slash_commands_using_bots/

I could give this a go... :)

Done. Coming in the next release.


custom LoggableListener inject service

Hi,
i'm doing an upgrade from symfony 3.4 to 4.4.
Installed doctrine-extensions: 2.4.39
Installed doctrine/dbal: 2.10.1
Installed doctrine/orm: 2.7.1
Installed symfony: 4.4.5
I've installed an encryption bundle michaeldegroot/doctrine-encrypt-bundle in version 4.0.3. I have multiple entities with encrypted and versioned fields. I want to save the encrypted value in the ext_log_entries table. Before the upgrade everything worked fine with my custom LoggableListener. After the upgrade i'm getting the following error:

Call to a member function encrypt() on null in CustomLoggableListener.php (line 141)

This is my config before the upgrade:
gedmo.listener.loggable:
        class: foobar\CoreBundle\Listener\CustomLoggableListener
        tags:
            - { name: doctrine.event_subscriber, connection: default }
        calls:
            - [ setAnnotationReader, [ "@annotation_reader" ] ]
            - [ setEncryptor, [<EMAIL_ADDRESS>] ]

This is my config after the upgrade:
App\foobar\CoreBundle\Listener\CustomLoggableListener:
        public: true
        tags:
            - { name: doctrine.event_subscriber, connection: default }
        calls:
            - [ setAnnotationReader, [ "@annotation_reader" ] ]
            - [ setEncryptor, [<EMAIL_ADDRESS>] ]

And this is my CustomLoggableListener:
namespace App\foobar\CoreBundle\Listener;

use Ambta\DoctrineEncryptBundle\Configuration\Encrypted;
use Ambta\DoctrineEncryptBundle\Encryptors\EncryptorInterface;
use Doctrine\Common\Annotations\AnnotationReader;
use Doctrine\Common\Persistence\ObjectManager;
use Gedmo\Loggable\Mapping\Event\LoggableAdapter;
use Gedmo\Tool\Wrapper\AbstractWrapper;
use Gedmo\Loggable\LoggableListener as GedmoLoggableListener;

class CustomLoggableListener extends GedmoLoggableListener
{
    /**
     * @var EncryptorInterface
     */
    private $encryptor;

    /**
     * @param EncryptorInterface $encryptor
     * @required
     */
    public function setEncryptor(EncryptorInterface $encryptor)
    {
        dump($encryptor);
        $this->encryptor = $encryptor;
    }

    /**
     * @return EncryptorInterface
     */
    public function getEncryptor()
    {
        return $this->encryptor;
    }
    /**
     * Handle any custom LogEntry functionality that needs to be performed
     * before persisting it
     *
     * @param object $logEntry The LogEntry being persisted
     * @param object $object   The object being Logged
     */
    protected function prePersistLogEntry($logEntry, $object)
    {
    }

    /**
     * Returns an objects changeset data
     *
     * @param LoggableAdapter $ea
     * @param object $object
     * @param object $logEntry
     *
     * @return array
     */
    protected function getObjectChangeSetData($ea, $object, $logEntry)
    {
        $om = $ea->getObjectManager();
        $wrapped = AbstractWrapper::wrap($object, $om);
        $meta = $wrapped->getMetadata();
        $config = $this->getConfiguration($om, $meta->name);
        $uow = $om->getUnitOfWork();
        $encryptedFields = $this->getEncryptedFields($meta->name, $object, $om);
        $newValues = array();

        foreach ($ea->getObjectChangeSet($uow, $object) as $field => $changes) {
            if (empty($config['versioned']) || !in_array($field, $config['versioned'])) {
                continue;
            }
            if ($changes[0] === $changes[1]) continue;

            //special handling for boolean fields
            if (is_bool($changes[0]) && $changes[0] === boolval($changes[1])) continue;

            $value = $changes[1];

            if (isset($encryptedFields[$field]) && $encryptedFields[$field] === $changes[0]) {
                //same values - no need to save to log
                continue;
            } elseif (isset($encryptedFields[$field])) {
                //it is an encrypted field - so we need to save an encrypted value in the log table
                $value = $this->getEncryptor()->encrypt($changes[1]);
            }

            if ($meta->isSingleValuedAssociation($field) && $value) {
                if ($wrapped->isEmbeddedAssociation($field)) {
                    $value = $this->getObjectChangeSetData($ea, $value, $logEntry);
                } else {
                    $oid          = spl_object_hash($value);
                    $wrappedAssoc = AbstractWrapper::wrap($value, $om);
                    $value        = $wrappedAssoc->getIdentifier(false);
                    if (!is_array($value) && !$value) {
                        $this->pendingRelatedObjects[$oid][] = array(
                            'log'   => $logEntry,
                            'field' => $field,
                        );
                    }
                }
            }
            $newValues[$field] = $value;
        }

        return $newValues;
    }

    /**
     * @param $entity
     * @param ObjectManager $om
     * @return array
     */
    protected function getEncryptedFields($class, $entity, $om)
    {
        try {
            $cols = $om->getClassMetadata($class)->fieldMappings;
            $reflectionClass = new \ReflectionClass($class);
            $reader = new AnnotationReader();

            $encryptedFields = array();
            foreach($cols as $fieldname => $col){
                try {
                    $getter = 'get'.ucfirst($fieldname);
                    if (method_exists($entity, $getter)) {
                        $value = $entity->$getter();
                        $property = $reflectionClass->getProperty($fieldname);

                        $annotation = $reader->getPropertyAnnotation(
                            $property,
                            Encrypted::class
                        );
                        if ($annotation) {
                            $encryptedFields[$fieldname] = $this->getEncryptor()->encrypt($value);
                        }
                    }
                } catch ( \Exception $e) {
                    //do nothing
                }
            }

            return $encryptedFields;
        } catch(\Exception $e) {
            return [];
        }
    }
}

The error is thrown when i want to call the ->encrypt() function. I've inserted a dump in the setEncryptor function. The dump is successfully called but when the subscriber is called by the event, the setEncryptor function is not called anymore.
Here is the stack trace:
Error:
Call to a member function encrypt() on null

  at C:\projects\api_upgrade_test\src\foobar\CoreBundle\Listener\CustomLoggableListener.php:141
  at App\foobar\CoreBundle\Listener\CustomLoggableListener->getEncryptedFields('App\\foobar\\CoreBundle\\Entity\\Legalcase', object(Legalcase), object(EntityManager))
     (C:\projects\api_upgrade_test\src\foobar\CoreBundle\Listener\CustomLoggableListener.php:71)
  at App\foobar\CoreBundle\Listener\CustomLoggableListener->getObjectChangeSetData(object(ORM), object(Legalcase), object(LogEntry))
     (C:\projects\api_upgrade_test\vendor\gedmo\doctrine-extensions\lib\Gedmo\Loggable\LoggableListener.php:296)
  at Gedmo\Loggable\LoggableListener->createLogEntry('update', object(Legalcase), object(ORM))
     (C:\projects\api_upgrade_test\vendor\gedmo\doctrine-extensions\lib\Gedmo\Loggable\LoggableListener.php:197)
  at Gedmo\Loggable\LoggableListener->onFlush(object(OnFlushEventArgs))
     (C:\projects\api_upgrade_test\vendor\symfony\doctrine-bridge\ContainerAwareEventManager.php:58)
  at Symfony\Bridge\Doctrine\ContainerAwareEventManager->dispatchEvent('onFlush', object(OnFlushEventArgs))
     (C:\projects\api_upgrade_test\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php:3405)
  at Doctrine\ORM\UnitOfWork->dispatchOnFlushEvent()
     (C:\projects\api_upgrade_test\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php:373)
  at Doctrine\ORM\UnitOfWork->commit(null)
     (C:\projects\api_upgrade_test\vendor\doctrine\orm\lib\Doctrine\ORM\EntityManager.php:368)
  at Doctrine\ORM\EntityManager->flush()
     (C:\projects\api_upgrade_test\src\foobar\CoreBundle\Controller\LegalcaseController.php:372)
  at App\foobar\CoreBundle\Controller\LegalcaseController->editAction(object(Request), object(Legalcase), object(ServiceActivityService), object(LegalcaseHistoryLogger), object(LegalcaseRankingService), object(Flasher), object(Logger), object(TraceableEventDispatcher))
     (C:\projects\api_upgrade_test\vendor\symfony\http-kernel\HttpKernel.php:146)
  at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 1)
     (C:\projects\api_upgrade_test\vendor\symfony\http-kernel\HttpKernel.php:68)
  at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, true)
     (C:\projects\api_upgrade_test\vendor\symfony\http-kernel\Kernel.php:201)
  at Symfony\Component\HttpKernel\Kernel->handle(object(Request))
     (C:\projects\api_upgrade_test\public\index.php:25)

Could someone help me to find a solution?

How are you configuring Doctrine Extensions in Symfony? Are you using a bundle or doing it manually?

@AkenRoberts i'm using the stof/doctrine-extensions-bundle and the gedmo/doctrine-extensions. The services are configured in the services.yaml.
I've fixed it. It was a double configured listener. My CustomLoggableListener was called twice and in the first run the encryptor was not defined. The Problem was, i've not override the loggable service from stof in the services.yaml
#override stofs definition of loggable to prevent double execution
stof_doctrine_extensions.listener.loggable: '@App\foobar\CoreBundle\Listener\CustomLoggableListener'

this is my stof_doctrine_extensions.yaml
stof_doctrine_extensions:
    default_locale: '%env(LOCALE)%'
    orm:
        default:
            timestampable: true
            loggable: true
            translatable: true
            softdeleteable: true
    #override listeners
    class:
        loggable:       App\foobar\CoreBundle\Listener\CustomLoggableListener

and now i'm setting the encryptor with property injection instead of setter injection
App\foobar\CoreBundle\Listener\CustomLoggableListener:
        public: true
        properties:
            encryptor<EMAIL_ADDRESS>        tags:
            - { name: doctrine.event_subscriber, connection: default }
        calls:
            - [ setAnnotationReader, [ "@annotation_reader" ] ]

Now my Listener is only called once with the encryptor.

Glad you were able to sort it out, and thank you for sharing the solution. 👍


Added AudioClip Events and Listener

Summary
Over the last few game jams, I've used a one-off audio playing system each time which listened to an AudioClip GameEvent to allow other systems to be able to play audio in a decoupled way. I've done it enough to where I believe this would be a viable, generally useful addition to the core ScriptableArchitecture library. For this I've created the following:

AudioClipGameEvent
AudioClipUnityEvent
AudioClipGameEventListener

I did not add any icons to the scripts listed above, but that would also be a good thing to do before this is merged in.
In addition, I've hidden a warning via #pragma in the console that appears for private serialized fields in SceneVariable that is a false positive.

Hey, I realize you're probably busy; just bumping this as a reminder.

No worries, I'll probably find time this weekend :)

Appreciate it! Thanks Daniel
Sent with GitHawk

Thanks for the PR! :)


In the Rosetta Code challenges, the "General FizzBuzz" challenge has broken tests

Describe your problem and how to reproduce it:
the General Fizzbuzz challenge has broken tests, including some ugly JSON.stringify code instead of readable, functional tests.
(It seems to be some over-generalized code that worked on the old platform but no longer works inside the "learn" app. I think I can fix it -- please feel free to assign it to me.)
Add a Link to the page with the problem:
https://learn.freecodecamp.org/coding-interview-prep/rosetta-code/general-fizzbuzz/
Tell us about your browser and operating system:

Browser Name: Chrome
Browser Version: Version 70.0.3538.102 (Official Build) (64-bit)
Operating System: MacOS

If possible, add a screenshot here (you can drag and drop, png, jpg, gif, etc. in this box):

@alexch, great catch! Thanks for pointing this out. freeCodeCamp/curriculum#277 was merged just before the major restructuring that's been going on, so it may not have made it into the new npm package / production. This is a great reminder for me to check this and the other problems out locally now that they've been moved here.

@scissorsneedfoodtoo Tested it locally, its fixed it master.

Checked this out and it seems the changes from freeCodeCamp/curriculum#277 carried over to master. Hopefully they make their way to production soon

https://learn.freecodecamp.org/coding-interview-prep/rosetta-code/general-fizzbuzz/
is still busted :-(

Is this being addressed? I too would be happy to help fix it but sounds like alexch has already got the solution.

@crossjames934 See @scissorsneedfoodtoo's comment above.  Whenever you see the label status: resolved \ shipping, it means it has been fixed, but not released to production.


Feature/header fix-link

Cleaned CSS a bit by removing unnecessary code. Fixed header and logo, so it appears in the same line. Added contact information and fixed href link for contacts

Looks good


add Goodies page

Is goodies a good word? Or should it be merch or something else?
Please check the image size (cannot currently build locally, size is just a guess)

Please read carfully and feel free to edit :)

All good - thank you! - but please reduce the image size so that we have faster page load and less git repo bloat.

Ah, good point, forgot.
Now reduced; for later: What is a good image size for websites?

Ah, good point, forgot. Now reduced; for later: What is a good image size for websites?

I am aiming at 200-300 kB or less. We will need to squash-merge otherwise the big file remains in history.


[sourcekitd-test] Add option to count number of instructions taken to execute request

This adds a -measure-instructions option to sourcekitd-test which measures the number of instructions the SourceKit process took to execute the request.

@swift-ci Please smoke test


What I need to do in order to activate azure Hybrid Benefits?

What needs to be done in order to activate azure hybrid benefits?

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

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

@Anmolgan81 Please see the Azure Hybrid Benefit portal (link) to inquire and initiate the Hybrid Benefit process. Please let us know if you have any additional questions. Thank you very much for your interest in Azure Cloud.

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


The project property is set to empty string, which is invalid

First, thank you for this awesome package. :relaxed:.
After starting with an almost blank G-account and following the README.md's instruction
make create-cluster deploy-istio build push deploy-stuff

everything comes to a sudden halt with:
roland_siegbert_t@cloudshell:~/Istio101$ make create-cluster deploy-istio build push deploy-stuff
ERROR: (gcloud.config.list) The project property is set to the empty string, which is invalid.
To set your project, run:

  $ gcloud config set project PROJECT_ID

After following the instructions, we get a little bit further:
roland_siegbert_t@cloudshell:~/Istio101$ gcloud config set project istio101
Updated property [core/project].
roland_siegbert_t@cloudshell:~/Istio101 (istio101)$ make create-cluster deploy-istio build push deploy-stuff
Your active configuration is: [cloudshell-6085]

But the script crashes at:
WARNING: Starting in 1.12, default node pools in new clusters will have their legacy Compute Engine instance metadata endpoints disabled by default. To create a cluster with legacy instance metadata endpoints disabled in the default node pool, run `clusters create` with the flag `--metadata disable-legacy-endpoints=true`.
This will enable the autorepair feature for nodes. Please see https://cloud.google.com/kubernetes-engine/docs/node-auto-repair for more information on node autorepairs.
This will enable the autoupgrade feature for nodes. Please see https://cloud.google.com/kubernetes-engine/docs/node-management for more information on node autoupgrades.**
ERROR: (gcloud.container.clusters.create) ResponseError: code=404, message=Not found: istio101.
Makefile:32: recipe for target 'create-cluster' failed
make: *** [create-cluster] Error 1

So, I'll revert to the little slower tutorial, which halts after
make create-cluster

with
ERROR: (gcloud.container.clusters.create) ResponseError: code=404, message=Not found: istio101.
Makefile:32: recipe for target 'create-cluster' failed
make: *** [create-cluster] Error 1

too. So, something must be missing in the README.md. I'll start to explore now, I guess, it has something to do with Google Cloud Shell steps which are invisible for a newcomer considering Google Cloud Shell.

OK, so what I did is:

I created a "Project" using the computer icon in the top right.

This changed the error thrown with make create-cluster to:
ERROR: (gcloud.container.clusters.create) ResponseError: code=403, message=Kubernetes Engine API is not enabled for this project. Please ensure it is enabled in Google Cloud Console and try again: visit https://console.cloud.google.com/apis/api/container.googleapis.com/overview?project=istio101 to do so.
Makefile:32: recipe for target 'create-cluster' failed
make: *** [create-cluster] Error 1

Now, I'm searching for how to enable the Kubernetes Engine API for this project...
Getting to GCP, it feels like holy f**k:

But maybe I'll be successful here. The project is already selected somehow.

Nope. I signed up for a free trial to create a cluster using the "Kubernetes Engine". And now credit card information is required... Meh.

Following the link in the error: https://console.cloud.google.com/apis/api/container.googleapis.com/overview?project=istio101 seems promising:

But we need to enter some kind of credit card information. Not everyone has a credit card. And using one makes also not too much sense if one doesn't like to be in debt. But, let's give it a go.

After filling out step 2 of the free trial (which was billing account, where only credit cards seem to work). An refresh, things seem to be enabled slowly:

After a minute or so, we end up with this:

Now, back to the console:
make cluster-create

makes performs a successful run. :smile:.

This got me up to Fixing the 404. However, I have no clue, how to access the stuff, which runs locally on the cluster now under 8088 (dotviz), 16686 (jaeger) and 3000 (grafana).

Thanks for keeping the repo mostly up to date, btw. Even with the cost, that it deviated from the Video now. :relaxed:

I'd say setting up GCP is out of scope for this demo. Going to be cleaning up the makefile and updating to a more modern version of Kubernetes and Istio

I'd be happy to help.


Old wiki link (koel:init)

Version: v3.5.5
I recently installed Koel and saw that the link still refers to https://github.com/phanan/koel/wiki instead of https://koel.phanan.net/docs. It's a small change and I wanted to do a pull request but maybe you want to leave the old link that you don't have to change the link in the code if for example your domain changes and you github wiki link won't change?
Great work with koel :)

The change has been implemented here actually 20db5d25bb95e8a291a81d2e29e620045fa52b84, just not tagged yet :) Thanks for using Koel!

Ok thanks :)


Why does GAIL get lower rewards the more it is trained?

Hi, thank you for the baseline code, it helps me a lot. But I have a little problem with running it. I first sample data through the trained expert strategy, and then provide it to GAIL, but in the environments of Ant-v2 and Hopper-v2, the rewards will get lower and lower as the number of training increases. My environment is mujoco.py=2.0.8 and mujoco200. I would be very grateful if you could take the time to look into the problem for me.

Hello, I have also encountered this problem, may I ask if you have solved it ? Thank u.


Add '| undefined' to TypeScript definitions, which can return undefined

TypeScript supports non nullable types (optionally), and it's very
helpful to know when some function or method could return undefined as
well as a valid result.
This PR adds | undefined to the return types of the methods, which can
return undefined (like, get, find, etc).

The next issue this is exposing is with generating the documentation. I've worked in a solution and will merge manually.

Hooray!!! Thanks!


check-bot

add-notes

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


change attachment api to reduce render thrashing

I was exploring the new profiler looking for some quick wins and found how we deal with the popups would cause extra rendering in a lot of places. This is primarily caused by us using the attachTo as a state variable so when it gets set (always after we render the first time) it'll cause a second render. We pay for this always on the mounted component. Instead i changed it to get a getter so the prop doesn't change. In practice this is safe since the ref is set immediately after mounting and before you could possibly click it

@keybase/react-hackers

danny found a bug where toast isn't working, i'm debugging now

@buoyad @cjb new commit fixes the copy text toast. 2 problems

i had to change the floating box componentDidUpdate to calc the targetRect in a smarter way
changed the copyText to not rerender while its popping up the toast, else the refs would get nulled and set again and the wrong thing would happen


remove unused boilerplate

Integration test logs

Logs
Add passing integration test logs here

Example query results

Results
Add example SQL query results here (please include the input queries as well)

@judell Thanks for updating the PR boilerplate. I however feel that we should retain the Example query results section to make sure that we add the results of the queries while adding/updating the tables.

@misraved yes, you're right, I checked the earlier conversation and we agreed to remove Integration Test Logs when empty but not Example Query Results. Sorry!

This file has already been updated, closing this PR.


ViT-L/14 not available as a model

When listing the available models via clip.available_models() ViT-L-14 (as well as RN50x64) are not included. I tried to pip install the repository again via pip install git+https://github.com/openai/CLIP.git but its still not available.
Am I missing something I need to do in order to have these newer models available?
My Output:
>>> clip.available_models()
['RN50', 'RN101', 'RN50x4', 'RN50x16', 'ViT-B/32', 'ViT-B/16']

Did you try uninstalling and reinstalling the package? Alternatively, you can manually download the checkpoint and call clip.load with its path.

+1. How did you solve it? Thanks!


Select component

Select
Adding a new select component as part of our Form components.
The component should be used in limited scenarios as there are usability concerns.
Design (dropdown)

Accessibility
Suggesting keeping the options list using the native styles and default browser interactivity for best accessibility (see 'Basic keyboard behavior' section of this article)
Usability
External user research has shown that users struggle with the select component and it should be only used where no other component can be used (e.g if it cannot be replaced with radio buttons or text input). We should clearly indicate this in the design system docs and discourage unnecessary use of the component.
The design system working group is here to support you through the contribution process - to help them, please consider the following:

does your component need to be used by other products or services?

not currently but can be used in the future (e.g there is a potential use case in casebook)

does something similar already exist in the design system

no

is there a product team that would perform the research, design, development and QA work associate with building this component?

not currently

do you have any user stories / scenarios that describe the component?

not currently

Helloooo - I've implemented a select using the existing view components here: https://github.com/citizensadvice/energy-comparison-table/pull/82
We needed it for the customer service ratings table - LMK if I should contribute this back into the design system 😊

@davidsauntson I think it would be great if we have a select component in the design system. Do you know if the design team is happy for the styles to be reused in the design system? I can also bring it up in the design system monthly meeting if that helps

https://github.com/citizensadvice/design-system/pull/3019


Time picker title

I was wondering if there was any way to add a title (HH : MM) over the time picker.
I tried to add the code for it but i'm still fairly new to JS.

the dev branch  has this feature add already and will make its way into the master soon


Configuring AWS clients

Currently activities receive session and config directly. This serves well with the following two use cases:

User has a single AWS account to operate on.
User has multiple AWS credentials, but can run multiple workers and separate tasks using task queues.

There is a third use case, however, which we (Banzai Cloud) are heavy users of: there is an unbound number of AWS credentials that we have to use and need to start new sessions in every activity.
The first two use cases are probably the most common ones, but I don't think the latter is without precedent either.
Therefore I suggest introducing an abstraction layer for instantiating sessions (and in turn, AWS clients).
There is a problem in the third use case that we need to solve first. In our scenario, there is a "secret ID" that identifies the AWS credential stored in a secret store. We need to pass that down to activities. Currently (in our internal code base) we make that secret ID part of the activity input, but that would probably be not really nice for a generic purpose library (even if a SecretID parameter would be generic enough for alternate use cases).
Instead, we can use the context for this purpose. With ContextPropagators, we can inject a secret ID into the context and retrieve it in activities. Although the secret ID is not really a "metadata" (which is what these context propagation solutions are primarily for), it's a good enough solution for now.
The last decision we need to make is whether we want to return Session or Config objects from this abstraction.
Since AWS recommends caching sessions for performance reasons, returning Session objects would support the first two use cases better.
Based on the above, we can now establish an interface for configuring AWS clients:
// SessionFactory returns an aws.Session based on the activity context.
type SessionFactory interface{
	Session(ctx context.Context) (*aws.Session, error)
}

A default implementation of the above factory could return a single session for all requests:
type cachedSessionFactory struct{
	session *aws.Session
}

func (s *cachedSessionFactory) Session(ctx workflow.Context) (*aws.Session, error) {
	return s.session, nil
}

Clients then can accept a SessionFactory instead of a session and a configuration and call it for each activity:
type SomeActivities struct {
	sessionFactory SessionFactory
}

func NewSomeActivities(sessionFactory SessionFactory) *SomeActivities {
	return &SomeActivities{sessionFactory: sessionFactory}
}

func (a *SomeActivities) SomeOperation(ctx context.Context, input *some.SomeOperationInput) (*some.SomeOperationOutput, error) {
	sess, err := a.sessionFactory.Session(ctx)
	if err != nil {
		return nil, err
	}

	client := some.New(sess)

	return a.client.AddTagsToCertificateWithContext(ctx, input)
}

Although it requires a bit more generated code, the overhead of creating a new client should be negligible.
Obviously, the above change adds some error handling to the code, but in case of the cached session it will always be nil, in case of an alternative implementation (eg. accessing a secret store) retries should be done by the implementation, thus we can safely assume that the error here is fatal. We should probably try to encode it anyway (see #1).
An alternative solution would be going for client factories instead (again, with a cached implementation that spares the cost of creating the client in each activity), but that would mean generating much more code and putting an overhead on the instantiation side.

I don't like the idea of recreating client on every request. It might be required for the multisession approach, but looks too heavyweight for the global session one. I would try to come up with a way that behaves differently based on the scenario.
In the worst case, we can generate two different activity implementations for these cases.

Initializing the client is actually not heavy at all. It just creates a new struct. It doesn't do anything else.
Creating the session is much heavier, because it reads all kinds of stuff from the environment.
As an alternative, activities could support both:

if there is a client set, use it
if there is no client, but there is a session factory: create a new client
if there is no client, nor a session factory: this should never happen

WDYT?

Here is an alternative implementation:
type SomeActivities struct {
	client         someiface.SomeAPI
	sessionFactory SessionFactory
}

func NewSomeActivities(session *session.Session, config ...*aws.Config) *SomeActivities {
	client := some.New(session, config...)
	return &SomeActivities{client: client}
}

func NewSomeActivitiesWithSessionFactory(sessionFactory SessionFactory) *SomeActivities {
	return &SomeActivities{sessionFactory: sessionFactory}
}

func (a *SomeActivities) getClient(ctx context.Context) (someiface.SomeAPI, error) {
	if a.client != nil { // No need to protect with mutex: we know the client never changes
		return a.client
	}

	sess, err := a.sessionFactory.Session(ctx)
	if err != nil {
		return nil, err
	}

	return some.New(sess), err
}

func (a *SomeActivities) SomeOperation(ctx context.Context, input *some.SomeOperationInput) (*some.SomeOperationOutput, error) {
	client, err := a.getClient()
	if err != nil {
		return nil, err
	}

	return a.client.AddTagsToCertificateWithContext(ctx, input)
}

We could further optimize the creation of the client if we want: don't create the client in the constructor, but use a sync.Once to create it for the first time. Then anyone who uses the worker and doesn't want to use all the services doesn't have to pay the initialization and memory cost of initializing all clients. (Then again: client initialization is cheap)

@mfateev does it sound like an acceptable solution?

Fixed in #7


Install referrer = utm_source=(not%20set)&utm_medium=(not%20set)

Hi ,
referrer details is not available.
Always give this :  utm_source=(not%20set)&utm_medium=(not%20set)
Where as url has referral code  like :
https://play.google.com/store/apps/details?id=com.arogga.app&referrer=utm_source%3Darogga%26utm_medium%3Dlink%26utm_term%3Drefer%26utm_content%3D123456%26utm_campaign%3Dtest
or :  https://play.google.com/store/apps/details?id=com.arogga.app&referrer=1234567
nothing is working .
I need actually the second url type to be working

Hi @Shahnewaj, hi @danruss,
How are you guys performing this test where you're getting organic value back?

As far as I know, in order to run actual test to see if install referrer value is properly captured, you would need to actually redirect to your app in Play Store, download it and then check what is the value of the referrer. Back in the days when install referrer value has been delivered with the INSTALL_REFERRER intent, one could simply ping the app with adb command to broadcast this intent. But nowadays with install referrer library (which is bonded to Play Store app service under the hood), I am not sure if one can test this easily without having an app in the Play Store. For any local test you might do, I think that organic referrer value will always be returned by default.

26
You can test it without uploading on Playstore.
I did in following way.
I have created urls like https://play.google.com/store/apps/details?id=fullpackagename&referrer=utm_source%3Dmysource&utm_content%3Dmycontent&hl=en
I have fired this url from my mail. It redirects to Playstore
From command Prompt(using adb command) , I have installed desired apk.
On Playstore, "install" button will be replaced with "open" button and I clicked on that. it is working

Exactly @vignesh-pibase,
Thank you for this answer. I will add the guide based on it to the README section of the repo as well. 👍
In theory, you don't need to run extra miles to wait to see Install turning in to Open after you have installed the app on your device. I believe that just a bit prettified version of your guide should look like this:

In case you want to run the test with package name of your app, you need to make sure to have that app released on the Play Store.
In case you don't have any app in the Play Store, for this test you can try to "hijack" package name of any app that's published on the app store.
Make sure not to have app with with that package name installed on your test device / emulator.
Place the test URL (for example: https://play.google.com/store/apps/details?id=fullpackagename&referrer=utm_source%3Dmysource&utm_content%3Dmycontent&hl=en) somewhere where you'll be able to click on it from the test device / emulator. If out of ideas where or how, https://neocities.org/ can be a place to quickly launch a web page where you can place this URL.

Install referrer test URL

Open this web page from your test device / emulator and click on Install referrer test URL.
Once redirected to the Play Store page of the app, don't install it.
Install your app locally (via adb, Android Studio, react-native CLI, whatever you use) on your test device / emulator.
Invoke plugin's API and you should receive install referrer data from the URL you've clicked.

Closing this ticket now, but in case anyone has any follow up questions, feel free to comment / reopen.
Cheers.


started text for vel tutorial

Hi I started this #34 .. will continue tomorrow evening as I still want to read and write something about the fixed_dx_elevation_band_flowline and maybe the rest of the people will like to take over after? ... will commit the rest tomorrow

Awesome Bea! Thanks a lot, this is very useful!


Items counter.

In this branch, I created a function to count the items available on the homepage, then I render the quantity on the Html.

Good job creating an intuitive and pure function
Is ready for merge, congratulations!


Assertion failed: incoming_changesets.size() != 0

What happened?
The application crashed.
Repro steps
We didn't get any breadcrumbs from sentry :(
Version
3.10.6
What Atlas Services are you using?
Both Atlas Device Sync and Atlas App Services
What type of application is this?
Flutter Application
Client OS and version
iPhone 7, iOS 15.7.1
Code snippets
No response
Stacktrace of the exception/crash you're getting
libsystem_kernel
+0x006bbc
__pthread_kill

libsystem_pthread
+0x00d850
pthread_kill
libsystem_c
+0x01f6a8
abort
realm_dart
+0x3a8ce4
please_report_this_issue_in_github_realm_realm_core_v_13_14_0
realm_dart
+0x3a9018
realm::util::terminate_internal
realm_dart
+0x3a8e88
realm::util::terminate_with_info
realm_dart
+0x3a8cf8
realm::util::terminate
realm_dart
+0x1f395c
realm::sync::ClientHistory::integrate_server_changesets
realm_dart
+0x1b498c
realm::sync::ClientImpl::Session::process_pending_flx_bootstrap
realm_dart
+0x1b4528
realm::sync::ClientImpl::Session::process_flx_bootstrap_message
realm_dart
+0x200d08
realm::sync::ClientImpl::Session::receive_download_message
realm_dart
+0x208810
realm::_impl::ClientProtocol::parse_download_message<T>
realm_dart
+0x1fd76c
realm::_impl::ClientProtocol::parse_message_received<T>
realm_dart
+0x2074fc
realm::sync::ClientImpl::Connection::WebSocketObserverShim::websocket_binary_message_received
realm_dart
+0x1ebcbc
(anonymous namespace)::WebSocket::frame_reader_loop
realm_dart
+0x1de984
realm::sync::network::Service::BasicStreamOps<T>::BufferedReadOper<T>::recycle_and_execute
realm_dart
+0x1e537c
realm::sync::network::Service::Impl::run_impl
realm_dart
+0x1d6e1c
realm::sync::websocket::DefaultSocketProvider::event_loop
realm_dart
+0x1d8ae8
std::__1::__thread_proxy<T>
libsystem_pthread
+0x003344
_pthread_start

Relevant log output
No response

Related to https://github.com/realm/realm-core/issues/6611

This is tracked in the Core repo.


Configuring is cumbersome

Hello,
Configuring Sharc is cumbersome:
cmake .... -DArccon_DIR=/my/path/to/Arcane.framework/install/share/cmake/Arccon -DAxlstar_DIR=/my/path/to/Arcane.framework/install/share/cmake/Axlstar -DAlienProd_DIR=/my/path/to/Alien.legacy_plugins/install/lib/cmake -DArcane_DIR=/my/path/to/Arcane.framework/install/lib/cmake/Arcane -DAlienPath=/my/path/to/Alien.legacy_plugins/install/ -DArccore_DIR=/my/path/to/Arcane.framework/install/lib/cmake/Arccore
may put off people curious about testing sharc.
Also it's strange to have 2 variables for alien:
-DAlienProd_DIR=/my/path/to/Alien.legacy_plugins/install/lib/cmake
-DAlienPath=/my/path/to/Alien.legacy_plugins/install/
When all packages where built simultaneously via framework I suggest:
cmake ... -DArcaneFramework_DIR=/my/path/to/Arcane.framework
A+
Thomas

Hello,
Using -DCMAKE_PREFIX_PATH=/my/path/to/Arcane.framework does not work. It seems that CMAKE_PREFIX_PATH must include all the paths  specified with the xxxx_DIR variables which does not help making configure more easy.
A+
Thomas

No. All the packages installed inside ArcaneFramework should be automatically found using only one CMAKE_PREFIX_PATH. CMake use the following paths to find packages : https://cmake.org/cmake/help/latest/command/find_package.html#id9.
All the packages config file are installed under <prefix>/lib/cmake.

Ok, I understand that there is no will to improve configuring procedure for sharc.

No.  I think we can improve configuration of sharc but for your specific issue using only CMAKE_PREFIX_PATH should work. I am not able to reproduce your problem because sharc only compile on RedHat environment and I only have an ubuntu machine. When sharc will compile on ubuntu we can look back to improve build configuration

No worry, ShArc will be very soon configured only by a single  -DCMAKE_PREFIX_PATH=/my/path/to/Arcane.framework. The current limitation does not come from framework but from ShArc buildsystem. ShArc buidsystem will soon be replaced by  app_buildsystem_tools to solve this issue.