[Storage] az storage container-rm update: --default-encryption-scope and --deny-encryption-scope-override should not be specified during update

Related command

Description

az storage container-rm update: --default-encryption-scope and --deny-encryption-scope-override should not be specified during update, when specified, server would also ignore.
Testing Guide

History Notes

[Storage] az storage container-rm update: --default-encryption-scope and --deny-encryption-scope-override should not be specified during update

This checklist is used to make sure that common guidelines for a pull request are followed.

[ ] The PR title and description has followed the guideline in Submitting Pull Requests.

[ ] I adhere to the Command Guidelines.

[ ] I adhere to the Error Handling Guidelines.

Storage


Feat: File Conversion

Describe the feature
An inbuilt feature to convert any file to pdf, ppt, jpeg or any other format so that it can be downloaded easily.
Add ScreenShots

Record

[X] I agree to follow this project's Code of Conduct
[X] I'm a GSSOC'24 contributor
[X] I want to work on this issue

@subhadeeproy3902 Please assign me this issue, I want to work on it.

@subhadeeproy3902 Please assign me this issue, I want to work on it.

What's the solution ?
You want that the Editor Js document will be downloaded as a pdf ?

Yes, it will be downloaded not only as pdf but if the user wants it in the form of ppt, jpeg and etc.
Does it sound good?

Go ahead @Cralsic123. Also I would like u to contribute for issue #29 if its okay with u. Try enhancing more of this project. Thank you, will be looking for your PR

Yeah sure I would like to contribute to issue #29
Please assign me that too.

please comment there @Cralsic123

Hi @subhadeeproy3902 I created a new branch on my former repo added the files there and then pushed it and pressed compare and pull request and after that its showing this

@Cralsic123 are u doing this issue resolve ?


Intelephense document symbols isn't working

When triggering the document symbols command no properties or methods are displayed.

OSX 10.14 Intelephense v1.0.2
Package Control
Trigger LSP lsp_document_symbols
Log:

Traceback (most recent call last):
  File "/Users/carlos/Library/Application Support/Sublime Text 3/Packages/LSP/plugin/symbols.py", line 70, in on_symbol_selected
    range = selected_symbol['location']['range']
KeyError: 'location'

So this bug is somewhat in the same style as #517 I think, where this plugin is not up-to-date with the latest protocol changes. In this case, the result of a textDocument/documentSymbol request can be either a list of DocumentSymbol (which we don't support) or SymbolInformation (which we do support), or None. We should fix this accordingly.

@rwols Thank you for the information and for the great work you're doing with this plugin :)

Should be fixed by https://github.com/tomv564/LSP/pull/524.


Chicken-and-egg issue

For #2 , check for existence of git and rugged before using them.  Otherwise, print UNIX epoch time.

@WhatsARanjit - Can you rebase and see if this is still pertinent?  If so, we'll merge it in :)

@glarizza Some indentation issues.  Rebased and fixed.


Resy made breaking changes to the book api

Noticed this when booking today. Changed from x-www-form-urlencoded to json. Results in a 404 error from the logs. Seems like a simple fix. Will work on this when I have some time.

this must be A/B gated. I was able to make both paid and non-paid reservations and /book still used the form URL (this was the behavior i observed in the browser as well). Thanks for this project!


[PRES-348] Refactor coordinator worker to add support for Regisseur scenarios

Contributions: We are not currently taking public contributions - see our contributions policy. However, we are accepting issues and we do want your feedback.

Description
Adapts the simulated player worker coordinator to allow it to be run on a test worker node when used in a Regisseur scenario, to prevent breaking existing Regisseur scenarios that use simulated players.
Release note
REQUIRED: Add a release note to the ##Unreleased section of CHANGELOG.md. You can find guidance for writing useful release notes here. Documentation changes are exempt from this requirement.
Tests
How did you test these changes prior to submitting this pull request?
What automated tests are included in this PR?
STRONGLY SUGGESTED: How can this be verified by QA?
Documentation
How is this documented (for example: release note, upgrade guide, feature page, in-code documentation)?
Primary reviewers
If your change will take a long time to review, you can name at most two primary reviewers who are ultimately responsible for reviewing this request. @ mention them.

We refer to Regisseur as internal only in this code, it should be fine.


Fix detail message in data section

Coverage remained the same at 34.383% when pulling 7955a50c9e5fb86f2ef8bad74ac404e69cb0943a on mintao/fix-data-detail into 97555530c18fc0d10f36c9ca079d7c04eb9d1250 on master.


Feedback and small issues

Hey! I love this little book/exercise. I'm trying to follow it.
Chapter 1 is missing an:

Required methods:

fn is_err(&self)-> bool

I'll write more as I progress through it.
Very cool!

Glad you're enjoying it!
One of the unit tests had an unwrap that shouldn't have been there. The test thought it was checking a Result with is_err but it was really looking at a ChunkType and failing.
I just merged a PR that should fix this:
https://github.com/picklenerd/pngme_book/pull/2

Thanks again for the book.. I am stuck on something obscure, but I'll ask someone to help with it more closely. Thanks for addressing my feedback! That's beyond cool of you. Closing this

What are you stuck on?


Fix ENError13

Description
This PR resolves an issue with missing rate limit checks (ENError 13) for subsequent ENF API calls, after the exposure detection returned with an error code.
See more details at https://github.com/corona-warn-app/cwa-app-ios/issues/2758
The solution introduces an additional persistent timestamp (exposureDetectionDate), which is updated directly before the call to ENManager.detectExposures(), and is then used by the RiskProvider in the rate limit check.
We have tested the solution manually (with a modified MockExposureManager returning error codes) and with a unit test.
Link to JIRA
https://jira-ibs.wbs.net.sap/browse/EXPOSUREAPP-5836
Credits
All work in this PR was done by @ndegendogo!

@Ein-Tim @ndegendogo Thank you ! Forwarded to internal ticket and pinged a dev team member.

The feedback from Apple at the beginning of the project was that errors are not count into the quota.
An error 13 can also caused by uninstall and reinstall of the app and an update from <v1.9
Adding a rate limit can lead to a malfunction for all 15 Mio clients if there is mistake in the implementation.
I'm not sure if the rare occurrence of Error 13 justifies such significant change of the exposure check.
We could implement a soft rate limit which only logs the rate limit to see in case of an error 13 the rate limit would prevent this error.

@thomasaugsten

The feedback from Apple at the beginning of the project was that errors are not count into the quota.

Could you maybe check if this has changed in the meantime? Because IIRC it's possible to get the Error 13 by hard closing the app while an Exposure Check is running. The Exposure Check will fail and as soon as you open the app again it will run again. If you now close the app again while it's running the check will fail again, and so on. After max. 6 times of doing this you will get Error 13, although the Exposure Checks weren't successful.

I don't think they touch this in the last year. This means the exposure check didn't fail there is only no app to receive the result

@thomasaugsten we have (at least) two reported occurrences of error 13 with cwa 2.5.1, so it still happens, although not very often.
I am not aware of any changes in the implementation of the risk checking procedure since cwa 2.5.

The feedback from Apple at the beginning of the project was that errors are not count into the quota.

Is this still the same strategy with ENF v2?
Apple specifies 3 different numbers for their rate limit for different iOS and ENF versions.
Who knows if they have maybe also changed their strategy of counting?

An error 13 can also caused by uninstall and reinstall of the app and an update from <v1.9

Well - in my case it was obviously a different reason. I did neither reinstall cwa, nor did I any update of the app. Also I did not hard-close it. I saw the message at 08:33 when I opened the app in the morning; the previous check at 06:35 was successful, and should have prevented another call of the API. But the check at 02:35 before was missing - so maybe some kind of error code from ENF at that time? We can only guess, I didn't have logging active at that moment...

Adding a rate limit can lead to a malfunction for all 15 Mio clients if there is mistake in the implementation.

I fully agree that cwa must be as robust as possible with regard to the exposure detection and risk check procedure.
This is the core functionality of the app, and there is no other app available in Germany that could replace it.

I'm not sure if the rare occurrence of Error 13 justifies such significant change of the exposure check.

So your suggestion is to leave it alone and untouched, in the assumption that even if the error 13 occurs, it is no permanent failure, and will hopefully recover itself, right?
Note: In my case it indeed recovered itself after I left it alone for a few hours; and I have the impression that the background procedure for the check is meanwhile indeed really very robust.
No idea if it would have recovered itself if I had kept the app open and busy and had triggered the error 13 repeatedly - but next time I will test that, for sure :-)

We could implement a soft rate limit which only logs the rate limit to see in case of an error 13 the rate limit would prevent this error.

Good idea.
Do you plan to implement such a "soft rate limit"?
Or should I modify this PR into that direction?

There are no changes on ENF from Apple side.
It is not reproducible and is self healing after 24h.
Yes please modify your PR

@ArturFriesen I am still busy with this, but I have a question now.
As a first step I have extended your Logging system for "mockability", so that I am able to write unit tests for my implementation of the "soft rate limit" (no blocking of exposure detection, only log entries).
Question: Shall I create a separate PR for that, or do you prefer that I just include it in this PR together with the "soft rate limit"?

@ArturFriesen I am still busy with this, but I have a question now.
As a first step I have extended your Logging system for "mockability", so that I am able to write unit tests for my implementation of the "soft rate limit" (no blocking of exposure detection, only log entries).
Question: Shall I create a separate PR for that, or do you prefer that I just include it in this PR together with the "soft rate limit"?

@ndegendogo I think it's a good idea to split it.

As this PR won't get merged, I'll close it now.


Secondary constructors not passed through

val meta = "<IP_ADDRESS>2"
val paradise = "<IP_ADDRESS>"

I have a macro that generates some configuration boilerplate. It has been working fine until I added a feature: include the statements in the body of the class in the output. For example:
@MyCodeGenerator class MyExampleClass
  extends ConfigDef() with SomeTrait  {

  override def referenceResource : String = "MyExampleClass.txt"

  def this(
    maxSize : Int
  ) =  {
    this(Map("maxSize" -> maxSize))
  }
}

The @MyCodeGenerator macro matches that input with this:
      case q"""class $name extends ..$bases { ..$statements }""" ⇒

and generates everything correctly except the secondary constructor. The macro just puts
 ..$statements at the bottom of the code it generates, just before the }. Note that the referenceResource is generated but not the def this(maxSize:Int)=... so use of ..$statements is doing something, just not everything I expected.
I am thinking this is either a bug, not supported (yet), or I'm doing something wrong. I'm only a week into scalameta usage and I love it, but I'm scratching my head over this one.

So I think I might have a clue on this. The Template trait has a stats method with type Option[Seq[Stat]]. Stat is derives from a Tree and has many subtraits, but Ctor#Secondary is not among them. So, this reflects my experience: Template does not know about constructors and they are not part of the statements. That sort of makes sense because secondary constructors are a bit "special" :)  So, now my question is .. how do you match those ? There is only one template option:
template"{ ..$stats } with ..$ctorcalls { $param => ..$stats }"

But that second ..$stats doesn't include secondary constructors.
Is there a way to match those secondary constructors or is this an unimplemented feature?

This may be a bug in quasiquotes, the template stats include the secondary constructor
> "class A() { def this(a: Int) = this() }".parse[Source].get.structure
res19: String = """
Source(Seq(Defn.Class(Nil, Type.Name("A"), Nil, Ctor.Primary(Nil, Ctor.Ref.Name("this"), Seq(Seq())), Template(Nil, Nil, Term.Param(Nil, Name.Anonymous(), None, None), Some(Seq(Ctor.Secondary(Nil, Ctor.Ref.Name("this"), Seq(Seq(Term.Param(Nil, Term.Name("a"), Some(Type.Name("Int")), None))), Term.Apply(Ctor.Ref.Name("this"), Nil))))))))
"""
> "class A() { def this(a: Int) = this() }".parse[Source].get.stats.head.asInstanceOf[Defn.Class].templ.stats.get.head.structure
res18: String = """
Ctor.Secondary(Nil, Ctor.Ref.Name("this"), Seq(Seq(Term.Param(Nil, Term.Name("a"), Some(Type.Name("Int")), None))), Term.Apply(Ctor.Ref.Name("this"), Nil))
"""

