ESP32, Multiple cards, and Software Serial questions

Hi Mr. Greiman, thank you for your efforts, I appreciate you. I am working on a wrist watch project that will use an ESP32 (for the Bluetooth and Wifi capabilities and 2 processors), a TFT display, and SD card (to hold the video images), and a VS1053 audio chip with a second SD card holding the audio. Some questions:
Will SdFat-beta support ESP32? I read a prior post that you plan no support for ESP32.
Will SdFat-beta support multiple cards? I read how to do it on other posts, and the solutions ask to edit source and header files.
The ESP32 has multiple SPI interfaces, will SdFat-beta support multiple SPI configurations? I'm not sure if changing the SPI.begin() to identify the MOSI/MISO/CLK pins is the best practice.
I would be glad to support/contribute/test SdFat-beta for ESP32 if that interests you.
-Frank

There is a custom driver in SdFat for ESP processors but it only supports the library standard SPI port.  The driver is old and was written by a user.  I will update it if we can get the following to work.
You could try the following in the release version of SdFat or SdFat-beta.
Edit SdFatConfig.h and set SPI_DRIVER_SELECT  to one like this:
/**
 * If the symbol SPI_DRIVER_SELECT is:
 *
 * 0 - An optimized custom SPI driver is used if it exists
 *     else the standard library driver is used.
 *
 * 1 - The standard library driver is always used.
 *
 * 2 - An external SPI driver of SoftSpiDriver template class is always used.
 *
 * 3 - An external SPI driver derived from SdSpiBaseClass is always used.
 */
#define SPI_DRIVER_SELECT 1  // Was 0 <<========

choose the correct pin numbers to match these GPIO numbers.
SPI | MOSI | MISO | CLK | CS
VSPI | GPIO 23 | GPIO 19 | GPIO 18 | GPIO 5
HSPI | GPIO 13 | GPIO 12 | GPIO 14 | GPIO 15

Then try this to use HSPI in place of the standard VSPI.
#include "SdFat.h"

SdFat sd;

const uint8_t SD_CS_PIN = 5; // replace with correct pin for the SD card on HSPI.
#define SPI_CLOCK SD_SCK_MHZ(50)  // replace with reasonable speed.
SPIClass SPI1(HSPI);
#define SD_CONFIG SdSpiConfig(SD_CS_PIN, DEDICATED_SPI, SPI_CLOCK, &SPI1)

void setup() {
  Serial.begin(9600);
  if (!sd.begin(SD_CONFIG)) {
    sd.initErrorHalt(&Serial);
  }
  Serial.println("ls:");
  sd.ls();
}

void loop() {
}

There is a custom driver in SdFat for ESP processors but it only supports the library standard SPI port.  The driver is old and was written by a user.  I will update it if we can get the following to work.
You could try the following in the release version of SdFat or SdFat-beta.
Edit SdFatConfig.h and set SPI_DRIVER_SELECT  to one like this:
/**
 * If the symbol SPI_DRIVER_SELECT is:
 *
 * 0 - An optimized custom SPI driver is used if it exists
 *     else the standard library driver is used.
 *
 * 1 - The standard library driver is always used.
 *
 * 2 - An external SPI driver of SoftSpiDriver template class is always used.
 *
 * 3 - An external SPI driver derived from SdSpiBaseClass is always used.
 */
#define SPI_DRIVER_SELECT 1  // Was 0 <<========

choose the correct pin numbers to match these GPIO numbers.
SPI | MOSI | MISO | CLK | CS
VSPI | GPIO 23 | GPIO 19 | GPIO 18 | GPIO 5
HSPI | GPIO 13 | GPIO 12 | GPIO 14 | GPIO 15

Then try this to use HSPI in place of the standard VSPI.
#include "SdFat.h"

SdFat sd;

const uint8_t SD_CS_PIN = 5; // replace with correct pin for the SD card on HSPI.
#define SPI_CLOCK SD_SCK_MHZ(50)  // replace with reasonable speed.
SPIClass SPI1(HSPI);
#define SD_CONFIG SdSpiConfig(SD_CS_PIN, DEDICATED_SPI, SPI_CLOCK, &SPI1)

void setup() {
  Serial.begin(9600);
  if (!sd.begin(SD_CONFIG)) {
    sd.initErrorHalt(&Serial);
  }
  Serial.println("ls:");
  sd.ls();
}

void loop() {
}

I found an ESP32 DEV module and ran this program:
#include "SdFat.h"

SdFat sd;

const uint8_t SD_CS_PIN = 15; // replace with correct pin for the SD card on HSPI.
#define SPI_CLOCK SD_SCK_MHZ(20)  // replace with reasonable speed.
SPIClass SPI1(HSPI);
#define SD_CONFIG SdSpiConfig(SD_CS_PIN, DEDICATED_SPI, SPI_CLOCK, &SPI1)

void setup() {
  Serial.begin(9600);
  while(!Serial) {}
  Serial.println("Type");
  while(!Serial.available()){}
  if (!sd.begin(SD_CONFIG)) {
    sd.initErrorHalt(&Serial);
  }
  Serial.println("ls:");
  sd.ls();
}

I got it to work  but only after I loaded/started the program without the SD in the socket.  Is HSPI used for something else?
Here is the output.
Type
ls:
TestESP32.txt

I found an ESP32 DEV module and ran this program:
#include "SdFat.h"

SdFat sd;

const uint8_t SD_CS_PIN = 15; // replace with correct pin for the SD card on HSPI.
#define SPI_CLOCK SD_SCK_MHZ(20)  // replace with reasonable speed.
SPIClass SPI1(HSPI);
#define SD_CONFIG SdSpiConfig(SD_CS_PIN, DEDICATED_SPI, SPI_CLOCK, &SPI1)

void setup() {
  Serial.begin(9600);
  while(!Serial) {}
  Serial.println("Type");
  while(!Serial.available()){}
  if (!sd.begin(SD_CONFIG)) {
    sd.initErrorHalt(&Serial);
  }
  Serial.println("ls:");
  sd.ls();
}

I got it to work  but only after I loaded/started the program without the SD in the socket.  Is HSPI used for something else?
Here is the output.
Type
ls:
TestESP32.txt

Thanks, Bill. I'm glad to set-up the test examples. To be clear, you want me to test where one sd card is on VSPI and a second card is on HSPI? -Frank

Thanks, Bill. I'm glad to set-up the test examples. To be clear, you want me to test where one sd card is on VSPI and a second card is on HSPI? -Frank

You could test with two cards I don't think two cards will be a problem, I do that on many systems. with a sd1 and sd2.
My worry is HSPI seems flaky.  I modified the custom driver so it is multi port.  I ran the bench example on the two ports and got fair performance.
The SPI driver seem to fail for high SPI rates.  A standard SPI driver should set the rate to the highest rate supported by the chip that is less than or equal to the value in SpiSettings.   All Arduino boards work this way.
Here are the results from bench with the custom driver. at 20 MHz.
I defined SPI1 like this in bench:
#define SPI_CLOCK SD_SCK_MHZ(20)
SPIClass SPI1(HSPI);
#define SD_CONFIG SdSpiConfig(SD_CS_PIN, DEDICATED_SPI, SPI_CLOCK, &SPI1)

Here are the results:
VSPI port as SPI

write speed and latency
speed,max,min,avg
KB/Sec,usec,usec,usec
1913.51,188574,227,266
2212.39,5454,227,230

read speed and latency
speed,max,min,avg
KB/Sec,usec,usec,usec
824.67,798,480,619
825.08,797,480,619

-------------------------
HSPI port as SPI1

write speed and latency
speed,max,min,avg
KB/Sec,usec,usec,usec
2194.91,9682,227,232
2207.51,5374,227,231

read speed and latency
speed,max,min,avg
KB/Sec,usec,usec,usec
825.08,795,479,619
825.22,797,480,619

You could test with two cards I don't think two cards will be a problem, I do that on many systems. with a sd1 and sd2.
My worry is HSPI seems flaky.  I modified the custom driver so it is multi port.  I ran the bench example on the two ports and got fair performance.
The SPI driver seem to fail for high SPI rates.  A standard SPI driver should set the rate to the highest rate supported by the chip that is less than or equal to the value in SpiSettings.   All Arduino boards work this way.
Here are the results from bench with the custom driver. at 20 MHz.
I defined SPI1 like this in bench:
#define SPI_CLOCK SD_SCK_MHZ(20)
SPIClass SPI1(HSPI);
#define SD_CONFIG SdSpiConfig(SD_CS_PIN, DEDICATED_SPI, SPI_CLOCK, &SPI1)

Here are the results:
VSPI port as SPI

write speed and latency
speed,max,min,avg
KB/Sec,usec,usec,usec
1913.51,188574,227,266
2212.39,5454,227,230

read speed and latency
speed,max,min,avg
KB/Sec,usec,usec,usec
824.67,798,480,619
825.08,797,480,619

-------------------------
HSPI port as SPI1

write speed and latency
speed,max,min,avg
KB/Sec,usec,usec,usec
2194.91,9682,227,232
2207.51,5374,227,231

read speed and latency
speed,max,min,avg
KB/Sec,usec,usec,usec
825.08,795,479,619
825.22,797,480,619

Here is the modified ESP driver.  You could replace the contents of  SdFat/src/SpiDriver/SdSpiESP.cpp to test the new driver.
SPI_DRIVER_SELECT must be zero in SdFatConfig.h to use this driver.

/**
 * Copyright (c) 2011-2020 Bill Greiman
 * This file is part of the SdFat library for SD memory cards.
 *
 * MIT License
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 */

#include "SdSpiDriver.h"
#if defined(SD_USE_CUSTOM_SPI) && (defined(ESP8266) || defined(ESP32))
#define ESP_UNALIGN_OK 1
//------------------------------------------------------------------------------
void SdSpiArduinoDriver::activate() {
  m_spi->beginTransaction(m_spiSettings);
}
//------------------------------------------------------------------------------
void SdSpiArduinoDriver::begin(SdSpiConfig spiConfig) {
  if (spiConfig.spiPort) {
    m_spi = spiConfig.spiPort;
#if defined(SDCARD_SPI) && defined(SDCARD_SS_PIN)
  } else if (spiConfig.csPin == SDCARD_SS_PIN) {
    m_spi = &SDCARD_SPI;
#endif  // defined(SDCARD_SPI) && defined(SDCARD_SS_PIN)
  } else {
    m_spi = &SPI;
  }
  m_spi->begin();
}
//------------------------------------------------------------------------------
void SdSpiArduinoDriver::deactivate() {
  m_spi->endTransaction();
}
//------------------------------------------------------------------------------
uint8_t SdSpiArduinoDriver::receive() {
  return m_spi->transfer(0XFF);
}
//------------------------------------------------------------------------------
uint8_t SdSpiArduinoDriver::receive(uint8_t* buf, size_t count) {
#if defined(ESP_UNALIGN_OK) && ESP_UNALIGN_OK
  m_spi->transferBytes(nullptr, buf, count);
#else  // ESP_UNALIGN_OK
  // Adjust to 32-bit alignment.
  while ((reinterpret_cast<uintptr_t>(buf) & 0X3) && count) {
    *buf++ = m_spi->transfer(0xff);
    count--;
  }
  // Do multiple of four byte transfers.
  size_t n4 = 4*(count/4);
  if (n4) {
    m_spi->transferBytes(nullptr, buf, n4);
  }
  // Transfer up to three remaining bytes.
  for (buf += n4, count -= n4; count; count--) {
    *buf++ = m_spi->transfer(0xff);
  }
#endif  // ESP_UNALIGN_OK
  return 0;
}
//------------------------------------------------------------------------------
void SdSpiArduinoDriver::send(uint8_t data) {
  m_spi->transfer(data);
}
//------------------------------------------------------------------------------
void SdSpiArduinoDriver::send(const uint8_t* buf , size_t count) {
#if defined(ESP_UNALIGN_OK) && ESP_UNALIGN_OK
  m_spi->transferBytes(const_cast<uint8_t*>(buf), nullptr, count);
#else  // defined(ESP_UNALIGN_OK) && ESP_UNALIGN_OK
  // Adjust to 32-bit alignment.
  while ((reinterpret_cast<uintptr_t>(buf) & 0X3) && count) {
    m_spi->transfer(*buf++);
    count--;
  }
#endif  // defined(ESP_UNALIGN_OK) && ESP_UNALIGN_OK
}
#endif  // defined(SD_USE_CUSTOM_SPI) && defined(ESP8266)

