Command Suggestion "Sudo"

Adds the functionality to remotely execute commands as other players in the server. Useful for debug purposes, etc.
I've actually been using this for awhile now in my projects and think it would be useful for some developers using nexus admin, and even for non-developers.

The implementation is fine and appears to prevent privilege escalation. I'm concerned about log forging though. Forcibly performing a command as someone can be used maliciously to frame another admin for running commands they aren't meant to run. For example, while in logs the sudo command log will appear before (hopefully that is seen), featureflaglogs would not. A theoretical custom ban system with logging wouldn't either.

A possible solution for the issue mentioned with sudo regarding logs and featureflaglogs.
The third argument of Executor:ExecuteCommandWithOrWithoutPrefix() which is for CommandData could be passed where the name of the user running :sudo is under the key Sudo.
In ServerRegistry.lua, where logs are added into the MainLogs (line 55), fetch the CommandData from the CommandContext, and if the key Sudo has a value modify the message added to MainLogs.
For featureflag add a new key into the table saved to the FeatureFlagLogsDataStore with the value stored under Sudo in the CommandData, then account for the possible new key when displaying the logs.
I am unsure of how to use the "request changes" feature or any other feature to suggest changed to files in pull request, here is the code I wrote for the above
sudo.lua
Differences are located at the Executor:ExecuteCommandWithOrWithoutPrefix()
--[[
TheNexusAvenger
Implementation of a command.
--]]
--!strict

local IncludedCommandUtil = require(script.Parent.Parent:WaitForChild("IncludedCommandUtil"))
local Types = require(script.Parent.Parent.Parent:WaitForChild("Types"))

local Players = game:GetService("Players")