Yes, it looks so. I will try to figure out how to do it without quasiquotes. If I can figure that out, I stand a chance of providing a PR to fix it.

I may be starting to figure out how to do the extractions without quasiquotes. Using the types directory I can match against my definition. I do this:
    defn match {
      case Defn.Class(
        mods : Seq[Mod],
        tName : Type.Name,
        tParam : Seq[Type.Param],
        pCtor : Ctor.Primary,
        template : Template
      ) ⇒
        template.stats match {
          case Some(stats: Seq[Stat]) if stats.nonEmpty ⇒
            println(s"Statements for $tName are: $stats")
          case _ ⇒
            println("No statements")
        }
    }

and provide this input:
@Generate class WithConsNMethod(b : Boolean) extends Foo with SomeTrait {
  def this(otherB  : Boolean) = { this(!otherB) }
  def thatBoolean : Boolean = false
}

The macro printed:
Warning:scala: Statements for WithConsNMethod are: List(def thatBoolean: Boolean = false)

Note the lack of a Ctor.Secondary in that List.
So, even when using the Template class directly, it doesn't seem to place the constructor in teh "stats" list. And, it cannot, actually because a Ctor is not a Stat but Template's stat field has type Seq[Stat].
If I were to fix this, would it be reasonable to add a "ctors : Seq[Ctor.Secondary]" member to Template and then figure out how to populate ctors?

Okay, I'm barking up the wrong tree here. Ctor.Secondary is a Stat. And, the examples @olafurpg  gave shows that it comes out in the Template instance. I will try to understand why my list of statements doesn't produce what @olafurpg got.
@olafurpg - could you tell me what version you're running?

I have been able to replicate, in the Scala Console, the results that @olafurpg pasted above, but this time using my own version of scala-meta/paradise and in the same classpath as my application. My results:
/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/bin/java -Dvisualvm.id=289970289299577 -Djline.terminal=NONE -Didea.launcher.port=7538 "-Didea.launcher.bin.path=/Applications/IntelliJ IDEA 2016.2.4.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath "/Users/reidspencer/.ivy2/cache/org.scala-lang/scala-compiler/jars/scala-compiler-2.11.8.jar:/Users/reidspencer/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.11.8.jar:/Users/reidspencer/.ivy2/cache/org.scala-lang/scala-reflect/jars/scala-reflect-2.11.8.jar:/Users/reidspencer/Library/Application Support/IntelliJIdea2016.2/Scala/lib/scala-plugin-runners.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/charsets.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/deploy.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/cldrdata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/dnsns.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/jaccess.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/jfxrt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/localedata.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/nashorn.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/sunec.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/ext/zipfs.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/javaws.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/jce.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/jfr.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/jfxswt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/jsse.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/management-agent.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/plugin.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/resources.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre/lib/rt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/lib/ant-javafx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/lib/dt.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/lib/javafx-mx.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/lib/jconsole.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/lib/packager.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/lib/sa-jdi.jar:/Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/lib/tools.jar:/Users/reidspencer/Code/j9/opsmart/core/target/scala-2.11/classes:/Users/reidspencer/Code/j9/opsmart/edge/target/scala-2.11/classes:/Users/reidspencer/Code/j9/opsmart/ante/target/scala-2.11/classes:/Users/reidspencer/Code/j9/opsmart/macros/target/scala-2.11/classes:/Users/reidspencer/Code/j9/opsmart/edge/libs/ojdbc7.jar:/Users/reidspencer/Code/j9/opsmart/edge/libs/orai18n.jar:/Users/reidspencer/Code/j9/opsmart/edge/libs/ucmdb-api.jar:/Users/reidspencer/.ivy2/cache/org.yaml/snakeyaml/bundles/snakeyaml-1.12.jar:/Users/reidspencer/.ivy2/cache/org.uncommons.maths/uncommons-maths/jars/uncommons-maths-1.2.2a.jar:/Users/reidspencer/.ivy2/cache/org.typelevel/macro-compat_2.11/jars/macro-compat_2.11-1.1.1.jar:/Users/reidspencer/.ivy2/cache/org.spire-math/kind-projector_2.11/jars/kind-projector_2.11-0.7.1.jar:/Users/reidspencer/.ivy2/cache/org.specs2/specs2-matcher_2.11/jars/specs2-matcher_2.11-3.6.6.jar:/Users/reidspencer/.ivy2/cache/org.specs2/specs2-junit_2.11/jars/specs2-junit_2.11-3.6.6.jar:/Users/reidspencer/.ivy2/cache/org.specs2/specs2-core_2.11/jars/specs2-core_2.11-3.6.6.jar:/Users/reidspencer/.ivy2/cache/org.specs2/specs2-common_2.11/jars/specs2-common_2.11-3.6.6.jar:/Users/reidspencer/.ivy2/cache/org.slf4j/slf4j-api/jars/slf4j-api-1.7.21.jar:/Users/reidspencer/.ivy2/cache/org.scoverage/scalac-scoverage-runtime_2.11/jars/scalac-scoverage-runtime_2.11-1.1.1.jar:/Users/reidspencer/.ivy2/cache/org.scoverage/scalac-scoverage-plugin_2.11/jars/scalac-scoverage-plugin_2.11-1.1.1.jar:/Users/reidspencer/.ivy2/cache/org.scodec/scodec-bits_2.11/bundles/scodec-bits_2.11-1.0.9.jar:/Users/reidspencer/.ivy2/cache/org.scalaz.stream/scalaz-stream_2.11/bundles/scalaz-stream_2.11-0.8.jar:/Users/reidspencer/.ivy2/cache/org.scalaz/scalaz-effect_2.11/bundles/scalaz-effect_2.11-7.1.4.jar:/Users/reidspencer/.ivy2/cache/org.scalaz/scalaz-core_2.11/bundles/scalaz-core_2.11-7.1.4.jar:/Users/reidspencer/.ivy2/cache/org.scalaz/scalaz-concurrent_2.11/bundles/scalaz-concurrent_2.11-7.1.4.jar:/Users/reidspencer/.ivy2/cache/org.scala-stm/scala-stm_2.11/jars/scala-stm_2.11-0.7.jar:/Users/reidspencer/.ivy2/cache/org.scala-lang.modules/scala-xml_2.11/bundles/scala-xml_2.11-1.0.5.jar:/Users/reidspencer/.ivy2/cache/org.scala-lang.modules/scala-parser-combinators_2.11/bundles/scala-parser-combinators_2.11-1.0.4.jar:/Users/reidspencer/.ivy2/cache/org.scala-lang.modules/scala-java8-compat_2.11/bundles/scala-java8-compat_2.11-0.7.0.jar:/Users/reidspencer/.ivy2/cache/org.scala-lang/scalap/jars/scalap-2.11.0.jar:/Users/reidspencer/.ivy2/cache/org.reflections/reflections/jars/reflections-0.9.10.jar:/Users/reidspencer/.ivy2/cache/org.reactivestreams/reactive-streams/jars/reactive-streams-1.0.0.jar:/Users/reidspencer/.ivy2/cache/org.quartz-scheduler/quartz/jars/quartz-2.2.3.jar:/Users/reidspencer/.ivy2/cache/org.json4s/json4s-native_2.11/jars/json4s-native_2.11-3.2.11.jar:/Users/reidspencer/.ivy2/cache/org.json4s/json4s-jackson_2.11/jars/json4s-jackson_2.11-3.2.11.jar:/Users/reidspencer/.ivy2/cache/org.json4s/json4s-core_2.11/jars/json4s-core_2.11-3.2.11.jar:/Users/reidspencer/.ivy2/cache/org.json4s/json4s-ast_2.11/jars/json4s-ast_2.11-3.2.11.jar:/Users/reidspencer/.ivy2/cache/org.joda/joda-convert/jars/joda-convert-1.8.1.jar:/Users/reidspencer/.ivy2/cache/org.javassist/javassist/bundles/javassist-3.18.2-GA.jar:/Users/reidspencer/.ivy2/cache/org.hdrhistogram/HdrHistogram/bundles/HdrHistogram-2.1.8.jar:/Users/reidspencer/.ivy2/cache/org.hamcrest/hamcrest-core/jars/hamcrest-core-1.3.jar:/Users/reidspencer/.ivy2/cache/org.glassfish/javax.json/bundles/javax.json-1.0.4.jar:/Users/reidspencer/.ivy2/cache/org.codehaus.woodstox/stax2-api/bundles/stax2-api-3.1.4.jar:/Users/reidspencer/.ivy2/cache/org.aspectj/aspectjweaver/jars/aspectjweaver-1.8.9.jar:/Users/reidspencer/.ivy2/cache/org.apache.commons/commons-lang3/jars/commons-lang3-3.2.1.jar:/Users/reidspencer/.ivy2/cache/org.agrona/Agrona/jars/Agrona-0.5.4.jar:/Users/reidspencer/.ivy2/cache/net.java.dev.jna/jna-platform/jars/jna-platform-4.2.2.jar:/Users/reidspencer/.ivy2/cache/net.java.dev.jna/jna/jars/jna-4.2.2.jar:/Users/reidspencer/.ivy2/cache/junit/junit/jars/junit-4.12.jar:/Users/reidspencer/.ivy2/cache/joda-time/joda-time/jars/joda-time-2.9.4.jar:/Users/reidspencer/.ivy2/cache/javax.ws.rs/jsr311-api/jars/jsr311-api-1.1.1.jar:/Users/reidspencer/.ivy2/cache/javax.validation/validation-api/jars/validation-api-1.1.0.Final.jar:/Users/reidspencer/.ivy2/cache/io.swagger/swagger-scala-module_2.11/jars/swagger-scala-module_2.11-1.0.2.jar:/Users/reidspencer/.ivy2/cache/io.swagger/swagger-models/bundles/swagger-models-1.5.9.jar:/Users/reidspencer/.ivy2/cache/io.swagger/swagger-jaxrs/bundles/swagger-jaxrs-1.5.9.jar:/Users/reidspencer/.ivy2/cache/io.swagger/swagger-core/jars/swagger-core-1.5.9.jar:/Users/reidspencer/.ivy2/cache/io.swagger/swagger-annotations/bundles/swagger-annotations-1.5.9.jar:/Users/reidspencer/.ivy2/cache/io.spray/spray-json_2.11/bundles/spray-json_2.11-1.3.2.jar:/Users/reidspencer/.ivy2/cache/io.netty/netty/bundles/netty-3.10.6.Final.jar:/Users/reidspencer/.ivy2/cache/io.kamon/sigar-loader/jars/sigar-loader-1.6.6-rev002.jar:/Users/reidspencer/.ivy2/cache/io.kamon/kamon-statsd_2.11/jars/kamon-statsd_2.11-0.6.2.jar:/Users/reidspencer/.ivy2/cache/io.kamon/kamon-jmx_2.11/jars/kamon-jmx_2.11-0.6.2.jar:/Users/reidspencer/.ivy2/cache/io.kamon/kamon-core_2.11/jars/kamon-core_2.11-0.6.2.jar:/Users/reidspencer/.ivy2/cache/io.aeron/aeron-driver/jars/aeron-driver-1.0.1.jar:/Users/reidspencer/.ivy2/cache/io.aeron/aeron-client/jars/aeron-client-1.0.1.jar:/Users/reidspencer/.ivy2/cache/de.heikoseeberger/akka-http-play-json_2.11/jars/akka-http-play-json_2.11-1.10.0.jar:/Users/reidspencer/.ivy2/cache/com.typesafe.scala-logging/scala-logging_2.11/jars/scala-logging_2.11-3.1.0.jar:/Users/reidspencer/.ivy2/cache/com.typesafe.play/play-json_2.11/jars/play-json_2.11-2.5.6.jar:/Users/reidspencer/.ivy2/cache/com.typesafe.play/play-iteratees_2.11/jars/play-iteratees_2.11-2.5.6.jar:/Users/reidspencer/.ivy2/cache/com.typesafe.play/play-functional_2.11/jars/play-functional_2.11-2.5.6.jar:/Users/reidspencer/.ivy2/cache/com.typesafe.play/play-datacommons_2.11/jars/play-datacommons_2.11-2.5.6.jar:/Users/reidspencer/.ivy2/cache/com.typesafe.akka/akka-stream_2.11/jars/akka-stream_2.11-2.4.11.jar:/Users/reidspencer/.ivy2/cache/com.typesafe.akka/akka-slf4j_2.11/jars/akka-slf4j_2.11-2.4.11.jar:/Users/reidspencer/.ivy2/cache/com.typesafe.akka/akka-remote_2.11/jars/akka-remote_2.11-2.4.11.jar:/Users/reidspencer/.ivy2/cache/com.typesafe.akka/akka-protobuf_2.11/jars/akka-protobuf_2.11-2.4.11.jar:/Users/reidspencer/.ivy2/cache/com.typesafe.akka/akka-persistence_2.11/jars/akka-persistence_2.11-2.4.11.jar:/Users/reidspencer/.ivy2/cache/com.typesafe.akka/akka-parsing_2.11/jars/akka-parsing_2.11-2.4.11.jar:/Users/reidspencer/.ivy2/cache/com.typesafe.akka/akka-http-spray-json-experimental_2.11/jars/akka-http-spray-json-experimental_2.11-2.4.6.jar:/Users/reidspencer/.ivy2/cache/com.typesafe.akka/akka-http-experimental_2.11/jars/akka-http-experimental_2.11-2.4.11.jar:/Users/reidspencer/.ivy2/cache/com.typesafe.akka/akka-http-core_2.11/jars/akka-http-core_2.11-2.4.11.jar:/Users/reidspencer/.ivy2/cache/com.typesafe.akka/akka-distributed-data-experimental_2.11/jars/akka-distributed-data-experimental_2.11-2.4.11.jar:/Users/reidspencer/.ivy2/cache/com.typesafe.akka/akka-cluster_2.11/jars/akka-cluster_2.11-2.4.11.jar:/Users/reidspencer/.ivy2/cache/com.typesafe.akka/akka-cluster-tools_2.11/jars/akka-cluster-tools_2.11-2.4.11.jar:/Users/reidspencer/.ivy2/cache/com.typesafe.akka/akka-cluster-sharding_2.11/jars/akka-cluster-sharding_2.11-2.4.11.jar:/Users/reidspencer/.ivy2/cache/com.typesafe.akka/akka-cluster-metrics_2.11/jars/akka-cluster-metrics_2.11-2.4.11.jar:/Users/reidspencer/.ivy2/cache/com.typesafe.akka/akka-agent_2.11/jars/akka-agent_2.11-2.4.11.jar:/Users/reidspencer/.ivy2/cache/com.typesafe.akka/akka-actor_2.11/jars/akka-actor_2.11-2.4.11.jar:/Users/reidspencer/.ivy2/cache/com.typesafe/ssl-config-core_2.11/bundles/ssl-config-core_2.11-0.2.1.jar:/Users/reidspencer/.ivy2/cache/com.typesafe/ssl-config-akka_2.11/bundles/ssl-config-akka_2.11-0.2.1.jar:/Users/reidspencer/.ivy2/cache/com.typesafe/config/bundles/config-1.3.0.jar:/Users/reidspencer/.ivy2/cache/com.trueaccord.scalapb/scalapb-runtime_2.11/jars/scalapb-runtime_2.11-0.5.40.jar:/Users/reidspencer/.ivy2/cache/com.trueaccord.lenses/lenses_2.11/jars/lenses_2.11-0.4.6.jar:/Users/reidspencer/.ivy2/cache/com.thoughtworks.paranamer/paranamer/jars/paranamer-2.6.jar:/Users/reidspencer/.ivy2/cache/com.reactific/helpers_2.11/jars/helpers_2.11-0.3.9.jar:/Users/reidspencer/.ivy2/cache/com.lihaoyi/sourcecode_2.11/jars/sourcecode_2.11-0.1.1.jar:/Users/reidspencer/.ivy2/cache/com.lihaoyi/fastparse_2.11/jars/fastparse_2.11-0.3.7.jar:/Users/reidspencer/.ivy2/cache/com.lihaoyi/fastparse-utils_2.11/jars/fastparse-utils_2.11-0.3.7.jar:/Users/reidspencer/.ivy2/cache/com.google.protobuf/protobuf-java/bundles/protobuf-java-3.0.0.jar:/Users/reidspencer/.ivy2/cache/com.google.guava/guava/bundles/guava-18.0.jar:/Users/reidspencer/.ivy2/cache/com.google.code.findbugs/jsr305/jars/jsr305-2.0.1.jar:/Users/reidspencer/.ivy2/cache/com.google.code.findbugs/annotations/jars/annotations-2.0.1.jar:/Users/reidspencer/.ivy2/cache/com.github.swagger-akka-http/swagger-akka-http_2.11/jars/swagger-akka-http_2.11-0.7.0.jar:/Users/reidspencer/.ivy2/cache/com.github.dblock/oshi-core/jars/oshi-core-2.6.1.jar:/Users/reidspencer/.ivy2/cache/com.fasterxml.jackson.module/jackson-module-scala_2.11/bundles/jackson-module-scala_2.11-2.4.2.jar:/Users/reidspencer/.ivy2/cache/com.fasterxml.jackson.module/jackson-module-jaxb-annotations/bundles/jackson-module-jaxb-annotations-2.4.5.jar:/Users/reidspencer/.ivy2/cache/com.fasterxml.jackson.jaxrs/jackson-jaxrs-json-provider/bundles/jackson-jaxrs-json-provider-2.4.5.jar:/Users/reidspencer/.ivy2/cache/com.fasterxml.jackson.jaxrs/jackson-jaxrs-base/bundles/jackson-jaxrs-base-2.4.5.jar:/Users/reidspencer/.ivy2/cache/com.fasterxml.jackson.datatype/jackson-datatype-jsr310/bundles/jackson-datatype-jsr310-2.7.6.jar:/Users/reidspencer/.ivy2/cache/com.fasterxml.jackson.datatype/jackson-datatype-joda/bundles/jackson-datatype-joda-2.4.5.jar:/Users/reidspencer/.ivy2/cache/com.fasterxml.jackson.datatype/jackson-datatype-jdk8/bundles/jackson-datatype-jdk8-2.7.6.jar:/Users/reidspencer/.ivy2/cache/com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/bundles/jackson-dataformat-yaml-2.4.5.jar:/Users/reidspencer/.ivy2/cache/com.fasterxml.jackson.dataformat/jackson-dataformat-xml/bundles/jackson-dataformat-xml-2.4.5.jar:/Users/reidspencer/.ivy2/cache/com.fasterxml.jackson.core/jackson-databind/bundles/jackson-databind-2.7.6.jar:/Users/reidspencer/.ivy2/cache/com.fasterxml.jackson.core/jackson-core/bundles/jackson-core-2.7.6.jar:/Users/reidspencer/.ivy2/cache/com.fasterxml.jackson.core/jackson-annotations/bundles/jackson-annotations-2.7.6.jar:/Users/reidspencer/.ivy2/cache/com.enragedginger/akka-quartz-scheduler_2.11/jars/akka-quartz-scheduler_2.11-1.5.0-akka-2.4.x.jar:/Users/reidspencer/.ivy2/cache/ch.qos.logback/logback-core/jars/logback-core-1.1.7.jar:/Users/reidspencer/.ivy2/cache/ch.qos.logback/logback-classic/jars/logback-classic-1.1.7.jar:/Users/reidspencer/.ivy2/cache/ch.megard/akka-http-cors_2.11/jars/akka-http-cors_2.11-0.1.2.jar:/Users/reidspencer/.ivy2/cache/c3p0/c3p0/jars/c3p0-<IP_ADDRESS>.jar:/Users/reidspencer/.ivy2/cache/com.iheart/ficus_2.11/jars/ficus_2.11-1.2.7.jar:/Users/reidspencer/.ivy2/cache/com.lihaoyi/scalaparse_2.11/jars/scalaparse_2.11-0.3.7.jar:/Users/reidspencer/.ivy2/cache/org.scalameta/common_2.11/jars/common_2.11-<IP_ADDRESS>2.jar:/Users/reidspencer/.ivy2/cache/org.scalameta/dialects_2.11/jars/dialects_2.11-<IP_ADDRESS>2.jar:/Users/reidspencer/.ivy2/cache/org.scalameta/inline_2.11/jars/inline_2.11-<IP_ADDRESS>2.jar:/Users/reidspencer/.ivy2/cache/org.scalameta/inputs_2.11/jars/inputs_2.11-<IP_ADDRESS>2.jar:/Users/reidspencer/.ivy2/cache/org.scalameta/parsers_2.11/jars/parsers_2.11-<IP_ADDRESS>2.jar:/Users/reidspencer/.ivy2/cache/org.scalameta/quasiquotes_2.11/jars/quasiquotes_2.11-<IP_ADDRESS>2.jar:/Users/reidspencer/.ivy2/cache/org.scalameta/scalameta_2.11/jars/scalameta_2.11-<IP_ADDRESS>2.jar:/Users/reidspencer/.ivy2/cache/org.scalameta/tokenizers_2.11/jars/tokenizers_2.11-<IP_ADDRESS>2.jar:/Users/reidspencer/.ivy2/cache/org.scalameta/tokens_2.11/jars/tokens_2.11-<IP_ADDRESS>2.jar:/Users/reidspencer/.ivy2/cache/org.scalameta/transversers_2.11/jars/transversers_2.11-<IP_ADDRESS>2.jar:/Users/reidspencer/.ivy2/cache/org.scalameta/trees_2.11/jars/trees_2.11-<IP_ADDRESS>2.jar:/Applications/IntelliJ IDEA 2016.2.4.app/Contents/lib/idea_rt.jar" com.intellij.rt.execution.application.AppMain org.jetbrains.plugins.scala.compiler.rt.ConsoleRunner -usejavacp
Welcome to Scala 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_101).
Type in expressions for evaluation. Or try :help.

