Add gradle-oci to implementations.md

As the author of the Gradle OCI plugin I want to ask if it can be included in the list of implementations.
It is a Gradle plugin to ease using and producing (multi-arch) OCI images without requiring external tools.
The plugin allows:

Building OCI images according to the OCI Image Format Specification
Pulling and pushing images from/to OCI registries according to the OCI Distribution Specification

Please let me know if any additional information is required.

Hi @SgtSilvio, I'm not a Java / Gradle / Kotlin dev, so this is out of my expertise. But that's not really needed to approve this. Do you have an example image created by this project on a public repo that we could review?

Thanks for your answer.
The hivemq/hivemq-swarm is a public image that has been built with gralde-oci since december. (example tag: 4.23.0).
The project is private, but I can share the image definition below.
In short,

it has distroless:java11-debian11:latest as parent image and
adds 3 layers (called "libs", "jar" and "resources")
for the platforms linux/amd64 and linux/arm64/v8

Full Image Definition
oci {
    imageDefinitions.register("main") {
        allPlatforms {
            parentImages {
                add("distroless:java11-debian11:latest") { isChanging = true }
            }
            config {
                entryPoint.add("java")
                entryPoint.addAll(application.applicationDefaultJvmArgs)
                entryPoint.addAll(
                    "-XX:+UnlockExperimentalVMOptions",
                    "-XX:+UseG1GC",
                    "-XX:InitialRAMPercentage=60",
                    "-XX:MaxRAMPercentage=70",
                    "-XX:MinRAMPercentage=40",
                    "-Dswarm.home=/",
                    "-cp",
                    "/app/classpath/*:/app/libs/*",
                )
                entryPoint.add(application.mainClass)
                environment.put("LOG_LEVEL", "INFO")
            }
            layers {
                layer("libs") {
                    contents {
                        from(configurations.runtimeClasspath)
                        into("app/libs")
                    }
                }
                layer("jar") {
                    contents {
                        from(proguardJar.flatMap { it.inputOutputGroups[0].outputs[0].archiveFile })
                        into("app/classpath")
                        rename(".*", "${project.name}-${project.version}.jar")
                    }
                }
                layer("resources") {
                    contents {
                        from("src/distribution")
                        from("src/main/resources/logback.xml") { into("config") }
                        from(standardExtensions) { into("extensions") }
                        filter.exclude("config/config.xml", "scenario/scenario.xml", "**/Readme.md")
                    }
                }
            }
        }
        specificPlatform(platform("linux", "amd64"))
        specificPlatform(platform("linux", "arm64", "v8"))
    }
}

In addition to hivemq-swarm, the Gradle OCI plugin is now used in more places, for example:

hivemq-ce: DockerHub, GitHub
mqtt-cli: DockerHub, GitHub

What is missing to get this merged?

What is missing to get this merged?

It's waiting on a second review from @opencontainers/image-spec-maintainers


Settings don't persist with Craft 3.1.8

Description
Similar to https://github.com/verbb/element-index-defaults/issues/1, the plugin settings don't seem to reflect in either assets, entries and categories.
Steps to reproduce

Install the plugin
Go to plugin settings
Click on assets
Hide the title field and save
Go to an asset, and notice that the title column is still present

Additional info

Plugin version: 1.0.2
Craft version: 3.1.8

Might need some better clarification around what can and can't be disabled. For example, the Title field on most of these items can't be disabled (try and disable it via Assets).
Or, are you still seeing this with other fields? I can disable all the other columns, and it does show just the Title for assets for example.

Hi @engram-design
I tried disabling the title field through the plugin settings, because it was available to disable. I think this is what through me! If it can't be disabled or removed, then the title field in the plugin settings should be disabled like it is natively. Everything else works as expected.

Yeah, though that might be the issue, so added that clarification in 1.0.3.


add option to disable IPV6 lookups

This works great (thanks again, btw),  but there's one issue...IPV6 lookups.  Can you add support for an environmental variable like "USE_IPV6", that sets an unbound config "do-ipv6: yes/no"?
I get the following errors every time a lookup occurs:
2020-04-18T04:15:38.317Z        INFO    unbound: [1587183338] unbound[13:1] info: resolving am-a.akamaihd.net.edgesuite.net. A IN
2020-04-18T04:15:38.317Z        INFO    unbound: [1587183338] unbound[13:1] error: outgoing tcp: connect: Address not available for 2001:4860:4860::8888 port 853
2020-04-18T04:15:38.318Z        INFO    unbound: [1587183338] unbound[13:1] info: error sending query to auth server 2001:4860:4860::8888 port 853
2020-04-18T04:15:38.318Z        INFO    unbound: [1587183338] unbound[13:1] error: outgoing tcp: connect: Address not available for 2001:4860:4860::8844 port 853
2020-04-18T04:15:38.318Z        INFO    unbound: [1587183338] unbound[13:1] info: error sending query to auth server 2001:4860:4860::8844 port 853
2020-04-18T04:15:38.318Z        INFO    unbound: [1587183338] unbound[13:1] error: outgoing tcp: connect: Address not available for 2001:4860:4860::8888 port 853
2020-04-18T04:15:38.319Z        INFO    unbound: [1587183338] unbound[13:1] info: error sending query to auth server 2001:4860:4860::8888 port 853
2020-04-18T04:15:38.319Z        INFO    unbound: [1587183338] unbound[13:1] error: outgoing tcp: connect: Address not available for 2606:4700:4700::1001 port 853
2020-04-18T04:15:38.319Z        INFO    unbound: [1587183338] unbound[13:1] info: error sending query to auth server 2606:4700:4700::1001 port 853
2020-04-18T04:15:38.319Z        INFO    unbound: [1587183338] unbound[13:1] error: outgoing tcp: connect: Address not available for 2606:4700:4700::1001 port 853
2020-04-18T04:15:38.319Z        INFO    unbound: [1587183338] unbound[13:1] info: error sending query to auth server 2606:4700:4700::1001 port 853
2020-04-18T04:15:38.319Z        INFO    unbound: [1587183338] unbound[13:1] error: outgoing tcp: connect: Address not available for 2606:4700:4700::1111 port 853
2020-04-18T04:15:38.319Z        INFO    unbound: [1587183338] unbound[13:1] info: error sending query to auth server 2606:4700:4700::1111 port 853
2020-04-18T04:15:38.319Z        INFO    unbound: [1587183338] unbound[13:1] error: outgoing tcp: connect: Address not available for 2001:4860:4860::8844 port 853
2020-04-18T04:15:38.319Z        INFO    unbound: [1587183338] unbound[13:1] info: error sending query to auth server 2001:4860:4860::8844 port 853
2020-04-18T04:15:38.319Z        INFO    unbound: [1587183338] unbound[13:1] error: outgoing tcp: connect: Address not available for 2606:4700:4700::1111 port 853
2020-04-18T04:15:38.319Z        INFO    unbound: [1587183338] unbound[13:1] info: error sending query to auth server 2606:4700:4700::1111 port 853
2020-04-18T04:15:38.363Z        INFO    unbound: [1587183338] unbound[13:1] info: response for am-a.akamaihd.net.edgesuite.net. A IN
2020-04-18T04:15:38.363Z        INFO    unbound: [1587183338] unbound[13:1] info: reply from <.> <IP_ADDRESS>#853

it eventually hits the IPV4 resolver, but it tries to use ipv6 first in kubernetes.
Thanks!

Hi there,
You can now simply set IPV6=off in your environment variables 😉
Enjoy 👍

👍  Thank you!


Testing Contributors Bot

@all-contributors please add @theonemcdonald  for projectManagement

@all-contributors please add @theonemcdonald for projectManagement

@all-contributors please add @theonemcdonald  for Gold Supporter

@all-contributors please add @theonemcdonald for Gold Supporter

@all-contributors please add @theonemcdonald for goldSupporter

@all-contributors please add @theonemcdonald for recognizedSupporter


openxray - engine name correction (openxray -> OpenXRay)

Just a small correction :)

New Engine Package Submissions

[ ] Have you followed the instructions in the build documentation?
[ ] Have you run the build locally and ensured the package allowed you to launch and play the Steam game?
[x] Have you updated the packages.json file?
[x] Have you ensured that there is not already a pull request or active engine package for the one you are adding?

Common Code Submissions

[x] Have you verified that the changes are isolated to the features or fixes you are wanting to do?
[ ] Have you tested at least one of the engines to ensure that your changes do not break existing workflow?
[x] Have you described what your changes are accomplishing?

Looks good thanks!

Looks good thanks!


Arrow score from center

When checking the arrow score on the target, it uses the center of the arrow and it doesn't take into account the arrow border might touch other score. So we should take that into account

Base this to take into account the difference: http://paulbourke.net/geometry/circlesphere/
But the issue is that the impact mark is bigger than the arrow diameter. For example, if the arrow diameter is a carbon one, then on the 8° there could be 3 or 4 arrows one right to each other. But the impact size is too big and it doesn't handle that very well.
So this can not be done at the moment


How can I retrieve serialized data from the queue ?