Here is the modified ESP driver.  You could replace the contents of  SdFat/src/SpiDriver/SdSpiESP.cpp to test the new driver.
SPI_DRIVER_SELECT must be zero in SdFatConfig.h to use this driver.

/**
 * Copyright (c) 2011-2020 Bill Greiman
 * This file is part of the SdFat library for SD memory cards.
 *
 * MIT License
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 */

#include "SdSpiDriver.h"
#if defined(SD_USE_CUSTOM_SPI) && (defined(ESP8266) || defined(ESP32))
#define ESP_UNALIGN_OK 1
//------------------------------------------------------------------------------
void SdSpiArduinoDriver::activate() {
  m_spi->beginTransaction(m_spiSettings);
}
//------------------------------------------------------------------------------
void SdSpiArduinoDriver::begin(SdSpiConfig spiConfig) {
  if (spiConfig.spiPort) {
    m_spi = spiConfig.spiPort;
#if defined(SDCARD_SPI) && defined(SDCARD_SS_PIN)
  } else if (spiConfig.csPin == SDCARD_SS_PIN) {
    m_spi = &SDCARD_SPI;
#endif  // defined(SDCARD_SPI) && defined(SDCARD_SS_PIN)
  } else {
    m_spi = &SPI;
  }
  m_spi->begin();
}
//------------------------------------------------------------------------------
void SdSpiArduinoDriver::deactivate() {
  m_spi->endTransaction();
}
//------------------------------------------------------------------------------
uint8_t SdSpiArduinoDriver::receive() {
  return m_spi->transfer(0XFF);
}
//------------------------------------------------------------------------------
uint8_t SdSpiArduinoDriver::receive(uint8_t* buf, size_t count) {
#if defined(ESP_UNALIGN_OK) && ESP_UNALIGN_OK
  m_spi->transferBytes(nullptr, buf, count);
#else  // ESP_UNALIGN_OK
  // Adjust to 32-bit alignment.
  while ((reinterpret_cast<uintptr_t>(buf) & 0X3) && count) {
    *buf++ = m_spi->transfer(0xff);
    count--;
  }
  // Do multiple of four byte transfers.
  size_t n4 = 4*(count/4);
  if (n4) {
    m_spi->transferBytes(nullptr, buf, n4);
  }
  // Transfer up to three remaining bytes.
  for (buf += n4, count -= n4; count; count--) {
    *buf++ = m_spi->transfer(0xff);
  }
#endif  // ESP_UNALIGN_OK
  return 0;
}
//------------------------------------------------------------------------------
void SdSpiArduinoDriver::send(uint8_t data) {
  m_spi->transfer(data);
}
//------------------------------------------------------------------------------
void SdSpiArduinoDriver::send(const uint8_t* buf , size_t count) {
#if defined(ESP_UNALIGN_OK) && ESP_UNALIGN_OK
  m_spi->transferBytes(const_cast<uint8_t*>(buf), nullptr, count);
#else  // defined(ESP_UNALIGN_OK) && ESP_UNALIGN_OK
  // Adjust to 32-bit alignment.
  while ((reinterpret_cast<uintptr_t>(buf) & 0X3) && count) {
    m_spi->transfer(*buf++);
    count--;
  }
#endif  // defined(ESP_UNALIGN_OK) && ESP_UNALIGN_OK
}
#endif  // defined(SD_USE_CUSTOM_SPI) && defined(ESP8266)

I edited the driver above, it was the wrong version.

I edited the driver above, it was the wrong version.

I found out why HSPI is flaky with an SD card.

The device on the natural GPIO pins of the ESP32 must not send or receive any data during program load. GPIO13, which is used as the HSPI MOSI is also used as the JTAG TCK pin.

I found out why HSPI is flaky with an SD card.

The device on the natural GPIO pins of the ESP32 must not send or receive any data during program load. GPIO13, which is used as the HSPI MOSI is also used as the JTAG TCK pin.

change line 44 in the SdSpiESP.cpp for custom VSPI/HSPI pin assignment
//  m_spi->begin();
m_spi->begin(SDCARD_SCK_PIN,SDCARD_MISO_PIN,SDCARD_MOSI_PIN,SDCARD_SS_PIN);

Hi, I could use some help with a similar issue.
I tried the changes proposed by @greiman on Jan21, but they didn't cut it.
My issue is the following:
I am currently working with the Lilygo T3S3. It has booth LoRa and a SD interface. LINK
The manufactor uses SD library on his example code. I gather it is because SD allows for a call like:
"SD.begin(CS_PIN, SPI_CLASS)". See HERE
For compatibility issues with other sections of my code, I have to use SdFat lib, but SdFat does not allow this sort of calling with the SPI_class as second parameter. I wonder why @greiman suggestion didn't work for me.
Current code is variant of StuartsProjects example. LoRa works, but SD doesn't. REFFERENCE
`/*******************************************************************************************************
Details of the packet identifiers, header and data lengths and formats used are in the file;
'Data transfer packet definitions.md' in the \SX128X_examples\DataTransfer\ folder.
Max segment size (defined by DTSegmentSize) is 245 bytes for LoRa.
*******************************************************************************************************/
#define USELORA                              //enable this define to use LoRa packets
#include <SPI.h>
#include <SX128XLT.h>
#include <ProgramLT_Definitions.h>
#include "DTSettings.h"                      //LoRa settings etc.
SX128XLT LoRa;                               //create an SX128XLT library instance called LoRa, required by SDtransfer.h
#define ENABLEMONITOR                        //enable monitor prints
#define PRINTSEGMENTNUM                      //enable this define to print segment numbers
#define ENABLEFILECRC                        //enable this define to uses and show file CRCs
//#define DISABLEPAYLOADCRC                  //enable this define if you want to disable payload CRC checking
//#define DEBUG                              //see additional debug info
//#define SDLIB                              //define SDLIB for SD.h or SDFATLIB for SDfat.h
#define SDFATLIB
#include <DTSDlibrary.h>                     //library of SD functions
#include <SDtransfer.h>                      //library of data transfer functions
//choice of files to send
char FileName[] = "/$50SATS.JPG";        //file length 6880 bytes, file CRC 0x0281
SPIClass SDSPI(HSPI);
#define SD_CONFIG SdSpiConfig(SDCS, DEDICATED_SPI, SDSCLK, &SDSPI)
void setup()
{
//SDsetLED(LED1);                                 //setup LED pin for data transfer indicator
#ifdef ENABLEMONITOR
Monitorport.begin(115200);

long time = millis();

while (!Serial && ( millis() < time + 10000) );

Monitorport.println();
Monitorport.println(F(__FILE__));
Monitorport.flush();

#endif
SPI.begin(LoRa_SCLK, LoRa_MISO, LoRa_MOSI, NSS);
if (LoRa.begin(NSS, NRESET, RFBUSY, DIO1, LORA_DEVICE))
{
#ifdef ENABLEMONITOR

    Monitorport.println(F("LoRa device OK"));

#endif

}
else
{
#ifdef ENABLEMONITOR

    Monitorport.println(F("LoRa device error"));

#endif

while (1)
{

}

}
#ifdef USELORA
LoRa.setupLoRa(Frequency, Offset, SpreadingFactor, Bandwidth, CodeRate);
Serial.println(F("Using LoRa packets"));

#endif
#ifdef ENABLEMONITOR
Monitorport.println();
Monitorport.print(F("Initializing SD card..."));

#endif
pinMode(SDMISO, INPUT_PULLUP);
SDSPI.begin(SDSCLK, SDMISO, SDMOSI, SDCS);
if (SD.begin(SD_CONFIG))
{
#ifdef ENABLEMONITOR

  Monitorport.println(F("SD Card initialized."));

#endif

}
else
{
Monitorport.println(F("SD Card failed, or not present."));

while (1)
{

}

}
#ifdef ENABLEMONITOR
Monitorport.println();

#endif
#ifdef DISABLEPAYLOADCRC
LoRa.setReliableConfig(NoReliableCRC);

#endif
if (LoRa.getReliableConfig(NoReliableCRC))
{
#ifdef ENABLEMONITOR

  Monitorport.println(F("Payload CRC disabled"));

#endif

}
else
{
#ifdef ENABLEMONITOR

  Monitorport.println(F("Payload CRC enabled"));

#endif

}
SDDTFileTransferComplete = false;
#ifdef ENABLEMONITOR
Monitorport.println(F("SDfile transfer ready"));
Monitorport.println();

#endif
}
void loop()
{
uint32_t filelength;
#ifdef ENABLEMONITOR
Monitorport.println(F("Transfer started"));

#endif
filelength = SDsendFile(FileName, sizeof(FileName));
if (filelength)
{
#ifdef ENABLEMONITOR

    Monitorport.println(F("Transfer finished"));

#endif

}
else
{
#ifdef ENABLEMONITOR

    Monitorport.println(F("Transfer failed"));
    Monitorport.println();

#endif

}
delay(15000);
}
`

User calls to SPI begin like this:
SDSPI.begin(SDSCLK, SDMISO, SDMOSI, SDCS);
only work in SdFat-beta.  See this example.
Install SdFat-beta and modify this line:
#define SD_CONFIG SdSpiConfig(SDCS, DEDICATED_SPI, SDSCLK, &SDSPI)
to:
#define SD_CONFIG SdSpiConfig(SDCS, USER_SPI_BEGIN | DEDICATED_SPI, SDSCLK, &SDSPI)
This will prevent SdFat from calling SPI begin and overriding your options.

Hi, @greiman .
Sorry. It didn't work. Followed your instructions precisely, but wasn't able to mount the card. The only difference I noticed from my code and the example you mentioned is that he did not use HSPI. What could I have done wrong?
If I adopt the usual SPI call (without using the "config" constructor), it works. So I also tried using HSPI for the LoRa instead, but wasn't succesfull.
So far, the only way I was able to get both LoRa and SD working, was using the SD lib, that allows for a different call, but as I mentioned, I need SDFat in order to also implement USB MSC.

I have seen problems with HSPI and SdFat.  I don't know why. it may be the speed needs to be lower.

Hi,
I can't believe it...It really worked with lower frequency.
Thank you so, much, @greiman.
Excelent work with the library, by the way.

While  using  TFT display and  Sdfat    sd.begin() failed , is there any  simple  user  defined  pin  code  for  both  that  can handle  both  seamlessly   ?
SPI | MOSI | MISO | CLK | CS
VSPI | GPIO 23 | GPIO 19 | GPIO 18 | GPIO 15... TFT
HSPI | GPIO 13 | GPIO 12 | GPIO 14 | GPIO 5... SDFat


Add new logo asset to static folder

https://app.shortcut.com/larder/story/8879/use-the-racks-logo

Merging without a review. It's just adding an image to the static folder.


Replace references to id with index

The last round of revision introduced the atomic index attribute. See line 267 for an example where id is still used. Fix all occurrences.

Uses the synonym "identifier," which is more common and also should be changed to "index."


Add resizeable backend VNC support