scala> import scala.meta._
import scala.meta._

scala> "class A() { def this(a: Int) = this() }".parse[Source].get
res1: scala.meta.Source = class A() { def this(a: Int) = this() }

scala> res1.stats.head.asInstanceOf[Defn.Class]
res3: scala.meta.Defn.Class = class A() { def this(a: Int) = this() }

scala> res3 match { case Defn.Class(mods, name, tparams, ctor, templ) ⇒
    Some(templ)
case _ ⇒ None
}
     |      |      | res4: Option[scala.meta.Template] = Some({ def this(a: Int) = this() })

scala> res4.get.structure
res5: String = Template(Nil, Nil, Term.Param(Nil, Name.Anonymous(), None, None), Some(Seq(Ctor.Secondary(Nil, Ctor.Ref.Name("this"), Seq(Seq(Term.Param(Nil, Term.Name("a"), Some(Type.Name("Int")), None))), Term.Apply(Ctor.Ref.Name("this"), Nil)))))

So, the Ctor.Secondary comes out just fine when the originating source is parsing a string. It doesn't behave the same in my macro, matching against "defn : Any".

I have determined that the defn : Any that my macro receives does not include the constructor. I don't know why that is or even what part of scalameta (paradise?) causes the declaration to be passed to the macro. I have added a test case to TemplateSuite to cover this scenario. It certainly works when parsing.

I'm going to need some direction on tracking down the remainder of this issue.

Thanks for investigating this so well. My guess is that the converter in Paradise doesn't handle Ctor.Secondary correctly. If you want to take a swing at this, a good place to start is to look at ToMtree and Syntactic.scala. I can also take a look after the weekend.

Thanks for the pointer. I will look at Paradise and see if I can figure it out. My Sprint Review is on Monday and it would certainly be nice to include secondary constructors with my macro. I'm having to do a silly workaround at the moment. :)

I found that Ctor.Secondary was missing from ToMtree. However, adding one something like Ctor.Primary  didn't make any difference in my results.  I also added a case to Syntactic.scala to try a secondary constructor but I couldn't figure out how to get the test suite to run. I've never used coursier before and it seems to not find very much for me.

@reid-spencer constructors are heavily desugared by scalac which complicates the converter in this particular case. I have a fix for this in https://github.com/scalameta/paradise/pull/106, waiting review.

I've never used coursier before and it seems to not find very much for me.

Coursier should "just work". What error did you bump into?

Re: Coursier - I have no idea. It must have been something transient because I can no longer replicate the problem. Just doing: "sbt test" works .. thankfully :)

