how can i turn an evaluation integer to then get the move from that evaluation

i have been trying to implement a simple evaluation into my chess bot and right now i have the search for the best move function return a integer of the highest evaluation possible from each move however i cant quite seem to figure out how to turn that evaluation into the corosponding move that got that evaluation to then play the move.
here is the code for the search function:
    int Search (int depth)
    {
        if (depth == 0)
        {
            return Evaluate(board);
        }

        Move[] moves = board.GetLegalMoves();
        if (moves.Length == 0)
        {
            if (board.IsInCheck())
            {
                return int.MinValue;;
            }
            return 0;
        }

        int bestEvaluation = int.MinValue;

        foreach (Move move in moves)
        {
            board.MakeMove(move);
            int evaluation = -Search (depth - 1);
            bestEvaluation = Math.Max(evaluation, bestEvaluation);
            board.UndoMove(move);
        }

        return bestEvaluation;
    }

any help would be appreciated

hi, have you watched Sebastian's videos? He covers this stuff in depth, however i managed to come up with a function that did just what you want.

Initialize a integer called score
loop through the pieces on the board
check what color the pieces are and add if white, take if black
return score

I would replace foreach() with for() or added a counter variable to track index of which Move from moves is being evaluated.
I would add a variable containing index of current best move.
I would replace Math.Max with if(evaluation > bestEvaluation) and if it is true, I would set best move index to current index.
Then instead of bestEvaluation I would return best move index.

I would also like to add that my code definitely isn't efficient as i got stuck on looping through the pieces. I first used foreach loop to loop through all the pieces in the board.GetAllPieceLists() and the looped through each piece in each of those lists. Not very good but does the job.

Move[] moves = board.GetLegalMoves();
int Search(int depth)
        {
            if (depth == 0)
            {
                return Evaluate(board);
            }

            if (moves.Length == 0)
            {
                if (board.IsInCheck())
                {
                    return int.MinValue; ;
                }
                return 0;
            }

            int bestEvaluation = int.MinValue;
            int bestMoveIndex = 0;
            for(int i = 0; i < moves.Length; i++)
            {
                board.MakeMove(move[i]);
                int evaluation = -Search(depth - 1);

                if(evaluation > bestEvaluation)
                {
                    bestEvaluation = evaluation;
                    bestMoveIndex = i;
                }
                board.UndoMove(move[i]);
            }
            return bestMoveIndex;
        }
// A few lines later...
board.MakeMove(move[bestMoveIndex]);

Move[] moves = board.GetLegalMoves();
int Search(int depth)
        {
            if (depth == 0)
            {
                return Evaluate(board);
            }

            if (moves.Length == 0)
            {
                if (board.IsInCheck())
                {
                    return int.MinValue; ;
                }
                return 0;
            }

            int bestEvaluation = int.MinValue;
            int bestMoveIndex = 0;
            for(int i = 0; i < moves.Length; i++)
            {
                board.MakeMove(moves[i]);
                int evaluation = -Search(depth - 1);

                if(evaluation > bestEvaluation)
                {
                    bestEvaluation = evaluation;
                    bestMoveIndex = i;
                }
                board.UndoMove(moves[i]);
            }
            return bestMoveIndex;
        }
// A few lines later...
board.MakeMove(move[Search(5)]);

thank you for this, this is exactly what i was looking for however for some reason i am getting this error right at the start of a game

i think this has to do with the move not being undone properly or an illegal move is attempted but i dont see what in the code could have caused this issue.

hi, have you watched Sebastian's videos? He covers this stuff in depth, however i managed to come up with a function that did just what you want.

Initialize a integer called score
loop through the pieces on the board
check what color the pieces are and add if white, take if black
return score

please could you tell me which video you mean

this video is good for the basic algorithm: ### https://www.youtube.com/watch?v=U4ogK0MIzqk&t=1058s
while this one goes into more depth on different strategies of optimisation: ### https://www.youtube.com/watch?v=_vqlIPDR2TU&t=2565s

I'd watch the top link first, and implement it off of that

I'd watch the top link first, and implement it off of that

that is were i got the code for the search and evaluation algorithm but i cant seem to see what he does with the search function outpur at 15:05

I see, its pretty simple, something like this: `private int Evaluate(Board board)
{
int score = 0;
    foreach (PieceList pieceList in board.GetAllPieceLists())
    {
        foreach (Piece piece in pieceList)
        {
            if (piece.IsWhite)
            {
                if (piece.IsPawn) score += 1;
                else if (piece.IsKnight) score += 3;
                else if (piece.IsBishop) score += 3;
                else if (piece.IsRook) score += 5;
                else if (piece.IsQueen) score += 9;
                else if (piece.IsKing) score += 20000;
            }
            else
            {
                if (piece.IsPawn) score -= 1;
                else if (piece.IsKnight) score -= 3;
                else if (piece.IsBishop) score -= 3;
                else if (piece.IsRook) score -= 5;
                else if (piece.IsQueen) score -= 9;
                else if (piece.IsKing) score -= 20000;
            }
        }
    }

    return score;
}`

And in the video he shows the if statement saying if depth == 0: evaluate(board)

And in the video he shows the if statement saying if depth == 0: evaluate(board)

Okay, I made a terrible mistake.
Search function must return evaluations when run recursively, but I made it return move indexes.
So the logic is utter nonsense inside it.

I see, its pretty simple, something like this: `private int Evaluate(Board board) { int score = 0;
    foreach (PieceList pieceList in board.GetAllPieceLists())
    {
        foreach (Piece piece in pieceList)
        {
            if (piece.IsWhite)
            {
                if (piece.IsPawn) score += 1;
                else if (piece.IsKnight) score += 3;
                else if (piece.IsBishop) score += 3;
                else if (piece.IsRook) score += 5;
                else if (piece.IsQueen) score += 9;
                else if (piece.IsKing) score += 20000;
            }
            else
            {
                if (piece.IsPawn) score -= 1;
                else if (piece.IsKnight) score -= 3;
                else if (piece.IsBishop) score -= 3;
                else if (piece.IsRook) score -= 5;
                else if (piece.IsQueen) score -= 9;
                else if (piece.IsKing) score -= 20000;
            }
        }
    }

    return score;
}`

i have somthing very similar to this in my code:
public static int Evaluate(Board board)
{
    const int pawnValue = 100;
    const int knightValue = 250;
    const int bishopValue = 300;
    const int rookValue = 500;
    const int queenValue = 900;

    PieceList[] pieces = board.GetAllPieceLists();

    int whitePoints = 0;
    whitePoints += pieces[0].Count * pawnValue;
    whitePoints += pieces[1].Count * knightValue;
    whitePoints += pieces[2].Count * bishopValue;
    whitePoints += pieces[3].Count * rookValue;
    whitePoints += pieces[4].Count * queenValue;

    int blackPoints = 0;
    blackPoints += pieces[5].Count * pawnValue;
    blackPoints += pieces[6].Count * knightValue;
    blackPoints += pieces[7].Count * bishopValue;
    blackPoints += pieces[8].Count * rookValue;
    blackPoints += pieces[9].Count * queenValue;

    int eval = whitePoints - blackPoints;

    int mapRange = (board.IsWhiteToMove) ? 1: -1;

    Console.WriteLine(eval * mapRange);
    return eval * mapRange;
}

but i use this in the score function but what would i do with the best evaluation value in order to get the move from it?

Okay, I made a terrible mistake. Search function must return evaluations when run recursively, but I made it return move indexes. So the logic is utter nonsense inside it.
Exception happens when evaluation returns an int which is out of bounds for moves[] array, but still gets plugged into it. So if Evaluate returns something like -1, Think function tries to return moves[-1]; Which causes a crash.

would you happen to know a solution to this??

No, unfortunately but would you be able to post your whole code so its easier to understand?

No, unfortunately but would you be able to post your whole code so its easier to understand?

ok, here is the whole piece of code:
using ChessChallenge.API;
using System;
using System.Collections;
using System.Collections.Generic;
public class MyBot : IChessBot
{
public Move Think(Board board, Timer timer)
{
Move[] captures = board.GetLegalMoves(true);
Move[] moves = board.GetLegalMoves();
    Move mov = new();
    System.Random rnd = new();
    //Move[] LondonSystem = {new Move("d2d4",board),new Move("g1f3",board),new Move("c1f4",board),new Move("e2e3",board),new Move("f1d3",board),new Move("b1d2",board),new Move("c2c3",board),};

    Move BestMove = mov;

    int Search(int depth)
    {
        if (depth == 0)
        {
            return Evaluate(board);
        }

        if (moves.Length == 0)
        {
            if (board.IsInCheck())
            {
                return int.MinValue; ;
            }
            return 0;
        }

        int bestEvaluation = int.MinValue;
        int bestMoveIndex = 0;
        for(int i = 0; i < moves.Length; i++)
        {
            board.MakeMove(moves[i]);
            int evaluation = -Search(depth - 1);

            if(evaluation > bestEvaluation)
            {
                bestEvaluation = evaluation;
                bestMoveIndex = i;
            }
            board.UndoMove(moves[i]);
        }
        return bestMoveIndex;
    }

    Move bestMove = moves[Search(4)];

    return bestMove;
}

public static int Evaluate(Board board)
{
    const int pawnValue = 100;
    const int knightValue = 250;
    const int bishopValue = 300;
    const int rookValue = 500;
    const int queenValue = 900;

    PieceList[] pieces = board.GetAllPieceLists();

    int whitePoints = 0;
    whitePoints += pieces[0].Count * pawnValue;
    whitePoints += pieces[1].Count * knightValue;
    whitePoints += pieces[2].Count * bishopValue;
    whitePoints += pieces[3].Count * rookValue;
    whitePoints += pieces[4].Count * queenValue;

    Console.WriteLine("White Score: ", whitePoints);

    int blackPoints = 0;
    blackPoints += pieces[5].Count * pawnValue;
    blackPoints += pieces[6].Count * knightValue;
    blackPoints += pieces[7].Count * bishopValue;
    blackPoints += pieces[8].Count * rookValue;
    blackPoints += pieces[9].Count * queenValue;

    Console.WriteLine("Black Score: ", blackPoints);

    int eval = whitePoints - blackPoints;

    int mapRange = (board.IsWhiteToMove) ? 1: -1;

    Console.WriteLine("Evaluation: ", eval * mapRange);
    return eval * mapRange;
}

}
there are a couple of things from previous experiments left behind but they do not effect any of the code to my knowledge.