This has been discussed in the past - see #259 and #287.
The VNC backend still seems to be with us, and still seems to have a few useful use cases.  At our place, developers working at home are are using Citrix to connect in to a Windows farm and from there are using XRDP to connect to the Linux workstations. Some of them have reported noticeably better performance using Xvnc rather than Xorg in this configuration.
This PR supports the VNC resizing and multi-screen features used by tigervnc.  I've tested both resizing and multi-screen on CentOS 7.5 (tigervnc 1.8). and resizing on xubuntu 18.04 (tigervnc 1.7).  I can't currently test multi-monitor on xubuntu due to a lack of kit.
I've made the feature optional to avoid breaking workflows used by existing users. So by default there's no change in behaviour. Users wishing to use the new feature can set "code=1" in xrdp.ini. This value is used to inform sesman that the VNC session is resizeable, and also to tell the VNC backend to request the ExtendedDesktopSize pseudo-encoding from Xvnc.
The module uses resize-on-reconnect in the same way that the Xorg backend does. When a single screen is used, the use can resize sessions on-the-fly by using 'xrandr -s', or by using the appropriate desktop utility.
For review purposes, I've split the PR into three commits. One is simply running astyle on the vnc module. Another is adding the extra functionality to the backend (plus removing some magic numbers), and the last is the changes to SCP and sesman. The last of these is the bit I'm least confident about. At the moment I haven't completely separated resizable VNC sessions from non-resizeable VNC sessions in sesman itself.  Would that be a better idea?

Actually, I was working on adding resizing support. Mine is still WIP. I review your implementation and combine with mine. Thank you very much for your continuous contributions.

That sounds like a very good idea - I'm sure you understand the implications for the scp library and sesman better than I do.
I'll leave the PR open for now in case you've got any queries on my implementation, or you'd like me to make other changes.

Started working on neutrinolabs extended-vnc branch based on your work:
https://github.com/neutrinolabs/xrdp/tree/extended-vnc

@matt335672
I'm thinking of removing SCP_SESSION_TYPE_RESIZEABLE_VNC to simplify.  I don't want to care about code=0/1. It should be automatic. If VNC server supports resizing (ExtendedDesktopSize), resize the existing VNC session. If resizing is not supported, connect to the existing session with current size. I'd appreciate if you let me know concerns.
This will change curren behaviour but most people using VNC session don't want to create new session when reconnect from different size.

Well, when I proposed the PR, I didn't think you'd be happy with changing existing behaviour.
If you are happy with that, I very much agree that it's worth removing SCP_SESSION_TYPE_RESIZEABLE_VNC. It makes the code simpler, and all the backends should now behave the same way. You may even be able to remove the 'D' session allocation policy from the session manager as the session manager won't need to store sizes any more - all the size information can be managed by the vnc module.
I suspect you're right in your assumption that most people would prefer to reconnect to an existing session. There may be people out there using the old behaviour, but I can't think that XRDP is adding much value for them.

@metalefty can this be reopened again and reconsidered? We now need to arrange apply this patch out of bounds due to the speed difference between VNC and for the exact reasons @matt335672 stated.

Hello, actually @matt335672 did most work (thanks!). Then I make some changes to his work. However, there's no progress because of the lack of my time. So the bottleneck is certainly me. I'm really sorry about that. I should leave it to others rather than damming up the development at my place.
@matt335672 can you continue further development as I mentioned at https://github.com/neutrinolabs/xrdp/pull/1343#issuecomment-523757292 ? Sorry about I made no progress.

Hi both,
Yes, I'm happy to do some further work on this.
It'll take me a few days to get to it. When I raised this PR, I was working as a sysadmin to a bunch of software developers with twin monitor setups. At the moment I'm at home without even a twin monitor setup, so I'm going to have to work out how I can set something up for testing and the inevitable bug-fixes that will be needed after we get something out.
@bolkedebruin - if you tell me which version of XRDP you're working with at the moment I'll rebase my extended-vnc branch on https://github.com/matt335672/xrdp to that as soon as I can. If you want to pull from there it might help your existing workflows, and if you want to change versions we can rebase again. If you're happy to test and comment on the changes I'll be making before release that could be quite useful for both of us I think.

Awesome! We applied your patch to 0.9.10 but would like it to apply to 0.9.12. We haven't tried yet in this case. We have been running the patch for over 6 months without any issues AFAIK btw. So I would argue patch clean up would be enough.

Hi @bolkedebruin
I've rebased to v0.9.12 and the branch builds cleanly. For the reasons stated above I haven't tested this yet, but you're welcome to work with it.
I think that was what you wanted - please correct me if not.
Met vriendelijke groet

Thanks! Honestly what I would like is to have this in the main branch. I know your patch is working well ;-)
Dank

@metalefty anything left for you to be able to merge this?

@bolkedebruin Let me some time to test.

Now I'm a bit confused.
@metalefty - do you want me to work on removing SCP_SESSION_TYPE_RESIZEABLE_VNC? Happy to do that or leave it as you suggest.

@matt335672
Yes, I'm thinking of like this.

Remove SCP_SESSION_TYPE_RESIZEABLE_VNC
Always allow VNC to connect existing session (like xorgxrdp session)
Detect if VNC supports resizing

If VNC supports resizing, resize the session to client size
If VNC doesn't support resizing, resize the client to server size

I've just added a commit to this branch which implements the changes requested by @metalefty

Removes SCP_SESSION_TYPE_RESIZEABLE_VNC
By default VNC connects to existing session
Detect if VNC supports resizing at connect time

If VNC supports resizing, resize the session to client size
If VNC doesn't support resizing, resize the client to server size

I've also fixed a number of bugs, the most important of which are:-

Windows monitor layouts where the primary monitor was not the left-top monitor now work.
The Windows client can be resized to single monitor layout when configured as multi-monitor but connecting to a single screen VNC server.

The resize detection has been moved to a separate state machine which runs after the connect which I think makes the logic clearer. I've also added a variable to allow the ExtendedDesktop pseudo-encoding support to be disabled if a serious problem is found with either my changes or a particuat VNC server.
I've tried to use doxygen-compatible function headers where required.
So far I've tested on tigervnc and an x11vnc session on the console. I'll try a few other VNC servers.
Any comments or testing are very welcome.

So this is for VNC only, right?
What about compatibility with this:
https://github.com/neutrinolabs/xrdp/issues/448?
On Thu, May 21, 2020 at 6:57 AM matt335672<EMAIL_ADDRESS>wrote:

I've just added a commit to this branch which implements the changes
requested by @metalefty https://github.com/metalefty

Removes SCP_SESSION_TYPE_RESIZEABLE_VNC
By default VNC connects to existing session
Detect if VNC supports resizing at connect time

If VNC supports resizing, resize the session to client size
If VNC doesn't support resizing, resize the client to server size

I've also fixed a number of bugs, the most important of which are:-

Windows monitor layouts where the primary monitor was not the
left-top monitor now work.
The Windows client can be resized to single monitor layout when
configured as multi-monitor but connecting to a single screen VNC server.

The resize detection has been moved to a separate state machine which runs
after the connect which I think makes the logic clearer. I've also added a
variable to allow the ExtendedDesktop pseudo-encoding support to be
disabled if a serious problem is found with either my changes or a
particuat VNC server.
I've tried to use doxygen-compatible function headers where required.
So far I've tested on tigervnc and an x11vnc session on the console. I'll
try a few other VNC servers.
Any comments or testing are very welcome.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/neutrinolabs/xrdp/pull/1343#issuecomment-632021784,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AA4UBHPIFEGKA25KI3TJWVLRSUCIFANCNFSM4HJ5BYHQ
.

That's a good point.
Yes, this is for VNC only. It brings resize on connect to VNC, but there's no reason why resize logic couldn't be used to implement #448 for VNC, provided the particular Xvnc server supports it.

I really want to see this happen. How can I help?
On Thu, May 21, 2020 at 8:25 AM matt335672<EMAIL_ADDRESS>wrote:

That's a good point.
Yes, this is for VNC only. It brings resize on connect to VNC, but there's
no reason why resize logic couldn't be used to implement #448
https://github.com/neutrinolabs/xrdp/issues/448 for VNC, provided the
particular Xvnc server supports it.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/neutrinolabs/xrdp/pull/1343#issuecomment-632057358,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AA4UBHL2HYDOJXBVBHWMFCDRSUMULANCNFSM4HJ5BYHQ
.

I think what I said was open to some misinterpretation - sorry about that.
What I meant was when #448 gets merged, getting the support into VNC too should be straightforward as all the functionality will be in the VNC library.
I can't comment on #448 - it somewhat predates my involvement. I can only suggest you ask Jay for an update on that thread. I'm happy to work on the VNC part, but I don't think that's at all critical.

At first glance, it is working quite well.

@matt335672
Something going wrong when -AcceptSetDesktopSize=0 (TigerVNC 1.7.0).
Regarding community maintained RFB specification, the VNC server may deny SetDesktopSize request.
[Xvnc]
param=Xvnc
param=-bs
param=-nolisten
param=tcp
param=-localhost
param=-dpi
param=96
param=-AcceptSetDesktopSize=0