Good to hear. Coursier is amazing, such a huge timesaver.
~testsConverter/test is a lot faster than test while developing on ToMtree, the other tests require a clean/compile on every change to the plugin.


Error: Could not find a dataset in ../repo/level_0/

For some reason Travis run of bde_copy results in a failure to accept data repository.
See here: https://travis-ci.org/strk/linz_bde_copy#L191-L200
After adding debugging code to the binary (see #15) I can read this:
Debug: Reading dir ../repo/level_0/
Debug: Checking entry .
Debug: Entry . is virtual directory
Debug: Checking entry ..
Debug: Entry .. is virtual directory
Debug: Checking entry<PHONE_NUMBER>0201
Debug: Entry<PHONE_NUMBER>0201 is not a directory (0 instead of 4)
Debug: Checking entry<PHONE_NUMBER>0201
Debug: Entry<PHONE_NUMBER>0201 is not a directory (0 instead of 4)
Error: Could not find a dataset in ../repo/level_0/

That's ent->d_type being 0 (DT_UNKNOWN) instead of 4 (DT_DIR).
I'm not sure why the directory entry would be unknown but maybe the code should be using lstat instead of readdir (or it could be something to test).

It looks like ent->d_type is allowed to return unknown to avoid an additional fstat: https://stackoverflow.com/questions/23958040/checking-if-a-dir-entry-returned-by-readdir-is-a-directory-link-or-file/29094555#29094555
So we should really do the fstat ourselves (or at that point, an lstat to also support symlinks).


tests: Update to Ginkgo 2.0

What this PR does / why we need it:
Update Kubevirt to use Ginkgo 2.0 in order to be able to use the new features of it.

Imports were changed to use Ginkgo 2.0 all over.
kubevirt/qe-tools was bumped to v0.1.8 so it will also have Ginkgo 2.0 interface.
Since Ginkgo 2.0 changed the reporters, and the new built-in reporter has different
XSD scheme, which isn't compatible with prow spyglass, the old reporter
is still used as a custom reporter.
Handled deprecation warnings / errors.
Since mock ctrl.Finish() is called automatically, it uncovers some unit tests that
need to be updated.
This PR updates the needed calls so it will pass, but an issue [1] is opened to
double check the tests and see if additional actions should be taken.
The redundant Finish calls were removed.
device-manager Bazel file was changed manually, because it isn't
changed by make deps-update
Ginkgo installation was removed from kubevirt builder image, as it doesn't affect the build
KUBEVIRT_BUILDER_IMAGE was not updated yet.
DeprecatedBeforeAll should be removed on a follow PR.

[1] https://github.com/kubevirt/kubevirt/issues/7332
Which issue(s) this PR fixes (optional, in fixes #(, fixes #<issue_number>, ...) format, will close the issue(s) when PR gets merged):
Fixes #
Special notes for your reviewer:
Based on https://onsi.github.io/ginkgo/MIGRATING_TO_V2
Some of the changes were inspired by https://github.com/gardener/gardener/pull/5313
Once this PR is merged, we can merge also https://github.com/kubevirt/project-infra/pull/1931
Release note:
The Ginkgo dependency has been upgraded to v2.1.3 (major version upgrade)

/uncc @alonSadan @ILpinto @rhrazdil @yuhaohaoyu

first push - rebase
2nd push addressed https://github.com/kubevirt/kubevirt/pull/7326#discussion_r822654993

change: Updated BeforeSuite usages, (and few more minor changes),
instead of using "Ordered" which forces running tests in serial and takes more time

Fixed a unit test broken by the last push
just https://github.com/kubevirt/kubevirt/pull/7326/commits/efd4b17b08cae5671eec37d4723e2310795ebab7 was changed

the flakes of https://prow.ci.kubevirt.io/view/gs/kubevirt-prow/pr-logs/pull/kubevirt_kubevirt/7326/pull-kubevirt-e2e-kind-1.22-sriov/1501902070926544896
appear also on other PRs

@oshoval can you rebase it ?

Rebased

/retest
not related

/lgtm
Great job.

Changes:
Added DeferCleanup instead AfterSuite link
Removed ginkgo installation from kubevirt builder link

/test pull-kubevirt-e2e-k8s-1.22-sig-compute-migrations
not related (failure during cluster creation, due to go lib fetching)

Change: inline declaration of variable in the BeforeSuite, as it is not used outside of it

/retest
unrelated, some CI jobs were failed today generally due to some unavailable go packages

The failures are unrelated

rebased

/test pull-kubevirt-goveralls
not related

Thanks Daniel :)
/cc @qinqon can you please re-review ?

/retest

https://prow.ci.kubevirt.io/view/gs/kubevirt-prow/pr-logs/pull/kubevirt_kubevirt/7326/pull-kubevirt-e2e-kind-1.23-vgpu/1505908123662028800
saw this failure on other PRs as well (also it is after the tests, when trying to delete the kind node)
/retest

/lgtm


can not delete added IP Address and no wallet address validation on Farm mangement

first bug

go to farm settings
press on + IP Address management , add a new IP Address
delete added IP address
got error as below picture

feature request
to validated the walllet address on  adding a wallet address
steps:

go to farm settings
add a new wallet, put the invalid address as below :
the wallet address added depiste validation

@hossnys please verify

Verified on branch development :

creating farm with wrong wallet address : it's validating wallet address and if it was wrong so process fail .

creating farm with correct wallet address :  if wallet address is valid so farm created

adding ip address then try to remove it , it's removed successfully


Added support for nested property accessor

Added support to access nested properties in the external data
        eq(42, compileExpression('a')(Object.create({a: 42})));
        eq(42, compileExpression('a.b')(Object.create({a: { b: 42}})));
        eq(42, compileExpression('a["b"]')(Object.create({a: { b: 42 }})));
        eq(42, compileExpression("a['b']")(Object.create({a: { b: 42 }})));
        eq(42, compileExpression('a["b"].c')(Object.create({a: { b: { c: 42 } }})));
        eq(42, compileExpression('a["b"]["c"]')(Object.create({a: { b: { c: 42 } }})));
        eq(42, compileExpression('a.b[0]')(Object.create({a: { b: [42]}})));
        eq(42, compileExpression('a.b[0].c')(Object.create({a: { b: [{ c: 42 }]}})));

Hey Anson,
Sorry to disappoint you, but this repo has been dead for quite some time. See my fork for an up-to-date version. Currently, there already is a property accessor in filtrex, it's the operator of. One would use it like this:
eq(42, compileExpression("b of a")(Object.create({a: { b: 42 }})));


No X11 DISPLAY variable was set

Expected behavior
I downloaded the latest binary and tried to run Jmeter. However I got the error as described in actual behaviour.
Expected behaviour was - Jmeter GUI should open.
Actual behavior
ankur@ankur:~/software/apache-jmeter-5 (1).5/bin$ ./jmeter
Don't use GUI mode for load testing !, only for Test creation and Test debugging.
For load testing, use CLI Mode (was NON GUI):
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
& increase Java Heap to meet your test requirements:
Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file
Check : https://jmeter.apache.org/usermanual/best-practices.html
An error occurred:
No X11 DISPLAY variable was set,
or no headful library support was found,
but this program performed an operation which requires it,
Steps to reproduce the problem
system information

My display variable is also set -
ankur@ankur:~/software/apache-jmeter-5 (1).5/bin$ echo $DISPLAY
:1
I am using dual display, is that the issue?
JMeter Version
5.5
Java Version
openjdk version "19.0.1" 2022-10-18 OpenJDK Runtime Environment (build 19.0.1+10-Ubuntu-1ubuntu122.04) OpenJDK 64-Bit Server VM (build 19.0.1+10-Ubuntu-1ubuntu122.04, mixed mode, sharing)
OS Version
Ubuntu 22.04.1 LTS

I never tried to use a GUI from within wsl, but the error message says:

No X11 DISPLAY variable was set, or no headful library support was found,

So, if you have set the DISPLAY variable, it could be, that you have not installed the needed X11 libraries or a JRE with the needed X11 parts. In Ubuntu there are JRE/JDK packages, that exclude those parts. Which packages do you use (have installed)?

Its Jmeter, so i dont know what packages? can i run some command and give you more information?

No, it is not JMeter. It is your Java installation. Look for openjdk packages.


PageDown/PageUp only works once

Hello, maybe you can save me some time with this. Every time you press pageDown or up, the grid scrolls down by a set value,but if you try pressing it again this error comes up:
Uncaught TypeError: Cannot read property 'getCellOwnProperties' of undefined
at CellEvent.get (cellEventFactory.js:58)
at CellEvent.get (cellEventFactory.js:63)
at Constructor.handleKeyDown (CellSelection.js:103)
at Constructor.handleKeyDown (Filters.js:36)
at Constructor.onKeyDown (Behavior.js:917)
at Constructor.delegateKeyDown (events.js:581)
at events.js:458
at HTMLCanvasElement.decorator (events.js:32)
at Canvas.dispatchNewEvent (Canvas.js:313)
at Canvas.finkeydown (Canvas.js:453)
probably because theres no cell selected,therefore no origin position to scroll from
to test it out, just go on the demo and press pagedown a few times

Hey! Try using the develop branch. This and some more issues, like one you've reported in the other day, should be fixed there.

@hugoeanogueira Would you like to plan sometime to go over PRs with myself and @dcchuck

Hi @Dwaynekj!
Sorry to not be very responsive lately. We're working hard for a deadline at the end of the month and I've been delaying the PRs and the Slack things. I think it will be easier to check on this at the start of November. @mistic also has been doing some good stuff with hypegrid.
Thanks!

sorry for the stupid question, how do you actually build the project in a single file?i've been using the fin-hypergrid file i found in the demo until now,i dont have much experience with node.js

@hugoeanogueira Early or second week of november works

ok, second week it is ;)

@hugoeanogueira How about next thurs?


fix(FieldGenerators): Add missing connection check

About the PR

Added a missing condition
Why / Balance

It was supposed to be like this
Technical details

Media

[x] I have added screenshots/videos to this PR showcasing its changes ingame, or this PR does not require an ingame showcase

Before
BEFORE Unanchoring While connected (Video)
After
AFTER Unanchoring While connected (Video)
Breaking changes

Changelog

Oh, I see how this occurs. The containment field can technically be connected to non-enabled field generators, which are allowed to be unanchored. Wow. That's... wow.

Potentially fixes https://github.com/space-wizards/space-station-14/issues/30245


Allow for builder.Prompts.choices to have a separate value and label.

Current behaviour of function takes the label as the value, would be good if we can pass values down into the result instead of the label. See below example:
var builder = require('botbuilder');
builder.Prompts.choices('select one', {
  'choice 1': 1,
  'choice 2': 2,
  'choice 3': 3
});

/** assume user selects 'choice 1' **/

/** current behaviour **/
(session, result, next) => {
  console.log(result.response.entity); // 'choice 1'
}
/** suggested behaviour **/
(session, result, next) => {
  console.log(result.response.entity); // 1
}

Adding @Stevenic and @maxpert to comment.

I agree... It should also take a list of synonyms. Unfortunately I can't easily change the signature of the current version.  I've been kicking around letting you pass a function which can return a richer set of values, including dynamic values.

I think we definitely need to be able to pass a richer set of values. It makes more sense what @zephinzer is saying but I understand if that's not easy to implement. It's a lot easier to understand what is going on though if we can label the choice one thing and have it's response trigger a new dialog without having to use if/else statements

Duplicate of #2264


Implement share bar

Right now all the buttons are just links to '#'

@entrity I don't think this should be in initial launch unless you think it would be an easy/quick implementation.
Visually this will be much like Yummly.com execution:
Favorites directory:

Individual list:

Need to assign this to you since it involves pulling content form page into the header.
We need to apply open graph markup to the drink pages.  This needs to be in the header for the drink pages and needs to dynamically pull content from the individual drink titles/descriptions/etc.
I've included sample content below. This all needs to be replaced with the pulled content.
<meta property="og:url"                      content="http://tipsyology.com/drinks/1926" />
<meta property="og:site_name"         content="Tipsyology - Discover, create and share all things tipsy!">
<meta property="og:type"                   content="recipe" />
<meta property="og:title"                    content="Vodkatini cocktail" />
<meta property="og:description"        content="How to make a Vodkatini" />
<meta property="og:image"                content="http://tipsyology.com/images/drinks/vodktatini.jpeg" />