Search return evaluation of a current position, affected by evaluations of positions that can be created from it to the selected depth.
So, to get evaluations for all legal moves of current side, one must make each of the moves, run Search and save the results, in an Array, for example.
Then, find the largest evaluation for a move and play corresponding move.
public Move Think(Board board, Timer timer)
    {
        Move[] moves = board.GetLegalMoves();

        // array of the same size as moves array
        // index i of evals array contains evaluation of a move at index i in moves array
        int[] evals = new int[moves.Length];

        // Make move, evaluate the board
        // Save evaluation at the same index as played move's index
        for(int i = 0; i < moves.Length; i++)
        {
            board.MakeMove(moves[i]);
            evals[i] = Search(1);
            board.UndoMove(moves[i]);
        }

        int Search(int depth)
        {
            // Legal moves for different board states are different
            // Therefore each cycle of recursion must use its own move array
            Move[] s_moves = board.GetLegalMoves();

            if (depth == 0)
            {
                return Evaluate(board);
            }

            int bestEvaluation = int.MinValue;
            for(int i = 0; i < s_moves.Length; i++)
            {
                board.MakeMove(s_moves[i]);

                int evaluation = -Search(depth - 1);
                bestEvaluation = Math.Max(evaluation, bestEvaluation);

                board.UndoMove(s_moves[i]);
            }
            return bestEvaluation;
        }

        // Evaluation function
        int Evaluate(Board board)
        {
           // Create your function here
            return 0;
        }
        // Array.IndexOf(some_value) returns index of element with provided value
        // evals.Max() returns value of largest element
        // I did it like this instead of a simple loop
       // to save some tokens
        return moves[Array.IndexOf(evals, evals.Max())];
    }

@WhiteMouse1 I just tested that on my end and it works. @chavchilon you should be good, here is the full working code:

`using ChessChallenge.API;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
public class MyBot : IChessBot
{
public Move Think(Board board, Timer timer)
{
Move[] moves = board.GetLegalMoves();
    // array of the same size as moves array
    // index i of evals array contains evaluation of a move at index i in moves array
    int[] evals = new int[moves.Length];

    // Make move, evaluate the board
    // Save evaluation at the same index as played move's index
    for (int i = 0; i < moves.Length; i++)
    {
        board.MakeMove(moves[i]);
        evals[i] = Search(1);
        board.UndoMove(moves[i]);
    }

    int Search(int depth)
    {
        // Legal moves for different board states are different
        // Therefore each cycle of recursion must use its own move array
        Move[] s_moves = board.GetLegalMoves();

        if (depth == 0)
        {
            return Evaluate(board);
        }

        int bestEvaluation = int.MinValue;
        for (int i = 0; i < s_moves.Length; i++)
        {
            board.MakeMove(s_moves[i]);

            int evaluation = -Search(depth - 1);
            bestEvaluation = Math.Max(evaluation, bestEvaluation);

            board.UndoMove(s_moves[i]);
        }
        return bestEvaluation;
    }

    // Evaluation function
    int Evaluate(Board board)
    {
        // Create your function here
        return 0;
    }
    // Array.IndexOf(some_value) returns index of element with provided value
    // evals.Max() returns value of largest element
    // I did it like this instead of a simple loop
    // to save some tokens
    return moves[Array.IndexOf(evals, evals.Max())];
}

public static int Evaluate(Board board)
{
    const int pawnValue = 100;
    const int knightValue = 250;
    const int bishopValue = 300;
    const int rookValue = 500;
    const int queenValue = 900;

    PieceList[] pieces = board.GetAllPieceLists();

    int whitePoints = 0;
    whitePoints += pieces[0].Count * pawnValue;
    whitePoints += pieces[1].Count * knightValue;
    whitePoints += pieces[2].Count * bishopValue;
    whitePoints += pieces[3].Count * rookValue;
    whitePoints += pieces[4].Count * queenValue;

    Console.WriteLine("White Score: ", whitePoints);

    int blackPoints = 0;
    blackPoints += pieces[5].Count * pawnValue;
    blackPoints += pieces[6].Count * knightValue;
    blackPoints += pieces[7].Count * bishopValue;
    blackPoints += pieces[8].Count * rookValue;
    blackPoints += pieces[9].Count * queenValue;

    Console.WriteLine("Black Score: ", blackPoints);

    int eval = whitePoints - blackPoints;

    int mapRange = (board.IsWhiteToMove) ? 1 : -1;

    Console.WriteLine("Evaluation: ", eval * mapRange);
    return eval * mapRange;
}

}`

@chavchilon You probably want to look into adding some more in depth (pun intended) alpha beta pruning as i don't think you have any, just minimax at the moment. That is also outlined in his video and he made a whole video on alpha beta pruning with the minimax algorithm here: https://www.youtube.com/watch?v=l-hh51ncgDI

@WhiteMouse1 @CaptainDeathead, Thank you guys so much the code now works fine with a couple of tweaks to check whether the bot is white or black. @CaptainDeathead i am now thinking of adding alpha beta tweaking and eval ordering but i just wanted to get the raw min max working. i cant thank you guys enough you have saved me multiple hours or potentially days of head scratching.

I will add a strong warning about signs.
Don't mix 'em up or you will end up like my bot, with King always rushing into enemy pieces.

Yeah i seemed to get lucky with mine and it worked, but after seeing Sebastian's second chess video i tried making a chess ai in python c# java and c++ so i kind of flew through this as I'd already done one in C# but my python one was troublesome, it got stuck a lot blundering pieces and not caring about king safety but practice has helped a lot so just keep trying new things out and exploring new ideas. (Also you probably want to close the thread, and good luck!)


add SCI_{S,G}ETWHITESPACECHARS exposed as WhitespaceChars

see #54

Note: we don't use the setter in our application, hence the fixup commit that I did (because I didn't test it before). But I think this should work. The code is similar to other properties.

Thank you!


My first bug test, just mocked with basics

Summary
A clear and concise description of what the bug is.
User Information
User data used for the bug (do not provide the pass unless you are part of testing team)
Steps to Reproduce

HereGoesTheFirstStep

Actual Result
A clear and concise description of what is happening on this scenario.
Expected Result
A clear and concise description of what you expected to happen.
Screenshots
If applicable, add screenshots to help explain your problem.
Environment (please complete the following information):

Device: [e.g. Desktop]
OS: [e.g. Windows 10]
Browser [e.g. chrome, safari]
Browser version [e.g. 22]

Additional context
Add any other context about the problem here.

It was a test to check the issue gets uploaded to the project and to the related status In Analysis


Redhat packer http endpoint for boot media

Description of changes:
Packer's vsphere plugin does not work well in figuring our the ip address on our CI environment. There is currently no way to control this from the user. This change figures out the ip address in the image build workflows and sets the appropriate endpoint.
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

/lgtm
/approve


Drop all the pinned requirements

Upper constraints will keep us safe.
Change-Id: I7913c9430f2c395126061c1edc5304e257e9367c

retest

retest

👍

retest

retest

retest


createListenSocketP2P crashes

Describe the bug
Calling createListenSocketP2P with an empty array crashes to desktop with a log entry like this:
ERROR: FATAL: Index p_index = 0 is out of bounds (((Vector *)(this))->_cowdata.size() = 0).
at: VectorWriteProxy::operator [] (.\core/vector.h:49) - FATAL: Index p_index = 0 is out of bounds (((Vector *)(this))->_cowdata.size() = 0).
To Reproduce
Call createListenSocketP2P
Expected behavior
The function to work properly, w/o crashing.
Desktop (please complete the following information):

OS: Win10

Version of Godot:
3.5.1
Version of GodotSteam:
3.5.1 pre-built editor
Additional context
Inspecting the code, there are some size_of calls to Array objects, such as in Steam::convertOptionsArray, which are seemingly intended to return the number of array elements, whereas, afaik, they actually return the Array object size in bytes instead 🤔.
P.S.: Thanks a lot for GodotSteam - it's awesome 👍

Hey there and welcome! Glad you found the project useful.  And yeesh, I will look into it and get it patched up. Thanks for letting me know!

OK, I went in and fixed up the code.  createListenSocketP2P now correctly returns an integer instead of crashing.  The fix will be out in the next version.  Thanks again for reporting this!

Oh, I thought I had responded to this!  The patch should indeed be in place. I also fixed it in other branches of the project.  Sorry about that!  Test it out and let me know.

No problem!  I should have replied on both!  Do keep me posted!


ci: pnpm cache

3mins -> 37s

🎉

@himself65 It seems like the cache only works for ubuntu, and for macos and windows, ci installs playwright every time, saying it doesn't find a cache.
https://github.com/dai-shi/waku/actions/runs/11258656376/job/31305801590?pr=958


Adjust HadoopDruidIndexer to allow for pulling credentials out of something other than the config

The HadoopDruidIndexer currently requires various credentials (namely the DB) to exist in the config, it would be easier to share those configs around if we didn't require that and instead took them from a runtime.properties file like all the other processes do.

Looks no longer relevant, since these days the index_hadoop task takes configs from runtime properties.


Inc on array throws AccessViolationException

This code kills Cake.
int[] v = new int[] { 0}; v[0]++;
Running on Windows 10 x64.
Exception:

Unhandled Exception: System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at Submission#0.<.ctor>b__0()
at Cake.Core.ActionTask.Execute(ICakeContext context)
at Cake.Core.DefaultExecutionStrategy.Execute(CakeTask task, ICakeContext context)
at Cake.Core.CakeEngine.ExecuteTask(ICakeContext context, IExecutionStrategy strategy, Stopwatch stopWatch, CakeTask task, CakeReport report)
at Cake.Core.CakeEngine.RunTarget(ICakeContext context, IExecutionStrategy strategy, String target)
at Cake.Scripting.BuildScriptHost.RunTarget(String target)
at Submission#0..ctor(Session session, Object& submissionResult)
at Submission#0.(Session session)
at Roslyn.Scripting.CommonScriptEngine.Execute[T](String code, String path, DiagnosticBag diagnostics, Session session, Boolean isInteractive)
at Roslyn.Scripting.Session.Execute(String code)
at Cake.Core.Scripting.ScriptRunner.Run(IScriptHost host, FilePath scriptPath, IDictionary2 arguments)    at Cake.Commands.BuildCommand.Execute(CakeOptions options)    at Cake.CakeApplication.Run(IEnumerable1 args)
at Cake.Program.Main()

Confirmed issue, but works as expected with experimental & mono.

Closed since #1645 been merged to develop. Feel free to reopen this if it's still a problem after 0.22.0 have been released.


fullScreenControlOptions.position changes position of zoom control