[20200522-13:16:06] [DEBUG] xrdp_wm_log_msg: connecting to sesman ip <IP_ADDRESS> port 3350
[20200522-13:16:06] [INFO ] xrdp_wm_log_msg: sesman connect ok
[20200522-13:16:06] [DEBUG] xrdp_wm_log_msg: sending login info to session manager, please wait...
[20200522-13:16:06] [DEBUG] return value from xrdp_mm_connect 0
[20200522-13:16:06] [INFO ] xrdp_wm_log_msg: login successful for display 10
[20200522-13:16:06] [DEBUG] Layout from client_info (geom=1364x768 #screens=1) : 0:(1364x768+0+0)
[20200522-13:16:06] [DEBUG] xrdp_wm_log_msg: VNC started connecting
[20200522-13:16:06] [DEBUG] xrdp_wm_log_msg: VNC connecting to <IP_ADDRESS> 5910
[20200522-13:16:06] [DEBUG] xrdp_wm_log_msg: VNC tcp connected
[20200522-13:16:06] [DEBUG] xrdp_wm_log_msg: VNC security level is 2 (1 = none, 2 = standard)
[20200522-13:16:06] [DEBUG] xrdp_wm_log_msg: VNC password ok
[20200522-13:16:06] [DEBUG] xrdp_wm_log_msg: VNC sending share flag
[20200522-13:16:06] [DEBUG] xrdp_wm_log_msg: VNC receiving server init
[20200522-13:16:06] [DEBUG] xrdp_wm_log_msg: VNC receiving pixel format
[20200522-13:16:06] [DEBUG] xrdp_wm_log_msg: VNC receiving name length
[20200522-13:16:06] [DEBUG] xrdp_wm_log_msg: VNC receiving name
[20200522-13:16:06] [DEBUG] xrdp_wm_log_msg: VNC sending pixel format
[20200522-13:16:06] [DEBUG] xrdp_wm_log_msg: VNC sending cursor
[20200522-13:16:06] [DEBUG] xrdp_wm_log_msg: VNC connection complete, connected ok
[20200522-13:16:06] [DEBUG] xrdp_wm_log_msg: connected ok
[20200522-13:16:06] [DEBUG] xrdp_mm_connect_chansrv: chansrv connect successful
[20200522-13:16:06] [DEBUG] Closed socket 26 (AF_INET <IP_ADDRESS>:41098)
[20200522-13:16:06] [DEBUG] Skipping ENC_CURSOR encoding
[20200522-13:16:06] [DEBUG] VNC matched ExtendedDesktopSize rectangle x=0, y=0 geom=1920x1080
[20200522-13:16:06] [DEBUG] X server supports resizing
[20200522-13:16:06] [DEBUG] Layout from Xvnc (geom=1920x1080 #screens=1) :<PHONE_NUMBER>:(1920x1080+0+0)
[20200522-13:16:06] [DEBUG] VNC setting screen id to<PHONE_NUMBER> from server
[20200522-13:16:06] [DEBUG] Sending SetDesktopSize to change server layout
[20200522-13:16:06] [DEBUG] VNC Sending SetDesktopSize
[20200522-13:16:06] [DEBUG] Skipping ENC_RAW encoding

Well this is interesting.
I agree with your reading of the spec, and I've managed to reproduce your results.
What seems to be happening is that when AcceptDesktopSize=0 is set, the tigervnc server is still responding to our initial SetEncodings message with an ExtendedDesktopSize rectangle which advertises support for SetDesktopSize.
However, when we send SetDesktopSize, the server is dropping it. The relevant code for tigervnc is here, with the message being dropped at line 624.
I think this is in violation of the spec in section 7.4.10. We should get an ExtendedDesktopSize rectangle with x set to 1 (error) and y set to 1 probably (Resize is administratively prohibited).
I'll raise an issue with tigervnc on this.
In the meantime, what do you think we should do? I can probably code around it, but it could be a bit messy.

Thank you for the investigation.
I think we don't need to add a workaround if the code becomes messy.
As far as I observe, few people like the current behaviour but many people want to reconnect the existing VNC sessions. So I believe few people use AcceptDesktopSize=0. It is not worth code around than effort.

Comments in xrdp.ini.in fixed.
I'll carry on looking at the tigervnc situation - I'd still like to check behaviour if a resize request is denied. I'll report back when I know more.

I've built a tigervnc server here which bounces SetDesktopSize requests with a denial if AcceptSetDesktopSize=0 is set.
I've issued a PR for this, so hopefully I'll get some constructive feedback from the tigervnc project.
This has let me to make a few minor corrections which are committed above.
I've still got an unexplained problem in that the current latest remmina from the PPA (version 1.4.5+ppa202005242201.r36) on Bionic is occasionally closing on a resize with the following message:-
[ERROR][com.freerdp.core.capabilities] - unexpected MCS channel id 03ee received

It doesn't happen with any other clients. With remmina it doesn't happen all the time, so there's either uninitialised data or a race involved. In any case I think I'll need to bottom it out in case the problem is on our side.

Thanks, the TigerVNC team was so constructive when I sent a PR before.
Regarding Remmina issue, is it happen with FreeRDP?

Yes - I've reproduced it with FreeRDP.
That should make debugging a bit easier.

FreeRDP problem has been identified.
I've raised a separate PR #1595 to discuss, as it appears to be a protocol violation on our part (if I'm reading the spec right).

For info, PR TigerVNC/tigervnc#1036 to respond to the SetDesktopSize request with a denial if -AcceptSetDesktopSize=0 has been accepted.

Yup, I subscribed the PR and saw it was merged. Thank you very much for the fix.

Some log messages should be promoted to INFO level.

I've performed non-resizeable tests so far with:-

x11vnc on the console
A patched TigerVNC server with -AcceptSetDesktopSize=0
the new setting disabled_encodings_mask=1 in xrdp.ini

I'll try also with tight VNC and real VNC on Ubuntu 18.04. I don't know whether they support resizing or not, but I'll need to understand the behaviour before this goes live so we can support it.

Thanks, that's nice. TigerVNC is the first implementation that supports resizing and AFAIK it is still the only implementation so far.
The fact the name of TigerVNC developer Pierre Ossman can be seen in RFC6143 shows that resizing is introduced to VNC by him.
https://tools.ietf.org/html/rfc6143#section-8.4.2

Happy with all those comments above.

@matt335672 awesome work! The code really got an upgrade. I was wondering if "online resize" is an option? I.e. The client resizes it's window, but without a reconnect, and the server adjusts it's viewport accordingly (xrandr).

@bolkedebruin It's out of scope of this PR. It would be done in #448 someday later. Let us focus on the VNC resizing itself.

Wow, switching between multi screen and single screen (and plus resizing) works perfectly for me. Awesome.

That's a good set of review comments - thanks very much.
I've incorporated those, and also added in the error strings for failed resizes. So now you get errors like the following:-
[20200602-16:41:00] [ERROR] VNC server resize failed - error code 1 [Resize is administratively prohibited]

As regards the Doxygen header comment, I'm thinking in the longer term Doxygen might be a good place to document some of the interfaces in the code, particularly the libraries. What do you think?
I've also done some testing with both tightvnc 1.3.10 and realVNC 4.1.1 on Ubuntu 18.04.
For both I created a single window of size 640x480, then re-connected at 800x600. With both servers I got a message like this:-
[20200602-17:27:34] [DEBUG] VNC server does not support resizing
[20200602-17:27:34] [DEBUG] Resizing client to server 640x480

which is as expected. Neither server responds to the ExtendedDesktopSize pseudo-encoding.
I had to set the Windows client to 24-bit depth rather than 32 to get tightvnc to work.
I've still got some more testing to do around colour depths - I'll get on to that tomorrow.

As regards the Doxygen header comment, I'm thinking in the longer term Doxygen might be a good place to document some of the interfaces in the code, particularly the libraries. What do you think?

I totally agree. Good documentation will invite more first-time contributors.
Regarding TightVNC 32bpp issue, supporting multiple VNC implementations is definitely a good thing but I don't think we need to care about relatively tiny issues such as 32bpp if the fix is not easy. Open-source version of TightVNC has been inactive for a decade and it is the biggest reason that TigerVNC is forked from TightVNC in 2009.
Overall looks much better to me. We can make further fixes later. When you finished some more tiny fixes, let's merge.

I've done some more testing this morning, and I've not hit any more issues.
@bolkedebruin - thanks for following this. Have you got anything to add before we merge, in a day or so?

We can test it on ca 200+ users on Monday if you are willing to wait. Can also file bugs afterwards

@bolkedebruin If you could test it, it would be nice to test devel branch after we merge this. If you find bugs, raise a new issue.

This branch is currently baselined off 0.9.12.
v0.9.13 is bugfixes, and a scan of the commit log since then shows these PRs. I've checked this list once, but I wouldn't rely on it without checking yourself:-

#1529 - [bugfix] Fix Xorg path for Arch Linux
#1522 - [bugfix] workaround odd shift behaviour
#1560 - [feature] Support Slackware with pam
#1557 - [security] Check for overflow before g_malloc() calls
#1549 - [security] Address possible memory out-of-bounds accesses on connect requests
#1520 - [bugfix] Small fixes found by static analyzers
#1593 - [bugfix] Ignore TS_MULTIFRAGMENTUPDATE_CAPABILITYSET from client if fp disabled
#1595 - [bugfix] Prevent chansrv input channels being scanned during a server reset

They're all reasonably tiny. The only coupling with this PR that I'm aware of is that #1595 is required if you're using xfreerdp or Remmina clients, and you're using a non-resizing VNC server.
@bolkedebruin - we're really grateful of an offer of testing like this - thank you. Clearly we'd prefer it if you tested devel after a merge. Whether you'd be prepared to do that or not has to be your decision - you know your workflows and we don't.
I'm going to be a bit strapped for time tomorrow, so I'll do the merge into devel today. I'll leave the branch active in my repo for the time being, so you can pick whatever suits you for your testing. The branch will be squashed, but will still be based off v0.9.12.
One other minor point - if you've been using my original PR with SCP_SESSION_TYPE_RESIZEABLE_VNC, you'll need to remove the code=1 setting from xrdp.ini. I've mentioned this before, but it's worth re-iterating.

@matt335672 we are fine using the devel branch after merging and report bugs from there. We can revert our deployments quite easily. Note that we will just test expected behavior (happy flow) as obviously we want to keep disruption to the users low.
Our setup looks like "browser -> guacamole -> xrdp -> tigervnc -> X -> container -> kubernetes"

Well that makes my life easier then - I've rebased the branch to devel before the merge, as this will make the history cleaner.
For the record, as well as the squash I've updated manpages:-

xrdp.ini(5) now documents the disabled_encodings_mask setting
sesman.ini(5) documents the changed behaviour to the Policy setting.

I've also added a wiki page which details the new behaviour.

All seems fine with testing. We had some 70 concurrent users and we didnt receive any reports that pointed to issues.

@bolkedebruin - thanks ever so much.
There's really no substitute for large scale testing and it was really good of you to fit us in to your schedule like this.


Can we support picture lazy load?

When refreshing pages, pictures show like this in a short time
@halfrost

This is the effect of lazy load.

sure~ https://www.liuxunzhuo.com thanks so much

I check your website and the current performance is in line with expectations. This is lazy loading. Display the text first, then load the image. And only show the pictures visible in the window.

Ok my bad~ Thanks anyway,~


test-kitchen plugin

Hey Ahmed,
Thanks again for great project. Though you might be interested I just created a test-kitchen plugin to use GOSS as a verifier.
Regards
Adham

Awesome, how different is it from https://github.com/kisoku/busser-goss ?

Does not require busser "no ruby" on target. So no ruby + docker friendly

Thanks for the explanation. I'll keep this issue open until I update the docs.

Added to readme, thanks for making this!


Improve architecture for easy update

For an easy update of bombolone, need separate all the main bombolone logic from
the app logic the user could write.

Maybe this shouldn't be closed yet. The easy update part is done, but the separation of the bombolone logic from the user app logic still needs to be done. How about opening another issue for that?

Good idea! Open a new issue about the logic separation.


(#459) - Improving as-int for bytes atom

@yegor256/z everybody who has role REV is banned at #461; I won't be able to assign anyone automatically; consider assigning someone manually (as in §19), or invite more people (as in §51), or remove the job from the scope (as in §14)


Doom One comment colors

I've noticed that a lot of themes (not just for Emacs) prefers to "de-highlight" comments, usually making them grey and "ghosted". My guess is (and I might be wrong here) that most theme authors consider comments as second class citizens to the code, but I think that's a mistake. Good code is mostly self-evident, requiring no comments. But when comments is needed to explain the "why" to the codes "how", or just what exactly is going on, they're just as important as the code itself, if not more.
I've used Emacs default color scheme for many years, and while unsexy in many ways, it did have the advantage of coloring comments in "Firebrick".
So I've come up with the following override for doom-one I'll submit for your consideration:
  ;; Make comments starker colors.
  (set-face-foreground 'font-lock-comment-face (doom-lighten 'cyan .5))
  (set-face-foreground 'font-lock-doc-face (doom-lighten 'cyan .25))

Most, if not all, of our themes have a doom-X-brighter-comments option. Including doom-one.

Most, if not all, of our themes have a doom-X-brighter-comments option. Including doom-one.

Well, I'm not fan of changing the background too. Think it drowns out hl-line and the cursor.
Oh right, I should be using custom-set-faces. BTW, is there a way to adjust the pseudo-colors like bg and bg-alt, or do I have to figure out how they're used and change the individual faces? I seem to be getting old, I'd like some more contrast.

Well, I'm not fan of changing the background too. Think it drowns out hl-line and the cursor.

Sorry, I forgot to mention. Themes also have a doom-*-comment-bg variable. It defaults to the value of doom-*-brighter-comments. When set to t comments are made brighter by changing their background.
This will give you brighter comments without the background:
(setq doom-one-brighter-comments t
      doom-one-comment-bg nil)

is there a way to adjust the pseudo-colors like bg and bg-alt

I'm afraid not without copying the them, making your local adjustments, and loading that instead.

Oh, hmm... Still darker than the code, but aesthetically pleasing. I'll give it a try and see. When comparing I still think it's a tad too dark, but my colors are pretty screaming, so there might be a bit of Stockholm syndrome yet.