og:url we will want the URL to be something like http://tipsyology.com/cocktails/vodkatini. not /drinks/### for SEO reasons. I'll make a separate ticket for this.
og:site_name This stays the same, don't modify.
og:type  does not need to change, it should stay as recipe.
og:title   This should be drink name + cocktail
og:description   This should pull the description if one is present. Otherwise the fallback should be "How to make a Vodkatini cocktail.
og:image  This should link to image if one is present. Otherwise we should have a fallback default.  Use this image as the fallback:

Once the open graph is in place I'll implement the links for the share buttons.
When this is complete assign to me. I'll implement printing stylesheet/button.
Last, email button. This will pop a modal that will email a link + input fields to emails that can be separated by commas. I will build this modal. You'll need to plug it in.

@sirtastic,

Done. Assigning to you.
You don't need me to plug in the email link if you don't mind using a mailto url. (Saves a chunk of programming time.) Use the form on this page: http://www.cha4mot.com/t_mailto.html. All of the fields are optional, of course, with the exception of the 'to' field. Click 'Create URL', then copy the mailto url out of the field below.

Handled by commit 97234464ec4141bc6e666a1ec54f89b974904341

Can't test this since facebook can't crawl my localhost to pull the data.
Turns out twitter has their own open graph markup. When you have time add the following:
<!-- for Twitter -->
<meta name="twitter:card" content="summary" />
<meta name="twitter:title" content="" />
<meta name="twitter:description" content="" />
<meta name="twitter:image" content="" />

commit fda129f04a6168954df06ae80cd312873871aba5
Author: Markham Anderson<EMAIL_ADDRESS>Date:   Sun Aug 2 10:33:25 2015 -0700
Add twitter meta tags. Resolves #19 (github)

@sirtastic : back to you.


high-down-slot-update

Description
<High Down have requested for slot time changes which will be effective from 1st August 2019.>
Motivation and Context

Types of changes

[ ] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to change)
[ ] Prison details update (e.g. slot updates)

Checklist:

[x] My commit message follows the GDS git style standards we have adopted.
[ ] My change requires a change to the documentation.
[ ] I have updated the documentation accordingly.
[ ] I have updated the deployment repo accordingly.
[ ] I have added tests to cover my changes.

@Ed-Bajo As it is to take effect in the future, we need to add anomalous dates between now and then, so that the slot updates don't take immediate effect.  I've added all the anomalous dates for this one.


Reducing Lua RAM usage

There is a number of things that could be done to reduce RAM usage, at varying levels of complexity:

Pre-compiling the core functions that are declared as Lua.
Allowing some strings to live in Flash rather than having to let Lua allocate them.

Useful resource: http://www.eluaproject.net/doc/v0.9/en_arch_ltr.html
Could we have an AoT compiling mechanism based on copy-pasting chunks of the interpreter to limit branching and allow optimization across bytecode op sequences? It could be useful for some standard functions (though just rewriting them in C++ might be easier) but also for some snippets that we could match by a bytecode hash of some sort.
Unless we go the preprocessing route in which case it could be possible to AoT compile entire cartridges.

It appears that the orbys demo uses 70KiB worth of Lua heap before even executing code. About 20KiB of that is the y8 runtime. Maybe some bytecode optimization would be worth it? See Opeth.


A CSV file got uploaded even if it's not an allowed file type

This was on a submission upload field.

@frjo  It is happening because of .txt, I searched a bit found this and this. Looks like there is an issue with Chrome and .txt extension, it is treating multiple other extension like .csv, .docs as .txt extension.  I checked it by removing .txt then it works fine.
I am still looking for the other options that we can use to handle this.

@sandeepsajan0 Excellent that you found the cause of this!

relates to #2462

I went through the many issues and docs but couldn't find a good fix for this one. As we know, this is happening only with Chrome or Chromium and working fine in safari and other browsers. For the safe side, we already have a placeholder that mentions all accepted file types, so I think it is okay for now until we get something solid or get this issue fixed by Chromium.
What do you think @frjo ?

Thanks for looking in to this issue. I agree that we can live with this issue. Closing this for now.


make syncExecute cost only one connection

Codecov Report

Merging #1037 into dev will decrease coverage by <.01%.
The diff coverage is 0%.

@@            Coverage Diff             @@
##              dev    #1037      +/-   ##
==========================================
- Coverage   55.14%   55.14%   -0.01%
==========================================
  Files         636      636
  Lines       12545    12546       +1
  Branches     2019     2019
==========================================
  Hits         6918     6918
- Misses       5198     5199       +1
  Partials      429      429

Impacted Files
Coverage Δ

...xecute/memory/ConnectionStrictlyExecuteEngine.java
0% <0%> (ø)
:arrow_up:

Continue to review full report at Codecov.

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


feat: Add boolean parameter to control emoji attachment

Addresses https://sendbird.atlassian.net/browse/AC-461

After adding https://sendbird.atlassian.net/browse/AC-454,  there are probably some users who don't want emojis attached to all bot messages. Therefore, we should add a boolean parameter to allow them to control this feature.

The CircleCI failure is related to #51 I guess not this PR.


🐛 [cloud_firestore] streams not closed on hot restart on [Web]

Bug report
Describe the bug
On flutter web (I have not tested Android or iOS) streams are not closed on hot restart.
Steps to reproduce
Steps to reproduce the behavior:

Create a subscription:

int timestamp = DateTime.now().millisecondsSinceEpoch;
FirebaseFirestore.instance
    .collection("sites")
    .where("userKeys", arrayContains: "qotBpMX2rjaNNq0UqkPmH819yIq1")
    .snapshots()
    .listen((sitesSnapshot) async {
  log.wtf("called $timestamp");
}, onError: (error) {
  log.e("SitesStreamSubscription error: $error");
});

Ensure to close the stream in the widget's dispose method:

@override
Future<void> dispose() async {
  await _sitesStreamSubscription?.cancel()?.catchError((error){log.e(error);});
  super.dispose();
}

Run the app, make a change to the firestore DB that will trigger the listener - one log is observed with timestamp "0".
Hot restart the app, make a change to the firestore DB that will trigger the listener - two logs are observed: one with timestamp "0" and one with timestamp "1". This indicates the stream was not closed.

Expected behavior
The stream should be closed by the dispose method and after hot restart only one log should be observed with timestamp "1".

Additional context
I have verified that dispose is being called by creating other streams using Stream.periodic. These streams close and do not run after hot restart.

Flutter doctor
Run flutter doctor and paste the output below:
Click To Expand
doctor --verbose
[√] Flutter (Channel beta, 1.24.0-10.2.pre, on Microsoft Windows [Version 10.0.18363.1256], locale en-ZA)
    • Flutter version 1.24.0-10.2.pre at C:\workspace\flutter
    • Framework revision 022b333a08 (9 weeks ago), 2020-11-18 11:35:09 -0800
    • Engine revision 07c1eed46b
    • Dart version 2.12.0 (build 2.12.0-29.10.beta)

[!] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
    • Android SDK at C:\Users\rapha\AppData\Local\Android\sdk
    • Platform android-30, build-tools 30.0.2
    • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
    X Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK licenses.
      See https://flutter.dev/docs/get-started/install/windows#android-setup for more details.

[√] Chrome - develop for the web
    • Chrome at C:\Users\rapha\AppData\Local\Google\Chrome\Application\chrome.exe

[√] Android Studio (version 4.1.0)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)

Flutter dependencies
Run flutter pub deps -- --style=compact and paste the output below:
Click To Expand
C:\workspace\REI003-DEV>flutter pub deps -- --style=compact
Dart SDK 2.12.0-29.10.beta
Flutter SDK 1.24.0-10.2.pre
rei003 0.0.00+0

dependencies:
- charts_flutter 0.9.0 [charts_common collection flutter intl logging meta]
- clippy 1.0.0 [path]
- cloud_firestore 0.14.4 [flutter meta quiver firebase_core firebase_core_platform_interface cloud_firestore_platform_interface cloud_firestore_web]
- cupertino_icons 0.1.3
- firebase_auth 0.18.4+1 [meta firebase_core firebase_core_platform_interface firebase_auth_platform_interface firebase_auth_web flutter]
- firebase_core 0.5.3 [firebase_core_platform_interface flutter quiver meta firebase_core_web]
- flutter 0.0.0 [characters collection meta typed_data vector_math sky_engine]
- flutter_flavor 1.1.3 [flutter]
- google_maps 3.4.5 [js_wrapping meta]
- http 0.12.1 [http_parser path pedantic]
- intl 0.16.1 [path]
- json_annotation 3.1.1
- logger 0.9.1
- material_design_icons_flutter 4.0.5345 [flutter]
- package_info_plus 0.6.3 [flutter package_info_plus_platform_interface package_info_plus_linux package_info_plus_macos package_info_plus_windows package_info_plus_web]
- provider 4.1.3 [flutter nested collection]
- universal_html 1.2.2 [async charcode collection csslib html meta typed_data universal_io zone_local]
- uuid 2.0.4 [crypto convert]

dev dependencies:
- build_runner 1.10.11 [args async build build_config build_daemon build_resolvers build_runner_core code_builder collection crypto dart_style glob graphs http_multi_server io js logging meta mime path pedantic pool pub_semver pubspec_parse shelf shelf_web_socket s
tack_trace stream_transform timing watcher web_socket_channel yaml]
- flutter_launcher_icons 0.7.5 [image args yaml]
- flutter_test 0.0.0 [flutter test_api path fake_async clock stack_trace vector_math async boolean_selector characters charcode collection matcher meta source_span stream_channel string_scanner term_glyph typed_data]
- json_serializable 3.5.1 [analyzer build build_config json_annotation meta path source_gen]
- test 1.16.0-nullsafety.15 [analyzer async boolean_selector coverage http_multi_server io js node_preamble package_config path pedantic pool shelf shelf_packages_handler shelf_static shelf_web_socket source_span stack_trace stream_channel typed_data web_socket_cha
nnel webkit_inspection_protocol yaml test_api test_core]

