Improving the startup time and performance of the Database image

MODERATOR NOTE: Originally posted by @lukaseder in https://github.com/oracle/docker-images/issues/1678#issuecomment-779940945 which is closed. I'm opening this new issue to continue that discussion.

I'm coming here from a Twitter discussion: https://twitter.com/gmarziou/status/1361700331483234307
I understand that these things are difficult to move forward at Oracle. I've been in touch with numerous people at Oracle about this topic, including e.g. @gvenzl. I just want to stress that pretty much all of Oracle's competition, including IBM with both Db2 and the arcane Informix, or Microsoft with SQL Server (they even had to adapt everything to work on Linux, first!!), and obviously PostgreSQL, just to name a few (a few more: CockroachDB, Exasol, Firebird, HANA, Ignite, MariaDB, MemSQL (now SingleStore), MySQL) make working with Docker:

A lot easier
A lot faster
A lot less lawyer-y

To be fair, an example that is harder to work with: Sybase ASE. Yes, given Larry's only ever tweet, Oracle is still doing better than SAP. Oh wait. No. HANA is also by SAP. 😁
@gvenzl recently asked me to join a product meeting at Oracle where Oracle would reach out to the community to learn what Oracle can improve with respect to developer friendliness, especially in a context of losing to the competition.
This is one of the top issues that comes to my mind from a developer perspective. Yes, things were a lot worse in the past in pre-docker days, and we're also discussing this publicly on github instead of via a closed MOS SR. But things could be much better by now with regards to this docker integration. This issue here could be one of Oracle's top dev friendliness priorities. Alas, it was auto-closed twice.
Look at how I install SQL Server 2019:
docker pull mcr.microsoft.com/mssql/server:2019-latest
docker run -e ACCEPT_EULA=Y -e SA_PASSWORD=Test1234 -e MSSQL_PID=Express -p 1433:1433 --name SQLSERVER2019 -d mcr.microsoft.com/mssql/server:2019-latest

And it runs fast. Isn't that also what everyone working at Oracle internally on various products, like e.g. SQL Developer, APEX, SQL*Plus, Enterprise Manager, ojdbc, etc etc. would want for themselves as well?
Originally posted by @lukaseder in https://github.com/oracle/docker-images/issues/1678#issuecomment-779940945

My own experience.
My pre-built (empty) Oracle 19 Standard image is 8 GB large, and 13 GB large once schema is instantiated.
To share it with my team, I needed to use an internal private docker registry, after several failed attempts to upload it by docker push over a bad network because of forced remote working in COVID-19 times, I ended up splitting it up in smaller parts using tar, uploading them using sftp and then pushing it locally. Fortunately, pulling worked better. Although, I had to request increasing disk space on our registry to support multiple versions. I can't imagine fully automating this process in Jenkins.
Startup time is 40 seconds while Postgresql starts up in few seconds. This impacts the way we write unit tests.
We use docker only for development and testing.
If project would have been a green field one, this bad developer experience would have lead us to choose Postgresql but this is a 10 years-old project so....

Honestly, the fact that we have to build the images ourselves is a huge set back over the competition. Any other database it's just docker pull and run. For Oracle we have to have some infrastructure to handle the build. Then if you have more than one developer using it, you'll also need some infrastructure in place to distribute the image.
Now you have all this infrastructure in place you want to automate everything.., but you have to deal with the installer files. You either need to fork/hack these provided docker files to grab that from an internal location, or you have to wrap the whole thing in a parent process that moves the installers around for you.
We run a patched version of Oracle, and need/want automation to run against the same version. Since we decided to copy these files (can't fork to an enterprise github), we just hacked the whole patching process into the dockerfile. (The whole opatch thing is outside the realm of discussion here, but why did my patch not include the version of opatch required to apply itself?) Now I have 3 separate installer objects that need to be available to the docker build process that aren't available until some sort of human intervention happens.
We take the database container one step further through automation though:

run db migration scripts (liquibase) into a small seed database instance each git push
take an rman backup of the seed database
create a new container image by applying the rman backup to the database image.
This lets downstream testing and develop processes to pick up a database container matching our current code at any point (minus the time it takes to push 15G containers around).

I suspect that most of the startup time is being robbed during runOracle.sh and relinkOracleBinary.sh scripts which run at startup. When I go into my running instance and shutdown immediate followed by startup, it's only 6 or 7 seconds. There is a lot of stuff going on in runOracle.sh that has to happen when the container starts. Whenever I see a bunch of file system operations happening at startup, my general feeling is that these can/should be moved into the build. I don't know why we should be relinking binaries every single time the DB comes up.

We have similar issues at Netflix.  We're using testcontainers for validating changes to our views and procedures.  When we upgraded from 11 XE to 18 XE our image build times went up to ~90 minutes and test startup time doubled (~12s to ~24s - this adds up when you have to spin up a fresh container for each test).  Image size is about 2G which I believe is the driving factor.
Our container is the stock Oracle instance with our schema loaded into it (no data - that's done by each test individually).
In addition to the performance issues we encountered some other challenges:

It was a bit of a pain to switch to CDB/PDB setup imposed by 18 XE.  In particular testcontainers didn't work nicely with this and we had to hack in an override for the connection string that apparently isn't compatible with the latest version of testcontainers.  So we're pegged to an older version.
The lack of a 19 XE version drove our decision to stick with 18 (both for our AWS-provided SE license and our XE testcontainer setup).  Would be nice to have a 19 XE version since 18 is being EOLed in the next year.
There were some recommendations on how to pare down the image size but they differed by version and seemed to produce mixed (sometimes counterproductive) results.  Given the time spent addressing other issues and the long build cycle time we called it quits once we got the performance down to the 2x mark.

We are currently using Oracle <IP_ADDRESS> as a main database at a clients' project.
For local development, the image needs to be built by every one of the 25 developers with scripts from this repository from scratch (there is no internal Docker registry at the client). Else there would be no way to run databases on the local development machines. This is part of the onboarding process, and takes about 45 minutes. If the DB version is updated (which happens twice a year), everything needs to be rebuilt by everybody. It also prevents on running integration tests with Testcontainers, prevents us from running integration tests in parallel.
The fact, that the latest Oracle database version in this repository is <IP_ADDRESS> is also not ideal, as local development and staging are currently two different versions (19.3 vs 19.8).
The loss in developer productivity, long runtimes on build pipelines and time it takes to maintain the scripts and environments grew to a significant amount of money, which is not going unnoticed by the stakeholders.

The loss in developer productivity, long runtimes on build pipelines and time it takes to maintain the scripts and environments grew to a significant amount of money, which is not going unnoticed by the stakeholders.

I think this is one of the key factors here. Even if folks are quite pro Oracle in terms of what the RDBMS offers (and I count myself among them), this factor cannot be ignored. The alternatives make developers much more productive, and if a manager is already thinking about finally migrating off Oracle for whatever reason, then that might just be the last straw.

Another aspect to consider is the legal side, or really the understandability of the legal side.
I'd like to see something that makes it really obvious that it is
a) legal and free of charge to run on developer machines and CI-servers.
b) easy and obviously legal to setup in the source code of tests which might get distributed under typical open source licenses.
I'm aware that you never know once you start talking to lawyers, but I think there is value in presenting what is allowed and what is not allowed in a way that is not intimidating to developers.

I know about a project from ~10 years ago where a really smart DBA managed to strip down a Oracle DB so that it would fit on a 1GB RAM disc by removing various packages related to special features that weren't needed by that project and probably aren't used by 95% of all projects using Oracle.
Obviously that was really hacky and probably in violation of some license agreement, but it worked really well. Having something like this available in the form of docker images would be really nice and a good way to reduce the footprint of these images.

by removing various packages related to special features that weren't needed by that project

Sounds like what the utplsql folks are doing as well: https://twitter.com/Pazus/status/1362030711637766145

