text:
Modify OCR for inverted text

The old code tries a 2nd OCR on lines when a word confidence is below 50 %, so a single word with low confidence triggers it. This happens rather often, mostly for lines without inverted text, and costs performance.
The new code checks the mean confidence instead of the minimum. This typically improves the performance significantly and still works for lines with much inverted text.
In addition, the OCR result of the inverted image is now accepted if its mean confidence is better than the original one. In my test this improves the OCR result, especially for lines which only have some words with inverted text.
The algorithm still does not handle lines with both normal and inverted text optimally. OCR for such lines could be improved by inverting word wise or maybe by using Leptonica function pixAutoPhotoinvert.

The time for OCR of a double page from a historical newspaper was reduced from 185 s to 136 s by these modifications.

thanks.

@zdenop Are you also applying these improvements to the 4.1 branch?

Are you also applying these improvements to the 4.1 branch?

I am not sure whether that would be correct for 4.1, because it is not a bug fix, but a modification which changes OCR results. So it would require at least a new 4.2.

Thanks, @stweil. Yes, 4.2 will be appropriate.
@zdenop You could include other recent improvements also which are suitable for 4.x branches.

I got some test images from the Internet Archive. The new code gives better results for many lines in those images, but some lines which were inverted with the old code are now no longer inverted and are not recognized.
Changing the threshold from 0.5 to 0.7 still got all improvements, but fixed the lines with regressions. If that is confirmed in more tests, it should be changed in the code. Maybe the threshold should be a parameter.
Old and new results differ here:
diff --rec -u old/sim_japanese-economy_fall-1989_18_1_0099.txt new/sim_japanese-economy_fall-1989_18_1_0099.txt
--- old/sim_japanese-economy_fall-1989_18_1_0099.txt	2020-10-27 09:49:56.105843034 +0100
+++ new/sim_japanese-economy_fall-1989_18_1_0099.txt	2020-10-27 14:35:58.858059925 +0100
@@ -2,7 +2,7 @@
 agement material from Japanese sources, primarily scholarly journals and
 books. The selections are intended to reflect developments in the Japanese
 economy and to be of interest to those professionally concerned with this
-i H
+field.

 Editor: Kazuo Sato, Rutgers University
 Assistant Editor: Anita M. O’Brien, M. E. Sharpe, Inc.
diff --rec -u old/sim_journal-of-burn-care-research_1983-02_4_1_0000.txt new/sim_journal-of-burn-care-research_1983-02_4_1_0000.txt
--- old/sim_journal-of-burn-care-research_1983-02_4_1_0000.txt	2020-10-27 09:50:07.041917640 +0100
+++ new/sim_journal-of-burn-care-research_1983-02_4_1_0000.txt	2020-10-27 14:36:01.022075792 +0100
@@ -10,10 +10,10 @@
 \dult Learning Principles—Basis for Educaling the Burn Nurse
 Opportunities and Expanded Educational Roles in Burn Nursing
 ducational Approaches to Burn Nuising Orientation
-Development of Competencv-Based STt R IR Tt \m"sin:
+Development of Competencv-Based Orientation for Burn \m"sin:
 Developing Outreach Programs in Community Hospitals

-The |’|'i|n;u'.\ A TR Svstemn
+The |’|'i|n;u'.\ Nursing Svstemn

 Characteristics of Burn Orientation Programs

diff --rec -u old/sim_journal-of-burn-care-research_1983-02_4_1_0006.txt new/sim_journal-of-burn-care-research_1983-02_4_1_0006.txt
--- old/sim_journal-of-burn-care-research_1983-02_4_1_0006.txt	2020-10-27 09:50:09.589935013 +0100
+++ new/sim_journal-of-burn-care-research_1983-02_4_1_0006.txt	2020-10-27 14:36:02.006083007 +0100
@@ -5,11 +5,11 @@

 LR

-bk
+112

 =y

-£
+I
diff --rec -u old/sim_journal-of-burn-care-research_2007-04_28_2_0000.txt new/sim_journal-of-burn-care-research_2007-04_28_2_0000.txt
--- old/sim_journal-of-burn-care-research_2007-04_28_2_0000.txt	2020-10-27 09:50:39.058135718 +0100
+++ new/sim_journal-of-burn-care-research_2007-04_28_2_0000.txt	2020-10-27 14:36:06.314114591 +0100
@@ -10,9 +10,9 @@

 2
 e
-5
-2
-O
+)
+b
+(4]
 =z

 jiation
diff --rec -u old/sim_television-broadcast-tvb_2003-04_26_4_0000.txt new/sim_television-broadcast-tvb_2003-04_26_4_0000.txt
--- old/sim_television-broadcast-tvb_2003-04_26_4_0000.txt	2020-10-27 09:50:44.414172153 +0100
+++ new/sim_television-broadcast-tvb_2003-04_26_4_0000.txt	2020-10-27 14:36:07.990126878 +0100
@@ -1,4 +1,4 @@
-A T D R T OF TELEVlSlON
+& THE SCIENCE, ART & BUSINESS OF TELEVlSlON

 NABZUUS

@@ -11,18 +11,18 @@
 1553
 4 el sl L, 1. n A

-Il Congess ik
+Will Congess Put The

 2
-- £ 4
+h £ 4
 L] . i »