transitive dependencies:
- _fe_analyzer_shared 14.0.0 [meta]
- analyzer 0.41.1 [_fe_analyzer_shared args cli_util collection convert crypto glob meta package_config path pub_semver source_span watcher yaml]
- archive 2.0.11 [crypto args path]
- args 1.5.2
- async 2.5.0-nullsafety.3 [collection]
- boolean_selector 2.1.0-nullsafety.3 [source_span string_scanner]
- build 1.5.2 [analyzer async convert crypto logging meta path glob]
- build_config 0.4.2 [checked_yaml json_annotation meta path pubspec_parse yaml]
- build_daemon 2.1.4 [built_collection built_value http_multi_server logging pedantic path pool shelf shelf_web_socket stream_transform watcher web_socket_channel]
- build_resolvers 1.4.4 [analyzer build crypto graphs logging meta path package_config pool pub_semver]
- build_runner_core 6.0.3 [async build build_config build_resolvers collection convert crypto glob graphs json_annotation logging meta path package_config pedantic pool timing watcher yaml]
- built_collection 4.3.2 [collection quiver]
- built_value 7.1.0 [built_collection collection fixnum quiver]
- characters 1.1.0-nullsafety.5
- charcode 1.2.0-nullsafety.3
- charts_common 0.9.0 [collection intl logging meta vector_math]
- checked_yaml 1.0.2 [json_annotation source_span yaml]
- cli_util 0.2.0 [path]
- clock 1.1.0-nullsafety.3
- cloud_firestore_platform_interface 2.2.1 [flutter meta collection firebase_core plugin_platform_interface]
- cloud_firestore_web 0.2.1+2 [flutter flutter_web_plugins http_parser meta firebase_core firebase_core_web cloud_firestore_platform_interface js]
- code_builder 3.3.0 [built_collection built_value collection matcher meta]
- collection 1.15.0-nullsafety.5
- convert 2.1.1 [charcode typed_data]
- coverage 0.15.0 [args logging package_config path source_maps stack_trace vm_service]
- crypto 2.1.3 [collection convert typed_data]
- csslib 0.16.1 [source_span]
- dart_style 1.3.10 [analyzer args path source_span]
- fake_async 1.2.0-nullsafety.3 [clock collection]
- ffi 0.1.3
- firebase_auth_platform_interface 2.1.4 [flutter meta firebase_core plugin_platform_interface]
- firebase_auth_web 0.3.2+3 [flutter flutter_web_plugins meta http_parser intl firebase_core firebase_core_web firebase_auth_platform_interface js]
- firebase_core_platform_interface 2.1.0 [flutter meta plugin_platform_interface quiver]
- firebase_core_web 0.2.1+1 [firebase_core_platform_interface flutter flutter_web_plugins meta js]
- fixnum 0.10.11
- flutter_web_plugins 0.0.0 [flutter js characters collection meta typed_data vector_math]
- glob 1.2.0 [async collection node_io path pedantic string_scanner]
- graphs 0.2.0
- html 0.14.0+3 [csslib source_span]
- http_multi_server 2.2.0 [async]
- http_parser 3.1.3 [charcode collection source_span string_scanner typed_data]
- image 2.1.4 [archive xml]
- io 0.3.4 [charcode meta path string_scanner]
- js 0.6.3-nullsafety.3
- js_wrapping 0.5.0
- logging 0.11.4
- matcher 0.12.10-nullsafety.3 [stack_trace]
- meta 1.3.0-nullsafety.6
- mime 0.9.6+3
- nested 0.0.4 [flutter]
- node_interop 1.1.1 [js]
- node_io 1.1.1 [node_interop path]
- node_preamble 1.4.12
- package_config 1.9.3 [path charcode]
- package_info_plus_linux 0.1.1 [package_info_plus_platform_interface flutter path]
- package_info_plus_macos 0.2.0 [flutter]
- package_info_plus_platform_interface 0.3.0 [flutter meta plugin_platform_interface]
- package_info_plus_web 0.2.1 [http package_info_plus_platform_interface platform_detect flutter flutter_web_plugins meta]
- package_info_plus_windows 0.2.0 [package_info_plus_platform_interface ffi flutter win32]
- path 1.8.0-nullsafety.3
- pedantic 1.10.0-nullsafety.3
- petitparser 2.4.0 [meta]
- platform_detect 1.4.0 [meta pub_semver]
- plugin_platform_interface 1.0.3 [meta]
- pool 1.5.0-nullsafety.3 [async stack_trace]
- pub_semver 1.4.4 [collection]
- pubspec_parse 0.1.5 [checked_yaml json_annotation pub_semver yaml]
- quiver 2.1.3 [matcher meta]
- shelf 0.7.5 [async collection http_parser path stack_trace stream_channel]
- shelf_packages_handler 2.0.0 [path shelf shelf_static]
- shelf_static 0.2.9+1 [convert http_parser mime path shelf]
- shelf_web_socket 0.2.3 [shelf web_socket_channel stream_channel]
- sky_engine 0.0.99
- source_gen 0.9.10+1 [analyzer async build dart_style glob meta path pedantic source_span]
- source_map_stack_trace 2.1.0-nullsafety.4 [path stack_trace source_maps]
- source_maps 0.10.10-nullsafety.3 [source_span]
- source_span 1.8.0-nullsafety.4 [charcode collection path term_glyph]
- stack_trace 1.10.0-nullsafety.6 [path]
- stream_channel 2.1.0-nullsafety.3 [async]
- stream_transform 1.2.0
- string_scanner 1.1.0-nullsafety.3 [charcode source_span]
- term_glyph 1.2.0-nullsafety.3
- test_api 0.2.19-nullsafety.6 [async boolean_selector collection meta path source_span stack_trace stream_channel string_scanner term_glyph matcher]
- test_core 0.3.12-nullsafety.14 [analyzer async args boolean_selector collection coverage glob io meta package_config path pedantic pool source_map_stack_trace source_maps source_span stack_trace stream_channel vm_service yaml matcher test_api]
- timing 0.1.1+2 [json_annotation]
- typed_data 1.3.0-nullsafety.5 [collection]
- universal_io 0.8.5 [meta zone_local]
- vector_math 2.1.0-nullsafety.5
- vm_service 5.5.0 [meta]
- watcher 0.9.7+15 [async path pedantic]
- web_socket_channel 1.1.0 [async crypto stream_channel]
- webkit_inspection_protocol 0.7.4 [logging]
- win32 1.7.4 [ffi]
- xml 3.5.0 [petitparser collection convert]
- yaml 2.2.0 [charcode collection string_scanner source_span]
- zone_local 0.1.2

ROOT CAUSE
I have figured out the source of this bug.
Because:

the firebase app is initialised inside the <script> in index.html as per the [firebase web documentation] (https://firebase.flutter.dev/docs/installation/web#initializing-firebase) with firebase.initializeApp(firebaseConfig) and;
therefore, the firebase instance actually exists in the scope of index.html and;
index.html does not re-run on hot restart and;
the dart call to Firebase.initializeApp() (for web) does not actually initialise the app and;
dispose is not called on hot restart and hence calls to close streams are not called.

The Firestore instance (and therefore it's listeners) persist across hot restarts.
WORKAROUND
Simple solution: Terminate and restart instance from dart (does not work)
While it is possible to terminate the Firestore instance from within dart (by calling FirebaseFirestore.instance.terminate()), the dart methods provided for instantiating a new instance (FirebaseFirestore firestore = FirebaseFirestore.instance;) do not appear to work in web and later calls to FirebaseFirestore.instance throw FirebaseError: The client has already been terminated.. I assume this is because the Firestore instance is actually instantiated along with the Firebase app in the Firebase.initializeApp() call from <script> within index.html
Complex solution: Terminate and restart the instance from the <script>["SOLVED"]

Expand the <script> in index.html to include a function restartFirebase():

  <script>
    firebaseConfig = {
      apiKey: "",
      authDomain: "",
      databaseURL: "",
      projectId: "",
      storageBucket: "",
      messagingSenderId: "",
      appId: "",
      measurementId: ""
    };

    let instance = firebase.initializeApp(firebaseConfig);

    function restartFirebase(){
      firebase.firestore().terminate();
      firebase.firestore();
    };
  </script>

Add a call to this js function flushFirebase in main using js.context.callMethod (take note of the import of 'dart:js' as js):

import 'dart:js' as js; // ignore: avoid_web_libraries_in_flutter

void main() async {
  js.context.callMethod('flushFirebase', []);

  // Initialise the default firebase instance.
  await Firebase.initializeApp().catchError((error) {
    log("Firebase.initializeApp error: $error");
  });

  runApp(MyApp());
}

FIX
I'd love to get some feedback from the firebase team as to why firebase actually has to be initialised from a script in index.html, if this will be changing and if not, if they can add an explicit method for web to restart Firestore or if they have any other more elegant work arounds/solutions.

ROOT CAUSE
I have figured out the source of this bug.
Because:

the firebase app is initialised inside the <script> in index.html as per the [firebase web documentation] (https://firebase.flutter.dev/docs/installation/web#initializing-firebase) with firebase.initializeApp(firebaseConfig) and;
therefore, the firebase instance actually exists in the scope of index.html and;
index.html does not re-run on hot restart and;
the dart call to Firebase.initializeApp() (for web) does not actually initialise the app and;
dispose is not called on hot restart and hence calls to close streams are not called.

The Firestore instance (and therefore it's listeners) persist across hot restarts.
WORKAROUND
Simple solution: Terminate and restart instance from dart (does not work)
While it is possible to terminate the Firestore instance from within dart (by calling FirebaseFirestore.instance.terminate()), the dart methods provided for instantiating a new instance (FirebaseFirestore firestore = FirebaseFirestore.instance;) do not appear to work in web and later calls to FirebaseFirestore.instance throw FirebaseError: The client has already been terminated.. I assume this is because the Firestore instance is actually instantiated along with the Firebase app in the Firebase.initializeApp() call from <script> within index.html
Complex solution: Terminate and restart the instance from the <script>["SOLVED"]

Expand the <script> in index.html to include a function restartFirebase():

  <script>
    firebaseConfig = {
      apiKey: "",
      authDomain: "",
      databaseURL: "",
      projectId: "",
      storageBucket: "",
      messagingSenderId: "",
      appId: "",
      measurementId: ""
    };

    let instance = firebase.initializeApp(firebaseConfig);

    function restartFirebase(){
      firebase.firestore().terminate();
      firebase.firestore();
    };
  </script>

Add a call to this js function flushFirebase in main using js.context.callMethod (take note of the import of 'dart:js' as js):

import 'dart:js' as js; // ignore: avoid_web_libraries_in_flutter

void main() async {
  js.context.callMethod('flushFirebase', []);

  // Initialise the default firebase instance.
  await Firebase.initializeApp().catchError((error) {
    log("Firebase.initializeApp error: $error");
  });

  runApp(MyApp());
}

FIX
I'd love to get some feedback from the firebase team as to why firebase actually has to be initialised from a script in index.html, if this will be changing and if not, if they can add an explicit method for web to restart Firestore or if they have any other more elegant work arounds/solutions.

Reproducible on the latest master 1.26.0-13.0.pre.119 with cloud_firestore: ^0.16.0 on web but not on Android.

flutter doctor -v
[√] Flutter (Channel master, 1.26.0-13.0.pre.119, on Microsoft Windows [Version 10.0.19041.746], locale et-EE)
    • Flutter version 1.26.0-13.0.pre.119 at C:\Development\flutter_master
    • Framework revision 32db0fe791 (3 hours ago), 2021-01-21 23:04:03 -0800
    • Engine revision 90641fa923
    • Dart version 2.12.0 (build 2.12.0-248.0.dev)

[√] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
    • Android SDK at C:\Users\marku\AppData\Local\Android\sdk
    • Platform android-30, build-tools 30.0.2
    • Java binary at: C:\Users\marku\AppData\Local\JetBrains\Toolbox\apps\AndroidStudio\ch-0\201.7042882\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
    • All Android licenses accepted.

[√] Chrome - develop for the web
    • Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe

[√] Visual Studio - develop for Windows (Visual Studio Community 2019 16.7.7)
    • Visual Studio at C:\Program Files (x86)\Microsoft Visual Studio\2019\Community
    • Visual Studio Community 2019 version 16.7.30621.155
    • Windows 10 SDK version 10.0.18362.0

[√] Android Studio (version 4.1.0)
    • Android Studio at C:\Users\marku\AppData\Local\JetBrains\Toolbox\apps\AndroidStudio\ch-0\201.7042882
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)

[√] Connected device (4 available)
    • SM G950F (mobile) • ce12171c51cc001c03 • android-arm64  • Android 9 (API 28)
    • Windows (desktop) • windows            • windows-x64    • Microsoft Windows [Version 10.0.19041.746]
    • Chrome (web)      • chrome             • web-javascript • Google Chrome 87.0.4280.141
    • Edge (web)        • edge               • web-javascript • Microsoft Edge 87.0.664.75

• No issues found!

Minimal reproducible code sample
import 'dart:async';

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  FirebaseApp app = await Firebase.initializeApp();
  assert(app != null);
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Material App',
      theme: ThemeData.dark(),
      home: Home(),
    );
  }
}

class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  StreamSubscription listener;
  @override
  void initState() {
    var timestamp = DateTime.now().microsecondsSinceEpoch;
    listener = FirebaseFirestore.instance.collection('test').doc('geo').snapshots().listen((event) {
      print('#################################Called: $timestamp');
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Firestore Example'),
      ),
      body: Center(
        child: const Text("Hello world"),
      ),
    );
  }

  @override
  void dispose() {
    listener?.cancel()?.catchError((e)=>print(e));
    super.dispose();
  }
}

Reproducible on the latest master 1.26.0-13.0.pre.119 with cloud_firestore: ^0.16.0 on web but not on Android.

flutter doctor -v
[√] Flutter (Channel master, 1.26.0-13.0.pre.119, on Microsoft Windows [Version 10.0.19041.746], locale et-EE)
    • Flutter version 1.26.0-13.0.pre.119 at C:\Development\flutter_master
    • Framework revision 32db0fe791 (3 hours ago), 2021-01-21 23:04:03 -0800
    • Engine revision 90641fa923
    • Dart version 2.12.0 (build 2.12.0-248.0.dev)