I think what has been done on utPLSQL has largely been included here now with the slim build.
Overall I think Oracle will slowly shift to what we are looking for I believe most want and agree that things could be improved and be more developer-friendly in this DevOps age but perhaps some of the higher-up's and lawyers haven't really gotten on board yet. Perhaps this will be the downfall of Oracle ( I don't really believe so), only time will tell.
Regardless while there can be improvements Oracle now offering Docker Images and Vagrant images is a big step forward from where they were a few years ago.

toooooooo slow.
when xe version docker build only using one core.
It's unbelievable in modern development. if you set limit one core when i using it, I can understand. but not in build stage.
but build is too slow. in my mini server(poor single-core performance). 10 percent built in 100 minutes.

This impacts the way we write unit tests.

This impacts on software quality and costs. Due to the mentioned issues my personal approach (confirmed by experience various times):
if (isOracle) {
   estimation *= 2.5;
}


Building with -DBUILDSTATIC:BOOL=TRUE fails in 1.7.2

ld: ../liboslexec/liboslexec.a(shadingsys.cpp.o): relocation R_X86_64_32S against `.rodata' can not be used when making a shared object; recompile with -fPIC

This happens with or without having built shared in a different build directory, with or without ccache enabled.

Not sure what's up with this, and apologies for not directly replying as soon as it was filed. But there was no follow-up on this and it was a couple versions ago, so closing the issue. Please file a new issue if the current OSL has trouble building.
(Actually, better advice is: ask on osl-dev if you are merely having trouble building, then file an issue if people agree that it's because of some kind of shortcoming in our build scripts.)


installation fails on Raspberry Pi

I'm having difficulty installing dat on a Raspberry Pi. After perusing a Windows install issue, I installed node-gyp manually. I uninstalled dat and re-installed, to no avail. Any suggestions?
~$ sudo npm install -g node-gyp
/usr/bin/node-gyp -> /usr/lib/node_modules/node-gyp/bin/node-gyp.js
+<EMAIL_ADDRESS>added 103 packages in 40.839s

...

~$ sudo npm install -g dat
/usr/bin/dat -> /usr/lib/node_modules/dat/bin/cli.js
+<EMAIL_ADDRESS>updated 1 package in 55.677s
~$ dat -v
/usr/lib/node_modules/dat/node_modules/node-gyp-build/index.js:28
  throw new Error('No native build was found for runtime=' + runtime + ' abi=' + abi + ' platform=' + platform + ' arch=' + arch)
  ^

Error: No native build was found for runtime=node abi=57 platform=linux arch=arm
    at Function.load.path (/usr/lib/node_modules/dat/node_modules/node-gyp-build/index.js:28:9)
    at load (/usr/lib/node_modules/dat/node_modules/node-gyp-build/index.js:13:23)
    at Object.<anonymous> (/usr/lib/node_modules/dat/node_modules/sodium-native/index.js:1:101)
    at Module._compile (module.js:569:30)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:503:32)
    at tryModuleLoad (module.js:466:12)
    at Function.Module._load (module.js:458:3)
    at Module.require (module.js:513:17)
    at require (internal/module.js:11:18)
~$ node -v
v8.1.0
~$ npm -v
5.0.3
~$ uname -a
Linux bazin 4.1.19-v7+ #853 SMP Wed Mar 9 18:09:16 GMT 2016 armv7l GNU/Linux
~$ python --version
Python 2.7.9

We were having some issues with node v8. I just tried with node v8.1.1 and it was okay, so it may be worth updating node, uninstalling dat + node-gyp, and trying again. I can't find the specific issue right now.
If that doesn't work, you may be able to manually install via git:
git clone https://github.com/datproject/dat.git
cd dat
npm install
npm link

I used nvm to install node 8.1.1. Then building from the git repo did the trick!
Thanks, Joe!


add one simple calculator

i am intrested . pls assign this one to me

I want to work. Please assign me.


Optimize the BitArray binary representation

Description
Due to the problems with the std binary representation of integers in Python, I'm walking around the BitArrays using a string to represent in binary a given number (ensuring the availability of the first upper zeros). In Python, the binary representation starts from the first 1 in the binary number, missing all the zeros before it.
Ideally, I should treat that string as an array of booleans, which should perform a bit better.

closed with #8


additional build dependency?

This may be a general cabal failing, or perhaps a missing dependency from a non-taffybar package. gtk2hs-buildtools is a build-dependency (for glib) and is the only package that I have to tell cabal to install manually prior to cabal install taffybar. I'm not sure if it can or should be added to taffybar's build dependency list, but thought I'd mention it.

On Wed, Nov 30, 2011 at 10:25:47AM -0800, Ethan Schoonover wrote:

This may be a general cabal failing, or perhaps a missing dependency
from a non-taffybar package. gtk2hs-buildtools is a build-dependency
(for glib) and is the only package that I have to tell cabal to
install manually prior to cabal install taffybar. I'm not sure if
it can or should be added to taffybar's build dependency list, but
thought I'd mention it.

Reply to this email directly or view it on GitHub:
https://github.com/travitch/taffybar/issues/9

As you say, this is actually a cabal problem (see
http://hackage.haskell.org/trac/hackage/ticket/227).  It doesn't seem
like a fix is coming any time soon, unfortunately.  I am a bit
reluctant to add it as a dependency - I figured that the mention of it
in the documentation might be enough.


The job is running fine off this error in the console
http://prntscr.com/njm95q

Couldn't reproduce this on a local server, might need to test with more people for this

Getting the same console error. Losing about 16fps from resource warning whenever you die

`		-- cancel mission if player is dead
if IsPedDeadOrDying(PlayerPedId()) and onMission then
TriggerServerEvent("burglary:ended", true, false)
		ForceEndMission()
	end`

gameplay/busted.lua    this solves that issua

Thanks @tymaan i'll look into it later today

Fixed as of #6


Animation doesn't work with Safari

Bodymovin is seriously great. I'm building a set of animated banners in various dimensions. All work great in Chrome. About half of them work in Safari; and I just can't work out why.
htdocs.zip

I don't have a mac right now. I'll check it later.
do you see any errors in the console?

Awesome thanks. No, no errors that I can see.

I see it working fine on a mac over here.
do you have a link you can share?

Sorry, they're not online yet, just testing using localhost (MAMP).

I'm not sure what could be going on.
Have you tried the canvas renderer?

Sorry to be annoying, how do I use the canvas renderer? I'm not seeing it as an option.

on the index.html file you sent me, on line 41
change:
renderer: 'svg'
to
renderer: 'canvas'

Thanks, just tried it. Still not working for me.

I  suppose it's related to using MAMP, I can't find a reason for it to fail.
Can you upload it somewhere temporarily to check it?
codepen for example?

Thanks for all your help, yeah I'm guessing it's related to MAMP. I'll upload and let you know. Thanks again.

Hey everyone, sorry for jacking this post, but I've been experimenting with bodymovin and how I could utilize it in my banner workflow. My usual flow is using gsap for banners, but since I'm more adept in animation than code, I thought bodymovin could allow more fancier banners and possibly be quicker for turnarounds.  @sjcorn , though I wasn't able to test it out on safari, I was able to reduce the overall size of the file by eliminating the .json file by incorporating the code into the .html file and by swapping out the local player by linking to the bodymovin cdnjs. I would also assume that file using live text in the animation prior to converting would also reduce size instead of have multiple png files for the text. I would love to hear feedback on this and if this sort of thing is correct. Attached is @sjcorn 's banner I modified.
160x600.zip

@sifford Hi, there are many assets that could be vectors instead of pngs. The only three that need to be rasterized images would be img_16, img_17 and img_18 which could probably be lighter if they were jpgs instead of pngs since they don't seem to have any transparency.
Also regarding text, depending on the client specs, sometimes they don't take into account font loading as part of the filesize, specially if they're google fonts.
If not, you can let bodymovin convert glyphs to shapes and only the needed characters will get exported.


Compare typed and dynamic objects

I tried comparing a dynamic object and one with known type, but the comparer seems to fail at this task.
Below is a sample I tried - required json.net.
I also played with the IgnoreObjectTypes flag, but it seems to always return true if the two object types are different at the root.
class Program
    {
        static string json =
        @"
        {
        	""Name"": ""Jim"",
        	""Surname"": ""Doe"",
        	""Interests"": [""Swimming"", ""Books"", ""Biking""],
        	""Stuff"": {
        		""Foo"": ""bar"",
        		""Hmm"": 42
        	}
        }";

        static void Main(string[] args)
        {
            dynamic newHuman = JsonConvert.DeserializeObject(json);

            var human = new Human
            {
                Name = "John",
                Surname = "Doe",
                Interests = new string[] { "Swimming", "Books", "Biking" },
                Stuff = new Stuff
                {
                    Foo = "bar",
                    Hmm = 42
                }
            };

            var compareLogic = new CompareLogic(new ComparisonConfig { IgnoreObjectTypes = true });
            var result = compareLogic.Compare(newHuman, human);
        }

        private class Human
        {
            public string Name { get; set; }
            public string Surname { get; set; }
            public string[] Interests { get; set; }
            public Stuff Stuff { get; set; }
        }

        private class Stuff
        {
            public string Foo { get; set; }
            public int Hmm { get; set; }
        }
    }

It looks like you are comparing Jim Doe and John Doe which are different.

That is why I raised the issue. If you run the sample, the result.AreEqual property is true.
From my testing this is what happens:

With IgnoreObjectTypes = false, the resut.AreEqual is false because the two root types are different, and no property value checks are needed.
With IgnoreObjectTypes = true, the resut.AreEqual is always true, but I didn't have time to debug the library and check why.

Yep, sounds like a defect.  Please create a fix with a unit test and I will merge in the pull request.

I spent several hours on this today.  It did not support dynamic objects at all.  The reflection works completely different for dynamic objects.  The new version is checked in and up on nuget version 3.10
    [Test]
    public void DifferentDynamicObjectsShouldNotBeEqual()
    {
        dynamic human1 = new System.Dynamic.ExpandoObject();
        human1.Name = "John";
        human1.Surname = "Doe";
        human1.Interests = new string[] {"Swimming", "Books", "Biking"};
        human1.Stuff = new System.Dynamic.ExpandoObject();
        human1.Stuff.Foo = "bar";
        human1.Stuff.Hmm = 42;

        dynamic human2 = new System.Dynamic.ExpandoObject();
        human2.Name = "Jane";
        human2.Surname = "Doe";
        human2.Interests = new string[] { "Swimming", "Books", "Biking" };
        human2.Stuff = new System.Dynamic.ExpandoObject();
        human2.Stuff.Foo = "bar";
        human2.Stuff.Hmm = 42;

        var oc = new CompareLogic();
        oc.Config.IgnoreObjectTypes = true;
        oc.Config.CompareChildren = true;

        var result = oc.Compare(human1, human2);
        Console.WriteLine(result.DifferencesString);
        Assert.IsFalse(result.AreEqual);
    }


Switch to using winapi for file I/O

Due to requiring properly mounted devices, this will be a breaking change for some users, so I recommend to merge this after #14.
This changes the file I/O functions in the xbox backend to use the winapi functions instead of the old X*-functions. I used PDCLib's shepherd-branch for flag reference, the _PDCLIB_w32errno() function for translating winapi errors to errno values also comes from there.
I gave this some testing, and it seemed to work fine, but I do recommend everyone to test their code with this to make sure this doesn't break in some specific cases.

I still want to test this; please wait with merge.

I think we should merge this as-is and iterate later.
However, first, we should create issues about this and add some documentation somewhere (nxdk wiki?), which lists what we do / do not support and what we plan to support / do not plan to support (for winapi and C stdio), including best practices how to avoid this. We'll probably also have to adapt some samples when updating the submodule.
If this breaks apps, then people should be able to look at the docs to decide a plan of action, or they can stick to an older version of nxdk for now.
But clearly there is interest in advancing nxdk, and this PR is a step in that direction (even if it means dropping some defacto standard C features).

I suggest using error handling code from #22 it has more cases, is more generic and uses PDCLIB internal error codes like other functions in the lib do.

I'm not opposed to that idea, but I'd like to know where that mapping comes from first, and I'm also not a fan of the fallback_errno parameter.

Merging this will break relative path without notice. I suggest adding a #warning in stdio.h to let users know this at compile time.

I don't think that's a good solution. It would introduce warnings where nothing's actually wrong, and it also may bury those warnings, e.g. when users are using SDL to open a file, they won't get the warning where the actual problem is.

I'm not opposed to that idea, but I'd like to know where that mapping comes from first
Part from cygnus, part from myself.
, and I'm also not a fan of the fallback_errno parameter.
You'll always have a fallback. At least here it's explicit.

. when users are using SDL to open a file, they won't get the warning where the actual problem is.
Good point. So it's either

a) merge as-is and fix code that breaks (i.e) relative path
-b) Add some code in fopen or CreateFileA to handle relative paths before merging.

I've updated the PR with the error translations from #22. I did some minor changes to it, like formatting changes and changing the fallback (even with error checking in strerror I'm not comfortable with it just returning an out of bounds value). I also ended up squashing the changes into my commit because trying to rebase the changes into a meaningful history was quite annoying - I hope you don't mind @sam-itt.

I don't mind at all: Glad it's merged!

Last call for vetos, tests or reviews. I'll do a final pass tonight and merge it then (if necessary, untested or without another extensive review pass).
This sort of patch has been bikeshedded for too long already.

I'll merge this now, despite this not being ideal:

Ideally we'd have had another rebase of pdclib first (to get rid of bugs before doing a larger breaking change), but I think we gave people enough time to review their code.
Ideally we'd have fixed gmtime first; I also planned to do this last week but didn't find the time.

We'll have to remember to fix samples in nxdk (like samples/sdl_ttf) when updating the submodule in nxdk (which should happen as soon as possible, so that we don't group too many changes together).
Merged.


expect: Highlight substring differences when matcher fails, part 2

Summary
Add specific diff with highlight to printDiffOrStringify for multiline strings

Unless string length is > 20K, it supersedes generic line diff:

toBe
toEqual
toStrictEqual
toHaveProperty(path, value)

Also highlight differences in toThrow(object) report if message is not equal

To avoid ambiguity with inverse highlight to mean changed, display middle dot for spaces at end of line for multiline strings in generic print functions:

printExpected
printReceived

Friendly reviewers, take your time and enjoy with a cup or mug of your favorite beverage :)
Test plan
Added unit tests to jest-matcher-utils package to achieve coverage:

getAlignedDiffs.test.ts has 24 snapshots
joinAlignedDiffs.test.ts has 6 snapshots
print.test.ts has 6 snapshots plus another test

In expect package:

updated
added
matcher

2
0
toBe

0
1
toEqual

0
1
toStrictEqual

0
1
toHaveProperty(path, value)

2
2
toThrow(object)

See also pictures in following comments
Example pictures baseline at left and improved at right

Display as diff if either string is multiline:
Notice middle dot instead of highlight to avoid misunderstanding when trailing space is not a change:

Support single or multiline substring diff for equality comparison of error message:

But report for partial match of substring or regexp does not have any highlight:

A following comment about rough edges explains why not.

Small differences are the best case and interleave related lines:

Realistic example to replace space with newline:
With default --no-expand option for 5 lines of adjacent context:

With --expand option:

Artificial example to replace space with newline and the opposite:

And now for rough edge cases for semantic cleanup algorithm.

Eliminate an equality that is smaller or equal to the edits on both sides of it.

In the following picture, receivedLabel: string,  has length <= the deleted comments, therefore the common string is merged into the changes. It looks inconsistent because expectedLabel: string,  has same length but is exempt from cleanup because it is at the start (that is, does not have change on both sides).
By the way, the relative length of match versus mismatch is the reason that diff was hit-or-miss in my tests for report when partial match fails, like toContain(substring), toMatch(substring), toThrow(substring)

This solution is not perfect. It has tunnel vision; it is unable to see beyond the immediate neighbourhood of each equality it evaluates. This can result in small groups of chaff surviving.

In the following picture, the period at the end survived the cleanup:

If nothing survives the cleanup, then the report falls back to a line diff:

@SimenB Super question about packaging!
It is especially helpful that you specifically ask about the context object for matchers.
The reason  I exported only printDiffOrStringify for now is to give us time to think about it.

Codecov Report

Merging #8528 into master will increase coverage by 2.7%.
The diff coverage is 97.81%.

@@            Coverage Diff            @@
##           master    #8528     +/-   ##
=========================================
+ Coverage   60.56%   63.26%   +2.7%
=========================================
  Files         269      271      +2
  Lines       11045    11249    +204
  Branches     2690     2738     +48
=========================================
+ Hits         6689     7117    +428
+ Misses       3770     3520    -250
- Partials      586      612     +26

Impacted Files
Coverage Δ

packages/expect/src/toThrowMatchers.ts
86.48% <ø> (ø)
:arrow_up:

...ackages/jest-matcher-utils/src/joinAlignedDiffs.ts
100% <100%> (ø)

packages/jest-matcher-utils/src/getAlignedDiffs.ts
100% <100%> (ø)

packages/jest-matcher-utils/src/diffStrings.ts
100% <100%> (+95%)
:arrow_up:

packages/jest-matcher-utils/src/index.ts
79.86% <84.21%> (+11.2%)
:arrow_up:

packages/jest-matcher-utils/src/printDiffs.ts
93.75% <93.75%> (ø)

... and 2 more

Continue to review full report at Codecov.

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

Is the following code in jest-get-type the model to add a named export to jest-diff package?
getType.isPrimitive = (value: unknown) => Object(value) !== value;

export = getType;

Until we've migrated to default exports, yeah it probably is :/

Yup, until the next major

Thank y’all for suggestion about packaging. Here is minimal interface for now:

jest-diff exports getStringDiff for single or multiple line strings
jest-matcher-utils imports it and exports printDiffOrStringify to matchers

In part 3, snapshot matchers also call printDiffOrStringify if received is string

Faithful reviewers, moving files and making changes confused Changed Files:

Renamed diffLines.ts has minor changes to factor out createPatchMark and printAnnotation
Moved diffStrings.ts which collides with former name of the renamed file has no real changes


Feat/openstack integration

Applicable spec: ISD 100
Overview

Add integration with OpenStack. The charm can be configured to spawn runners in OpenStack virtual machines. The usage of local LXD is preserved as the default configuration.
Rationale

OpenStack runners enable reducing one layer of virtualization, and adds support for multiple architectures.
Juju Events Changes

The reconcile, and flush related events has the OpenStack version added.
Module Changes

There was a stub openstack manager class. This is now converted to a fully featured module.
The module deals with creating of runners, removal of runners, and metrics collections of the runners in OpenStack.
Checklist

[x] The charm style guide was applied
[x] The contributing guide was applied
[x] The changes are compliant with ISD054 - Managing Charm Complexity
[x] The documentation is generated using src-docs
[x] The documentation for charmhub is updated.
[x] The PR is tagged with appropriate label (urgent, trivial, complex)

From manual testing, the noble support for LXD runners is working fine as well:
https://github.com/canonical/github-runner-operator/actions/runs/9707390769/job/26792511925#step:3:8


Adding nate-double-u to list of en approvers

Describe your changes
Adding myself to the en reviewers group.
Adding myself to the system that (i think) automatically sets reviewers for lang/en PRs
Related issue number or link (ex: resolves #issue-number)
n/a
Checklist before opening this PR (put x in the checkboxes)

[x] This PR does not contain plagiarism

don’t copy other people’s work unless you are quoting and contributing it to them.

[x] I have signed off on all commits

signing off (ex: git commit -s) is to affirm that commits comply DCO. If you are working locally, you could add an alias to your gitconfig by running git config --global alias.ci "commit -s".

Hi @nate-double-u
We need to update https://github.com/cncf/glossary/blob/main/CODEOWNERS file as well. :)
# These owners consist of Maintainers and English approvers.
* @caniszczyk @CathPag @jasonmorgan @seokho-son @iamNoah1 @jihoon-seo @nate-double-u

This will make Github automatically assign you as a PR reviewer for all files except .
or
# Approvers for English contents
/content/en/ @nate-double-u

This will make Github automatically assign you as a PR reviewer for contents inside English contents only.

Thanks for the clarification @seokho-son, I'll update that shortly!

I've made the update—I've gone with the second option as I already have a lot of GitHub notifications, and am unable to help with non-english editing work.

Thanks everyone!


Update chart with latest redis-15.7.1

Current chart 12.3.3 is too old and failed to pull images

The redis chart have been updated and included in the 0.0.5 release


Finalizing zscp

Tested and working consistently in all use cases. Currently as same functionality as scp but with identity name argument instead of IP.
Working use cases:
local to remote single file transfer with assumed name or changed name.
remote to local single file transfer with assumed name or changed name.
Recursive local to remote multiple file transfer with assumed directory name (cannot change directory name in process)
Recursive remote to local multiple file transfer with assumed directory name (cannot change directory name in process)
relative path indicators for local path for both to and from transfer: { . , .. , / , ~)
wild card/glob (*) capability for both local and remote paths for both filenames and directory names (recursive copy)
Note: this PR is intended for use case functionality. Improving logs and tests will be apart of next PR to main.

let's merge this back and delete the other branch ... looks like a good start though! :) needs some tests on arg parsing in the next rev


TypeError: require(...).main is not a function

I ran into a TypeError while attempting to run the indexer after installing the lsif-tsc package. I installed it using npm install -g lsif-tsc. This installed version 0.5.3.
After successful installation, attempts to run the lsif-tsc command fail with the following error:
~
❯ lsif-tsc
/usr/local/lib/node_modules/lsif-tsc/bin/lsif-tsc:2
require('../lib/main.js').main().then(undefined, console.error);
                          ^

TypeError: require(...).main is not a function
    at Object.<anonymous> (/usr/local/lib/node_modules/lsif-tsc/bin/lsif-tsc:2:27)
    at Module._compile (internal/modules/cjs/loader.js:1137:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1157:10)
    at Module.load (internal/modules/cjs/loader.js:985:32)
    at Function.Module._load (internal/modules/cjs/loader.js:878:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)
    at internal/main/run_main_module.js:17:47

I checked main.js, and found that it doesn't export a function called main(). Am I missing something here?
Node version:
~
❯ node --version
v12.18.3

Sorry, I broke this. You can work around it by install npm install -g lsif which installs all lsif related tooling and then run lsif tsc (e.g. without a dash). Will look into fixing this

Fixed. Published new version.


Calendar displays Spanish for non-spanish speakers

Currently the date of the month is being displayed in es-US which is not understandable to Non-Spanish speakers.

I have two suggestions

Make it to en-US to make it consistent as other parts of the site
Add google translate widget so that users can opt to translate in case they need it - https://developers.google.com/search/blog/2020/05/google-translates-website-translator

Fixed by #2


[UI] async jobs from UI cannot be executed in parallel safely

When you execute for instance a delete and than another delete, you might end up deleting the worng item. This happens when the first delete completes and teh second is fired a fragment of a second later. The item choosen to delete will default to item 0 after refresh. If another item was intended this is not honoured and the delete is executed regardless.
ISSUE TYPE

Bug Report

COMPONENT NAME

UI

CLOUDSTACK VERSION

CONFIGURATION

OS / ENVIRONMENT

SUMMARY

STEPS TO REPRODUCE

create ten  VMs
delete them one by one from the bottom, by using the quick actions menus
before you hit the top at some point the top one will have been deleted before the ones below

EXPECTED RESULTS

ACTUAL RESULTS

@DaanHoogland I have checked and it looks like the results returned after the API query are mixed compared to the original time. I think the problem comes from ordering in the returned result and not from the UI

@DaanHoogland I have checked and it looks like the results returned after the API query are mixed compared to the original time. I think the problem comes from ordering in the returned result and not from the UI

Sorry, but Ii cannot accept that argument @utchoang. The delete is based on UUID. The user doesn't see that UUID. If the UI decides to delete another item, it is because of a race condition in the UI. It should not be based on a list other than what the user saw when issuing the command.

@DaanHoogland Sorry, maybe I'm misunderstanding what you mean. I will test it again following the steps.

@DaanHoogland It is true that I misunderstood your problem. This issue can occur for other similar actions that use custom components.

Fixed in #5884


chore: add missing go-cmp dep

This dep is used in tests but missing in the go.mod

Merging as this is a small dependency fix


[Extensibility Bug] Codeunit 22 - "ApplyItemLedgEntry" SetLoadFields raises JIT load Error

Hello,
we found an Extensibility Bug in BC23 in the event "OnApplyItemLedgEntryOnAfterCloseReservEntry" of the procedure "ApplyItemLedgEntry" in the codeunit "Item Jnl.-Post Line" (22).
In this event, we have to read extended fields on the parameter Record "ReservEntry", but we receive a JIT error, because extended fields aren't loaded.
This is due to the fact that before the event there is a SetLoadFields on the Record "ReservEntry" and then this record is deleted.
We can't load extended fields then and it raises JIT load events.

We need so an event "OnAfterSetLoadFieldsOnReservEntry", after the "SetLoadFields" on the "ReservEntry" to do "AddLoadFields".
`
            ReservEntry.SetLoadFields("Entry No.", Positive, "Item No.", "Quantity (Base)");
            // Event here - start
            OnApplyItemLedgEntryOnAfterSetLoadFieldsOnReservEntry(ReservEntry);
            // Event here - end
            if not Handled then
                if FirstReservation then begin
                    FirstReservation := false;
                    ReservEntry.Reset();
                    ReservEntry.SetCurrentKey(
                      "Source ID", "Source Ref. No.", "Source Type", "Source Subtype",
                      "Source Batch Name", "Source Prod. Order Line", "Reservation Status");
                    ReservEntry.SetRange("Reservation Status", ReservEntry."Reservation Status"::Reservation);
                    ItemJnlLine.SetReservationFilters(ReservEntry);
                    ReservEntry.SetRange("Item No.", ItemJnlLine."Item No.");
                end;
           ......
            UseReservationApplication := ReservEntry.FindFirst();
           .......
            if UseReservationApplication then begin
                ......
                OnApplyItemLedgEntryOnBeforeCloseReservEntry(OldItemLedgEntry, ItemJnlLine, ItemLedgEntry);
                ReservEngineMgt.CloseReservEntry(ReservEntry, false, false);

                OnApplyItemLedgEntryOnAfterCloseReservEntry(OldItemLedgEntry, ItemJnlLine, ItemLedgEntry, ReservEntry);

                OldItemLedgEntry.CalcReservedQuantity();
                AppliedQty := -Abs(ReservEntry."Quantity (Base)");`

[IntegrationEvent(false, false)]
local procedure OnApplyItemLedgEntryOnAfterSetLoadFieldsOnReservEntry(var ReservEntry: Record "Reservation Entry")
begin
end;
Additional context
This is business critical because we have an AppSource app and there isn't a workaround.Internal work item: AB#493050

Thanks for reporting this. We agree, and we’ll publish a fix asap, either in an update for the current version or in the next major release. Please do not reply to this, as we do not monitor closed issues. If you have follow-up questions or requests, please create a new issue where you reference this one.
Build ID: 16016.


Reduce library size

The minified file is currently 116KB. I wonder if we could do something about it.
With source-map-explorer, I  obtained this diagram. I wonder if there are some components we can drop, such as Validator.js and buffer.

Mhm, turns out that both of my suggestions are actually needed by oidc-rp. Might be nothing much we can do here.

Fair enough. I'll keep this open, and tag it as "enhancement" :)

see https://github.com/solid/solid-auth-client/issues/26

I find http://chrisbateman.github.io/webpack-visualizer/ very helpful to see how much comes from which bundled dependency.


JavaScript heap out of memory when building 12.48.2

💡 Summary
I can't build the latest version
🙂 Expected Behavior
Successful build
☹ Actual Behavior

Log
yarn run v1.22.5
$ webpack && gulp build
92% sealing asset processing TerserPlugin
<--- Last few GCs --->

[27576:0x2d5ac40]   155381 ms: Mark-sweep 951.6 (1007.4) -> 944.3 (1007.5) MB, 1                                                                                500.7 / 0.0 ms  (average mu = 0.183, current mu = 0.139) allocation failure scav                                                                                enge might not succeed
[27576:0x2d5ac40]   157049 ms: Mark-sweep 952.0 (1007.8) -> 944.9 (1008.3) MB, 1                                                                                441.4 / 0.0 ms  (average mu = 0.161, current mu = 0.136) allocation failure scav                                                                                enge might not succeed

<--- JS stacktrace --->

==== JS stack trace =========================================

    0: ExitFrame [pc: 0x1409219]
Security context: 0x191fa66408d1 <JSObject>
    1: getArg [0x2275dde87bd1] [/home/misskey/misskey/node_modules/terser-webpac                                                                                k-plugin/node_modules/terser/node_modules/source-map/lib/util.js:~18] [pc=0x27d2                                                                                378b34bf](this=0x14cdb9a45e91 <Object map = 0x253df3f69e9>,0x2591bf876ba1 <Objec                                                                                t map = 0x129325f63c59>,0x3465edba9dd1 <String[#9]: generated>,0x099e9a7404b1 <u                                                                                ndefined>)
    2: arguments adaptor frame: 2-...

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaS                                                                                cript heap out of memory
 1: 0xa17c40 node::Abort() [/usr/bin/node]
 2: 0xa1804c node::OnFatalError(char const*, char const*) [/usr/bin/node]
 3: 0xb95a7e v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bo                                                                                ol) [/usr/bin/node]
 4: 0xb95df9 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, c                                                                                har const*, bool) [/usr/bin/node]
 5: 0xd53075  [/usr/bin/node]
 6: 0xd53706 v8::internal::Heap::RecomputeLimits(v8::internal::GarbageCollector)                                                                                [/usr/bin/node]
 7: 0xd5ffc5 v8::internal::Heap::PerformGarbageCollection(v8::internal::GarbageC                                                                                ollector, v8::GCCallbackFlags) [/usr/bin/node]
 8: 0xd60e75 v8::internal::Heap::CollectGarbage(v8::internal::AllocationSpace, v                                                                                8::internal::GarbageCollectionReason, v8::GCCallbackFlags) [/usr/bin/node]
 9: 0xd6392c v8::internal::Heap::AllocateRawWithRetryOrFail(int, v8::internal::A                                                                                llocationType, v8::internal::AllocationOrigin, v8::internal::AllocationAlignment                                                                                ) [/usr/bin/node]
10: 0xd2a34b v8::internal::Factory::NewFillerObject(int, bool, v8::internal::All                                                                                ocationType, v8::internal::AllocationOrigin) [/usr/bin/node]
11: 0x106c91e v8::internal::Runtime_AllocateInYoungGeneration(int, unsigned long                                                                                *, v8::internal::Isolate*) [/usr/bin/node]
12: 0x1409219  [/usr/bin/node]
Aborted
error Command failed with exit code 134.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this comm                                                                                and.

📝 Steps to Reproduce

git pull
yarn install
NODE_ENV=production yarn build

📌 Environment
Ubuntu 18.04.5 LTS (GNU/Linux 4.15.0-121-generic x86_64)
1 thread, 2GB RAM
Misskey 12.48.2
Node v12.19.0
Redis 4.0.9
PostgreSQL 10.14

can you enable swap in build time? build phase using large amount of memory, so may fail if not enough memory.

@rinsuki I forgot to mention it but I have 2GB swap. RAM usage only reaches 1.5GB. Swap is never used.

Please try
NODE_OPTIONS="--max-old-space-size=2048" NODE_ENV=production yarn build

ヒープで怒られるときこれじゃないとダメかも

@mei23 Thanks, that worked

Related to #4826


Skip death, delay reduction

can you add this to Battle.kt?
remove NP delay after click Battle also make fine tune for performBattle() seconds wait
#skipDeathAnimation loc is 1700, 100
fun performBattle() {
screenshotManager.useSameSnapIn { onTurnStarted() }
1.5.seconds.wait()
...................
card.clickCommandCards()
10.seconds.wait()
if (prefs.skipDeathAnimation == true) {
game.skipDeathAnimation.click(300)
}
}
and make adjusment for finetune cap

Skip enemy death or Servant (Arash/Chen gong sacrifice) death?
For Enemy death, there's already an option in-game.
I think it's better for the servant death animation to finish by itself instead of waiting for 10 seconds and then clicking 300 times.
Even if those 10 seconds are configurable in a fine-tune setting, servants don't die every turn. You'd save more time not worrying about this (Unless there's a proper way to detect servant death).
I've already denied the request here: #185
Honestly, you should've listed the caps you wanted to be changed instead of making me go through all of them.
I'll tweak a few which I think would be reasonable.

yes for chen/arash, maybe u right but for 1.5 seconds delay after click attack + 1.5 seconds if using np that's too much delay for waiting card to show up. I ran perfectly with just 1.5 seconds delay after click attack without extra 1.5 seconds if using NP maybe u can just make it with fine tune for user
Finetune wait after click lowest cap to 20ms and highest 1500ms (i think no one will use it at max delay tho)

but for 1.5 seconds delay after click attack + 1.5 seconds if using np that's too much delay for waiting card to show up. I ran perfectly with just 1.5 seconds delay after click attack without extra 1.5 seconds if using NP maybe u can just make it with fine tune for user

Are you looking at the latest code. I already changed that 1.5 + 1.5 = 3s to 2s.
The brave chains feature relies on NP cards being loaded before detection so in that case it is even more important to have some delay.
I like to avoid having more fine-tune settings unless absolutely necessary. Those settings are easy to mess up for users 🤷♂
https://github.com/MathewSachin/Fate-Grand-Automata/blob/42b88e1be7ed2dd123c603c14dd65abbe27341af/scripts/src/main/java/com/mathewsachin/fategrandautomata/scripts/modules/Battle.kt#L43-L55

Finetune wait after click lowest cap to 20ms

I made the lowest 0ms for those who live on the edge (don't recommend though). Leaving the highest as it is.

I see, thank you for kindly replying my message


Add This resource to password cracking tools

https://hashes.com/en/decrypt/hash

Add john password cracker: https://github.com/openwall/john


Majestic not using configured DNS server

Having a very strict firewall in place, I noticed that Majestic is trying to use different DNS servers than configured. Would be great to have this fixed and Majestic simply using the configured DNS server(s).
See logging below:
14:45:19  <       majestic> [  levent] libevent_log_cb@22            Nameserver <IP_ADDRESS>:53 has failed: request timed out.
14:45:19  <       majestic> [telemetr] dns_cb@229                    dns_cb result 67, retrying
14:45:19  <       majestic> [telemetr] dns_cb@229                    dns_cb result 70, retrying
14:45:35  <       majestic> [  levent] libevent_log_cb@22            Nameserver <IP_ADDRESS>:53 has failed: request timed out.
14:45:35  <       majestic> [telemetr] dns_cb@229                    dns_cb result 67, retrying
14:45:39  <       majestic> [  levent] libevent_log_cb@22            Nameserver <IP_ADDRESS>:53 has failed: request timed out.
14:45:50  <       majestic> [  levent] libevent_log_cb@22            Nameserver <IP_ADDRESS>:53 is back up
14:45:59  <       majestic> [  levent] libevent_log_cb@22            Nameserver <IP_ADDRESS>:53 is back up
14:46:24  <       majestic> [  levent] libevent_log_cb@22            Nameserver <IP_ADDRESS>:53 is back up

It's not necessarily a backdoor, but would be a lot cleaner.

This is concerning at best :/
Also, speaking of undesired network calls to the internet, when using HLS, Majestic connects to "majestic.torturelabs.com" when the http://openipc.local/hls endpoint is used, downloading a minified javascript. I have those assets blocked in uBlock:

A way around not having to load any remote JS is using http://openipc.local/video.m3u8 directly. Safari will open it immediately and even have it floating as a PiP (Picture In Picture) live video, much faster than http://openipc.local/hls which uses HLS.js and some custom javascript from the torturelabs server (which could potentially be used to inject arbitrary code dynamically on a hostile network)... unfortunately this .m3u8 workaround doesn't work with Firefox.

There is a disclaimer on the site about gathering metrics, feel free to send a PR to adapt text style (if you think it's so important)
The reason that Majestic is free that we are gathering board information to optimize our builds and get automated feedback about new features and how code is stable. OpenIPC community get streamer for free, and we use community to make sure that we stabilize our product.
If somebody wants to finance opening Majestic source code (or HLS WebAssembly player mentioned before), also feel free to contact me for details


added CA1839 rule documentation

Summary
Adds required documentation for rule CA1839.
Required documentation for https://github.com/dotnet/runtime/issues/47180 (PR: https://github.com/dotnet/roslyn-analyzers/pull/4908/files)

@gewarren Please hold on merging until roslyn-analyzers PR is merged first.


Exception: 'a' cannot be empty unless no samples are taken

I got this exception message: "Exception: 'a' cannot be empty unless no samples are taken" during training with my own dataset.
anyone knows the meaning?

I have also the same problem

@A-Sassi
Can you post the entire error? Thanks.

@kentaroy47
437 - average number of objects: 0.5624Exception: 'a' cannot be empty unless no samples are taken Exception: 'a' cannot be empty unless no samples are taken Exception: 'a' cannot be empty unless no samples are taken  650/1000 [==================>...........] - ETA: 8:56 - rpn_cls: 1.8809 - rpn_regr: 0.2993 - detector_cls: 0.0396 - detector_regr: 0.0 651/1000 [==================>...........] - ETA: 8:54 - rpn_cls: 1.8809 - rpn_regr: 0.2994 - detector_cls: 0.0396 - detector_regr: 0.0 652/1000 [==================>...........] - ETA: 8:53 - rpn_cls: 1.8809 - rpn_regr: 0.2994 - detector_cls: 0.0395 - detector_regr: 0.0 653/1000 [==================>...........] - ETA: 8:51 - rpn_cls: 1.8810 - rpn_regr: 0.2995 - detector_cls: 0.0395 - detector_regr: 0.0 654/1000 [==================>...........] - ETA: 8:49 - rpn_cls: 1.8810 - rpn_regr: 0.2995 - detector_cls: 0.0394 - detector_regr: 0.0 655/1000 [==================>...........] - ETA: 8:47 - rpn_cls: 1.8810 - rpn_regr: 0.2996 - detector_cls: 0.0394 - detector_regr: 0.0436 - average number of objects: 0.5603Exception: 'a' cannot be empty unless no samples are taken

@A-Sassi, @FBWseagate did you manage to sort out the "'a' cannot be empty unless no samples are taken" issue?


Add new term ascaris lumbricoides infectious disease

Close #4885

we realized this new term request is a duplicate - this term already exists


[bug] windows-2022 can no longer run applications compiled with included mingw64

Description
When you run a C/C++ executable compiled with the included mingw64, you would expect it to run without any issues on the same machine, instead of silently failing.
My particular workflow was working completely fine, but now, without any changes to my workflow, everything I build with mingw64 on Github runners silently crashes immediately.
Solution:
It's probably an issue with the MinGW DLLs not being included in the path.
(not having access or having outdated versions of MinGW DLLs can cause the executable to crash)
MinGW DLLs live at C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\bin.
Benefits of keeping change
Not having the DLLs in the path would make for more realistic testing.
Consequences of keeping change
The drawback is that you can't use mingw64 to easily test C/C++ code without manually changing the path yourself or searching for and copying the DLLs before running your code. This requirement is not made clear in build logs (completely silent error).
Platforms affected

[ ] Azure DevOps
[X] GitHub Actions - Standard Runners
[ ] GitHub Actions - Larger Runners

Runner images affected

[ ] Ubuntu 18.04
[ ] Ubuntu 20.04
[ ] Ubuntu 22.04
[ ] macOS 10.15
[ ] macOS 11
[ ] macOS 12
[ ] Windows Server 2019
[X] Windows Server 2022

Image version and build link
Broken as of 2.298.2
Is it regression?
2.297.0
Expected behavior
When you run a C/C++ executable compiled with the included mingw64, you would expect it to run without any issues on the same machine, instead of silently failing.
Actual behavior
In a workflow, attempting run a C/C++ executable compiled with the included mingw64 silently fails (even if done immediately after building).
Repro steps
Steps to reproduce the behavior:

[workflow job] Compile basic C/C++ program using included mingw64
[workflow job] Run resulting executable
(it will fail silently - the workflow will continue as if nothing went wrong - the executable will crash immediately)

Hey @IsaacShelton.
We will take a look at it.

Close as https://github.com/actions/runner-images/issues/6103


[BUG] Highlighting of terms in a query

Describe the bug
Argilla does not highlight terms followed by a dot, but it does with comas or brackets (see screenshots)
To Reproduce
Steps to reproduce the behavior:

Go to an Argilla dataset
Make a text query

Expected behavior
In the screenshots below, both 'Montana Department of Justice' instances should be highlighted.
Screenshots
If applicable, add screenshots to help explain your problem.

Environment (please complete the following information):

OS [e.g. iOS]: iOS
Browser: Chrome 114.0.5735.198
Argilla Version : 1.12.1

Thanks @pierre-ollivier for reporting this issue! I'll have a look.


Canceling multiselect should retain first selection, not last

Coming from Sublime, I'm expecting that canceling a multiselect retains my original selection, rather than the final match.
Atom

Sublime

Not that Atom should necessarily behave exactly like Sublime, but I thought it was a difference in behavior that was worth bringing up for discussion.
If the current behavior is intentional, expected behavior, any chance someone could be so kind as to point me in the direction of how I could write a plugin to override this for my own setup? Having a hard time figuring out where the "cancel selection" behavior is defined.
Thanks! :)

This seems to work like Sublime in recent versions at least 👍  Closing!


Server should ignore duplicate requests

Originally spotted #46.
The server will need to begin maintaining a record of which TIDs it is currently handling. If it gets a RRQ or WRQ packet in Server::serve for a TID that it is already handling, just ignore the request.
Some notes:

Due to concurrency concerns, the server will likely need a lock around the data structure it uses for tracking TIDs.
Since the Handler is the one that handles the request, the Server may want to register a callback function with each Handler so the Handler can notify the server that the request is finished and the request's TID should be removed.

Hello! I would like to work on this.
I'm still new to Rust and the TFTP protocol. So just to confirm my understanding:

The case we want to handle here is when the RRQ/WRQ gets accidentally duplicated, right?
We want to track the client's TID, which is the socket address we get from socket.recv_from(), is this correct?

Lastly, would an MPSC channel be more suitable than callback closure + ArcMutex? Server::serve can process all the finish messages from the Handlers upon receiving each new request.

* The case we want to handle here is when the RRQ/WRQ gets accidentally duplicated, right?

Correct.

* We want to track the client's TID, which is the socket address we get from `socket.recv_from()`, is this correct?

Correct again!

Lastly, would an MPSC channel be more suitable than callback closure + ArcMutex? Server::serve can process all the finish messages from the Handlers upon receiving each new request.

Both approaches would certainly work; however, I dislike the idea of deferring all of that processing to the next invocation of the Server::serve method. Then the Server::serve method would come across as more of a Server::serve_and_update_ongoing_connections type thing. Using the ArcMutex would allow for updating the data structure on demand rather than waiting for the update to be taken off a queue. This also keeps the responsibility of various functions/methods narrower... does that seem reasonable?


Please, include Vydmantai High School

Institution/School Name
Vydmantai High School
Instiution/School Website
http://www.vydmantugimnazija.lt
Email Users
Please place an x between the square brackets if yes

[ ] Students
[x] Academic/Teaching Staff
[ ] Other/Support Staff
[ ] Alumni

Education Levels
Please place an x between the square brackets if yes

[ ] Post-graduate research
[ ] Graduate School
[ ] College (University) or Undergraduate School or equivalent
[ ] Community College or equivalent
[x] High School or equivalent
[ ] Elementary School or equivalent

@thedovy Pull request merged. Thank you!


check for component unmount

Pull request checklist
Please check if your PR fulfills the following requirements:

[ ] Tests for the changes have been added (for bug fixes / features)
[ ] Docs have been reviewed and added / updated if needed (for bug fixes / features)
[x] Build (npm run build) was run locally and any changes were pushed
[x] Lint (npm run lint) has passed locally and any fixes were made for failures

Pull request type

Please check the type of change your PR introduces:

[x] Bugfix
[ ] Feature
[ ] Code style update (formatting, renaming)
[ ] Refactoring (no functional changes, no api changes)
[ ] Build related changes
[ ] Documentation content changes
[ ] Other (please describe):

What is the current behavior?

IonLoading fails to disappear under some special circumstances where it is unmounted during the creation of its overlay.
https://github.com/ionic-team/ionic/issues/19859
Issue Number: 19859
What is the new behavior?

The controller component will now check to see if it has been unmounted before displaying itself.
Does this introduce a breaking change?

[ ] Yes
[x] No

Other information
Based on this stackoverflow thread I wasn't entirely sure what was the best way to track the state of whether the component is mounted. This way seems straightforward enough, but if you want to suggest another way then I'm happy to make a change here.

Hi @aub, thanks for the PR!
Looks good to me. I'm going to do some local testing and if all is good will get it into the 4.11.4 release going out sometime today or tomorrow.


refactoring fresh generators

@b-reinke Are there any interactions between this PR and your current formalizations that one should be aware of?

No, I am working on 3308, but using the proof that is not translation invariant

There is also 1516 that hasn't been refactored to depend on FreshGenerator.lean yet, but probably it would be nicer to do this from scratch, also getting rid of the dependence on Finmap

I am happy to close it now and refactor it later. What is easier for you?

For me now would be ok.

@b-reinke To clarify, by "now would be ok" you mean that you have no objection with the current PR being merged?

Yes, from my perspective it can be merged


Emitting the entire bash completions script from my program?

Over in the kingpin project for Go https://github.com/alecthomas/kingpin#bashzsh-shell-completion bash completions are made available from a program by a user simply specifying the binary with a special command line argument as part of their shell.
I like packaging all my scripts as single-file executables, so this is something I'd like to do with argcomplete but I can't seem to find a way to do it - argcomplete seems to depend on the completions script being installed on the user system in it's entirety.
Could an example be added which gives this functionality somehow, if it's possible?

Yes, this is possible using recent functionality from #237:
import argparse, argcomplete, sys
class ShellcodeAction(argparse.Action):
    def __call__(self, *args, **kwargs):
        print(argcomplete.shellcode(sys.argv[0]))
parser = argparse.ArgumentParser()
parser.add_argument("--print-completion-shellcode", action=ShellcodeAction, nargs=0)
argcomplete.autocomplete(parser)
parser.parse_args()

Please feel free to open a PR to add this to the docs.

P.S. I just released this (#237) in v1.9.4.


Documentation request: state the intended audience at the top of the description

In the Visual Studio Code extension tab, searching for "prettier" or "eslint" returns this extension as the 2nd result. As someone trying to figure out which of these three I should be installing, this is my thought process:

I use prettier in my project. I also use eslint. Should I be installing this extension or the two at the top of the search results? Or maybe I should be installing all three?

I've done a little googling and I think this extension is meant for projects using prettier-eslint as opposed to every project using prettier and eslint. If this is the case, can that be added to the top of the extension description so it's quicker to learn if it's applicable to one's project?
Thank you!

This extension is meant for anyone who wants to enjoy the benefits of using prettier without also having to adhere to prettier's very opinionated formatting choices. For example - Prettier will always and forever format if ... else blocks like so:
if (condition) {
  console.log('condition is true')
} else {
  console.log('condition is false')
}

I will always and forever be opposed to this type of formatting and much prefer:
if (condition) {
  console.log('condition is true')
}
else {
  console.log('condition is false')
}

This extension allows my code to be formatted as I want every time a file is saved. You don't have to be using prettier-eslint in your project. That's what the extension does. You do need to have prettier and eslint installed in your project (not the extensions but the npm packages). Though the eslint extension is helpful in that it gives you visual indicators when your code breaks any linting rules. If you're using this extension (vs-code-prettier-eslint) I would suggest not having the prettier extension installed because it's redundant and quite large.
Hope that makes sense :)

@mattbrannon

Hope that makes sense :)

I think that makes a lot of sense, so much so, I think it should be added near the top of the readme. For example, the first sentence says, "A Visual Studio Code Extension to format JavaScript and TypeScript code using the prettier-eslint package." In my opinion, that's a technical detail that implies the opposite of your statement: "You don't have to be using prettier-eslint in your project. That's what the extension does."
Don't get me wrong, I'm aware that most of your reply is in the readme already. The issue is that the information is spread across the entire doc, whereas, IMHO, it's worth having in the initial summary.

@mattbrannon thoughts? Worthy of a PR?

@DanKaplanSES Feel free to make a PR

@DanKaplanSES Feel free to make a PR

Thanks! I'll give it my best shot when I have more time. Sorry for not being more proactive, but I haven't actually used this extension, so I didn't feel confident about doing so until now.


Create Documentation for this package

Write documentation in README.md file

https://github.com/ejekanshjain/html-pdf/pull/2


add partitions for tests

Current behavior

Proposed changes

Checks

[ ] All commits in this Pull Request are signed and Verified by Github.
[ ] All commits in this Pull Request follow the Ockam commit message convention.
[ ] I accept the Ockam Community Code of Conduct.
[ ] I have accepted the Ockam Contributor License Agreement by adding my Git/Github details in a row at the end of the CONTRIBUTORS.csv file in a separate pull request to the build-trust/ockam-contributors repository. The easiest way to do this is to edit the CONTRIBUTORS.csv file in the github web UI and create a PR, this will mark the commit as verified.

@kaustubhbabar5 thank you for trying this. Let us know if you have any questions.

I accidently opned a PR here, I actually wanted to open it on my fork so that I can check partitioned tests on ci.


when fetching complete FeedInfo, clear out any existing operators attached to local feed record

In case user is going through the flow another time and has duplicate local Operator records .

a potential place to do this: https://github.com/transitland/feed-registry/blob/master/app/create-feed-from-gtfs/service.js#L28


Embedding migrations

Is it possible to embed migrations and run them at startup? Is this feature outside the scope of this repository?

Hi srevinsaju, sorry for the late reply. The CLI program uses migrate_cql() in lib.rs. The program depends on Tokio. Depending on the cquill crate should work fine.


Run Python tests with coverage and upload coverage data to codecov

Fixes #9283.
I don't know whether we should run this on the whole CI setup (including PRs) or just push events, though. Currently this config will always (including PRs) run the tests on GitHub Actions with coverage --parallel-mode, upload the partial coverage data as artifacts, combine them all with coverage combine, then upload the result to Codecov.
I didn't bother adding coverage to our CircleCI setup as combining the coverage with the ones from GitHub Actions would be a pain, and there's not much point in doing so as the setup there should match one of the GitHub Actions job anyway.
I've tested this config on my personal account here and it seems to work: https://github.com/laymonage/wagtail-unforked/pull/1
I added a backend flag for the Python coverage so we can see both the combined and separate coverage on Codecov. Example:
https://app.codecov.io/github/laymonage/wagtail-unforked/flags
(Don't know why the combined data hasn't shown the frontend code though, maybe because I ran the tests not too long ago. We'll see if it shows up later.)

Thanks @laymonage  - check all the things once it runs a few times and see if this needs further work. This is great to have thank you!

The data shows up on codecov!
Codecov seems to have issues showing the data per flags at the moment: https://app.codecov.io/github/wagtail/wagtail/flags, but the main tree view should be enough for us to see the coverage for frontend and backend separately as they're both in separate directories.
The badge still seems to show the frontend coverage only though, maybe it takes a while to refresh:


fix: make hyper dependency use full features (needed for component cl…

…ient http

This change is

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 82.41%. Comparing base (d7802ae) to head (0e2bf3e).
Report is 1 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #347      +/-   ##
==========================================
+ Coverage   82.11%   82.41%   +0.29%
==========================================
  Files          32       32
  Lines        1560     1649      +89
  Branches     1560     1649      +89
==========================================
+ Hits         1281     1359      +78
- Misses        215      230      +15
+ Partials       64       60       -4

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


[aes] Fix CSR test exclusions for key, IV and data input registers

Just like the data output registers, these are cleared with pseudo-random data after reset meaning they should be excluded from the HW reset tests.
This resolves lowRISC/OpenTitan#10081.

Thanks for your reviews, re the long lines: for consistency, I would like to adhere to 1 line per sentence for new edits in the hjson.


Image metadata is ignored

I have some images with non-identity metadata (e.g. “CBCT-MR Head” from Slicer's Sample Data module). When clicked, fiducial points are placed in a wrong location, preventing proper operation.

That's interesting. We did notice some problems with the function GetRASToIJKMatrix(). It could be a rounding issue of the integers. Will need to investigate more.

Currently the segmentation prompts are assumed to be dropped on Red view, and the IJKToRASDirections needs to look similar to [[0,0,1],[-1,0,0],[0,-1,0]] (Basically MRI images). This works on my MRI dataset and the MRHead sample data.
I can't seem to find an elegant way to solve this at the moment. For CT images, I had to do both: 1. disable processPromptPointsSync() in LogicSamm.py and 2. observe which view (Red, Green or Yellow) is the axis that slices were computed along. I did this to play around and got some segmentation from CTs. Both are related to indexing of the array, which I hard-coded. (admittedly, very embarrassing ...). I will keep looking into it, but if anyone wants to give some advice, I'd love to implement them.

I would recommend to implement this as a Segment Editor effect. You then get a warning button if the slice view is not aligned with the segmentation and you can snap the view to the image grid by a single click. In the effect it would be enough to just detect the misalignment and display a warning (and ask the user to align the views).
"Level tracing" effect has the same limitation that it works only in axis-aligned slices. It does not warn the user if the view is misaligned (not nice, should be fixed) but you can use it as an example of how to get the click position in voxel (IJK) coordinates and how to determine the image plane of the current slice view:
https://github.com/Slicer/Slicer/blob/main/Modules/Loadable/Segmentations/EditorEffects/Python/SegmentEditorLevelTracingEffect.py

yeah, meet same issue here. When clicked, fiducial points are placed in a wrong location...

Thanks for the suggestions.
I wonder if there is a way to get the corresponding view order of the volume node. In the current implementation, Slicer transmits the images (slices) from the volume node's numpy array, say [:,1,:], for red view. However, it changes if the IJKToRASDirections are not in the same order (misalignment was actually not an issue, see next paragraph). For example, for CTs, the red view is [1, :, :] (or [:, :, 1], I do not remember exactly from my tests). With the correct order, I can fix this for good.
We did handle IJKToRASDirections for promptPointsSync, where if you slide up and down, the prompts will go with the slice. This feature became a bug, unfortunately, for those images with the order of view not aligning with MRI ([[0,0,1],[-1,0,0],[0,-1,0]], or anything closer to it. In fact, our test data is misaligned slightly, but the prompts worked perfectly well.)

Hi, thanks a lot for your quick update! I tried a CT example in 3D slicer  and the prompt do looks fine. But when i this MRI example, the set point will be far away with my placement. Is it the because of the reaon you explain here?

I would recommend using the same logic for getting the image axis and IJK position as it is done in the Levél tracing effect. That works well when when view axes are aligned with any of the image axes in any direction. It works with MRBrainTumor2 data set, too. For oblique cases your can display a warning (and the user can align the view by a single click).

8ed1ed60d7a49b75048b8b19093e59a5ba959c3c Issue resolved with a not-so-elegant way. Tested on MRHead and CTChest. But I will keep this issue open, will need to come back to take a look at @lassoan 's suggestions. Hard to find time. @dzenanz Is CBCT-MR data DZ-MR? I tried DZ-MR, seems to work now. Please report if it doesn't work for you. @Guhanxue This dataset is now working for me. Could you test it out?

Yes, CBCT-MR == DZ-MR. Unfortunately, this still does not work for me, as of 9421c5901090f1ce6e9f260808d98f26dafd1560. Clicking on the eye in the red slice was interpreted as a point somewhere between the eyes in the yellow slice:

Then yellow slice somewhat works. There is this error too:
Traceback (most recent call last):
  File "M:\Ethicon\samm\samm\SammBase\SammBaseLib\LogicSamm.py", line 363, in processPromptPointsSync
    ras = self._volumeIjkToRas.MultiplyPoint([temp[0],temp[1],curslc, 1])
UnboundLocalError: local variable 'curslc' referenced before assignment

After finishing the first slice, the program stopped working. There is this stream of errors in the server console:
All images have been processed.
ERROR:root:Traceback (most recent call last):
  File "sam_server.py", line 261, in main
    srv.infer_image( \
  File "sam_server.py", line 179, in infer_image
    memmap = np.memmap(self.workspace + '/mask.memmap', dtype='bool', mode='w+', shape=self.masks[0].shape)
  File "m:\Ethicon\env\lib\site-packages\numpy\core\memmap.py", line 228, in __new__
    f_ctx = open(os_fspath(filename), ('r' if mode == 'c' else mode)+'b')
OSError: [Errno 22] Invalid argument: 'M:\\Ethicon\\samm\\samm-python-terminal\\samm-workspace/mask.memmap'

Here is what the first slice looked like:

This issue should now be fixed with changes in 5b63c7dfa120c39066215fb766f8b246be3e2414. I removed the fiducial synchronization and also used both IJKToRASDirections and XYToRAS to solve the problem with view mismatch, without reformatting the data.


Return MemoryStreams with accessible buffers

Describe the feature
At least APIs in the KeyManagementService return values in MemoryStream.
However, the internal buffer is not exposable to the user causing unnecessary memory copies.
Use Case
using var kmsClient = new AmazonKeyManagementServiceClient(awsAccessKey, awsSecretAccessKey, region);

// ...

var decryptRequest = new DecryptRequest
{
    // ...
};

var decryptedMessage = await kmsClient.DecryptAsync(decryptRequest, default);

decryptedMessage.Plaintext.GetBuffer(); // <- throws System.UnauthorizedAccessException: 'MemoryStream's internal buffer cannot be accessed.'

Proposed Solution
Most usages I've seem, the MemoryStream is used only to wrap a byte[] created just for that.
Using MemoryStream(Byte[], Int32, Int32, Boolean, Boolean), instead of MemoryStream(Byte[]), would expose the internal buffer and, thus, not requiring extra allocations and copies.
Other Information
No response
Acknowledgements

[X] I may be able to implement this feature request
[ ] This feature might incur a breaking change

AWS .NET SDK and/or Package version used
AWSSDK.KeyManagementService 3.7.300.52
Targeted .NET Platform
.NET 8
Operating System and version
Windows and Linux

Oh I like this idea. Thanks for the suggestion.

Oh I like this idea. Thanks for the suggestion.

I can bootstrap a PR, if you'd like me to.

I had sometime and was able to put a PR out. I did the work in a V4 development branch which we are hoping to get previews out soonish.

Those seem the ones immediately impacting KeyManagementService.
But there seems to be a lot more: https://github.com/search?q=repo%3Aaws%2Faws-sdk-net "new MemoryStream(%22&type=code

Those are internal usages of MemoryStream that don't need access to the GetBuffer. The spot of code I changed affects all of the MemoryStreams that are created on the response objects of service calls. Where you would interact with them directly.

Closing as PR has been merged into V4.


Update Dockerfile

Set DEBIAN_FRONTEND variable during build time only
Add xxd package (required by L4T)
Remove curl from package list (already present in base image)
nodejs installer run apt-get update automatically, no need to do it again

Thanks for the PR, the commit message body will need to include the lines below to pass the commit message checks:

Change-type: patch
Signed-off-by: You<EMAIL_ADDRESS>

Got it. Added

@acostach I flashed a Jetson Nano SD with balenaOS 2.98.12 successfully with this branch, any further testing you suggest? Otherwise it looks good to me.

lgtm


Improvements

use non-blocking select from single channel when possible
such select doesn't need heap allocation nor complex logic
stop timer in client CallTimeout
detect empty requestsChan and responsesChan instead of timer to flush writers
with default PendingRequests == PendingResponses == 32768 it is good both for throughput and latency
(but i'll recomend to decrease default write buffers a bit).

Thanks for the participation, but unfortunately I cannot merge these changes due to problems described above.

It's a pity that you even measured proposed changes and their impact. I share not just my "thoughts" but experience, and you talk about it as if it is "premature optimizations". Yeah, it is "premature optimizations" if you never plan to reach 100000rps and more. But it is profile guided optimization at that rate, cause i did profile at that rate.

I just benchmarked blocking select with non-blocking select and was impressed by the numbers:
func makeChans() (bCh chan struct{}, nbCh chan struct{}) {
        nbCh = make(chan struct{})
        close(nbCh)
        bCh = make(chan struct{})
        return
}

func BenchmarkBlockingSelect(b *testing.B) {
        bCh, nbCh := makeChans()

        b.ResetTimer()
        for i := 0; i < b.N; i++ {
                select {
                case <-nbCh:  // query queue emulation
                case <-bCh:   // timer emulation
                }
        }
}

func BenchmarkNonBlockingSelect(b *testing.B) {
        bCh, nbCh := makeChans()

        b.ResetTimer()
        for i := 0; i < b.N; i++ {
                select {
                case <-nbCh:
                default:
                        b.Fatalf("unexpected code path")
                        select {
                        case <-nbCh:
                        case <-bCh:
                        }
                }
        }
}

Results:
BenchmarkBlockingSelect	 5000000	       256 ns/op
BenchmarkNonBlockingSelect	30000000	        43.2 ns/op

This proves that your change with select increases its' performance by more than 6 times! The change has been adopted in the code - see https://github.com/valyala/gorpc/commit/ec896817a62b8d935de640ecceae7db2560c9b75 .

FYI, I slightly updated benchmark code to be closer to the reality:
func makeChans(n int) (bCh chan struct{}, nbCh chan struct{}) {
        nbCh = make(chan struct{}, n)
        bCh = make(chan struct{})
        return
}

func BenchmarkBlockingSelect(b *testing.B) {
        bCh, nbCh := makeChans(b.N)

        b.ResetTimer()
        for i := 0; i < b.N; i++ {
                select {
                case nbCh <- struct{}{}: // query queue emulation
                case <-bCh: // timer emulation
                }
        }
}

func BenchmarkNonBlockingSelect(b *testing.B) {
        bCh, nbCh := makeChans(b.N)

        b.ResetTimer()
        for i := 0; i < b.N; i++ {
                select {
                case nbCh <- struct{}{}:
                default:
                        b.Fatalf("Unexpected code path")
                        select {
                        case nbCh <- struct{}{}:
                        case <-bCh:
                        }
                }
        }
}

But this didn't change benchmark results.

As to the change with time.After() -> time.NewTimer(), benchark results prove this was worthless optimization:
func BenchmarkTimerStop(b *testing.B) {
        for i := 0; i < b.N; i++ {
                t := time.NewTimer(time.Millisecond)
                select {
                case <-t.C:
                default:
                        t.Stop()
                }
        }
}

func BenchmarkTimerNoStop(b *testing.B) {
        for i := 0; i < b.N; i++ {
                tc := time.After(time.Millisecond)
                select {
                case <-tc:
                default:
                }
        }
}

Results:
BenchmarkTimerStop-4	 1000000	      1483 ns/op	     192 B/op	       3 allocs/op
BenchmarkTimerNoStop-4	 2000000	       854 ns/op	     192 B/op	       3 allocs/op

Yeah, you are right about timers:
I benched it when go were 1.1, and then each timer expiration created goroutines. When I asked for a way to call function within timers goroutine, they refuse it.
And now they call timers function in a timers goroutine.... just as i asked, and they refused...

FYI, I added an ability to disable message buffering on both client and server for those who need minimal rpc latency. But benchark results say that gorpc has better throughput with enabled message buffering:
10K workers, default 5ms delay for message buffering:
BenchmarkEchoInt10000Workers-4	  100000	     10849 ns/op
BenchmarkEchoIntNocompress10000Workers-4	  200000	     10088 ns/op
BenchmarkEchoString10000Workers-4	  100000	     11528 ns/op
BenchmarkEchoStringNocompress10000Workers-4	  100000	     11218 ns/op
BenchmarkEchoStruct10000Workers-4	  100000	     14669 ns/op
BenchmarkEchoStructNocompress10000Workers-4	  100000	     13533 ns/op

10K workers, disabled message buffering:
BenchmarkEchoInt10000Workers-4	   50000	     27190 ns/op
BenchmarkEchoIntNocompress10000Workers-4	  100000	     14499 ns/op
BenchmarkEchoString10000Workers-4	   50000	     29251 ns/op
BenchmarkEchoStringNocompress10000Workers-4	  100000	     16329 ns/op
BenchmarkEchoStruct10000Workers-4	   50000	     32244 ns/op
BenchmarkEchoStructNocompress10000Workers-4	  100000	     19387 ns/op

your code is not equivalent to my proposal. I'll try to fix it and post bench soon.

Made a separate pool request  #2 with benching


Allow resizing of timeline chart

@tahini @bhufmann Added a new patch. Please review.

Please add the signed off to the commit message.

I rebased to the latest master and signed-off. Please review and merge.


Add a link to deployment docs at the end of the build docs.

For usability purposes, add a link to the deployment document at the end of the build document page:  https://github.com/IBM/multi-cluster-app-dispatcher/blob/master/doc/build/build.md#build-the-multi-cluster-app-dispatcher.  For reference the deployment document is here: https://github.com/IBM/multi-cluster-app-dispatcher/blob/master/doc/deploy/deployment.md

@dmatch01 I do see a deployment document linked at the end here:
https://github.com/IBM/multi-cluster-app-dispatcher/blob/master/doc/build/build.md#build-the-multi-cluster-app-dispatcher.
Do we need to add more links?


waitForNavigation default to false breaks the browser navigation

Expected behavior
Browser navigation works
Actual behavior
Browser navigation stops
Steps to reproduce
Run this code
let taiko = require('taiko')

async function go() {
  taiko.setConfig({waitForNavigation: false, retryTimeout: 99999999});

  let d0 = Date.now();
  console.log('openBrowser')
  await taiko.openBrowser({headless:false})

  let d1 = Date.now();
  console.log('goto', d1 - d0)
  await taiko.goto('https://google.com')

  let d2 = Date.now();
  console.log('click', d2 - d1)
  await taiko.click('Google Search');

  let d3 = Date.now();
  console.log('close', d3 - d2)
  await taiko.closeBrowser();

  let d4 = Date.now();
  console.log('finish', d4 - d3)
}

go();

The code will stop at the click step.  Look at the browser and you'll see only part of the page rendered, and the browser loading animation is showing.  This will go on forever, not change, until you hit the retry timeout.
The above code is on google.com.  If you try on msn.com, it won't render anything.
For my application code, it's like msn.com, it never renders.
The reason I tried to go down the route of waitForNavigation = false is because I'm seeing other goto's have issues, which may be related to #393.
Versions
master, and 1.0.2

@trein-homeroom I can replicate the issue goto is not working properly when we set the config with waitForNavigation: false.
Thanks for reporting this issue. We'll look into soon.

@trein-homeroom The provided sample script works fine with the latest version of Taiko

Closing due to inactivity.. feel free to reopen if you are still facing the issue with latest versions


fix: #1801 - closed period reporting

Ticket #1801
Description

periodId added as optional argument to backend reporting functions
report download buttons available on closed reporting periods
test cases added

This is a follow up from https://github.com/usdigitalresponse/usdr-gost/pull/2282
The last branch was too old, so I recreated it off of main.
Screenshots / Demo Video
See other PR
Testing
Run the application, run reports, choose different reporting periods, run more reports
Automated and Unit Tests

[x] Added Unit tests

Manual tests for Reviewer

[x] Added steps to test feature/functionality manually

Checklist

[x] Provided ticket and description
[x] Provided screenshots/demo
[x] Provided testing information
[x] Provided adequate test coverage for all new code
[x] Added PR reviewers

@TylerHendrickson / @ajhyndman I incorporated your comments from the last PR into here.


Update examples react-scripts for Node.js 18

This PR resolves issue https://github.com/cypress-io/github-action/issues/687 "react-scripts used in example-wait-on fail locally on Node.js 18 (LTS)"
In the following examples:

examples/v9/react-scripts
examples/react-scripts

the following versions are bumped:

react to 18.2.0 (latest)
react-dom to 18.2.0 (latest)
react-scripts from 3.4.4 to 5.0.1 (latest)

Verification
GitHub test
Check the Actions log on https://github.com/cypress-io/github-action/actions/workflows/example-wait-on.yml?query=branch%3Amaster and ensure that the Status is "Success".

examples/v9/react-scripts is used in jobs:

wait-on-react-scripts-v9
wait-using-custom-command-v9

examples/react-scripts is used in jobs:

wait-on-react-scripts
wait-using-custom-command

Local test
Open a terminal window on a local clone of the repository:
cd examples/v9/react-scripts
nvm use 18.13.0
npm ci
npm start

Ensure the message:
"webpack compiled successfully"
appears and that there are no error messages displayed. (See below for comment on deprecation warnings.)
Following on from the previous test, to now check in examples/react-scripts ...
cd ../../react-scripts
nvm use 18.13.0
npm ci
npm start

Ensure the message:
"webpack compiled successfully"
appears and that there are no error messages displayed.
Note that when running npm start, deprecation warnings appear. This is a known issue 11860 in https://github.com/facebook/create-react-app/issues. The warnings are:
DEP_WEBPACK_DEV_SERVER_ON_AFTER_SETUP_MIDDLEWARE
DEP_WEBPACK_DEV_SERVER_ON_BEFORE_SETUP_MIDDLEWARE

Verified in run<PHONE_NUMBER> with individual jobs:

wait-on-react-scripts-v9
wait-using-custom-command-v9
wait-on-react-scripts
wait-using-custom-command

In draft pending https://github.com/cypress-io/github-action/pull/747

@jaffrepaul
This PR is now rebased and ready for review and merge.


Download charts to a temporary file

Similar to https://github.com/kubernetes/helm/issues/3253 we're using
Helm by directly importing the Go package.
A concurrency issue arises when multiple requests come for the same
package. Currently DownloadTo truncates contents of destination file and
rewrites it.
This patch changes the behaviour so instead of directly writing into the
destination it'll write the content in a temp file and renames it once
download is finished.
This change fixes sporadic issues in
https://github.com/amir/skeg/blob/5c5c6a1c215cf5110843a28f1fa389aa69a3f452/main_test.go

Using ioutil.TempFile() now.

@mattjmcnaughton thanks!

@bacongobbler thanks for the review. I made the changes.

Sorry for not getting back sooner.
Can we use a mutex or a file lock instead of a tempfile write/relocate? See https://github.com/helm/helm/pull/6492.

This would also fix #6140 I guess?

seems plausible

I'm going to close this ticket due to inactivity, but please re-open if this still needs to be addressed. Thanks!


Update the "Interactive examples" links (PR 17055 follow-up)

The examples themselves were updated to account for JavaScript modules, which didn't require changing the actual URLs.
However, since it seems that JSFiddle doesn't support JavaScript modules in its separate "JavaScript" editing-area we need to change how we embed the examples to avoid showing a blank "JavaScript"-tab.

See https://mozilla.github.io/pdf.js/examples/#interactive-examples


Added back inter plugin communications

This pull request includes significant changes to the plugin system, Dockerfile, and dependencies. The most important changes include the restructuring of plugin imports, updates to the Dockerfile for building and running the application, and modifications to the plugin_api components.
Plugin System Restructuring:

Cargo.toml: Updated workspace members to include plugin_imports instead of individual plugins.
plugin_api/Cargo.toml: Replaced individual plugin dependencies with a single plugin_imports dependency.
plugin_api/src/lib.rs: Removed direct plugin imports and added plugin_imports and plugin_macro modules.
plugin_imports/Cargo.toml: Created a new plugin_imports package to manage plugin dependencies.

Dockerfile Updates:

Dockerfile: Changed APP_NAME from horizon-server to horizon and updated build and run commands to use unified paths and names. [1] [2] [3]

Component and Dependency Updates:

plugin_api/src/components.rs: Added a new file to handle mandatory plugin API functions and plugin metadata.
plugin_api/Cargo.toml: Updated pathdiff dependency version.

Build Script Adjustments:

plugin_imports/build.rs: Renamed from plugin_api/build.rs and updated to generate lib.rs instead of plugin_imports.rs. [1] [2]

Diagram Addition:

diagrams/player-plugin.drawio: Added a new diagram file for player plugin architecture.

This was a bad idea on my part... sorry @Caznix  😆


tikv should retry connecting to pd indefinitely

Feature Request
Is your feature request related to a problem? Please describe:
In https://github.com/tikv/tikv/issues/3827 I requested retrying connectivity to pd for a few seconds, and then giving up.
However as part of Jepsen testing, it was reported that clusters can fail to come online for hundreds of seconds.
Describe the feature you'd like:
I like the 300ms retry interval as-is, but retry should be indefinite. To reduce log spam, I suggest we should only log every nth connectivity attempt.
My suggestion for n is 10 (3 seconds).
Describe alternatives you've considered:
The alternative is to increase the number of retries to a very high number (1000). Because tikv servers rejoining is a safe operation, there is no reason why there needs to be a give-up threshold.
Teachability, Documentation, Adoption, Migration Strategy:
It should be straight forward. TiDB will require the same behavior as well.

I should have a PR for this soon. :)

We've already talked about this in chat, but for posterity, it looks like TiKV 2.7.1 will retry for up to 60 seconds on startup before crashing. This could lead to situations in which a finite sequence of failure and recovery events results in a cluster that stays partially or totally unavailable until an operator intervenes. For instance, in this Jepsen test, we kill all TiKV nodes, pause all PD nodes, restart all TiKV nodes, and, after 70 seconds, resume PD. All TiKV nodes crash, and the cluster remains down indefinitely: http://jepsen.io.s3.amazonaws.com/analyses/tidb-2.1.7/20190409T175516-tikv-start-without-pd.zip.

This behavior could surprise operators and reduce availability. For instance, some init systems start services on system boot, but don't automatically restart them. Others will restart a crashing service only a finite number of times before giving up. If a TiKV node is rebooted, it'll come back online automatically--so long as PD is available. But if a compound outage occurs, such that PD is not available to that node, that reboot could take that KV node offline indefinitely--even once PD comes back.
Having a continuous retry loop will allow TiKV (and, when implemented there, TiDB) to recover automatically from these sorts of problems, and reduce the number of states and sequences operators have to reason about during an outage--they can restart nodes in any order, concurrently, or in rapid sequence, without fear of winding up in nondeterministic failure states.

To reproduce this problem, and confirm behavior experimentally, you can check out Jepsen abcc56e39a4b5bf6d477edccf59b57aea717e2ed and run something like
lein run test --auto-retry-limit 0 --time-limit 400 --concurrency 2n -w bank --nemesis restart-kv-without-pd; and-bell

Thank you for sharing this knowledge of best practices with us, @aphyr . :)
Maybe it's an appropriate topic for us to add to https://tikv.org/deep-dive/ as well! This seems like it's  information valuable to our friends making other distributed systems.

I think it is better to provide some configurations to control the retry, not unlimited.
Here we also need to care is the retry time when we start the service, it is too short not only in TiKV, but also in TiDB.
/cc @nolouch @overvenus

we can provide a timeout configuration for start, timeout 0 is unlimited.

Out of curiosity, what happens when TiKV loses its connection to PD during normal operation?

TiKV will attempt to reconnect!
I suspect the behavior we saw in this issue was because in our deployments we typically provision PD first, so we rarely have problems with TiKV's initial connections.

So... why would you want TiKV to recover from an unavailable PD automatically some of the time, but crash other times?

I don't really have a good answer for you, @aphyr . 😢
Most folks using TiKV are using tidb-ansible or tidb-operator for their deployment. These provide systemd service files and manage some of the ordering of system startup. So this issue may be relatively rarely experienced as a result.
As more folks adopt our project and try it in different settings, new usability issues are discovered. Like this one! Thanks for raising it.


Update tr.json

Modify Turkish json translation

Hello,
what is the difference between Parola and Şifre ?

parola: word to keep secret
şifre: encrypted word with an algorithm

Thank you


Consider use of server side cursors internally

Does this sum up all of the reasons why adding support for server side cursors* in the client is being considered?

Every cursor uses temporary resources to hold its data (in memory, a disk paging file, temporary disk files, or even temporary storage in the database). The cursor is called a client-side cursor when these resources are located on the client computer. The cursor is called a server-side cursor when these resources are located on the server.

While all of the cursor libraries are capable of building cursors with thousands of rows, applications designed to fetch such large rowsets may perform poorly. There are exceptions, of course. For some applications, a large client-side cursor might be perfectly appropriate and performance might not be an issue.

One obvious benefit of the client-side cursor is quick response. After the result set has been downloaded to the client computer, browsing through the rows is very fast. Your application is generally more scalable with client-side cursors because the cursor's resource requirements are placed on each separate client and not on the server.

With a server-side cursor, the server manages the result set using resources provided by the server computer. The server-side cursor returns only the requested data over the network. This type of cursor can sometimes provide better performance than the client-side cursor, especially in situations where excessive network traffic is a problem.

However, it is important to point out that a server-side cursor is - at least temporarily - consuming precious server resources for every active client. You must plan accordingly to ensure that your server hardware is capable of managing all of the server-side cursors requested by active clients. Also, a server-side cursor can be slow because it provides only single row access - there is no batch cursor available.
Server-side cursors are useful when inserting, updating, or deleting records. With server-side cursors, you can have multiple active statements on the same connection.

* - at least I hope it's to add support for, and not to switch to just SS cursors only.

The main reason is looking into whether we can improve dealing more cleverly with overwhelming backpressure (e.g. queries with big resultsets that are handled delayed).
Since microsofts JDBC driver doesn't use SS cursors by default, if at all, it will be added as another optional option, so users can choose to use them for specific queries.