I'm afraid not without copying the theme, making your local adjustments, and loading that instead.

Ah, OK. That seems a bit overkill now that I've seemed to have nailed down the ones i need to fix.


No module named xc

While running the final script
./run_MUFIN.sh 0,1 PreTrainedMufinMultiModal MM-AmazonTitles-300K MUFIN_pretrained ViT sentencebert -1 0
I got an error stating that there is no package named xc, my pwd is /home/scratch/XC/programs/MUFIN
So I had to manually xc folder from /programs/CafeXC to my current working directory, and then the error was resolved. I'm not sure that was the correct step. So please look into it.
The path for the xc folder could be added in the Python script using the sys package.

Hi @suvanbalu We want to hard coded things as much as follows. I have fixed the bash script though. Thanks for using our work


setting proxy is not easy in kitematic

There is no easy way to set the proxy from kitematic, so when you are behind a proxy, login will never succeed.

I have to admit that from my point of view this is a major downfall that subverts the whole intention of a easy on the go installation using the Docker-Toolsuite, as proxies are most commonly used at each and every company with a decent IT-infrastructure.
I would expect to be asked for the proxy settings during the first launch of kitematic - at the point it creates the first machine - (server + credentials) and not having to care about setting those afterwards inside the vm (windows) or as separate path variables for kitematic itself.

@ndevireddy @Juchar Setting up a proxy in Kitematic has been detailed in the wiki:
https://github.com/kitematic/kitematic/wiki/Common-Issues-and-Fixes#proxy-issues
Adding the proxy to Kitematic is a good idea, but unfortunately it also needs to be added within the VM - Perhaps this could be part of the Docker Toolbox setup rather than Kitematic.

@FrenchBen  Thanks for sharing the workarounds. The main issue here is, Kitematic will not let you to login to your docker hub account after installation when you are behind a proxy.  By allowing the proxy settings ( or read it from network settings - if you do not want users to enter ) life will become much easier.

@ndevireddy Kitematic should allow you to login behind a proxy as it makes a regular https request to the Hub.
What we've seen in the past, is that the certificate is modified by the proxy, faking an insecure connection. If you go to https://hub.docker.com/ do you see any ssl error? Can you take a screenshot of the SSL connection details?

@FrenchBen  Thanks and sorry for the delayed reply. https://hub.docker.com is not throwing any ssl error.  When I try launching kitematic, it goes till 99% and hangs there for a while, and then prompts for login, but when we enter the credentials, it just wont take and returns to login page. I tested the same without proxy and that just works fine.

Did you try the guide for to ensure that your VM had the proper proxy settings; since it seems that the issue happens when you are behind a proxy?
https://github.com/kitematic/kitematic/wiki/Common-Issues-and-Fixes#proxy-issues

+1. It's the Kitematic.exe process which is attempting a direct TLS connection to hub.docker.com and ignoring the system proxy settings. The ability to define a proxy variable within the Kitematic GUI prior to attempting the Docker Hub connection would be much appreciated. The ability to then cascade the set variable down into the VM would be nice, but is not essential.

@fuzzball5000 Unfortunately as you see in the Wiki, it's not just in the Gui that this needs to happen but within the OS running inside the VM. Making changes to the VM within Kitematic isn't supported; vbox doesn't even give you a chance to 'inject' env vars into the VM OS

Docker for Mac/Windows do solve a lot of the proxy issues - The wiki is still your best friend if you need to run Virtualbox.


What is $model_file_name in the evalution step

Hello
Can you please tell me what will be the $model_file_name in the evaluation string:
From /deep-regex-model/, run bash eval_single.sh $data_directory $model_file_name
Thanks
Mahbubur Rahman

Mahbubur Rahma
After running train_single.sh, it should generate a hdf5 file. This file should be the $model_file_name


fixes deploy goal for maven canary release

With respect to removal of content repository issue
https://github.com/openshiftio/openshift.io/issues/3895
maven canary release target has changed from deploy to install
which is breaking other workflows in the fabric8 CD.
This patch fixes the issue by reverting maven target to deploy.
Fixes https://github.com/openshiftio/openshift.io/issues/4153

@kishansagathiya ^ ^


Is it shelley-ready?

Is this project Shelley-ready?

This project depends on https://github.com/input-output-hk/cardano-db-sync and Shelley-specific features are still in-progress for this codebase. Once the db-sync codebase supports Shelley-specific features, Cardano-GraphQL will get support for these also.


Compatibility with non-arc projects forced inclusion

This patch helps avoiding a compilation problem in non-arc projects that force include the library with -fobjc-arc compilation flag for files.
The typeof(self) sentence is avoided, so this patch fixes that compilation problem from now on.

Coverage increased (+0.08%) to 56.01% when pulling 9034b6114cd6b5a2bf5a955886980a02c20570ec on development_nonARC into 172e0c4ea71f98e8bbe9301e341d6240afe65f21 on development.


Use atomic.Bool instead of abool

This is in the Go standard library now, so no need to pull in an external library.

Sorry, Fyne is in the process of moving from 1.14 to 1.17 minimum - we can't up to 1.19 for a while.

You can use the atomic API that operates on pointers to uint32 or int32 and just set to one or zero in the meantime. It is what we are using in Fyne so it would both get rid of the dependency but also be more consistent.

It looks like I fixed this with https://github.com/fyne-io/systray/pull/71 last week. I'm so sorry @dkess. I forgot that you had this open :/


Handle partially exposed reflection service in gRPC CLI

In some rare cases, a reflection service may work partially (e.g. only the ListService interface works). This PR enables gRPC CLI to work under such situations if proto files are provided locally.

Test failures seem irrelevant. Only grpc_tool_test is affected.


Improve About Us Text

The About Us text needs to be improved. It is currently a wall of text, hard to parse. More headings, bullet points, paragraphs, pictures etc. are required to make it beautiful.
When the text is finished, the following things have to be done:

[ ] Export text from notion as Markdown
[ ] Convert Markdown to HTML
[ ] Replace the HTML in labshare-client/src/views/UeberUns.vue

Text got overhauled by the communication team and is now shorter and without a separate header.


Allow multiple push with different state within the same path

What problem is this solving
Currently, Vue Router prevents pushing the same path multiple times, even if the state differs. This restriction limits the ability to manage state changes effectively within the same route. I propose an enhancement to allow multiple pushes to the same path if the state is different.
me.
Benefits

Enhanced state management within the same route.
Improved user experience by enabling dynamic updates without altering the URL.
Greater flexibility for developers to manage state-specific rendering.

Providing this feature will align Vue Router with modern state management practices and enhance its capabilities in dynamic applications.
Thank you for considering this enhancement. I look forward to your feedback and any further discussion on this proposal.
Proposed solution
Implement a check within the push method to determine if the state has changed. If the state is different, allow the push to proceed even if the path is the same. (maybe check state change in isSameRouteLocation)
Describe alternatives you've considered
As a temporary workaround, we can append a query parameter to the path, but this approach clutters the URL, and there are times when changing URL is not ideal.

Currently, you need to add the force: true option to router.push() (or preferable router.replace() for this to work)


Process examples (math and comparison)

I am currently writing tests for the simple processes using the given examples. I stumbled upon some minor errors within the documentation (perhaps due to copying it from other process examples). My suggested corrections are given below (I aimed for correcting the result, not the input parameters):

min:

min(data= [1,0,3,2]) => 0
min(data = [5,2.5,null,-0.7]) => -0.7
min(data = [1,0,3,null,2], ignore_nodata = false) => null
min(data = []) => null

mod: example mod(x = 27, y = 5) => 2 repeated two times
arccos:

arccos(x = 0) => pi/2

arcosh:

arccos(x = 0) => null/NaN

eq:

eq(x = "2018-01-01T12:00:00Z", y = "2018-01-01T12:00:00") => true
eq(x = "2018-01-01T00:00:00Z", y = "2018-01-01T01:00:00+01:00") => true (T instead of Z)

neq:

neq(x = "2018-01-01T12:00:00Z", y = "2018-01-01T12:00:00") => false
neq(x = "2018-01-01T00:00:00Z", y = "2018-01-01T01:00:00+01:00") => false (T instead of Z)

between:

between(x = -0.5, min = 0, max = -1) => false (min and max probably interchanged)
between(x = "00:00:01+01:00", min = "00:00:00Z", max = "00:00:00+01:00") => false (e.g. for true return value: between(x="00:00:01-01:00", min="00:00:00Z", max="02:00:02+01:00")
between(x = "2018-12-31T17:22:45Z", min = "2018-01-01", max = "2018-12-31") => false

min - Fixed, was probably copied from extrema.
mod - Removed
arccos - Changed to arccos(x = 1) => 0; I can't easily provide exact results pi/2
arccosh - Changed to arccosh(x = 1) => 0; I can't easily encode NaN in JSON
eq/neq

Fixed the T/Z issue.
eq(x = "2018-01-01T12:00:00Z", y = "2018-01-01T12:00:00") => true - Not fixed, the latter is not a valid date time and therefore will be treated as a string. Therefore they are not equal. Same applies for the corresponding example in neq. I added a short description explaining the example.
eq(x = "2018-01-01T00:00:00Z", y = "2018-01-01T01:00:00+01:00") => true - Not fixed, 01:00 in the +1 timezone is equal to 00:00 in UTC. Same applies for the corresponding example in neq. I added a short description explaining the example. You can check examples with https://www.epochconverter.com/ and compare the unix timestamps.

between

Fixed the first example.
Second example: Fixed by making the example even more evil. ;-) Please re-check the new examples.
Changed the example to use exlude_max, please re-check the new examples.

Thanks a lot, that happens if you work through 100+ processes all day long for weeks, but some examples really test edge cases that people don't think about usually. ;-)

Thanks a lot for your effort, @m-mohr! :-)  I can imagine how cumbersome it is to have an overview over so many processes and to manage everything... The examples are nice to be directly used as tests. I will do my best to provide some useful input, while I implement the processes. Some comments:

arccos and arcosh: good to know, I have adapted my tests, too.
eq:

Okay, now I understand. It seems I was not restrictive enough in parsing the datetime string (I will try to find a solution to exactly follow the RFC3339 convention)
As far as I remember everything was right before, there was only the a Z instead of a T. But anyway, it is good to have a description.

between:

Second example: haha great, its fine. ;-)
Third example: But this would be anyway false, wouldn't it? Do the min and max dates then equate to "2018-01-01T00:00:00Z" and "2018-12-31T00:00:00Z"?
I have included the exclude_max parameter, all tests/examples work.

Inspiration for the RFC3339 regexp: https://gist.github.com/marcelotmelo/b67f58a08bee6c2468f8
Regarding dates: 2018-01-01 is basically describing an interval, i.e. the whole day, so 2018-01-01T00:00:00Z until 2018-01-01T23:59:59Z (inclusive). That's why the last example returns false and the other one true.

Great, thanks!


Add onTapOutside functionality to unfocus or close DropdownSearch

Is your feature request related to a problem? Please describe.
When using a DropdownSearch widget, it's frustrating that if a user taps outside of the dropdown, it doesn't automatically close or unfocus. This can lead to an unintentional open dropdown if the user tries to interact with other parts of the screen.
Describe the solution you'd like
I would like to add a feature where, upon tapping outside of the DropdownSearch widget, it will automatically unfocus or close. This will improve the user experience by ensuring that the dropdown only remains open when needed.
Describe alternatives you've considered
An alternative could be to implement a manual close button inside the dropdown, but that requires additional user interaction. Tapping outside to close feels more intuitive.
Additional context
This feature could be particularly useful when the dropdown contains a large list of items, and the user may want to quickly close it to focus on other UI elements. Additionally, providing a way to close the dropdown by tapping outside would help avoid cluttering the screen with extra UI elements.