My consumer launched as a command is sucessfully executed but I can not retrieve my serialized data, error for instance, they remain null.
protected function execute(InputInterface $input, OutputInterface $output)
    {
        $message = $input->getArgument('message');

        if (!$message = unserialize(base64_decode($message))) {
            throw new \InvalidArgumentException('Invalid input received');
        }

        $digest = unserialize($message);
        $error = $digest['error'];
        $source = $digest['source'];
...

Any ideas please?

It just works.


Quire += operator seems to fail

I'm working with posit<16,1> at the moment. Modeling quire usage after the code in examples/blas/blas.hpp line 62, I have the following:
for(int row=0; row<n; ++row) {
     quireX sum = sw::unum::quire_mul(beta, ycoefs[row]); //sum is initially 0
     for(LocalOrdinalType i=Arowoffsets[row]; i<Arowoffsets[row+1]; ++i) {
          positX tempPosit;
          sum += sw::unum::quire_mul(Acoefs[i], xcoefs[Acols[i]]);
          if (row > 263 && row < 269) {
               tempPosit.convert(sum.to_value());
               if (tempPosit < testCompare) {
                        std::cout <<"WRONG! Sum after += is less than -1.0: " << tempPosit <<", after taking sum (" << sumHolderPosit << ") += quire_mul("<<Acoefs[i] << ", " <<xcoefs[Acols[i]] << ")" << std::endl;
                        std::cout <<"We essentially took " << sumHolderPosit << " += " << tempQuireMultholder << " and somehow ended up with " << tempPosit << std::endl;
                        std::cout << "Incorrect sum as a quire: " << sum << std::endl;
                        std::cout << "Delta Quire: " << tempQuireMult << ", (as posit) = " << tempQuireMultholder << std::endl;
                        std::cout << "Row: " << row << ", Acoefs[i]: " << Acoefs[i] << ", Acols[i]: " << Acols[i] << ", xcoefs[" << Acols[i] << "]: " << xcoefs[Acols[i]] << std::endl;
               }
          }

The sum should never go below the value -1.0 - and if I run an alternate version of this code that does not use the quire feature, it doesn't.
With the quire enabled, I get the following output - the WRONG! tag near the bottom is where the error occurs - I figured I'd include additional output prior to the error of the sum successfully reducing in size.
Row is 266. Acoefs[5334] = -0.016571, xcoefs[Acols[5334]] = 0.000999451
Sum before += quire_mul  1:<PHONE_NUMBER>00000000000000000000_000000000000000000000000000000000000000000000000000000000.00000000000001100000110001100000010000000000000000000000
Sum before += quire_mul (as posit)9.25064e-05
product of quire_mul = -1.66893e-05
Row is 266. Acoefs[5335] = -0.00828552, xcoefs[Acols[5335]] = 0.000999451
Sum before += quire_mul  1:<PHONE_NUMBER>00000000000000000000_000000000000000000000000000000000000000000000000000000000.00000000000001001111011010000011010000000000000000000000
Sum before += quire_mul (as posit)7.53403e-05
product of quire_mul = -8.10623e-06
Row is 266. Acoefs[5336] = -0.0165405, xcoefs[Acols[5336]] = 0.000999451
Sum before += quire_mul  1:<PHONE_NUMBER>00000000000000000000_000000000000000000000000000000000000000000000000000000000.00000000000001000110101110010100110000000000000000000000
Sum before += quire_mul (as posit)6.77109e-05
product of quire_mul = -1.66893e-05
Row is 266. Acoefs[5337] = 7.62939e-06, xcoefs[Acols[5337]] = 0.000999451
Sum before += quire_mul  1:<PHONE_NUMBER>00000000000000000000_000000000000000000000000000000000000000000000000000000000.00000000000000110101011000111010110000000000000000000000
Sum before += quire_mul (as posit)5.05447e-05
product of quire_mul = 1.49012e-08
Row is 266. Acoefs[5338] = -0.0165405, xcoefs[Acols[5338]] = 0.000999451
Sum before += quire_mul  1:<PHONE_NUMBER>00000000000000000000_000000000000000000000000000000000000000000000000000000000.00000000000000110101011001011011100000000000000000000000
Sum before += quire_mul (as posit)5.05447e-05
product of quire_mul = -1.66893e-05
Row is 266. Acoefs[5339] = -0.00828552, xcoefs[Acols[5339]] = 0.000999451
Sum before += quire_mul  1:<PHONE_NUMBER>00000000000000000000_000000000000000000000000000000000000000000000000000000000.00000000000000100100000100000001100000000000000000000000
Sum before += quire_mul (as posit)3.43323e-05
product of quire_mul = -8.10623e-06
Row is 266. Acoefs[5340] = -0.016571, xcoefs[Acols[5340]] = 0.000999451
Sum before += quire_mul  1:<PHONE_NUMBER>00000000000000000000_000000000000000000000000000000000000000000000000000000000.00000000000000011011011000010011000000000000000000000000
Sum before += quire_mul (as posit)2.6226e-05
product of quire_mul = -1.66893e-05
-------------------------------------------------------------------------------------------------------------------
WRONG! Sum after += is less than -1.0: -2.68435e+08, after taking sum (2.6226e-05) += quire_mul(-0.016571, 0.000999451)
We essentially took 2.6226e-05 += -1.66893e-05 and somehow ended up with -2.68435e+08 (= -maxpos)
Incorrect sum as a quire: -1:<PHONE_NUMBER>11111111111111111111_111111111111111111111111111111111111111111111111111111111.11111111111111110101111111001010000000000000000000000000
Delta Quire: -1:<PHONE_NUMBER>00000000000000000000_000000000000000000000000000000000000000000000000000000000.00000000000000010001010111011101000000000000000000000000, (as posit) = -1.66893e-05
Row: 266, Acoefs[i]: -0.016571, Acols[i]: 398, xcoefs[398]: 0.000999451
Row is 266. Acoefs[5341] = -0.00828552, xcoefs[Acols[5341]] = 0.000999451
-------------------------------------------------------------------------------------------------------------------

If you noticed, the value -2.68435e+08 is negative maxpos for a <16,1> posit. So what I'm wondering is, why does my quire suddenly explode from very small positive values to massive negative values?
My positX and quireX are declared as
namespace posit_shape {
    const uint es = UNUM_ES_SIZE; //1
    const uint nbits = UNUM_NBIT_SIZE; //16
}
namespace quire_shape {
    const uint es = UNUM_ES_SIZE;
    const uint nbits = UNUM_NBIT_SIZE;
    const uint capacity = UNUM_QUIRE_CAPACITY; //10 - as per stillwater example
}
typedef sw::unum::posit<posit_shape::nbits, posit_shape::es> positX;
typedef sw::unum::quire<quire_shape::nbits, quire_shape::es> quireX;

All evidence points to a bug in quire's +=, any feedback welcome.

A quick test of the values that caused the breakdown:
int main() {

    quireX sum = 2.6226e-05;
    positX sumAsPosit;
    positX argA = -0.016571;
    positX argB = 0.000999451;
    sumAsPosit.convert(sum.to_value());
    std::cout << "sum = " << sum << std::endl;
    std::cout << "sumAsPosit = " << sumAsPosit << std::endl;
    sum += sw::unum::quire_mul(argA, argB);
    std::cout << "sum after += == " << sum << std::endl;
    sumAsPosit.convert(sum.to_value());
    std::cout << "sum after +=(as posit) == " << sumAsPosit << std::endl;
    return 0;
}

Generates the following output:
sum =  1:<PHONE_NUMBER>00000000000000000000_000000000000000000000000000000000000000000000000000000000.00000000000000011011011111111111110011111111001100110110
sumAsPosit = 2.6226e-05
sum after += ==  1:<PHONE_NUMBER>00000000000000000000_000000000000000000000000000000000000000000000000000000000.00000000000000001010001000100010110011111111001100110110
sum after +=(as posit) == 9.53674e-06

Process finished with exit code 0

Doing the calculation manually gives me about the same answer (finite accuracy curve). So += seems to be solid for these values.

@eirhardt thank you for filing this issue.  I will investigate.

@eirhardt I have a suspicion that we are having an implicit conversion somewhere that mucks up the quire.
that value, 2.6226e-05, is not representable by a posit<16,1>.
The nearest posit<16,1> is s0 r000000001 e0 f10111 qSE v2.6226043701171875e-05
yielding a diff = -4.3655745685100555e-11.
the quire to_value() method gives back a value number that carries all the fraction bits available in the quire. The design being that the posit conversion routine will take care of the rounding.
Not knowing the larger code from which this came, it is possible that some implicit conversion of a float or double is unsuspectingly polluting bits of the quire that are outside of the posit<16,1> possibilities.
That would imply an architectural bug in how we have implemented the quire. I will need to design some experiments to figure this out. This pollution hypothesis is currently my #1 suspicion.

@Ravenwater Interesting! Let me know if I can somehow assist.

@eirhardt yes, you can. I just checked in code that removes the implicit conversions from the quire API. This code resides in the 'quire' branch. If you would be so kind to rerun your code with this branch, it will at least provide an indication if my hypothesis is even at play in your code. If your code compiles without modifications, then my hypothesis would be incorrect. If it does require recompilation to remove quire assignments that might be troubling, please make those edits and see if the problem persists.
Basically, what this code edit does is if you had assignments or initializing constructors feeding the quire, for example, code like this:
quire<16,1,10> q(1.0f);
or
q = (long double)1.0;
you would need to replace that with patterns like this:
quire<16,1,10> q;
value<22> vf(1.0f);    // 22 bits of mantissa in a 32-bit float excluding the hidden bit
q = vf;
If you need to reset the quire use the clear() method:
q.clear();
you can also assign a value<> to the quire and avoid the clear()
value<52> vd(1.0);   // 52 bits of mantissa in a 64-bit double excluding the hidden bit
q = vd;
Please report the results in this issue tracker.

@Ravenwater it appears you were correct. I'm fixing compilation issues now - will report back.

@eirhardt thanks for running that experiment.

So far, changing the quire to the
quire<16,1,10> q;
value<22> vf(1.0f);
q = vf;

format doesn't seem to have affected the result. In case I'm doing it wrong, I'll include the code both before any modification from me, and after.
Here's how the code originally was:
  int n = A.rows.size();
  const LocalOrdinalType* Arowoffsets = &A.row_offsets[0];
  const GlobalOrdinalType* Acols      = &A.packed_cols[0];
  const ScalarType* Acoefs            = &A.packed_coefs[0];
  const ScalarType* xcoefs = &x.coefs[0];
        ScalarType* ycoefs = &y.coefs[0];
  ScalarType beta = 0;

  magnitude result = 0;

  for(int row=0; row<n; ++row) {
    ScalarType sum = beta*ycoefs[row];

    for(LocalOrdinalType i=Arowoffsets[row]; i<Arowoffsets[row+1]; ++i) {
      sum += Acoefs[i]*xcoefs[Acols[i]];
    }

    ycoefs[row] = sum;
    result += xcoefs[row]*sum;
  }
  return result;

ScalarType is just an alias for positX, so wherever you see ScalarType declared, just imagine a <16,1> posit. The same is true for magnitude.
Here is the code after my quireX modifications:
    int n = A.rows.size();
    const LocalOrdinalType* Arowoffsets = &A.row_offsets[0];
    const GlobalOrdinalType* Acols      = &A.packed_cols[0];
    const ScalarType* Acoefs            = &A.packed_coefs[0];
    const ScalarType* xcoefs = &x.coefs[0];
    ScalarType* ycoefs = &y.coefs[0];
    ScalarType beta = 0;
#if USES_QUIRE
    magnitude result;
    quireX resultAsQuire;
    valueX resultValueX(0.0f);
    resultAsQuire = resultValueX;

    for(int row=0; row<n; ++row) {
         quireX sum;
         valueX sumVal(0.0f);
         sum = sumVal;

         for(LocalOrdinalType i=Arowoffsets[row]; i<Arowoffsets[row+1]; ++i) {
                positX tempValue;
                tempValue.convert(sum.to_value());
                if (row >= 266 && row <= 268) { //I know that the incorrect values appears when the row gets to be 266
                    std::cout << " Row = " << row << ", i = " << i << ", tempValue = " << tempValue << std::endl;
                    std::cout << " taking " << tempValue << " += quire_mul(" << Acoefs[i] << ", " << xcoefs[Acols[i]] << ") (which equals " << sw::unum::quire_mul(Acoefs[i], xcoefs[Acols[i]]) << ") " << std::endl;
                }
                sum += sw::unum::quire_mul(Acoefs[i], xcoefs[Acols[i]]);
                tempValue.convert(sum.to_value());
                if (row >= 266 && row <= 268) {
                    std::cout << "Row = " << row << ", i = " << i << ", tempValue after += " << tempValue << std::endl;
                }
            }
         positX tempSum;
         tempSum.convert(sum.to_value());
         ycoefs[row] = tempSum;
         valueX resultValueX = sw::unum::quire_mul(xcoefs[row], tempSum);
         resultAsQuire += resultValueX;

    }
    result.convert(resultAsQuire.to_value());
    return result;
#else
//proceed with non-quire version

Also, here is how I've declared valueX:
namespace value_shape {
    const uint frac = 2 * (UNUM_NBIT_SIZE - 2 - UNUM_ES_SIZE);
}
typedef sw::unum::value<value_shape::frac> valueX;

Here's the output:
Row = 266, i = 5337, tempValue after += 5.05447e-05
 Row = 266, i = 5338, tempValue = 5.05447e-05
 taking 5.05447e-05 += quire_mul(-0.0165405, 0.000999451) (which equals -1.65314e-05)
Row = 266, i = 5338, tempValue after += 3.43323e-05
 Row = 266, i = 5339, tempValue = 3.43323e-05
 taking 3.43323e-05 += quire_mul(-0.00828552, 0.000999451) (which equals -8.28097e-06)
Row = 266, i = 5339, tempValue after += 2.6226e-05
 Row = 266, i = 5340, tempValue = 2.6226e-05
 ---------------------------------------------------------------------------------------------------------------
 taking 2.6226e-05 += quire_mul(-0.016571, 0.000999451) (which equals -1.65619e-05)
Row = 266, i = 5340, tempValue after += -2.68435e+08
 Row = 266, i = 5341, tempValue = -2.68435e+08
 ---------------------------------------------------------------------------------------------------------------
 taking -2.68435e+08 += quire_mul(-0.00828552, 0.000999451) (which equals -8.28097e-06)

Also I should probably add that no matter what size posit I use, the printout remains the same. Here's the same log output with a <32,2> posit.
Row = 266, i = 5339, tempValue after += 2.5e-05
 Row = 266, i = 5340, tempValue = 2.5e-05
 taking 2.5e-05 += quire_mul(-0.0166667, 0.001) (which equals -1.66667e-05)
Row = 266, i = 5340, tempValue after += -1.32923e+36 //<--- always -(maxpos)

@eirhardt thank you for the context code, I'll pull it into the quire validation experiment to debug.

@eirhardt haven't been able to reproduce the issue yet. May I ask you for more information?
I would like to trace the content of the quire as it gets updated to observe when the quire goes rogue.
can you add the following statement:
    std::cout  << sum << std::endl

after
   sum += sw::unum::quire_mul(Acoefs[i], xcoefs[Acols[i]]);

That should produce something like this:
 1:<PHONE_NUMBER>_000000000000000000000000000000000000000000000000000000000.00000000000000000000000100000000000000000000000000000000
 1:<PHONE_NUMBER>_000000000000000000000000000000000000000000000000000000000.00000000000000000000000100010000000000000000000000000000
 1:<PHONE_NUMBER>_000000000000000000000000000000000000000000000000000000000.00000000000000000000000100100000000000000000000000000000
 1:<PHONE_NUMBER>_000000000000000000000000000000000000000000000000000000000.00000000000000000000000100110000000000000000000000000000
 1:<PHONE_NUMBER>_000000000000000000000000000000000000000000000000000000000.00000000000000000000000101000000000000000000000000000000

Or even better yet, also add the addend with code like this:
		valueX addend = sw::unum::quire_mul(Acoefficients[i], xcoefficients[i]);
		sum += addend;
		std::cout << components(addend) << "\n" << sum << std::endl;

which would produce information like this:
(+,-28,00000000000000000000000000)
 1:<PHONE_NUMBER>_000000000000000000000000000000000000000000000000000000000.00000000000000000000000000010000000000000000000000000000
(+,-28,00000000000000000000000000)
 1:<PHONE_NUMBER>_000000000000000000000000000000000000000000000000000000000.00000000000000000000000000100000000000000000000000000000
(+,-28,00000000000000000000000000)
 1:<PHONE_NUMBER>_000000000000000000000000000000000000000000000000000000000.00000000000000000000000000110000000000000000000000000000
(+,-28,00000000000000000000000000)
 1:<PHONE_NUMBER>_000000000000000000000000000000000000000000000000000000000.00000000000000000000000001000000000000000000000000000000
(+,-28,00000000000000000000000000)
 1:<PHONE_NUMBER>_000000000000000000000000000000000000000000000000000000000.00000000000000000000000001010000000000000000000000000000
(+,-28,00000000000000000000000000)
 1:<PHONE_NUMBER>_000000000000000000000000000000000000000000000000000000000.00000000000000000000000001100000000000000000000000000000

that way, we have all the information that goes into the quire update at the bit level.

@Ravenwater
I've made your suggested edits - here is the new output:
Row = 266, i = 5337, tempValue after += 5.05447e-05
 Row = 266, i = 5338, tempValue = 5.05447e-05
 taking 5.05447e-05 += quire_mul(-0.0165405, 0.000999451) (which equals -1.65314e-05)
(-,-16,00010101010110100000000000)
 1:<PHONE_NUMBER>00000000000000000000_000000000000000000000000000000000000000000000000000000000.00000000000000100100000100000001100000000000000000000000
Row = 266, i = 5338, tempValue after += 3.43323e-05
 Row = 266, i = 5339, tempValue = 3.43323e-05
 taking 3.43323e-05 += quire_mul(-0.00828552, 0.000999451) (which equals -8.28097e-06)
(-,-17,00010101110111010000000000)
 1:<PHONE_NUMBER>00000000000000000000_000000000000000000000000000000000000000000000000000000000.00000000000000011011011000010011000000000000000000000000
Row = 266, i = 5339, tempValue after += 2.6226e-05

----------------------------------------------------------------------------------------------------------------------
 Row = 266, i = 5340, tempValue = 2.6226e-05
 taking 2.6226e-05 += quire_mul(-0.016571, 0.000999451) (which equals -1.65619e-05)
(-,-16,00010101110111010000000000)
-1:<PHONE_NUMBER>11111111111111111111_111111111111111111111111111111111111111111111111111111111.11111111111111110101111111001010000000000000000000000000
Row = 266, i = 5340, tempValue after += -2.68435e+08
----------------------------------------------------------------------------------------------------------------------

 Row = 266, i = 5341, tempValue = -2.68435e+08
 taking -2.68435e+08 += quire_mul(-0.00828552, 0.000999451) (which equals -8.28097e-06)
(-,-17,00010101110111010000000000)
-1:<PHONE_NUMBER>11111111111111111111_111111111111111111111111111111111111111111111111111111111.11111111111111111110101010111000100000000000000000000000

Nice, that shows that we have a propagating borrow that apparently doesn't get handled correctly. Let me rig up a test for this case.

I can now reproduce the failure, so should have the fix shortly.

@eirhardt I checked in a fix for the bug you found.
https://github.com/stillwater-sc/universal/commit/5bc5c0a2fd17d4ec98b183e46012ad619a7692a7
If you would be so kind to test it on your code, and confirm this resolves your quire issue.

@Ravenwater Initial testing on my end seems to confirm your results! I am no longer experiencing the numeric failure. I greatly appreciate your efforts in fixing this issue, which I will now close 👍
Thanks again.


Network attachment for docker service create

This is more a question rather a bug report. I 've just updated my dependencies to use the newly introduced docker swarm support. I 'm struggling to find out how I specify a network name for service create, I think it's impossible with NetworkAttachmentConfig. Moreover, I think NetworkAttachment for TaskSpec is not needed.
Can you please give me some insight?

(Preface: I’ve never used a docker swarm myself, so I’m not familiar with the commands at all. Someone else may be able to answer you right away, but I certainly cannot. Hopefully that explains why I am definitely not about to address your question directly.)
You could just check in the docker remote API docs how to do this. If they’ve explained things in a way you understand, and if docker-client has correctly implemented that part of the API, then you’re ready to go. If either of those things is not true, then there would be an opportunity for improvement.

The docker API v1.24 clearly states that for service creation, there is a property called 'Networks' through which one could set the network name to be used by the new service. In docker-client, there is indeed a withNetworks method in ServiceSpec, but the NetworkAttachmentConfig does not provide any setting functionality, while it is incorrectly serialized to something which is not a string array. (More details at https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/create-a-service)
Additionally, there is another withNetworks method in TaskSpec (with the same setting constraints) while, as far as I understand, there is no such field in TaskSpec in the remote API.

Ok I think I got it now...NetworkAttachmentConfig comes from NetworkAttachment used for https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/inspect-a-task.
Provided that I 'm not missing something, I 'll send a PR correcting the service create part.

I 've actually missed something, Docker documentation at https://docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#/create-a-service is (at least) not clear for this. Code at master branch is correct apart from the fact that there is no way to construct the NetworkAttachmentConfig object


Dynamic swift product

New Pull Request Checklist

[x] I have read and understood the CONTRIBUTING guide

[x] I have read the Documentation

[x] I have searched for a similar pull request in the project and found none

[x] I have updated this branch with the latest master to avoid conflicts (via merge from master or rebase)

[ ] I have added the required tests to prove the fix/feature I am adding

[x] I have updated the documentation (if necessary)

[x] I have run the tests and they pass

[x] I have run the lint and it passes (pod lib lint)

This merge request fixes / refers to the following issues: ...
Pull Request Description
We received a binary library that has dependency on CocoaLumberjack, we needed to create dynamic products in order to add our dependency with SPM.

@risalba Thanks for proposing this change.
Can you provide a bit more details about why an explicit dynamic product is necessary here? In my experience so far, SPM is pretty good at choosing the right type for dependencies.
If you have an external binary dependency, you could wrap it into an SPM-compatible binary package and specify the dependency on CocoaLumberjack there - which should make SPM choose the right linking type again.
The target specifications would look like this:
.binaryTarget(name: "RawYourBinaryFmwk", path: "path/to/BinaryFmwk.xcframework"),
.target(
    name: "YourBinaryFmwk",
    dependencies: [
        "RawYourBinaryFmwk",
        .product(name: "CocoaLumberjack", package: "CocoaLumberjack"),
    ]),

@risalba Did my snippet work for you? If so, please close this PR. Otherwise please provide a bit more details on why this doesn't work.

Hi @ffried, thanks for your suggestion, I tried your snippet and many changes around it but at best the project would compile and crash at runtime.
It was for a project with a binary dependency that has a dependency on CocoaLumberjack. I stopped working there at the end of January. The project is using now a private fork of the repository, ugly but it "works", so I guess it's fine to close this PR.
Thanks


Bonds page bug (mobile)

Describe the bug
(Mobile bug)
Bond page does not scroll to the bottom all the way and buttons have duplicate text
To Reproduce
Steps to reproduce the behavior:

on a phone or tablet go to /bonds
scroll to bottom
look with ur eyeballs

Expected behavior
bottom bond cards should be fully in view and buttons should display as "Bond {asset name}"
Workarounds (if any)
Is there an option to get around this bug to the intended action?
Screenshots

Desktop (please complete the following information):

Mobile / small screens
Safari

Smartphone (please complete the following information):
Iphone 12
Additional context
none needed

can't reproduce on android in chrome. On mac, get a blank white page for bonds when I resize the window small. seems like its a safari compatibility issue.

Never mind, issue reproduced on android chrome browser as well.

@ohmygirth I don't have an iPhone 12 but in an emulator this bug appears to be resolved. Can you confirm?


fontobene-qt5 development package not found

While preparing an arch package for LibrePCB I run into the following:
Project ERROR: fontobene-qt5 development package not found

I have latest release of fontobene-qt5. This is a tree of the files installed by the package:
usr
 ├─include
 │  └─fontobene-qt5
 │     ├─exception.h
 │     ├─font.h
 │     ├─fontobene.h
 │     ├─glyph.h
 │     ├─glyphlist.h
 │     ├─glyphlistaccessor.h
 │     ├─glyphlistcache.h
 │     ├─header.h
 │     └─helpers.h
 └─share
    └─licenses
       └─fontobene-qt5
          ├─LICENSE-APACHE
          └─LICENSE-MIT

Hi. Looks like the pkg-config file is missing. Check out the AUR-Package: https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=fontobene-qt5

pkg-config files are generally installed by the build system. I will manually add them though.

pkg-config files are generally installed by the build system.

We should probably do that. I guess this shouldn't be to hard with qmake?

I am not really a qmake user but should be pretty easy, as shown in the 2nd answer here https://stackoverflow.com/questions/6794710/qt-qmake-generating-pkgconfig-for-a-project.

We should probably do that. I guess this shouldn't be to hard with qmake?

I spent about 2-3 hours trying to get it to work. fontobene-qt5 is a headers-only library. We basically only use qmake to get "make install" to work (with all the install path detection etc). An install script can also just copy the headers to the appropriate location if it prefers to do so.
As soon as you enable package-config creation in qmake, it starts building shared libraries when doing "make install". I have no idea what those contain, but they are definitely not needed.
We could provide a ready-made pkg-config file, but that won't work in all cases since different distros use different header file locations. Thus I figured that leaving that up to the packager is probably the best choice.

I'll close this for now. If someone figures out how to get qmake to create that pkg-config file without also creating empty shared libraries, a PR would be most welcome :slightly_smiling_face:

You can install the file directly, instead of having qmake generating it.

You can install the file directly, instead of having qmake generating it.

Sure, but qmake can determine the proper includedir path. I suspect that just hardcoding /usr/include won't work on all platforms. I think it's probably better not to install a pkg-config file by default than to install one that may be wrong.
We could include the pkg-config file as an example in the repo though.

On second thought, replacing qmake with a custom makefile might be the better/simpler solution, even if it doesn't cover all edge cases.

On second thought, replacing qmake with a custom makefile might be the better/simpler solution, even if it doesn't cover all edge cases.

I forgot that the project includes a testsuite that's also compiled by qmake. I'll just add an example pkg-config file.


Error: node has not been attached to a view

http://i.imgur.com/RwAB3Li.png
I have 4 tabs
I'm getting this error when trying to change the icon on any tab other than the first one.

Added this to my first tab, no errors:

class FeedScreen extends Component {

  static navigationOptions = {
    tabBar: {
      icon: ({ tintColor }) => (
        <Image
          source={images.icons.home}
          style={theme.tabIconStyle}
        />
      )
    }
  }

Added this to my second tab (same code), got error "node has not been attached to a view":

class MapScreen extends Component {

  static navigationOptions = {
    tabBar: {
      icon: ({ tintColor }) => (
        <Image
          source={images.icons.search}
          style={theme.tabIconStyle}
        />
      )
    }
  }

My navigator looks like this:
const routeConfig = {
  Feed: { screen: FeedScreen },
  Map: { screen: MapScreen },
  Notifications: { screen: NotificationScreen },
  More: { screen: MoreScreen }
}

const tabNavConfig = {
  initialRouteName: 'Feed',
  navigationOptions: {
    header: {
      visible: false,
    },
  },
  tabBarPosition: 'bottom',
  tabBarOptions: {
    showIcon: true,
    showLabel: false
  }
}

const MainTabNavigator = TabNavigator(
  routeConfig,
  tabNavConfig
)

The MainTabNavigator is nested inside a StackNavigator
Any ideas?

Closing this, I was missing an import (Image). Error messages in react native are more confusing than helpful.

I got the same error when trying to mapStateToProps to a key that doesn't exist.

+1.

I'm using redux.
React version:

0.39

+1

For me the problem was that  is not supported inside the  tag on Android.

I was facing a similar issue. It turned out that I was using "Text" element and I forgot to import it from "react-native". I was also using js-linter, but still it was not able to point out this error!
The message "Error: node has not been attached to a view" was very confusing, ate a lot of my time!
Hope this helps!

+1 for barfing on undefined props. Thanks, all!


mq(ticdc): fix unstable unit test batch encode

What problem does this PR solve?

Issue Number: close #7790
What is changed and how it works?
send events first, and then batch messages immediately.
Check List
Tests

Unit test

Questions
Will it cause performance regression or break compatibility?
Do you need to update user documentation, design documentation or monitoring documentation?
Release note
`None`

/run-all-tests

/merge

/run-all-tests

/run-integration-test
/run-verify-ci

/run-integration-test

/run-integration-test

/run-integration-test

/run-integration-test

/run-integration-test

/run-all-test

/run-all-test

/run-all-tests

/run-all-tests

/run-all-tests

/run-integration-test tidb=f5487e3f2596cdd63ae9840606c7fff3fb539e03


Add Artifactory docs

Adds the docs required for our Artifactory partnership. @toolmantim here's the draft so far - are you still keen on NPM for the example upload/download?
To do:

[ ] Pick a screenshot for the Uploading/downloading section
[ ] Add screenshots
[ ] Make the CLI examples more realistic
[x] Add Artifactory notes to artifact cli page
[x] Add Artifactory vars to the Agent --help docs example
[x] PR Agent --help update
[x] Add to sidebar in docs repo
[ ] Add to sidebar in bk/bk repo

## Configuring package management

To configure your builds to use [Artifactory's package management]( https://www.jfrog.com/confluence/display/RTF/Package+Management) for managing and installing dependencies, something something.

For example, to configure all `npm` commands on your agent to use an [Artifactory NPM registry](https://www.jfrog.com/confluence/display/RTF/npm+Registry?src=sidebar), you can create an agent hook:

```bash
#!/bin/bash
set -e
export ARTIFACTORY_NPM_REGISTRY="http://my-artifactory-server.internal:8081/artifactory/api/npm/npm-repo/"
npm config set registry "$ARTIFACTORY_NPM_REGISTRY"
```

To configure a Docker based build step to use the same NPM registry, you should pass the `ARTIFACTORY_NPM_REGISTRY` environment variable into the container, for example:

```yml
steps:
  - plugins:
      docker#v1.2.3:
        image: node
        environment:
          - NPM_CONFIG_REGISTRY: "$ARTIFACTORY_NPM_REGISTRY"
```

You can follow a similar pattern for Ruby, Docker, etc. (links to Artifactory)

Once you've configured the Artifactory buildkite agent environment variables, `artifact_paths` will automatically use artifactory. For example, the following will build a golang binary and upload it to artifactory, be visible in the Buildkite web, and can be downloaded in future steps using `buildkite-agent artifact download`.

```yml
steps:
  - label: ":golang: :package:"
    command: "go build -v -o myapp-darwin-amd64"
    artifact_paths: "myapp-darwin-amd64"
    plugins:
      - docker#v1.2.3:
          image: "golang:1.8"
```

You can also use [buildkite-agent artifact](...) commands directly, for example `buildkite-agent artifact upload my-file` and `buildkite-agent artifact download my-file`.

I did a big review of it @harrietgrace, and ended up doing some edits because the fact there the env vars were all required in the end, and https://github.com/buildkite/agent/pull/1042 eventually landing on http://buildkite.localhost/docs/agent/v3/cli-artifact, it felt weird as lots of sections.
Let me know what you reckon! I noticed it's still missing a screenshot (but was hidden from output because it used angle brackets)

We probably won't add in that extra screenshot. Unless you're keen to get that access_url var added into the agent for Artifactory? Otherwise you can't click through the link in the Artifacts tab, which was what we were going to show in that screenshot.

I thought BUILDKITE_ARTIFACTORY_URL makes the links work already? If not, bummer that's not supported! We can just remove that placeholder image.

Nope 😬I tried it with my test pipeline and it doesn't link. I'll remove the screenshot placeholder, then this is probably ready for a merge?

Yep, I reckon it's ready to merge! ✨


remove test for SzEntityDetailHeaderContentComponent

For some reason the test fails, but ONLY on the CI build. I've tried debugging it and working around it and I have no explanation for why just that one test fails. All tests pass when running them locally. Everything builds and works, just the test fails. Which of course causes the "build passing/failing" tag to say that the build is failing. The only option is to remove the test for now.
test to be removed:
src/lib/entity/detail/sz-entity-detail-header/content.component.spec.ts

Pull Requests:

https://github.com/Senzing/sdk-components-ng/pull/77


Renaming split files sometimes renames the wrong split

Prerequisites

[x] Put an X between the brackets on this line if you have done all of the following:

Reproduced the problem in Safe Mode: http://flight-manual.atom.io/hacking-atom/sections/debugging/#using-safe-mode
Followed all applicable steps in the debugging guide: http://flight-manual.atom.io/hacking-atom/sections/debugging/
Checked the FAQs on the message board for common solutions: https://discuss.atom.io/c/faq
Checked that your issue isn't already filed: https://github.com/issues?utf8=✓&q=is%3Aissue+user%3Aatom
Checked that there is not already an Atom package that provides the described functionality: https://atom.io/packages

Description
When I open 2 files in horizontal split and try to rename (RMB on file tab -> "Rename") the right one, it shows the name of the left one and renames it, not the right one.
Steps to Reproduce

Open two files
Drag one of them to the right until editor highlights a right split for it
Focus the file on the left.
Right-click the file on the right and try to rename it.

Expected behavior: a pop-up appears with an input box for renaming the "right" file
Actual behavior: a pop-up appears with an input box for renaming the "left" file
Reproduces how often: was able to catch it once
Versions
Xubuntu 16.04
atom v6.5.0
apm  1.12.9
npm  3.10.5
node 4.4.5
python 2.7.12
git 2.7.4
Additional Information
none

update: i seem to have incorrectly understood the nature of the issue. the renaming of the wrong file happens if the wrong tab is active. however, i still believe that the behaviour discovered is faulty and am not closing the issue.

Thanks @feakuru, confirmed.  I've updated your reproduction steps with the extra information in your update.  Looks somewhat related to #13398.

I'm also experiencing this (Atom 1.18.0 on MacOS 10.12.5) - contextual menu from right-click appears over the click point, not the active tab. Right click should activate the tab underneath the click, or not display options that can't be performed on an inactive tab (as it does when right-clicking elsewhere in the top of an open pane with tabs). Thanks!


ISPN-11770 Standardize the JGroups stack for the test suite

https://issues.redhat.com/browse/ISPN-11770

We need to wait for https://issues.redhat.com/browse/ISPN-11861

@danberindei done. please review

Merged, thanks Diego!

I changed the comment in tck-runner-remote/pom.xml to explain how it works and that a rebuild is needed to actually change the protocol. I should have made it a separate commit, sorry about that.
One thing that's still bothering me is that we've "standardized" the JGroups stack, but we're still using different stack definitions in core (e.g. stacks/tcp.xml) vs server (stacks.xml), and we're also using udp in core vs. tcp in the server. So I'm not sure I should close the issue in JIRA /cc @tristantarrant

The commit was https://github.com/infinispan/infinispan/commit/03deac03f3abab866cf63b0eec7e220697d35da3


Paragraph wrongly included to list item

For the following md:
4. Title

     Paragraph1

     + Option1
     + Option2

     Paragraph2

It should be displayed like this:

Title
Paragraph1

Option1
Option2

Paragraph2

(Correct on github)
But markdown-to-jsx renders it incorrectly:

It seems that Paragraph2  is included into bullet Option2, unlike github.
This library is very nice and I wish this can be fixed or workarounded.

For those who have to solve this problem, I found react-markdown is correct with this.

For those who have to solve this problem, I found react-markdown is correct with this.

I have a similar issue. I pass an element of type string as a children prop. It looks like that:

* this is my asterisk note

But the markdown-to-jsx rendered it as an object with an unordered list. I thought that the syntax has a problem with the * asterisk character.

I have a similar issue. I pass an element of type string as a children prop. It looks like that:

* this is my asterisk note

But the markdown-to-jsx rendered it as an object with an unordered list. I thought that the syntax has a problem with the * asterisk character.

Having same issue. Something is not correct with lists.
It consider all like one

VS

4. Title

     Paragraph1

       + Option1
       + Option2

     Paragraph2

works! thank you


add distributed mode start

add separate cmd start path for distributed mode

need more tests on bootstrap and datanode, we can add in next 2 weeks


Consider functions instead of alias

In IDEasy we currently define ide as an alias to sourcing a script.
For auto-completion we also hook in via a sourced bash script (source $IDE_ROOT/_ide/completion).
With #778 a new such command is to be added that also needs autocompletion.
An alternative could be to use bash functions instead:

Instead of having an ide script in $IDE_ROOT/_ide/bin we can have $IDE_ROOT/functions.
Instead of adding aliases, sourcing multiple scripts, etc. we would just add a source $IDE_ROOT/functions to .bashrc / .zshrc.
In functions we can also check if we are in zsh and install autocompletion to simplify setup and uninstallation of IDEasy if all we need might be a single line of code in .bashrc / .zshrc.
This functions "script" that is sourced can define bash functions such as ide and icd instead that we use alias for that.

IMHO this will simplify and increase flexibility for future extension (e.g. if we have more ideas like #778), since we only need to tweak .bashrc once and forever and newer releases of IDEasy can add new commands and completions all via functions.
The first step with this story should be an analysis and PoC testing if this plan works well or there are some drawbacks of this idea.
If all works as planned, we should implement it this way since it seems the superior design.

For the record: I decided for High as priority since this is a refactoring that will impact existing installations on roll-out / upgrade.
If this approach works out, it is better to have it soon before many projects and users will start installing and using IDEasy.


Configure GA tracking options

This follows the configuration we use on GOV.UK to anonymise IP addresses and disable advert tracking: https://github.com/alphagov/govuk_frontend_toolkit/blob/master/javascripts/govuk/analytics/google-analytics-universal-tracker.js#L13-L21

The code look good, but I'm just a little unsure if these options might be set too late (after data is already sent) do you know if the ordering matters?
Also not really related to this PR but a minor annoyance for us using this code is this event: https://github.com/alphagov/tech-docs-template/blob/ae16d395e7581a0de28aef6ef306b0639e43f482/template/source/javascripts/_analytics.js#L10 maybe that should pull an attribute from a html meta element.

I'd imagine it'd be more appropriate to set those options here https://github.com/alphagov/tech-docs-template/blob/master/template/source/layouts/_analytics.erb#L8 prior to the initial send call.

@kevindew Good point, fixed!

Tracked the other point in an issue: https://github.com/alphagov/tech-docs-template/issues/112

Looks like I can do it :)


Add forms

Blog app - Add forms

Create current_user method in Application controller
Create form to create posts on behalf of a specific user
Create form to create comments on behalf of a specific user
Allow Users to add likes to Posts.
Configure Routes for new and create actions
Implement new and create method for posts controller
Implement create methods for comment and likes controller

I have implemented the required changes


[Bug] game won´t start with latest version of mod on Linux

I'm on Debian 12 using KDE PLasma on Wayland (don't know if it's accurate to say it) and with the latest version of the mod on fabric 1.20.4, the game loads mods but when it's in the finale loading screen (before having the buttons singleplayer etc) it simply stops and don't load anymore

Can you provide logs ?

Here you go, sorry for the wait: https://mclo.gs/t4n3vrH

try without the spark mod

This is strange because i don't have the spark mod installed

right, idk what cuases the issue on linux ngl

Wet i get time i will try to find out what other mod cause the issue

Update: i started the game with only fabric api, cloth config and the mod with nothing else (not even sodium) and the game still won't start, so it's an issue with Linux (at least with Debian 12 on kDE Plasma on Wayland)

fuck

does the forge version work ? (it's called Pretty rain)

@Leclowndu93150
Arch Linux, Minecraft 1.20.1:
Forge 47.3.2 - works
Fabric 0.16.9 - works
Does not work on Minecraft 1.20.4:
Windows: https://mclo.gs/PUrEHC0
Arch Linux: https://mclo.gs/aOYUZIp

Then it's an issue with his operating system..

I just tried on Windows 11, and the game have the smae issue with latest particlerain mod installed on Fabric

Okay, i have only tested 1.20.1 and 1.21.1
Im in bed but i'll make special jars for 1.20.4

im going to upload in 30 min fixed versions for 1.20.4

Hello!
I can't find the new version, where did you upload it?

It works now

great


[IR] Implementation of QoS Features

Implementation of QoS features in the rmw package.

Overall fairly good, please run ament_uncrustify and ament_ccplint before posting a review :)

Interestingly enough many of your style comments weren't caught by the linters. Appreciate the catches and the style guide links.

OSRF requested that for new rmw types, we should be using the init()/fini() pattern (similar to what is found in rcl), instead of the create()/destroy() pattern (https://github.com/ros2/rmw/pull/167#discussion_r269694583). I will make this change.

I've added the interface changes for rmw_*_event_init


Ensure terraform destroy runs without refreshing data sources

This fixes a condition where you are not able to destroy because of an unreachable vault_cluster/bastion
Run terraform destroy without refreshing data sources

/lgtm


[e2e]: generic workflow_dispatch main default slsa3

Repo: https://github.com/slsa-framework/example-package/tree/main
Run: https://github.com/slsa-framework/example-package/actions/runs/11396738941
Workflow file: https://github.com/slsa-framework/example-package/tree/main/.github/workflows/e2e.generic.workflow_dispatch.main.default.slsa3.yml
Workflow runs: https://github.com/slsa-framework/example-package/actions/workflows/e2e.generic.workflow_dispatch.main.default.slsa3.yml
Trigger: workflow_dispatch
Branch: main
Date: Fri Oct 18 03:19:29 UTC 2024

Repo: https://github.com/slsa-framework/example-package/tree/main
Run: https://github.com/slsa-framework/example-package/actions/runs/11414049233
Workflow file: https://github.com/slsa-framework/example-package/tree/main/.github/workflows/e2e.generic.workflow_dispatch.main.default.slsa3.yml
Workflow runs: https://github.com/slsa-framework/example-package/actions/workflows/e2e.generic.workflow_dispatch.main.default.slsa3.yml
Trigger: workflow_dispatch
Branch: main
Date: Sat Oct 19 03:12:30 UTC 2024
Tests are passing now. Closing this issue.


⚙Tech Debt: Add explicit types

Currently a lot of the types in melt-ui seems to be inferred from the implementation rather than being explicitly typed. This has a tendency to create much more complex types than what an explicitly defined type would do + it makes it more difficult to refer to the types from elsewhere without oneself relying on something like ReturnType<typeof createTabs>["elements"]["trigger"]
Here's an example of the generated type of createTabs in the latest version, 0.73.0:

58 line long return type definition
/// <reference types="svelte" />
import type { MeltActionReturn } from '../../internal/types.js';
import type { TabsEvents } from './events.js';
import type { CreateTabsProps, TabsTriggerProps } from './types.js';
export declare function createTabs(props?: CreateTabsProps): {
    elements: {
        root: import("../../internal/helpers/index.js").MeltElement<import("../../internal/helpers/index.js").WithGet<import("svelte/store").Writable<import("../../internal/types.js").Orientation>>, import("svelte/action").Action<any, any, Record<never, any>>, ($orientation: import("../../internal/types.js").Orientation) => {
            'data-orientation': import("../../internal/types.js").Orientation;
        }, string>;
        list: import("../../internal/helpers/index.js").MeltElement<import("../../internal/helpers/index.js").WithGet<import("svelte/store").Writable<import("../../internal/types.js").Orientation>>, import("svelte/action").Action<any, any, Record<never, any>>, ($orientation: import("../../internal/types.js").Orientation) => {
            role: string;
            'aria-orientation': import("../../internal/types.js").Orientation;
            'data-orientation': import("../../internal/types.js").Orientation;
        }, string>;
        trigger: import("../../internal/helpers/index.js").MeltElement<[{
            update: (updater: import("svelte/store").Updater<string>, sideEffect?: ((newValue: string) => void) | undefined) => void;
            set: (this: void, value: string) => void;
            subscribe(this: void, run: import("svelte/store").Subscriber<string>, invalidate?: import("svelte/store").Invalidator<string> | undefined): import("svelte/store").Unsubscriber;
            get: () => string;
            destroy?: (() => void) | undefined;
        }, import("../../internal/helpers/index.js").WithGet<import("svelte/store").Writable<import("../../internal/types.js").Orientation>>], (node: HTMLElement) => MeltActionReturn<TabsEvents['trigger']>, ([$value, $orientation]: [string, import("../../internal/types.js").Orientation]) => (props: TabsTriggerProps) => {
            type: "button";
            role: string;
            'data-state': string;
            tabindex: number;
            'data-value': string;
            'data-orientation': import("../../internal/types.js").Orientation;
            'data-disabled': boolean | undefined;
            disabled: boolean | undefined;
        }, string>;
        content: import("../../internal/helpers/index.js").MeltElement<{
            update: (updater: import("svelte/store").Updater<string>, sideEffect?: ((newValue: string) => void) | undefined) => void;
            set: (this: void, value: string) => void;
            subscribe(this: void, run: import("svelte/store").Subscriber<string>, invalidate?: import("svelte/store").Invalidator<string> | undefined): import("svelte/store").Unsubscriber;
            get: () => string;
            destroy?: (() => void) | undefined;
        }, import("svelte/action").Action<any, any, Record<never, any>>, ($value: string) => (tabValue: string) => {
            role: string;
            'aria-labelledby': string;
            hidden: boolean | undefined;
            tabindex: number;
        }, string>;
    };
    states: {
        value: {
            update: (updater: import("svelte/store").Updater<string>, sideEffect?: ((newValue: string) => void) | undefined) => void;
            set: (this: void, value: string) => void;
            subscribe(this: void, run: import("svelte/store").Subscriber<string>, invalidate?: import("svelte/store").Invalidator<string> | undefined): import("svelte/store").Unsubscriber;
            get: () => string;
            destroy?: (() => void) | undefined;
        };
    };
    options: import("../../internal/helpers/index.js").ToWritableStores<Omit<{
        defaultValue?: string | undefined;
        value?: import("svelte/store").Writable<string> | undefined;
        onValueChange?: import("../../internal/helpers/index.js").ChangeFn<string> | undefined;
        orientation: import("../../internal/types.js").Orientation;
        activateOnFocus: boolean;
        loop: boolean;
        autoSet: boolean;
    }, "value" | "onValueChange" | "defaultValue" | "autoSet">>;
};

This is in turn referenced when defining these types:
export type Tabs = BuilderReturn<typeof createTabs>;
export type TabsElements = Tabs['elements'];
export type TabsOptions = Tabs['options'];
export type TabsStates = Tabs['states'];

If I want to refer to the type of TabsElements['triggers'] or make a generic helper for such a trigger, then my only choice is to use the exact TabsElements['triggers'] type.
Preferably the return type of createTabs should be the Tabs type from types.ts instead of the other way around:
type Tabs = {
	elements: TabsElements,
	states: TabsStates,
	options: TabsOptions,
};

And eg. TabsElement should be something like:
interface TabsElement {
	root: TabsRootElement,
	list: TabsListElement,
	trigger: TabsTriggerElement,
	content: TabsContentElement,
}

Then I can simply do something like import type { TabsTriggerElement } from '@melt-ui/svelte';  when I want to / need to refer to the TabsTriggerElement and not have it be dissected through the typeof of the actual creation function (this is my use case but something that the intellisense of eg. VSCode gives me no help in achieving as it has no knowledge that whatever createTabs returns can be referenced through eg. TabsElement['trigger'] already).
It may even be preferable to double down on this and have the interfaces extend an interface it shares with other trigger-able  elements:
interface MeltElementWithTrigger {
	root: MeltElementRoot,
	trigger: MeltElementTrigger,
	content: MeltElementContent,
}
interface TabsElement extends MeltElementWithTrigger {
	list: TabsListElement,
}

That way one could easily refer to a MeltElementTrigger and know they all refer to the same kind of implementation (if that's the case).
Some references to back up these thoughts:
The Writing Easy-to-Compile Code section of the TypeScript performance wiki page mentions:

Using Type Annotations:

Adding type annotations, especially return types, can save the compiler a lot of work. In part, this is because named types tend to be more compact than anonymous types [...] Type inference is very convenient, so there's no need to do this universally - however

Preferring Interfaces Over Intersections:

Interfaces create a single flat object type that detects property conflicts, which are usually important to resolve! Intersections on the other hand just recursively merge properties, and in some cases produce never. Interfaces also display consistently better, whereas type aliases to intersections can't be displayed in part of other intersections. Type relationships between interfaces are also cached, as opposed to intersection types as a whole. A final noteworthy difference is that when checking against a target intersection type, every constituent is checked before checking against the "effective"/"flattened" type.
For this reason, extending types with interfaces/extends is suggested over creating intersection types.

I think its also a matter of typing philosophy – should types merely be a mirroring of the implementation or should types be an explicit contract that concisely defines what API one is offered.
I think explicit contracts that concisely defines what API:s one are offered are preferable and more useful.
And to refer to your contribution guidelines on Heuristics:

Complexity should be introduced when it’s inevitable
Code should be easy to reason about
Code should be easy to delete
Avoid abstracting too early

Depending on how one define Complexity it may or may not be considered more complex to have explicit rather than implicit types. When it comes to reason about the code though, explicit concise types are much easier to reason about whereas inferred ones can be very hard to reason about.
Is it easier to delete? I would say it's both yes and no – its easier to know what types are explicitly used by every function and thus easier to delete, but it is more lines of code so one could argue that its harder. I think its a negligible difference.
Avoid abstracting too early – being explicit about types can be considered an abstraction and can be deemed as something that is unnecessary / too early to do but I think that the explicit vs implicit dimension of code ultimately is a different dimension to the abstraction one – one can have abstracted code that's still highly implicit about its conditions (in a way the code that's in melt-ui for creating these elements right now) and one can have very non-abstracted code that's highly explicit about its conditions.
I would say that being explicit helps in understanding the nature of an abstraction and as such could possibly be considered a prerequisite for abstractions, but it's ultimately a different aspect of the code to the act of abstraction itself.

 Give me a moment,

👍 If anything I think that issue should be a duplicate of this one as clearer types is a somewhat ambiguous request 😜

First of all, thank you for filling out this detailed issue. I'll reopen this one and close #510 as it's much better detailed, I agree with you.
This is something I do want to explore. I want to figure out a way to make the authoring experience still manageable when declaring these explicit types, but in the end, I concur that what matters most is the simplicity and discoverability of these exported types.

I think its also a matter of typing philosophy – should types merely be a mirroring of the implementation or should types be an explicit contract that concisely defines what API one is offered.
I think explicit contracts that concisely defines what API:s one are offered are preferable and more useful.

Maybe so. But then questions arise, should I be super detailed over what these types entail? With inferring, you get useful information that can be passed, for example, to Svelte's language server. E.g. if one of Melt's stores passes in a type="button" to a non-button element, it (should) complain. Typing these in manually is unrealistic, I'd say.
But it's debatable whether this information is that useful. Need to explore how I'd work around these.
One API I flirt with, is making the create functions use a generic creator function. Something like makeBuilder, which enforces some strict return types. It could be useful here, by requiring us to pass in other types as generics.

P.S. Sorry for prematurely closing without much of a response! It's my anxiety screaming at me when I see the number of issues growing and me wanting to keep them down as much as possible 😄

Yeah, a generic creator function could potentially go far and I would also explore the composability of types and whether it would be feasible to set up and maintain something like:
interface MeltElementWithTrigger {
	root: MeltElementRoot,
	trigger: MeltElementTrigger,
	content: MeltElementContent,
}

interface TabsElement extends MeltElementWithTrigger {
	list: TabsListElement,
}

One potentially low hanging fruit by the way would be to modify eg MeltElement and give it default types:
export type MeltElement<
	S extends Stores | undefined = undefined,
	// eslint-disable-next-line @typescript-eslint/no-explicit-any
	A extends Action<any, any> = Action<any, any>,
	R extends ElementCallback<S> = ElementCallback<S>,
	Name extends string = string
> = MeltElementStore<S, A, R, Name> & A;

That way one can reference a MeltElement wherever one expects a MeltElement and ideally it should accept all kinds of such elements.
It would also enable eg. satisfies MeltElement

We do export AnyMeltElement, but that could be an improvement 🤔

Right, I see now, yeah I think providing defaults is pretty common and makes it more discoverable as then one can find that type simply by drilling deeper into the type, one never has to find a sibling or child type to use instead

I'm playing around with auto-generating API reference from JSDoc, and I feel tackling this would be of huge help. Maybe I'll work on them simultaneously

big +1 to this issue
right now I had to write
const sharedOptionsBoxesByName = new Map<string, any>(
    sharedOptionNames.map((name) => [
      name,
      createCheckbox({
        defaultChecked: false,
      }),
    ]),
  );

i'll try ReturnType<typeof createCheckbox>, but still not ideal

Now I'm trying to use the mapped Melt Checkboxes in an {#each}, but i'm hitting a few errors depending what i try
{#each optionNames as name}
  <button
      use:melt={???????}
      class="check-button"
      class:checked={???????}
      id="checkbox"
  >
    <input use:melt={$input} />
  </button>
{/each}

focusing on use:melt...
svelte doesn't let you use the ! operator inlined in dom, so i have to create at least one function to assert the option name exists in the map
type MeltCheckbox = ReturnType<typeof createCheckbox>;

function getOptionBox(name: OptionName): MeltCheckbox {
  return optionBoxesByName.get(name)!;
}

// trying to create a function to extract just the root store was a typing mess,
// and svelte also complained about only creating stores at the top level

svelte wouldn't let me do the following, cause the dollar tries to apply to the function
use:melt={$getOptionBox(name).elements.root}

this compiles, but is not reactive / doesn't set on click
use:melt={get(getOptionBox(name).elements.root)}
class:checked={get(getOptionBox(name).states.checked)}

i'll follow up in the discord support channel


Move PrettyPrinter class into kast submodule

This is factored out of: https://github.com/runtimeverification/pyk/pull/433
This PR moves the PrettyPrinter class into its own module kast.pretty, as well as addressing some minor printing issues. In particular:

Class PrettyPrinter is moved from ktool.kprint to kast.pretty, and associated helpers are moved too.
PrettyPrinter now takes more arguments associated with unparsing directly in Python (but not with unparsing using kast), including:

definition: KDefinition: used to build a SymbolTable.
extra_unparsing_modules: Iterable[KFlatModule]: used for defining new symbols on the fly and being able to unparse them.
patch_symbol_table: Callable[[SymbolTable], None]: instead of relying on overriding the classmethod, it's passed as explicit argument.

All the appropriate arguments are threaded through KPrint, KRun, and KProve to be able to build a PrettyPrinter.
PrettyPrinter.print is broken into two separate methods: PrettyPrinter._print_kouter and PrettyPrint._print_kinner.

First it checks which method it should call on the passed in term.
Teh sub-methods PrettyPrinter._print_* are calling the more speciic methods most of the  time, except:
When we switch from printing KOuter to printing KInner or vice-versa, we go back through PrettyPrinter.print top-level method. This allows us to do things like call undo_aliases only once when we go to unparse a KInner, but also have it work inside a KRule when unparsing the rule body or requires clause, for example.

The method pretty_print_kast is removed, and relevant tests of that deleted. We no longer expose the functionality of printing directly from a SymbolTable, and that becomes a more opaque internal data-structure.

I'm reverting the changes made above to the state that was approved, and will open a follow-up PR, because separating the recursion scheme is proving more tricky because of type-system weaknesses.


How about DynamoDB?

Did you consider using DynamoDB instead of Firebase.  I love Firebase, but in this case DynamoDB might be better.  Or perhaps you tried DynamoDB and found a problem.
If it used DynamoDB the whole stack of resources for this monitor could be put into a cloudformation template, and then it would be more simple to deploy.

Great question. I believe we tried Redis via Elasticache but found the endpoint had to be in a specific  VPC and then the lambda needed to be as well and then it was more difficult to monitor multiple ECS clusters that were in multiple VPCs. I'm open to DynamoDB though if it can easily be used by a lambda not in the same VPC as it.

Regarding Lamba use cases with DynamoDB : using DynamoDB should not be an issue in this situation.
I'm currently a Lambda with a similar use case (doing AWS endpoint calls & store actions/events in a DynamoDB table) without attaching it to any VPC. As scytacki mentioned, this is pretty cool to have all of those object in the same CloudFormation template.
I'm considering implementing this DynamoDB setup based on your code. If anybody is already working on this, I would like to open a Pull Request when this will be ready.
So for this : do you want to keep the capability to use Firebase ? Or fully replacing it by DynamoDB is OK ?
Also I plan to add a custom metric to get in Cloudwatch some graph & alerting based on the number of time when an ECS instance was replaced due to agent failure. Is it ok to provide this feature in the same PR ?

@jleloup that sounds good, please do. I'm not tied to Firebase, I guess I just didn't know how to use DynamoDB right. I'd be happy to accept a PR that changes this over to use DynamoDB instead of Firebase.

@scytacki, @fillup
I've opened pull request #7 to switch from firebase to DynamoDB.

We're archiving this repo.  Closing this issue.


AzNamingTool - Unable to turn off Info Log. Generating too many logs on console continuously

Hello,
I am experimenting with AzNamingTool and deployed the same in my own Lab environment - http://aznaming.multicloudcoe.com/. I am noticing that it continuously generating too many logs. I deployed this tool as docker container.
Following are steps I performed:

Changed file appsettings.json https://github.com/microsoft/CloudAdoptionFramework/blob/master/ready/AzNamingTool/appsettings.json
https://github.com/microsoft/CloudAdoptionFramework/blob/master/ready/AzNamingTool/appsettings.Development.json
https://github.com/microsoft/CloudAdoptionFramework/blob/master/ready/AzNamingTool/repository/appsettings.json
In All three files I changed log level to Warning.
Then rebuild the image and started new container.

However I still notice a lot Info logs are generating:
still seeing logs 30206 text/plain;charset=UTF-8 -
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
Executing endpoint '/_blazor'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
Executed endpoint '/_blazor'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished HTTP/1.1 GET http://aznaming.multicloudcoe.com/blazor?id=DqM9S2bD02THNGGBmzCPGQ&=1675404030206 text/plain;charset=UTF-8 - - 200 148 application/octet-stream 0.2169ms
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
Request starting HTTP/1.1 POST http://aznaming.multicloudcoe.com/_blazor?id=DqM9S2bD02THNGGBmzCPGQ text/plain;charset=UTF-8 469
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
Executing endpoint '/_blazor'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
Executed endpoint '/_blazor'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
Request finished HTTP/1.1 POST http://aznaming.multicloudcoe.com/_blazor?id=DqM9S2bD02THNGGBmzCPGQ text/plain;charset=UTF-8 469 - 200 0 text/plain 0.1233ms
Could you please suggest how to turn off these logs?

Hello Tarun,
We are investigating this and will respond when we have more details. Thank you.
-Bryan


The stamp of inven.co.kr does not appear

Please answer the following questions for yourself before submitting an issue

[X] Filters were updated before reproducing an issue
[X] I checked the knowledge base and found no answer
[X] I checked to make sure that this issue has not already been filed

AdGuard version
AdGuard for Windows 7.19.0
Browser version
Chrome
OS version
Windows 11
Issue Details
Steps to reproduce:

Enable only HTTPS filtering excluding Ad filtering, Tracking protection, DNS filtering and Userscript.
Visit the provided URL: https://www.inven.co.kr/board/lostark/6271/829764

Expected Behavior
No response
Actual Behavior
The stamp of inven.co.kr does not appear
Screenshots
No response
Additional Information
https://gall.dcinside.com/mgallery/board/view/?id=adguard&no=186&page=1

@piquark6046 What do you mean for "stamp"? The page looks the same with and without adguard for me (including the broken image)

It seems that the web browser and AdGuard did not connect domain of the broken stamp image because of a TLS cert issue.


chore: frontend and backend telemetry updates for execute flow #28800 and #28805

Description

Added frontend and backend custom OTLP telemetry to track execute flow
Updated end vars in client side code to match with server sdk intialisation code.

Fixes #28800 and #28805

Chore (housekeeping or task changes that don't impact user perception)

[x] Manual

[ ] JUnit

[ ] Jest

[ ] Cypress

Add Testsmith test cases links that relate to this PR
Link issues raised during DP testing for better visiblity and tracking
(copy link from comments dropped on this PR)

[x] My code follows the style guidelines of this project

[x] I have performed a self-review of my own code

[x] I have commented my code, particularly in hard-to-understand areas

[ ] I have made corresponding changes to the documentation

[x] My changes generate no new warnings

[ ] I have added tests that prove my fix is effective or that my feature works

[ ] New and existing unit tests pass locally with my changes

[ ] PR is being merged under a feature flag

[ ] Speedbreak features have been covered

[ ] Test plan covers all impacted features and areas of interest

[ ] Test plan has been peer reviewed by project stakeholders and other QA members

[ ] Manually tested functionality on DP

[ ] We had an implementation alignment call with stakeholders post QA Round 2

[ ] Cypress test cases have been added and approved by SDET/manual QA

[ ] Added Test Plan Approved label after Cypress tests were reviewed

[ ] Added Test Plan Approved label after JUnit tests were reviewed

Pull Request Template
Use this template to quickly create a well written pull request. Delete all quotes before creating the pull request.

Description

Add a TL;DR when description is extra long (helps content team)
Please include a summary of the changes and which issue has been fixed. Please also include relevant motivation
and context. List any dependencies that are required for this change
Links to Notion, Figma or any other documents that might be relevant to the PR

PR fixes following issue(s)
Fixes # (issue number)

if no issue exists, please create an issue and ask the maintainers about this first

Media

A video or a GIF is preferred. when using Loom, don’t embed because it looks like it’s a GIF. instead, just link to the video

Type of change

Please delete options that are not relevant.

Bug fix (non-breaking change which fixes an issue)
New feature (non-breaking change which adds functionality)
Breaking change (fix or feature that would cause existing functionality to not work as expected)
Chore (housekeeping or task changes that don't impact user perception)
This change requires a documentation update

Testing

How Has This Been Tested?

Please describe the tests that you ran to verify your changes. Also list any relevant details for your test configuration.
Delete anything that is not relevant

[ ] Manual
[ ] JUnit
[ ] Jest
[ ] Cypress

Test Plan

Add Testsmith test cases links that relate to this PR

Issues raised during DP testing

Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR)

Checklist:
Dev activity

[x] My code follows the style guidelines of this project
[x] I have performed a self-review of my own code
[x] I have commented my code, particularly in hard-to-understand areas
[ ] I have made corresponding changes to the documentation
[x] My changes generate no new warnings
[ ] I have added tests that prove my fix is effective or that my feature works
[x] New and existing unit tests pass locally with my changes
[ ] PR is being merged under a feature flag

QA activity:

[ ] Speedbreak features have been covered
[ ] Test plan covers all impacted features and areas of interest
[ ] Test plan has been peer reviewed by project stakeholders and other QA members
[ ] Manually tested functionality on DP
[ ] We had an implementation alignment call with stakeholders post QA Round 2
[ ] Cypress test cases have been added and approved by SDET/manual QA
[ ] Added Test Plan Approved label after Cypress tests were reviewed
[ ] Added Test Plan Approved label after JUnit tests were reviewed

/ok-to-test sha=20ef9f01973e5473628181152cdaee5a5b197829

/build-deploy-preview skip-tests=true

Client side changes looks good!

/ok-to-test sha=20ef9f01973e5473628181152cdaee5a5b197829

/ok-to-test sha=20ef9f01973e5473628181152cdaee5a5b197829


Hit "Failed to send compaction finished" error when closing the DB.

With below code, I get this error. Likely compaction message is sent to invalid handles after close.
thread 'tokio-runtime-worker' panicked at /home/vigneshc/.cargo/git/checkouts/slatedb-beb4969f61fa9677/9642b33/src/compactor_executor.rs:130:18: failed to send compaction finished msg: "SendError(..)"
let options = DbOptions {
        flush_ms: 100,
        manifest_poll_interval: Duration::from_millis(100),
        min_filter_keys: 10,
        l0_sst_size_bytes: 20 * 1024,
        compactor_options: Some(CompactorOptions::default()),
    };
    let kv_store = Db::open(
        Path::from("attempt3"),
        options,
        blob_store,
    )
    .await
    .unwrap();

    println!("Writing for next 1 minute");
    let mut record_count = 0;

    // write a loop that inserts 1000 keys repeatedly or a duration of 1 minute
    let start = Instant::now();
    let write_options = slatedb::config::WriteOptions {
        await_flush: false
    };

    while start.elapsed() < Duration::from_secs(60) {
        let iteration = start.elapsed().as_secs();
        for i in 0..1000 {

            kv_store.put_with_options(format!("key-{}-{}",iteration % 5, i).as_bytes(), format!("value{}", i).as_bytes(), &write_options).await;
            record_count += 1;
        }
        sleep(Duration::from_millis(100)).await;
    }

    println!("Total records written: {}", record_count);

    // Put
    let key = b"test_key";
    let value = b"test_value";
    kv_store.put(key, value).await;

    // Get
    println!("{:?}", kv_store.get(key).await.unwrap());

    // Delete
    kv_store.delete(key).await;
    println!("{:?}", kv_store.get(key).await.unwrap());

    // Close
    kv_store.close().await.unwrap();

Tracing through this code a bit...
The error comes from TokioCompactionExecutorInner.start_compaction:
            this.worker_tx
                .send(CompactionFinished(result))
                .expect("failed to send compaction finished msg");

Called by TokioCompactionExecutor.start_compaction
Called by CompactorOrchestrator.start_compaction
Called by CompactorOrchestrator.submit_compaction
Called by CompactorOrchestrator.maybe_schedule_compactions
Called by CompactorOrchestrator.finish_compaction and CompactorOrchestrator.refresh_db_state
Called by CompactorOrchestrator.run (via WorkerToOrchestoratorMsg::CompactionFinished message in loop)
Sent by TokioCompactionExecutorInner.start_compaction
This looks like a loop, but it should halt when maybe_schedule_compactions returns false if there are < 4 L0 SSTs. In your case, I think the L0's are coming in fast enough (due to low l0_sst_size_bytes) that there are pretty much always >= 4 L0 SSTs.
As @vignesh suggested, I started looking at the close code. It's pretty simple:
The compactor's close happens in CompactorOrchestrator.run when it receives any message on external_rx:
    fn run(&mut self) {
        // ...
        loop {
            crossbeam_channel::select! {
                // ...
                recv(self.external_rx) -> _ => {
                    return;
                }
            }
        }
    }

external_tx and external_rx are created in Compactor.new
external_tx is saved as main_tx in the Compactor struct at the end of Compactor.new.
self.main_tx.send(Shutdown).expect("main tx disconnected"); is sent on Compactor.close
Compactor.close is called by Db.close
So, it seems to me like it's indeed possible that close shuts down the CompactorOrchestrator run loop and destructs all resources (including worker_tx's channel).

I was able to replicate this bug as part of https://github.com/slatedb/slatedb/issues/124.
I see:
thread 'tokio-runtime-worker' panicked at /Users/chrisriccomini/Code/slatedb/src/db_common.rs:18:14:
failed to send memtable flush msg: SendError { .. }
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
thread 'main' panicked at /Users/chrisriccomini/Code/slatedb/src/db.rs:323:30:
Failed to join flush thread: JoinError::Panic(Id(13), ...)

When I set the sleep duration in drain_blocks to sleep(Duration::from_millis(40)).await;. It's very hit and miss. I seem to be able to trigger it about once every 3-5 tries. I also get plenty of InvalidCompaction errors interspersed throughout the log (see #124).
NOTE: I'm using the code in #124 to trigger these errors, not @vigneshc's code.

Wondering: do we need a barrier on our loops that blocks prior to returning (when shutdown is called) until any outstanding flush/compaction calls are complete?

Also, there are three separate event loops: WAL flush (flush.rs), compaction (compactor.rs), and memtable flush (mem_table_flush.rs). I think I was the one who suggested breaking flush.rs up, but it's pretty hard to trace all this code. I think a single event loop might be preferable?

I had thought about this a bit. My reasoning for retaining the current breakup:

I think flushing should be decoupled from memtable writes because we don't want to block flushes on memtable writes because writes block on the flush task.
Compaction is nice to keep decoupled from memtable/write flushing because it should be runnable as a separate process. That said, we could in theory opt to run it in the same event loop as memtable flush if compaction is running in the db (the common case for now). The main hurdle here is that right now the compaction event loop is a thread, and the memtable flush is an async task. If we want to merge them I'd prefer making the memtable flush non-async and running it in a thread that also runs the compactor.
All that said, I wasn't convinced of the benefit. At the end of the day these are 3 distinct processes that aren't inherently coupled to each other - seems easiest to reason about if they are modeled as separate tasks/threads.

Wondering: do we need a barrier on our loops that blocks prior to returning (when shutdown is called) until any outstanding flush/compaction calls are complete?

Did you have a use case in mind? We won't do anything "wrong" if we don't do this. The main benefit I can see is that we can do a clean shutdown where we flush whatever we have in the memtable to an l0 so we don't have to recover it. But we could also acheive this by shutting down the flush task first, and then shutting down the memtable task.

For this bug, we need to implement graceful shutdown of the compaction executor. As @criccomini observed above, right now we just drop the executor on the floor when CompactorOrchestrator stops, without trying to stop in-flight compaction tasks. This won't break anything, but it can lead to the spurious error above, and more egregiously - leave the compaction task hanging around chewing up resources if closing the db isn't done right before shutting down tokio.
I think the shutdown flow should look something like:

Compactor Orchestrator is notified that it should stop over external_rx
Compactor Orchestrator asks the compaction executor to stop (using some function like stop in CompactionExecutor).
The CompactionExecutor impl implements stop by notifying any compaction tasks that they should stop, and then joining outstanding tasks
Compaction tasks need to check whether they need to stop, and should exit when they do.
Compactor Orchestrator should drain the worker status channel (worker_rx) and make any updates to the manifest about completed compaction work.
Compactor Orchestrator exits.

But we could also acheive this by shutting down the flush task first, and then shutting down the memtable task.

Gotcha. Yes, I misunderstood select! and thought it could run branches in parallel. Sounds like it's only concurrent. Thus, once flush's shutdown message is received, no further flushes can happen. So no barrier is needed.

Taking a shot at this.

PR up at #133


feat: Export schema in SDL

Adds support for exporting an existing schema in the human-readable schema definition language (SDL). The Ktor feature by default provides it via GET /<endpoint>?schema.
SDL follows introspection config, so if introspection queries are disabled, export in SDL will also be disabled.
As implementations that support SDL have to provide the @deprecated directive, this also adds that directive to the built-in directives (without attempting to fix existing issues there).
Resolves #79

First (fully working) draft of schema export in SDL for review. Documentation will be updated once the implementation is more or less stable.

I might need to implement https://spec.graphql.org/October2021/#sec--specifiedBy as well 🤔


On focus the Radio / Checkbox buttons on Firefox show a blue focus indicator behind the styled focus.

Environment

Operating System: Darwin
Node Version:     v16.20.2
Nuxt Version:     3.6.5
Nitro Version:    2.5.2
Package Manager<EMAIL_ADDRESS>Builder:          vite
User Config:      -
Runtime Modules:  -
Build Modules:    -

Reproduction
Go to https://www.ripple.sdp.vic.gov.au/storybook/?path=/story/forms-radio-group--default-variant on Firefox, use TAB and arrows to move through the radio button.
Describe the bug
Blue focus indicator shows on Firefox that does not show on Chrome.
https://github.com/dpc-sdp/ripple-framework/assets/12739575/89fc1cf8-570d-47aa-885f-52dbcec57023
Additional context
No response
Logs
No response
Final checks

[X] Read the contribution guide.
[X] Check existing discussions and issues.

closed in #1091


table setting disappear after uninstall then reinstall NLT plugin or delete the "notion-like-tables\data.json"

Describe the bug
after uninstall then reinstall NLT plugin or delete the ".obsidian\plugins\notion-like-tables\data.json" ,all NLT table settings disappear, such as Cell Types, Column Resizing. It's better to save NLT table settings in each table definition file.
Steps to reproduce
uninstall then reinstall NLT plugin or delete the NLT plugin setting file ".obsidian\plugins\notion-like-tables\data.json"
Expected behavior
NLT table settings is separated from NLT plugin setting file "notion-like-tables\data.json".  It's better to save NLT table settings in each table definition file.
Are you using the mobile app?
Yes
Obsidian debug info
none
Relevant log output
No response

I feel like everything it's doing can be handled in markdown and YAML (which would improve portability and prevent data duplication).

Since the plug-in controls the markdown file containing the table, Column Ids can be handled via column names like this: "col:[Unique ID]:[Display Name]" (ex: col:Kq1iHUwa:User Name)
Same can be said of row ID - this can be inferred from row number and if multiple custom orderings are needed, you could add a column named something like "order:[Unique Id]" (leaving off the display name so that the plugin doesn't show the column)
Column definitions could then be described in YAML, referencing the column id

This was very problematic. Fixed in 6.0.0


Add support of L-BFGS optimizer

L-BFGS - Is second order optimizer having good convergence but is memory intensive.
Offloading optimizer state with deep-speed would improve method accessibility for users constrained in GPU-RAM

@wingrime, thanks for this suggestion. Are you able to provide a PR?


Market Order: The Price should come first

http://i.imgur.com/zLmyenB.png
As you can see the screenshot, I tried to order at 0.000016 TRADE.BTC/BTS. But for some reasons, final confirmation box tells me the price is 0.00001599xxx. In this case, order cannot be filled, and users will be annoyed. The price should come first. If I ordered at 0.000016, it should be 0.000016.

The decimal bug still exists.

I've refactored the prices in the Exchange to use price objects like in the backend, but I'm not comfortable with pushing it live tomorrow without testing so I'd prefer to push this back to the next milestone

Can you place an overall estimate on this?

It's almost done, just a couple hours more on my end to make sure it all works as expected.


Creating  A Donation Page

Creating a donation page for the charities(beacause this website will reach 1000's of people)
sample

please assign this issue to me under GSSoC-extd and hackoctober 2024 .

Sir , is your html file is private/hidden ,  I am not able catch it , even i have tried to fetch it from sever-> site-> public


How to dynamic reset the cropperSettings. width & heigth

who can tell me thanks ,I do like this
 ,But its do not  worked...

hmmm... that might be tricky - the problem is that you need to reinitialize the cropper for this because the magic happens within the constructor. What is the use case for this feature? Do you need it ASAP? Can this be postponed for 1.0? (currently working on 0.9)

@cstefanache
Application scenarios:I need to get pictures of different sizes for different third party API.  So I want this feature, and that is  ok to be postponed for 1.0，I hope  to see that .
finally, Thanks alot cstefanache

You can try using something like this:
this.cropper.cropper = new ImageCropper(this.cropperSettings); this.cropper.cropper.prepare(this.cropper.cropcanvas.nativeElement);

@piotrn1 i tried the above code, it didnt work, after running the prepare method the image will replaced with a blank (gray). any idea how to make that work ? i need to change my crop setting from landscape to portrait at dun time

i need to be able to change settings also... has this been added?

My use case: I want the user to be able to select the crop ratio.

Like @diannall I'd like user to be able by clicking +/- buttons change compressRatio setting - now I have possibility only change ratio but how to initialize result image change?

Also curious on an update. I want to allow the users to toggle the "Lock aspect ratio" feature. Trying to figure out a work-around right now to reload the cropper, however not having a whole lot of luck.
If anyone has a work around for now, that would be appreciated. Thanks!

Are there any updates on this feature?

Thanks @piotrn1 this worked for me.
More details here: https://github.com/web-dave/ngx-img-cropper/issues/8#issuecomment-376651830


Social Management Features

To Do:

[x] Cursor that changes state when you look at a user
[x] Raycaster which allows you to detect when you're looking at a user
[x] Display nametag when you look over a user (or maybe a shapecast so that it's a bit more broad of a target)
[ ] Display all nametags in frustum when you toggle a hotkey
[ ] When you click a user (or maybe right click) you bring up the member list with that member focused.
[ ] Member list can also be brought up with a hotkey
[ ] Member list needs a mute / block button.
[ ] Mute state should probably just be stored in memory
[ ] Block I think is equivalent to Matrix's ignore? We just need to figure out what this means for networking state.

Related to #145

#151 added the following:

[x] Display nametag when you look over a user (or maybe a shapecast so that it's a bit more broad of a target)
[x] Display all nametags in frustum when you toggle a hotkey

#154 adding the following:

[ ] Display nametag when you look over a user (or maybe a shapecast so that it's a bit more broad of a target)
[ ] Display all nametags in frustum when you toggle a hotkey

#160 adding:

[ ] When you click a user (or maybe right click) you bring up the member list with that member focused.
[ ] Member list can also be brought up with a hotkey
[ ] Member list needs a mute / block button.
[ ] Mute state should probably just be stored in memory
[ ] Block I think is equivalent to Matrix's ignore? We just need to figure out what this means for networking state.

#175 adding:

[ ] Display all nametags in frustum when you toggle a hotkey


Site (http://prodops.guide/) is no longer available and therefore removed

Thanks for the contribution :+1:


Hermann producer should support partition keys

There are all sorts of partition keys that we could use, providing a way to specify a key per message is already supported in scala kafka.
I see this as a Partitioner class that is specified on producer creation, and a key on each message that is run through the Partitioner class.
A very rough psuedo-code example:
class GuidPartitioner
   # somehow get the number of partitions for a topic
   def initialize(topic_metadata)
      @partition_count = topic_metadata.get partitions
   end
   # guids are uniformly distributed, so a simple mod on partition_count should get a good distribution
   # guid [UUIDTools::UUID] the guid object
   def select_partition(guid)
       guid.to_i % @partition_count
   end
end

The default could be key-less, like it is now

See #121, can't find the JRuby pull request right now. Anyways, this was addressed and released a while ago


Rework github actions

Merge integration tests workflows in a single flow
The new test workflow first runs our checks target, if successful, the integration tests and unit tests are started in parallel using the github actions matrix features. Running the checks first gives as a fast fail without wasting github action resources on long unit/integration tests.
The job matrix features helps to configure a job with different configurations. That is, we don't need to create a workflow file per integration test we would like to run in parallel.
Docker images are only pulled for integration tests

The unit tests are currently supposed to fail.

PR #308 fixes the docker issue with the fsccli unit test
The failure of the race issue needs to be tackled.

Removed unit-test-race for now. I will create a separate PR for that.


Errors causing integration tests to fail

getting a ton of these errors causing integration tests to file
Error: Error: vite-env-only: unreplaced macro

Did you forget to add the 'vite-env-only' plugin to your Vite config?
👉 https://github.com/pcattori/vite-env-only#install
 ❯ Module.maybe node_modules/vite-env-only/dist/macros.js:7:9
 ❯ app/routes/api/$version/assessments.ts:17:34
 ❯ app/routes/api/integration/assessments.test.ts:1:1

vi.mock("vite-env-only/macros", () => ({
  serverOnly$: (fn: any) => fn,
  maybe: (fn: any) => fn,
}));


Compatible Products

Can you add a way in the json database to see the Compatible Products like when you choose a motherboard only shows you the Compatible cpus.

Hi, thanks for the request. See #8 -- there are lots of properties that are not exposed on product listings that are only visible on individual product pages, which would give you the ability to check for compatibility. I haven't had the time to refactor the scraper to do this and frankly I'm not even sure it's possible given the fact that there are 60k+ parts, meaning you would have to send tens of thousands of requests to PCPP which is... impractical, not to mention abusive.
I can look into it more and give an update when I have the time, but no guarantees for now.


Binding

add data binding to food detail fragment

@GolnazTorabi I'm glad that you contributed it but we're not planning to use binding in this repo since we already using ViewBinding. Please communicate before opening PRs on issues or discussions. Please have a look at Contribution Guidelines