[√] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
    • Android SDK at C:\Users\marku\AppData\Local\Android\sdk
    • Platform android-30, build-tools 30.0.2
    • Java binary at: C:\Users\marku\AppData\Local\JetBrains\Toolbox\apps\AndroidStudio\ch-0\201.7042882\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
    • All Android licenses accepted.

[√] Chrome - develop for the web
    • Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe

[√] Visual Studio - develop for Windows (Visual Studio Community 2019 16.7.7)
    • Visual Studio at C:\Program Files (x86)\Microsoft Visual Studio\2019\Community
    • Visual Studio Community 2019 version 16.7.30621.155
    • Windows 10 SDK version 10.0.18362.0

[√] Android Studio (version 4.1.0)
    • Android Studio at C:\Users\marku\AppData\Local\JetBrains\Toolbox\apps\AndroidStudio\ch-0\201.7042882
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)

[√] Connected device (4 available)
    • SM G950F (mobile) • ce12171c51cc001c03 • android-arm64  • Android 9 (API 28)
    • Windows (desktop) • windows            • windows-x64    • Microsoft Windows [Version 10.0.19041.746]
    • Chrome (web)      • chrome             • web-javascript • Google Chrome 87.0.4280.141
    • Edge (web)        • edge               • web-javascript • Microsoft Edge 87.0.664.75

• No issues found!

Minimal reproducible code sample
import 'dart:async';

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  FirebaseApp app = await Firebase.initializeApp();
  assert(app != null);
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Material App',
      theme: ThemeData.dark(),
      home: Home(),
    );
  }
}

class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  StreamSubscription listener;
  @override
  void initState() {
    var timestamp = DateTime.now().microsecondsSinceEpoch;
    listener = FirebaseFirestore.instance.collection('test').doc('geo').snapshots().listen((event) {
      print('#################################Called: $timestamp');
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Firestore Example'),
      ),
      body: Center(
        child: const Text("Hello world"),
      ),
    );
  }

  @override
  void dispose() {
    listener?.cancel()?.catchError((e)=>print(e));
    super.dispose();
  }
}

This is not only Firestore issue.
I experience the same unexpected behavior with FirebaseAuth.instance.userChanges().listen().
There don't seem to be any similar workarounds. Terminating Firestore instance does not affect Firebase Auth.

I'm closing this issue in favour of tracking a duplicate issue here


[Docs] Broken Link

Current State
Many of the links are still broken in this page  (https://docs.meshery.io/guides/configuration-management/working-with-designs)
Desired State

Contributor Guides and Handbook

📚 Instructions for contributing to documentation

Meshery documentation site and source

🛠 Meshery Build & Release Strategy
🎨 Wireframes and designs for Meshery UI in Figma (open invite)
🙋🏾🙋🏼 Questions: Discussion Forum and Community Slack

I am working on this issue right now.Please assign this to me

if this issue is open I would like to work on it


Add experimental builds for Opam 2 2

Adds experimental builds for opam.2.2 using the pre-built opam-dev (master) builds in the docker base images.
Tagged as a draft because:

Some variants like flambda don't work with the opam list command to get opam-vars
opam-vars query is hardcoded for macOS and FreeBSD, when it should be run on those cluster builds.

Should be superseded by #953 iiuc.

Looking forward to opam 2.2 support 👍🏻


Shared values defined in non-default module

The default usage of lane_context, according to the documentation, is lane_context[SharedValues::BUILD_NUMBER].
Applying the format to this plugin lane_context[SharedValues::APPCENTER_DOWNLOAD_LINK] results in the following error:
NameError: [!] uninitialized constant Fastlane::Actions::SharedValues::APPCENTER_DOWNLOAD_LINK
Instead, the user is required to type lane_context[Fastlane::Helper::SharedValues::APPCENTER_DOWNLOAD_LINK] which is not mentioned in the docs and only becomes clear when looking into the source code.
The SharedValues module should be moved to Fastlane::Actions where all other shared values are defined.

Thank you for the fix!
Released this change in 0.2.2


fixing check for variable existence

By trying to call enc1 and enc2 with them possibly not being defined it
can throw a NameError. In addition, when it is defined, this will always
evaluate to true unless the /value/ of enc1 and enc2 are strings that
are the names of variables. locals() returns a dictionary, where the
keys are the names of the variable as type string and the values are the
values of the variables. The search must be performed with a string
instead of by type. This also avoids the earlier mentioned error.

Hello! I am receiving the following exception when I am using your library: SerialException: write failed: [Errno 5] Input/output error
It is usually having to do with the port.write lines such as this one: port.write(chr(val & 0xFF))
Do you know what could be wrong and what I could do to fix this?


WIP Add GPOS compaction code in varLib.merger and otlLib.builder + new fonttools otlLib.optimize command

This is a draft to upstream to fontTools a way to compact binary GPOS table in TTF, by splitting them into subtables in a smart way. The algorithm can yield significant file size savings depending on the font, e.g. sometimes it removes 50% of the GPOS table, while preserving all the kerning information, leading to no change in the font's spacing, and no reflows in documents.
The idea behind this algorithm is that the GPOS subtables can be big sparse matrices, full of zeros, especially on fonts that cover multiple script with kerning between glyphs of the same script but not across scripts. (see the picture below for illustration purposes: it represents an hypothetical class to class kerning lookup, and shows how large regions without any data naturally appear in cross-script kerning or even within a single script, eg. lowercase against uppercase).

We can compact them, by instead of having 1 large sparse subtable, split that subtable into N small subtables, 1 per line, and remove zeros from each line, achieving maximum density/no sparseness, at the expense of the overhead of many subtables. That's the "max" mode of the algorithm.
Then, we can also target a middle ground, where we use clustering to group together the tiny subtables that have the same (or almost the same) columns, so that we reduce the number of new subtables while keeping high density of data. That's the "auto" mode of the algorithm, and it's implemented with an off-the-shelf clustering algorithm from scikit-learn. (see the picture below for a potential solution)

The above result could be obtained by splitting into 1 subtable per script, but that requires information about which script each glyph belongs to, and that prevents taking advantage of patterns within a script. That's why we propose to use clustering instead: it doesn't need any information about the glyphs, it only looks at patterns inside the kerning data.
After discussing initial results with Behdad, he suggested that we roll our own clustering algorithm, taking inspiration from this VarStore optimizer at https://github.com/fonttools/fonttools/blob/1df4f1eac1fa185e1b838e1203c92d67fcc41067/Lib/fontTools/varLib/varStore.py#L434-L523
The custom clustering has several benefits:

no new dependency
custom stop criteria = implements a trade-off between file size savings and the proliferation of subtables (too many subtables is harmful to WOFF2 compression and potentially to processing time while rendering the font)
custom cost function = by predicting almost exactly the outcome in terms of number of bytes of each subtable arrangement, the custom clustering takes the optimal decisions each time and outperforms the off-the-shelf clustering. It also knows to do nothing when nothing interesting can be done (where the off-the-shelf algorithm would still split subtables and actually increase the file size).

The custom clustering is implemented by strategies 1 to 9. The number reflects how many new subtables the algorithm will add in order to achieve a 50% reduction in file size. Strategy 9 is actually allowed to create as many subtables as necessary to create the best file size savings.
The goals of this PR are:

validate the implementation of the algorithm
provide it in fontTools as a function that can be applied to existing TTFs to reduce their size (there's a new snippet that does that and also reports timing and size savings as a CSV)
call the algorithm in various places inside fontTools so that newly compiled fonts are already optimized, with "sane" defaults (no subtable explosion)

@behdad @chrissimpkins @madig
Progress:

[x] Provide a way to optimize existing TTFs: there's a new Snippet that you can use like so:python Snippets/compact_gpos.py YourFont.ttf

It will create compacted copies of the input TTF using various compression levels and print a report about the resulting file sizes and runtimes.
[x] Hook up the optimizer so that both static fonts and variable fonts get optimized when using fontmake

otlLib.builder.PairPosBuilder
varLib.merger

[x] Profile to make faster

There might be still some tricks to use like class slots or different datatypes in the hot loop
The cost function is very... costly: my intuition is that instead of being precise about e.g. the Class1/2 bytes, we could use approximations that are faster to compute but still yield good decisions about what to merge. For example the version at https://github.com/fonttools/fonttools/pull/2326/commits/c11ff23f64162717c400a314d8e2e1999261591f was quite fast and giving very similar merge decisions to the latest version that is slow because of the Class1/2 computations.
The main loop is O(n^2) in calls to the cost function thanks to memoization of the cost of clusters

n lines in the subtable = n initial clusters
the first iteration evaluates n^2 "potential" merges, of which we select 1 "definitive" merge
each further iteration only evaluates new potential merges, that is: we perform up to n definitive merges = up to n further iterations, each of which triggers the evaluation of n new "potential" merges (new cluster against n other clusters) so also n^2

Maybe the cost of the main loop could be reduced by having a heuristic that chealy discards potential merges that won't bring any benefit, without evaluating their precise cost. e.g. we could have a "lower bound cost" that has zero instead of the Class1/2 costs, and if the lower bound cost is already not interesting, no need to consider the full cost (I'm going to implement that to see if that works)

[x] Decide best way to pass the mode parameter to the various functions that use it (see above) => moved to https://github.com/fonttools/fonttools/issues/2349

Currently it's an ENV variable
Should it be an attribute on ttLib.TTFont instead?

Attach tree of key-values to TTFont, a bit like a YAML configuration file, but with inheritance, so that you can set optimize to the top level and override in lower levels

[x] Do some further cleanup identified by Behdad:  "Maybe now's time to add TTFont API for that. And clean up all the ClassDef/Coverage code you referenced." https://github.com/fonttools/fonttools/pull/2326#discussion_r646782471
[x] Remove strategies "one", "auto" and "max" and other dead code
[x] Remove print() -> use the logger or remove completely
[x] Understand why strategy "one" was yielding size savings despite doing nothing and fix matching bug => change the default otlLib builder to delete columns with all zero kerning => https://github.com/fonttools/fonttools/pull/2278/files
[x] Make otlLib.optimize.gpos that can be executed
[x] Figure out best default value for the mode

If it was very fast we could have a middle value like "5"
Otherwise default to 0 = disabled

[ ] Run on Roboto
[x] Add tests
[ ] Publish evaluation of performance impact of more subtables on hb-shape
[ ] Check performance with pypy

Move code to otlLib.optimize

Introduce compression number = 1 to 9, default 5 like gzip for example. See code in https://github.com/harfbuzz/packtab/blob/master/Lib/packTab/init.py#L690-L691 for meaning of number (1 = accept to add 1 subtable to reduce size by 50%, 5 = accept to add 5 subtables to reduce size by 50%)

@davelab6

Thanks @belluzj. I haven't checked the new code. How does it perform?

@behdad I ran the new implementation against a few Google Fonts that I selected based on how well the "auto" strategy from scikit-learn was performing on them (a few very bad examples such as Fira Sans where the GPOS table size was going up +50%, and a few very good, such as Pridi where the GPOS was reduced by 70%). On this sample, the new strategies, from 1 to 8, (almost) always result in either no change to GPOS size or significant savings.
Strategies 1 to 8 are implemented so that while splitting a subtable, they will allow the creation of at most 1 to 8 new subtables to justify a 50% size saving. That seems to work well because when no savings can be achieved it keeps the number of subtables low or even just 1 = falls back to strategy "one" which is to not split the subtable.
Strategy 9 doesn't have that stop criteria: it will create as many subtables as needed to get the max size saving. However strategy 9 fails on the "hard" fonts (where no savings can be achieved) => that indicates that my custom cost function is off (underestimating the overhead of extra subtables). If the cost function was representing reality exactly I would expect strategy 9 to always yield the best savings.
https://docs.google.com/spreadsheets/d/1qUjbvmrGeVxL1_yofX8VTN2HPqvHKVnRqovPUOBSfGk/edit?usp=sharing

Note: here I'm running the strategies on final fonts, after the fact; I'll evaluate later what the strategies yield when they run as part of the compilation process (with access to subtables before overflow resolution).
About the time that the new algorithm takes to run, it's 3-5 times slower than the previous strategies. See runtimes below on the sample fonts. I haven't profiled anything or done any performance optimizations (apart from memoizing Cluster instances to avoiding recomputing their cost all the time).
    Runtimes, in seconds; each column is one font, each line is a strategy
        one         0.23  0.60  0.04  0.60  0.31  0.13  0.51  1.85  1.30  0.08  0.79  0.63  0.36  0.72
        max         0.26  0.56  0.06  0.61  0.31  0.14  0.56  2.01  1.33  0.25  0.88  0.63  0.37  0.85
        auto        1.30  0.60  0.04  0.66  0.35  0.11  0.57  1.99  1.26  0.08  0.82  0.63  0.39  0.78
        1           0.88  1.90  0.15  2.12  1.04  0.30  1.18  2.59  5.24  0.19  2.18  2.22  1.05  2.08
        2           0.89  1.92  0.15  2.18  1.06  0.31  1.24  2.60  5.33  0.15  2.11  2.15  1.03  2.10
        3           0.88  1.87  0.14  2.06  1.13  0.30  1.21  2.53  5.57  0.19  2.15  2.17  1.06  2.11
        4           0.94  1.92  0.17  2.04  1.04  0.30  1.19  2.61  5.27  0.16  2.11  2.10  0.98  2.08
        5           0.85  1.88  0.15  2.07  1.05  0.31  1.17  2.64  5.55  0.18  2.19  2.14  1.00  2.13
        6           0.86  1.85  0.14  2.05  1.01  0.26  1.17  2.64  5.27  0.15  2.09  2.24  0.95  2.16
        7           0.91  2.01  0.14  2.00  1.04  0.31  1.17  2.54  5.32  0.17  2.11  2.10  0.95  2.10
        8           0.84  1.85  0.17  1.99  1.00  0.29  1.13  2.61  5.16  0.15  2.11  1.97  0.94  2.07
        9           0.75  1.72  0.12  1.85  0.98  0.29  1.03  2.39  4.73  0.16  1.74  1.48  0.90  1.73

I fixed a bug in the cost function and the results are looking much better already: there's only on Noto Ethiopic that strategy 9 isn't the best but otherwise all the numbered strategies save bytes, with 9 saving the most as expected. To make the cost function really spot-on I would have to compute which glyph ranges are contiguous or not and choose the best format accordingly (maybe I should actually build the subtables with fontTools and measure how many bytes they take? Instead of trying to just count bytes without actually putting together the data)

I updated the PR description to explain in more details what this is about :)