return {
    Keyword = {"sudo"},
    Category = "UsefulFunCommands",
    Description = "Force a player to run a command.",
    Arguments = {
        {
            Type = "nexusAdminPlayers",
            Name = "Players",
            Description = "Players to sudo",
        },
        {
            Type = "string",
            Name = "Command",
            Description = "Command to use",
        },
    },
    ClientLoad = function(Api : Types.NexusAdminApiClient)
        local SudoRemote = (IncludedCommandUtil:GetRemote("SudoRemote") :: RemoteEvent)

        local Player = Players.LocalPlayer

        SudoRemote.OnClientEvent:Connect(function(Command, SudoExecutorName)
            local Executor = Players:FindFirstChild(SudoExecutorName)
            if not Executor then return end
            local LocalPlayerLevel = Api.Authorization:YieldForAdminLevel(Player)
            local ExecutorLevel = Api.Authorization:YieldForAdminLevel(Executor)

            if ExecutorLevel < LocalPlayerLevel and Executor ~= Player then return end
            Api.Executor:ExecuteCommandWithOrWithoutPrefix(Command,Player,{Sudo=SudoExecutorName})
        end)
    end,
    ServerLoad = function(Api : Types.NexusAdminApiServer)
        local SudoRemote = (IncludedCommandUtil:CreateRemote("RemoteEvent","SudoRemote") :: RemoteEvent)
    end,
    ServerRun = function(CommandContext: Types.CmdrCommandContext, Players : {Player}, Command : string)
        local Util = IncludedCommandUtil.ForContext(CommandContext)
        local Api = Util:GetApi() :: Types.NexusAdminApiServer

        local SudoRemote = (Util:GetRemote("SudoRemote") :: RemoteEvent)

        local ExecutorLevel = Api.Authorization:YieldForAdminLevel(CommandContext.Executor)

        local PlayersSudoed = 0

        for _, Player in pairs(Players) do
            local PlayerLevel = Api.Authorization:YieldForAdminLevel(Player)
            if ExecutorLevel >= PlayerLevel or Player == CommandContext.Executor then
                SudoRemote:FireClient(Player,Command,CommandContext.Executor.Name)
                PlayersSudoed += 1
            end
        end

        return "Sudo'ed "..tostring(PlayersSudoed).."/"..tostring(#Players).." players."
    end
}

ServerRegistry.lua
Differences are located in the task.spawn() within the BeforeRun hook register
--[[
TheNexusAvenger

Registers commands on the server.
--]]
--!strict

local Registry = require(script.Parent.Parent:WaitForChild("Common"):WaitForChild("Registry"))
local Types = require(script.Parent.Parent:WaitForChild("Types"))

local ServerRegistry = {}
ServerRegistry.__index = ServerRegistry
setmetatable(ServerRegistry, Registry)

--[[
Creates the server registry.
--]]
function ServerRegistry.new(Cmdr: Types.Cmdr, Configuration: Types.Configuration, Authorization: Types.Authorization, Messages: Types.MessagesServer, Logs: Types.Logs, Time: Types.Time, Filter: Types.FilterServer, NexusAdminRemotes: Folder): Types.RegistryServer
    local self = Registry.new(Authorization, Configuration, Messages, Cmdr, NexusAdminRemotes) :: any
    setmetatable(self, ServerRegistry)
    self.ClientData = {}

    --Create the remote objects.
    local RegistryEvents = Instance.new("Folder")
    RegistryEvents.Name = "RegistryEvents"
    RegistryEvents.Parent = NexusAdminRemotes

    local GetRegisteredCommands = Instance.new("RemoteFunction")
    GetRegisteredCommands.Name = "GetRegisteredCommands"
    GetRegisteredCommands.Parent = RegistryEvents
    self.GetRegisteredCommands = GetRegisteredCommands

    local CommandRegistered = Instance.new("RemoteEvent")
    CommandRegistered.Name = "CommandRegistered"
    CommandRegistered.Parent = RegistryEvents
    self.CommandRegistered = CommandRegistered

    --Connect the remote objects.
    function GetRegisteredCommands.OnServerInvoke()
        return self.ClientData
    end

    --Register the BeforeRun hook for verifying admin levels and logging.
    self.Cmdr.Registry:RegisterHook("BeforeRun", function(CommandContext: Types.CmdrCommandContext): ()
        --Return if a result exists from the common function.
        local BeforeRunResult = self:PerformBeforeRun(CommandContext)
        if BeforeRunResult then
            return BeforeRunResult
        end

        --Log the command asynchronously.
        task.spawn(function()
            local CommandData = (CommandContext:GetData() :: {Sudo: string?, [any]: any}) or {Sudo = nil}
            local LogMessage = CommandContext.Executor.Name.." ["..Time:GetTimeString().."]: "..Filter:FilterString(CommandContext.RawText,CommandContext.Executor)
            if CommandData.Sudo then
                LogMessage = CommandData.Sudo.." sudo'ed - "..LogMessage
            end
            Logs:Add(LogMessage)
        end)
        return nil
    end)

    --Return the object.
    return (self :: any) :: Types.RegistryServer
end

--[[
Loads a command.
--]]
function ServerRegistry:LoadCommand(CommandData: Types.NexusAdminCommandData): ()
    Registry.LoadCommand(self :: any, CommandData)

    --Add and send the command data.
    table.insert(self.ClientData, CommandData)
    self.CommandRegistered:FireAllClients(CommandData)

    --Register the command.
    local CmdrCommandData = self:GetReplicatableCmdrData(CommandData) :: Types.NexusAdminCommandData
    CmdrCommandData.Run = self:CreateRunMethod(CommandData)
    self.Cmdr.Registry:RegisterCommandObject(CmdrCommandData)

    --Load the command.
    if (CommandData :: any).OnCommandLoad then
        warn("OnCommandLoad (used in "..CmdrCommandData.Name..") is deprecated as of V.2.0.0. All commands are loaded as of V.2.0.0, so this is no longer needed.");
        (CommandData :: any).OnCommandLoad()
    end
end

return (ServerRegistry :: any) :: Types.RegistryServer

featureflag.lua
Differences are in the table.insert within ServerRun
--[[
TheNexusAvenger

Implementation of a command.
--]]
--!strict

local IncludedCommandUtil = require(script.Parent.Parent:WaitForChild("IncludedCommandUtil"))
local Types = require(script.Parent.Parent.Parent:WaitForChild("Types"))

return {
    Keyword = {"featureflag", "feature"},
    Category = "Administrative",
    Description = "Sets the value of a feature flag.",
    Arguments = {
        {
            Type = "nexusAdminFastFlags",
            Name = "Feature",
            Description = "Feature flags to change.",
        },
        {
            Type = "boolean",
            Name = "Value",
            Description = "New value of the feature flag.",
        },
    },
    ServerRun = function(CommandContext: Types.CmdrCommandContext, FeatureFlags: {string}, Value: boolean)
        local Util = IncludedCommandUtil.ForContext(CommandContext)
        local Api = Util:GetApi()

        --Log the feature flag change.
        if Api.CommandData.FeatureFlagLogsDataStore then
            local PreviousValues = {}
            for _, FeatureFlag in FeatureFlags do
                PreviousValues[FeatureFlag] = Api.FeatureFlags:GetFeatureFlag(FeatureFlag)
            end
            task.spawn(function()
                Api.CommandData.FeatureFlagLogsDataStore:Update("FeatureFlagChangesLog", function(OldLogs)
                    OldLogs = OldLogs or {}
                    for _, FeatureFlag in FeatureFlags do
                        table.insert(OldLogs, {
                            Time = os.time(),
                            UserId = CommandContext.Executor.UserId,
                            UserName = CommandContext.Executor.Name,
                            Name = FeatureFlag,
                            PreviousValue = PreviousValues[FeatureFlag],
                            NewValue = Value,
                            Sudo = (CommandContext:GetData() :: {Sudo:string?, [any]:any} or {Sudo=nil}).Sudo
                        })
                    end
                    return OldLogs
                end)
            end)
        end

        --Change the feature flags.
        for _, FeatureFlag in FeatureFlags do
            Api.FeatureFlags:SetFeatureFlag(FeatureFlag, Value)
        end
    end,
}

featureflaglogs.lua
Differences are in the GetFeatureFlagLogsFunction.OnServerInvoke() starting from local Line
--[[
TheNexusAvenger

Implementation of a command.
--]]
--!strict

local ReplicatedStorage = game:GetService("ReplicatedStorage")

local IncludedCommandUtil = require(script.Parent.Parent:WaitForChild("IncludedCommandUtil"))
local Types = require(script.Parent.Parent.Parent:WaitForChild("Types"))

return {
    Keyword = "featureflaglogs",
    Category = "Administrative",
    Description = "Opens up a window logs of feature flag changes.",
    ServerLoad = function(Api: Types.NexusAdminApiServer)
        local NexusDataStore = require(ReplicatedStorage:WaitForChild("NexusAdminClient"):WaitForChild("NexusFeatureFlags"):WaitForChild("NexusDataStore")) :: any
        xpcall(function()
            Api.CommandData.FeatureFlagLogsDataStore = NexusDataStore:GetDataStore("NexusAdmin_Persistence", "FeatureFlagLogs")
        end, function(ErrorMessage)
            warn("Failed to get feature flag logs because "..tostring(ErrorMessage))
        end)

        local GetFeatureFlagLogsFunction = Instance.new("RemoteFunction")
        GetFeatureFlagLogsFunction.Name = "GetFeatureFlagLogs"
        GetFeatureFlagLogsFunction.Parent = Api.EventContainer

        function GetFeatureFlagLogsFunction.OnServerInvoke(Player): {string}
            if Api.Authorization:IsPlayerAuthorized(Player, Api.Configuration:GetCommandAdminLevel("Administrative", "featureflaglogs")) then
                if Api.CommandData.FeatureFlagLogsDataStore then
                    local LogEntries = Api.CommandData.FeatureFlagLogsDataStore:Get("FeatureFlagChangesLog") or {}
                    local Logs = {}
                    for i = #LogEntries, 1, -1 do
                        local Log = LogEntries[i]
                        local Line
                        if Log.Sudo then
                            Line = Api.Time:GetDateTimeString(Log.Time)..": "..Log.Sudo.." sudo'ed - "..Log.UserName.." changed "..Log.Name.." from "..tostring(Log.PreviousValue).." to "..tostring(Log.NewValue)
                        else
                            Line = Api.Time:GetDateTimeString(Log.Time)..": "..Log.UserName.." changed "..Log.Name.." from "..tostring(Log.PreviousValue).." to "..tostring(Log.NewValue)
                        end
                        table.insert(Logs, Line)
                    end
                    return Logs
                else
                    return {"Logs failed to load."}
                end
            else
                return {"Unauthorized"}
            end
        end
    end,
    ClientRun = function(CommandContext: Types.CmdrCommandContext)
        local Util = IncludedCommandUtil.ForContext(CommandContext)
        local Api = Util:GetApi()
        local ScrollingTextWindow = require(Util.ClientResources:WaitForChild("ScrollingTextWindow")) :: any

        --Display the text window.
        local FeatureFlagLogs = nil
        local Window = ScrollingTextWindow.new()
        Window.Title = "Feature Flag Logs"
        Window.GetTextLines = function(_, SearchTerm, ForceRefresh)
            --Get the logs.
            if not FeatureFlagLogs or ForceRefresh then
                FeatureFlagLogs = (Api.EventContainer:WaitForChild("GetFeatureFlagLogs") :: RemoteFunction):InvokeServer()
            end

            --Filter and return the feature flags logs.
            local FilteredLogs = {}
            for _, Message in FeatureFlagLogs do
                if string.find(string.lower(Message), string.lower(SearchTerm)) then
                    table.insert(FilteredLogs, Message)
                end
            end
            return FilteredLogs
        end
        Window:Show()
    end,
}

@ezekieltem
I really like the way you went about doing this. I was actually thinking of handing this a very similar way. Thank you for your contribution!


Similar request, different response??

Do not use to discuss topics!
Hi @bertmelis, @Miq1, @postgetme and every one
My Aim is to use an ESP32 with the Max485 to get the state of a NORD motor through its Frequency inverter and control it.
Describe the bug
To test the set up, I connected it to the Modlink software through the USB and got the following responses:
The results vary between

The Valid response (occurs 65% of the time)
E4 - Server ID mismatch (occurs 30% of the time)
E5 -  Packet length error (occurs 5% of the time)

When I connected the setup with similar request to the frequency inverter with similar parameters as the Modlink software, I got:

E5 -  Packet length error (occurs 100% of the time)

When I connected the  the frequency inverter with similar request and with similar parameters to the Modlink software, I get:

The Valid response (occurs 100% of the time)

I also tried different ideas presented in #40 but non worked.
According to Modlink all responses are suppose to be ok and good. So the problem comes from the reception of the response by the ESP32 (see last picture)
Expected behavior
I expected the connection between the ESP32 and the frequency inverter to give me 100% valid response.
To Reproduce
Steps to reproduce the behavior:

Install Modlink (https://www.ozm.cz/ivobauer/modlink/downloads.htm)
Try the code below

Example code
#include <Arduino.h>
#include "ModbusClientRTU.h"
#include <math.h>

/*********************************************************
                   RT-485 DETAILS
*********************************************************/
#define BAUDRATE 38400   // 9600        // Baud rate for RT-485
#define ModbusMotor_ID 1 // ID of the frequency Inverter in the RTU Modbus System

//--- RS-485 communication wiring
#define ModbusRXD 22 //22isCorrect
#define ModbusTXD 25 //25isCorrect
#define ModbusFC 15  //RE & DE = FlowControl are connected with the GPIO 15

//--- RTU Modbus Constants
uint32_t Token = 1111;
uint8_t NumOfReq_Registers = 1;
const int NumOfResp_Registers = 1;
uint16_t AddressFirstHoldingRegister;
uint16_t ModbusRTU_result;

//--- Data collection constants
unsigned long collect_timeNow = 0;
unsigned long collect_timeOld = 0;
int collectTIME_interval = 60000 / 30;   //5000; // 60000 / 30; //30 readings per minute

// In my case the RS485 module had auto halfduplex, so no second parameter with the DE/RE pin is required!
ModbusClientRTU Modbus485(Serial2, ModbusFC);

void handleData(ModbusMessage response, uint32_t token)
{
  Serial.printf("Response: serverID=%d, FC=%d, Token=%08X, length=%d:\n", response.getServerID(), response.getFunctionCode(), token, response.size());
  for (auto &byte : response)
  {
    Serial.printf("%02X ", byte);
  }
  Serial.println("");
}

// Define an onError handler function to receive error responses
// Arguments are the error code returned and a user-supplied token to identify the causing request
void handleError(Error error, uint32_t token)
{
  // ModbusError wraps the error code and provides a readable error message for it
  ModbusError me(error);
  Serial.printf("Error response: %02X - %s\n", (int)me, (const char *)me);
}
//-------------------------------------------------------

//--- Motor Reading
void MotorReading()
{
  // //--- frequency Parameter (Hz) P716: read (1) 16-bit registers starting at Parameter P716 (register 0xB300) to RX buffer

AddressFirstHoldingRegister = 0xB300; //(4 und +1) - 3620

  Error err0 = Modbus485.addRequest(Token++, ModbusMotor_ID, READ_HOLD_REGISTER, AddressFirstHoldingRegister, NumOfReq_Registers );
  if (err0 != SUCCESS)
  {
    ModbusError e(err0);
    Serial.printf("Error creating request: %02X - %s\n", (int)e, (const char *)e);
  }
  else
  {
    // How do I get the response in a float variable e.g. ModbusRTU_result = xxx;
  }
}

void setup()
{
  //--- Baud Rate
  Serial.begin(BAUDRATE);
  while (!Serial)
  {
  }
  Serial.println("Serial __ OK __");

Serial2.begin(BAUDRATE, SERIAL_8E1, ModbusRXD, ModbusTXD, true);

  //--- define the Slave ID
  pinMode(ModbusFC, OUTPUT);
  digitalWrite(ModbusFC, 0); // Init in receive mode
  //Set up ModbusRTU client.
  //- provide onData handler function
  Modbus485.onDataHandler(&handleData);
  // - provide onError handler function
  Modbus485.onErrorHandler(&handleError);
  // Set message timeout to 2000ms
  Modbus485.setTimeout(2000);
  // Start ModbusRTU background task
  Modbus485.begin();

  delay(10);
}

void loop()
{
  collect_timeNow = millis();
  int collectTimeCount = collect_timeNow - collect_timeOld;
  if (abs(collectTimeCount) >= collectTIME_interval) // Data is collected
  {
    collect_timeOld = collect_timeNow;

  //--- Collect Sensor Data
  MotorReading();
   }
 }

Additional context
Response from Modlink to Esp32 conncection

Response from Modlink to Esp32 conncection

Response from Modlink to Esp32 conncection

Response from Motor to Esp32 conncection

.
According to Modlink all responses are suppose to be ok and good. So the problem comes from the reception of the response by the ESP32

Thanks for your help.

@bertmelis I am using: MAX485CSA running on 5V.
@Miq1 I changed the pin numbering and updated the Libary as you suggested. Here are my results:

When connected to Modlink
No right answer this time, but the following

Although everytime it is correct on Modlink

When connected to the Frequency converter, I only get

So I guess you are right about the extra 0x00, please how can i get rid of them?

I am afraid the easiest way at the moment would be to get you some adapters with auto halfduplex...
In a parallel issue one of the users helped himself by filtering the leading and trailing 0x00 in the receive() function. This will cure the symptom, but not the root cause.
You may experiment with the library's RE/DE toggle callback feature to use different timing patterns for the set and release of the toggle pin, but I cannot promise any progress. I have no regular adapters here to do testing myself unfortunately.

_toggleLevel will be set to the value the library is attempting to set each time, so your changes to it will be lost at the time the next call is made.
I suppose you are trying to wait 500ms before releasing the toggle back to LOW level? Then you simply could do a delay(500); before the digitalWrite.

You almost got it. You need to do the digitalWrite() yourself, though, so normally you would do a digitalWrite(_toggleLevel); any time around and do a if (_toggleLevel == LOW) delay(500); if that is what you are trying.
The delay on an ESP32 will halt the current task only, the others will continue running.

The sources I found in the Net describing the spurious 0x00 bytes effect were assuming that some voltages inside the RS485 adapter need to stabilize after the toggle before being able to correctly receive or send. I cannot judge if that is correct, but it would lend to a plausible explanation.

@Miq1  Ok thanks, so you mean the right expression will be:
void togglefunction(bool _toggleLevel)
{
  if (_toggleLevel == LOW)
  {
    delay(500); // delay before it is turned off

  }
  else
  {
// delay before it is turned on is not required
  }

  digitalWrite(_toggleLevel);
}

The sources I found in the Net describing the spurious 0x00 bytes effect were assuming that some voltages inside the RS485 adapter need to stabilize after the toggle before being able to correctly receive or send. I cannot judge if that is correct, but it would lend to a plausible explanation.

So what solution do u think of?
By the way it sounds like it cannot be solved? so i will have to just solve the symptom. Which code could I then apply in the recieve() - in RTUutils and where should I apply it??
Thanks

There is an advice on AVRfreaks that sounds interesting: link. Could you try to do a pinMode(rxpin, INPUT_PULLUP); in your setup()? (Naming your RX pin of course).
For the "symptom curing" you need to throw away any leading 0 bytes after the buffer has been received and also any after the message proper. The latter is tricky as you will have to determine the regular length based on the function code and length bytes in the message, if applicable.

Rats. The INPUT_PULLUP advice sounded really promising... I found similar references at different places, so I was confident. cry

Unfortunately, this is managed by the Arduino core and the core set RX to INPUT only. If you are breadboarding you can try to add a (10k?) resistor to pullup off course.

I don't have one now, I will try to get one and try it. Could can I use a resistor less or more than 10k?

4K7 will do as well, I reckon.
[Off topic] Something tells me your native language is rather German than English - do I guess that right? I am German myself 😁

@Miq1 OMG!!!! Awsome. The World is that small!
It is English but I have been in Germany for 6 years now and I often speak german so ja.
@bertmelis and @Miq1 I tried initialting the RXDpin after the Serial initialisation like this:
void setup()
{
//--- Baud Rate
Serial.begin(BAUDRATE);
while (!Serial)
{
}
Serial.println("Serial __ OK __");
Serial2.begin(BAUDRATE, SERIAL_8E1, ModbusRXD, ModbusTXD, true);
//--- define the Slave ID
pinMode(ModbusFC, OUTPUT);
digitalWrite(ModbusFC, 0); // Init in receive mode
//Set up ModbusRTU client.
//- provide onData handler function
Modbus485.onDataHandler(&handleData);
// - provide onError handler function
Modbus485.onErrorHandler(&handleError);
// Set message timeout to 2000ms
Modbus485.setTimeout(2000);
// Start ModbusRTU background task
Modbus485.begin();
//--- Initialize the inputs and outputs
pinMode(ModbusRXD, INPUT_PULLUP);
delay(10);
}
and I get:

Although the pump and the frequency converter are active producing value greater than 0

@Miq1
By the lines A and B also have a 56R on their respective lines, is that normal?

Do you have or can get hold of a 2-channel oscilloscope? No high sampling frequencies required, a simple China brick will do. I would particularly be interested in the timing on the bus.

Unfortunately i don't know where I can get an oscilloscope now. Can I use a multimeter?

One last suspect I have is the Frequency inverter does closely follow the 3.5c and 1.5c gaps in the data stream - which the ESP32 is not.

Please what do you mean?

Oh well 😆
No, a multimeter will show you a single, if changing value. The scope plots out both signals in parallel for a certain time to let you go back and forth in the recording, zoom in and out etc. Without it I am afraid you have few chances to catch a bug in timings.
3.5c and 1.5c are time gaps defined by the Modbus RTU specs to decide on end-of-message and invalid transmissions, respectively. The "c" stands for "character time".
In your case you have a baudrate of 38400 and 10 bits per character (8 data + 1 parity +1 stop bits). So one c would be 10/38400 - roughly 260 microseconds.
According to the standard, if a client or server is noticing a quiet time of at least 3.5*260=910 microseconds, the bus is considered free and may start sending. The other value of 1.5c=390 microseconds in your case is the intra-message gap that may not occur in valid messages. If it is detected, the message shall be discarded.
These timings are hard to maintain on a multitasking device like the ESP32. Since most commercial RTU devices are relaxed in that respect as well, it works out nicely the most time.
There are devices, though, that will strictly adhere to the specs. With those the ESP32 may have a hard time communicating. In industrial Modbus applications sometimes baudrates of 1,000,000 and above are common with just a few microseconds for each character... 🙄

I swtich them for the test. so only one device is connected. to the ESP32.

Let me drill that a bit more: how do you switch? Connect another set of A/B wires? Connect another RS485 adapter to the Serial pins?

@Miq1

Connection between ESP32 and Modlink (Computer):
The ESP32 has an adapter (MAX485). The A and B cables from this Max485 are then connected to another adapter (RS485 to USB) and then connected to the Computer.

Connection between ESP32 and Frequency inverter:
The ESP32 has thesame an adapter (MAX485). Another cable is used which has and RJ12-connector on one side for ther FI and is open on the other end to connect to A and B (including GND and VCC) of the Max485.

Connection between Modlink (Computer)  and Frequency inverter:
The RJ12 cable mentioned above is used and connected to the A, B and GND of the RS485 to USB adapter, which is then connected to the Computer

@bertmelis  and @Miq1 Very intresting thoughts.
I will try them and let yout know.
The best way to see whether the mesaages are received will also be to write to a parameter.
Moreover i will get an RS485 repeater from amazon to try it tomorrow.

I am using IIOT AE04 (https://norvi.lk/industrial-esp32-norvi-iiot/) so such modification may be difficult, but I will see what I can do

I tried it again.
With the Modlink When
Software Inverted no AB switch = Works
Software not Inverted no AB switched = No Response (time out)
Software Inverted and AB switched = Output is 00

Looking at the wire diagram from Wikipedia (pasted above) and the truth table: the input at the UART would be:
0 (start bit), 0 0 1 1 0 1 0 0
which is the opposite of what RS485 is transmitting. Hence UART has to be inverted. However because MAX485 outputs HIGH when the inputs are open, you could say it doesn't need to be inverted otherwise the HIGH idle state could be treated as a start bit. Hence the 0x00.

By the way, when I don't invert them in the software (false), the voltage false instead of rising
NB: Measurement are being carried at the ESP32 side

The fourth option is missing yet: software not inverted an AB switched

@GregDavid123 can you please try that and report the outcome?

@Miq1 Still 0x00 packet length error

OK, then I will try the first one 👍

OK, then I will try the first one 👍

anyways, how do I read the results? What is A, B, C and 1/-1?

👍🏻

No, as Bert stated, the internal is much too weak. You will have to add an external resistor of 470 Ohms. I suppose something near that value will do as well.

Ja, but I can't do much about that, given the ESP32 device i am using. That is why i just tried based on the info I had, and it worked.

anyways, how do I read the results? What is A, B, C and 1/-1?
A, B, and C are the different factors I could change. while 1 and -1 which stand for a defined normal state and defined opposite state respectively.

so the aim was to try out different possibilities (2³) to see their influence on the result.

Closing this now in regards to discussions item #112.


Harmony 1178 paged stac

Github Issue: N/A
Description
Adds support for paged STAC catalog input (HARMONY-1178). This enables better scaling to many items as no one catalog has more items than the page size.
Overview of work done

Added support for paged STAC catalog input, i.e., catalogs that have 'next' and 'prev' links.
Updated code to use harmony-service-lib v1.0.16.

Overview of verification done

Added tests using paged STAC catalog input

Overview of integration done

Built image and deployed in local Harmony.
Issued the following query (with Harmony AGGREGATE_STAC_CATALOG_MAX_PAGE_SIZE=2 to trigger paged catalogs)

http://localhost:3000/C1234208438-POCLOUD/ogc-api-coverages/1.0.0/collections/all/coverage/rangeset?maxResults=10&concatenate=true

Verified that generated input catalogs were paged
Opened resulting nc4 file in Panoply 4.10.11 and plotted 'bathymetry':

PR checklist:

[x] Linted
[x] Updated unit tests
[x] Updated changelog
[x] Integration testing

See Pull Request Review Checklist for pointers on reviewing this pull request

Thanks @indiejames. Can you rebase your branch to start from current podaac/develop? That should resolve the conflicts.


LVM devices not intialized on boot

RancherOS Version: (v1.4.0)
Where are you running RancherOS? (bare-metal)
I was planning on using LVM to provision some local disk volumes in k8, which I have working the way I'd like it to. There is one small catch though, that the volume group is not initialized during boot.
I.e. I have to run vgchange -ay after each boot and then mount the logical volumes.
Is there any way to ensure that the volume groups are initialized first so that way the devices can be mounted properly during boot? Do I need to add additional kernel parameter, or update the initramfs(not sure if that's exactly how it works for RancherOS)?

Can you try runcmd?
https://rancher.com/docs/os/v1.x/en/installation/configuration/running-commands/

@niusmallnan Yes, I can get the volumes initialized now, so that's good.
I'm not sure if this is a sort of race condition now, though, as the devices aren't getting mounted at boot time.
I'm wondering if the mounts section from the cloud-init happens before the runcmd? I suppose it's possible to do mount .... in the runcmd after, but that seems messy.

The runcmd scripts runs before user docker.
The mounts runs before runcmd.


feat: add a log helper library to easily log entire structs directly

This is meant to be a placeholder draft PR to discuss a file which allows the logging of the entire struct.
This adds a log(name: String) function to all the structs defined in forge-std so that they can easily be logged to the console during testing.
by adding using forgeStdLogHelper for *; to a test file, any struct returned by a forge-std file can be logged to the console by calling someStruct.log("someStruct");

This is interesting, and I like the idea. My main objection with adding this as-is to forge-std is it's impact on compile time. With via-ir, this library takes ~3s to compile for me:
$ hyperfine 'solc $(forge re) src/forgeStdLogHelper.sol --via-ir'
Benchmark 1: solc $(forge re) src/forgeStdLogHelper.sol --via-ir
  Time (mean ± σ):      3.007 s ±  0.079 s    [User: 2.838 s, System: 0.126 s]
  Range (min … max):    2.929 s …  3.209 s    10 runs

Compile times are becoming the speed bottleneck for devs these days, especially with via-ir (related: https://github.com/foundry-rs/forge-std/issues/225).
As a result, and in the interest of https://github.com/foundry-rs/foundry/issues/3782, I'd prefer to implement this (and more generally, all console.log functionality) as native cheats upstream in forge. We can add a lot of vm.print() signatures to the cheatcode interface and remove the need for all the solidity console.log libraries we currently have here. (logs have existing meaning in the EVM, hence why I'd name it vm.print instead of vm.log)

Closing, and created https://github.com/foundry-rs/foundry/issues/7773 to track


Malformed DB using fts5

Hi!
I think I found a blocking bug for @vlcn.io/crsqlite-wasm when using fts5.
Basically after some INSERT I receive this error and the db becomes unusable:
Error: database disk image is malformed
    at check (sqlite-api.js:866:1)
    at Object.step (sqlite-api.js:699:1)
    at async TX.statements (TX.ts:152:1)

I saw this can be mitigated by wrapping the INSERT into a transaction, but still if you perform lot of transactions this happens again.
Minimal code to reproduce:
    const sqlite = await initWasm()
    const db = await sqlite.open('sqlite_test.db')
    await db.exec('CREATE VIRTUAL TABLE IF NOT EXISTS test_fts USING fts5(fieldA, fieldB, fieldC, fieldD, fieldE, id UNINDEXED, prefix=2, detail=none);')

    for (let i = 0; i < 1000; i++) {
      await db.exec(`INSERT INTO test_fts (fieldA, fieldB, fieldC, fieldD, fieldE, id) VALUES ('test', 'test', 'test', 'test', 'test', '${i}');`)
        .catch(err => {
          console.error(err, i)
        })
    }

to me it always fail during iteration 877.
I also created a basic create-react-app project that demonstrates this, code lives here.

Forgot to say: tested in Chrome and Firefox on Mac OS

Thanks for the report. It may be a problematic interaction with the indexeddb vfs. I should release a variant of cr-sqlite that lets the user choose their virtual filesystem so we can track these things down.

FYI I tried to set the DB in memory and the error didn't occur, so you're right: it must be something related to indexeddb. Did you manage to reproduce the bug on your side?

I found a blocking bug

In the interest of getting you unblocked, have you tried inserting multiple values at a time, e.g.
INSERT INTO test_fts (
  fieldA, fieldB, fieldC, fieldD, fieldE,
  id
)
VALUES
  (
    'test', 'test', 'test', 'test', 'test',
    '${i}'
  ),
  (
    'test', 'test', 'test', 'test', 'test',
    '${i}'
  ),
  (
    'test', 'test', 'test', 'test', 'test',
    '${i}'
  ),
  (
    'test', 'test', 'test', 'test', 'test',
    '${i}'
  ),
  (
    'test', 'test', 'test', 'test', 'test',
    '${i}'
  );

I do this in my own project here in batches of 1000 and was able to add ~35k rows without database disk image is malformed (I really should use a transaction though). Schema here - I only have 3 FTS columns though compared to your example's 5. If you want to test my code I can upload those rows somewhere.

Unfortunately, this is not a workaround we can implement with our use case. We perform lot of updates after the first db population, and eventually it will corrupt

@theboolean - would switching to OPFS be acceptable for your use case? I think the OPFS VFS should handle this fine since it is less temperamental than indexeddb.
@rhashimoto - just an fyi. I assume this is in wa-sqlite itself but haven't stripped out cr-sqlite layers to confirm.

@theboolean If you run your test with Dev Tools open is there anything interesting printed to the console when it fails?

@tantaman I would like to use indexeddb because of wider browser support, but I can give OPFS a try to compare performances.
@rhashimoto the only error I receive is the one I pasted in the OP, but I added the repo that can reproduce the issue to codesandbox, so you can try by yourself.
Thank you guys for the interest in this issue 🙏🏻

@tantaman is exposing OPFS a simple change to do?

@theboolean - should be pretty straightforward. Would be a matter of exposing an option for the user to supply a VFS class to initWasm
See these lines:
https://github.com/vlcn-io/js/blob/705f6d2409d84c58c7953276e6b9102c2c08501b/packages/crsqlite-wasm/src/index.ts#L55-L57
https://github.com/vlcn-io/js/blob/705f6d2409d84c58c7953276e6b9102c2c08501b/packages/crsqlite-wasm/src/index.ts#L39-L57

I can't reproduce this with wa-sqlite using the SQL in the original post. I bumped the number of iterations up to 100,000 without seeing an error.
I think the next step is probably for someone (not me) to check whether the problem is reproducible in the fork of wa-sqlite.

Reproduced in wa-sqlite. It fails with SQLITE_CORRUPT on iteration 877, exactly as reported.

It's a bug in IDBBatchAtomicVFS. It also reveals a likely bug in SQLite, without which it probably wouldn't have shown up here. It's still a critical bug in IDBBatchAtomicVFS, though, as I think it can be exposed in other ways. I hope to merge the fix tomorrow-ish.

Appreciate it.
@theboolean  - I'll roll a new release to update to https://github.com/rhashimoto/wa-sqlite/releases/tag/v0.9.8 which will resolve this issue.

@theboolean What a great bug report, including a compact reproduction! This exposed not one but two quite subtle bugs, one in SQLite which is possibly the best tested library on the planet (and one in wa-sqlite which is...not). The bug was fixed in SQLite only hours after submission, and was considered important enough to bypass the code freeze for their imminent release.

@tantaman I think it makes sense to merge wa-sqlite v0.9.8 as a patch and then releasing v0.16. What do you think?

@theboolean, @iansinnott - do you guys need a fix immediately or can you wait till the v0.16 release?

@tantaman no rush, thanks for looking into this

This'll fix it -- https://github.com/vlcn-io/js/pull/36
but I'll need to publish a new release for everyone.

Hi @tantaman! Touching base just to check if there are any updates on this :)

@theboolean - I'll be publishing a new release today. Luckily it'll be compatible with the current release as we decided to revert some breaking changes.

re-opening until the release is actually published.

Almost there. Need to get this pulled in -- https://github.com/vlcn-io/js/pull/38

New release published. You should be all set. Note that I've published these under the next tag until I've had a chance to roll them into the various examples and demo apps to further verify the builds.
https://github.com/vlcn-io/js/discussions/39

Thank you @tantaman, @rhashimoto, and all the people involved in fixing this 🙏🏻

v0.16.0-next.2 is pretty solid at this point. There were a few bugs in v0.16.0-next.0 that are now fixed.
Will be making next.2 the stable release soon.


Release on Github

Hi,
can you please make release 2.x with demo and upload it on Github Releases with changelog?

it's already been released


Execution time for our notebooks is slower than Jupyter

Based on feedback here:
https://towardsdatascience.com/ipython-notebook-support-is-finally-here-for-visual-studio-code-b578abe0361c
We should investigate this and see if there's something we can do about this.

I am also experiencing this issue in both the notebook and the interactive window (perhaps related to issue #7180?)
I have not done extensive testing but it starts being noticeable to me when dealing with dataframes about 100mb in size (generally 100k+ rows, 80+ columns).
What happens is that simple operations like dataframe.shape, dataframe.head(), or dataframe.colums can take a few minutes to complete vs Jupyterlab (either notebook or console) where it is nearly instant. It also only happens the first time I run these operations. If I rerun any of the above afterwards they come back much faster.

For me, this issue got gradually worse and worse over the last few days. Currently, it's so unusable the cell "1+1" literally computes over 30 seconds. Jupiter notebooks work fine in the browser.

Have you tried disabling jedi as suggested in this bug:
#7180

Essentially put this in your python.dataScience.runStartupCommands
%config IPCompleter.use_jedi = False

Essentially put this in your python.dataScience.runStartupCommands
%config IPCompleter.use_jedi = False

I found that this answer helped me with the execution speed in both the console and notebook case.

We should probably turn this in for users, as a default setting.

I am new to vs code and new to python ... sorry if this is obvious, but how do I get to the python.dataScience.runStartupCommands - I have saved a .ipynb as .py, when I click run cell or Ctrl-Enter, simple code is painfully slow.  When I highlight the same code and click Shift-Enter, code runs much faster.

python.dataScience.runStartupCommands is a setting in your settings.json. It's a piece of python code that will run when we start a jupyter server. If you set it to %config IPCompleter.use_jedi = False Jupyter will stop using Jedi.
Switching off Jedi in your settings is different. It impacts what the python extension does for running a language server, not what Jupyter does. We (the python extension team) run our own language server (the thing that provides intellisense). Jupyter also does this but it doesn't listen to VS code settings changes, hence the need to change its config with the %config line.

python.dataScience.runStartupCommands is a setting in your settings.json. It's a piece of python code that will run when we start a jupyter server. If you set it to %config IPCompleter.use_jedi = False Jupyter will stop using Jedi.
Switching off Jedi in your settings is different. It impacts what the python extension does for running a language server, not what Jupyter does. We (the python extension team) run our own language server (the thing that provides intellisense). Jupyter also does this but it doesn't listen to VS code settings changes, hence the need to change its config with the %config line.

Hey, I'm not 100% sure on how that is supposed to look in my settings.json
"python.dataScience.runStartupCommands" : "%config IPCompleter.use_jedi = False"
Like this?

Yes that should work. It's just a string that we send to jupyter as code to execute when we start it up.


Array return misidentifies static attributes

When returning an array, the transpiled code returns an array with only the first element invoked with arguments. The rest of the array attempts to access the arguments via a statics array (see line 16 and 33: Uncaught ReferenceError: bar is not defined).
Strangely, I have been able to work around this issue by trying to use tagged templates. This jsx:
    ...
    const workAround = t => t;
    return ([
      <span
        foo={ workAround`My bar is: ${bar}`}
      >one,
      <span
        foo={ workAround`My bar is: ${bar}`}
      >two,
      <span
        foo={ workAround`My bar is: ${bar}`}
      >three
    ]);
    ...

transpiles to return an array where each jsxWrapper is invoked with the correct arguments:
return [_jsxWrapper(_span$wrapper, [workAround(_templateObject, bar)]), _jsxWrapper(_span$wrapper2, [workAround(_templateObject, bar)]), _jsxWrapper(_span$wrapper3, [workAround(_templateObject, bar)])];

Should be fixed in v4.2.1

Looks good, thanks @jridgewell!


chore(main): release 2.11.1

:robot: I have created a release beep boop
2.11.1 (2024-08-17)
Bug Fixes

duplicate changelog interstital (#116) (88f37bc)

This PR was generated with Release Please. See documentation.

:robot: Release is at https://github.com/huffSamuel/upnp_explorer/releases/tag/v2.11.1 :sunflower:


CBR file, "Sorry is not a comic archive"

Hi, I'm a new comictagger user.
I am trying to use comictagger from the command line, but I can't get it to read a CBR file. It only works for CBZ files. I have found suggestions on the mylar repository pointing to an old version of unrar installed, however I have confirmed that mine is 5.61 and installed in /usr/bin/unrar (using Ubuntu). I've run a test command (unzip -q -t "sample.cbr" > /dev/null 2>&1 ) on the file to confirm it isn't corrupt.
I'm not sure where to find logs to help others here troubleshoot my issue, but any feedback is welcomed.

Did you install the CBR requirements?
pip install comictagger[CBR]

Yes, ZSH and other shells require straight braces to be escaped, bash does not.
I've run into it several times myself.


PKCS12_parse leaves errors on stack [3.0.6]

OpenSSL 3.0.6 has a regression where successful parse of a PKCS12 via PKCS12_parse leaves errors on the stack. This appears to be due to changes to error handling in functions that PKCS12_parse calls.

It's because of https://github.com/openssl/openssl/blob/openssl-3.0/crypto/pkcs12/p12_kiss.c#L92
shift was changed to put an error on the stack if you shfit from an enpty stack
this regression is trivially observed by running the pyca/cryptography test suite

The regression is caused by #18918

@DDvO ??

@DDvO ?

@reaperhulk - Does this mean that the external tests that we have for pyca are older than the ones we currently have? Any chance this could be updated?

Your external tests are not properly configured. Looking at a recent job from the 3.0 branch: https://github.com/openssl/openssl/actions/runs/3226931046/jobs/5281077558

OpenSSL: OpenSSL 1.1.1f  31 Mar 2020

You are linking pyca/cryptography against a system OpenSSL, not the OpenSSL you have built.
It's also the case that your copy of pyca/cryptography is a year old, but that's not relevant here.

Has this been broken since it got put in (6 years ago)

@alex Isnt the -L option supposed to handle this?
i.e.
CFLAGS=-I/home/runner/work/openssl/openssl/test-runs/test_external_pyca/../../include -I/home/runner/work/openssl/openssl/test-runs/test_external_pyca/../../include -L/home/runner/work/openssl/openssl/test-runs/test_external_pyca/../.. pytest -n auto tests --wycheproof-root=../wycheproof

Has this been broken since it got put in (6 years ago)

AFAIK no, at some point it was definitely linking to the openssl being built.

Fix in https://github.com/openssl/openssl/pull/19400

-L should be in LDFLAGS I believe.

It's because of https://github.com/openssl/openssl/blob/openssl-3.0/crypto/pkcs12/p12_kiss.c#L92
shift was changed to put an error on the stack if you shfit from an enpty stack

Very sorry for my oversight.

Fix in #19400

Alternative direct fix is in #19414.


gantt-movable allow-moving breaks ng-click in task content

Hi,
I currently have an ng-click on a task content, and it's been working fine but recently all of a sudden it broke.
I can reproduce it in the example below. I tried adding a variable to allow-moving to toggle the behavior but some reason the allow-moving doesn't handle vaiables.
Change allow-moving="true" to "false" in the gantt-movable tag to make the ng-click work, but once the allow-moving is enabled again, it doens't work. Noticed there were some recent updates on the movable, not sure if this broke the behavior.
http://plnkr.co/edit/jPpNEiZoPvBkZf7DtZX3?p=preview
Thanks,
Anand

Any thoughts on this? Is this an issue or am I doing something wrong?
Thanks,
Anand

I did try your plnkr and it works.
Just init your variable allowMoving
$scope.allowMoving = true;
http://plnkr.co/edit/DKY4djN4MuXvcOJkayFZ?p=preview

Your right, it's working now. Not sure what my issue was then, could have been something on my browser but the plnkr and app was not working. Thanks.


[bn] Use IPA symbols for post-alveolar affricates

Before this change, the mapping used the symbols /c/ and /ɟ/,
which (according to the official IPA chart) are palatal stops;
whereas Bangla pronunciation uses post-alveolar affricates.

This is a broad phonemic transcription. It's more important to keep it readable than phonetically precise.


Auto rendering of monitor forms

Complete revision of monitor forms. This change is part one of #329 and eliminates the need for creating  HTML templates for each monitor.

Fixes #329


allow custome http/s agent

I have many requests to the docker deamon. Now the number of TCP connections is increasing very fast. For me there are now several thousand connections, which are no longer used, but are not cleaned up by the OS yet.
That's why I want to use my own agent for the http request.
With this change I only have a few connections left to the Docker Daemon.
Now I can define the agent as follows:
const docker = new Docker({
"protocol": "http",
"host": "<IP_ADDRESS>",
"port": "2375",
"agent": new http.Agent({
"keepAlive": true,
"maxSockets": 10,
"keepAliveMsecs": 10000
})
});

Any news on that topic?

This simple change would allow the use of Docker through SSH (combined, for example, with an agent from ssh2) while providing a lot of customization options that other solutions like #102 might not.
It's a great feature, I hope this PR gets accepted.

👍


JSONSchema form disabled state

Question
I tried to render form from JSONSchema in disabled state. Unsuccessfully. But toggling state with button works correctly. So I think I do something wrong.
You can see this behavior here:
https://stackblitz.com/edit/angular-k4hg8a

Nevermind, missed that this.options = {}, that rewrote initial one.


Microsoft Mandatory move to .net 6

Based on the decree below from Microsoft, when will this app be upgraded to be able to use .Net 4 or 6 due to the mandatory upgrades being forced on us?
### Update your Azure Functions apps to use Microsoft .NET 6 before 3 December 2022
_On 3 December 2022, extended support for Microsoft .NET Core 3.1 will end. After that date, your applications that are hosted on Functions will continue to run, but we'll no longer provide patches or customer service for .NET Core 3.1. Update your Functions applications to runtime version 4.x, which uses .NET 6.
.NET 6 is the latest version with long-term support and provides these enhancements:
A unified set of base libraries and an SDK that make it easy to share code across any application type.
Simplified development with C# 10 language features and minimal APIs.
Hot reload that allows you to make code changes without explicit recompiling.
Recommended action
To avoid potential service disruptions or security vulnerabilities, update your Functions applications to runtime version 4.x, which uses .NET 6, before 3 December 2022._

Any idea when this will be implemented? Our team wants something we can go to our higher ups to keep them calm.

We are still in need of an idea if this will meet the Mandated .net 4 versioning by Microsoft's end of life date for .net 3


[Segment] inverted segment doesn't inherit white text colour for everything?

Messing about with an inverted segment, I noticed that some things don't inherit the new default whilte colour - should they?

These are the only ones I've found so far. For the statistic I can invert it as well, but I don't see a way to fix the sub header to be white.
Fiddle: http://jsfiddle.net/u6c43nya/1/

Each element has its own inverted variation. Currently you will need to specify this variation even if the element is nested.
http://jsfiddle.net/dufgjsfw/

Thanks, so long as that is the intended result, that works for me :)


Test-task called from watch never finishes if a test lacks end() or (correct) plan() call

The watch
gulp.task('watch', function() {
  return gulp.watch('fixtures/test/*.js', ['test']);
});

A test
test('planned', function(t) {
  // t.plan(1); // works
  // t.plan(2); // test-task called from watch never completes
  t.equal(abs(1), 1);
  // t.end(); // works like t.plan(1), use neither and the test-task never finishes
});

The errors are correctly reported if run outside of the watch.

Tape listens to the exit event fired on process to check if all tests end.
But in watch, the process never exits.
If we are going to fix this, we have to run each file in a subprocess.
How do you think about that? @yuanqing

Closing because this issue should be fixed as of 0.0.10


How to edit the footer contents or add some other links.

To edit the footer please do the following:

Unzip the theme folder
Open the file partials/footer.hbs with a text/code editor
Implement your changes
Save the file, zip the theme folder and upload it again.

If you just want to add more navigation links you can add them in the Ghost Admin (Secondary Navigation).

I will close this issue for now, please feel free to reopen it if needed.


Fix issue where fields defined within union types were not found

It appears that an optional field defined within an optional record will not be found when looking for a default value.  This change seems to address that.

Hmmm... turns out that's a very partial fix, I'll try again


Browser support

Hey Sun,
I came across this project after seeing your YouTube video on it and wanted to contribute :)
This PR enables support for using Blockcrypt in the browser while still maintaining a uniform experience while using Node.js. Here's a summary of the changes made:

Configure TS, Node and Jest to support ECMAScript Modules.
Replace Node built-in functions with browser-friendly alternatives (Uint8Array vs Buffer, Web Crypto vs Node.js core Crypto module).
Refactor the code to more easily handle promises and iterations (since most browser crypto APIs are asynchronous).

Thank you for putting this project out there and for considering my contribution.
Sincerely,
Chris

Thanks @christoffercarlsson… looking forward to reviewing PR.

Hey @sunknudsen,
It just occurred to me that the original API can be maintained for both environments by simply checking typeof window === 'object' 😄
If Blockcrypt is being used in the browser then Uint8Array will be used for inputs and outputs, and if it's Node.js then Buffer will be used. Subsequently, the encryptCompat and decryptCompat methods have been removed.

Hey @christoffercarlsson, starting to dive into PR.
Lots of work has gone into it, thanks for contributing.
Still exploring, but noticed that Message can no longer be of type Buffer which is a breaking change with original API… is that intentional (relating to https://github.com/sunknudsen/blockcrypt/pull/2/commits/94badb18b562113fd81253e8992df090661e4bec)?

How does webcrypto compare to Node.js crypto APIs? Is webcrypto simply a wrapper around crypto on Node.js? My understanding is you recommend standardizing to webcrypto to increase interoperability which is appealing, but I know very little about the browser side of things.

Overall, love the idea of supporting browsers and impressed by the amount of work put into this PR… some of which is outside of my zone of comfort (first time exploring webcrypto APIs).
After spending about an hour reviewing PR, feels like codebase has become bulkier, harder to audit… likely because of webcrypto having more complex APIs and lack of Buffer (and, obviously, addition of interoperability, which is amazing).
I also noticed code has been (ingeniously) abstracted into more files and functions with a lot of inline sugar (use of inline await, reduce wizardry and wrapped promises  (among other abstractions)… which yields less lines of code but perhaps makes code less readable (a “feature” I have come to appreciate especially for sensitive packages).
All that said, feedback comes from someone who may be a little old school… will let PR sink it and have a fresh look in a few days.
Thanks so much for contributing @christoffercarlsson.

Hey @christoffercarlsson, I renamed master to main and deleted master which automatically closed this PR.
Given our work on Blockcrypt specification and releasing v1 reference implementation, I guess we can reopening it at a later time if need be?

Hey @sunknudsen,
Sounds good! If we want to add multi-platform support again in the future it seems more likely that it would be done via something like Web Assembly, instead of leveraging Web Crypto APIs.

To my understanding, the built-in crypto and the webcrypto APIs are separated from each other but utilize the same OpenSSL functionality under the hood.

I think we should use webcrypto API's only, not webassembly, as some browsers have that switched off because of some privacy concern, idk exactly how though.
Also old mobiles may not run webassemnly smoothly.
Therefore, webcrypto has the potential to support a larger base of browsers and/or devices.
We can implement both, and let the user decide, but webcrypto should take priority imo.


Where is the BN layer before upsampling?

The paper said

the composite connection, which consists of a 1×1 convolutional layer and batch normalization
layer to reduce the channels and an upsample operation

But I can't find BN before upsampling here

I believe batch norm is not used here since you add bias term in Conv and Conv with bias = Conv without bias + freezed BN.


RPI 3B+

Sending is not working on 3B+, i made sure the hardware is fine by using the same Tx with a 2B, with (code ver 0.9.6).
But neither version 0.9.6 nor 0.9.7 are transmitting for 3B+
Receive works fine.

My bad, it was servoblaster (auto starting at boot) and then interfering with GPIO.
Took me a while to figure out.


[Question]: How can I mount drives from existing system?

Is your question not already answered in the FAQ?

[X] I made sure the question is not listed in the FAQ.

Is this a general question and not a technical issue?

[X] I am sure my question is not about a technical issue.

Question
I previously have a Synology system setup, and I have 2 drives, they are in SHR raid mode. I want to move the system to Virtual DSM.
I understand that I need to mount the drives, and preferably by UUID.
But the drives has multiple petitions, see below
Question:
0. Does bring existing drives even passible?

If yes, how should I do it?
Should I mount all the uuids? If true, all use "DISK1" to "DISK N" in which order?

sda
├─sda1                          SynologyNAS:0              ca65cd5f-c87d-2061-d34e-eaa65cac892d
│ └─md126                       1.44.1-69057               b72ddd79-e182-41bd-915d-c246b91e34e1
├─sda2                          SynologyNAS:1              1a5516d7-c894-625e-5e74-03ec474126fb
│ └─md127                                                  e7cda7c9-4ec4-4984-8188-197986da1efb
└─sda5                          HomeNAS:2                  a6a34b51-75c8-ac6b-f130-d9e5ec026506
  └─md125                                                  pWRLZa-ym6I-OWrZ-kvX7-UOPq-U8Y4-z8hGgi
    ├─vg1-syno_vg_reserved_area
    └─vg1-volume_1              2024.05.12-13:18:16 v69057 17fc437a-74fe-4dd6-82af-1d99ca2aa490
sdb
├─sdb1                          SynologyNAS:0              ca65cd5f-c87d-2061-d34e-eaa65cac892d
│ └─md126                       1.44.1-69057               b72ddd79-e182-41bd-915d-c246b91e34e1
├─sdb2                          SynologyNAS:1              1a5516d7-c894-625e-5e74-03ec474126fb
│ └─md127                                                  e7cda7c9-4ec4-4984-8188-197986da1efb
└─sdb5                          HomeNAS:2                  a6a34b51-75c8-ac6b-f130-d9e5ec026506
  └─md125                                                  pWRLZa-ym6I-OWrZ-kvX7-UOPq-U8Y4-z8hGgi
    ├─vg1-syno_vg_reserved_area
    └─vg1-volume_1              2024.05.12-13:18:16 v69057 17fc437a-74fe-4dd6-82af-1d99ca2aa490

This will not work. vdsm cannot create or manage raids as it is not designed for this. If you want to migrate from an existing “real” nas, I recommend a backup/restore with Hyper Backup.


Fails on playback with 'Email or password is incorrect'

Bug report
Your Environment

Netflix add-on version: 0.16.0 (+ daily)
Operating system version/name: Debian Stretch (RetroPi) / Kodi 2:18.2-1~stretch
Device model:  Raspberry pi 3

Used Operating system:

[ ] Android
[ ] iOS
[ ] Linux
[ ] OSX
[x] Raspberry-Pi
[ ] Windows

Describe the bug

This is a fresh install onto an existing Retropi installation. The addon installs fine and I'm able to login and browse Netflix content as expected. However, on attempted playback I get the error 'Email or password is incorrect'.
I've found and read closed issues on this particular problem and have tried the following without avail:

logout, reboot, then login
remove the plugin, manually remove all addon files, reinstall
start fresh with the latest daily build
Perhaps I missed something?

Thank you.
Expected behavior

Actual behavior

Steps to reproduce the behavior

Fresh install of the netflix plugin using the install instructions
login
attempt to play Netflix content

Possible fix

Debug log

The debug log can be found from this link:
https://1drv.ms/u/s!AgIMW_4kujbwgbglyW6gtokcDqReEA?e=l5SYAx
Additional context or screenshots (if appropriate)
Installation

[ ] I'm using other Netflix Repo
[ ] I'm using a different source

Other information

Screenshots

this has returned from the site, i can not do anything,
you can only try to change your password

Hello,
I can try that, if that works I'll reply back here.
Thanks for the quick response.


ETCD-520: add etcd dbsize field

This PR adds field etcdDBSize to etcd-operator CRD to make etcd backend storage size configurable in OCP.
resolves https://issues.redhat.com/browse/ETCD-513
cc @soltysh @deads2k @tjungblu @dusk125 @hasbro17

/hold

/retest-required

the failure in ci/prow/integration is due to other tests
cc @soltysh

Enhancement for this change can be found here https://github.com/openshift/enhancements/pull/1549

@hasbro17 updated according to https://github.com/openshift/enhancements/pull/1549

/retest-required

/hold cancel

/retest-required

/retest-required

/hold
this is currently waiting for https://github.com/openshift/enhancements/pull/1549 to merge first

/retest-required

as per this run .. fixing the default test to expect quotaBackendGiB fails this case
API Integration Suite: [It] [operator.openshift.io/v1, Resource=etcds][ClusterProfiles=Hypershift,SelfManagedHA][FeatureSet="DevPreviewNoUpgrade"][FeatureGate=HardwareSpeed][File=0000_12_etcd_01_etcds-DevPreviewNoUpgrade.crd.yaml] Etcd On Create Should be able to create with Standard hardware speed expand_less

i will try to replace the default tag with minimum

/retest-required

/test

/test e2e-aws-serial-techpreview

@JoelSpeed @deads2k this run is the cause i removed the default tag to minimum
ptal
cc @soltysh

/retest-required

/retest-required

I will check out the PR locally and explore what's going on sometime today

/retest-required

Ok, so I've checked this out, and the issue is with the way the tests are constructued.
You should add back the default (+kubebuilder:default:=8) and then the behaviour for the field is as you desire it.
The issue is the test in the AAA_ungated.yaml file. Currently, because this is ungated, the tests here are supposed to pass against any and all versions of the CRD. However, adding a new default changes the output, so you can then either have the test case correct for the default set, or the non-default sets, but not both.
There are a few things we can do to avoid this:

Comment out the test until further notice
Adjust the test suite generator to allow skipping the test for certain feature gates or feature sets
Move the "expected" check to a derivative check, so that additional defaults do not affect the test result
Not have a default (least favourite option)

If you comment out the one test in the ungated file, everything else is passing

/retest-required

/retest-required

/retest-required

/test e2e-aws-ovn-hypershift

/test e2e-aws-ovn-hypershift

/test e2e-gcp

/test e2e-aws-ovn-hypershift

/retest-required

/test e2e-aws-ovn-hypershift

ci/prow/e2e-aws-ovn-hypershift

/retest-required

/test e2e-aws-serial-techpreview

/retest-required

/test e2e-aws-ovn-hypershift

see thread for hypershift job failure

@soltysh e2e-aws-ovn-hypershift fails due to this
Shall we override ?

/retest-required

/retest-required

I'm happy with the content of the PR at this point, is the rest of this feature ready to go, is the plan still to try and merge this for 4.16?

I'm happy with the content of the PR at this point, is the rest of this feature ready to go, is the plan still to try and merge this for 4.16?

yes it is due on 4.16
cc @soltysh @openshift/openshift-team-etcd

/retest-required

/approve
Can someone from the team working this feature, @soltysh maybe, add the LGTM and hold cancel if we are happy for this to merge at this point, considering proximity to the feature freeze

/approve
Can someone from the team working this feature, @soltysh maybe, add the LGTM and hold cancel if we are happy for this to merge at this point, considering proximity to the feature freeze

@soltysh is on vacation, maybe @deads2k or @mfojtik  can label it ?
cc @openshift/openshift-team-etcd

/hold cancel

before going to accessible-by-default, in addition to tests the API PR must link tested documentation for

Etcd Team to investigate whether a larger etcd database can cause crash-loops in Etcd (via out-of-memory for example) on restarts (similar to the above API server issue).

If it is possible to get into a crash-loop because of the database size, the Etcd team will document how to recover the Etcd cluster from this state.

and if it is "impossible", I'd like to understand where the infinite memory machine comes from.

/lgtm


Localize using vscode-loc

Looks like the Python extension is finally adopting the vscode-loc package to localize strings in the exension.
We might want to look into this.

See the directions that Tyler has:
https://gist.github.com/TylerLeonhardt/83abd380686ac1321b01552a5b236bad

We'd need to see how this would work with webviews.
@TylerLeonhardt do you have any idea whether this is possible today? or of any work arounds?

Webviews aren't supported today because you need a file system for localization at this time.
The best you can do today is have your strings on the extension host side and then send them to the webview.
This will get better over time


diagnostic_utils docs

This package also lacks documentation. It is fairly coupled to the offline_ml_diags workflow so perhaps this should be made clear

This package no longer exists.


Support TF 2.15

Pull Request Description:
Checklist before requesting a review:

[x] I set the appropriate labels on the pull request.
[x] I have added/updated the release note draft (if necessary).
[x] I have updated the documentation to reflect my changes (if necessary).
[x] All function and files are well documented.
[x] All function and classes have type hints.
[x] There is a licenses in all file.
[x] The function and variable names are informative.
[x] I have checked for code duplications.
[x] I have added new unittest (if necessary).

Can you please add a brief description to the PR specifying what were "breaking changes" that affected the MCT and what is the solution for them? just so we'll know what to look for in the review


feat: logging via slf4j

Changed logging to slf4j logger. Now logs from maven build are the following:
[INFO] HTTP/3+QUIC support is experimental and not suited for production use.
Downloading from my-maven: https://artipie:8091/my-maven-proxy/args4j/args4j/2.33/args4j-2.33.pom
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/args4j/args4j/2.33/args4j-2.33.pom
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/args4j/args4j/2.33/args4j-2.33.pom.sha1
Downloaded from my-maven: https://artipie:8091/my-maven-proxy/args4j/args4j/2.33/args4j-2.33.pom (1.3 kB at 520 B/s)
[INFO] HTTP/3+QUIC support is experimental and not suited for production use.
Downloading from my-maven: https://artipie:8091/my-maven-proxy/args4j/args4j-site/2.33/args4j-site-2.33.pom
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/args4j/args4j-site/2.33/args4j-site-2.33.pom
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/args4j/args4j-site/2.33/args4j-site-2.33.pom.sha1
Downloaded from my-maven: https://artipie:8091/my-maven-proxy/args4j/args4j-site/2.33/args4j-site-2.33.pom (4.4 kB at 7.4 kB/s)
[INFO] HTTP/3+QUIC support is experimental and not suited for production use.
Downloading from my-maven: https://artipie:8091/my-maven-proxy/org/kohsuke/pom/14/pom-14.pom
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/org/kohsuke/pom/14/pom-14.pom
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/org/kohsuke/pom/14/pom-14.pom.sha1
Downloaded from my-maven: https://artipie:8091/my-maven-proxy/org/kohsuke/pom/14/pom-14.pom (5.5 kB at 11 kB/s)
[INFO] HTTP/3+QUIC support is experimental and not suited for production use.
Downloading from my-maven: https://artipie:8091/my-maven-proxy/org/springframework/spring-web/6.1.0/spring-web-6.1.0.pom
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/org/springframework/spring-web/6.1.0/spring-web-6.1.0.pom
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/org/springframework/spring-web/6.1.0/spring-web-6.1.0.pom.sha1
Downloaded from my-maven: https://artipie:8091/my-maven-proxy/org/springframework/spring-web/6.1.0/spring-web-6.1.0.pom (2.4 kB at 3.7 kB/s)
[INFO] HTTP/3+QUIC support is experimental and not suited for production use.
Downloading from my-maven: https://artipie:8091/my-maven-proxy/org/springframework/spring-beans/6.1.0/spring-beans-6.1.0.pom
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/org/springframework/spring-beans/6.1.0/spring-beans-6.1.0.pom
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/org/springframework/spring-beans/6.1.0/spring-beans-6.1.0.pom.sha1
Downloaded from my-maven: https://artipie:8091/my-maven-proxy/org/springframework/spring-beans/6.1.0/spring-beans-6.1.0.pom (2.0 kB at 4.0 kB/s)
[INFO] HTTP/3+QUIC support is experimental and not suited for production use.
Downloading from my-maven: https://artipie:8091/my-maven-proxy/org/springframework/spring-core/6.1.0/spring-core-6.1.0.pom
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/org/springframework/spring-core/6.1.0/spring-core-6.1.0.pom
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/org/springframework/spring-core/6.1.0/spring-core-6.1.0.pom.sha1
Downloaded from my-maven: https://artipie:8091/my-maven-proxy/org/springframework/spring-core/6.1.0/spring-core-6.1.0.pom (2.0 kB at 3.2 kB/s)
[INFO] HTTP/3+QUIC support is experimental and not suited for production use.
Downloading from my-maven: https://artipie:8091/my-maven-proxy/org/springframework/spring-jcl/6.1.0/spring-jcl-6.1.0.pom
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/org/springframework/spring-jcl/6.1.0/spring-jcl-6.1.0.pom
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/org/springframework/spring-jcl/6.1.0/spring-jcl-6.1.0.pom.sha1
Downloaded from my-maven: https://artipie:8091/my-maven-proxy/org/springframework/spring-jcl/6.1.0/spring-jcl-6.1.0.pom (1.8 kB at 4.4 kB/s)
[INFO] HTTP/3+QUIC support is experimental and not suited for production use.
Downloading from my-maven: https://artipie:8091/my-maven-proxy/io/micrometer/micrometer-observation/1.12.0/micrometer-observation-1.12.0.pom
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/io/micrometer/micrometer-observation/1.12.0/micrometer-observation-1.12.0.pom
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/io/micrometer/micrometer-observation/1.12.0/micrometer-observation-1.12.0.pom.sha1
Downloaded from my-maven: https://artipie:8091/my-maven-proxy/io/micrometer/micrometer-observation/1.12.0/micrometer-observation-1.12.0.pom (3.8 kB at 9.7 kB/s)
[INFO] HTTP/3+QUIC support is experimental and not suited for production use.
Downloading from my-maven: https://artipie:8091/my-maven-proxy/io/micrometer/micrometer-commons/1.12.0/micrometer-commons-1.12.0.pom
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/io/micrometer/micrometer-commons/1.12.0/micrometer-commons-1.12.0.pom
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/io/micrometer/micrometer-commons/1.12.0/micrometer-commons-1.12.0.pom.sha1
Downloaded from my-maven: https://artipie:8091/my-maven-proxy/io/micrometer/micrometer-commons/1.12.0/micrometer-commons-1.12.0.pom (3.4 kB at 11 kB/s)
[INFO] HTTP/3+QUIC support is experimental and not suited for production use.
Downloading from my-maven: https://artipie:8091/my-maven-proxy/args4j/args4j/2.33/args4j-2.33.jar
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/args4j/args4j/2.33/args4j-2.33.jar
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/args4j/args4j/2.33/args4j-2.33.jar.sha1
Downloaded from my-maven: https://artipie:8091/my-maven-proxy/args4j/args4j/2.33/args4j-2.33.jar (155 kB at 259 kB/s)
Downloading from my-maven: https://artipie:8091/my-maven-proxy/org/springframework/spring-web/6.1.0/spring-web-6.1.0.jar
Downloading from my-maven: https://artipie:8091/my-maven-proxy/org/springframework/spring-beans/6.1.0/spring-beans-6.1.0.jar
Downloading from my-maven: https://artipie:8091/my-maven-proxy/org/springframework/spring-core/6.1.0/spring-core-6.1.0.jar
Downloading from my-maven: https://artipie:8091/my-maven-proxy/org/springframework/spring-jcl/6.1.0/spring-jcl-6.1.0.jar
Downloading from my-maven: https://artipie:8091/my-maven-proxy/io/micrometer/micrometer-observation/1.12.0/micrometer-observation-1.12.0.jar
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/org/springframework/spring-jcl/6.1.0/spring-jcl-6.1.0.jar
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/io/micrometer/micrometer-observation/1.12.0/micrometer-observation-1.12.0.jar
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/org/springframework/spring-beans/6.1.0/spring-beans-6.1.0.jar
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/org/springframework/spring-jcl/6.1.0/spring-jcl-6.1.0.jar.sha1
Downloaded from my-maven: https://artipie:8091/my-maven-proxy/org/springframework/spring-jcl/6.1.0/spring-jcl-6.1.0.jar (25 kB at 18 kB/s)
Downloading from my-maven: https://artipie:8091/my-maven-proxy/io/micrometer/micrometer-commons/1.12.0/micrometer-commons-1.12.0.jar
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/org/springframework/spring-core/6.1.0/spring-core-6.1.0.jar
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/org/springframework/spring-web/6.1.0/spring-web-6.1.0.jar
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/io/micrometer/micrometer-observation/1.12.0/micrometer-observation-1.12.0.jar.sha1
Downloaded from my-maven: https://artipie:8091/my-maven-proxy/io/micrometer/micrometer-observation/1.12.0/micrometer-observation-1.12.0.jar (72 kB at 14 kB/s)
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/io/micrometer/micrometer-commons/1.12.0/micrometer-commons-1.12.0.jar
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/org/springframework/spring-core/6.1.0/spring-core-6.1.0.jar.sha1
Downloaded from my-maven: https://artipie:8091/my-maven-proxy/org/springframework/spring-core/6.1.0/spring-core-6.1.0.jar (1.9 MB at 349 kB/s)
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/io/micrometer/micrometer-commons/1.12.0/micrometer-commons-1.12.0.jar.sha1
Downloaded from my-maven: https://artipie:8091/my-maven-proxy/io/micrometer/micrometer-commons/1.12.0/micrometer-commons-1.12.0.jar (47 kB at 8.5 kB/s)
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/org/springframework/spring-beans/6.1.0/spring-beans-6.1.0.jar.sha1
Downloaded from my-maven: https://artipie:8091/my-maven-proxy/org/springframework/spring-beans/6.1.0/spring-beans-6.1.0.jar (873 kB at 114 kB/s)
[INFO] HTTP/3.0 request done, method=GET, resp status=200, url=https://artipie:8091/my-maven-proxy/org/springframework/spring-web/6.1.0/spring-web-6.1.0.jar.sha1
Downloaded from my-maven: https://artipie:8091/my-maven-proxy/org/springframework/spring-web/6.1.0/spring-web-6.1.0.jar (1.9 MB at 239 kB/s)
[INFO]
[INFO] --- resources:3.3.1:resources (default-resources) @ maven-http3 ---
[INFO] skip non existing resourceDirectory /w/src/main/resources
[INFO]
[INFO] --- compiler:3.11.0:compile (default-compile) @ maven-http3 ---
[INFO] No sources to compile
[INFO]
[INFO] --- resources:3.3.1:testResources (default-testResources) @ maven-http3 ---
[INFO] skip non existing resourceDirectory /w/src/test/resources
[INFO]
[INFO] --- compiler:3.11.0:testCompile (default-testCompile) @ maven-http3 ---
[INFO] No sources to compile
[INFO]
[INFO] --- surefire:3.1.2:test (default-test) @ maven-http3 ---
[INFO] No tests to run.
[INFO]
[INFO] --- jar:3.3.0:jar (default-jar) @ maven-http3 ---
[WARNING] JAR will be empty - no content was marked for inclusion!
[INFO] Building jar: /w/target/maven-http3-0.1.jar
[INFO]
[INFO] --- install:3.1.1:install (default-install) @ maven-http3 ---
[INFO] Installing /w/pom.xml to /root/.m2/repository/com/example/maven-http3/0.1/maven-http3-0.1.pom
[INFO] Installing /w/target/maven-http3-0.1.jar to /root/.m2/repository/com/example/maven-http3/0.1/maven-http3-0.1.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  17.494 s
[INFO] Finished at: 2023-12-13T06:58:40Z
[INFO] ------------------------------------------------------------------------

@dgarus please, take a look, let's discuss what to improve

@dgarus done, all the logs from plugin are visible in debug level only


[Enhancement Request] Create/Re-schedule Chore using Quartz cron format

Describe what did you try to do with TM1py
Would like to have a way to create/re-schedule chore using the Quartz cron format or expression, understood chore is not as flexible as normal cron job from other systems, but able to use similar syntax can speed up development if requiring something to be scheduled.
Format can refer to http://www.cronmaker.com/
Version

TM1py [e.g. 1.3.1]
TM1 Server Version: [e.g. 11.4]

Thanks for the suggestion @tatwong

Thanks for the suggestion @tatwong

Hi @tatwong,
I'm afraid TM1py can not accept a CRON format as a frequency definition.
The chore's frequency property in TM1 (e.g. P01DT00H00M00S) is much less sophisticated than the CRON scheduling format.


Calendar renew

Mockup for another calendar icon, this one for subscriptions.
Icon Request

Icon name: calendar-renew
Use case: subscription renewal

Wow you are always so fast @jguddas at refining these icons. I prefer the smaller arrow circles you have done on 3 of them then the larger circle. Works really well as a set.

1st, 4st and clockwise arrow 4st would be great to add it.

Related to https://github.com/lucide-icons/lucide/pull/1377#issuecomment-1601358629.


Data resource created instead of solid Container

I use

ldo "version": "0.0.1-alpha.24"
solid server "Node Solid Server 5.7.11" from https://solidcommunity.net/

I want to create a new solid Container in my root Container.
I call Container.createIfAbsent, with as uri <root>/my-solid-app/

note the trailing slash

A new data resource is created in the solid server, with as uri <root>/my-solid-app.ttl: NOK

note the extension ttl.

In the debugger, at @ldo/solid/src/requester/requests/createDataResource.ts#L213, is see in the headers of the POST request
{
    "content-type": "text/turtle",
    "slug": "my-solid-app",
    "link": "<http://www.w3.org/ns/ldp#Container>; rel=\"type\""
}

Which side does it wrong?

Ldo with the content type turtle?
Solid server with the creation of a ttl file instead of a Container?

have you tried it on " https://solidweb.me/" ?

https://solidweb.me/ is a public hosting of Community Solid Sever version 7.1.
We use that same server of that same version, locally hosted, for our development and the reported unexpected behavior does not happen.
Still Node Solid Server seems to be an mature alternative. We are surprised to see a discrepancy in the servers behaviors. Therefore our question.


WIP: Third stage tests

This PR addresses issue #
Please Check

[ ] Are the JSON schemas updated?
[ ] Are the api docs updated?
[ ] Are tests passing?

The 'how impacted will we be in the future' code needs the final_eps stuff to forecast. The seir model needs that whole eps timeseries (which it should get from the three stage fit). This just fixes the "suppression looks at the outdating code".


Allow react-native newer than 0.69 as peer dependency

As described in https://github.com/reduxjs/react-redux/issues/2106<EMAIL_ADDRESS>could not be installed due to conflicting peerDependency react-native.
PeerDependency react-native requires a minimum version of 0.69.0, while allowing newer versions, this pull request fixes https://github.com/reduxjs/react-redux/issues/2106 the NPM dependency handling introduced in 9.0.3.

Can you also rerun yarn to regenerate the lockfile?

Can you also rerun yarn to regenerate the lockfile?

Of course. Done


Is #### {Input type} by design?

in platyPS.schema.md, {Input type} is preceded by four #, where I would have expected the nesting level to be at three #, as is the case for {Parameter name}, {Output type} and {Example Name}.
Is this a design choice or a nesting error introduced in bbeba47?

Seems to be an error. Submitting pull request to the template.

Created pull request #33.

Good catch, thank you!


parameter data types

This may require a major version nr hike...

Hi @zipkid, thanks for this - reviewing now.

Hi there, @zipkid. Apologies for the thread necromancy — just tidying up so I don't leave you with an unresolvable PR.
Unfortunately we don't actually have anyone maintaining this repo any more as we no longer run Puppet. I'm about to archive this and a bunch of other Puppet-related repos that we haven't touched in a long time.
It's not really feasible for us to accept contributions at this point, as there's quite a bit of process involved on our side and we no longer have enough reviewers on our side who can review Puppet.
My apologies that we haven't signposted that we're no longer set up to receive outside contributions.
You're most welcome to fork, of course — not that that's much consolation. I'm sorry to be the bearer of bad news. I really appreciate that you want to contribute here and I'm sad that I can't help make that happen on this occasion 😞


Hope can provide a guide on how to test on custom data

To test on custom data, you can follow this tutorial to create one custom dataset class which is similar as Human36mDataset. Also, you need to provide the camera intrinsics and extrinsics.


Mesh hash uses GetInstanceID, which changes after unity restart

In the LevelLightMapData script, it tries to find the renderer based on the hash of the transform, gameobject name and hash. In Unity 2022.3.50f1, GetHashCode() on a mesh returns the instance ID. This value does not persist properly. This means that lightmap data is not applied to any of the meshes.
We've solved this locally by removing the mesh hash altogether, as we don't see much use for it. Perhaps changing it the hash of the mesh name would be a suitable alternative?

Has similar problem here.
In my case, those meshes with static batching has been combine randomly, so it seems be impossible to compare with mesh hash in any way?

Hello,
I think you're right and the mesh name should be enough. I will change this later but in the meantime you can try version 2019.3.3 that doesn't rely on these.
@Harrison-Chen if you're using static batching you cannot set light map scale and offset at runtime. The light map uv packing needs to be the same on your different scenarios and if that's the case just switching the light maps should be enough.


Add legacy template override option to general config

Adds option to select legacy template in the general section of the config.
Solves #2790

Checklist:

[ ] Commit Message Formatting: Commit titles and messages follow guidelines in the
conventional commits.
[ ] Changelog updated with breaking and/or notable changes for the next minor release.
[ ] Documentation has been updated, if necessary.
[ ] Unit tests have been added, if necessary.
[ ] Functional tests have been added, if necessary.
[ ] E2E Workflow tests have been added, if necessary.

@Mergifyio backport release-v0.22


pls help me .. :(

(tensorflow1) C:\tensorflow1\models\research\object_detection>python train.py --logtostderr --train_dir=training/ --pipeline_config_path=training/faster_rcnn_inception_v2_pets.config
Traceback (most recent call last):
File "train.py", line 51, in
from object_detection.builders import model_builder
File "C:\Users\Alper Z\Anaconda3\envs\tensorflow1\lib\site-packages\object_detection-0.1-py3.6.egg\object_detection\builders\model_builder.py", line 30, in
from object_detection.models import faster_rcnn_inception_resnet_v2_feature_extractor as frcnn_inc_res
File "C:\Users\Alper Z\Anaconda3\envs\tensorflow1\lib\site-packages\object_detection-0.1-py3.6.egg\object_detection\models\faster_rcnn_inception_resnet_v2_feature_extractor.py", line 28, in
from nets import inception_resnet_v2
ModuleNotFoundError: No module named 'nets'
ı have problem this error :(

Did you set the correct path?? If not, you should refer to this

yes again run to path is work, but ı have to another problem :(
(tensorflow1) C:\tensorflow1\models\research\object_detection>python train.py --logtostderr --train_dir=training/ --pipeline_config_path=training/faster_rcnn_inception_v2_pets.config
WARNING:tensorflow:From C:\Users\Alper Z\Anaconda3\envs\tensorflow1\lib\site-packages\tensorflow\python\platform\app.py:126: main (from main) is deprecated and will be removed in a future version.
Instructions for updating:
Use object_detection/model_main.py.
W1027 16:43:21.643006 16784 tf_logging.py:126] From C:\Users\Alper Z\Anaconda3\envs\tensorflow1\lib\site-packages\tensorflow\python\platform\app.py:126: main (from main) is deprecated and will be removed in a future version.
Instructions for updating:
Use object_detection/model_main.py.
WARNING:tensorflow:From C:\tensorflow1\models\research\object_detection\legacy\trainer.py:265: create_global_step (from tensorflow.contrib.framework.python.ops.variables) is deprecated and will be removed in a future version.
Instructions for updating:
Please switch to tf.train.create_global_step
W1027 16:43:21.939810 16784 tf_logging.py:126] From C:\tensorflow1\models\research\object_detection\legacy\trainer.py:265: create_global_step (from tensorflow.contrib.framework.python.ops.variables) is deprecated and will be removed in a future version.
Instructions for updating:
Please switch to tf.train.create_global_step
Traceback (most recent call last):
File "train.py", line 184, in
tf.app.run()
File "C:\Users\Alper Z\Anaconda3\envs\tensorflow1\lib\site-packages\tensorflow\python\platform\app.py", line 126, in run
_sys.exit(main(argv))
File "C:\Users\Alper Z\Anaconda3\envs\tensorflow1\lib\site-packages\tensorflow\python\util\deprecation.py", line 250, in new_func
return func(*args, **kwargs)
File "train.py", line 180, in main
graph_hook_fn=graph_rewriter_fn)
File "C:\tensorflow1\models\research\object_detection\legacy\trainer.py", line 279, in train
train_config.prefetch_queue_capacity, data_augmentation_options)
File "C:\tensorflow1\models\research\object_detection\legacy\trainer.py", line 59, in create_input_queue
tensor_dict = create_tensor_dict_fn()
File "train.py", line 121, in get_next
dataset_builder.build(config)).get_next()
File "C:\tensorflow1\models\research\object_detection\builders\dataset_builder.py", line 123, in build
num_additional_channels=input_reader_config.num_additional_channels)
File "C:\tensorflow1\models\research\object_detection\data_decoders\tf_example_decoder.py", line 297, in init
default_value=''),
File "C:\tensorflow1\models\research\object_detection\data_decoders\tf_example_decoder.py", line 59, in init
label_map_proto_file, use_display_name=False)
File "C:\tensorflow1\models\research\object_detection\utils\label_map_util.py", line 164, in get_label_map_dict
label_map = load_labelmap(label_map_path)
File "C:\tensorflow1\models\research\object_detection\utils\label_map_util.py", line 136, in load_labelmap
text_format.Merge(label_map_string, label_map)
File "C:\Users\Alper Z\Anaconda3\envs\tensorflow1\lib\site-packages\google\protobuf\text_format.py", line 533, in Merge
descriptor_pool=descriptor_pool)
File "C:\Users\Alper Z\Anaconda3\envs\tensorflow1\lib\site-packages\google\protobuf\text_format.py", line 587, in MergeLines
return parser.MergeLines(lines, message)
File "C:\Users\Alper Z\Anaconda3\envs\tensorflow1\lib\site-packages\google\protobuf\text_format.py", line 620, in MergeLines
self._ParseOrMerge(lines, message)
File "C:\Users\Alper Z\Anaconda3\envs\tensorflow1\lib\site-packages\google\protobuf\text_format.py", line 635, in _ParseOrMerge
self._MergeField(tokenizer, message)
File "C:\Users\Alper Z\Anaconda3\envs\tensorflow1\lib\site-packages\google\protobuf\text_format.py", line 735, in _MergeField
merger(tokenizer, message, field)
File "C:\Users\Alper Z\Anaconda3\envs\tensorflow1\lib\site-packages\google\protobuf\text_format.py", line 823, in _MergeMessageField
self._MergeField(tokenizer, sub_message)
File "C:\Users\Alper Z\Anaconda3\envs\tensorflow1\lib\site-packages\google\protobuf\text_format.py", line 735, in _MergeField
merger(tokenizer, message, field)
File "C:\Users\Alper Z\Anaconda3\envs\tensorflow1\lib\site-packages\google\protobuf\text_format.py", line 874, in _MergeScalarField
value = tokenizer.ConsumeString()
File "C:\Users\Alper Z\Anaconda3\envs\tensorflow1\lib\site-packages\google\protobuf\text_format.py", line 1237, in ConsumeString
the_bytes = self.ConsumeByteString()
File "C:\Users\Alper Z\Anaconda3\envs\tensorflow1\lib\site-packages\google\protobuf\text_format.py", line 1252, in ConsumeByteString
the_list = [self._ConsumeSingleByteString()]
File "C:\Users\Alper Z\Anaconda3\envs\tensorflow1\lib\site-packages\google\protobuf\text_format.py", line 1277, in _ConsumeSingleByteString
result = text_encoding.CUnescape(text[1:-1])
File "C:\Users\Alper Z\Anaconda3\envs\tensorflow1\lib\site-packages\google\protobuf\text_encoding.py", line 103, in CUnescape
result = ''.join(_cescape_highbit_to_str[ord(c)] for c in result)
File "C:\Users\Alper Z\Anaconda3\envs\tensorflow1\lib\site-packages\google\protobuf\text_encoding.py", line 103, in
result = ''.join(_cescape_highbit_to_str[ord(c)] for c in result)
IndexError: list index out of range