With this:
var map = L.map(mapElement, {
    //...
    fullscreenControl: true,
    fullscreenControlOptions: {
        position: 'bottomright'
    },

    zoomControl: true,
    zoomControlOptions: {
        position: 'topleft'
    },
    //.....
};

Expected:
The zoom control should be on the top left and the fullscreen control should be on the bottom right.
Observed
Both are on the bottom right.

You should use forceSeparateButton an add fullscreen control manually to achieve that, cf :
L.control.fullscreen({
  position: 'bottomright', // change the position of the button can be topleft, topright, bottomright or bottomleft, default topleft
  forceSeparateButton: true, // force separate button to detach from zoom buttons, default false
}).addTo(map);

Ok so there is a workaround (poorly documented if at all), but it's still a bug. Or a bad design which is just another type of bug.
There's no need for a forceSeparateButton at all.
If I don't specify a position for your control, then it makes sense to put it by default together with the zoom control, and if there is no zoom control, at the topleft. It's a nice default.
If I do specify a position for your control but I don't specify any position for the zoom control, it's pretty obvious that I want the zoom control to be at its default position (which is topleft) and yours at whatever position I have specified. If those are not the same position, then forceSeparateButton should be assumed in this case. It's nonsensical and counterintuitive (and not documented) that the position that I specify for your control becomes also the position of the zoom control.
And even more so if I do specify both positions explicitly and they are different. If I say I want the zoom control on the topleft and yours at bottom right, then obviously I want them separated.

Ok so there is a workaround (poorly documented if at all), but it's still a bug. Or a bad design which is just another type of bug.

U're really welcome, I'm so pleased to help you :)

If I don't specify a position for your control, then it makes sense to put it by default together with the zoom control, and if there is no zoom control, at the topleft. It's a nice default.

I think this kind of automagic behavior is not the a way to help people understand your, my or ervery one else "logic".
Anyway, feel free to provide a PR if you think this script or the doc could be better.

I think this kind of automagic behavior is not the a way to help people understand your, my or ervery one else "logic".

I'm not sure what you mean by that.
I'm describing what the behavior should be (and there's nothing automagic about it), from a user standpoint regardless of implementation details or difficulties.
Is my description of the expected behavior unclear or do you disagree that that is what one should expect?
Is the current behavior the way it is just because it was easier to implement, or do you have arguments to support the superiority of the current behavior?

U're really welcome, I'm so pleased to help you :)

Oh sorry I forgot to say how grateful I am that you developed this amazing library and share it for free. I thought that was understood (otherwise I wouldn't take the time to come here and report a bug or suggest an improvement).

Oh sorry I forgot to say how grateful I am that you developed this amazing library and share it for free.

Nice or sarcastic... let's say it's nice :)
Before we try to work together to make things better, i think we should :

look at how the official (and unsuppported) plugin work https://github.com/Leaflet/Leaflet.fullscreen/blob/gh-pages/dist/Leaflet.fullscreen.js
plan what we want to do for the present script

defautl position is topleft

if there isn't zoom control, add a standalone (forceSeparateButton) FS control
if there is a zoom control, add FS control linked to it

if position is different than topleft and this position is different than the one specified for zoom control, add a standalone FS control

in order to keep backward compatibility, if forceSeparateButton is specified, use it in any case

Does this plan reflect your thoughts ?

I would rather describe it as follows (and I don't think it's exactly the same):

if there isn't a zoom control, add a standalone FS control.

in which case, if a position for FS is specified, use that, otherwise use topleft by default

if instead there is a zoom control, then:

if no position for FS is specified, put it below the zoom control (I guess "linked to" zoom control?), whatever its position is (it may or may not be topleft, it may be set explicitly or by Leaflet's defaults, it doesn't matter)

if a position for FS is specified AND it's different from the zoom control's position (again, this is not necessarily topleft), then put the FS as a standalone control at the specified position

if a position for FS is specified and it is the same as the one of the zoom control (again, may or may not be topleft), then put it below the zoom control.

Oh and also:

whatever the combination of settings is, I should be able to either specify them as map options on map creation, or add the control manually with addTo().
If for whatever reason that's not possible, then I'd seriously consider dropping the options-on-map-creation option completely. I would rather be forced to use addTo to begin with, than have the false impression of simplicity and then be forced to switch to using it when I find out that the first model only cover a subset of options.
If, however, what I just said is a bad idea and you opt for supporting a map-option syntax that only cover a subset of cases, to make the plugin easier to use for all-default or mostly-default usage, then one thing that you really should avoid at all cost is that a FS-specific setting (like fullScreenControlOptions.position or whatever it was) changes the position of the Zoom Control (neither when the latter is not set explicitly, nor even worse when it is). That is not acceptable under any circumstances.

This is based on the assumption that you want to maintain the loosely-defined "under the Zoom control by default" and "topleft by default if standalone" design decisions that seem to be the starting point of your design. I don't have a strong opinion on whether or not that should be the default. It's one reasonable default.
If it was up to me, i would suggest to put the FS on the bottom-right by default (therefore separate by default). That is where the fullscreen control of most fullscreen-able stuff usually is (most video players, for example). And it is completely unrelated to the zoom control anyway.
And then I would question: does it even make sense to "link or not link" the FS control  to the zoom control? To me, they are two distinct, unrelated controls. They either are in different positions or in the same position (where by position I mean topleft, bottomright, etc). If they are in the same position then the question arises of how to arrange them to not have a conflict: one on top of the other, one next to the other, which one on top or which one first, etc. That sounds to me like a general problem when several controls have the same position. Doesn't Leaflet already have a framework for that? (genuinely asking, I don't know). Is there anything to be gained by "linking" the control to another one?

in order to keep backward compatibility, if forceSeparateButton is specified, use it in any case

I don't think it's possible to maintain complete BC while at the same time honoring the behavior described above. If you mean keep the most possible BC, I guess whatever you deem necessary. I really don't know what meaning forceSeparateButton (and therefore "use it in any case") can have  in the context of the new behavior. If the position of the two controls is different, then forceSeparate would have no effect anyway. If it's the same position, what effect would forceSeparate have? Do you mean force them to be separate controls in the same position? Again, I don't know how Leaflet normally treats two controls that have the same (topleft|bottomright|etc) position: if it allows you to arrange them nicely, then I don't see the need for ever having them not separated.

Let me take some arguments of @php4fan and create a list of what happens when we create a fullscreen control with different options:

by default the fullscreen button is added to the zoomControl (see README.md right after the second gray box in How?)
If you don't have a zoomControl the button will be created in a container of its own. The default position of this container is the default position of leaflet controls - the topleft corner of the map (see README.md same position).
If you want the button in a separate container use the forceSeparateButton option (see the api documentation in the README.md).
If you want to modify the position of the button container use the position option (see the api documentation in the README.md).

The only point that may be surprising is the fact that the position option will even do its work, if you add the fullscreen button to the zoomControl. In that case the position of the zoom-Control with the added fullscreen button is changed.
I think that it wold be a good idea, to add this fact to the readme.
But I can see no bugs in the handling of the options,; just some design decisions - that you may agree to / like or not.

@php4fan would like to provide an update to document this in the readme ?

no

So nothing was changed in the end?


Evict DNS and RTT stale entries everytime we evict flows table

Its possible we can have DNS queries w/o any responses or RTT entries w/o replies those entries will be there for ever, since we can't use LRU because we don't know when entries will be deleted and its very large memory footprint we will evict those entries in the user space every time we evict flows hash table by default every 5 seconds.
This is follow up for https://github.com/netobserv/netobserv-ebpf-agent/pull/162
No CPU or memory obvious impact with this PR

/ok-to-test

@msherif1234 can we add a check here like clear the entries which are 5s/10s earlier and are still there (which means they are stale I mean)?
we need to check this against Mono clock.

@msherif1234 can we add a check here like clear the entries which are 5s/10s earlier and are still there (which means they are stale I mean)? we need to check this against Mono clock.

@dushyantbehl I am not following, this code will be invoked every 5s so entries at this points are been there for 5s w/o been deleted by bpf code, can u explain/clarify more ?

/ok-to-test

Thanks @msherif1234 for adding the timeout. I just feel one small thing that since we are handling three maps with one funciton maybe we can make a map manager and handle all three inside of it..
Currently the flow is passed via LookupAndDeleteMap function which acts on bpf metrics and is a bit misleading.

other than that looks good to me

Thanks @msherif1234 for adding the timeout. I just feel one small thing that since we are handling three maps with one funciton maybe we can make a map manager and handle all three inside of it.. Currently the flow is passed via LookupAndDeleteMap function which acts on bpf metrics and is a bit misleading. WDYT?
other than that looks good to me.

I created new interface to handle features map I think is more cleaner WDYT ?

/approve


[Java][CI] Set up Arrow Java support for JDK8 and JDK11+

Describe the enhancement requested
Currently, Arrow Java is using JDK11 to compile the code, and it offers JDK8 support with source/target 8.
We will eventually need to compile with JDK11 and use source/target 11. The main challenge will be excluding clients that need to continue using JDK8.
The following are the options for moving to JDK11:

In order to continue offering support for JDK 8, cross-compile with JDK 11+ and package with release=8:
If we compile with --release=8, we will have trouble accessing sun.misc.Unsafe, which is not as exposed/public/documented (https://openjdk.org/jeps/247).

Discontinue support for JDK8.

Set up Arrow Java flavors for JDK8 and JDK11+.

This enhancement consider the changes needed to implement the 3rd option mention above: Set up Arrow Java flavors for JDK8 and JDK11+.

New Arrow Java library should be offering support for JDK8 and JDK11+ throughout different maven artifacts (adding classifier support).

arrow-memory-core-15.0.0-SNAPSHOT.pom
arrow-memory-core-15.0.0-SNAPSHOT-tests.jar
arrow-memory-core-15.0.0-SNAPSHOT.jar
arrow-memory-core-15.0.0-SNAPSHOT-javadoc.jar
arrow-memory-core-15.0.0-SNAPSHOT-sources.jar
arrow-memory-core-15.0.0-SNAPSHOT-cyclonedx.json
arrow-memory-core-15.0.0-SNAPSHOT-cyclonedx.xml
arrow-memory-core-15.0.0-SNAPSHOT-jdk8tests.jar
arrow-memory-core-15.0.0-SNAPSHOT-jdk8.jar

New Arrow Java library should be offering default support for JDK11 (major version: 55)

Java libraries by default will offer JDK11 support (major version: 55):
  <dependency>
    <groupId>org.apache.arrow</groupId>
    <artifactId>arrow-memory-core</artifactId>
    <version>15.0.0-SNAPSHOT</version>
  </dependency>

If the user need to use JDK8 as a mandatory, then they need to change from-to:

From:
  <dependency>
    <groupId>org.apache.arrow</groupId>
    <artifactId>arrow-memory-core</artifactId>
    <version>15.0.0-SNAPSHOT</version>
  </dependency>

To JDK8 (major version: 52):
<dependency>
  <groupId>org.apache.arrow</groupId>
  <artifactId>arrow-memory-core</artifactId>
  <version>15.0.0-SNAPSHOT</version>
  <classifier>jdk8</classifier>
</dependency>

Component(s)
Continuous Integration, Developer Tools, Documentation, Java

Closing since we decided to consider deprecating Java 8 in the future.


Failure to load using explicit file: URI scheme

May I use the file: URI scheme explicitly? I believe it used to work some months ago, but it doesn't right now.
$ openssl genrsa -out pubkey.pem
$ openssl pkey -in file:pubkey.pem
C077A7B6647F0000:error:80000002:system library:file_open:No such file or directory::0:calling stat(file:pubkey.pem)
C077A7B6647F0000:error:1C8000DB:Provider routines:file_open:path must be absolute::0:Given path=pubkey.pem

The file: scheme doesn't allow relative paths, and our loaders have been coded accordingly.  You might think of OSSL_STORE_attach(), which allows you to pass a BIO and a scheme to associate it with.  Do note that I don't expect other store loaders than for the file: scheme to support this feature...
So, the proper way to do what you want is openssl pkey -in file:$(pwd)/pubkey.pem

But openssl pkey -in pubkey.pem works even with the relative path. That's also correct?

But openssl pkey -in pubkey.pem works even with the relative path. That's also correct?

Yes.  For backward compatibility, we allow relative paths when there's no explicit scheme given.  It's the explicit file: that makes all the difference in interpretation.

(But for users unaware of this it's quite surprising though.)

So this isn't sufficient (from the new doc/man1/openssl-pkey.pod)?

Input options
-in filename | uri
This specifies the input to read a key from or standard input if
this option is not specified.  ...

Do we have somewhere that describes what URI schemes we support and what the format of those URI schemes is?

The file: scheme doesn't allow relative paths

Note that the original file scheme was explicitly not hardwired to absolute paths https://datatracker.ietf.org/doc/html/rfc1738#section-3.10 and that is what you will find most users remain conceptually used to.
Nothing was actually said about absolute or relative with respect to the path in the RFC - it was just a "path".

Do we have somewhere that describes what URI schemes we support and what the format of those URI schemes is?

We have doc/man7/ossl_store-file.pod...  which needs a bit of an update.

@t-j-h, what a relative path means is up for interpretation, or well, can be made relative to a base.
So for example, I just noticed that current Firefox does support relative paths, and has / as the base...  file:foo.pem gets rewritten to file:///file.pem, file:foo/bar.pem to file:///foo/bar.pem, file:../foo/bar.pem to file:///foo/bar.pem.
Is this what "most users remain conceptually used to"?


during on grid reload , Cannot read properties of undefined (reading 'w2ui.expanded')

Short description
A clear and concise description of the problem
the code is working v1.5
but i got error as below in  v2.0
"Cannot read properties of undefined (reading 'w2ui.expanded') "
What is current behavior
...
What is desired behavior
...
Link to jsfidle/codepan with sample code
...
Steps to reproduce or sample
...

the grid reload screen

I think I fixed it. However, to be fully sure, can you please create a jsfiddle page with the error. It is hard to find the line, as you are using compiled w2ui.js, and the lines do not match in my version.
Anyway, I hope it is fixed.

Hi vitamlina,
Thank you very much for your reply.
below is the jsfiddle example on v2.0
It's working on v1.5 of grid , but still got error on v2.0 on "grid.columns"
Pls click button "change columns" on jsfiddle
https://jsfiddle.net/m3ws9154/6/

Hello Vitali,
Thank you very much for your reply.
below is the jsfiddle example on v2.0
It's working on v1.5 of grid , but still got error on v2.0 on "
grid.columns"
Pls click button "change columns" on jsfiddle
https://jsfiddle.net/m3ws9154/6/
2022년 12월 11일 (일) 오전 11:40, Vitali Malinouski @.***>님이
작성:

Closed #2343 https://github.com/vitmalina/w2ui/issues/2343 as completed
via e0de72c
https://github.com/vitmalina/w2ui/commit/e0de72cdbb0c14283d6a8a26b22db9b11c07cb34
.
—
Reply to this email directly, view it on GitHub
https://github.com/vitmalina/w2ui/issues/2343#event-8006360134, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/ATDMYPZ5P3QFTSKYBRLTHALWMU5IXANCNFSM6AAAAAASWSFBFM
.
You are receiving this because you authored the thread.Message ID:
@.***>

Fixed. Your js fiddle will work with latest files: here is the link, https://jsfiddle.net/o093nqyk/2/

Hello Vitali,
Great!!    w2ui is Great one.
Actually, I didn't think you reply to this request.
Thank you very much.
2022년 12월 12일 (월) 오전 1:57, Vitali Malinouski @.***>님이
작성:

Fixed. Your js fiddle will work with latest files: here is the link,
https://jsfiddle.net/o093nqyk/2/
—
Reply to this email directly, view it on GitHub
https://github.com/vitmalina/w2ui/issues/2343#issuecomment-1345604139,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ATDMYP2JJH7SOKYJMF6DJWDWMYBXXANCNFSM6AAAAAASWSFBFM
.
You are receiving this because you authored the thread.Message ID:
@.***>


Build sample project with different Kotlin versions on CI

Adds the ability to configure PokoSample's Kotlin version, and uses that capability to test 2.0.10-RC on CI without changing the Kotlin version used to compile Poko itself.

Caused by: java.lang.NoSuchMethodError: 'void org.jetbrains.kotlin.gradle.targets.js.ir.DefaultIncrementalSyncTask.setDuplicatesStrategy(org.gradle.api.file.DuplicatesStrategy)'

I don't understand what's going on here. On this line, CopySpec.setDuplicatesStrategy and DefaultIncrementalSyncTask.getDuplicatesStrategy are being invoked. DefaultIncrementalSyncTask.setDuplicatesStrategy is not being invoked, although it should exist nonetheless, because duplicatesStrategy is a var.

Updated to just test 2.0.10-RC for now, will have to follow up on the previous error later.


wait for model to move back to device when using .enable_model_cpu_offload()

When using .enable_model_cpu_offload() if the model is currently offloaded to cpu, generating a normal image waits for the model to load back onto the gpu before generating. When using hypertile, it does not wait for the model and I get found at least two devices, cuda:0 and cpu! on the first generation. It works fine after that until offloading occurs and then once again the first generation will fail.

It looks like this may have been a race condition when using a large VAE in combination with enable_model_cpu_offload(). It will require more testing but I have worked around it for now.


Weak character matches given more priority than better acronym match

Hi @jeancroy, here is another scenario where I think acronym score is weak:
candidates:
sft/Tests/Plugins/GulpImportStepPerformer.js
sft/Tests/Plugins/Cloud/GulpImportStepPerformer.js
sft/Tests/tft/Reporting/Tools/teams/dev50/sftRobotic/GssHelper.js
search query:
sft/gisp.js
results:
sft/Tests/tfat/Reporting/Tools/teams/dev50/sftRobotic/GssHelper.js
sft/Tests/Plugins/GulpImportStepPerformer.js
sft/Tests/Plugins/Cloud/GulpImportStepPerformer.js
expected:
sft/Tests/Plugins/GulpImportStepPerformer.js
sft/Tests/Plugins/Cloud/GulpImportStepPerformer.js
sft/Tests/tfat/Reporting/Tools/teams/dev50/sftRobotic/GssHelper.js
GssHelper.js doesn't even contain gisp in-order but still scored higher than better acronym matches.

Hi, if you look at the code, there's the concept of "acronym prefrix".
Basically it's an heuristic that try to decide if you are looking for an acronym or consecutive letters.
And that heuristic require you to to put acronym to the start of the query.
Why the start ? Because that early there's no backtracking.  (The cleanest way out of this I believe is multi-word support. That would be to try and segment the query into words and restart acronym prefix search on each words, however without backtracking there's no garanties those prefix wont overlap.)
So in query sft/gisp.js , sft/ is working against you.
Moreover, the path separator character (/ or \ depending on environement) is special  sft/gisp.js is really interpreted as sft should be found in the immediate parent folder of gisp.js, and that's another reason sftRobotic ranks so well. I'll agree it's not documented or universally understood that way, so maybe I'll disable the behavior or make it optional.
For now i'll suggest using something like sgisp.js or s gisp.js or stp gisp.js or s t p gisp.js
prehaps another way to bias your way toward acronym is the uppercase-means-uppercase rule, while lowecase can match either case. It's not implemented but other fuzzy libraries are successful with it.

Aha! I see it now, thanks @jeancroy for explaining it in details.
I always thought a scoped acronym query sft/gisp.js is better that gisp.js but it turned out to be other way round.
The main concern is GssHelper.js is scored highest which in no way relates to query gisp and it becomes worse on highlighting which feels like a bug.

I understand that we don't want to backtrack so early especially to score acronym but how about a LCS b/w candidate's StartOfWord and query, something of this sort:
sft/Tests/Plugins/GulpImportStepPerformer.js -> s/T/P/GISP
sft/Tests/tfat/Reporting/Tools/teams/dev50/sftRobotic/GssHelper.js -> s/T/t/R/T/t/d/s/GH
Having them, if we try LCS for query sft/gisp.js the first will be scored higher. Currently, the problem is we have a scoreAcronym routine that gives out ZERO for all three candidates in this case. It exhausts the query even before it hits the actual acronyms.
thoughts?

That may work.
However the computation of " is something an acronym ", camelCase, snake_case etc is actually super expensive. The trick I have found is to not compute it unless  a[i] == b[j] which is infrequent.
In order to compare query with acronym form over lcs, we would  require categorization of every character of the subject.  (There might be some efficient way to store and reuse those, we'll have to think / benchmark )

I'm thinking along the following line
on this line
make accro_score an array instead of a constant.
so we sould have something like that after segmentation of query in words and then evaluation acronym of each words.
sft/gisp.js
00004444000

Agree on that, that will be way more cleaner and performant. Only concern I see is it make that code more unreadable where it is already a bit tough to follow and understand.

@jeancroy, any development for this issue? Thanks.

I'll put some time on making this works this weekend.
Seeing the other topic about edlo editor localisation mayne your lcs on acronym space is the most correct idea.


Geodeticdatum additionalprops

Added new properties to Geographic Coordinate Systems. Source and Target ellipsoid definitions are essential when 2 or more geodetic transforms are chained and the fallback for grid file transforms is usefull for Australian grid files that are not defined in the center of Australia.

Still unclear why equals and to/fromJSON are internal.

Still reflecting but I think to/fromJSON ought to be public and 'equal' remain internal. Since 'equal' is a strict compare and not a functional compare (it also compares descriptive info and not only defining parameters) I think it would be useless to clients. It is usefull for the unit tests but not much more.


Changing the UI of BLOG Page to a better one

How would you like to enhance the existing project.
Figma Design

I want to the change the UI of BLOG page to this one 👍🏻
Here user can search blog by topics also.
Describe breifly how would you implement the same.
Just need to add some changes JSX and CSS of existing files,
most probably some new components may be needed to introduced in your repo
Are you contributing for a program?
GSSoC23
Code of Conduct

[X] I follow CONTRIBUTING GUIDELINE of this project.

creating new issue with new ui problem


Global Error Handling

Note: Visual studio updated some namespaces in the feature tests automatically, they are included in this PR to true up those files.
This adds global error handling which will return either the resource you requested with an expected response code... OR, a standardized error payload that does not change. This handles model state validation as well as thrown and uncaught exceptions.
This also allows you to throw exceptions with specific types, override error codes and http status codes and is rather extensible for error codes using enums or a resource lookup. I added an example to the movie controller that you can test in swagger. This is not meant to be a "one size fits all" solution and should be extended when client requirements dictate different error code lookups. I generally also add a configuration setting in appsettings to hide/show the stacktrace in the payload, should you want to expose that in lower environments.
This is also incredibly important for modern web projects that consume a blackslope api, as it allows interceptors to be added to http/fetch functionality to automatically trigger should it see an error and pop a toast, as the payload is always consistent and full of details.
This has been added to numerous slalom projects to great success, so finally taking the time to add it to the root project.  Please reach out to me on slack should you have any questions or want to see it in action.


Fix modelstub and checkstyle

This pull request includes several changes to the AddScheduleCommand and AddCommandTest files to improve the functionality and maintainability of the codebase. The most important changes include removing an unused import and adding a new method to handle meeting checks.
Codebase cleanup:

src/main/java/seedu/address/logic/commands/AddScheduleCommand.java: Removed the unused import statement for ArrayList.

Functionality improvements:

src/test/java/seedu/address/logic/commands/AddCommandTest.java: Added the hasMeeting method to the test class to handle meeting checks, ensuring that the method throws an AssertionError if called.

resolved


rake assets:precompile or db:setup will try to connect to the database, but, there is no database.

when database is not setup before, or  build a docker image or  deploy to a new server fist time
ActiveRecord::NoDatabaseError and PG::ConnectionBad:  will got
the error stack trace to
https://github.com/jrochkind/attr_json/blob/544f8e9388ec2ffdf261fce4daa3bb403c2bd535/lib/attr_json/attribute_definition.rb#L43
when bundle exe  rake assets:precompile, i  got
rake aborted!
PG::ConnectionBad: could not connect to server: No such file or directory
	Is the server running locally and accepting
	connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
/usr/local/bundle/gems/pg-1.1.3/lib/pg.rb:56:in `initialize'
/usr/local/bundle/gems/pg-1.1.3/lib/pg.rb:56:in `new'
/usr/local/bundle/gems/pg-1.1.3/lib/pg.rb:56:in `connect'
...

when bundle exec rake db:setup , i got
Caused by:
app_1            | PG::ConnectionBad: FATAL:  database "xxxxxx" does not exist
app_1            | /usr/local/bundle/gems/pg-1.1.3/lib/pg.rb:56:in `initialize'
app_1            | /usr/local/bundle/gems/pg-1.1.3/lib/pg.rb:56:in `new'
app_1            | /usr/local/bundle/gems/pg-1.1.3/lib/pg.rb:56:in `connect'
app_1            | /usr/local/bundle/gems/activerecord-5.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:692:in `connect'
app_1            | /usr/local/bundle/gems/activerecord-5.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:223:in `initialize'
app_1            | /usr/local/bundle/gems/activerecord-5.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:48:in `new'
app_1            | /usr/local/bundle/gems/activerecord-5.2.2/lib/active_record/connection_adapters/postgresql_adapter.rb:48:in `postgresql_connection'
app_1            | /usr/local/bundle/gems/activerecord-5.2.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:811:in `new_connection'
app_1            | /usr/local/bundle/gems/activerecord-5.2.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:855:in `checkout_new_connection'
app_1            | /usr/local/bundle/gems/activerecord-5.2.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:834:in `try_to_checkout_new_connection'
app_1            | /usr/local/bundle/gems/activerecord-5.2.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:795:in `acquire_connection'
app_1            | /usr/local/bundle/gems/activerecord-5.2.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:523:in `checkout'
app_1            | /usr/local/bundle/gems/activerecord-5.2.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:382:in `connection'
app_1            | /usr/local/bundle/gems/activerecord-5.2.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:1010:in `retrieve_connection'
app_1            | /usr/local/bundle/gems/activerecord-5.2.2/lib/active_record/connection_handling.rb:118:in `retrieve_connection'
app_1            | /usr/local/bundle/gems/activerecord-5.2.2/lib/active_record/connection_handling.rb:90:in `connection'
app_1            | /usr/local/bundle/gems/activerecord-5.2.2/lib/active_record/type.rb:52:in `current_adapter_name'
app_1            | /usr/local/bundle/gems/activerecord-5.2.2/lib/active_record/type.rb:41:in `lookup'
app_1            | /usr/local/bundle/gems/attr_json-0.4.0/lib/attr_json/attribute_definition.rb:43:in `initialize'
app_1            | /usr/local/bundle/gems/attr_json-0.4.0/lib/attr_json/model.rb:112:in `new'
app_1            | /usr/local/bundle/gems/attr_json-0.4.0/lib/attr_json/model.rb:112:in `attr_json'

Oh, that's too bad. Thanks for the good error report.
I used to use ActiveModel::Type.lookup, but the ActiveModel date types don't cast timezones properly, so I switched to ActiveRecord::Type.lookup.
That is annoying that apparently you can't do that without a database. Hmm. I'll try to look into it more.
Is precompiling assets before you have a database setup something you normally do? And it normally works, when you aren't using attr_json?
I'm curious why the precompile assets was trying to load the model at all. Ah, are you in Rails production mode, so it's eager loading all files?

Oh, but the bundle exec rake db:setup doesn't work for you either. That is definitely not ordinary. Hmm, very odd. Can you paste (maybe into a gist.github.com) the entire stack trace, as well as your entire model class source code (where you define the attr_json's)?

Hmm, I just made a simple "hello world" kind of app with Rails 5.2.2 and attr_json.
I was able to bundle exec rake assets:precompile without a database being created yet, and also was able to bundle exec rake db:setup no problem.  Also tried with RAILS_ENV=production, still no problem.
So it's something specific to your app. If it's something in attr_json, I do want to figure out and see if it can be improved.
But just to rule it out, I wonder if it's not actually related to attr_json at all. I am curious, if you can try, if you remove all the attr_json calls from your model code, and try to assets:precompile or db:setup, I wonder if you still get the error anyway?

thanks for your awesome gem, and thanks for your response about this issue
i tried many ways to reproduce the error in simple hello world app, then the error is reproduce, i push the repo to  https://github.com/huobazi/hello
but,  I'm very confused. because any two or one of the three gems (devise action-store attr-json）  will work fine, but the three will make error together.
the full trace is https://gist.github.com/huobazi/1a7b9742aa31741ef95d5d1e83a64890
STEP
make a simple app with rails <IP_ADDRESS>.
then  add attr_json,
it looks like very fine when assets:precompile and db:setup
then  add the gem devise
it also looks like fine.
then  add the gem action-store
🐛 error is reproduce...

Nice job making a reproduction, thanks. That is disconcerting. I'll try to find some time to analyze it and try to understand what's going on.

OK, this is a weird and challenging one.
Indeed, the attr_json :my_string, :string can't be evaluated without a db existing. We'll get to more about why that is later.
 I'm not sure why it doesn't load the model before trying to execute the task, even with eager loading turned on, but we'll just accept that and move on.
The combination of devise and action-store results in your model file being loaded earlier in db:setup (and other rake tasks), and causing an exception.

 The User class alone could load fine in your demo app, because it doesn't use attr_json. But.
3 Since your User class has action_store :favorite, :item, it triggers a load of the Item class.
Which does have attr_json, which then tries to define an attr_json property with type :string, which triggers the exception when the database isn't there.

I suspect this would also happen without action_store, if your User class had an association to a class with attr_json (but I'm not sure) -- and definitely if your user class had attr_json itself.
So this is probably attr_jsons fault. Even though a typical out of the box Rails app can do rake tasks without loading models, it probably ought to be possible to load the model files even without the database created yet, because without attr_json it is.
So why does attr_json make it raise?
When you say attr_json :some_string, :string, attr_json tries look up that :string argument with ActiveRecord::Type.lookup(type).
That implementation by default calls it's own private current_adapter_name method, in case there are special adapter-specific type overrides. current_adapter_name tries to establish a db connection, just to get the adapter name.  :(
Why are we using ActiveRecord::Type.lookup instead of ActiveModel::Type.lookup?  Because ActiveModel::Type date and time types don't work with multi-param assignment, like ActiveRecord ones are, leading to confusing behavior with attr_json :date and :datetime types where you can't use the Rails default select menu inputs.
What should we do? What is the thing that is actually wrong?

A) Arguably it is a bug that ActiveModel::Type's don't work with multi-param date assignments. Should we file this bug with Rails and/or a PR?  Maybe, but my experience with Rails is it might just sit there without attention, or Rails devs may think it is appropriate the way it is.

B) Should ActiveRecord::Type#current_adapter_name be able to get the adapter name without actually making a connection?  Probably. I think it could by doing ActiveRecord::Base.connection_config[:adapter] instead of ActiveRecord::Base.connection.adapter_name.downcase.to_sym. I may file that PR, but it may just sit there, or there may be reasons my solution doesn't work. (I have verified that this would fix our problem though).