To make the cost function really spot-on I would have to compute which glyph ranges are contiguous or not and choose the best format accordingly (maybe I should actually build the subtables with fontTools and measure how many bytes they take

Right. Is not that bad to count number of ranges. We used to have code to that effect in a couple of places. Let me find... Here:
https://github.com/fonttools/fonttools/commit/3d578dd1dec43b727c32f77f6441ba1681f1c50f

I made it about 2x faster by approximating more: computing the exact valueFormats for each cluster was taking a lot of time, and I'm not sure it is useful. Instead I'm now assuming that all clusters will have the same valueFormats as the full subtable. That may not be true when the subtable a mix of positioning rules with different formats... but on the few sample fonts I was looking at, the results in terms of savings are very similar to yesterday's.
The new timings after that change are:
    Runtimes **before** the change (computing the actual value formats)
        one         0.23  0.60  0.04  0.60  0.31  0.13  0.51  1.85  1.30  0.08  0.79  0.63  0.36  0.72
        max         0.26  0.56  0.06  0.61  0.31  0.14  0.56  2.01  1.33  0.25  0.88  0.63  0.37  0.85
        auto        1.30  0.60  0.04  0.66  0.35  0.11  0.57  1.99  1.26  0.08  0.82  0.63  0.39  0.78
        1           0.88  1.90  0.15  2.12  1.04  0.30  1.18  2.59  5.24  0.19  2.18  2.22  1.05  2.08
        2           0.89  1.92  0.15  2.18  1.06  0.31  1.24  2.60  5.33  0.15  2.11  2.15  1.03  2.10
        3           0.88  1.87  0.14  2.06  1.13  0.30  1.21  2.53  5.57  0.19  2.15  2.17  1.06  2.11
        4           0.94  1.92  0.17  2.04  1.04  0.30  1.19  2.61  5.27  0.16  2.11  2.10  0.98  2.08
        5           0.85  1.88  0.15  2.07  1.05  0.31  1.17  2.64  5.55  0.18  2.19  2.14  1.00  2.13
        6           0.86  1.85  0.14  2.05  1.01  0.26  1.17  2.64  5.27  0.15  2.09  2.24  0.95  2.16
        7           0.91  2.01  0.14  2.00  1.04  0.31  1.17  2.54  5.32  0.17  2.11  2.10  0.95  2.10
        8           0.84  1.85  0.17  1.99  1.00  0.29  1.13  2.61  5.16  0.15  2.11  1.97  0.94  2.07
        9           0.75  1.72  0.12  1.85  0.98  0.29  1.03  2.39  4.73  0.16  1.74  1.48  0.90  1.73
    Runtimes **after** the change (assuming the same value formats for all subtables)
        one         0.25  0.82  0.04  0.67  0.34  0.16  0.56  2.18  1.38  0.21  0.87  0.75  0.53  0.83
        max         0.25  0.69  0.04  0.71  0.37  0.13  0.66  2.06  1.21  0.09  0.92  0.76  0.42  0.98
        auto        1.62  0.72  0.05  0.66  0.39  0.18  0.61  2.08  1.39  0.10  0.98  0.74  0.40  0.84
        1           0.47  0.97  0.11  1.15  0.51  0.22  0.91  2.19  1.97  0.11  1.18  1.17  0.63  1.25
        2           0.50  0.95  0.08  1.20  0.51  0.23  1.03  2.29  1.92  0.13  1.14  1.14  0.61  1.14
        3           0.48  1.10  0.08  1.14  0.55  0.19  0.91  2.19  1.84  0.11  1.23  1.24  0.56  1.17
        4           0.46  1.03  0.08  1.11  0.47  0.19  0.95  2.24  1.93  0.09  1.25  1.23  0.60  1.18
        5           0.49  0.95  0.08  1.08  0.54  0.23  0.97  2.31  1.76  0.14  1.36  1.11  0.57  1.28
        6           0.46  0.95  0.12  1.18  0.54  0.21  0.89  2.15  1.92  0.11  1.29  1.18  0.57  1.24
        7           0.49  1.01  0.08  1.12  0.44  0.22  0.97  2.25  1.78  0.13  1.27  1.17  0.58  1.25
        8           0.50  0.95  0.08  1.16  0.54  0.19  0.83  2.15  1.94  0.10  1.24  1.09  0.57  1.18
        9           0.42  0.97  0.08  1.06  0.49  0.23  0.88  2.15  2.03  0.21  1.22  0.98  0.56  1.18

I added another performance optimization, using int bitmasks instead of frozensets to represent which lines are in a cluster. That reduces timings a tiny bit. Then I also implemented the precise ClassDef format computation and that made everything slow again.

These are the latest runtimes after my changes today:
    Runtimes:
        one         0.37  0.93  0.04  0.82  0.40  0.15  0.71  2.14  1.61  0.09  0.92  0.86  0.46  0.90
        max         0.38  0.87  0.04  0.90  0.41  0.21  0.68  2.37  1.43  0.24  0.93  0.71  0.44  1.06
        auto        1.85  0.89  0.05  0.90  0.43  0.21  0.74  2.36  1.52  0.09  1.02  0.74  0.46  1.03
        1           0.68  1.65  0.15  1.64  0.77  0.25  1.16  2.64  2.52  0.13  1.60  1.41  0.82  1.61
        2           0.70  1.48  0.11  1.59  0.75  0.32  1.11  2.62  2.53  0.17  1.58  1.41  0.89  1.63
        3           0.73  1.58  0.11  1.62  0.73  0.32  1.10  2.56  2.59  0.13  1.55  1.39  0.71  1.57
        4           0.67  1.45  0.12  1.58  0.74  0.32  1.12  2.60  2.63  0.15  1.55  1.33  0.76  1.54
        5           0.67  1.51  0.12  1.60  0.70  0.29  1.08  2.57  2.51  0.13  1.50  1.29  0.71  1.49
        6           0.69  1.47  0.15  1.58  0.74  0.26  1.12  2.64  2.45  0.16  1.52  1.30  0.70  1.52
        7           0.72  1.45  0.10  1.52  0.73  0.33  1.12  2.62  2.53  0.12  1.50  1.36  0.70  1.52
        8           0.77  1.46  0.11  1.60  0.71  0.32  1.09  3.03  2.56  0.17  1.68  1.34  0.70  1.52
        9           0.66  1.60  0.11  1.50  0.78  0.25  1.06  2.50  2.55  0.12  1.77  1.31  0.70  1.56

I also updated the spreadsheet at: https://docs.google.com/spreadsheets/d/1qUjbvmrGeVxL1_yofX8VTN2HPqvHKVnRqovPUOBSfGk/edit#gid=1294503886

Make otlLib.optimize.gpos that can be executed

Run on Roboto

Check performance with pypy

change the default otlLib builder to delete columns with all zero kerning

Build graph with binary vectors of columns, build spanning tree in that graph, and only consider edges along the spanning when trying to merge?

Okay I've taken this for a drive now and fully studied the main loop as well. You've done most of the obvious optimizations indeed :).
Alternative would be to create the cost matrix (maybe in numpy this time!) and modify that matrix by removing row/columns and adding one, to avoid redoing the n^2 cost calls every round. But since you've memoized those all, not a huge deal.
Let me think about further ideas.

    Runtimes:
        1           0.51  1.07  0.09  1.10  0.56  0.22  0.85  2.01  2.05  0.11  1.30  1.29  0.56  1.15
        2           0.51  1.04  0.09  1.11  0.55  0.24  0.92  2.13  2.04  0.23  1.40  1.41  0.58  1.22
        3           0.53  1.13  0.09  1.14  0.54  0.24  0.89  2.08  2.06  0.11  1.32  1.17  0.58  1.31
        4           0.57  1.06  0.09  1.11  0.55  0.21  0.89  2.09  2.89  0.13  1.36  1.12  0.57  1.27
        5           0.53  1.07  0.09  1.09  0.52  0.20  0.88  2.14  2.33  0.10  1.35  1.20  0.63  1.23
        6           0.55  1.02  0.10  1.11  0.55  0.23  0.88  2.08  2.01  0.13  1.38  1.09  0.57  1.21
        7           0.55  1.07  0.11  1.12  0.53  0.21  0.89  2.07  2.11  0.10  1.36  1.12  0.56  1.22
        8           0.52  1.06  0.09  1.08  0.53  0.20  0.88  2.18  2.17  0.13  1.36  1.07  0.56  1.23
        9           0.57  1.08  0.09  1.05  0.52  0.20  0.86  2.11  2.22  0.12  1.37  1.07  0.56  1.32

Review from Cosimo:

Config = flat dict, namespaced keys with first module path and then last word is the name of the option, like a lib => let's call it lib eve? Maybe confusing. Config is better

From your module, look it up and you're done
We could maintain a global config dictionary in fontTools.config that has default values, and if you create a TTFont without bothering to pass any config, then you get the default values.
The dict passed by the user at TTFont() time can be merged (dict.update()) into the default config object
Maybe deprecate other parameters (TTFont constructor, "optimize" option to varLib, which is used for something else) and replace them by matching parameters in the new TTFont config.

Make sure that all top-level public-facing interfaces (TTFont constructor but also varLib.build) where you might want to set configuration and actually allow passing configuration options. Add parameter "fonttools config" in ufo2ft that can be passed to fontTools
Disable by default; since it's a trade-off (it takes some time to run and WOFF2 size my go slightly up) then it should be up to the user to enable it
Add comment in the code about hooking it deep in fontTools so that it happens before overflow resolution

TODO: move back to using ENV for this; move the TTFont.Config discussion to another issue.

I added a few tests that show the characteristics of the algorithm and of the mode values on various block matrices.
https://github.com/fonttools/fonttools/pull/2326/commits/df2cc1be479e4e5160956a41825e06bf241f08dd#diff-2f44d7efe42b96d7eca7d77f650692ba03645174de2f65f2954f5d8c28a8a559R129-R148
I now consider that the PR is ready for review and merge, so I've removed the WIP. Since this optimization will be off by default / opt-in, I think that the further performance testing can be done in another PR, as a prerequisite to maybe enabling some optimization by default for everyone.