What is the tensorflow version?

tensorflow 1.8.0
libprotubuf : 3.5.2
zlip 1.2.11
protobuf 3.5.2

and now updated tensorflow version to 1.9.0

Hmm, I think there are three checks

Is there any other non-English character in your path?

Did you installed tensorflow-gpu, not just tensorflow.

Finally, you must make sure that nothing is missing from the installation process.

so ı have check  you say 1-2-3-  after ı agaın run to code now is another error message :
(tensorflow1) C:\tensorflow1\models\research\object_detection>python train.py --logtostderr --train_dir=training/ --pipeline_config_path=training/faster_rcnn_inception_v2_pets.config
Traceback (most recent call last):
File "train.py", line 51, in
from object_detection.builders import model_builder
File "C:\Users\Alper Z\Anaconda3\envs\tensorflow1\lib\site-packages\object_detection-0.1-py3.6.egg\object_detection\builders\model_builder.py", line 35, in
from object_detection.models import faster_rcnn_inception_resnet_v2_feature_extractor as frcnn_inc_res
File "C:\Users\Alper Z\Anaconda3\envs\tensorflow1\lib\site-packages\object_detection-0.1-py3.6.egg\object_detection\models\faster_rcnn_inception_resnet_v2_feature_extractor.py", line 28, in
from nets import inception_resnet_v2
ModuleNotFoundError: No module named 'nets'