-- { bl
+. { bl
 ¢ § ias P
 ' i
 A L I | b+ Pe. .:v
 5  je
 v. = !
-- b 5 52
+. b : 52
 R 4
 ~ R

diff --rec -u old/sim_television-broadcast-tvb_2003-04_26_4_0003.txt new/sim_television-broadcast-tvb_2003-04_26_4_0003.txt
--- old/sim_television-broadcast-tvb_2003-04_26_4_0003.txt	2020-10-27 09:50:58.062264937 +0100
+++ new/sim_television-broadcast-tvb_2003-04_26_4_0003.txt	2020-10-27 14:36:11.038149223 +0100
@@ -7,7 +7,7 @@

 | ‘ DM-3000
-Single or Multi-Channel Composite; Component, TRy a0
+Single or Multi-Channel Composite; Component, Svnchronous AES/EBU
 SDI Master Control Switcher SDI, ASI, HDTV Routers ar\:gcAr:glnooguZudio/Routers

 System Configuration, Operation,
diff --rec -u old/sim_television-broadcast-tvb_2003-04_26_4_0006.txt new/sim_television-broadcast-tvb_2003-04_26_4_0006.txt
--- old/sim_television-broadcast-tvb_2003-04_26_4_0006.txt	2020-10-27 09:51:04.978311923 +0100
+++ new/sim_television-broadcast-tvb_2003-04_26_4_0006.txt	2020-10-27 14:36:12.558160366 +0100
@@ -5,13 +5,13 @@

-L/
+/,

-See Us AT NAB-Booth #C-2660 TRE ol a1 = Ao aa!
+See Us AT NAB-Booth #C-2660 www.sachtler.com

-YT ]
+sachtler,
 corporation of america
-F 55. North Main Stréet, Freeport, N.Y. 11520
+& 55. North Main Stréet, Freeport, N.Y. 11520
 f"‘&w Phone: 516 867 4900  Fax: 516 623 6844
 Saalag W email: sachtlerUS@aol.com
 S— sachtler
diff --rec -u old/sim_television-broadcast-tvb_2003-04_26_4_0048.txt new/sim_television-broadcast-tvb_2003-04_26_4_0048.txt
--- old/sim_television-broadcast-tvb_2003-04_26_4_0048.txt	2020-10-27 09:51:47.066597411 +0100
+++ new/sim_television-broadcast-tvb_2003-04_26_4_0048.txt	2020-10-27 14:36:16.834191712 +0100
@@ -1,8 +1,8 @@
-e
+"

-|
+3
 "

@@ -63,15 +63,15 @@

-e g
+o

-A\ ol B AY
+"I\ ™ o AY

 THE PROFESSIONAL OPTICAL
 DISC SYSTEM WILL ENHANCE
-QY= 115 HO 27520
+EVERY STEP OF VIDEO
 WORKFLOW, FROM ACQUISITION
 TO POSFPRODUCTION

@@ -84,14 +84,14 @@
 duction, will be greatly improved, says
 Theresa Alesso, director of marketing
 for the optical and network products
-1118
+group.

 “Our professional optical disc sys-
 tem will offer dramatically faster edit-
 ing, faster transfer from field to stu-
 dio, far easier identification of record-
 ed assets, and lower operating costs,”
-LE R E TN
+says Alesso.

 Sony'’s two professional optical disc
 camcorders will enable users to mark
diff --rec -u old/sim_television-broadcast-tvb_2004-05_27_5_0014.txt new/sim_television-broadcast-tvb_2004-05_27_5_0014.txt
--- old/sim_television-broadcast-tvb_2004-05_27_5_0014.txt	2020-10-27 14:30:45.231753729 +0100
+++ new/sim_television-broadcast-tvb_2004-05_27_5_0014.txt	2020-10-27 14:36:19.318209920 +0100
@@ -3,7 +3,7 @@
  Register Today

 | FOR THE EAST COAST'S
-Y\ [ 33 AT DI W YD
+' LARGEST VIDEO AND AUDIO
 | CONFERENCE AND EXPOSITION!

@@ -41,7 +41,7 @@

 GovernmentVideo  videography

-FIALH
+FEATURING

Thanks for this!
I'm happy to run a set of tests for some Internet Archive items. It would be easier for me if the threshold is a parameter, but can also build Tesseract locally. Did the higher threshold have a significant impact on the processing speed? I assume it probably doesn't have a significant impact, since only a small portion will be inverted & processed again?

@Shreeshrii : I do not plan 4.x release at the moment:

it is quite difficult to make release with breaking API/ABI... ;-)
changes in master are quite significant (code modernisation, source reorganisation), so backporting interesting commits start to be time expensive
personally I do not have time a lot of free time

I also see no urgent need for a new Tesseract 4 release.
We might consider tagging new releases from Git master as the last one was 5.0.0-alpha. I suggest to name them 5.0.0-alpha-YYYYMMDD, for example 5.0.0-alpha-20201027, or a little bit longer ``5.0.0-alpha-2020-10-27`.

Did the higher threshold have a significant impact on the processing speed? I assume it probably doesn't have a significant impact, since only a small portion will be inverted & processed again?

That's right. The most significant impact on the performance comes from testing the mean confidence value instead of the minimum confidence value. A lot of lines contain some part with low word confidence, and all those lines were processed twice with the old code.

@zdenop, @egorpugin, @Shreeshrii, @amitdo: Would it be okay if I tag a new release like I described it above? Or are there other suggestions?

If you set pre-release tag, I think it's ok.

I think it would be cool if we switch to std::{string,vector etc.} types before it.

Yes, that's why I think it is worth waiting with 5.0.0.

5.0.0-alpha-YYYYMMDD
+1

According to https://semver.org/ we can do 5.0.0-alpha.YYYYMMDD (dot instead of second dash).
But I'm ok with both.

Thanks @stweil. I like the idea of having the date as part of the tag.
What will the version strings for later commits look like?

What about switching from semantic versioning to calendar versioning?
The next official version be 2021.03 (example).
This scheme (used by Ubuntu, Eclipse, IntelliJ, Windows, Docker ... and OCR-D/all) signals an ongoing development and advances regular releases. Usually, it expresses versions on monthly or even daily schedules. And most important: it decouples release management from semantically sophistries, to decide what sort of changes are included in the next version and how they might affect application users. Because, these decisions are quite often not so straight forward:
What are the reasons for tagging a new major version?
Semantically, this is widely used to communicate changes to the external API that client applications might break (https://en.wikipedia.org/wiki/Software_versioning#Sequence-based_identifiers). If there are only changes in behavior, even clear improvements (like with this PR), this is something desired, but this will not affect client applications (like https://github.com/sirfz/tesserocr).
Changes of the underlying code base should be noted as refactoring, which means, that they don't even change existing behavior, because the new implementation should produce the same results as the old one did.
From a developers point of view I can comprehend the psychological demand for a new major version, just to underline that internally so many things were changed and so much efforts have had been taken to improve or refactor, but from an interface perspective I cannot obey.
Mixing versioning schemes is not considered a good practise (https://mitchdenny.com/dates-in-version-numbers/)

@M3ssman FYI, see https://abi-laboratory.pro/?view=timeline&l=tesseract

@Shreeshrii Thanks, this is indeed very informative. I didn't knew this service before. Even extracts a change log!

According to https://semver.org/ we can do 5.0.0-alpha.YYYYMMDD (dot instead of second dash).

We switched to semver versioning some time ago, so of course the new release tag must match the semver rules.
5.0.0-alpha-YYYYMMDD is compatible with semver: the patch version is 5.0.0, and the pre-release identifier is alpha-YYYYMMDD. .0.0-alpha.YYYYMMDDwould be possible, too, and has two pre-release identifiers alpha and YYYYMMDD.

Check grammar https://semver.org/

 "-"  "+"

As I understand there are no any other "-" dash symbols except for splitting core and pre-release.

What will the version strings for later commits look like?

We would use the pattern 5.0.0-alpha-YYYYMMDD until we have release candidates like 5.0.0-rc1 or the final 5.0.0. A Tesseract version string would look like 5.0.0-alpha-20201217-2-g58aa for example.

https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string

As I understand there are no any other "-" dash symbols except for splitting core and pre-release.

Dash can be part of the pre-release identifier:
<non-digit> ::= <letter>
              | "-"

Ah, I see, yes.

Heads up for tag for proposed new 5.0.0-alpha-YYYYMMDD release
@lvc for updating abi-tracker
@AlexanderP for PPA etc

See https://abi-laboratory.pro/index.php?view=timeline&l=tesseract

Well then, if you like to tag a release with mixing semantic versioning with date plus commit hash, where the latter two are implicitly provided by the tag itself already. I'm just afraid that all the pre-beta-gamma-whatever stuff will lead to a situation where the next stable release transforms Tesseract into Tesseract Nukem Forever (or Perl 6 or ... ).
I'm looking straight from a user's point of view in this case. Especially when we start our succeeding historical newspaper project next spring, I'd like to have something that is a) considerably stable and b) something more recent than 4.1.1 to reflect enhancements in open source. If the release is tagged candidate, I cannot communicate it's stable, whereas a calendar version represents just some state of time.
Other points to concern:

There are still some issues tied to milestone 4.1.1 (https://github.com/tesseract-ocr/tesseract/milestone/5).
What happens with these?
If there's a hard cut between version 4 and 5, must both major releases be maintained?

Thanks for the reminder. As 4.1.1 already exists and there is no urgent need to fix those issues in 4.1.x, I moved the milestones to 5.0.0 now. One of the issues could also be closed.
As long as there are only few people working on Tesseract, I see no chance for full support of more than a single major release. That means only critical bugs will be fixed in 4 by backporting of changes from 5. But this is open source development, so anybody can send pull requests to backport compatible changes to 4.
Regarding the release tag, we don't mix. We use semantic versioning which allows pre-release identifiers with a date part. We also don't add a commit hash to the tag. Such commit hashs are added automatically to the Tesseract version string for builds which are not based on a tagged release.

It a bit complicated issue.
We have two kinds of users:

tesseract command line users (regular users).
libtesseract users (developers).

The reason we did not release 5.0.0 yet is that we still plan to break libtesseract ABI, and we don't want to release 5.0.0 and then to release 6.0.0 with a new ABI 6/12 months later.
But that leaves the regular users with the one year old 4.1.1, and we don't know when we will release 5.0.0.
When people report about an issue they have with 4.1.1. many time we tell them: "Try 5.0.0...".
There is also the LTS users with there old/very old versions of tesseract.
Many users won't use a alpha/beta version  on production. so they want a new stable release.
I don't know what can we do about this issue in a way that pleases most users. You should remember that we have a limited resources. Ignore the 'by Google" we still advertise. They don't participate in this project anymore.

The new pre-release 5.0.0-alpha-20201224 is available now. Merry Christmas and thank you to everybody.

Merry Christmas @stweil. Thank you and all the contributors.

JFYI as a follow up, this is what happened to archive.org's OCR speed once we switched from 4.1.1 to 5.0.0-alpha-202012-31.

Seems like the 20-30% estimated speedup holds even at 3 million pages per day. Awesome. :-)

I got some test images from the Internet Archive. The new code gives better results for many lines in those images, but some lines which were inverted with the old code are now no longer inverted and are not recognized.
Changing the threshold from 0.5 to 0.7 still got all improvements, but fixed the lines with regressions. If that is confirmed in more tests, it should be changed in the code. Maybe the threshold could be a parameter.

@stweil,
Maybe we should change the threshold to 0.7 or add a invert_threshold parameter for 5.0.1?

This should have be done for the 5.0.0 release, but I missed it because the issue was neither assigned to a project nor to a milestone.

Can this change be done in 5.2.0, or do you prefer to change it in 6.0 ?

Thanks for the reminder. I think it can be done in 5.2.0.

Maybe we should change the threshold to 0.7 or add a invert_threshold parameter for 5.0.1?

I just try to implement such a parameter. It could make the existing parameter tessedit_do_invert redundant, because a threshold greater than 0.0 could be equivalent to tessedit_do_invert == true.
Should the new parameter be called invert_threshold as suggested or is there a better name (tessedit_invert_threshold)?

Choose your preferred option.

I bumped into this discussion. I have a image with both normal and inverted text that doesn't quite recognize well on the left bottom with language nld. However, when I invert it, all text seems to be recognized right, inverted or not...
https://github.com/internetarchive/archive-pdf-tools/issues/55

That image is recognized much better with model script/Latin instead of nld. But the results for nld also improve with parameter -c invert_threshold=0.9 in my new code.

Is the double content in the resulting hocr by design? Should the recieving party pick the best option?
Outlook voor Android downloadenhttps://aka.ms/ghei36

From: Stefan Weil @.>
Sent: Sunday, June 26, 2022 7:57:38 AM
To: tesseract-ocr/tesseract @.>
Cc: rmast @.>; Comment @.>
Subject: Re: [tesseract-ocr/tesseract] Modify OCR for inverted text (#3141)
That image is recognized much better with model script/Latin instead of nld. But the results for nld also improve with parameter -c invert_threshold=0.9 in my new code.
—
Reply to this email directly, view it on GitHubhttps://github.com/tesseract-ocr/tesseract/pull/3141#issuecomment-1166424395, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AAZPZ5SQ6KBX4BFQ2VS6TX3VQ7WNFANCNFSM4S73BPVQ.
You are receiving this because you commented.Message ID: @.***>

Is there double content? Then that's wrong.

@rmast - I would test with just Tesseract, not other tools like OCRMyPDF that use Tesseract, and then see if you still get double content. I have never seen this - the only issue I've seen is diplopia (for which is there is an open MR), but that is only per character.

tesseract 175789293-f39ddfdb-6f3e-4598-8d16-80a1f4a88b36.jpg out -l nld -c invert_threshold=0.9 hocr
For example "wis - clear" twice at slightly the same spot, by the way both with sufficient but slightly different confidence.

      >
      wis-clear
      |
      wis
      -
      clear

tesseract 5.1.0-71-g7c0c
 leptonica-1.79.0
  libgif 5.1.4 : libjpeg 8d (libjpeg-turbo 2.0.3) : libpng 1.6.37 : libtiff 4.1.0 : zlib 1.2.11 : libwebp 0.6.1 : libopenjp2 2.3.1
 Found AVX512BW
 Found AVX512F
 Found AVX2
 Found AVX
 Found FMA
 Found SSE4.1
 Found OpenMP 201511

@rmast, mabye #3489 is related to your issue.

Yes, I focused on that one instance by accident, the rest of the file doesn’t contain double content, so I agree.

git bisect shows that before commit 2252936fc801aee6c65a0bae9daee0638f56febf that example of double content just returned "EEEN wis - clear".

@stweil, do you consider this issue a blocker for releasing 5.2.0?

@rmast, mabye #3489 is related to your issue.

I tried to understand #3489 to look whether my fix would apply, but I guess #3489 has to do with the difference between automatic segmentation and 'straight' -psm 4 processing of a line that really isn't that straight. My issue was about inversion which has implementations in Tesseract on different levels.

I’m reverting to your last commit before that commit, as that first older commit doesn’t compile.
4366d811d44d9c2331dbb4405727e0251bdc01d7
I want to confirm your git bisect-finding. Never heard of it…
I’ll use the old tessedit_do_invert=True.

authors: M3ssman MerlijnWajer Shreeshrii amitdo egorpugin linuxhw rmast stweil zdenop


text:
Add MacOS to CI matrix

Notable changes:

Changed make install-lint to use go install instead of curling the binary.
Added additional Install hadolint step in pre-main.yaml that uses brew for macOS installs.
Adds macos-latest to matrix for running tests.

Since we are running these scripts locally as well as in CI, they might as well pass both places.

/dci-rerun

Removing the WIP flag from this PR.  It seems to be working!  I'll edit the required checks once this merges to remove the Run Linter and Vet and Run Unit Tests checks and replace them with the linux and mac versions.

Also, DCI seems to be failing on their side with something.

/dci-rerun

source: gharchive/pull-request

license_type: permissive

license_source: github-api


text:
feature/editor config

Copied mainly from https://github.com/dotnet/coreclr/blob/master/.editorconfig
rozlyn vs editorconfig?

"Ruleset" and ".editorconfig" files are themselves not doing any analysis, but are just configuration files that determine/configure behavior of installed analyzers. Rulesets are the legacy file format used for analysis configuration, and we are slowly moving towards replacing them with .editorconfig based configuration.

https://github.com/dotnet/roslyn-analyzers/issues/1844#issuecomment-427422189

Closes https://github.com/testcontainers/testcontainers-dotnet/issues/42

Should we ask PRs to run dotnet format before merging?
https://www.hanselman.com/blog/EditorConfigCodeFormattingFromTheCommandLineWithNETCoresDotnetFormatGlobalTool.aspx

Coverage remained the same at 84.314% when pulling 6955079faca9ad64f95c8b03223d7265c2fe8b11 on feature/editor-config into 2d37df5a762782f9f210fa298d21b02ca9929ab6 on master.

I personally prefer indent_size side of 4. What do you think @swissarmykirpan?

I also prefer 4 :)

Democracy! haha jk!
I'll need a review approval to merge this.

authors: coveralls isen-ng swissarmykirpan

repo: testcontainers/testcontainers-dotnet

license: MIT


text:
Increase Elasticsearch wait time from 1 to 2 minutes, make it configurable

In more recent Elasticsearch versions, it's not uncommon for startup to take over 1 minute.
We had tests flaking considerably with Elasticsearch, and there's no way to easily increase this limit, besides copying the regex over and invoking setWaitStrategy (see https://github.com/GoogleCloudPlatform/DataflowTemplates/pull/960).
So I'm bumping the default to 2 since it's more reasonable, and exposing withStartupTimeout. Not sure if there's a more well-accepted practice here, let me know and I can change here.

Hi @bvolpato, container startup time with Elasticsearch 8.9.1 takes around 20s which is still way below than 1m. Is the same version that are you using? I also think that there is something else regarding to Elasticserach container initialization in your tests which make the initialization slow. I would like to understand more and probably find some tuning in the defaults offered by Testcontainers. As far as I remember 1 min should be enough for most of the containers to start.
Looking forward to hear more about your setup.

Thanks for getting back to me @eddumelendez .
It is fairly simple usage, but I am using elasticsearch-oss (7.9.2).
When upgrading to newer tags, it took even longer to start.
The host that we are using is fairly big (n2d-highmem-16 on Google Cloud), but there's a lot of parallel tests.
We'd like to increase the parallelism even more (integration tests are taking ~90min), but the only thing that holds us is Elasticsearch.

ElasticsearchContainer already inherits the withStartupTimeout() method from GenericContainer. Isn't this enough for your use case?
elastic.withStartupTimeout(Duration.ofSeconds(120));

authors: bvolpato eddumelendez kiview

repo: testcontainers/testcontainers-java

license: mit

license_source: bigquery


text:
Fix copy large files

This is an attempt to fix OutOfMemoryError (out of heap memory) when copying large files into a container via GenericContainer#withCopyFileToContainer().
The previous implementation relied on an in-memory array backing a ByteArrayInputStream which represents the tar archive sent to the Docker daemon which is limited by the available heap memory of the JVM at the moment of execution.
By using the local disk (temporary directory), we can copy files into the container which are larger than the available heap memory of the JVM. The caveat being that we are now limited by the available disk space in the temporary directory of the machine running Testcontainers.
Maybe it could be useful to perform this conditionally depending on the size of the transferables or configurable via runtime property.
What do you think?
Fixes #4203

Hi @joschi, thanks for the PR. What I had in mind for the issue is checking if copy file is supported to do an async operation and then implement it in docker-java and use it in Testcontainers.

Thanks for your contribution, @joschi ! PR has been updated to stream the files instead of use local disk.

Fixing #7239 is amazing. Thank you so much!
Is there any thought or plan at this stage as to when we might get a release with the fix?
Thanks to all involved!

authors: eddumelendez frankjkelly joschi


text:
dynamodb-local inside Gitlab CI

I can't get amazon/dynamodb-local image work inside Gitlab CI. Note that it works locally without any problems. I haven't tried if this works in testcontainers-java, cc @rnorth
I'm using CI settings from docs.
My .gitlab-ci.yml:
image: node:12

stages:
  - prepare
  - test

# DinD service is required for Testcontainers
services:
  - docker:dind

variables:
  DOCKER_HOST: 'tcp://docker:2375'
  DOCKER_DRIVER: overlay2

install_packages_run_linters:
  stage: prepare
  script:
    - yarn install
    - yarn lint
  artifacts:
    expire_in: 1 hour
    paths:
      - ./node_modules

test:unit:
  stage: test
  script:
    - DEBUG=testcontainers yarn test --runInBand --coverage
  coverage: '/All files[^|]*\|[^|]*\s+([\d\.]+)/'
  dependencies:
    - install_packages_run_linters

I'm setting up container like this:
const startedContainer = new GenericContainer("amazon/dynamodb-local").withExposedPorts(8000).start()

Relevant CI output:
Running with gitlab-runner 11.11.0-rc2 (7f58b1ec)
  on docker-auto-scale 0277ea0f
section_start:1557296045:prepare_executor
Using Docker executor with image node:12 ...
Starting service docker:dind ...
Pulling docker image docker:dind ...
Using docker image sha256:6204caf6c5927058f10fab0e4661b5f7a37d9a986a89b28a176a9958a0a5b7d3 for docker:dind ...
Waiting for services to be up and running...
Pulling docker image node:12 ...
Using docker image sha256:c77f0d290562eefd2c9e5481cc1707f40a43d2dd5f7719384bd3b8f05699ffd7 for node:12 ...
section_end:1557296093:prepare_executor
section_start:1557296093:prepare_script
Running on runner-0277ea0f-project-12215658-concurrent-0 via runner-0277ea0f-srm-1557295996-5afcffc7...
section_end:1557296098:prepare_script
section_start:1557296098:get_sources
Initialized empty Git repository in /builds/Meemaw/meshwatch-backend-core/.git/
Fetching changes...
Created fresh repository.
From https://gitlab.com/Meemaw/meshwatch-backend-core
 * [new branch]      master     -> origin/master
Checking out fb1e6645 as master...

Skipping Git submodules setup
section_end:1557296100:get_sources
section_start:1557296100:restore_cache
section_end:1557296101:restore_cache
section_start:1557296101:download_artifacts
Downloading artifacts for install_packages_run_linters (208940828)...
Downloading artifacts from coordinator... ok        id=208940828 responseStatus=200 OK token=oi_pU5bU
section_end:1557296112:download_artifacts
section_start:1557296112:build_script
$ DEBUG=testcontainers yarn test --runInBand --coverage
yarn run v1.15.2
warning package.json: No license field
$ tsdx test --verbose --runInBand --coverage
2019-05-08T06:15:26.975Z testcontainers Pulling image: amazon/dynamodb-local:latest
2019-05-08T06:15:44.045Z testcontainers Creating container for image: amazon/dynamodb-local:latest
2019-05-08T06:15:44.875Z testcontainers Starting container with ID: 32d5a7fed1d39799e6093fa46c52e8901156043e3b1bdf2bedd937d486133ff9
2019-05-08T06:15:46.372Z testcontainers Waiting for host port :39113
2019-05-08T06:15:46.376Z testcontainers Waiting for internal port :8000
FAIL test/monitoring-service.spec.ts (72.17s)
  MonitoringService
    with DynamoStorage
      bookmarkMonitor
        âœ• should_bookmarkMonitor_when_monitorIdPassed (14ms)
        âœ• should_return404_when_bookmarkMonitorWithRandomId
      deleteMonitor
        âœ• should_deleteMonitor__when_newlyCreatedMonitorParamsPassed (1ms)
        âœ• should_return404_when_deleteMonitorWithRandomId
      getMonitorsByScheduler
        âœ• should_getEmptyCollection_when_searchByRandomScheduler (1ms)
        âœ• should_getMonitors_when_searchByTestScheduler
      getMonitors
        âœ• should_getEmptyCollection_when_searchByRandomUserId
        âœ• should_getTestMonitors_when_searchByTestUserId (1ms)
      createMonitor
        âœ• should_createNewMonitor_when_createMonitorPayloadPassed
        âœ• should_returnBoomWithFieldError_when_invalidCreateMonitorPayloadPassed
        âœ• should_returnBoomWithFieldErrors_when_emptyObjectPassed (1ms)
      updateMonitor
        âœ• should_updateMonitor_when_updateMonitorPayloadIsPassed
        âœ• should_returnBoomWithFieldError_when_createMonitorPayloadPassed (1ms)

  â— MonitoringService â€º with DynamoStorage â€º bookmarkMonitor â€º should_bookmarkMonitor_when_monitorIdPassed

    Port :39113 not bound after 40000ms
```

Hi @Meemaw, it seems from the logs that the container is unable to bind its ports. Interesting that it works locally and not in GitLabs as the environment shouldn't matter here.
Version 1.1.12 fixes issue https://github.com/testcontainers/testcontainers-node/issues/5 which changes the behaviour of internal port checking.
Could you please upgrade, try again and report back?

Upgraded but the error persists:
CI output:
Running with gitlab-runner 11.11.0-rc2 (7f58b1ec)
  on docker-auto-scale fa6cab46
Using Docker executor with image node:12 ...
Starting service docker:dind ...
Pulling docker image docker:dind ...
Using docker image sha256:6204caf6c5927058f10fab0e4661b5f7a37d9a986a89b28a176a9958a0a5b7d3 for docker:dind ...
Waiting for services to be up and running...
Pulling docker image node:12 ...
Using docker image sha256:c77f0d290562eefd2c9e5481cc1707f40a43d2dd5f7719384bd3b8f05699ffd7 for node:12 ...
Running on runner-fa6cab46-project-12215658-concurrent-0 via runner-fa6cab46-srm-1557305768-55e74cdb...
Initialized empty Git repository in /builds/Meemaw/meshwatch-backend-core/.git/
Fetching changes...
Created fresh repository.
From https://gitlab.com/Meemaw/meshwatch-backend-core
 * [new branch]      master     -> origin/master
Checking out 0ce92027 as master...

Skipping Git submodules setup
Downloading artifacts for install_packages_run_linters (209030943)...
Downloading artifacts from coordinator... ok        id=209030943 responseStatus=200 OK token=nzzzxfzs
$ DEBUG=testcontainers yarn test --runInBand --coverage
yarn run v1.15.2
warning package.json: No license field
$ tsdx test --verbose --runInBand --coverage
2019-05-08T08:58:20.699Z testcontainers Pulling image: amazon/dynamodb-local:latest
2019-05-08T08:58:37.674Z testcontainers Creating container for image: amazon/dynamodb-local:latest
2019-05-08T08:58:38.260Z testcontainers Starting container with ID: b5926723b361a372a77fe574bf5d63a51b973275d0ca09a778bb8bd6b948416b
2019-05-08T08:58:39.871Z testcontainers Waiting for host port :40621
2019-05-08T08:58:39.875Z testcontainers Waiting for internal port :8000
2019-05-08T08:58:39.875Z testcontainers Executing command "/bin/sh -c cat /proc/net/tcp{,6} | awk '{print $2}' | grep -i :1f40" on container with ID: b5926723b361a372a77fe574bf5d63a51b973275d0ca09a778bb8bd6b948416b
2019-05-08T08:58:39.878Z testcontainers Executing command "/bin/sh -c nc -vz -w 1 localhost 8000" on container with ID: b5926723b361a372a77fe574bf5d63a51b973275d0ca09a778bb8bd6b948416b
2019-05-08T08:58:39.879Z testcontainers Executing command "/bin/bash -c </dev/tcp/localhost/8000" on container with ID: b5926723b361a372a77fe574bf5d63a51b973275d0ca09a778bb8bd6b948416b
2019-05-08T08:58:40.687Z testcontainers Executing command "/bin/sh -c cat /proc/net/tcp{,6} | awk '{print $2}' | grep -i :1f40" on container with ID: b5926723b361a372a77fe574bf5d63a51b973275d0ca09a778bb8bd6b948416b
2019-05-08T08:58:40.689Z testcontainers Executing command "/bin/sh -c nc -vz -w 1 localhost 8000" on container with ID: b5926723b361a372a77fe574bf5d63a51b973275d0ca09a778bb8bd6b948416b
2019-05-08T08:58:40.690Z testcontainers Executing command "/bin/bash -c </dev/tcp/localhost/8000" on container with ID: b5926723b361a372a77fe574bf5d63a51b973275d0ca09a778bb8bd6b948416b
2019-05-08T08:58:41.440Z testcontainers Executing command "/bin/sh -c cat /proc/net/tcp{,6} | awk '{print $2}' | grep -i :1f40" on container with ID: b5926723b361a372a77fe574bf5d63a51b973275d0ca09a778bb8bd6b948416b
2019-05-08T08:58:41.442Z testcontainers Executing command "/bin/sh -c nc -vz -w 1 localhost 8000" on container with ID: b5926723b361a372a77fe574bf5d63a51b973275d0ca09a778bb8bd6b948416b
2019-05-08T08:58:41.442Z testcontainers Executing command "/bin/bash -c </dev/tcp/localhost/8000" on container with ID: b5926723b361a372a77fe574bf5d63a51b973275d0ca09a778bb8bd6b948416b
2019-05-08T08:58:42.243Z testcontainers Executing command "/bin/sh -c cat /proc/net/tcp{,6} | awk '{print $2}' | grep -i :1f40" on container with ID: b5926723b361a372a77fe574bf5d63a51b973275d0ca09a778bb8bd6b948416b
2019-05-08T08:58:42.244Z testcontainers Executing command "/bin/sh -c nc -vz -w 1 localhost 8000" on container with ID: b5926723b361a372a77fe574bf5d63a51b973275d0ca09a778bb8bd6b948416b
2019-05-08T08:58:42.245Z testcontainers Executing command "/bin/bash -c </dev/tcp/localhost/8000" on container with ID: b5926723b361a372a77fe574bf5d63a51b973275d0ca09a778bb8bd6b948416b
2019-05-08T08:58:43.055Z testcontainers Executing command "/bin/sh -c cat /proc/net/tcp{,6} | awk '{print $2}' | grep -i :1f40" on container with ID: b5926723b361a372a77fe574bf5d63a51b973275d0ca09a778bb8bd6b948416b
2019-05-08T08:58:43.056Z testcontainers Executing command "/bin/sh -c nc -vz -w 1 localhost 8000" on container with ID: b5926723b361a372a77fe574bf5d63a51b973275d0ca09a778bb8bd6b948416b
2019-05-08T08:58:43.057Z testcontainers Executing command "/bin/bash -c </dev/tcp/localhost/8000" on container with ID: b5926723b361a372a77fe574bf5d63a51b973275d0ca09a778bb8bd6b948416b
2019-05-08T08:58:43.821Z testcontainers Executing command "/bin/sh -c cat /proc/net/tcp{,6} | awk '{print $2}' | grep -i :1f40" on container with ID: b5926723b361a372a77fe574bf5d63a51b973275d0ca09a778bb8bd6b948416b
2019-05-08T08:58:43.822Z testcontainers Executing command "/bin/sh -c nc -vz -w 1 localhost 8000" on container with ID: b5926723b361a372a77fe574bf5d63a51b973275d0ca09a778bb8bd6b948416b
2019-05-08T08:58:43.823Z testcontainers Executing command "/bin/bash -c </dev/tcp/localhost/8000" on container with ID: b5926723b361a372a77fe574bf5d63a51b973275d0ca09a778bb8bd6b948416b
2019-05-08T08:58:44.505Z testcontainers Executing command "/bin/sh -c cat /proc/net/tcp{,6} | awk '{print $2}' | grep -i :1f40" on container with ID: b5926723b361a372a77fe574bf5d63a51b973275d0ca09a778bb8bd6b948416b
2019-05-08T08:58:44.507Z testcontainers Executing command "/bin/sh -c nc -vz -w 1 localhost 8000" on container with ID: b5926723b361a372a77fe574bf5d63a51b973275d0ca09a778bb8bd6b948416b
2019-05-08T08:58:44.507Z testcontainers Executing command "/bin/bash -c </dev/tcp/localhost/8000" on container with ID: b5926723b361a372a77fe574bf5d63a51b973275d0ca09a778bb8bd6b948416b
FAIL test/monitoring-service.spec.ts (72.263s)
  MonitoringService
    with DynamoStorage
      bookmarkMonitor
        ✕ should_bookmarkMonitor_when_monitorIdPassed (19ms)
        ✕ should_return404_when_bookmarkMonitorWithRandomId (1ms)
      deleteMonitor
        ✕ should_deleteMonitor__when_newlyCreatedMonitorParamsPassed (1ms)
        ✕ should_return404_when_deleteMonitorWithRandomId
      getMonitorsByScheduler
        ✕ should_getEmptyCollection_when_searchByRandomScheduler (1ms)
        ✕ should_getMonitors_when_searchByTestScheduler (8ms)
      getMonitors
        ✕ should_getEmptyCollection_when_searchByRandomUserId (8ms)
        ✕ should_getTestMonitors_when_searchByTestUserId (1ms)
      createMonitor
        ✕ should_createNewMonitor_when_createMonitorPayloadPassed (9ms)
        ✕ should_returnBoomWithFieldError_when_invalidCreateMonitorPayloadPassed (1ms)
        ✕ should_returnBoomWithFieldErrors_when_emptyObjectPassed (1ms)
      updateMonitor
        ✕ should_updateMonitor_when_updateMonitorPayloadIsPassed (6ms)
        ✕ should_returnBoomWithFieldError_when_createMonitorPayloadPassed (1ms)

  ● MonitoringService › with DynamoStorage › bookmarkMonitor › should_bookmarkMonitor_when_monitorIdPassed

    Port :40621 not bound after 40000ms

I can confirm that amazon/dynamodb-local works locally.
I assume then that the issue is related to docker in docker, and that testcontainers-node is not using the correct socket in this case. I see you've set the DOCKER_HOST env variable, I'd need to check what testcontainers-java does with it. Possibly it's as simple as using that value as the socket instead of the default one if it is present.

@Meemaw Version 1.1.13 will now use the DOCKER_HOST env variable if one is set as the socket path. Could you please upgrade and try again?

Getting     connect ENOENT tcp://docker:2375

Ah my bad, it's not a socket. Will let you know once this is fixed.

@Meemaw Could you please try version 1.1.14? 🙂

Port :46427 not bound after 40000ms again :|

Might be. Would be nice if this is fixed, as this is now unusable inside CI environments. If you need some help, I can fix/look into it once I'll find some time.

Might be. Would be nice if this is fixed, as this is now unusable inside CI environments. If you need some help, I can fix/look into it once I'll find some time.

Help would be appreciated!
The issue isn't CI environments, as the build pipeline runs in Travis - the issue is docker in docker.
Perhaps @rnorth could point me in the right direction?

Btw @Meemaw I noticed in your example that you're not awaiting the result of starting the container:
const startedContainer = new GenericContainer("amazon/dynamodb-local").withExposedPorts(8000).start()

@Meemaw I've verified that version 1.1.15 fixes this issue: https://gitlab.com/cristianrgreco/testcontainers-node/-/jobs/210895051
Could you please upgrade and try again?

I have upgraded and can confirm that he container now starts. However, there is still a problem. I am connecting to dynamodb locally like:
const endpoint = `http://localhost:${startedContainer.getMappedPort(exposedPort)}`;
const dynamodb = new DynamoDB({ endpoint })

This doesn't work in CI, as the container is on different IP. It would be nice if testcontainers exposed a method like getContainerIpAddress. Java version already exposes that.

@Meemaw This should be fixed now in version 1.1.17, could you give it a go?

I can confirm that it works now 🚀 Thanks for fix and for being so responsive :+1:

source: gharchive/issue

authors: Meemaw cristianrgreco

repo: testcontainers/testcontainers-node


text:
Use a Kafka container

Hi great library thanks for it.
Does it support to run a kafka server?
I tried a basic generic container  but probably I don't understand how to do it correctly.
Thanks in advance for you answer.

Hello @marcelo-turrin you can use any type of container. There is a bunch of example in the readme. For example, I am using a latest MySQL image.
const mysqlContainer = await new GenericContainer('mysql', 'latest')
nv('MYSQL_USER', MYSQL_USER)
      .start()

@marcelo-turrin check if this helps: https://www.testcontainers.org/modules/kafka/

HI @marcelo-turrin , were you able to get the help you needed?

@cristianrgreco Hi! Seems like currently there is no easy way to create a Kafka container.
First of all, zookeeper and Kafka need to be in a network to communicate (luckily, custom network creation was released recently).
Second, we need to provide environment variable with advertised listeners to Kafka, which contains port accessible from host (mapped port). In java implementation for Kafka container they set advertised listeners in "containerIsStarting" method which is called after ports are bound but before container starts: KafkaContainer.java#L125.
Please, could you let me know if there is an option to provide bound port to env variables for container? Or is it something that needs contributing? Thanks!

@katerina-semikina I can tell you that there's none, I specifically had discussion with maintainers of Java version about letting me implement ability to specify a port to map to directly (since they have that method) and they quite aggressively told me that I shouldn't, they even have a big blog article about why that is a very bad idea and they like to link it to everybody 😄
@cristianrgreco also rejected my PR, I believe following the principles in that article.
In my fork I have it implemented though, since it's an essential feature and I think it's not the kind of thing they should decide for us.

@katerina-semikina у них так кстати какой-то русский там верховодит, спроси лично его, вдруг девичья просьба растопит его очерствевшее сердце 😄

@katerina-semikina I can tell you that there's none, I specifically had discussion with maintainers of Java version about letting me implement ability to specify a port to map to directly (since they have that method) and they quite aggressively told me that I shouldn't, they even have a big blog article about why that is a very bad idea and they like to link it to everybody 😄
@cristianrgreco also rejected my PR, I believe following the principles in that article.
In my fork I have it implemented though, since it's an essential feature and I think it's not the kind of thing they should decide for us.

Yeah, I've read those article and mostly I agree, except such cases as Kafka containers. If testcontainers stick to random ports approach, it's okay, as long as it can be implemented in a way similar to java Kafka container, which I may try. Anyway, I think it is an important feature.

it's okay, as long as it can be implemented in a way similar to java Kafka container

I suspect that the only reason they can support that way is because they have a method to map the port to predefined value in first place.
Happy to be corrected, if that's not the case.

it's okay, as long as it can be implemented in a way similar to java Kafka container

I suspect that the only reason they can support that way is because they have a method to map the port to predefined value in first place.
Happy to be corrected, if that's not the case.

There is a method, where environment variables are exported after ports are bound, but before container starts. That's why it is possible.

There is a method, where environment variables are exported after ports are bound, but before container starts. That's why it is possible.

Exported to where? Don't you need the final value of the port in the host system? Can you link that method?

Hi @katerina-semikina, were you able to get this working?

Hi @cristianrgreco, yes, thank you for releasing. I was able to successfully create Kafka test container.

@katerina-semikina That's great! I don't suppose you could share some code to help @marcelo-turrin? :slightly_smiling_face:

@katerina-semikina Just following up in case you missed my last message. If not I'll look at doing this over the next few days

@cristianrgreco sorry for delay. Yes, I'll prepare an example soon.

@cristianrgreco @marcelo-turrin I provided an example with possible way to create Kafka container here: https://github.com/katerina-semikina/node-examples/blob/master/src/tests/KafkaTestContainer.ts

Thanks @katerina-semikina

@katerina-semikina Do you have any feedback for this PR? https://github.com/testcontainers/testcontainers-node/pull/102
It's mostly based off your example and I've added support to use a built-in ZK and removed the need for clients to provide ports.

@katerina-semikina Do you have any feedback for this PR? #102
It's mostly based off your example and I've added support to use a built-in ZK and removed the need for clients to provide ports.

For me it looks really good 👍

This is now available in 3.0.0. Documentation on how to use the new Kafka module is here: https://github.com/testcontainers/testcontainers-node/tree/master/src/modules/kafka
Big thanks again to @katerina-semikina
If there are any problems please raise a new issue :slightly_smiling_face:

Did someone got it working? I am trying to connect to Kafka from another container, having the same shared network, but the advertised broker is the localhost one...

https://github.com/testcontainers/testcontainers-node/tree/master/src/modules/kafka

Hi Omer, yes, it should work fine.
It may be a bit tricky when using another container which is trying to get advertised listeners in the same network. For me it works for schema registry container just fine (in testcontainers@7.24.0).
Could you provide more details please?

@omerlh could you please share a reproducible example using the latest version of testcontainers?

I got it to work by following this post. I am not sure what is the difference exactly (some code is borrowed from testcontainers kafka), but the important part is setting both addressess.
const network = await new Network().start();

  const zookeeperContainer = await new GenericContainer('confluentinc/cp-zookeeper:7.0.1')
    .withExposedPorts(2181)
    .withNetworkMode(network.getName())
    .withNetworkAliases('zookeeper')
    .withEnv('ZOOKEEPER_CLIENT_PORT', '2181')
    .start();

  const kafkaContainer = await new GenericContainer('confluentinc/cp-kafka:7.0.1')
    .withExposedPorts(19092)
    .withNetworkMode(network.getName())
    .withNetworkAliases('kafka')
    .withEnv('KAFKA_ADVERTISED_LISTENERS', 'PLAINTEXT://kafka:9093,CONNECTIONS_FROM_HOST://localhost:19092')
    .withEnv('KAFKA_LISTENER_SECURITY_PROTOCOL_MAP', 'PLAINTEXT:PLAINTEXT,CONNECTIONS_FROM_HOST:PLAINTEXT')
    .withEnv('KAFKA_ZOOKEEPER_CONNECT', 'zookeeper:2181')
    .withEnv('KAFKA_INTER_BROKER_LISTENER_NAME', 'PLAINTEXT')
    .withEnv('KAFKA_BROKER_ID', '1')
    .withEnv('KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR', '1')
    .withEnv('KAFKA_OFFSETS_TOPIC_NUM_PARTITIONS', '1')
    .withEnv('KAFKA_TRANSACTION_STATE_LOG_MIN_ISR', '1')
    .withEnv('KAFKA_LOG_FLUSH_INTERVAL_MESSAGES', '9223372036854775807')
    .withEnv('KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS', '0')
    .withEnv('KAFKA_CONFLUENT_SUPPORT_METRICS_ENABLE', 'false')
    .start();

  const { output, exitCode } = await kafkaContainer.exec([
    'kafka-configs',
    '--alter',
    '--bootstrap-server',
    'kafka:9093',
    '--entity-type',
    'brokers',
    '--entity-name',
    '1',
    '--add-config',
    `advertised.listeners=[PLAINTEXT://kafka:9093,CONNECTIONS_FROM_HOST://localhost:${kafkaContainer.getMappedPort(19092)}]`,
  ]);

I got it to work by following this post. I am not sure what is the difference exactly (some code is borrowed from testcontainers kafka), but the important part is setting both addresseses.
const network = await new Network().start();

  const zookeeperContainer = await new GenericContainer('confluentinc/cp-zookeeper:7.0.1')
    .withExposedPorts(2181)
    .withNetworkMode(network.getName())
    .withNetworkAliases('zookeeper')
    .withEnv('ZOOKEEPER_CLIENT_PORT', '2181')
    .start();

  const kafkaContainer = await new GenericContainer('confluentinc/cp-kafka:7.0.1')
    .withExposedPorts(19092)
    .withNetworkMode(network.getName())
    .withNetworkAliases('kafka')
    .withEnv('KAFKA_ADVERTISED_LISTENERS', 'PLAINTEXT://kafka:9093,CONNECTIONS_FROM_HOST://localhost:19092')
    .withEnv('KAFKA_LISTENER_SECURITY_PROTOCOL_MAP', 'PLAINTEXT:PLAINTEXT,CONNECTIONS_FROM_HOST:PLAINTEXT')
    .withEnv('KAFKA_ZOOKEEPER_CONNECT', 'zookeeper:2181')
    .withEnv('KAFKA_INTER_BROKER_LISTENER_NAME', 'PLAINTEXT')
    .withEnv('KAFKA_BROKER_ID', '1')
    .withEnv('KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR', '1')
    .withEnv('KAFKA_OFFSETS_TOPIC_NUM_PARTITIONS', '1')
    .withEnv('KAFKA_TRANSACTION_STATE_LOG_MIN_ISR', '1')
    .withEnv('KAFKA_LOG_FLUSH_INTERVAL_MESSAGES', '9223372036854775807')
    .withEnv('KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS', '0')
    .withEnv('KAFKA_CONFLUENT_SUPPORT_METRICS_ENABLE', 'false')
    .start();

  const { output, exitCode } = await kafkaContainer.exec([
    'kafka-configs',
    '--alter',
    '--bootstrap-server',
    'kafka:9093',
    '--entity-type',
    'brokers',
    '--entity-name',
    '1',
    '--add-config',
    `advertised.listeners=[PLAINTEXT://kafka:9093,CONNECTIONS_FROM_HOST://localhost:${kafkaContainer.getMappedPort(19092)}]`,
  ]);

Actually that's how the version I use work (7.24.0) - I have both addresses.

Weird, I moved to other task for now, but I'll try to investigate it again, i spent a lot of time on it yesterday and gave up at some point...

authors: cristianrgreco jayarjo katerina-semikina marcelo-turrin omerlh polaroi8d


text:
chore(doc): fix typos

Found via typos --hidden --format brief

in principle I think we would not merge such a PR. the typos are fixed. please feel free to contribute on issues relating to dind/stability/windows/macos.

authors: alexanderankin kianmeng

repo: testcontainers/testcontainers-python


text:
Getting Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.20.1:test (default-test) on project TestSetup: There are test failures.

TestNG Version

6.14.2

I am using the following components.
TestNG -6.14.2
jdk -9.0.1
maven-compiler-plugin - 3.7.0
maven-surefire-plugin - 2.20.1
Expected behavior
Actual behavior
Maven build getting failed due to Assertion failure in the one of the tests of the test suite. with following error.
Getting Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test (default-test) on project TestSetup: There are test failures.
INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 04:08 min
[INFO] Finished at: 2018-02-07T15:51:00+05:30
[INFO] Final Memory: 13M/44M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test (default-test) on project TestSetup: There are test failures.
[ERROR]
[ERROR] Please refer to D:\TestWorkspace\TestSetup\target\surefire-reports for the individual test results.
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

Is the issue reproductible on runner?

[YES ] Maven
[YES ] Eclipse

Test case sample

Any test case with Assertion failure.

Please help on this.

It looks like a surefire issue. Maybe you should first open an issue there: https://issues.apache.org/jira/projects/SUREFIRE. (fyi @tibor17)
BTW, could you share a minimal project that shows the issue?

Can you check it our with 2.21.0-SNAPSHOT. Do not download it from Nexus. Clone the branch SUREFIRE-1463, build it mvn install -DskipTests and run your project offline with mvn -o test.
I am pretty sure that this would work.

Hii Tibor,
mvn install -DskipTests it's  really work fine.
Thank u so much.

Closing this off because this issue is not related to TestNG.

@jayanth-ganganahalli
Hard for me. I do not see your project. Did you use the latest Surefire 2.22.0?

I am also having same error mentioned above. Can any one suggest what could be solution for this.

@juherr
@Navsony
@sonee123
@krmahadevan
I do not understand what I should do and why because here is assertion error which is normal because developer/you broke your code and therefore build error. See the first comment - issue. It's practically empty.

@Tibor17 - I am part of the TestNG dev group.. so I don't have an issue here.
@ashishu74 - If you are having a similar error, please provide the following

A simple standalone project that can be used to reproduce the issue (Its better if you could help provide a complete maven project) Please have the project not use any 3rd party libraries but just use core java alone.

After installing below plugin, isuue was resolved
		<plugin>
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-surefire-plugin</artifactId>
		    <version>2.19.1</version>
			<configuration>
    		<testFailureIgnore>true</testFailureIgnore>
			</configuration>
		</plugin>

I had the same issue and adding "-DskipTests" to script fixed the issue. But I'm not sure whether it is the correct fix. Using 2.22.1 surefire fixed the issue (as @krmahadevan mentioned) with test cases execution.

thank you it works!

I had the same issue and adding "-DskipTests" to script fixed the issue. But I'm not sure whether it is the correct fix. Using 2.22.1 surefire fixed the issue (as @krmahadevan mentioned) with test cases execution.
Thnx guys,

To my error:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.21.0:test (default-test) on project my-working-tests: There are test failures.

The error was solved by adding the <version>2.22.1</version> to the pom.xml fie.
Old code (raised the error):
<plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <configuration>
           .......
          </configuration>
</plugin>

Updated code (solved the error):
<plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
          <configuration>
           .......
          </configuration>
</plugin>

Can you check it our with 2.21.0-SNAPSHOT. Do not download it from Nexus. Clone the branch SUREFIRE-1463, build it mvn install -DskipTests and run your project offline with mvn -o test. I am pretty sure that this would work.

repo: testng-team/testng


text:
Update grasshopper files (imports and to_data, etc)

Fix imports and attrs/methods after renaming
Remove to_data on ClayBullet/FabricationElement

Dependant on #73 and #56.

Help testing would be nice.


text:
Component "<component_name>" not found. Available components are: []

I have this error in my browser:
Component "tags_list" not found. Available components are: []

and my component is like this:

from tetra import Component, public, Library
from todo.models import Tag

default = Library()

@default.register
class TagsList(Component):
    name = public("")
    color = public("indigo")

    def load(self):
        self.tags = Tag.objects.all()

    @public
    def add_todo(self, name, color):
        tag = Tag(
            name=name,
            color=color,
        )
        tag.save()
        self.name = ""

    template_name = "todo/components/multi-select-or-create.html"

@m5no0p is this still a problem? Or can I close this issue?

it was my bad...i didn't install sourcetypes package.

Glad that it worked. sourcetypes is not really an obligate requirement of tetra. It just helps you / your IDE to recognize that type of language. So I didn't make tetra depend on it.

repo: tetra-framework/tetra


text:
Press Kit

Create a Press Kit website page.
A press kit is a pre-packaged set of promotional materials that provide information about a company, organization or product. It is distributed to members of the media for promotional use. Press kits are often distributed to announce a product launch. We can also use our press kit webpage as our own repository for imagery that is approved for publishing on Tetra's website and social media.
Our press kit will include high quality, publishable photographs and renders of the Tetra Vent Splitter, our contact information, a few paragraphs explaining what Tetra Bio Distributed is, and a few paragraphs explaining what the Tetra Vent Splitter is. We can also include video clips of testing if they are high quality regarding image quality, composition, and camera handling (no shaking or sudden zooming-- use tripod and fixed lens for best results.) Everything in the press kit should be appealing to media outlets, and therefore professional quality.
Do not include a link to the Press Kit in the navigation bar. We will provide editors and media outlets with a link to the press kit when we reach out directly. We should include a link to the Press Kit for public access on the Tetra Vent Splitter web page.
A downloadable zip file should be available on the top of the Press Kit page. @capsulecorplab, is it possible for the link to automatically create a compressed file of everything that exists on the web page, so as we update the web page, the content that gets dowloaded is updated as well?
The download link should be placed underneath the page title and subtitle:
Title: Press Kit
Subtitle: Tetra Vent Splitter by Tetra Bio Distributed
I will upload all of my finished renders to the Press Kit. The Tetra Bio team is free to use the high quality images throughout the website or in any promotional material they would like. In this way, the page will be used as both a press kit and a repository for approved images. Images must be saved to an individual's desktop or downloaded for use. Please re-publish them in the highest quality possible. Please refrain from capturing the images through screen shots, downgrading the quality, cropping or skewing the dimensions, recoloring, or in any way altering the images. If there is a need for an image that does not exist, feel free to reach out to @thehannahfink with a request. Images can be resized to smaller dimensions, but please be conservative if resizing them to larger dimensions. This shouldn't be necessary, since all the images will be quite large already.
To Do:

[ ] Create Press Kit webpage
[ ] Write description for Tetra Bio Distributed
[ ] Write description for the Tetra Vent Splitter
[ ] Add contact information for editors to get in touch with us
[ ] Collect the highest quality photographs from Mark's website. Send them to @thehannahfink for editing.
[ ] Upload edited photographs to the Press Kit webpage
[ ] Upload finished renders to Press Kit webpage
[ ] Add "Download" link to easily download page contents (if this is not possible, we should just assemble this entire thing in a google doc folder)
[ ] Add link to Press Kit on the Tetra Vent Splitter webpage
[ ] Make list of relevant publications that might be interested in writing about our project
[ ] Begin reaching out to publications with a short (2 sentence) description of our project and a link to our Press Kit

It's there a standard format for a presskit? An example might be useful if one such exists

authors: capsulecorplab thehannahfink


text:
How to add multiple phone number with masks in the same input?

Hi, My requirement is:- Add multiple phone numbers with masks in the same input and these phone number is comma separate. Like this:- 999-999-9999, 988-676-8977
Is it possible to support multiple masks in the same input? I found no reference in the docs.
Please tell me how it is done.
Thanks!

To do this, you would have to write a mask function that handles your requirement.
See here for more details about creating a mask function
Take a look at the createNumberMask addon for an example of how to create a mask function.
The basic idea is that the function takes the raw value as input.  then returns an appropriate mask to conform the input to the correct output.
Hope that helps

I created a multi number demo for 10 and 11 digit numbers
https://codesandbox.io/s/material-demo-xcrkp

authors: ChrisWiles harleenarora lozjackson

repo: text-mask/text-mask

license: Unlicense


text:
Update vue directive for Vue 2.0

Updates to support Vue 2.0 directives.

No longer works with 1.x
Had to update webpack config to get the standalone build for demo
Attributes should not have expressions
'body' is no longer recommended as a mount point
this is no longer provided as context to the directive

So most of this seems to be fine. There's a small bug where it's allowing 1 more digit into the model than it should be. The text field itself cuts it off, but the model keeps it. I will look again tomorrow, or if you have any ideas @msafi, let me know. We should be very close to publishing this though 👍

Hey @billcolumbia. Thanks for sending this!

There's a small bug where it's allowing 1 more digit into the model than it should be. The text field itself cuts it off, but the model keeps it.

Angular users have complained about a similar behavior so we had to fix it. I think the same would happen here, so let's only merge this after that issue is fixed.

@msafi How did you fix this in Angular? I'm reading through commits seeing if I can find the fix.

@billcolumbia This is how we did it in Angular 1.

@msafi Ok. That makes sense. I'll give something like that a shot.

Also, your code isn't working with multiple inputs on the page

@pinguinjkeke I'm surprised we would need to work with vnode to get that to work. I'll look over it more and try that example. Thanks for posting 😄

@billcolumbia Check it once again, I've updated directive to work with input components:(https://vuejs.org/v2/guide/components.html#Form-Input-Components-using-Custom-Events)
The problem is that v-model is on parent.

Sorry I'm lagging on this. We still have yet to upgrade to 2.0 here, so I've only been working on this in my free time. I haven't got much more though, if anyone wants to pitch in to wrap it up or even take over.

@billcolumbia kk, I'll make a PR ASAP

Get this merged would be much appreciated.  ❤

This isn't mergeable yet. If anyone's interested in making Text Mask compatible with Vue 2.0, I'd be happy to help. I know how Text Mask works, but I don't know how Vue 2.0 works.

I'll go ahead and close this since we have new effort here https://github.com/text-mask/text-mask/pull/360

authors: KennedyTedesco billcolumbia msafi pinguinjkeke


text:
Invite command should not require contact to be known

If not known, look for the contact via search.

Now if a contact is not found locally, this guy will perform a search:
$ t invites create -t 12D3KooWRr8Q6B1nA1oxUkPHxYgo1TSGcrG9FHexRdtt6Tibe6Q5 -a P5BtBRHe1eRrcQJsB3DBTD7zq4MCpQUqGKKyyj3jRvZix4BX
Could not find contact locally, searching network...
{
    "id": "P5BtBRHe1eRrcQJsB3DBTD7zq4MCpQUqGKKyyj3jRvZix4BX",
    "date": "2019-03-12T15:03:33.205485Z",
    "value": {
        "@type": "/Contact",
        "address": "P5BtBRHe1eRrcQJsB3DBTD7zq4MCpQUqGKKyyj3jRvZix4BX",
        "name": "james",
        "peers": [
            {
                "id": "12D3KooWSTWinbmqWzDSt6hXJtbSPM2xua86zXJECVtZRxLJtQ2B",
                "address": "P5BtBRHe1eRrcQJsB3DBTD7zq4MCpQUqGKKyyj3jRvZix4BX",
                "name": "james",
                "created": "2019-03-12T14:59:38.166972Z",
                "updated": "2019-03-12T15:03:33.205485Z"
            }
        ]
    }
}
Add and invite P5BtBRHe1eRrcQJsB3DBTD7zq4MCpQUqGKKyyj3jRvZix4BX? [y/n]: y
added P5BtBRHe1eRrcQJsB3DBTD7zq4MCpQUqGKKyyj3jRvZix4BX
ok

repo: textileio/go-textile


text:
Add g flag to pattern string by default

Should we add g flag to pattern string?
For example, following pattern string is treaded /#.*{#[a-z.-]+}/ .
As a result, this pattern match only first item({#first}).
By constrast it does not match second item({#second})
pattern:
"/#.*{#[a-z.-]+}/"

text:
# First {#first}

# Second {#second}

Current behavior confuse user, I think.

If pass /pattern/, add g flag to the pattern automatically.
If pass /pattern/, do noting.

repo: textlint/textlint-filter-rule-whitelist


text:
Material 3

Use material 3
Screenshot
TODO

Before
After

Codecov Report
Base: 27.59% // Head: 27.99% // Increases project coverage by +0.40% :tada:

Coverage data is based on head (b554a56) compared to base (099820e).
Patch coverage: 0.00% of modified lines in pull request are covered.

Additional details and impacted files
@@             Coverage Diff              @@
##               main     #228      +/-   ##
============================================
+ Coverage     27.59%   27.99%   +0.40%
  Complexity       36       36
============================================
  Files            59       57       -2
  Lines           830      818      -12
  Branches        134      137       +3
============================================
  Hits            229      229
+ Misses          599      587      -12
  Partials          2        2

Impacted Files
Coverage Δ

...ava/com/tfandkusu/template/view/main/AppContent.kt
0.00% <ø> (ø)

...a/com/tfandkusu/template/view/main/MainActivity.kt
0.00% <ø> (ø)

.../com/tfandkusu/template/compose/home/HomeScreen.kt
0.00% <ø> (ø)

...mplate/compose/home/listitem/GitHubRepoListItem.kt
0.00% <ø> (ø)

...java/com/tfandkusu/template/compose/MyTopAppBar.kt
0.00% <0.00%> (ø)

...java/com/tfandkusu/template/ui/theme/MyAppTheme.kt
0.00% <0.00%> (ø)

...java/com/tfandkusu/template/view/error/ApiError.kt
0.00% <ø> (ø)

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

:umbrella: View full report at Codecov.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.

authors: codecov-commenter tfandkusu


text:
Earlier release

Hi,
README describes

This is a self-updating and self-publishing repository that looks for updates once a week.

However, I see that releases are once a month since https://github.com/tfranzel/drf-spectacular-sidecar/commit/376c697ddb1a839c75dd4ebf8d23a98d7d70b001.
Is it possible to revert it (for every week) or is it possible to generate a new release on request?
Context:
I noticed that the latest version (2024.3.1) of drf-spectacular-sidecar contains swagger-ui-dist in version 5.11.8. We already know that this version introduced the bug that is breaking our deployment. The bug was already fixed and will be released next week (https://github.com/swagger-api/swagger-ui/issues/9645#issuecomment-1973141060).
It means that we would have to wait a whole month for the new version of drf-spectacular-sidecar.

Hi,
yes I forgot to update the README. I chose once a month because weekly did rack up too much github storage for me.
I do not intend to change the cycle currently. All things considered, having to use a 4 weeks old SwaggerUI shouldn't be that much of a problem imho. drf-yasg currently ships with SwaggerUI 4.1.3 (2021-12-10) 😄
However, since this is hitting a lot of people we can do a one-off release.

Hi @tfranzel,
I hope that all user of drf-yasg are already migrating their setup 😄 2021-12-10 sounds bit old.
The fixed version of swagger-ui-dist in version 5.11.9 was already released (https://github.com/swagger-api/swagger-ui/issues/9645#issuecomment-1976043844) and works well (in our environment).
Can you please release a new version of drf-spectacular-sidecar with mentioned version, please?

I hope that all user of drf-yasg are already migrating their setup 😄 2021-12-10 sounds bit old.

doubtful 😄
new version is released. 🚀

authors: kiblik tfranzel

repo: tfranzel/drf-spectacular-sidecar


text:
Installation problems

$ raco pkg install org laundry
00: Resolving "org" via https://download.racket-lang.org/releases/8.3/catalog/
00: Resolving "org" via https://pkgs.racket-lang.org
Resolving "laundry" via https://download.racket-lang.org/releases/8.3/catalog/
Resolving "laundry" via https://pkgs.racket-lang.org
Downloading repository https://github.com/tgbugs/laundry.git?path=org#next commit c90700bd1c15d7b04e5ead44ac10005d8d2ada50
Using cached16440710011644071001544 for https://github.com/tgbugs/laundry.git?path=laundry#next
The following uninstalled packages are listed as dependencies of laundry:
   brag
Would you like to install these dependencies? [Y/n/a/c/?] a
Resolving "brag" via https://download.racket-lang.org/releases/8.3/catalog/
Resolving "brag" via https://pkgs.racket-lang.org
Downloading repository https://github.com/mbutterick/brag.git?path=brag commit 81f4fd25e78ce9cbb0abf39b89d85e07637b4cb5
The following uninstalled packages are listed as dependencies of brag
and they will be installed:
   brag-lib
   br-parser-tools-doc
00: Resolving "brag-lib" via https://download.racket-lang.org/releases/8.3/catalog/
00: Resolving "brag-lib" via https://pkgs.racket-lang.org
Resolving "br-parser-tools-doc" via https://download.racket-lang.org/releases/8.3/catalog/
Resolving "br-parser-tools-doc" via https://pkgs.racket-lang.org
Using cached16440710041644071004620 for https://github.com/mbutterick/brag.git?path=brag-lib
Downloading repository https://github.com/mbutterick/br-parser-tools.git?path=br-parser-tools-doc commit 9b2d7cc759b40fd556a398e181ca0fd070885904
The following uninstalled packages are listed as dependencies of brag-lib
and they will be installed:
   br-parser-tools-lib
Resolving "br-parser-tools-lib" via https://download.racket-lang.org/releases/8.3/catalog/
Resolving "br-parser-tools-lib" via https://pkgs.racket-lang.org
Using cached16440710061644071006886 for https://github.com/mbutterick/br-parser-tools.git?path=br-parser-tools-lib
The following uninstalled packages were listed as dependencies
and they were installed:
 dependencies of laundry:
   brag
 dependencies of brag:
   brag-lib
   br-parser-tools-doc
 dependencies of brag-lib:
   br-parser-tools-lib
raco setup: version: 8.3
raco setup: platform: x86_64-linux [cs]
raco setup: target machine: ta6le
raco setup: installation name: 8.3
raco setup: variants: cs
raco setup: main collects: /gnu/store/nivzasmjdp2pgh93hj7wvwrlmwkasljh-racket-minimal-8.3/share/racket/collects/
raco setup: collects paths:
raco setup:   /home/bost/.local/share/racket/8.3/collects
raco setup:   /gnu/store/nivzasmjdp2pgh93hj7wvwrlmwkasljh-racket-minimal-8.3/share/racket/collects/
raco setup: main pkgs: /gnu/store/bgsjf1g4bjicnliispayis9zjfqpdcfb-racket-8.3/share/racket/pkgs
raco setup: pkgs paths:
raco setup:   /gnu/store/bgsjf1g4bjicnliispayis9zjfqpdcfb-racket-8.3/share/racket/pkgs
raco setup:   /gnu/store/nivzasmjdp2pgh93hj7wvwrlmwkasljh-racket-minimal-8.3/share/racket/pkgs
raco setup:   /home/bost/.local/share/racket/8.3/pkgs
raco setup: links files:
raco setup:   /gnu/store/bgsjf1g4bjicnliispayis9zjfqpdcfb-racket-8.3/share/racket/links.rktd
raco setup:   /gnu/store/nivzasmjdp2pgh93hj7wvwrlmwkasljh-racket-minimal-8.3/share/racket/links.rktd
raco setup:   /home/bost/.local/share/racket/8.3/links.rktd
raco setup: compiled-file roots:
raco setup:   same
raco setup:   /gnu/store/nivzasmjdp2pgh93hj7wvwrlmwkasljh-racket-minimal-8.3/lib/racket/compiled
raco setup: main docs: /gnu/store/bgsjf1g4bjicnliispayis9zjfqpdcfb-racket-8.3/share/doc/racket
raco setup: --- updating info-domain tables ---                    [15:23:28]
raco setup: updating: /home/bost/.local/share/racket/8.3/share/info-cache.rktd
raco setup: --- pre-installing collections ---                     [15:23:28]
raco setup: --- installing foreign libraries ---                   [15:23:28]
raco setup: --- installing shared files ---                        [15:23:28]
raco setup: --- compiling collections ---                          [15:23:28]
raco setup: --- parallel build using 8 jobs ---                    [15:23:28]
raco setup: 7 making: <pkgs>/br-parser-tools-doc/br-parser-tools
raco setup: 6 making: <pkgs>/br-parser-tools-lib/br-parser-tools
raco setup: 5 making: <pkgs>/brag-lib/brag
raco setup: 4 making: <pkgs>/brag/brag
raco setup: 3 making: <pkgs>/laundry
raco setup: 2 making: <pkgs>/org
raco setup: 5 making: <pkgs>/brag-lib/brag/codegen
raco setup: 6 making: <pkgs>/br-parser-tools-lib/br-parser-tools/examples
raco setup: 6 making: <pkgs>/br-parser-tools-lib/br-parser-tools/private-lex
raco setup: 6 making: <pkgs>/br-parser-tools-lib/br-parser-tools/private-yacc
raco setup: 5 making: <pkgs>/brag-lib/brag/private
raco setup: 5 making: <pkgs>/brag-lib/brag/rules
load-handler: expected a `module` declaration in #<path:/home/bost/.local/share/racket/8.3/pkgs/laundry/timestamp.rkt>, but found something else
  compilation context...:
   /home/bost/.local/share/racket/8.3/pkgs/laundry/timestamp.rkt
  context...:
   /gnu/store/nivzasmjdp2pgh93hj7wvwrlmwkasljh-racket-minimal-8.3/share/racket/collects/syntax/private/modcode-noctc.rkt:36:2: reader
   /gnu/store/nivzasmjdp2pgh93hj7wvwrlmwkasljh-racket-minimal-8.3/share/racket/collects/syntax/private/modcode-noctc.rkt:259:5: compile-one
   /gnu/store/nivzasmjdp2pgh93hj7wvwrlmwkasljh-racket-minimal-8.3/share/racket/collects/compiler/private/cm-minimal.rkt:685:0: compile-zo*
   /gnu/store/nivzasmjdp2pgh93hj7wvwrlmwkasljh-racket-minimal-8.3/share/racket/collects/compiler/private/cm-minimal.rkt:451:15
   /gnu/store/nivzasmjdp2pgh93hj7wvwrlmwkasljh-racket-minimal-8.3/share/racket/collects/compiler/private/cm-minimal.rkt:440:12: build
   /gnu/store/nivzasmjdp2pgh93hj7wvwrlmwkasljh-racket-minimal-8.3/share/racket/collects/compiler/private/cm-minimal.rkt:411:0: maybe-compile-zo
   /gnu/store/nivzasmjdp2pgh93hj7wvwrlmwkasljh-racket-minimal-8.3/share/racket/collects/compiler/private/cm-minimal.rkt:209:0: compile-root
   /gnu/store/nivzasmjdp2pgh93hj7wvwrlmwkasljh-racket-minimal-8.3/share/racket/collects/compiler/private/cm-minimal.rkt:105:4
   /gnu/store/nivzasmjdp2pgh93hj7wvwrlmwkasljh-racket-minimal-8.3/share/racket/collects/setup/parallel-build.rkt:332:9
   /gnu/store/nivzasmjdp2pgh93hj7wvwrlmwkasljh-racket-minimal-8.3/share/racket/collects/setup/parallel-do.rkt:455:25
   /gnu/store/nivzasmjdp2pgh93hj7wvwrlmwkasljh-racket-minimal-8.3/share/racket/collects/setup/parallel-do.rkt:441:20: loop
raco setup: --- creating launchers ---                             [15:23:43]
raco setup: --- installing man pages ---                           [15:23:43]
raco setup: --- building documentation ---                         [15:23:43]
raco setup: 1 running: <pkgs>/br-parser-tools-doc/br-parser-tools/br-parser-tools.scrbl
raco setup: 0 running: <pkgs>/brag/brag/brag.scrbl
raco setup: 5 rendering: <pkgs>/br-parser-tools-doc/br-parser-tools/br-parser-tools.scrbl
raco setup: 4 rendering: <pkgs>/brag/brag/brag.scrbl
raco setup: 3 rendering: <pkgs>/racket-index/scribblings/main/user/local-redirect.scrbl
raco setup: 2 rendering: <pkgs>/racket-index/scribblings/main/user/release.scrbl
raco setup: 1 rendering: <pkgs>/racket-index/scribblings/main/user/search.scrbl
raco setup: 0 rendering: <pkgs>/racket-index/scribblings/main/user/start.scrbl
raco setup: --- installing collections ---                         [15:23:51]
raco setup: --- post-installing collections ---                    [15:23:51]
raco setup: --- summary of errors ---                              [15:23:51]
raco setup: error: during making for <pkgs>/laundry
raco setup:   load-handler: expected a `module` declaration in #<path:/home/bost/.local/share/racket/8.3/pkgs/laundry/timestamp.rkt>, but found something else
raco setup:     compiling: <pkgs>/laundry/timestamp.rkt
raco pkg install: packages installed, although setup reported errors

I think I've cleaned out all the related issues. From the trace it seems like you may be using an older version. I have also updated the entries on https://pkgs.racket-lang.org so after the next indexing job hopefully the issues will be resolved.

You may need to clear ~/.cache/racket/download-cache/ until the package index updates, but raco pkg install laundry org should succeed without error now. If you run into more issues feel free to reopen. Thanks for the report!

The installation works now. Thanks for fixing it.

authors: Bost tgbugs

repo: tgbugs/laundry


text:
⚠ DDoS-Relay US-E-ash-1 has degraded performance

In 5a39bb8, DDoS-Relay US-E-ash-1 (http://5.161.250.73:42069/;csv) experienced degraded performance:

HTTP code: 200
Response time: 7 ms

Resolved: DDoS-Relay US-E-ash-1 performance has improved in fd23b11 after 6 minutes.

repo: tgstation-operations/status


text:
UUID of MotionEventCharacteristic seens wrong.

I hope opening an issue is the right way to report this. When using this header I noticed that myos actual UUID of MotionEventCharacteristic is 0x0502, not0x0a02. This could be a firmware issue (using V1.5).

Thanks for the report! This has been updated/fixed.

authors: smngreenberg vroland

repo: thalmiclabs/myo-bluetooth


text:
Vertical shard binary expression using metric name when no matching label

[x] I added CHANGELOG entry for this change.
[ ] Change is not relevant to the end user.

Changes
Binary expression can be vertically sharded without __name__ label if no matching labels are specified.
Image we have two series
foo{job="thanos", cluster="us"}
bar{job="thanos", cluster="eu"}

A query foo - bar is basically a join of foo and bar series. The join will ignore the metric name and will calculate hash for the rest labels in this case.
Verification

I enabled merge on green since it was approved already and fixed conflict.
Can I get another approval?

I will go ahead and merge the pr as it was approved before and doc failed unrelated

repo: thanos-io/thanos


text:
MVP! Everything is working with redux

Full CRUD operations. Everything is working!!

Everything look good  so far I will go ahead and merge this branch.

repo: the-bw-expat-journal/front-end


text:
Remove unnecessary libraries, fix vulnerabilities

Update Laravel-Mix from 0.x to 4.x
Removed Axios (no reference/usage)
Removed jquery-sortable (no reference/usage. Also required an insecure version of jQuery, thus npm audit complains)
Removed doubled Vue from devDependencies
Removed slugify package - we use our own
Removed toastr static file and use dep instead
Remove perfect-scrollbar static file - not used at all
Remove match-height static file - not used at all
Remove bootstrap-toggle static file - use from npm
Remove jquery-cookie (not used, sidebar state is still stored)
Remove bootstrap-tooltip - not used, bootstrap has a native tooltip
Use TinyMCE from npm. Plugins/Themes/Skins get published automatically
Use Datatables from NPM
Delete jquery-disable-selection.js - not used at all (built-in to jQuery)
Replaced nestable with a newer version from npm - everything still working

Important:
Webpack now copies TinyMCEs plugins/themes/skins from the npm package, so updating should be a breeze.
It is possible that our compile assets script does not care about those files and doesn't commit them.
They can be included in the publishable dir with every PR tho.

You good here, or have more to add?

repo: the-control-group/voyager


text:
[V0.11] BREAD JSON editor & new responsive design for login page

#697

There is a weird thing going on with $options variable for text fields... I can't see the error.
I've removed the line that wasn't meant to be there at edit-add.blade.php, because TextHandler is supposing to be using that variable already... But I can't realize where it is failing... :disappointed:

I will take a look at this.

I think this error was my fault.
I have however fixed this and sent a commit.
Will merge this once test is green. (might be once it's done testing)

authors: Frondor marktopper


text:
Tweet gifs are not included in media

Let me know if I'm wrong, but I was expecting tweet's GIF being part of photos or videos Tweet's fields.
From what I see, the Tweet's html field only contains the "video" (gif) thumbnail url so I can't rely on it too.
Current behavior:
{
  ...tweet,
  photos: [],
  videos: []
}

Not implemented yet: #6

Thanks for your answer!

authors: karashiiro louisgrasset

repo: the-convocation/twitter-scraper


text:
Rebuild Blog to Use Progressive Gatsby Image Within Content

RichText cannot handle this, so we need to re-build with "slices" to allow the custom image component to do its magic.

This has been closed by moving to Sanity. The PortableText component lets us use GatsbyImages for our blog content!


text:
L1，L2究竟是指什么呢

我理解的L1是指，Bit，EVM，Solana，ton等等，
里面有核心的共识层，合约运行，等等
那么L2是指什么呢。。。。

看了一些文章，即传统OSI模型划分：

Layer 0又称数据传输层，对应OSI模型的底层，主要涉及区块链和传统网络之间的结合问题。
Layer 1扩容方案又称链上扩容，指在区块链基层协议上实现的扩容解决方案。
Layer 2扩容方案又称链下扩容，指不改变区块链底层协议和基础规则，通过状态通道、侧链等方案提高交易处理速度。

LO代表项目: 波卡和cosmos，之前称为区块链3.0,cosmos创建了一个可互操作的区块链生态系统，这要归功于其“ Tendermint IBC ”（区块链间通信协议）。通过ibc协议实现了多链互联。
L1代表项目: 比特币和以太坊，在自己的链上完成交易处理和区块确认，交易最终结算的基础层区块链。主要由于可扩展性问题延伸出来L2.
L2代表项目: L2的存在都是通过使用不同的技术，来解决提高交易速度的问题

Optimistic Rollup：基于乐观预言机的扩容方案，可以提高交易处理速度。
ZkRollup：基于零知识证明的扩容方案，可以提高交易处理速度和隐私保护。

个人理解，L0看做数据协议定义传输标准，L1看做操作系统（以太坊号称世界计算机），
以太坊上支持部署各种应用，但是由于都在同一条链，资源是竞争关系。想要实现类似web2的交互体验难度很大。
L2:将安全性交由以太坊保证，通过zk的方式做链下扩容，升级版的操作系统。能缓解L1的压力，一样可以支持大规模应用。
L3:至于L3的定义为应用层，操作系统上的各种合约，基于区块链的应用程序

关于提问的第一点，evm不能叫链，只是链上提供的虚拟机，智能合约的运行环境。
关于第二点，执行层，共识层，结算层，数据可用性(DA)  可以参考celestia文章 https://docs.celestia.org/learn/how-celestia-works/monolithic-vs-modular


text:
Google search console mobile, 'content wider than screen'

Hi,
I am getting a report from google that some of my site content is too wide for mobile screens.
I think I have narrowed this down to my code snippets where I use back ticks and language marker to give a <code> rendering. It appear the text does not wrap at all.
I have found that using the backtick causes the site to create a <pre> block around the code snippet.
And from this link on stack overflow here. The issue appear to be the <pre>
I am not sure how to solve this. Does anyone have any suggestions?
Example pages:
https://bas-man.github.io/cheatsheets/git/snippets/change-commit-date/
https://bas-man.github.io/cheatsheets/python/snippets/padding-numbers/

Hey, @Bas-Man Thanks for bringing this to our attention. We'll check it out.

authors: Bas-Man budparr

repo: theNewDynamic/gohugo-theme-ananke


text:
Remove the default retry timeout.

webdriver-swift should not dictate what is the correct default retry timeout for every testing application. The burden of choosing that magic number should be higher level. This is similar to how the implicit wait timeout in webdriver defaults to zero.

Implemented in https://github.com/thebrowsercompany/swift-webdriver/pull/153

repo: thebrowsercompany/swift-webdriver


text:
Themes preview?

Hi!
It will be great if a "preview" of each theme can also be included. At least a screenshot would help
Thanks

@reiven Done at https://github.com/thecodinghouse/mezzanine-themes/pull/6/files?short_path=04c6e90#diff-04c6e90faac2675aa89e2176d2eec7d8

Great!!! Thanks!

authors: andriisoldatenko reiven

repo: thecodinghouse/mezzanine-themes


text:
Get Context inside AuthenticatorService....

I'm using graphqlite in a standalone server process (currently reactphp, maybe switching to swoole) and therefore I cant use global variables, so I took my meta data from the request into the context variable passed to executeQuery.
Is there any way to get the context variable inside the AuthenticationServiceInterface/AuthorizationServiceInterface without using a dirty debug_backtrace() hack?

Ouch, excellent question.
Currently, there is no way, but you are completely right, we need to be able to do this.
Do you think we should pass the context variable, or maybe directly a PSR-7 Request object?
I don't have to much time to work on this right now, but I would gladly accept a pull request!

I tested a little bit - at current state the auth function is just called once (cached). Because of this, I need to create the schema for each request new.
So we need either remove the cache (maybe a flag) or cache by a pseudo unique identifier, like a session id which has to be passed in some way. For my case, disable Authentication Cache is enough, the Authorization Cache can be easily mapped by the user object returned by Authentication Service.
To answer your question.
Passing the context to every function after executeQuery should be done.
The programmer itself is free to add there the Request in his own format or as PSR 7 request.

Damn, I did not think about the caching, you are completely right!
Caching happens here:
https://github.com/thecodingmachine/graphqlite/blob/master/src/Middlewares/AuthorizationFieldMiddleware.php#L60-L62
The authentication is done only once and if it succeeds, the field is part of the schema.
What we could do is use the same strategy as the "@Security" annotation:
https://github.com/thecodingmachine/graphqlite/blob/master/src/Middlewares/SecurityFieldMiddleware.php#L86-L92
Here, the resolver is wrapped into another resolver that is called each time a field is resolved. That would solve your issue.
Otherwise, :+1: for passing the context. It makes sense.

Hello ! Any news on this, if you was able to achieve this, can you provide an example? Thanks !

@fezfez there have been some more recent efforts to get GraphQLite working with a long running server by eliminating immutability.  Please see: https://github.com/thecodingmachine/graphqlite/pull/584
Is this your objective, or are you specifically referring to accessing the Context?

Yep a was trying to use swoole in my apps, this is the last step to go in production.

There was some conversation around getting more lazy loading around authentication for this purpose I believe.  I don't really recall the full status on those efforts.  There are some PRs that need to be merged and some other efforts.  I believe @ oprypkhantc was working on these.

authors: Kapsonfire-DE fezfez moufmouf oojacoboo

repo: thecodingmachine/graphqlite


text:
Automatic query complexity

Closes #610
This is based on Hot Chocolate's query complexity. The way this works is it sets a complexityFn on each field, which webonyx/graphql-php uses to determine each field's complexity.
I felt like including Cost information in the schema is important so clients can actually estimate a cost for a specific query before even thinking of writing it. Unfortunately, with the current state of GraphQL, there's no other way to add "meta" information to fields other than the description. This is why I'm adding cost information to the field "comments", although I'd much prefer something like a @cost directive. Sadly, that's not possible.

So, one thing I am noticing is that, without the ability to base the multiplier off the actual number of objects retrieved in a collection, you're forced to set your default limits in such a way that's already calculating the upper bounds of the overall complexity limit.  This is mostly a concern if the client isn't always passing the limit (take) and it's defaulting (int $limit = 50).  It does make implementation a bit more thoughtful, to achieve optimal complexity calculations.  The benefit is that it encourages more thoughtful default limits and you get better test coverage as it's calculating against the assumed upper bounds.
Regardless, there isn't a way around this to still achieve static analysis - just an observation.

@oprypkhantc I don't see anything around mutations.  Will this work on mutations, input type fields?

@oojacoboo It's designed only to work on selections; input fields are not calculated towards query complexity. Is there a reason for it to work for input fields? In our case mutations are generally small, so too many input fields is definitely not a problem for us.

The issue with not having cost complexity associated with mutations is that you're left with needing to resolve mutation abuse another way - especially considering that write operations are expensive.  But having costs associated with mutations, you can mitigate this concern.  But adding cost complexity to fields of an input type, you have a more control over the accuracy of the cost calculations for a mutation.

authors: oojacoboo oprypkhantc


text:
Migrar de GA para goatcounter

https://www.goatcounter.com/

+1

authors: thefrontendwizard uselessdev


text:
Include a portion of process output in a failed process.expect()

When you use exec().expect() and it fails, usually the most helpful thing is to see stdout to see what the program itself thought about why it was failing. However, all you get are the exit code and the environment in the error message, and not any output. As a result it can be difficult to diagnose.
see https://github.com/thefrontside/effection/blob/v2/packages/process/src/exec/posix.ts#L26-L30
As a workaround, use process.join() instead and manually generate the error message from stdout

This is a wont fix since v3 core does not have a process api, and we may need to ship a separate one for Deno, Bun, Node

repo: thefrontside/effection


text:
Warning when installed in Ember v2.6.2

When I installed this addon, I got a warning saying,
DEPRECATION: Overriding init without calling this._super is deprecated. Please call `this._super.init && this._super.init.apply(this, arguments);` addon: `ember-cli-htmlbars`     at Function.Addon.lookup (/home/lifengbao/Documents/udesk_crm_web/node_modules/ember-cli/lib/models/addon.js:896:27)
Do you plan providing better support in newer version of Ember?

Thanks for taking the time to report this. Fortunately, this was resolved recently with #28, and is a duplicate of #27.
Look for a new release to NPM this week. In the meantime, you can use master.

authors: cowboyd shijistar

repo: thefrontside/emberx-file-input


text:
Main Page title

There are two things to communicate with version number in the title line (currently "Piston-Cylinder Design - Version 1.2"): the software release and the version of the design model (~format of the .DSN file). It may be necessary for future versions of the program to perform upgrades of older file formats. So, the text presented in the title line may want to be expanded to something like: "Piston-Cylinder Design - Software Release 0.2; Design Model Version 1.2".
Note:  The software release number and the design model version number may also appear as a Help : About menu item.
Note:  If pushed for vertical dimension page real estate, a responsive design might collapse out the page title.  See related point in issue #18.

Mike, I've assigned this to you. Bri P.S. I have a way to extract the Git tag value and put it in a JS file that can then be accessed and displayed if you want.

Integrating #21 "Create version.js generator script".

Is this a little less "in your face" about the version?

Nicely done !  I favor putting this version info in the Help : About menu item.  The biggest reason is to reduce clutter to achieve a cleaner user interface.

OK, then we'll leave this issue open until we have a Help.

See #32 "Implement Help : About menu item", closing this in lieu of the other issue.

repo: thegrumpys/pcyl-web


text:
Types of phones?

Hey,
Is there any alternative phone models I can se, if I don't have a Nexus 5 phone?
Please let me know.
Thanks.

I would recommend you to use kali nethunter instead of pwnphone. you can build nethunter image for any android device. read more here : https://www.kali.org/docs/nethunter/building-nethunter/

repo: thehackingsage/pwnphone


text:
Arm support

Any chance we could add arm support? Happy to help contribute

I don't yet have experience adding ARM support on Docker, but happy to review a PR!
Here are the articles I'd saved from previous cursory research into multi-arch/multi-platform builds:

https://docs.docker.com/build/building/multi-platform/
https://www.docker.com/blog/multi-arch-build-and-images-the-simple-way/

Hopefully those articles are a useful starting point!

authors: pbarker thehale

repo: thehale/docker-python-poetry


text:
changed tree to use promises

using async/await pattern everywhere to facilitate migrating to db tree

closing wrt our latest discussion

repo: thehubbleproject/hubble-contracts


text:
add deprecation warning for scvi and pin version

fixes #1443

Thanks for reviewing! Just pushed requested changes.

repo: theislab/scanpy


text:
How to correctly generate the ImageContainer object?

...
Thank you for the awesome tool. It's very useful.
I'm new to Squidpy and currently use it to process my 10 x Visium  H&E  datasets. But I have came across an issue about the ImageContainer object. Below is my procedures:
I have read the object using the images provide either
by the array in the AnnData object (which was generated by scanpy.read_visium()) by img = sq.im.ImageContaine r(adata.uns[spatial_key][library_id]["images"]['hires'])
or by the tiff file during experiment (very large file, about 1 Gb in size).
img = sq.im.ImageContainer('~/Desktop/wt.tif')
However, when I use the interactive function with Napari: viewer = img.interactive(adata). I have found that the gene expression image was not registered with the H&E image, instead they were showed separated in different part of the panel. As shown below:

I have read the documents provided but did not found how to address this issue. So what is the right way to build the ImageContainer object using my 10 x Visium dataset and tell me how to correctly link the expression data and the H&E image.
Thank you very much!
Sincerely,
Peifeng Ji

Hi @PeifengJi ,
thanks for the interest in Squidpy! I think there is a mismatch between the scale and the image passed to the image container. If you import anndate with sc.read_visium() and the tif image in the imagecontaienr, the scale of the spot coordinates is the same of the image pixel. Here, it seems that the image is either the hires or lowres . If that's the case, the image container has a scale argument, where you can pass the scale stored in
adata.uns["spatial"][<your-library-id>]["scalefactors"]["tissue_hires_scalef"] .
We made a tutorial to explain how these scale factors is related here: https://squidpy.readthedocs.io/en/stable/auto_tutorials/tutorial_read_spatial.html
let me know if that helps

Hi @giovp
Thank you for the response! I have tried the method you provided. But, unfortunately, the issue did not change. It resulted in exactly the same layout in the Napari. Below is my code:
Btw, what's your recommendation of the image resource for building the  ImageContainer object, the original tif file or the image file stored in the AnnData object (hires)?
Thank you!

hi @PeifengJi ,
sorry for late reply,

But, when I use the hires image stored in the AnnData object, unfortunately, the issue did not change. It resulted in exactly the same layout in the Napari. Below is my code:

yeah because the cooridnates in adata.obsm["spatial"] are still in original tiff cooridnates. If they were however scaled, then the scale argument in imagecontainer would account for that. The docs should be clear
https://squidpy.readthedocs.io/en/latest/classes/squidpy.im.ImageContainer.html#squidpy.im.ImageContainer

scale (float) – Scaling factor of the image with respect to the spatial coordinates saved in the accompanying anndata.AnnData.

Btw, what's your recommendation of the image resource for building the ImageContainer object, the original tif file or the image file stored in the AnnData object (hires)?

I would go with the tiff file for any type of analysis (especially segmentation, but also feature extraction). I would use hires only for visualization purposes.
Let me know if that helps!

Thank you for the response! It indeed helps.
Best regards,
PeifengJi

authors: PeifengJi giovp

repo: theislab/squidpy


text:
Hardcoded language in external javascript - localization

DataTables has some hard coded language reference in the external bootstrap Javascript.
Not sure how to tackle these, so just want to park it for now.

http://cdn.datatables.net/plug-ins/505bef35b56/integration/bootstrap/3/dataTables.bootstrap.js
"oLanguage": {
"sLengthMenu": "MENU records per page"
}

Oh that's easy. I'll push an update.

That's the old API anyway, we are using the new one.

Fixed in v0.2.0, reference #46

authors: FusionDesign fishmad

repo: thekordy/ticketit


text:
feat(notice): retire unused notices

API changes at here

Oops, my bad. We still need tag add & tag remove notices.

repo: thematters/matters-web


text:
Incorrect position if tailwind set important true

Hi, If I set tailwind config important: true the datepicker dropdown open to the default position top-0 left-0 since it is important, the dynamic position ignored

I think you need to get rid the top-0 left-0 default class from the datepicker dropdown since the initial position already handled by JS

Thanks

im having this problem too. Is this already fixed? or any alternative way to do the correct ways?

The code below is not the fix but my temporary solution. (datepicker.js)
From:
elementClass === 'dropdown' ? element.classList.add('dropdown', 'absolute', 'top-0', 'left-0', 'z-50', 'pt-2') : null;

To:
elementClass === 'dropdown' ? element.classList.add('dropdown', 'absolute', 'z-50', 'pt-2') : null;

In addition, when clicking or focusing, you can scroll to the datepicker with the following code.
function onFocus(datepicker) {
  if (datepicker.config.showOnFocus && !datepicker._showing) {
    datepicker.show();
     // ↓↓↓
    datepicker.picker.element.scrollIntoView({
      behavior: 'smooth'
    });
  }
}

function onClickInput(datepicker, ev) {
  const el = ev.target;
  if (!el._clicking) {
    return;
  }
  clearTimeout(el._clicking);
  delete el._clicking;

  if (el._active) {
    datepicker.enterEditMode();
  }
  delete el._active;

  if (datepicker.config.showOnClick) {
    datepicker.show();
    // ↓↓↓
    datepicker.picker.element.scrollIntoView({
      behavior: 'smooth'
    });
  }
}

authors: erwinyusrizal lanius412 timotiushadi

repo: themesberg/flowbite-datepicker


text:
Carousel : cant modify height

Describe the bug
It is not possible to change the height of the carousels. Changing the width works correctly.
To Reproduce
Put a carousel in any div and change the size with a class in that div to h-32 (for example).
Expected behavior
The carousel should take the size allocated in the class of the div.
Screenshots

in code :
className="relative w-full h-full"

The issue seems to be caused by the element that has h-56 class added to it.

I will add theming for Carousels next so we can fix this for ya.

@tulup-conner theme support will not fix the bug completely. Since, you can have multiple carousels, each with different sizes. We need to allow the carousel to "fit" to the parent div size, so it will allow the users to use it in multiple sizes.

Ok, this isn't how it is written in the regular Flowbite component, but I decided to change h-56 sm:h-64 xl:h-80 2xl:h-96 to min-heights, then moved those rules to theme.carousel.base.
Now, users can wrap their Carousel in a div with a specific height and it will respect that height. Otherwise, it will use the default heights specified by Flowbite.
See #208

authors: loicy rluders tulup-conner

repo: themesberg/flowbite-react