This behavior exists already, except Bottomsheet mode.

no updates.


CPUParticles rendering bug when used together with a delay

Godot version:

Godot 3.1.1 Stable
GLES 2 using CPU Particles
OS/device including version:

Linux Mint 18.3 Sylvia 64-bit
GPU: GTX 1050ti
Windows 8.1
GPU: GTX 1060
Issue description:

When instantiating a scene with a simple particle effect in conjunction with a SceneTreeTimer yield(get_tree().create_timer(1), "timeout") the particles starts to render completely wrong, they seem to stretch insanely large, skew, getting weird colors and so on.
Steps to reproduce:
Run the included project and try two things.
I setup two inputs left arrow and right arrow
left arrow will just run the function spawning and later removing some particles once.
right arrow will run a for loop that runs the same function 100 times, with a 0.1 second delay.
Try and spam the left arrow as much as you can! Nothing weird happens, you can spawn particles as fast as you can click, and it looks fine.
Now try and press the right arrow just once and let the function run and spawn particles, and a big WARNING here if you are sensitive to flashing screens, the particles will go crazy.

The picture is from an earlier version of the reproduction project, but the result is the same.
Minimal reproduction project:

ParticleRendererBug.tar.gz
EDIT
It could be somewhat related to #29952 but not really the same visual glitch

I tried using a regular timer instead of the SceneTreeTimer, but the same graphical glitch happens.
I will update the title

Definitely seems to be an issue with CPU Particles. I tried CPU and GPU particles in GLES3 too, and CPU Particles still has the visual glitches while gpu particles works just fine.

Just tested on master (708092f), I don't get the visual glitches  on that commit, but performance is waaaay worse. The reproduction project doesn't lag at all for me on 3.1.1 but on master it does.
So this issue seem to have been fixed, but if someone could point me in the direction of which commit might have fixed the visual glitches I would happily try to cherry pick that and test if it also did something to the performance or if that is caused by something else.

CC @clayjohn

I think it is related to https://github.com/godotengine/godot/commit/24b7f088927e17d80e1e21573b16bee8d3d5d50b
Which in the 3.1 branch was reverted before release https://github.com/godotengine/godot/commit/4aa7760c74075b558d3c530d21e275183b9ca1e7#diff-531cda3564322c1a2ce4d0a3b33f5852

Which in the 3.1 branch was reverted before release 4aa7760#diff-531cda3564322c1a2ce4d0a3b33f5852

Note that it was released in 3.1-stable, and reverted before 3.1.1-stable.

@Keetz Somehow I missed your comment! Sorry about that. I am looking into this again. I am not seeing the same slowdown on my device that you are getting. However, the fact that there is a slowdown is no surprise now that I am looking into 24b7f08. What 24b7f08 does is set internal_process whenever emitting is true, and whenever internal process is called, it requests a redraw. This is likely responsible for the performance degradation.

@Keetz Just made a PR that should help. I wasnt able to replicate the performance loss you experienced. For me the drop was only about 20 FPS. The PR definitely makes up that difference on my computer. Please test on your system and let me know how it goes.
3.1.1
~200 FPS
Master before
~180 FPS
This PR
~210 FPS

@clayjohn I see the exact same drop as on the commit I tested on master before.
Checked out your pull request and this is the result:
The project runs ~2300 fps for me on idle.
Pressing right arrow and starting the spawning drops the fps to ~68
3.1.1-stable + cb4d145:
The project runs ~2300 fps for me on idle.
Pressing right arrow and starting the spawning drops the fps to ~68
Also just cherry picking cb4d145 of course doesn't fix the glitches, I just wanted to test the performance.

@Keetz This gets more and more confusing. Now testing on my low-end laptop to see what difference is made. I get the same performance between master and 3.1.1 stable.

3.1.1-stable + cb4d145:
The project runs ~2300 fps for me on idle.
Pressing right arrow and starting the spawning drops the fps to ~68

There is no reason that cb4d145 should reduce performance on your device. We may need to look at alternative causes of the performance drop.
For starters, how are you measuring FPS? I am using the monitor in Godot's built in debugger, are you using an external tool?
Second, try building from master with optimizations enabled, maybe the release build has some optimizations enabled that your build doesn't and that is making up the difference. I find it very odd that even 3.1.1-stable + cb4d145 showed the exact same drop as master if the drop is actually caused by 24b7f08.

@clayjohn i usually just build with "platform=x11 bits=64" so that could definietly be why. What should i be building with for more accurate results?
I use the monitor in Godot too, so no difference there.

Aha! That may just be it. scons compiles a debug version with optimizations disabled by default in order to increase compilation speed. To use optimizations use the option target=release_debug.

Perfect, sorry for that 😄 I will compile some new versions and test, first thing tomorrow!

Great! Let me know the results!

Or simpler, build 3.1.1-stable with the same command as you build from master, to have the same build conditions.
Otherwise to have the same conditions as the official release builds you also need to enable LTO, build on an old Ubuntu but with a recent GCC, etc., so there are various factors which can have an impact on the final performance (though the major factor should still be the target argument, so the tests should still be valid, but possibly with some performance difference still).

@clayjohn
Everything build with "scons platform=x11 bits=64 target=release_debug"
3.1.1-stable:
Idle ~2300 fps
Running ~335 fps
3.1.1-stable + cb4d145:
Idle ~2300 fps
Running ~335 fps
master a967ece:
Idle ~2300 fps
Running ~315 fps
#30905:
Idle ~2300 fps
Running ~315 fps
Sorry for the time wasted here, I didn't think about the fact that I was running the official stable version vs. my own compiled versions without optimizations.

No problem! Now that the issue of frame rate is settled I consider this issue closed. :)


[Bug] SW_TRACE_IGNORE_PATH not work

Search before asking

[X] I had searched in the issues and found no similar issues.

Apache SkyWalking Component
Python Agent (apache/skywalking-python)
What happened
export SW_AGENT_INSTANCE=<IP_ADDRESS>
export SW_TRACE_IGNORE_PATH=/nacos/v1/ns/instance/beat,/actuator/prometheus
the config not work
What you expected to happen
I want to ignore some endpoint, but the config can not work.
How to reproduce
export SW_AGENT_INSTANCE=<IP_ADDRESS>
export SW_TRACE_IGNORE_PATH=/nacos/v1/ns/instance/beat,/actuator/prometheus
Anything else
No response
Are you willing to submit PR?

[X] Yes I am willing to submit a PR!

Code of Conduct

[X] I agree to follow this project's Code of Conduct

Assigned to you.

export SW_AGENT_INSTANCE=<IP_ADDRESS>
export SW_TRACE_IGNORE_PATH=/nacos/v1/ns/instance/beat,/actuator/prometheus

@katelei6 are you sure this is Python agent? from the 2 paths they looks like Java stack, at least /actuator/prometheus looks like Spring Actuator endpoint:

I see the ignore path is write to env, but it not work! @kezhenxu94

I try it again, in ~/.bashrc to config, the env is right, in /etc/profile to config, the env can not use?@kezhenxu94

I think your question is a little out of the project boundary. You could easily verify whether a system variable is accessible in a python program. We don't care and control where you set, it is OS's responsibility.

I think your question is a little out of the project boundary. You could easily verify whether a system variable is accessible in a python program. We don't care and control where you set, it is OS's responsibility.

The configuration on the official website does not take effect