Did you reboot the computer? The path you set previously seem to be removed.

okay now is restarting..

ı have same problem.. pls help me on teamviewer ?

copy and paste  (C:\TensorFlow\models\research\slim)  slim content folder   in
C:\ProgramData\Anaconda3\envs\tensorflow1\Lib\site-packages\object_detection-0.1-py3.5.egg\

Oh.. sorry, these days, I was so busy...

Hi, check this link
https://youtu.be/nZUxoHPFf4w
it is very simple,.,.,., you have to export the python path from( tf1.12\model\research folder)
in windows
Configure PYTHONPATH environment variable
set PYTHONPATH=C:\Users\kumar\Desktop\tf1.12\model;C:\Users\kumar\Desktop\tf1.12\model\research;C:\Users\kumar\Desktop\tf1.12\model\research\slim
for ubuntu:
Configure PYTHONPATH environment variable
export PYTHONPATH=C:\Users\kumar\Desktop\tf1.12\model;C:\Users\kumar\Desktop\tf1.12\model\research;C:\Users\kumar\Desktop\tf1.12\model\research\slim


Use arrow datasets for intermediates

JSON is a bit bulky. It's easy to view, but for intermediates, especially when using the UI, it does not make sense to store and query the intermediates as JSON.
We should have an option in a docetl config to store the intermediates as arrow datasets. We will then have to query them in the UI accordingly.