C) Should attr_json use ActiveModel::Type instead of ActiveRecord::Type? That would mean either breaking multi-param date assignment under default use, or doing something special to normally use ActiveModel::Type, but use a custom type of some kind for :date and :datetime. This seems convoluted either way.

D) Can attr_json not load the types as soon as the class loads, wait until there is actually a database connection to use them?  It is at least theoretically possible. We already use attributes_to_define_after_schema_loads to try trigger code only after connection is loaded in another case. But I'm not sure if that is really public Rails API, and it just seems like an over-complicated solution, risking further weird interactions.

E) Can attr_json use ActiveRecord::Type under current activerecord code, without triggering a connection call?  It turns out, yes, if we do: ActiveRecord::Type.lookup(whatever, adapter: nil). This will mean it will never use any database-specific type code... which is actually maybe preferable.

What will I do
I think I will implement "E".  The hard part is making a test that proves model classes can be loaded without a db connection. I think I can do that though.
I think I will make a PR to Rails for "B", and file an issue for "A". Although I'm not holding my breath for action to be taken on either, and it wouldn't be in a Rails release probably until 6 anyway.
I may sit on this a while to think about it first. This was a lot of text, sorry! @onomated, you're my code buddy here who knows something about this code other than me, if you have any time/interest in reading this over and giving feedback, I'd appreciate it!
@huobazi If you want a temporary work-around, and I know this is ugly and not great, you could do either of these, on every single attr_json call:
attr_json :my_string, ActiveModel::Type.lookup(:string)
attr_json :my_string, ActiveRecord::Type.lookup(:string, adapter: nil)

(I have verified these will work)
Phew, that was a lot! Thanks for the report and your work to make a good reproduction!