Set through the system environment variable,you need to add skywalking.trace.ignore_path to the system variables, the value is the path that you need to ignore, multiple paths should be separated by ,
Copy/agent/optional-plugins/apm-trace-ignore-plugin/apm-trace-ignore-plugin.config to /agent/config/ dir, and add rules to filter traces
trace.ignore_path=/your/path/1/**,/your/path/2/**


Some Oneliner python programme

I would like to contribute some online python programs. It would be great if you mark for hacktoberfest.
Kindly look into it @Anushka-codergirl

Sorry! This repo isn't created for Hacktoberfest. If you want to contribute, please check [@Anushka-codergirl/Java]-Programs(https://github.com/Anushka-codergirl/Java-Programs).


A option to disable font anti-aliasing?

Anti-aliased fonts are fantastic, 99% of the time. But for some applications, generally games, unaliased fonts can preferred for aesthetic reasons. Do you think it would be possible to have an option to turn the font antialiasing off?

TTF font has (usually) vector font.
For every pixel, rusttype calculates "coverage", which is percentage of area covered by glyphs (described by vector format).
So rusttype does not "anti-alias" for raster bitmap, but does "rasterize" for vector glyph images.
I think you had better use bitmap font directly, because it doesn't need to be rasterized.
You can use rusttype to get binarized fonts by rounding the coverage value given by PositionedGlyph::draw, but it may cause readability issue.
(Pixel coverages of arrow lines may be very low and can be rounded to zero!)
I don't know how to do this easy with glyph cache...

@expenses this is doable without modifying RustType. As @lo48576 describes, you can round the coverage value given by draw. For use with the glyph cache feature, you can simply do a similar rounding conversion within the closure passed to cache_queued. Be aware though that many fonts are not designed with binary aliasing in mind, and may end up looking pretty bad.

@ids1024 @dylanede Thank you for the advice! However, rounding the coverage value doesn't quite get the result I was looking for. Here is the font with anti-aliasing on, off and what I'd ideally like:

Is this something that could be fixed with kerning?

@expenses Do you mind posting a comparison with the glyph positions rounded?

@dylanede Sure!

Font is TinyUnicode by the way.

Since draw gives you the alpha, and using the gpu_cache you can define rounding in a shader, I guess rusttype users should have what they need to handle this issue. Can we close?


Nothing happens on iOS 10.3 on PickPhotoAsync or TakePhotoAsync

Bug
Version Number of Plugin: 2.6.2
Device Tested On: iPhone SE 10.3
Simulator Tested On: iPhone SE 10.3, iPhone 6 10.3
Expected Behavior
Show image picker or camera
Actual Behavior
Nothing shows.. also no exception thrown..
Untill I try to do it for the second time.. then an Exception is shown (null Exception)
Steps to reproduce the Behavior
Code for TakePhotoAsyn:
var file = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
                    {
                        Name = System.Guid.NewGuid().ToString("D") + ".jpg",
                        SaveToAlbum = true,
                        AllowCropping = true,
                        PhotoSize = Plugin.Media.Abstractions.PhotoSize.Medium,
                        CompressionQuality =70
                    });

                    if (file == null)
                    {
                        UserDialogs.Instance.Toast(AppResources.dialog_error_save_image);
                        return;
                    }

Code for PickPhotoAsync:
                   var file = await CrossMedia.Current.PickPhotoAsync(new Plugin.Media.Abstractions.PickMediaOptions
                    {
                        CompressionQuality=70,
                        PhotoSize = Plugin.Media.Abstractions.PhotoSize.Medium,
                    });
                    if (file == null)
                        return;
                    else
                        await Navigation.PushAsync(new SendImagePage(file, selectedContainer));

It works perfectly on Android!
I've also added the rows to info.plist file:
<key>NSCameraUsageDescription</key>
	<string>This app needs access to the camera to take photos.</string>
	<key>NSPhotoLibraryUsageDescription</key>
	<string>This app needs access to photos.</string>

I got the same problem after i updated xamarin.forms.

Thanks @patrickfrank86 that works

I am still having this issue with the newest version of xamarin forms. Was there ever a resolution to this?

Did you wrap it in Device.BeginInvokeOnMainThread?

Yes that does not seem to help but based on this thread https://github.com/jamesmontemagno/MediaPlugin/issues/186 it suggests to update to the latest beta build. Trying that now. Though I remember problems with the latest in android so. hahaha

can you post your code

So I updated now it is crashing with this instead:
Object reference not set to an instance of an object   at Plugin.Media.MediaPickerDelegate+<GetPictureMediaFile>d__25.MoveNext () [0x000e5] in <99e18339d93b4235a05ea0b8f306d541>:0
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in /Library/Frameworks/Xamarin.iOS.framework/Versions/<IP_ADDRESS>/src/mono/mcs/class/referencesource/mscorlib/system/runtime/exceptionservices/exceptionservicescommon.cs:143
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x00047] in /Library/Frameworks/Xamarin.iOS.framework/Versions/<IP_ADDRESS>/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:187
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x0002e] in /Library/Frameworks/Xamarin.iOS.framework/Versions/<IP_ADDRESS>/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:156
at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x0000b] in /Library/Frameworks/Xamarin.iOS.framework/Versions/<IP_ADDRESS>/src/mono/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/TaskAwaiter.cs:128
at System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () [0x00000] in <54e129cad3ee4c61a6b46c3680ddc69a>:0
at Plugin.Media.MediaPickerDelegate+<FinishedPickingMedia>d__9.MoveNext () [0x000ef] in <99e18339d93b4235a05ea0b8f306d541>:0

Normally though it just says nothing so.

that is probably #250

This is version <IP_ADDRESS> of the media plugin and xamarin forms <IP_ADDRESS>

I have the same problem what is the posible workaround? reverder xamarin.form or use Device.BeginInvokeOnMainThread? Why this thread is closed D:

Closed as there are multiple work around and already fixed in: Xam.Plugin.Media <IP_ADDRESS>-beta +


Support SwiftUI?

Does this repo has a plan that support SwiftUI?

How to use it in SwiftUI

There's no plan for this repo to support SwiftUI, and will likely be deprecated once UIKit is no longer relevant.


Handle problem with continuously increasing cache

It is possible for individual files that are being cache to become irrelevant, eg. new modules added old ones deleted, would result in obsolete files that could be cleaned up in order to reduce cache size as well as the  bandwidth to/from AWS.
It would be too cumbersome and complicated to keep track of individual files, but considering that we are dealing with cache, it is acceptable to loose the whole thing every so often. There are two possible solutions I have for this problem. Both are not mutually exclusive and could be implemented side by side:

First one is lifetime restriction. It'd be possible to set a period of time on the cache file itself (which would NOT be updated during cache replacement). During that period cache file would be considered valid, but once it reached its lifetime expectancy it would be removed instead of restored.
Second one is addition of --max-size flag that would prevent cache-s3 to restore or save cache that hits that limit.

Both solutions would effectively clear out cache on certain conditions, thus alleviating the problem of continuously increasing cache.

@lehins If you are using S3 you can set a lifetime policy to expire objects contents after N days.
This AFAIK does not factor in use. Still I'm okay with loosing my cache after in my case 14 days as usually no cached object ever lives that long. And occasionally re-building things is also not that bad to prove it can still build.
Ideally cache-s3 would be able to "touch" in-use objects to prevents them from being evicted.

@mbj, I totally agree with expiration policy, that is in fact the suggested way, as it says in the readme:

The bucket should also be configured to expire older files, this way cache stored for ephemeral branches will be discarded, hence avoiding unnecessary storage costs.

That doesn't solve the problem for repositories that are being updated often.
I don't know if "touching" objects to prevent from being expired on S3 is in the scope of this tool. Imagine you don't push anything two your repo for 15 days. Where is cache-s3 running during that period so it can "touch" the files? There was no CI builds during those two weeks, so your cache on S3 with 14 day policy is doomed to expire, unless you "touch" files manually.

I don't know if "touching" objects to prevent from being expired on S3 is in the scope of this tool. Imagine you don't push anything two your repo for 15 days. Where is cache-s3 running during that period so it can "touch" the files? There was no CI builds during those two weeks, so your cache on S3 with 14 day policy is doomed to expire, unless you "touch" files manually.

thats totally valid. I just wanted to let you know about the option (As I did not see it in the readme originally). It resolved some of the pain for us already.
OT: I'd argue that a build that did not run due the lifetime of a chache should be from scratch anyway, but this may be different in your case.
I totally support additions to this tool. My post was only about letting you know about the expiry I sadly independently discovered.

@mbj Thank you for your suggestion. I am always open to new ideas.

Those added features also have short description and examples in README/Clearing section.
cc @domenkozar , new version is released v0.1.4


⚠ Bofrost.de has degraded performance

In 1bf9cdd, Bofrost.de (https://www.bofrost.de) experienced degraded performance:

HTTP code: 200
Response time: 1384 ms

Resolved: Bofrost.de performance has improved in 328717c after 1 hour, 11 minutes.


In Dark mode, text is not bright enough

@aditya-bhaumik As a beginner, I've noticed that the text in dark mode is not bright enough compared to the 'Apply Now' button, which makes it hard to read. The text lacks sufficient contrast, making it difficult for users to comfortably engage with the content. Could I please be assigned to work on improving this issue?

could you please also add gssoc 24 ext,hacktober fest and level tags

@sriharsha0x1 sure go ahead

Make sure to join the discord server for further communication https://discord.gg/FZxBRpTEeH
Star the repo.
Complete the task in next 2 days and make sure to mention the issue #

issue #129

@sriharsha0x1 in the pull request :disappointed:


Texture transforms fail to export with UV map modes and empty material slots

Describe the bug
Texture transforms fail to export if a material uses a uv_map node and there is an object with an empty material slot.
To Reproduce
Steps to reproduce the behavior:

Add and object with a material that has a texture with that has a uv_map node as vector input
Add a second object that has an empty material slot
Export the scene
See error

Expected behavior
The scene should export correctly even if an object's has an empty material slot.
Screenshots

.blend file/ .gltf
issue.blend.zip
Version

OS: MacOS
Blender Version 3.4.1

Additional context
The culprit seems to be:
https://github.com/KhronosGroup/glTF-Blender-IO/blob/03b62dc63139af85c9004fa3c305dd8e91d650ef/addons/io_scene_gltf2/blender/exp/gltf2_blender_gather_texture_info.py#L183
We are assuming that there is always a material in the slot.

Confirmed


Can't change SceneReference to None in inspector

Thanks for the great utility!
The old setting remains when I try to select None, and the following errors appear:

Update: I managed to get rid of the errors based on this thread:
https://answers.unity.com/questions/533541/unsupported-type-error-in-custom-editor-script.html
But I still can't set to None...

Update: I have found that my problem is due to a limitation in the code:
m_SceneAsset is assumed uninitialized when it == null, so when set as such in the editor it just reloads the scene that m_ScenePath points to. I have made a modification to address this and will test it out for a while before submitting a PR.

That's a good find. You are right about the reason. The m_SceneAsset becomes null, which triggers OnBeforeSerialize() that tries to restore it from the m_ScenePath. I've committed a fix - if the property became null just now, clear the m_ScenePath as well. Test it out if it works and let me know to close the issue.
I'm not sure about the initial errors you were getting. I can't reproduce it. Can you give me more info on this? What Unity version are you using?

I think the errors are basically unrelated to this utility, and are detailed thoroughly in the post I linked above.
As far as I can tell the changes are working well! I think you can probably close the issue, thanks for your help!


DEV: use group ids to allow assign on groups [Undo Revert]

This PR reverts the revert of #38.

@eviltrout  I did some more changes to this so we can the plugin works alongside tests-passed/master/beta in all the cases. Can you take a look at my last commit?


Update Survival Regression.rst

extra 'model' in the sentence "The idea behind Cox's proportional hazard model model is that the...over time."

thanks @ckarjadi!


Disable mmtfp custom op

The mmtfp custom op was the first prototype of a custom operation, providing a code generated, fused, mixed precision operation. In graph mode, however, IREE is more than capable of fusing such simple sequences. In eager mode, it was just adding overhead and uncertainty.
Commenting out for now: I have some evidence that the tooling for GPU interop is having issues and this op was implicated in producing bad results. Until the PyTorch bug is fixed providing UUIDs for devices, there is just too much uncertainty to leave this enabled by default on GPUs.

https://github.com/nod-ai/sharktank/pull/45


Cleanup. Remove unnecessary use of a memory arena when logging.

Not very clear to me why it's being allocated into the arena, It is not necessary anyway, the data is already allocated.

Cherry-picked to v9.2.x


How to import directly in html?

I'm not able to manually import this script with <script type="module" src="">. Is it planned to add this feat in the near future?

Sorry, this is a functionality I don't provide yet.

Thank you for the reply. I ended up loading it via npm, but it would be cool to have it like an option.
All the best


Add revDNS to access log

Would be nice to see DNS entries instead of IP addresses when --verbose is enabled.

Hello,
We don't plan to manage reverse DNS, whoami is a simple tool that focuses on simple network information.


Member not defined

MYCLASS.Type does not have a member named create appears when trying to create in Xcode 6.3.2

From the example project

The issue appears not to occur when manually integrating with the .swift file, but the framework does have the issue

Yes, the .framework isn't copied into the example. I'll fix that right now.


Add discord integration

Specifically want to add the bot to have player joined + player left notifications, which it looks like you can do. See https://github.com/Reimnop/Discord4Fabric/blob/main/USAGE.md#player-joinleave

can you add an example config file to do the discord join/leave msg and add it to /config plz :)
the api they use looks super useful: https://placeholders.pb4.eu/

Yeah that sounds like a good idea. I wanted to add an @ notification in the text as well so we can have the people get notified if they want

Hmm I don't seem to be able to get it to generate one when I run a local instance. Is there a special way to run it?


Apache Flex Installer link broken.

Just a heads up, the Apache Flex installer (4.13.0) fails with the following error:
Downloading 2.2.zip from: https://github.com/swfobject/swfobject/archive
[get] [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032" errorID=2032]

Hmm, the release hasn't been removed or changed... could that be a transient error?
The releases page shows that url:
https://github.com/swfobject/swfobject/releases
Which works:
https://github.com/swfobject/swfobject/archive/2.2.zip

My apologies, I may have jumped the gun. I naturally assumed that when the installer said it failed
"Downloading 2.2.zip from: https://github.com/swfobject/swfobject/archive[get] IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032" errorID=2032"
that it was telling me the truth. Following the path to the repo and seeing
"This GitHub edition of SWFObject is our 2.3 beta. The current release – 2.2 – is still available for download at code.google.com/p/swfobject/"
seemingly validated the problem.
Apparently the Flex installer is either:a) not picking up the alias from the config file, in which case it may be trying to download from the url for 2.3 and the installer is telling the truth, orb) looking  in the right place, failing to download (??) and reporting the wrong error...
Hmmm...  I can download it np....
wait...   if I download from http://swfobject.googlecode.com/files/swfobject_2_2.zip  I get "swfobject_2_2.zip"from https://github.com/swfobject/swfobject/archive/2.2.zip I get "swfobject-2_2.zip"
That could be a problem.....
Date: Thu, 8 Jan 2015 11:51:06 -0800
From<EMAIL_ADDRESS>To<EMAIL_ADDRESS>CC<EMAIL_ADDRESS>Subject: Re: [swfobject] Apache Flex Installer link broken. (#35)
Hmm, the release hasn't been removed or changed... could that be a transient error?
The releases page shows that url:
https://github.com/swfobject/swfobject/releases
Which works:
https://github.com/swfobject/swfobject/archive/2.2.zip
—
Reply to this email directly or view it on GitHub.
	 	   		  =

This appears to be broken again ( May 20, 2015 ) and I will be opening a new issue both here and on the flex sdk installer tracker as well.

The current issue appears to be with the MD5 of the downloaded zip file.

What is the link to the issue on the flex sdk installer tracker?

https://issues.apache.org/jira/browse/FLEX-34851

The Flex SDK installer has been updated to reflect the new MD5, installation should work now :-)

Hi, still not working for me :
Installer version 3.1.0 downloaded today.
Thx

Mory,
which version of the Flex SDK were you trying to install.  I suspect the
new md5 hasn't been updated in all the install xml's
On Fri, May 22, 2015 at 6:44 AM, Mory Doukouré<EMAIL_ADDRESS>wrote:

Hi, still not working for me :
Installer version 3.1.0 downloaded today.
Thx
—
Reply to this email directly or view it on GitHub
https://github.com/swfobject/swfobject/issues/35#issuecomment-104650333.

Hi, thx for the fast reply.
Indeed, I'm trying to install the last one 4.14.1
Regards.

Mory,
try it again.  When I install it appears to work fine, but there are a lot
of different sdks and combinations, which version of air are you trying to
install?
On Fri, May 22, 2015 at 8:06 AM, Mory Doukouré<EMAIL_ADDRESS>wrote:

Hi, thx for the fast reply.
Indeed, I'm trying to install the last one 4.14.1
Regards.
—
Reply to this email directly or view it on GitHub
https://github.com/swfobject/swfobject/issues/35#issuecomment-104668537.

I'm trying to install Flex 4.14.1 (AIR 3.9)

Mory,
I test on my machine (mac os x 10.10 ) and was not able to reproduce.  You
may need to go to the issue on the Apache Flex site and either open a new
issue or update this one:
https://issues.apache.org/jira/browse/FLEX-34851
I would include a copy of the installer.log and installer.xml files for the
people on the Apache Flex team to look at.  They are usually really quick
to respond.
On Fri, May 22, 2015 at 9:59 AM, doroshko<EMAIL_ADDRESS>wrote:

I'm trying to install Flex 4.14.1 (AIR 3.9)
—
Reply to this email directly or view it on GitHub
https://github.com/swfobject/swfobject/issues/35#issuecomment-104698007.

Hi,
I finally try one more time this morning and it finally works.
Whatever, thanks a lot for your help.
Regards.

Installer version 3.2.0 (mac)
Using Locale: en_GB
Fetched the SDK download mirror URL from the CGI.
SDK version Apache Flex SDK 4.14.1
AIR version 16.0
Flash Player version 16.0
Creating Apache Flex home
Creating temporary directory
Downloading Apache Flex SDK from: http://mirror.catn.com/pub/apache/flex/4.14.1/binaries/apache-flex-sdk-4.14.1-bin.tar.gz
Verifying Apache Flex SDK MD5 Signature
The Apache Flex SDK MD5 Signature of the downloaded files matches the reference. The file is valid.
Unzipping: /Users/margareta.sandor/src/ApacheFlex/temp/apache-flex-sdk-4.14.1-bin.tar.gz
Finished unzipping: /Users/margareta.sandor/src/ApacheFlex/temp/apache-flex-sdk-4.14.1-bin.tar.gz
Downloading Adobe AIR Runtime Kit for Mac from: http://airdownload.adobe.com/air/mac/download/16.0//AdobeAIRSDK.tbz2
Validating download: /Users/margareta.sandor/src/ApacheFlex/in/AdobeAIRSDK.tbz2
Finished untaring: /Users/margareta.sandor/src/ApacheFlex/in/airsdk/AdobeAIRSDK.tar
Copying files from /Users/margareta.sandor/src/ApacheFlex/in/airsdk/frameworks/libs/air to /Users/margareta.sandor/src/ApacheFlex/frameworks/libs
Copying files from /Users/margareta.sandor/src/ApacheFlex/in/airsdk/frameworks/projects/air to /Users/margareta.sandor/src/ApacheFlex/frameworks/projects
Copying files from /Users/margareta.sandor/src/ApacheFlex/in/airsdk/include to /Users/margareta.sandor/src/ApacheFlex
Copying files from /Users/margareta.sandor/src/ApacheFlex/in/airsdk/lib/android to /Users/margareta.sandor/src/ApacheFlex/lib
Copying files from /Users/margareta.sandor/src/ApacheFlex/in/airsdk/lib/aot to /Users/margareta.sandor/src/ApacheFlex/lib
Copying files from /Users/margareta.sandor/src/ApacheFlex/in/airsdk/lib/nai to /Users/margareta.sandor/src/ApacheFlex/lib
Copying files from /Users/margareta.sandor/src/ApacheFlex/in/airsdk/runtimes to /Users/margareta.sandor/src/ApacheFlex
Copying files from /Users/margareta.sandor/src/ApacheFlex/in/airsdk/samples/badge to /Users/margareta.sandor/src/ApacheFlex/samples
Copying files from /Users/margareta.sandor/src/ApacheFlex/in/airsdk/samples/icons to /Users/margareta.sandor/src/ApacheFlex/samples
Copying files from /Users/margareta.sandor/src/ApacheFlex/in/airsdk/templates/air to /Users/margareta.sandor/src/ApacheFlex/templates
Copying files from /Users/margareta.sandor/src/ApacheFlex/in/airsdk/templates/extensions to /Users/margareta.sandor/src/ApacheFlex/templates
Copying files from /Users/margareta.sandor/src/ApacheFlex/in/airsdk/templates/sdk to /Users/margareta.sandor/src/ApacheFlex/templates
Installing Adobe Flash Player playerglobal.swc from: http://download.macromedia.com/get/flashplayer/updaters/16//playerglobal16_0.swc
Validating download: /Users/margareta.sandor/src/ApacheFlex/frameworks/libs/player/16.0/playerglobal.swc
Downloading 2.2.zip from: https://github.com/swfobject/swfobject/archive
Validating download: /Users/margareta.sandor/src/ApacheFlex/in/swfobject_2_2.zip
Download complete
Downloading OSMF2_0.swc?format=raw from: http://sourceforge.net/adobe/flexsdk/code/HEAD/tree/trunk/frameworks/libs
[get] [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032" errorID=2032]

Hello,
I'm using the 3.2.0 installer and i'm still facing the same issue for the swfobject. the installer cant download it. Is there any way i can manually get flex sdk 4.14.1 with air 19.0 and other dependencies of it?
Any updates on it?
Thank you for your reply in advance.

Having the same problem trying to get 4.11.0.  Is this the only way to get these SDK's now?

SWFObject is not responsible for the Flex installer, closing as this is outside the scope of SWFObject and not something the SWFObject team controls.
Also please note SWFObject is no longer in active development.


Interpreter: Reached the unreachable (Exception) with generic class

Bug Report
Example code:
class A
  def foo
    puts "foo"
  end
end

class B(T) < A
end

a1 = B(Int32).new.as(A)
a2 = B(String).new.as(A) # It doesn't error after removing this line.
a1.as(B).foo

It works fine in compiled mode but raises error in interpreted mode.
Interpreter error:
In: B(T)#foo
Node: raise "unreachable"
Reached the unreachable (Exception)
  from /home/chao/git/personal/crystal/src/compiler/crystal/interpreter/interpreter.cr:337:7 in 'interpret'
  from /home/chao/git/personal/crystal/src/compiler/crystal/interpreter/interpreter.cr:235:13 in 'interpret'
  from /home/chao/git/personal/crystal/src/compiler/crystal/interpreter/repl.cr:100:5 in 'interpret_and_exit_on_error'
  from /home/chao/git/personal/crystal/src/gc/boehm.cr:129:5 in 'run'
  from /home/chao/git/personal/crystal/src/compiler/crystal/command.cr:51:5 in '__crystal_main'
  from /home/chao/git/personal/crystal/src/crystal/main.cr:115:5 in 'main'
  from /lib/x86_64-linux-gnu/libc.so.6 in '??'
  from /lib/x86_64-linux-gnu/libc.so.6 in '__libc_start_main'
  from /home/chao/git/personal/crystal/.build/crystal in '_start'
  from ???

crystal version:
Crystal 1.6.0-dev [c4799c628] (2022-07-21)

LLVM: 14.0.6
Default target: x86_64-pc-linux-gnu

OS: Ubuntu 22.04

Yet another compiler bug:
class A
end

class B(T) < A
end

a = B(Int32).new.as(A)
b = a.as(B)

puts a.is_a?(B(Int32)) # Correctly prints true
puts b.is_a?(B(Int32)) # Incorrectly prints false

That one is probably a duplicate of #10831

Could #10831 be split into individual failures? It seems like a general issue, but maybe if it's split into individual ones it's going to be easier to track.


Hoist imports

This is being generated for @sveltejs/kit which is invalid:
import 'svelte';
import 'vite/client';

declare module '@sveltejs/kit' {
	import type { CompileOptions } from 'svelte/types/compiler/interfaces';
	import type { PluginOptions } from '@sveltejs/vite-plugin-svelte';

It looks like it needs to be:
import 'svelte';
import 'vite/client';
import type { CompileOptions } from 'svelte/types/compiler/interfaces';
import type { PluginOptions } from '@sveltejs/vite-plugin-svelte';

declare module '@sveltejs/kit' {

This is blocking us from using the latest dts-buddy in SvelteKit, which I believe is in turn blocking us from using the latest site-kit.

There's one other issue as well, which is that it can't find our internal modules. I don't understand why, so hopefully someone more versed in TypeScript will understand how to fix that one. Anyway, it's easy to see by simply opening up types/index.d.ts after generating the SvelteKit types


Enable possibility to user control $CGIBASHOPTS_DIR

The default directory /tmp for $CGIBASHOPTS_DIR is often on a different partition than the root filesystem. So moving a file from /tmp to the root filesystem might take some time. This PR enables the possibility to control where $CGIBASHOPTS_DIR points to.

(sorry for the delay).
Nice useful suggestion.
However, I will rather have the user be able to change "/tmp" by something else rather than the whole CGIBASHOPTS_DIR, to avoid the risk of the user forgetting to add the unique part "$$". Is that OK with you?
Something like:
CGIBASHOPTS_TMP=/www/tmp
. cgibashopts

Will thus make cgibashopts use internally CGIBASHOPTS_DIR=/www/tmp/cgibashopts-files.$$
Would that be OK with you?

Implemented - differently - by the new option -d in Release v4.1.0 https://github.com/ColasNahaboo/cgibashopts/releases/tag/v4.1.0


How to trigger a message after selecting a value

Hi,
Thank you very much for your widget! It's very nice.
I'd like to trigger an HTTP request after I select a value in the widget. What's the best way to achieve it?
I thought I could do pattern-matching on the subMsg in MultiselectMsg subMsg (like here), but the Multiselect.elm module does not export the constructors for its Msg.
My solution is to compare the previous selected values with the new ones, in this branch of the update function, but is there any better option?
Here is my code if it helps: https://git.nomics.world/dbnomics/dbnomics-ui/blob/9b7f3a2bbff748618f7c49091564e381a6d01f74/src/Page/Dataset.elm#L383-426
Thanks again!

Hi @cbenz!
Sorry for the delay, I had no chance to check the code until today. It seems that the new package was published successfully:
Verifying inkuzmin/elm-multiselect 2.0.0 ...
Version number 2.0.0 verified (MAJOR change, 1.1.3 => 2.0.0)
Success!

You may like to check the documentation for the introduced type: http://package.elm-lang.org/packages/inkuzmin/elm-multiselect/2.0.0/Multiselect#OutMsg
Also, the example provided was updated to demonstrate a way to deal with external messages: https://github.com/inkuzmin/elm-multiselect/blob/3a8dc089672b716e3f7c6c3e79840acdb503d790/example/src/Main.elm#L118-L134

Thank you for your commit! I am sorry for this coordination failure, I have had to establish my plans clearer. If you don't mind making a pull request with the example file, it would be great to have it, because it could be tricky for users to figure out how to deal with the OutMsg pattern by looking at the current combined example with three widgets connected.