I am thinking we should have a different storage format altogether.
Motivation
Our current JSON-based workflow is inefficient for handling dynamic schema changes and row-level operations, leading to performance and scalability challenges. The optimizer requires efficient document sampling based on semantic similarity, and future operations may involve retrieval and sampling during execution. A more robust data format is needed to support these requirements seamlessly.
Problem

Dynamic Schema Evolution: Each LLM operation adds new keys (columns) to documents, necessitating frequent schema updates without rewriting entire records.
Efficient Row Operations: Operations like unnest and reduce modify rows by expanding or collapsing them, which is currently cumbersome and inefficient.
Optimized Sampling: The optimizer (will eventually) documents per operation based on semantic similarity, requiring efficient access and potential vector search capabilities.
Scalability & Performance: Managing and accessing data through numerous JSON files hampers scalability and slows down read/write operations.

Requirements

Single Row per Document: Maintain one row per document to avoid data duplication.
Dynamic Column Addition: Easily append new columns without shifting existing data.
Efficient Row Modifications: Support unnest and reduce operations without duplicating or collapsing rows inefficiently.
Sampling Integration: Enable efficient document sampling in the optimizer, with future support for retrieval/sampling during execution.
Scalable Metadata Management: Implement a lightweight metadata system to track schema and row indices.
Concurrency Support: Allow safe concurrent read/write operations to maintain performance and data integrity.