On "A", ActiveModel::Type::Date and DateTime already have code that appears to look like it's supposed to handle multi-param assignment. I will have to do more investigation on what wasn't working to be able to file a Rails GH issue.

(B) is hard to PR to rails too. :(  ActiveRecord::Base.connection_config[:adapter] doesn't always return the same string as ActiveRecord::Base.connection.adapter_name.downcase.to_sym. For instance sqlite vs sqlite3. May not have time to figure out how to PR or GH Issue to Rails in a productive way, might just keep working around locally.

@huobazi I went ahead and merged to master. Let me know if it resolves for you?
I think I just ran into a similar problem too, so was glad I had already investigated in response to this issue! Thanks for trying out attr_json and reporting your problems!


feat: add option to interact with pubsub topics

Issue #, if available:
Description of changes:
Add options to monitor pub/sub topics and be able to interact with them.
Why is this change necessary:
When developing applications on Greengrass it could be useful to be able to manually interact with the pub/sub.
How was this change tested:
Here are the results for below manual tests both on Unix and Windows test environment.
And for both root user and for non-root user (e.g create a clitester user and a cligroup, add clitester into cligroup, provide authentication in the deoployment configuration).
local topic publish command
local topic subscribe command
mqtt topic publish command
mqtt topic subscribe command
mqtt topic pub/sub commands with --qos parameter
TestResultsForTopicPubSubCommands.zip
Any additional information or context required to review the change:
By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

Here are the results for below manual tests both on Unix and Windows test environment.
And for both root user and for non-root user (e.g create a clitester user and a cligroup, add clitester into cligroup, provide authentication in the deoployment configuration).

local topic publish command
local topic subscribe command
mqtt topic publish command
mqtt topic subscribe command
mqtt topic pub/sub commands with --qos parameter
TestResultsForTopicPubSubCommands.zip

if you don't specify either --pubsub or --iotcore what happens? That should be an error, we need exactly one of those to be specified.

yes, if the user does not input either --pubsub or --iotcore option in the command, they will be asked to offer either in the command by the error message. (red line in the screen shot)

if you don't specify either --pubsub or --iotcore what happens? That should be an error, we need exactly one of those to be specified.

yes, if the user does not input either --pubsub or --iotcore option in the command, they will be asked to offer either in the command by the error message. (red line in the screen shot)

The error messages should be agnostic of publish or subscribe operations. In the example the use is specifying a subscribe operation but the message reads "--pubsub: To send local message".

The error messages should be agnostic of publish or subscribe operations. In the example the use is specifying a subscribe operation but the message reads "--pubsub: To send local message".

Hi @massi-ang , here is the latest version of the error message, please have a look and see if it is fine.

The message is fine, but I have some other feedback about the command as a whole.

consider if instead of having topic [pub | sub] [--iotcore | --pubsub] -t=<topic> you should instead use pubsub [pub | sub] -t=<topic> and iotcore [pub | sub] -t=<topic> -q=<qos>. It would be: 1/ more compact 2/ remove the repetition of topic as command and --topic as option
the help message for -q does not tells what that flag is for.
--iotcore and --pubsub should be flags and not accept values, but the help message seems to indicate that, albeit enclosed in square brackets. It would be better is the help message read in the same way as for --help

@massi-ang @MikeDombo , here are the main test results of the new commands, more results pls refer to the attachment on top.

@MikeDombo What's the use case for subscribing with CLI?

@MikeDombo What's the use case for subscribing with CLI?

It has been requested for development and debugging purposes. https://github.com/aws-greengrass/aws-greengrass-cli/issues/155

It has been requested for development and debugging purposes. https://github.com/aws-greengrass/aws-greengrass-cli/issues/155

I'm not seeing a lot of utility aside from validating that the topic names are correct and IoT thing policy is correctly configured for IoT Core pub/sub. This wouldn't help with debugging component code or AuthZ policies you need to configure, which is where customers seem to struggle the most. @massi-ang could you elaborate on how developers would benefit from this?

You can easily view local pubsub traffic or inject pubsub events as well without needing to write component code to push data.


Not showing import.

I have re-installed this plugin so many times but no matter what I do I never get the option to import an se file or anything I dont get to normally with blender.

Read this: https://github.com/dtzxporter/io_model_semodel/issues/11#issuecomment-875322622


[Snyk] Security upgrade gatsby-transformer-remark from 5.3.0 to 6.0.0

This PR was automatically created by Snyk using the credentials of a real user.Snyk has created this PR to fix one or more vulnerable packages in the `npm` dependencies of this project.
Changes included in this PR

Changes to the following files to upgrade the vulnerable dependencies to a fixed version:

package.json
package-lock.json

Vulnerabilities that will be fixed
With an upgrade:

Severity
Priority Score (*)
Issue
Breaking Change
Exploit Maturity

646/1000  Why? Proof of Concept exploit, Has a fix available, CVSS 6.5
Validation Bypass SNYK-JS-SANITIZEHTML-1070780
Yes
Proof of Concept

539/1000  Why? Has a fix available, CVSS 6.5
Access Restriction Bypass SNYK-JS-SANITIZEHTML-1070786
Yes
No Known Exploit

479/1000  Why? Has a fix available, CVSS 5.3
Regular Expression Denial of Service (ReDoS) SNYK-JS-SANITIZEHTML-2957526
Yes
No Known Exploit

684/1000  Why? Has a fix available, CVSS 9.4
Arbitrary Code Execution SNYK-JS-SANITIZEHTML-585892
Yes
No Known Exploit

(*) Note that the real score may have changed since the PR was raised.

Commit messages

Package name: gatsby-transformer-remark
    The new version differs by 250 commits.

0c6cd61 chore(release): Publish
5e8e621 chore: Update main README (#36954)
7130cd4 test(gatsby): Slices API integration tests (#36747)
6496eed chore(release): Publish next
bc7ac84 chore: preserve previous webpack stats derived values, even if we restart webpack itself (#36980)
2b5af32 fix: drop `__renderedByLocation` prop when calculating slice props hashes and don't expose it to slice component (#36979)
cc1ee9b chore(release): Publish next
6a53861 chore(gatsby-link): Correct type export (#36968)
0ad6314 fix(gatsby-graphiql-explorer): Use upstream exporter package (#36966)
964265c chore(release): Publish next
b624442 chore: Update peerDeps (#36965)
b2ab092 chore(release): Publish next
e2a14bf feat(gatsby): Slices <> partial hydration interop (#36960)
0083e62 fix(deps): update starters and examples gatsby packages to ^4.24.7 (#36957)
68e9cab chore(changelogs): update changelogs (#36958)
b9eb8d2 chore(deps): update dependency autoprefixer to ^10.4.13 for gatsby-plugin-sass (#36934)
58c37ea chore(deps): update dependency @ jridgewell/trace-mapping to ^0.3.17 for gatsby-legacy-polyfills (#36933)
a5e4c47 fix(deps): update dependency body-parser to ^1.20.1 for gatsby-source-drupal (#36940)
c86aa7e chore(docs): Add clarification for Pro Tip on Part 4 of tutorial (#36918)
d5c775a feat(gatsby): handle graphql-import-node bundling (#36951)
59e2976 feat(gatsby-remark-embed-snippet): added csproj to language map so it will be recognized as xml (#36919)
c8a7dda chore(docs): Valhalla Content Hub Reference Guide (#36949)
3044280 fix(gatsby): stitch slices if just page html was regenerating without any of used slices regenerating (#36950)
10abdcb chore(release): Publish next

See the full diff

Check the changes in this PR to ensure they won't cause issues with your project.

Note: You are seeing this because you or someone else with access to this repository has authorized Snyk to open fix PRs.
For more information:
🧐 View latest project report
🛠 Adjust project settings
📚 Read more about Snyk's upgrade and patch logic

Learn how to fix vulnerabilities with free interactive lessons:
🦉 Regular Expression Denial of Service (ReDoS)
🦉 Arbitrary Code Execution

👷 Deploy Preview for velvety-travesseiro-c6be85 processing.

Name
Link

🔨 Latest commit
9d8d4ebca91e6e188122cd4abe55d25f21e05803

🔍 Latest deploy log
https://app.netlify.com/sites/velvety-travesseiro-c6be85/deploys/636b71b0cf41d100089d8686


Fix: #910. Add swagger-ui to requirements. Update connexion version.

Fixes #910  .
Changes proposed in this pull request:

add connexion[swagger-ui] to requirements.txt
update connexion to 2.2.0

close and reopen for travis

:+1:


[typescript] adds declaration to sdks/typescript/tsconfig.json

fixes #26299, adds type declarations

Thank you for your contribution! Follow this checklist to help us incorporate your contribution quickly and easily:

[ ] Mention the appropriate issue in your description (for example: addresses #123), if applicable. This will automatically add a link to the pull request in the issue. If you would like the issue to automatically close on merging the pull request, comment fixes #<ISSUE NUMBER> instead.
[ ] Update CHANGES.md with noteworthy changes.
[ ] If this contribution is large, please file an Apache Individual Contributor License Agreement.

See the Contributor Guide for more tips on how to make review process smoother.
To check the build health, please visit https://github.com/apache/beam/blob/master/.test-infra/BUILD_STATUS.md
GitHub Actions Tests Status (on master branch)

See CI.md for more information about GitHub Actions CI.

to get the quickstart example to work the imports still are a little off. They'd have to be
import * as beam from "apache-beam";
import * as runner from "apache-beam/dist/src/apache_beam/runners";
import { requireForSerialization } from "apache-beam/dist/src/apache_beam/serialization";

but I don't want to mess with the project structure

there then seems to be an issue with the generated code. I'm going to leave the issue open but close this PR. Happy to contribute further just seems like considerable changes may need to be made to make the package consumable via npm.


Add Router

Link to relevant issue
This pull request resolves #
Description of changes
Include a description of the proposed changes.

Hey @markwallace-microsoft!
Thanks for contributing these changes! Would you actually be open to adjusting this PR so this addition of react-router is contained in a separate sample extension named hello-world-react-router?
I've tried to keep all the hello-world extension samples consistent in terms of higher-level architecture, so adding a router in the hello-world-react-cra sample but not in any of the other framework samples feels like it would stray from that goal.

Also if you could update your PR comment to provide a short list of what you've changed that would be greatly appreciated too :) –– it will help me review this PR more easily
Feel free to reference old PR comments like #126, if that helps


Add a saturation strategy that preserves the expected robot motion

This other option for saturating the twist command preserves the expected robot motion. I had a good experience using it with quadrotors a while back, and I'm using now for differential drive robots with good results. It is one method of Control Allocation, namely Direct Control Allocation. I know it's unrelated, by I've published a paper a while back on the subject, I'm adding the link here (minor self-promotion...).

the technique totally makes sense! Thanks a lot, also for the reference to your paper ;-)


[vcpkg] update msys2-runtime version to 3.4.6-1

Fixes https://github.com/microsoft/vcpkg/issues/30542
msys2-runtime-3.2.0-8-x86_64.pkg.tar.zst is no longer available on https://repo.msys2.org/msys/x86_64/, updated to the latest version msys2-runtime-3.4.6-1.
Error message:
Downloading https://mirrors.sjtug.sjtu.edu.cn/msys2/msys/x86_64/msys2-runtime-3.2.0-8-x86_64.pkg.tar.zst
error: Failed to download from mirror set
error: https://repo.msys2.org/msys/x86_64/msys2-runtime-3.2.0-8-x86_64.pkg.tar.zst: failed: status code 404

[ ] Changes comply with the maintainer guide
[ ] SHA512s are updated for each updated download
[ ] The "supports" clause reflects platforms that may be fixed by this new version
[ ] Any fixed CI baseline entries are removed from that file.
[ ] Any patches that are no longer applied are deleted from the port's directory.
[ ] The version database is fixed by rerunning ./vcpkg x-add-version --all and committing the result.
[ ] Only one version is added to each modified port's versions file.

Replying to follow. This one is holding up our release.

Replying to follow. This one is holding up our release.

Note that there is a "Subscribe" button. It wouldn't generate e-mail notifications to subscribers.

Why is this repo.msys2.org mirror still used? It always breaks so we have to pull recent changes from vcpkg to our private fork.  We've pulled changes a couple of weeks ago, and now this is broken again. Maybe use some mirror that does not have old versions deleted? E.g. https://mirrors.piconets.webwerks.in/msys2-mirror (listed in https://www.msys2.org/dev/mirrors).

Old packages are removed from the msys2 repos 1.5 years after an update. This is plenty of time to update vcpkg, or to make your local copy to feed in via asset caching or downloads.
Nevertheless I would like to catch this more automatically: https://github.com/microsoft/vcpkg/pull/29067

Disappearing download links are bad for reproducible builds. Updating vcpkg might require changes in your app which means that you basically lose the ability to build your released versions exactly as they were at the time of release.

I'm glad to see that this passes CI on first run. :tada:

Would merging this immediately solve downstream issues? Or would we need to wait for a new release?

Should this PR be merged? Looking forward to it.

Disappearing download links are bad for reproducible builds. Updating vcpkg might require changes in your app which means that you basically lose the ability to build your released versions exactly as they were at the time of release.

vcpkg needs to make this a priority, we all can't live at head. Stable, reproducible builds are critical. We had to update vcpkg to the February release for this same issue. As other have commented, I can see a few approaches to making this more stable:

Microsoft mirrors versions
Document how to maintain a local mirror

vcpkg has been great for us for three years, but a few more issues like this and I'll invest the time in looking at other package managers.

Document how to maintain a local mirror

https://learn.microsoft.com/en-us/vcpkg/users/assetcaching
also storing the DOWNLOADS folder was always a way to make sure stuff stays available.

Is a real catastrophe to lose the ability to build old versions of an app because someone decided to expire download links.
There needs to be some better systematic way to keep old artifacts around if upstream maintainers are going to behave like this.

Just doing git-bisect and this slaps me into my face.
1.5 years is a very short time. If it were 10 years I would be (more) OK with it.
Why aren't they storing it anyway? The storage requirements are SO LOW, and if nobody requests it all you are doing is storing it essentially for free 😡.

Is the problem of reproducibility / expiring assets something that vcpkg maintainers are looking into? Is there an issue to follow on the subject?
Was just hit by this for mingw/i686/mingw-w64-i686-libwinpthread-git-<IP_ADDRESS>73.5be8fcd83-1-any.pkg.tar.zst

Please update your vcpkg and use the clean source, the acquire version of libwinpthread in vcpkg is: "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-libwinpthread-git-10.0.0.r234.g283e5b23a-1-any.pkg.tar.zst".

Is the problem of reproducibility / expiring assets something that vcpkg maintainers are looking into? Is there an issue to follow on the subject?

AFAIK there is no specific issue.

You should always be able to use the latest (unversioned) vcpkg build scripts. (That's what the previous comment suggests.)
I contributed a test port which helps to monitor the msys2 packages for age, so updates could happen early. (If they pass CI. This is ad different story.) The earlier the update, the more you get from msys2's package availability. (ATM they keep package for 1.75 years after an update was made available.)
The msys2 package go through normal asset caching. You should configure caching in your CI to get control of expiring external assets. And there is also your local cache in downloads.


Added a unit vector to the cartesian3 class

added (1.0, 1.0, 1.0) as a constant unit vector just like UNIT_X, UNIT_Y, UNIT_Z.

@hanbollar, thanks for the pull request! Maintainers, we have a signed CLA from @hanbollar, so you can review this at any time.

I am a bot who helps you make Cesium awesome! Contributions to my configuration are welcome.
:earth_africa: :earth_americas: :earth_asia:

@hanbollar what is this useful for?  Also, I wouldn't call this a unit vector.  A unit vector has a magnitude of 1

@hpinkos I personally have had a lot of times where i needed a vector of (1.0, 1.0, 1.0) either for initialization or for debugging, etc and its a fundamental vector that can be very useful. just the same way we already have IDENTITY and ZERO for matrices. i can rename it to ONE for usage purposes.
lmk what you think

Sorry, I just don't think this is super useful in a general sense.  Especially since it's frozen, if you need a vector that will be mutated later you'll have to do var v = Cartesian3.clone(Cartesian3.ONE)); and at that point it's just easier to do var v = new Cartesian3(1.0, 1.0, 1.0)


Fixed issue with absent Background

I has the same issue. Could you publish the version 0.1.4 please ?

@RealByron it is published: https://www.npmjs.com/package/cucumber-json-report-formatter/v/0.1.4

@RealByron it is published: https://www.npmjs.com/package/cucumber-json-report-formatter/v/0.1.4

Sorry, that was a synchronization delay in our nexus server. Thank you for the response


SeaState: combine SeaSt_Interp into SeaSt_WaveField, and bug fix

This is ready for merging
@luwang00, please review.
@RBergua, please check that this now works for your model.
Feature or improvement description
There was a bug in the how the indices for time in the wave field data was calculated when deltaT was zero.  This resulted in nonsensical bounds for time, which caused a segmentation fault during interpolation.
Included in this PR:

SeaState_Interp has been combined into the SeaSt_WaveField module.  While attempting to find the root issue, it became obvious that there was no reason to keep these separated.  This includes revisions to how the misc vars and parameters are stored for WaveField.
Parts of HydroDyn were directly accessing the SeaState_Interp routines.  New interfaces were provided within SeaSt_WaveField so that the WaveField discretization information could be used in HydroDyn to find the indices and weighting during interpolation (HydroDyn shares the same grid discetization for the WAMIT forces).
Waves.f90 was revised with some updated error handling so that it is more readable.  I couldn't figure out what was going on before cleaning and formatting a bit.
All direct calls to interp functions from SeaState.f90 were converted to WaveField function calls instead.
A check on deltaT was added to the interpolation functions.

Related issue, if one exists
@RBergua ran into a segmentation fault with the HydroDyn driver when running linearization from the driver only.  The model is proprietary so it cannot be shared.
Impacted areas of the software
HydroDyn and SeaState
Additional supporting information
Test results, if applicable
A new HD driver test should be added to exercise the driver linearization function.

@andrew-platt I confirm that this PR runs with my OpenFAST model (Morison-only approach) and returns the expected results:

Thanks @andrew-platt for the bug fix and the code cleanup. Looks great to me.


patch failing initializer test

I updated the tests to include being testing that the service is injected in components, which fixes the broken test and adds an additional test. I've included a screenshot of the failing test and a screenshot of the passing test.
Failing Test:

Passing Test:

Awesome stuff, thanks @ryanlabouve. Merged and version bumped.

Awesome stuff, thanks @ryanlabouve. Merged and version bumped.


Initialize O# on a threadpool thread to prevent deadlocks

Prior to this change we would unintentionally initialize O# on the main thread  which would pin its input handler reading loop to the main thread. Meaning it'd "while true" but only ever read data on the main thread. To workaround this we now initialize O# on a random threadpool thread. Separately I've commited a fix to O# to fix their input handling logic (configure await false).

O# fix: https://github.com/OmniSharp/csharp-language-server-protocol/pull/354/files
Fixes dotnet/aspnetcore#25738

FYI @ToddGrun in case you ever want to run in-proc again 😄


Locale de-DE: Added classroom_in_box, creativity_rigor and built_for_teachers

Added classroom_in_box, creativity_rigor and built_for_teachers translation

Hi @MaikNog  , thanks for your translations! Can you sign the Contributor License Agreement so we can merge this in?

Hi @MaikNog , thanks for your translations! Can you sign the Contributor License Agreement so we can merge this in?

Hi @Bryukh,
done.

Thanks! Merged


Unable to build ecode from source on MSYS2 (CLANG64)

Please have a look at the build script. Something is wrong.

Plase provide more information. Which package of MSYS2 you have installed? Can you show me the errors? I don't currently support it though, there are many distributions of msys2,clang,gcc,etc on Windows, I cannot support them all. Here's a thread were we talk about it.

When building with MSYS2, don't use mingw32-make. Use make instead.


TKEY wireformat is plain octets

TKEY wireformat is plain octets not hex data; revert back to plain
string to make wirencoding work.
From the RFC 2930:
2. The TKEY Resource Record

   The TKEY resource record (RR) has the structure given below.  Its RR
   type code is 249.

      Field       Type         Comment
      -----       ----         -------

      NAME         domain      see description below
      TTYPE        u_int16_t   TKEY = 249
      CLASS        u_int16_t   ignored, SHOULD be 255 (ANY)
      TTL          u_int32_t   ignored, SHOULD be zero
      RDLEN        u_int16_t   size of RDATA
      RDATA:
       Algorithm:   domain
       Inception:   u_int32_t
       Expiration:  u_int32_t
       Mode:        u_int16_t
       Error:       u_int16_t
       Key Size:    u_int16_t
       Key Data:    octet-stream
       Other Size:  u_int16_t
       Other Data:  octet-stream  undefined by this specification

interesting that this fails now...

have plain octets probably also means we can read it from text, because you can't put all TKEY's in presentation format, i.e. null bytes?

This is how I've currently been creating my TKEY RR's with #567 merged, b is the Kerberos token marshaled into []byte:
        now := time.Now().Unix()
        m.Extra[0] = &dns.TKEY{
                Hdr: dns.RR_Header{
                        Name:   keyname,
                        Rrtype: dns.TypeTKEY,
                        Class:  dns.ClassANY,
                        Ttl:    0,
                },
                Algorithm:  dns.Fqdn("gss-tsig"),
                Mode:       3,
                Inception:  uint32(now),
                Expiration: uint32(now),
                KeySize:    uint16(binary.Size(b)),
                Key:        hex.EncodeToString(b),
        }

If that helps.

that looks correct. But the code in miekg/dns is generated from the struct, so it must match the wireformat - it essentially does the same.

Wow, I'm kind of confused now.  It's working well for me and  I am glad to hear @bodgit has had some luck as well.  I'd like to get it straight.
I agree I messed up the 'go generate' portion and I'm still not entirely clear on how I did that.  I think that I just forgot to generate or checkin the part for len().  But note that to pack/unpack the RR you don't need to call len() - that's why it wasn't caught as being not correct.   The pack()/unpack() generation also clearly was done in https://github.com/miekg/dns/pull/567 because we see the change to zmsg.go and otherwise you would have had no diffs in zmsg.go here.  So I don't think it's accidentally working for people as mentioned in https://github.com/miekg/dns/issues/549
What I'm most confused about is why you think it should be a 'string' just because the RFC said octet-stream.  What we then want is just a stream of bytes.   I thought we have some flexibility about how to represent a string field in this go package and then translate it to the right wire format when calling pack()/unpack() and that a hex encoded string would best represent the usage models.  And that's exactly what the 'dns:hex' attribute was buying us was to treat this string field as a hexEncoded string representation before translating it to the wire format.
I'm also still confused at the len() code generated for the size-hex field, I don't get why there is a +1 added to it.  I think it should just be len(KeyData)/2.   But as I came to learn, len() is not that important for getting stuff on / off the wire properly.   What is the +1 for?  Is the +1 trying to guard against an odd number length?

Thanks for comment, prompted me to look some more.
I think you're right about is can just be size-hex:KeySize and the len+1 is wrong. This may be an oversight in generating the len functions with using a size- function.
Where the +1 came from: when encoding some of these the first byte would be used for the length, ala TXT RDATA.
Checking that len bit right now.

yeah :( No special handling here: https://github.com/miekg/dns/blob/master/types_generate.go#L184

Yeah, but I think hex is wrong as well if I understand it.  It too should not have the +1.    The could have some protection to round up to an even number if len is odd.
The only difference between the two is we can use another field to ensure the length is right for size-hex and for hex and you have to just go on string length.

I think hex can work - because that only impacts the presentation format, len(hex)/2 should be the same length as just using string.
The +1 is just wrong in any case.

Okay good - we're getting on the same page.  Let me know if I can help or you want me to clean this up.

Thanks. I'll rework this PR, hopefully the fallout will be small

Here is an enhancement to the TKEY test to ensure len() is good moving forward once fixed if you'd like to cherry pick it with these changes.
https://github.com/skyportsystems/dns/commit/8bb992ef67308387247dda3a5145d047514d8735

Codecov Report

Merging #599 into master will decrease coverage by 0.12%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master     #599      +/-   ##
==========================================
- Coverage   57.74%   57.62%   -0.13%
==========================================
  Files          37       37
  Lines        9978    10017      +39
==========================================
+ Hits         5762     5772      +10
- Misses       3168     3196      +28
- Partials     1048     1049       +1

Impacted Files
Coverage Δ

edns.go
14.46% <0%> (+0.12%)
:arrow_up:

msg.go
77.85% <0%> (+0.65%)
:arrow_up:

Continue to review full report at Codecov.

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

In the end the +1 might be harmless, probably added this years ago for some reason. Anyway most minimal PR I could come up with; doesn't win any prizes for readability; but works. PTAL

LGTM - thanks for looking at it.


Update pre-release table in readme to fix formatting.

This isn't needed anymore as it has already been fixed. =)


✨ Add GitHub ⭐ star link and counter to the top (SSW.Rules)

Cc: @wicksipedia  @adamcogan @jaydenalchin @bettybondoc
Email thread: SSW.Rules | “Star us”

Hi team,
Pain
as per @adamcogan , we want Rules to have the same feature "GitHub star" as Tina.io

Suggested Solution
Add a top bar with the link and counter as per the mockup below

Tasks

[ ] 1. Action

[ ] 2. On your "Done", include how many stars we have on the day it was implemented (mention @tiagov8)
Current count when the Issue was created is 12

Thanks!

Note: The same is to be done on SSW.People: https://github.com/SSWConsulting/SSW.People/issues/663

Extra task:

[ ] 3. After the counter, add the sentence "We are migrating this site to TinaCMS"

CC @tiagov8 @wicksipedia @adamcogan @bettybondoc
For the record I don't think a whole new banner is necessary just for this link! ✨ Less is more ✨
The GitHub star CTA should be placed in the footer instead, without the extra text around it, especially if it's going to be common across our sites. In fact, Rules & People already have a similar CTA in the footer, which this should replace.

As per my conversation with @adamcogan we are adding this to the bottom in this area

--
...using this text:

We ❤ open source. Loving SSW Rules? ⭐ us on GitHub {{ CONTROL WITH CURRENT STARS }}

✅ Done
Check out the new footer on any page
https://www.ssw.com.au/rules/
Right now there are 13 stars - lets see if we get any more with this improved link 🙂


Unprintable chars in headers led to response parsing error

The issue was in non-printable symbol between those 2 lines in response from moz blog. I suppose it was added as some kind of  bots protection by your cdn provider.
$client = new \Zend\Http\Client();
$client->setOptions(array(
   'sslverifypeer' => false,
   'adapter'         => 'Zend\Http\Client\Adapter\Curl',
));
$client->setUri('https://moz.com/ugc');
$response = $client->send(); // Invalid header value

The symbol is between: X-Iinfo && X-CDN headers

This repository has been closed and moved to laminas/laminas-http; a new issue has been opened at https://github.com/laminas/laminas-http/issues/24.


[Backport release-24.05] nixVersions: backport 2.24.3 as nixVersions.latest

Description of changes
With #335342 incoming on master, it's really awkward to have the stable version on master not be available on the latest release branch.
See for instance https://github.com/zhaofengli/attic/pull/159.
This PR cherry-picks commits from #331720, #333183, #333986, #336076, and #332724 so that nixVersions.latest is 2.24.3.
I think this is the minimal set to backport.
Result of nixpkgs-review run on x86_64-linux 1

16 packages built:

nil
nixVersions.git
nixVersions.git.debug
nixVersions.git.dev
nixVersions.git.doc
nixVersions.git.man
nixVersions.latest
nixVersions.latest.debug
nixVersions.latest.dev
nixVersions.latest.doc
nixVersions.latest.man
nixVersions.nix_2_22
nixVersions.nix_2_22.debug
nixVersions.nix_2_22.dev
nixVersions.nix_2_22.doc
nixVersions.nix_2_22.man

Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)

[ ] sandbox = relaxed
[ ] sandbox = true

[x] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[x] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[x] Tested basic functionality of all binary files (usually in ./result/bin/)
24.11 Release Notes (or backporting 23.11 and 24.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[x] Fits CONTRIBUTING.md.

Apologies for the overlap, @Mic92!

This one is more up-to-date.

Result of nixpkgs-review pr 336108 run on x86_64-linux 1

16 packages built:

nil
nixVersions.git
nixVersions.git.debug
nixVersions.git.dev
nixVersions.git.doc
nixVersions.git.man
nixVersions.latest
nixVersions.latest.debug
nixVersions.latest.dev
nixVersions.latest.doc
nixVersions.latest.man
nixVersions.nix_2_22
nixVersions.nix_2_22.debug
nixVersions.nix_2_22.dev
nixVersions.nix_2_22.doc
nixVersions.nix_2_22.man

Result of nixpkgs-review pr 336108 run on aarch64-linux 1

16 packages built:

nil
nixVersions.git
nixVersions.git.debug
nixVersions.git.dev
nixVersions.git.doc
nixVersions.git.man
nixVersions.latest
nixVersions.latest.debug
nixVersions.latest.dev
nixVersions.latest.doc
nixVersions.latest.man
nixVersions.nix_2_22
nixVersions.nix_2_22.debug
nixVersions.nix_2_22.dev
nixVersions.nix_2_22.doc
nixVersions.nix_2_22.man

Thanks!


Empyrean Pyke R effect

Please check Pyke's Empyrean skin (only empyrean) ult visual and audio effects in case of hitting enemies and not hitting them because it's not behaving normally.

#1


Jamf API changes

Before going down the path to fix ourselves, wondering if anyone has done the work to update what seems to just be aiojss.py to support the new tokenized API auth vs old basic auth. Seems like it should be relatively easy, but always prefer avoiding re-inventing the wheel. =)
Thanks!

@staze I was thinking about the same thing but haven't gone deep enough into git2jss to confidently make the change myself. Have you made any progress on it?

possibly. been waiting to test, hopefully in the next week or so.

no luck so far, but coworker is working on it. This is likely our last hurdle until we can disable basic auth.

Pull request #38 should resolve this


[Backport] HSEARCH-2868 Collection updates may not trigger reindexing despite @ContainedIn in some circumstances

This PR is a backport of #1531, which should be merged first.
https://hibernate.atlassian.net//browse/HSEARCH-2868

merged already.


VIS_BG_FX

Trans info now handles dynamic dummy data
Showcasing faultiness in the dummy data as well
Slight UI and header changes.

LGTM 👍


Skip TLS certificate verification for e2e

Changes
Allows the test to skip TLS verification when it's not possible to produce valid certificates. In case it is required to run the e2e test against tekton-results service exposed.
Submitter Checklist
These are the criteria that every PR should meet, please check them off as you review them:

[ ] Has Docs included if any changes are user facing
[ ] Has Tests included if any functionality added or changed
[x] Tested your changes locally (if this is a code change)
[x] Follows the commit message standard
[ ] Meets the Tekton contributor standards (including functionality, content, code)
[x] Has a kind label. You can add a comment on this PR that contains /kind <type>. Valid types are bug, cleanup, design, documentation, feature, flake, misc, question, tep
[ ] Release notes block below has been updated with any user-facing changes (API changes, bug fixes, changes requiring upgrade notices or deprecation warnings)
[ ] Release notes contain the string "action required" if the change requires additional action from users switching to the new release

Release Notes
NONE

/lgtm


Migrations: Track Parent Migrations

This would allow us to better detect conflicts, but we would also need some way to merge.

@bricelam do you think we still need this now that we have model snapshot?

It would help us detect conflicts. The snapshot in the migration can still get into a bad state. We use that snapshot for column types currently. We'll use it for rebuilds in the future.

So, it will help us do better, but maybe what we have is "good enough".

Although doing a rebuild but missing a column because it was added (but not synced) before you generated your migration would be a pain to debug (and maybe even notice).

Ah yeah... rebuilds from the snapshot... didn't think of that. Is this trivial to just add now, or do you think it should go on backlog?

It's trivial to add the pointer, but it might end up being YAGNI since we won't actually do anything with it now.

I don't think it's a breaking change to add later either since we can just infer the parent migration from the order

We can do this if we find a feature that would use it

My thoughts exactly