Major Update: Input Files, Comp Finder, Modular Phase Dgms

This update changes the user from primarily interacting with main.cpp to interacting with config files in the run directory. Magrathea is now run with ./planet run/mode_.cfg. In addition we finalized the composition finder moving it and the bulk input to earlier modes (3 and 4) and we made phase diagrams modular. It is now easy to save different phase diagrams in phase.cpp including ones with tabular EoS from the previous update and call them in the config files.

A few more additions coming


Update ValidatorResult to support varying levels of messages

Update the ValidatorResult class to support varying levels of messages, so that validator plugins can produce varying levels of messages for LSP diagnostics responses.
draft bit:

Do we want this story to also include altering validator results to support identifying the location for the diagnostic message? This would require additional work to correlate the error with a location, but it would circumvent the need to develop that in the diagnostics LSP issue.

AC:

[ ] The validator result supports messages over varying levels

[ ] Get messages by diagnostic level
[ ] Add message by diagnostic level
[ ] Get all messages should return a dictionary where the key is the diagnostic level and the value is all corresponding messages.

[ ] The ValidatorResult class uses an Enum class to define the available diagnostic message levels

[ ] The enum values match the enum values for the LSP DiagnosticSeverity class.

OBE by Cameron's work in preparing for Validations to support LSP diagnostics.


Maintain dirtiness and use retained engine layers

For #21756
The old PR is broken by Github again... I'll try to not reference that PR here to see if this PR will stay unbroken.

This is pretty close. The one main thing I think we should consider before landing is whether all the mutable fields on all the layer objects that exist today should be adjusted to mark the layer as dirty when mutated. Before they didn't because we assumed that we always walked the entire tree.

cc @goderbauer who may want to review this.

No, we missed it. Will post an announcement today. Thanks for the remind!
On Wed, Oct 31, 2018, 7:55 AM Amir Hardon<EMAIL_ADDRESS>wrote:

@amirh commented on this pull request.
In packages/flutter/lib/src/rendering/layer.dart
https://github.com/flutter/flutter/pull/23434#discussion_r229727791:

@@ -104,7 +169,29 @@ abstract class Layer extends AbstractNode with DiagnosticableTreeMixin {
S find(Offset regionOffset);

/// Override this method to upload this layer to the engine.

void addToScene(ui.SceneBuilder builder, [Offset layerOffset = Offset.zero]);

Did we make a a breaking change announcement for this?
This breaks anyone that extends Layer, e.g it broke #23412
https://github.com/flutter/flutter/pull/23412
—
You are receiving this because you modified the open/close state.
Reply to this email directly, view it on GitHub
https://github.com/flutter/flutter/pull/23434#discussion_r229727791, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AV7DMHLqF7T2mhEFJ1P2_rzeuiM4RFeQks5uqbnIgaJpZM4X21U6
.


Support homebrew installation

Like kubectl, helm etc

Here's what I'm using.
class Kubesec < Formula
  desc "A tool for encrypting and decrypting k8s secrets with AWS KMS"
  homepage "https://github.com/shyiko/kubesec"
  url "https://github.com/shyiko/kubesec/archive/0.9.0.tar.gz"
  sha256 "d36a81093322fdaaa2041f94a4efb7be978cabd691e2b88372e66f13550b4093"
  head "https://github.com/shyiko/kubesec.git"

  depends_on "go" => :build

  def install
    ENV["GOPATH"] = buildpath
    (buildpath/"src/github.com/shyiko/kubesec").install buildpath.children
    cd "src/github.com/shyiko/kubesec/cmd" do
      system "go", "get"
      system "go", "build", "-o", "#{bin}/kubesec"
    end
  end

  test do
    system bin/"kubesec"
  end
end

I took the chance and quickly created a homebrew tap for it. I took @dokipen formula (thx !) and added a --with-short-name flag that installs it as ksec
@shyiko I can transfer that repo to you if you like

Sure, let's do this. Thank you!

@shyiko I initiated the transfer of https://github.com/philicious/homebrew-kubesec to you

@dokipen @philicious thanks again!