Error fingerprinting

I found this library immensely useful. There was one thing that was missing for my use case, which is error message fingerprinting.
A fingerprint is a unique ID of error event, which allows to correlate user-friendly error reported to user with the more detailed error report stored, in my case, in application log.
I decided to contribute my solution to this project with hope that such functionality will be useful for more people.

Codecov Report

Merging #43 into master will increase coverage by 0.38%.
The diff coverage is 94.59%.

@@             Coverage Diff              @@
##             master      #43      +/-   ##
============================================
+ Coverage     91.54%   91.93%   +0.38%
- Complexity      195      207      +12
============================================
  Files            22       23       +1
  Lines           426      459      +33
  Branches         53       56       +3
============================================
+ Hits            390      422      +32
- Misses           21       22       +1
  Partials         15       15

Impacted Files
Coverage Δ
Complexity Δ

.../me/alidg/errors/conf/ErrorsAutoConfiguration.java
90.47% <100%> (+0.47%)
11 <0> (+1)
:arrow_up:

...rc/main/java/me/alidg/errors/WebErrorHandlers.java
100% <100%> (ø)
22 <4> (+3)
:arrow_up:

...ors/adapter/DefaultHttpErrorAttributesAdapter.java
100% <100%> (ø)
6 <1> (+1)
:arrow_up:

src/main/java/me/alidg/errors/HttpError.java
81.81% <100%> (+5.15%)
9 <2> (+3)
:arrow_up:

...idg/errors/fingerprint/MD5FingerprintProvider.java
89.47% <89.47%> (ø)
4 <4> (?)

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 767f0a7...28a6ae9. Read the comment docs.

Hey @zarebski-m, hope you’re doing well. The idea of having a fingerprint for errors looks very compelling to me. I had a very quick scan on the code, it’s very solid, great job 👍👍.
I will review the PR in the next couple of days and then we’re good to go further. Thanks for your great idea and implementation, happy coding 👍😊

I had a few minor tweaks here and there.
Great Work, Thanks for your contribution 🙏
Merging Now 👍


[douyutv] Use new api

use lapi for flv info, and html5 api for room info
#10153

Sorry for being late. Could you squash all commits into a single one?

@yan12125 open a new PR?

Either pushing to this PR with --force or opening a new one is fine.


Garbled Chinese characters

Hi, did you meet the problem that Chinese characters become a messy in nvim under this config? I guess the below line might fix this problem.
vim.opt.fileencodings = 'utf-8'

See the help page :h fileencodings, your file mess up because your file have wrong encoding.

I've set encoding with value 'utf-8'. And it works on my machine.


crypto - migrate tests from Junit4 to Junit5

Module crypto
eg
public class HashTest

Add dependency for junit.jupiter (junit5)
Migrate per https://blogs.oracle.com/javamagazine/post/migrating-from-junit-4-to-junit-5-important-differences-and-benefits
Remove dependency on junit 4

Here's an example https://github.com/hyperledger/besu/pull/5525/files

Hey @macfarla, if you could take a look at my PR that would be great! I plan to migrate tests for other folders as well


refactor(blockifier_reexecution): allow overriding chain ID explicitly

[!WARNING]
This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
Learn more

#1974  👈
#1973
#1972
#1971
#1970
main

This stack of pull requests is managed by Graphite. Learn more about stacking.

Join @dorimedini-starkware and the rest of your teammates on  Graphite


Packets arriving out of order

I am currently experiencing a problem with the capture component of Moloch.
I have a lot of "acked-unseen-segment-src" and "acked-unseen-segment-dst" in my tags (1 out of 10 sessions have this tag).
When I investigate why, I see that actually all packets are there, both they are not recorded in the correct order. If I sort the packets on timestamp, then everything is okay!
I did a capture with tcpdump on the same machine and of the same session as a Moloch capture. Both captures (the one captured by Moloch and the one capture by tcpdump) are in attachement.
Both contain 67 packets.
Does anyone have an idea.   Have you tried the tpacketv3 reader and see if that fixes the issue?  This may require that you turn off rx-vlan-offload which isn't possible on your card :(  does this happen with sessions without vlan packets?
Unfortunately in moloch there is no easy fix since we assume we will receive the packets in timestamp order, which isn't happening in this case.
However, this doesn't really matter unless you are trying to use moloch to diagnose network issues directly.  Moloch will still reassemble the tcp session correctly, but it will look like it sent them out of order instead of the driver/kernel/.. mixing up the order.


Update go-framed-msgpack-rpc

This includes debug tags, and
the fix for a hang on
cancellation.

@jzila vendoring normally will also pull in the debug tags change. We can keep that out of client longer, but that would make the vendored version diverge from the real one.

Let's pull it in.

:+1:

Appveyor failure seems unrelated, merging


Change term - MaterialCitation to MaterialMention

Term change

Submitter: Carlos Martínez
Efficacy Justification (why is this change necessary?): To expand the term definition and match it to its intended use, as per the examples provided and subsequent discussion.
Demand Justification (if the change is semantic in nature, name at least two organizations that independently need this term): As presented in https://github.com/tdwg/dwc/issues/329#issuecomment-893080620, plus institutional collections, archives, and data managers. It reflects a broader spectrum of physical evidence-based Occurrence sources amenable to digitization and text-mining, and the interest of institutions in adding records of historical holdings to their databases.
Stability Justification (what concerns are there that this might affect existing implementations?): The original term MaterialCitation is currently in production. If quickly replaced by MaterialMention, there should be no stability concern.
Implications for dwciri: namespace (does this change affect a dwciri term version)?:

Current Term definition: https://dwc.tdwg.org/list/#dwc_MaterialCitation
Proposed attributes of the new term:

Term name (in lowerCamelCase for properties, UpperCamelCase for classes): MaterialMention

Organized in Class (e.g., Occurrence, Event, Location, Taxon): The proposal is for a Class of basisOfRecord property

Definition of the term (normative): An intangible result of mentioning a physical evidence-based Occurrence in a source.

Usage comments (recommendations regarding content, etc., not normative): This class constitutes a replacement value to the MaterialCitation value for the controlled vocabulary in the recommendations for basisOfRecord. When importing Darwin Core Archives of literature-based datasets to GBIF, the basisOfRecord should be changed from “Occurrence”, "PreservedSpecimen", "Literature", or “MaterialCitation” to "MaterialMention". To be used even when the original physical evidence of the Occurrence is no longer preserved in a collection. Usage not to overlap with records of an Occurrence without physical evidence (e.g., a human observation taken from field notes or the literature).

Examples (not normative):
the mention of a fossil specimen from a scientific collection in a taxonomic treatment in a scientific publication.
the mention of a preserved specimen in an unpublished collection catalog book.
the mention of a material sample in a field note book.
the mention of a microscope slide in a card catalog or seller's invoice letter
the mention of a jar with multiple specimens in a loan invoice

Refines (identifier of the broader term this term refines; normative): None

Replaces (identifier of the existing term that would be deprecated and replaced by this term; normative): http://rs.tdwg.org/dwc/terms/MaterialCitation

ABCD 2.06 (XPATH of the equivalent term in ABCD or EFG; not normative): Not in ABCD.

@debpaul @deepreef , could you please see if the new proposed definition makes sense and matches the examples? I tried to abduct the definition from the broader context of MaterialMention(s), including but not limited to MaterialCitation(s). I also tried to align the wording of the new definition with other existing DwC definitions.

We really should NOT change term local names when we change definitions. They are not descriptive names or labels -- they are part of a permanent, universally unique identifier for the term (along with the namespace they form the IRI that identifies the term). We can change the labels as much as we want without breaking anything but we should never change the IRIs.
We made this mistake when we changed dwc:individualID to dwc:organismID and we should not do it again.

I don't see what the difference is between  MaterialCitation and MaterialMention. Effectively they mean the same thing.

@qgroom , I don't think that they mean the same, at least in Plazi's view and mine. MaterialCitation is constrained to published works. MaterialMention is an abduction encompassing both published and unpublished mentions of specimens.

I strongly believe that MaterialCitation should not be constrained to "published" (sensu stricto) works -- in part because the definition of "published" is highly ambiguous, and in part because there is nothing to be gained by restricting the scope of this class in such a way.  If it's important to people to be able to filter on the subset of MaterialCitation instances that appeared in works that meet some pre-defined threshold of "published", then we can add one or more properties to this class to capture this kind of information.
Or, alternatively, we can just define the word "published" in the context MaterialCitation to mean "any form of documented information".  But my preference would be to replace the words "scholarly publications" in the definition to "documented sources" (or something similar).
But I don't think it makes sense to maintain two separate classes with essentially identical properties, where in many cases it is entirely arbitrary which of the two classes a particular instance belongs.

I strongly believe that MaterialCitation should not be constrained to "published" (sensu stricto) works -- in part because the definition of "published" is highly ambiguous, and in part because there is nothing to be gained by restricting the scope of this class in such a way.

+1 @deepreef and I think this makes it easier too for everyone to cite grey literature.

Thanks, @debpaul !  Yeah, from my perspective, it's actually all grey -- just different shades.

Expanding the definition and examples of MaterialCitation works for me as well. Would it work for Plazi?

Expanding the definition and examples of MaterialCitation works for me as well. Would it work for Plazi?

I know that @myrmoteras expressed an intention to restrict it to "published" works only, but I'm not sure how strongly he feels this way.  Perhaps he or someone else from PLAZI can comment?

I am against the change.
In the taxonomic world we deal with publsihed works that we consider relevant to build up, for example, our naming system. The Codes are very precise about what publications are to allow to make a name available.
A materialCitation is a requirement to create a new species as part of a taxonomic treatment as part of a publication.
This is a subset of what is being discussed here, but a  relevant one, because it is also the result of a scientific study.
The act of the identification of the specimen cited in the MaterialCitation is documented and reprdouciible because it does not only include a taxonomic name but also the specifici treatment.
Why not create a new term materialMention in the meaning discussed here? it then cold inlcude anything that mention a specimen, and if one doesn't care also the MaterialCitation.
Finally, there are now over 1M MaterialCitation produced.

Thanks, @myrmoteras !  Could you provide a definition for "scholarly publications" as it applies to MateiralCitation?  Is peer review required?  If so, how would peer review be defined?  Or, would you adopt the definition of "publication" in the sense of the ICZN Code (in which case electronic works would need to be registered in ZooBank, among other things)?

Why not create a new term materialMention in the meaning discussed here? it then cold inlcude anything that mention a specimen, and if one doesn't care also the MaterialCitation.

What properties would apply to MaterialCitation but not MaterialMention, and vice-versa?  Would it always be obvious whether a particular instance should belong to one class or the other, or would MaterialCitation be a subclass of MaterialMention?

Finally, there are now over 1M MaterialCitation produced.

That's wonderful!  But it's not a reason to restrict the scope of instances included within MaterialCitation to only those that appear in works that meet some arbitrary definition of "scholarly publication".  I still see no reason why DwC needs a new class or superclass term just to allow the distinction of instances that appear within some definition of "published" work.
Don't misunderstand:  I think there is value in being able to identify which MaterialCitation instances appeared in works that meet some prescribed definition of "published".  But establishing this at the class level seems to be the wrong approach.  Much better would be to establish properties like isPeerReviewed or isICZNpublication or whatever other properties help distinguish the subset of instances you're interested in.
If I started sharing MaterialCitation instances derived from, say, NOAA technical reports, or field notes that are scanned and available online, or a PhD thesis, or an unpublished manuscript, etc. -- would those be rejected as inappropriately classified as MaterialCitation instances?  How would they be recognized as such?

This is getting really interesting.
@deepreef , one of the ramifications of this issue, related to your question above, is why to have only properties and classes in the taxonomy of DarwinCore terms, and what is the rank that "leaf" terms belonging to controlled vocabularies should receive. As I see it, one of the main shortcomings of the current taxonomy is exactly that, having just properties and classes, and having "leaf" terms at the ranks of classes. As I am not so experienced with DC, I will make a stop here and ask: Am I missing other categories of terms? If so, which are those?
Then, a Darwin Core class is a special category terms used to group sets of terms for convenience. I don't see why basisOfRecord is just a property, while PreservedSpecimen, FossilSpecimen, LivingSpecimen, MaterialSample, Event, HumanObservation, MachineObservation, Taxon, Occurrence, MaterialCitation, which are just values of the basisOfRecord controlled vocabulary and "leaf" terms, are classes. Do the "classes" matter of discussion here group any other DC terms? I'm not seeing that.
For solving the current issue, I think that we need to look back and reevaluate whether basisOfRecord is just a property, or a class containing the controlled vocabulary terms as properties, or as "examples". And we also need to think if we need to work towards developing the taxonomy itself.

@Archilegt I don't think there is really any question about the types of terms in Darwin Core, or what basisOrRecord is. The semantics, such as they exist are pretty much laid out in the TDWG Standards Documentation Specification (SDS; Machine-readable documents section 4) and Darwin Core RDF Guide.
Section 4.1.2 of the SDS describes three classes that can apply to vocabulary terms: properties (typed as rdf:Property), classes (typed as rdfs:Class), and controlled vocabulary terms (typed as skos:Concept). There are more details in Section 4, but they aren't important here -- you can refer to them if you want to know more.
Section <IP_ADDRESS> of the RDF Guide discusses dwc:basisOfRecord. It makes it clear that dwc:basisOfRecord is a property used to designate the type of a resource. The value of properties used to designate type will be classes. This is related to the general semantic meaning of "type", i.e. what class is the thing a member of.
In this way, dwc:basisOfRecord is different from other terms whose values should be controlled vocabulary terms. For most other terms terms expecting controlled values, the values should be concepts designated by either a controlled value string or an IRI defined as part of a SKOS ConceptScheme. For example, the values of dwc:pathway should be controlled value strings from the Darwin Core pathway controlled vocabulary. But because dwc:basisOfRecord is a type-designating property, its values must be classes. The expectation is that those classes will be the ones defined by Darwin Core. Any class in DwC can be a value, which is why those classes like dwc:PreservedSpecimen have been designed. But some of the classes (like dwc:Occurrence) are also used to group terms. That's currently not the case for some of the classes that are just there to be used as basisOfRecord values.
I hope this clears things up a bit.

@Archilegt One followup comment: there are actually not only classes and properties in Darwin Core. There are only those two types of terms in the main vocabulary, but there are also three ratified controlled vocabularies that are also part of Darwin Core. Their terms are SKOS Concepts. You can see those terms via the "Terms" dropdown at the top of any of the DwC standards documents (establishmentMeans, pathway, and degreeOfEstablishment).

@Archilegt: I defer to @baskaufs on the main parts of your post, but with respect to:

For solving the current issue, I think that we need to look back and reevaluate whether basisOfRecord is just a property, or a class containing the controlled vocabulary terms as properties, or as "examples". And we also need to think if we need to work towards developing the taxonomy itself.

There's been a fair bit of recent discussion on this in the Material-Sample group, especially here and here. I'm sure there's also been other discussions in the dwc issue tracker, as well as some of the recorded sessions from TDWG 2020.

Bit late to the party, but I am with @myrmoteras . I have used dwc:MaterialCitation quite extensively in the examples for TCS dealing with Nomenclatural Types and would not like to see the term changed. I also think that the meaning of 'scholarly publication' can be stretched widely enough to include all the use cases @Archilegt mentions in the initial proposal.

Is there still interest in trying to find a resolution to this controversial issue?

there are now 8.1M material citation in GBIF, 900K from Plazi extracted from 380K treatments, 50K publications, they are re-used from TreatmentBank in BiodiversityPMC, BLR, Pensoft publishers in >40 journals, EJT, MNHN-science press.

To change the term comes at a great cost and lot of  traffic and use of resource that is not needed, and in fact we spend better to liberate data
The term scientific publication can and is stretched already when looking at the 8.1M material citation, as with all the terms like occurrence.
The solution envisioned is to review the term at some time and then decide, most likely, if absolutely needed to create "sub-categories" of sources, such as published scientific literature, field books, reports, etc.
There is no policing instance that punishes the use of a particular term.

I am against change.


Fix MULTI transactions calling the block twice

What this PR does
Currently using a transaction with RedisClient::Cluster#multi actually calls the provided block twice: Once in RedisClient::Cluster::Transaction#execute to work out what node to send the transaction to, and then once again in RedisClient#multi to actually execute the thing. Also, the first time the block is called, the keys are not watched yet, so any get calls you make in there are stale.
This PR fixes the issue by building up a buffer of transaction commands to execute when yielding the block passed to #multi, and then yielding that buffer into RedisClient#multi instead of the user-provided block again. That way, the block only gets called once.
This PR also adds in some machinery to make sure that any commands run on the client during a #multi block happen on the primary; this is almost always what you want to be doing inside a transaction. If you watch a key on a primary but then read it from the replica, it's possible for you to read a stale value that was already known to the primary when you called WATCH; you will then build up a transaction from stale data and your EXEC will succeed where you would expect it to fail.
With this PR, it's possible to do e.g. an atomic swap of two variables with something like this:
$redis = RedisClient::Cluster.new
$redis.with(watch: ['{hash}key1', {hash}key2']) do |txn|
    old_value_1 = $redis.call_v(['GET', '{hash}key1'])
    old_value_2 = $redis.call_v(['GET', '{hash}key2'])
    txn.call_v(['SET', '{hash}key1', old_value_2])
    txn.call_v(['SET', '{hash}key2', old_value_1])
end

Note, though, that it's not possible to actually pass watch: keys to multi if you're using redis-cluster-client through the redis-rb and redis-clustering gems. That should be a very simple fix however: https://github.com/redis/redis-rb/pull/1236
What this PR doesn't do
Even with this change, using Redis::Cluster#multi from redis-clustering/redis-rb is pretty wonky. Something like this does work and swap the keys:
$redis = Redis::Cluster.new
$redis.set('{hash}key1', 'value1')
$redis.set('{hash}key2', 'value2')

$redis.watch(['{hash}key1', '{hash}key2']) do
  orig_key1 = $redis.get '{hash}key1'
  orig_key2 = $redis.get '{hash}key2'
  $redis.multi do |txn|
    txn.set '{hash}key1', orig_key2
    txn.set '{hash}key2', orig_key1
  end
end

But, support for unwatching and not committing the transaction is broken. This throws RedisClient::Cluster::AmbiguousNodeError because the router doesn't know what node to send UNWATCH to.
$redis = Redis::Cluster.new
$redis.set('{hash}key1', 'value1')
$redis.set('{hash}key2', 'value2')

$redis.watch(['{hash}key1', '{hash}key2']) do
  orig_key1 = $redis.get '{hash}key1'
  orig_key2 = $redis.get '{hash}key2'
  # whelp, we didn't like what we read from our gets.
  $redis.unwatch
end

This happens because there's nothing storing the idea that a transaction is happening around the entire watch block; the Redis::Cluster::Transaction is only created around a call to #multi. On a similar note, nothing stops you from watching or getting keys from multiple different hash slots in your transaction. For example, this will work, but shouldn't.
$redis = Redis::Cluster.new
$redis.set('{hash1}key1', 'value1')
$redis.set('{hash2}key2', 'value2')
$redis.watch(['{hash1}key1']) do
  $redis.watch '{hash2}key2'
  orig_key1 = $redis.get '{hash1}key1'
  orig_key2 = $redis.get '{hash2}key2'

  # some other process changes the value of key2 after we read it
  Thread.new { Redis::Cluster.new.set('{hash2}key2', 'hahahaha') }.join

  # This will commit, but shouldn't, because we're not _really_ watching key2; it's on another node
  # to the one with the transaction
  $redis.multi do |txn|
    txn.set '{hash}key1', orig_key1 + orig_key2
  end
end

I played around for a couple of days trying to work out the right way to fix this, but didn't really land on anything I like. I'm open to ideas if you can think of any good way to do this though. The closest I came up with was this idea about maintaining some transaction state in RedisCluster::Client, but the thing that makes it tricky is that Redis::Cluster#watch (which is actually Redis::Commands::Transactions#watch) just does call_v([:watch] + keys]) and then send_command([:unwatch]) in a begin/rescue block; it doesn't pass the watch block to RedisClient::Cluster at all to invoke which means it's difficult to maintain our own state reliably in redis-clustering.
Anyway, as I said, if you can think of a way to make this work nicely I'm all ears.
Thanks for your review!

Thank you for your pull request. Please give me some time to look into it.

Thank you @supercaracal - of course, this stuff is incredibly complicated so it's worth going over carefully!
Just as an update - I had another go at fixing the "What this PR doesn't do" problem with using redis-cluster-client through redis-rb's #watch and #multi method above. I made a draft PR which solves both problems with a different approach: https://github.com/redis-rb/redis-cluster-client/pull/295
The approach in that PR is to add the idea of an "implicit transaction". Essentially, the client starts a RedisClient::Cluster::Transaction instance when a WATCH or MULTI command is issued, and discards that when a EXEC, DISCARD or UNWATCH is issued. The RedisClient::Cluster keeps track of whether or not it has an active transaction; if it does, it routes commands to the transaction instead of to the @router directly.
The RedisClient::Cluster::Transaction object accepts the commands and sends them to a single Redis connection to a single Redis node. Any cross-node access whilst a transaction is active on the connection results in a TransactionConsistencyError.
That PR makes my not-working example above actually work; I wrote a series of tests in redis-rb which will pass with that other PR: https://github.com/redis/redis-rb/compare/master...zendesk:redis-rb:ktsanaktsidis/cluster_txn_tests
The "implicit transaction" approach certainly adds some complexity to the implementation of redis-cluster-client. The interface between redis-rb and redis-client for single-node watch is really oriented around the idea that the connection itself carries the implicit state as to whether it's watching something or not. I think the idea of storing an "implicit transaction" inside the RedisClient::Cluster object is the easiest way to make redis-cluster-client mimic this interface. I grant you that it is a very strange interface though.
A better interface for doing watches with cluster client is something like this, I think:
$redis.watch do |txn|
    txn.watch "{slot}key1"
    x = txn.get("{slot}key1")
    txn.multi do |pipeline|
        pipeline.set "{slot}key1" x + 1
    end
end

That makes the implicit state of the transaction created by watch actually explicit! However, that's not how redis-rb or redis-client work, so obviously this would be a breaking change and a total non-starter.

tl;dr: should we consider the approach in https://github.com/redis-rb/redis-cluster-client/pull/295 instead?

I'd say that the redis-cluster-client should be simple. So I'd like to allow only an interface for transactions feature by single-method calling with a block. Also I want to deny an independent calling by a WATCH command with throwing an error. Ofcourse the redis-cluster-client should be aware of the redis-clustering usabilities, but I'd say that it would be better to prevent to be affected by the design too much.
I think your idea to use #with method is good. The redis-clustering gem aside, how about the following example of the interface?
redis = RedisClient.cluster.new_client
redis.with(key: '{key}1', primary: true) do |r|
  v1 = r.call('GET', '{key}1')
  v2 = r.call('GET', '{key}2')
  r.multi(watch: %w[{key}1 {key}2]) do |tx|
    tx.call('SET', '{key}1', v2)
    tx.call('SET', '{key}2', v1])
  end
end

I think your idea to use #with method is good.

Actually I realise it was a mistake in my original message. When I wrote $redis.with, I meant $redis.multi. So, the example above (which this PR does make work) should be:
$redis = RedisClient::Cluster.new
$redis.multi(watch: ['{hash}key1', {hash}key2']) do |txn|
    old_value_1 = $redis.call_v(['GET', '{hash}key1'])
    old_value_2 = $redis.call_v(['GET', '{hash}key2'])
    txn.call_v(['SET', '{hash}key1', old_value_2])
    txn.call_v(['SET', '{hash}key2', old_value_1])
end

how about the following example of the interface?

The idea is that calling #with yields a RedisClient which is locked to a particular node of the cluster, right? I think this is actually a really good idea (and way better than my idea).
I guess the implementation would be that RedisClient::Cluster#with yields a proxy object, which delegates all accesses to a particular underlying RedisClient right? The proxy object would be able to verify that all keys accesed through it are for the same slot (we could just send the commands to the Redis server without checking, but the Redis server will only complain about keys if they are on the wrong node; this way we can make sure people don't write transactions that accidently work until they scale out their cluster).
The really good thing about this is that RedisClient defines #with as:
  def with(_options = nil)
    yield self
  end

i.e. it accepts and ignores options; so, you can easily write code which is compatible with both RedisClient and RedisClient::Cluster - just call with(key: ...) unconditionally, which will be a no-op on non-clustreed redis.
Regarding redis-clustering, I think if we have this interface in redis-cluster-client, we can implement a Redis::Cluster#watch and Redis::Cluster#multi method in in redis-clustering which calls RedisClient::Cluster#with as you described in your example. This would allow us to implement at least the block-based form of Redis::Cluster#watch properly.
I'll play around with implementing this + the redis-cluster-client side this week and open another PR so we can compare the approach - does that work for you?
Thanks so much for giving this some deep thought by the way!

We are on the same page.

does that work for you?

Yes, it does. Thank you so much!


Catching unhandled exceptions when starting language server by LanguageClient

When starting a language server (in my case python), which fails, there are a few exceptions that cannot be caught:

Error: Pending response rejected since connection got disposed
at Object.dispose (...\dist\extension.js:8861:27)
at Object.dispose (...\dist\extension.js:5418:35)
at LanguageClient.handleConnectionClosed (...\dist\extension.js:5009:34)
at LanguageClient.handleConnectionClosed (...\dist\extension.js:3447:22)
at closeHandler (...\dist\extension.js:4996:18)
at CallbackList.invoke (...\dist\extension.js:6843:39)
at Emitter.fire (...\dist\extension.js:6905:36)
at closeHandler (...\dist\extension.js:8008:26)
at CallbackList.invoke (...\dist\extension.js:6843:39)
at Emitter.fire (...\dist\extension.js:6905:36)
at StreamMessageWriter.fireClose (...\dist\extension.js:7455:27)
at Socket.<anonymous> (...\dist\extension.js:7487:42)
at Socket.emit (node:events:513:28)
at Pipe.<anonymous> (node:net:757:14)

Error: Client is not running and can't be stopped. It's current state is: starting
at LanguageClient.shutdown (...\dist\extension.js:4818:19)
at LanguageClient.stop (...\dist\extension.js:4789:21)
at LanguageClient.stop (...\dist\extension.js:3417:22)
at LanguageClient.doInitialize (...\dist\extension.js:4771:27)
at async LanguageClient.start (...\dist\extension.js:4626:13)
at async restartServer (...\dist\extension.js:440:9)
at async ...\dist\extension.js:50:20

The problem is that VSCode for all unhandled errors creates an "unhandledError" telemetry event. For correct analysis of telemetry data, you must manually create an event that indicates a specific problem. In this case, for example, "serverStartFailed".
Yes, I can set initializationFailedHandler in the LanguageClientOptions and create the necessary telemetry event in it. But VSCode will still create a duplicate "unhandledError" event, because the error is not caught.
Another bewilderment is that the server's stderr output can only be received in the outputChannel. Why not pass it as an argument to initializationFailedHandler? Or create a corresponding attribute in the LanguageClient class? To understand what happened to the user, I need to send all the information from the outputChannel to the telemetry server, including unnecessary information.
It also looks strange to automatically try to stop a server that is not running, which leads to another error. And it also automatically sent to telemetry...
Thanks!

I am open for improvements here. PR welcome.


[v4] Remove "vue/html-self-closing" ESLint rule

Currently as workaround for the following issue:

https://github.com/parcel-bundler/parcel/issues/2924
https://github.com/vuejs/eslint-plugin-vue/issues/876

Skipped rule by using "essential" instead of "recommend" rule set.


Scrape Data from Antitrust page https://www.competitionpolicyinternational.com/?s=Google

[x] Scrape articles for 5 platforms
[x] Merge
[x] Extract fines
[x] Extract countries
[x] Remove unavailable articles
[x] Optional: Remove articles when no mention of 5 platforms

Total number of articles: 7611

[ ] Drop duplicate articles

Example:

[ ] Remove non-English articles before tokenizing

For example, in STM, one topic is for Latin articles:

After removing duplicates and non-English articles,
Total number of articles: 4256


ProcessRequestAuthentication using stale Ticket

https://github.com/Jasig/dotnet-cas-client/blob/master/DotNetCasClient/CasAuthenticationModule.cs
method OnAuthenticateRequest
line 144 CasAuthentication.ProcessTicketValidation();
This method checked for a new ticket, it then places this in to the Response, The next call is
line 148 CasAuthentication.ProcessRequestAuthentication()
This method uses the ticket from the previous request, and not the new one.
Do you know why? This means that the CAS Principle is not updated on the request leaving it stale.

Fixed in pull request #71.

Included in release 1.2.0


GATHER: not supported by armnn: in validate_arguments src/core/CL/kernels/CLGatherKernel.cpp:41: indices->num_dimensions() > 1

GATHER: not supported by armnn: in validate_arguments src/core/CL/kernels/CLGatherKernel.cpp:41: indices->num_dimensions() > 1

Hi @luchangli03
Can you provide any more details on the issue?
Such as:
ArmNN Version,
ACL version,
TfLite version,
System OS,
what device is being used,
Model information ( can you link the model? )
How are you running the delegate?
Regards,
Ryan

ArmNN Version：armnn-22.05.01
TfLite version: 2.15
System OS: android
Model information：I can not directly provide the model, but many transformer based NLP models contain gather op.

How many dimensions are trying to get passed in to the indices?

Hey @luchangli03
Again, I will close this on October 10th if I do not hear from you.
Thank you,
Keith


Reproducible Build script failure

Hello team Blockstream Jade!
Danny here from WalletScrutiny.com. I'm currently trying to build 1.0.33
This is our current build script over at gitlab.
This is the result when building 1.0.33:
=> CACHED [esp-idf 2/2] RUN cd ~/esp/esp-idf && git checkout c8fc5f643b7a7b0d3b182d3df610844e3  0.0s
 => ERROR [esp-qemu 1/2] RUN git clone --quiet --depth 1 --branch esp-develop-9.0.0-20240606 -  73.6s
------
 > [esp-qemu 1/2] RUN git clone --quiet --depth 1 --branch esp-develop-9.0.0-20240606 --single-branch --recursive --shallow-submodules https://github.com/espressif/qemu.git && cd qemu && git checkout abb5ce24386972e048b401f9eca10e90b8427a20:
#11 6.170 Note: switching to 'abb5ce24386972e048b401f9eca10e90b8427a20'.
#11 6.170
#11 6.170 You are in 'detached HEAD' state. You can look around, make experimental
#11 6.170 changes and commit them, and you can discard any commits you make in this
#11 6.170 state without impacting any branches by switching back to a branch.
#11 6.170
#11 6.170 If you want to create a new branch to retain commits you create, you may
#11 6.170 do so (now or later) by using -c with the switch command. Example:
#11 6.170
#11 6.170   git switch -c <new-branch-name>
#11 6.170
#11 6.170 Or undo this operation with:
#11 6.170
#11 6.170   git switch -
#11 6.170
#11 6.170 Turn off this advice by setting config variable advice.detachedHead to false
#11 6.170
#11 46.92 fatal: could not read Username for 'actual link auto-removed by Blockstream for security reasons No such device or address
#11 46.92 fatal: clone of 'https://github.com/Zeex/subhook.git' into submodule path '/qemu/roms/edk2/UnitTestFrameworkPkg/Library/SubhookLib/subhook' failed
#11 46.92 Failed to clone 'UnitTestFrameworkPkg/Library/SubhookLib/subhook'. Retry scheduled
#11 47.11 fatal: could not read Username for 'actual link auto-removed by Blockstream for security reasons No such device or address
#11 47.11 fatal: clone of 'https://github.com/Zeex/subhook.git' into submodule path '/qemu/roms/edk2/UnitTestFrameworkPkg/Library/SubhookLib/subhook' failed
#11 47.11 Failed to clone 'UnitTestFrameworkPkg/Library/SubhookLib/subhook' a second time, aborting
#11 47.11 fatal: Failed to recurse into submodule path 'roms/edk2'
------
executor failed running [/bin/sh -c git clone --quiet --depth 1 --branch ${ESP_QEMU_BRANCH} --single-branch --recursive --shallow-submodules https://github.com/espressif/qemu.git && cd qemu && git checkout ${ESP_QEMU_COMMIT}]: exit code: 1

Update: Initially I thought it was a configuration issue on our end, but I tested on two machines.
It turns out the problem is in one of the submodules:

Zeex/subhook is a sub-submodule - it's a submodule of EDK2, which itself is a submodule of QEMU.

Most likely this line, in the jade Dockerfile:
RUN git clone --quiet --depth 1 --branch ${ESP_QEMU_BRANCH} --single-branch --recursive --shallow-submodules https://github.com/espressif/qemu.git

Yes, we too noticed this has recently broken - as you identify it is a transitive upstream module so not under our control.
We have already raised an issue against the upstream (https://github.com/espressif/qemu/issues/106) who say they'll pick up a fix from further upstream ...
In the meantime they advised not cloning recursively, as that shouldn't be necessary in any case.
Yes, we need to update our Dockerfile - we have removed the '--recursive' from the qemu clone line you show above in a branch, it just hasn't been merged to master as yet.
So our line (which seems to be working well in a CI environment) is:
RUN git clone --quiet --depth 1 --branch ${ESP_QEMU_BRANCH} --single-branch --shallow-submodules https://github.com/espressif/qemu.git \
&& cd qemu && git checkout ${ESP_QEMU_COMMIT}

I will get this change merged to master asap.
(FYI you'll see I recently made a similar change in HWI for their independent build of Jade firmware.
Please note this is not a problem with the release as tagged, it is something that has happened outside of what is controlled by git commits - I imagine it is now not possible to build docker environments for a large number of previous releases using the Dockerfiles as they are in the release.  When we prepared our environment to make the 1.0.33 release it all ran perfectly ...
Are you able to tweak the Dockerfile / that line locally ?

Thank you for the prompt response. Will try again tomorrow.

Thank you! Fixed!
Change applied to WalletScrutiny build script here
1.0.33 build results
Results:
feb8ae2404816c9933f9bc2596329ca5976224c66b3a847c168be65797351d71  jade_1.0.33_10_ble.bin
721a47ee98eb6b91e81b0b2ef2096d99e6fbd83ff25db5f37c883588905103e3  jade_1.0.33_10_ble.built.bin
721a47ee98eb6b91e81b0b2ef2096d99e6fbd83ff25db5f37c883588905103e3  jade_1.0.33_10_ble_stripped.bin
8a8a3d571a7340ddd850db9dff832a991f1b371965100b1b3258666f56ac3b0a  jade_1.0.33_10_ble.bin.gz
The Jade firmware version 1.0.33 10_ble is reproducible with above hashes.
7ad0dbbbfe33267665df5467ce1cbbbb6c3f139562177a276dbfb91d0edaca67  jade_1.0.33_10_noR.bin
684859947657a9d2763cc1f339f3fbfaaab9629ccd45a52ca6c565f48de5b706  jade_1.0.33_10_noR.built.bin
684859947657a9d2763cc1f339f3fbfaaab9629ccd45a52ca6c565f48de5b706  jade_1.0.33_10_noR_stripped.bin
3c9745b08454848c60210c34ff07a4487be9075e467d7e520e932114970405b4  jade_1.0.33_10_noR.bin.gz
The Jade firmware version 1.0.33 10_noR is reproducible with above hashes.
d76a0cf87df6900477b1fbd1512a6d0fc4bf99a7a4c80e04313eb2c1beb4d17c  jade_1.0.33_11_ble.bin
42e3ab3fd5ac0f7c915c67ffc884f33b38ebb6bc0532cb8e94f3b7187871810f  jade_1.0.33_11_ble.built.bin
42e3ab3fd5ac0f7c915c67ffc884f33b38ebb6bc0532cb8e94f3b7187871810f  jade_1.0.33_11_ble_stripped.bin
41d0cf7ce238ccd6d682942335ec3b331e4697dcff62690f3c2f795061ea289a  jade_1.0.33_11_ble.bin.gz
The Jade firmware version 1.0.33 11_ble is reproducible with above hashes.
26230eb16f4e849b98316f4ed1fa8fd3ba4e11d9ff339d5bac4e6934e315ab03  jade_1.0.33_11_noR.bin
bbd84f8f989a705c4df0ca40657324ca983a116c3041c59d4247f7d1b9033c01  jade_1.0.33_11_noR.built.bin
bbd84f8f989a705c4df0ca40657324ca983a116c3041c59d4247f7d1b9033c01  jade_1.0.33_11_noR_stripped.bin
0c87cead4a187ee90fa3f77aec1b7632b49c12fa28bae51193ab14111b9ed936  jade_1.0.33_11_noR.bin.gz
The Jade firmware version 1.0.33 11_noR is reproducible with above hashes.

WS review/fix/build MR is here
Closing issue.
Thanks again!

Nice - many thanks.
Our next release will have that unnecessary (and currently problematic) --recursive flag removed, so hopefully should be better going forward.
:+1:


C2923 when compiling template class Vector3 (Name conflicts with macros)

I was compiling with C++17  MSVC. And it went : 'Float' is not a valid template type argument for parameter 'Float'. And a lot of compiling errors followed.
The errors occurr here (and also the same in the function "max").
template <typename Float>
inline Vector3<Float> min(const Vector3<Float>& a, const Vector3<Float>& b) noexcept
{
   ...
}

I suppose it's because min and max are defined macro in its included files. After changing the name of the funtions to "Min" and "Max", it passes successfully. It can also be solved by undefining min and max at the head of the file.

Another conflict with macro is the variable "near" in Traverser<Float, Primitive, Intersector, Flags>::traverse in traverser.h. It needs to be undefined.
#ifdef near
#undef near
#endif
...

I was compiling with C++17 MSVC.
...
I suppose it's because min and max are defined macro in its included files. After changing the name of the funtions to "Min" and "Max", it passes successfully. It can also be solved by undefining min and max at the head of the file.

Thanks for the note. Does MSVC expose a define that I could use to un-define the macros only in the case of MSVC?

Another conflict with macro is the variable "near" in Traverser<Float, Primitive, Intersector, Flags>::traverse in traverser.h. It needs to be undefined.
#ifdef near
#undef near
#endif
...

https://stackoverflow.com/a/119553/115546
Sounds like a relic from segmented memory days which gets included through some Windows-specific include file.
What is the top-level include that is introducing the macros? I don't have a Windows system to test this.

I was compiling with C++17 MSVC.
...
I suppose it's because min and max are defined macro in its included files. After changing the name of the funtions to "Min" and "Max", it passes successfully. It can also be solved by undefining min and max at the head of the file.

Thanks for the note. Does MSVC expose a define that I could use to un-define the macros only in the case of MSVC?

Another conflict with macro is the variable "near" in Traverser<Float, Primitive, Intersector, Flags>::traverse in traverser.h. It needs to be undefined.
#ifdef near
#undef near
#endif
...

https://stackoverflow.com/a/119553/115546
Sounds like a relic from segmented memory days which gets included through some Windows-specific include file.
What is the top-level include that is introducing the macros? I don't have a Windows system to test this.

Thanks for your reply.
You can use _MSC_VER to test if the compilor is MSVC. It's a macro that identifies the version of MSVC.
The head files where near is introduced is minwindef.h, which defines _MINWINDEF_.

@EasternJournalist Thanks for _MSC_VER to identify MSVC compiler. How is minwindef.h getting included? I don't want to change the names of the functions min/max if possible, and there would be many software projects that would name something min/max so I want to find out how to avoid minwindef.h being included, or undefine min/max before defining them in our vector class. We should not need to change our function names.

Yes. #define NONMINMAX at the very beginning could skip the definition of macros min and maxin minwindef.h. https://stackoverflow.com/questions/13416418/define-nominmax-using-stdmin-max But I simply solve it by undefining like this without identify the compilor and platform.
#ifdef  min
#undef min
#endif

I guess undefining min and max will not cause any trouble, since few third party softwares would use this macro #define min ((a)<(b)?(a):(b)) .
For the problem with near, as is mentioned in https://stackoverflow.com/a/119553/115546.
#ifdef near
#pragma push_macro("near")
#undef near
...
...
#pragma pop_macro ("near")
#endif

But in most cases it can be simply un-defined because it is rarely used now.


quick start guide should tell people "where to go next"

Good point.  Where should they go next though?

Probably quick guide -> full guide -> hands on


Web use cases

Exporting genesets

Submit genesets and get the matching pathways together (nice plot)

Similarity matrix between pathways (find most similar pathways for a selected one)

Manual mapping of KEGG/Reactome table

Histogram distrbution gene set size across pathways

Table for each pathway pair having the comparisons (showing red if pathway overlap was found significant)


Changed drip color of dark logo

fixes issue #815

@KrishAmal these changes look good. Your commit has an invalid email address, is that what you intended?

Perhaps we should pick an entirely different color? Something like a pale/neon yellow?

I think it would be best to discuss this in a separate issue because the light and dark logos would both need to be considered for consistency.  Also, the drip was supposed to be a liquid, presumably water?  So maybe the u should change color?  Also, I think this would be best discussed in an issue.
This PR fixes the problem of the current dark logo not working well with dark backgrounds.

Mountain Dew is a yellow fluid, and at least one Fluo contributor drinks excessive quantities of that :smile:
I'm not sure that my comment requires a new issue... consistency and color change wasn't really my point. I was really just thinking about the dark themed image on its own, and whether this particular change makes the dark themed image look better. I'm not convinced it does. It may be more visible, but I think the color similarity with the other blue makes it look somewhat worse.
I only suggested a color change, because I'm not sure a different shade of blue would look any better. But perhaps if we just go for a much lighter blue, near-white, it would look better?

but I think the color similarity with the other blue makes it look somewhat worse.

IMO this is better than the currently checked in version in which the drip is barely visible on a dark background.

I only suggested a color change, because I'm not sure a different shade of blue would look any better. But perhaps if we just go for a much lighter blue, near-white, it would look better?

I am not sure, choosing colors is not something I am good at.  If you have something specific in mind it might be helpful to specify the RGB coordinates.

I played around with a few settings in GIMP, and I think the dark blue looks way better on a pure black (000000) background, and many other dark background colors (660505, 070858). But it looks terrible on other dark backgrounds, like dark grey (4e4e4e) or dark green (075808). It's probably not so much a matter of "dark background" vs. "light background", but what specific colors.
Maybe this issue needs to be more specific about which background color it looks bad on, so it can be tweaked for that background? For pure black, I think it looks fine as is.

For reference, the dark version is currently being used on a dark grey (333333) background at https://fluo.apache.org ; that's probably the background color which is driving this.

It's probably not so much a matter of "dark background" vs. "light background", but what specific colors.

Makes sense. Testing with the website would be nice.
The color that prompted me to open the issue was the twitter logo as mentioned in the issue #815 .

I'd be more okay with the same color being used twice.

I am ok with that and I am also ok with the current change.

Ah, I took a look at the Twitter logo. I like that color better. It's closer to the original, and sufficiently distinct from the u to not bother me, but it may only work on that particular shade of gray background.
To be clear, I think the color in this change is okay also. It's just a bit of an "uncanny valley" sort of thing for me. It's just so close but ever so slightly different from the u, that it stands out for me as off-putting. But, the color itself isn't a problem. I just think it'd be better if it were more different or identical than in that valley.
In any case, please feel free to adopt whatever you think works best. I'm only offering feedback from one person's pair of eyes, not a -1. If it works for everyone else, go for it. :smile:

@keith-turner Thanks for pointing it out , it was not intended . I've Changed the Email address.

@KrishAmal  thanks for the contribution!!  What did you use to edit the SVG file?  If you are interested in making more contributions and would like help finding something then please get in touch.
Is it ok to add you to our people page as a contributor?  If so, you can give me the info you would like added or you can make a PR to the people page in the website repo.
Are you ok with mentioning your first contributions on Twitter at @ApacheFluo?   If so, do you have a twitter username we could mention?

@KrishAmal thanks for the contribution!! What did you use to edit the SVG file? If you are interested in making more contributions and would like help finding something then please get in touch.

@keith-turner My pleasure that i could contribute ! ,  I used Inkscape(v0.91) for the SVG .
Sure, I'm definitely interested in more contributions , and would really appreciate your help in finding them .

Is it ok to add you to our people page as a contributor? If so, you can give me the info you would like added or you can make a PR to the people page in the website repo.
Are you ok with mentioning your first contributions on Twitter at @ApacheFluo? If so, do you have a twitter username we could mention?

That sounds great , I'm Okay with both. I will give my info here ,
Name:  Amal Krishnan
Timezone:   IST
And my twitter username is @amal_krish
Thanks !


Implement mixed inheritance semantics

Cf. the tests added in https://dart-review.googlesource.com/c/sdk/+/139817, the semantics of mixed inheritance (where a superinterface graph contains both legacy classes and classes with null-safety) is adjusted. This issue is concerned with the implementation of the new semantics.
For further details, see the specification updates in dart-lang/language#897 and the code and comments in the tests added in https://dart-review.googlesource.com/c/sdk/+/139817.

Currently CFE reports the following on nnbd/mixed_inheritance/legacy_resolves_conflict_3_test:
tests/language/nnbd/mixed_inheritance/legacy_resolves_conflict_3_test.dart:48:23: Error: A value of type 'List<int? Function(int?)>' can't be assigned to a variable of type 'List<int Function(int)>'
 - 'List' is from 'dart:core'.
    DiB0().a, DiBq0().a, DiB1().a, DiBq1().a, //
                      ^
tests/language/nnbd/mixed_inheritance/legacy_resolves_conflict_3_test.dart:48:44: Error: A value of type 'List<int? Function(int?)>' can't be assigned to a variable of type 'List<int Function(int)>'
 - 'List' is from 'dart:core'.
    DiB0().a, DiBq0().a, DiB1().a, DiBq1().a, //
                                           ^
tests/language/nnbd/mixed_inheritance/legacy_resolves_conflict_3_test.dart:49:23: Error: A value of type 'List<int? Function(int?)>' can't be assigned to a variable of type 'List<int Function(int)>'
 - 'List' is from 'dart:core'.
    DiB3().a, DiBq3().a, DiB4().a, DiBq4().a, //
                      ^
tests/language/nnbd/mixed_inheritance/legacy_resolves_conflict_3_test.dart:49:44: Error: A value of type 'List<int? Function(int?)>' can't be assigned to a variable of type 'List<int Function(int)>'
 - 'List' is from 'dart:core'.
    DiB3().a, DiBq3().a, DiB4().a, DiBq4().a, //
                                           ^
tests/language/nnbd/mixed_inheritance/legacy_resolves_conflict_3_test.dart:52:12: Error: A value of type 'List<int Function(int)>' can't be assigned to a variable of type 'List<int? Function(int?)>'
 - 'List' is from 'dart:core'.
    DiB0().a, DiBq0().a, DiB1().a, DiBq1().a, //
           ^
tests/language/nnbd/mixed_inheritance/legacy_resolves_conflict_3_test.dart:52:33: Error: A value of type 'List<int Function(int)>' can't be assigned to a variable of type 'List<int? Function(int?)>'
 - 'List' is from 'dart:core'.
    DiB0().a, DiBq0().a, DiB1().a, DiBq1().a, //
                                ^
tests/language/nnbd/mixed_inheritance/legacy_resolves_conflict_3_test.dart:53:12: Error: A value of type 'List<int Function(int)>' can't be assigned to a variable of type 'List<int? Function(int?)>'
 - 'List' is from 'dart:core'.
    DiB3().a, DiBq3().a, DiB4().a, DiBq4().a, //
           ^
tests/language/nnbd/mixed_inheritance/legacy_resolves_conflict_3_test.dart:53:33: Error: A value of type 'List<int Function(int)>' can't be assigned to a variable of type 'List<int? Function(int?)>'
 - 'List' is from 'dart:core'.
    DiB3().a, DiBq3().a, DiB4().a, DiBq4().a, //
                                ^
tests/language/nnbd/mixed_inheritance/legacy_resolves_conflict_3_test.dart:57:61: Error: A value of type 'List<int? Function(int?)>' can't be assigned to a variable of type 'List<int Function(int)>'
 - 'List' is from 'dart:core'.
    List<List<int Function(int)>> xsLegacy = [diB2.a, diBq2.a, diB5.a, diBq5.a];
                                                            ^
tests/language/nnbd/mixed_inheritance/legacy_resolves_conflict_3_test.dart:57:78: Error: A value of type 'List<int? Function(int?)>' can't be assigned to a variable of type 'List<int Function(int)>'
 - 'List' is from 'dart:core'.
    List<List<int Function(int)>> xsLegacy = [diB2.a, diBq2.a, diB5.a, diBq5.a];
                                                                             ^
tests/language/nnbd/mixed_inheritance/legacy_resolves_conflict_3_test.dart:59:12: Error: A value of type 'List<int Function(int)>' can't be assigned to a variable of type 'List<int? Function(int?)>'
 - 'List' is from 'dart:core'.
      diB2.a, diBq2.a, diB5.a, diBq5.a, //
           ^
tests/language/nnbd/mixed_inheritance/legacy_resolves_conflict_3_test.dart:59:29: Error: A value of type 'List<int Function(int)>' can't be assigned to a variable of type 'List<int? Function(int?)>'
 - 'List' is from 'dart:core'.
      diB2.a, diBq2.a, diB5.a, diBq5.a, //
                            ^

because the test expects DiBq0, DiBq1, DiBq2, DiBq3, DiBq4, DiB0, DiB1, DiB3, DiB4, and DiB5 to have legacy signatures. These all explicitly implement the B or Bq classes themselves and their signatures should therefore be B and Bq, respectively, and not the legacy signatures.

Those classes do have members in their direct superinterfaces whose signatures are different. For instance, class DiB3 extends C3 implements B {} which brings together List<int* Function(int*)> get a from C3 and List<int Function(int)> get a from B.
Note that C3 extends Bq with List<int? Function(int?)> get a and C3 doesn't override any members.
We do get the member signature from B, but that's because of the rule NNBD_TOP_MERGE(T*, S) = NNBD_TOP_MERGE(T, S) (and the converse). I was sceptical about that rule (and we can see that NNBD_TOP_MERGE(T*, S) = NNBD_TOP_MERGE(T, S)* would have characterized the situation more correctly), but I can also see that this is the only way we can allow classes like DiB3 to commit (unsoundly) to a specific null-safe member signature in the case where there is a legacy class in the superinterface graph. But that's a separate discussion.
Cf. https://dart-review.googlesource.com/142372.


Installation page is broken, 404 Not Found

Problem
When I navigate to the webpack installation page:
https://webpack.js.org/guides/installation/index.html
the installation page appears for a quick second, and then 404 Not Found appears
This link is the top result on Google when I search "webpack installation"

I was able to replicate this problem on Chrome, Firefox on PC, and Safari on my iPhone device.

It seems like the link:
https://webpack.js.org/guides/installation/#root
works for showing the installation page. But when I am searching up "webpack installation" on google, the top result that pops up is:
https://webpack.js.org/guides/installation/index.html (which is broken)
I think instead of having the page show as 404 Not Found, there should be a redirect to the first link

This seems like a random google issue time to time related to how github pages let google access index.html directly.
Right now it looks like this:

@kevjin can you still reproduce?

We need to know for real why this is happening

I think its github pages allowing crawlers to access files directly

Can be one of the pages linked to index.html at some point and google kept that in memory.... maybe making a sitemap will help

We could also add canonical to page without index.html, should work


Ignore broken link to warnerbros.com

warnerbros.com/[number] always redirect to a 404 page.
Something on the Internet generate a lot of these links and ArchiveBot waste time getting the same error page again and again.

What is an example of a generated URL that matches this pattern?  Can it be moved to its own ignore set?
I don't see any top-level links from www.warnerbros.com that start with a digit, but this still seems quite broad.

From my IRC logs:
$ grep -E 'warnerbros\\.com/(search|\\d)' \#archivebot.log |grep Added|sed -e 's/.* job//g' -e 's/\.$//g'|uniq
 3jfh6szogtb7flpi9wqs39shr
 dsa08ubzi0cwjezztgk4cd12d
 84tzi8n6ce2jwy6xnikfpaylq
 5ixrttsnywybgglutmu8gsj92
 aut8s1q6mobd6vzs0b0n2djxv
 b8ipmeavwif3jml7gvpfwyobi
 c7xa2anxs5sx7uikeftkqmg4s
 exhbzizvydzwuqgm3ifdhb0j2
 auofhdo46oguhzuqt0u6ej8a7
 f4p14yxkmwesvtxvzoqkm5s2x
 9kaatzhjda2si2826xrhn9be6
 4exd7fl7uxkdxlxcrqfm5pzz3
 bxizdre7oq2j8xynrq05klzud
 1vfl9akrst9tixetca2c6az64
 paov7cvyreqyx6cuwpglwfps
 9gk59pper94roo5ras07aspyx
 44kexkyqg6kuz5rw1u4mod5ia
 egawxicsvk0967bvyfj4rkg2i
 df80pr1vmjhxjdbjaxu9lk2df
 8q66iisy3f7q5s72ysynh8hdd
 44kexkyqg6kuz5rw1u4mod5ia
 18adwi50gi8btsusdn5n0gg5w
 2bcjox7tfiz15ky5bxlbii94w
 f02thjj87rbwxnkl5m2hcyi8d
 avymv8dag37lcxh3yoxs2onas
 eeeahvxa1ld90wh1fzaeaq13k
 3ylzlnllrjqyync6mvoxgaaa
 89s354f7r25d05khj2uv95gbe
 1zqbl7vj2cnceyj2226ey8qhk

On the bottom of every Warner Bros page is an image with a random number.  For example, ""  This includes the search pages that those links redirect to.  This could cause a near endless number of urls to grab.

  Damnit, Omniture.
The ignore pattern looks sufficiently well-scoped that it won't ignore e.g. www.warnerbros.com/12345/whatever or www.warnerbros.com/12345-8-ways-to-confuse-a-crawler, so I'm okay with merging this.
@ivan: You mentioned that there are other ways to handle this sort of thing; thoughts?

I'm okay with merging even though I wish we had an interface for stripping out chunks of HTML in wpull instead.
But as mentioned, fine with merging anyway because we're only potentially harming crawls of one site and we're fairly visible about the ignores we use.


Getting Started with F# on .NET Core Improvements

I merged the Getting Started with F# on .NET Core article so that we have something available for folks to took at.  Some feedback that was mentioned was to cut out most of the step-by-step stuff and just list the project.json changes supply code to copy/paste.  This would shorten and change the tone of the article, but could be good since it would be less for folks to read through.
I'm also open to other changes as well.
/cc @svick @mairaw @dsyme @enricosada

This is my personal opinion, so weight it appropriately with other feedback.
I prefer seeing a bit more detail rather than just supplying code to copy and paste. I find that the pure copy / paste articles don't help me learn anything. I get to the end, and I've got a working sample (that's cool). However, I can't extend those techniques to applications I'm building.
Humans are pretty good at skimming text, so I try to err on the side of more detail rather than less.

@BillWagner I'm not sure the goal of this article is to teach about details of project.json. That section is just a stopgap until dotnet new -l fs -t lib becomes available.

@svick is right here, this is a stopgap until dotnet new is updated to have correct template support for F# class library, console app, and test project.  I don't know when that will happen, though.

If it's a stop-gap solution then having the copy and paste only would be appropriate in this case.
But I agree with @BillWagner that in general we should provide the steps with an explanation of why you're doing that. Then if someone wants just to skip all that and go to the final one, that's fine. That's why I also suggested that we provide the whole sample too so people can just download the whole thing if they want as well.


how to use goimports-reviser instead of goimports

Hi, wish to use https://github.com/incu6us/goimports-reviser instead of goimports,
how could i configure it? it tried
goimports = goimports-reviser

but it is not working

I have not used goimports-reviser. Are there errors? Also are goimports and goimports-reviser compatible?

I also have similar problem.
I just put this logic inside the formatter plugin, but it would be great if we can support it inside your plugin:
    go = {
      function()
        return {
          exe = "goimports-reviser",
          args = {
            "-output",
            "stdout",
            "-rm-unused",
            util.escape_path(util.get_current_buffer_file_path()),
          },
          stdin = true,
        }
      end,
      require("formatter.filetypes.go").gofumpt,
      require("formatter.filetypes.go").golines,
    },


RTMP: Streams failing with ERROR_RTMP_PACKET_SIZE error.

Description'
Please ensure that the markdown structure is maintained.
We observed for a significant number of the streams the size changes for fmt1 message after fmt0 message resulting  in ERROR_RTMP_PACKET_SIZE   and eventually the stream is disconnected. We have observed this from different versions of OBS with RTMP.
Code pointer:
https://github.com/ossrs/srs/blob/4.0release/trunk/src/protocol/srs_rtmp_stack.cpp#L1138

SRS Version: xxxxxx'

Please ensure that the markdown structure is maintained.
Latest version

SRS Log:
Please ensure that the markdown structure is maintained.
2013, "msg in chunk cache, size=154678 cannot change to 134574

SRS Configuration:
Please ensure that the markdown structure is maintained.

Replay:
Please ensure that the markdown structure is maintained.
1% of the streams from OBS experience this issue
Expect:
Please ensure that the markdown structure is maintained.
We are trying to validate the spec if this is expected in RTMP, we have observed in other implementations this case is not explicitly handled.
https://github.com/Red5/red5-server-common/blob/c979950c3b5cd7137303ea2a119af2b9847bed7d/src/main/java/org/red5/server/net/rtmp/codec/RTMPProtocolDecoder.java#L419
https://github.com/Red5/red5-server-common/blob/c979950c3b5cd7137303ea2a119af2b9847bed7d/src/main/java/org/red5/server/net/rtmp/message/Packet.java#L72
Any help here is appreciated, we have tried updating the length and resizing the buffer but bytes were not aligned with the subsequent messages and we saw the data was corrupted.
TRANS_BY_GPT3

The size of message should be fixed. Which size we should use, the one in fmt0 or fmt1?
However, you could remove the error and just print a warning like this:
            // for a message, if msg exists in cache, the size must not changed.
            // always use the actual msg size to compare, for the cache payload length can changed,
            // for the fmt type1(stream_id not changed), user can change the payload
            // length(it's not allowed in the continue chunks).
            if (!is_first_chunk_of_msg && chunk->header.payload_length != payload_length) {
                srs_warn(ERROR_RTMP_PACKET_SIZE, "msg in chunk cache, size=%d cannot change to %d", chunk->header.payload_length, payload_length);
            }

Does it works?

To fix this issue, we need to reproduce it, publishing by a special content with incorrect chunk data. However, I can't reproduce it, so I close it for now.


Defining an alternative path for Blazor Cient hosted on Asp.Net Core

Before upgrading to the latest version of Blazor, we were able to specify an alternative path for the Blazor client in Startup (when hosted on ASP NET Core):
Startup.cs (Server)
app.map("/app", subdirApp =>
{
app.UserBlazor<Client.Startup>();
});

We would then update the index.html file like so:
Index.html (Client)
<base href="app/">

Both /app and app/ need to be in this format and are case sensitive.
This allows accessing the Blazor client site at: localhost/app
However, trying to access a Blazor page at a URL such as localhost/app/counter only seems to route within the client side routing, and does not work when trying to access the URL directly (ie. hitting refresh in browser when at the given url)
It would be great to know why this no longer works and how to overcome the issue.
Thanks for any assistance in advance.

@simonpbond I think you also need the leading slash in the base URL:
<base href="/app/">

While we do our best to look through all the issues filed here, to get a faster response you might also try posting your questions to StackOverflow.

Thanks Dan, for anyone else experiencing an issue upgrading their project, this helped:
Having it in this order also allowed MVC and Blazor to work nicely.
Startup.cs (Server)
            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapDefaultControllerRoute();
            });
            app.UsePathBase("/app");
            app.UseBlazor<Client.Startup>();

and
Index.html (Client)
<base href="/app/" />


CausalModel.estimate_effect() on new test data without calling fit() / with pre-trained ML models

Hi,
When estimating CATE learners e.g. using:

backdoor.econml.metalearners.SLearner
backdoor.econml.metalearners.TLearner
backdoor.econml.metalearners.XLearner
with CausalModel.estimate_effect() following this documentation:
https://microsoft.github.io/dowhy/example_notebooks/dowhy-conditional-treatment-effects.html#EconML-methods

I am trying to understand if there is an option to -

Pass the learners with an already fitted outcome ML model and/or (depending on the CATE learner's method) propensity ML model (that were chosen in a grid search hyper-parameter optimization step beforehand).
So for example for a Slearner: Passing "overall_model" an ML model that was already trained on the confounders+treatment variables that were defined obviously the same in CausalModel arguments.
Going over estimate_effect() code it looks like .fit() is called no matter what, but hopefully I am missing something.

Estimating the effect for a new test set, without re-fitting the ML models inside, as those were trained on a previous train data.

Would greatly appreciate your advice. @amit-sharma @siddhanthaldar

Hi,
Any chance to get direction on these two topics?
It would be very helpful.
Thanks,

@SHIMONSHEIBA thanks for your patience. Both these usecases make sense and will be great to include.

For S learner, using a pre-trained model can work. Looking at the S-learner code in econml, it seems that you can simply provide overall_model that has a predict function. For others too, it should be possible to provide, e.g., propensity_model to X-learner, but it seems to be not officially supported by EconML. Paging @heimengqi to see if this is a good idea from EconML's perspective.

Sure, this is straightfoward.

I will add a PR for this.

Thanks for your response,
Do you mean that these two use cases are already possible? if so if you could please provide a code example or a link to the documentation that would be really helpful.

When I passed a trained model e.g. an XGB to the S learner and then ran estimate_effect() I saw that the weights of the model changed and the predictions as well, because of the inherent .fit() in estimate_effect(). So is there an elegant way to bypass it?
Same here, didn't see an argument/method that allows only predicting on new data.

Thank you very much for your work!

The current code does not support it. Let me update the code.
All I was saying is that it is easy for S-learner, but becomes tricky for other learners like X-learners that use the input propensity_model and create some internal models based on it during fit.

@shimonsheiba thanks for your patience. I've added a parameter fit_estimator in estimate_effect that allows you to use the same estimator (fitted in a previous call to estimate_effect). See an example in the conditional treatment effects notebook under the section "Avoiding retraining the estimator"
However, your first request require changes to EconML, because we would need to bypass the fit function from EconML. That can raise unpredictable errors because the fit function also sets some class variables, so not a good idea to enable through dowhy. Better to post it on EconML issues.

Thanks so much!
Yes after going back to look at EconML, there is really no option there to provide a fitted ml model without running fit() at all.. best solution I found was to provide a grid search object so the fit() of EconML can run the hyper-parameter tuning itself, though not exactly the same process and the results are not the same unfortunately.
Another problem this "solution" raises is that it is not clear what is the final E[Y|T,X] model they use in e.g.  R-learner, with their internal CV process.
Your work is highly appreciated!


Received status code 401 from server: Unauthorized

What happened?
The build fails with a 401 unauthorized but everything publishes to the repo
Here is the gradle output..
Execution failed for task ':publishMavenJavaPublicationToRedspaceRepository'.
> Failed to publish publication 'mavenJava' to repository 'redspace'
   > Could not PUT 'https://code.redspace.io/iron431/io/redspace/modlist/modlist/1.19.4-1.0.4/modlist-1.19.4-1.0.4.jar'. Received status code 401 from server: Unauthorized

* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.

Here is the server log showing everything successful
23:50:31.377 INFO | DEPLOY | Artifact io/redspace/modlist/modlist/1.19.4-1.0.4/modlist-1.19.4-1.0.4.jar successfully deployed to releases by<EMAIL_ADDRESS>23:50:31.425 INFO | DEPLOY | Artifact io/redspace/modlist/modlist/1.19.4-1.0.4/modlist-1.19.4-1.0.4.jar.sha1 successfully deployed to releases by<EMAIL_ADDRESS>23:50:31.469 INFO | DEPLOY | Artifact io/redspace/modlist/modlist/1.19.4-1.0.4/modlist-1.19.4-1.0.4.jar.md5 successfully deployed to releases by<EMAIL_ADDRESS>23:50:31.513 INFO | DEPLOY | Artifact io/redspace/modlist/modlist/1.19.4-1.0.4/modlist-1.19.4-1.0.4.jar.sha256 successfully deployed to releases by<EMAIL_ADDRESS>23:50:31.556 INFO | DEPLOY | Artifact io/redspace/modlist/modlist/1.19.4-1.0.4/modlist-1.19.4-1.0.4.jar.sha512 successfully deployed to releases by<EMAIL_ADDRESS>23:50:31.600 INFO | DEPLOY | Artifact io/redspace/modlist/modlist/1.19.4-1.0.4/modlist-1.19.4-1.0.4.pom successfully deployed to releases by<EMAIL_ADDRESS>23:50:31.642 INFO | DEPLOY | Artifact io/redspace/modlist/modlist/1.19.4-1.0.4/modlist-1.19.4-1.0.4.pom.sha1 successfully deployed to releases by<EMAIL_ADDRESS>23:50:31.684 INFO | DEPLOY | Artifact io/redspace/modlist/modlist/1.19.4-1.0.4/modlist-1.19.4-1.0.4.pom.md5 successfully deployed to releases by<EMAIL_ADDRESS>23:50:31.729 INFO | DEPLOY | Artifact io/redspace/modlist/modlist/1.19.4-1.0.4/modlist-1.19.4-1.0.4.pom.sha256 successfully deployed to releases by<EMAIL_ADDRESS>23:50:31.776 INFO | DEPLOY | Artifact io/redspace/modlist/modlist/1.19.4-1.0.4/modlist-1.19.4-1.0.4.pom.sha512 successfully deployed to releases by<EMAIL_ADDRESS>23:50:31.824 INFO | DEPLOY | Artifact io/redspace/modlist/modlist/1.19.4-1.0.4/modlist-1.19.4-1.0.4.module successfully deployed to releases by<EMAIL_ADDRESS>23:50:31.867 INFO | DEPLOY | Artifact io/redspace/modlist/modlist/1.19.4-1.0.4/modlist-1.19.4-1.0.4.module.sha1 successfully deployed to releases by<EMAIL_ADDRESS>23:50:31.911 INFO | DEPLOY | Artifact io/redspace/modlist/modlist/1.19.4-1.0.4/modlist-1.19.4-1.0.4.module.md5 successfully deployed to releases by<EMAIL_ADDRESS>23:50:31.953 INFO | DEPLOY | Artifact io/redspace/modlist/modlist/1.19.4-1.0.4/modlist-1.19.4-1.0.4.module.sha256 successfully deployed to releases by<EMAIL_ADDRESS>23:50:32.005 INFO | DEPLOY | Artifact io/redspace/modlist/modlist/1.19.4-1.0.4/modlist-1.19.4-1.0.4.module.sha512 successfully deployed to releases by<EMAIL_ADDRESS>23:50:32.101 INFO | DEPLOY | Artifact io/redspace/modlist/modlist/maven-metadata.xml successfully deployed to releases by<EMAIL_ADDRESS>23:50:32.148 INFO | DEPLOY | Artifact io/redspace/modlist/modlist/maven-metadata.xml.sha1 successfully deployed to releases by<EMAIL_ADDRESS>23:50:32.196 INFO | DEPLOY | Artifact io/redspace/modlist/modlist/maven-metadata.xml.md5 successfully deployed to releases by<EMAIL_ADDRESS>23:50:32.238 INFO | DEPLOY | Artifact io/redspace/modlist/modlist/maven-metadata.xml.sha256 successfully deployed to releases by<EMAIL_ADDRESS>23:50:32.286 INFO | DEPLOY | Artifact io/redspace/modlist/modlist/maven-metadata.xml.sha512 successfully deployed to releases by<EMAIL_ADDRESS>
Here are the files being displayed properly after the publish

Here is the build.gradle publish
publishing {
    publications {
        mavenJava(MavenPublication) {
            groupId project.group
            artifactId project.archivesBaseName
            version project.version
            from components.java
        }
    }
    repositories {
        maven {
            name = "redspace"
            url = uri("https://code.redspace.io/iron431")
        }
        maven {
            url uri("https://code.redspace.io/releases")
            credentials {
                username 'len'
                password 'REDACTED'
            }
            authentication {
                basic(BasicAuthentication)
            }
        }
    }
}

Reposilite version
3.4.4

Eh. It was a me issue. Sorry


Fixing compatability issues

Resolves #NUMBER
Overall change: Fixed a compatability issue and pulled some code from a barely maintained package
Code changes:

Removed the pre-install scripts that were blocking an install if the incorrect yarn/node versions were being used - this script was being ran when installing the package as a dependency, preventing it from being installed unless the exact yarn/node versions were being used
Removed the react-adaptive-hooks package and replaced the relevant functions into the codebase - this package is causing peer dependency issues when @bbc/web-vitals is installed in a codebase using React 17 with npm. The last time the package had a published version was 3 years ago and the functions are relatively simple, so it made sense in this case to lift them wholesale (they are covered under the same open licence as this package)

[x] (BBC contributors only) This PR follows the repository use guidelines
[] I have assigned myself to this PR and the corresponding issues
[x] Automated jest tests added (for new features) or updated (for existing features)
[ ] This PR requires manual testing

hey adam
Going to try and push all these together as we have three PRs all related
https://github.com/bbc/web-vitals/pull/21


add UT for distillation_for_quantization with gpu

Type of Change
add UT test for distillation_for_quantization with gpu

Please leave a message after testing on GPU.

Please leave a message after testing on GPU.

ok

Can we split the UT to test_oneshot.py and test_orchestration.py, test_oneshot.py is for 1.x API, and test_orchestration.py is for 2.x API.

Please leave a message after testing on GPU.

Passed

Please leave a message after testing on GPU.

Success on mlp-dgx server

Can we split the UT to test_oneshot.py and test_orchestration.py, test_oneshot.py is for 1.x API, and test_orchestration.py is for 2.x API.

done


Allow to set idle await

Thanks @Blacksmoke16

Hi @robacarp . Your proposal makes much more sense. Fixed and squash commits into one.


Madu/fix wrong content type for ebix in accept tests

Description
References

Codecov Report
Attention: 567 lines in your changes are missing coverage. Please review.

Comparison is base (21978a1) 83.07% compared to head (7c4e854) 41.32%.
Report is 335 commits behind head on main.

Files
Patch %
Lines

source/Api/Program.cs
0.00%
66 Missing :warning:

...ssages.Infrastructure/ArchivedMessageRepository.cs
0.00%
63 Missing :warning:

...ce/ArchivedMessages.Infrastructure/QueryBuilder.cs
0.00%
47 Missing :warning:

...essages/RequestAggregatedMeasureMessageReceiver.cs
0.00%
32 Missing :warning:

...uration/Middleware/UnHandledExceptionMiddleware.cs
0.00%
29 Missing :warning:

...rce/Api/Authentication/MarketActorAuthenticator.cs
0.00%
28 Missing :warning:

.../Api/Authentication/DevMarketActorAuthenticator.cs
0.00%
27 Missing :warning:

...thentication/MarketActorAuthenticatorMiddleware.cs
0.00%
25 Missing :warning:

source/Api/EventListeners/InboxEventListener.cs
0.00%
24 Missing :warning:

source/Api/IntegrationEventHandler.cs
0.00%
24 Missing :warning:

... and 26 more

Additional details and impacted files
@@             Coverage Diff             @@
##             main     #692       +/-   ##
===========================================
- Coverage   83.07%   41.32%   -41.76%
===========================================
  Files         456      380       -76
  Lines       10418     7391     -3027
===========================================
- Hits         8655     3054     -5601
- Misses       1438     4240     +2802
+ Partials      325       97      -228

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


Default behavior for clicking links

Hi,
Would love to hear your thoughts on this suggestion: silverbullet feels great to use, but one thing is when editing external links/ page links, it's sometimes difficult to have to click past the link, and then arrow key back into it to edit as clicking on the link itself will open up that external link/ page.
I'm wondering what you think of removing the onclick for opening external links/ page links, but allow opening the link only if Command (on Mac), or Control (on Windows) is held down.

If you hold Alt and click on a link it moves the cursor there. Does that work too?

If you hold Alt and click on a link it moves the cursor there. Does that work too?

yea that worked, but was taking inspiration from how VS Code does it -- as editing text being the first priority, clicking through text doesn't disrupt the editing experience, only when you're intentionally holding down Cmd and clicking does it change the behavior of text navigation

Yeah, I don’t think there’s a right answer here. Earlier versions of SB did what you suggest: you had to Cmd/Ctrl-click links to navigate there. However since I think that in SB we more often want to follow links than edit them, I decided to default to following links on click, and having Alt-click as a navigation option. I think this works especially well when you’re in “browsing/reading” mode. And on silverbullet.md where SB itself is used to render the content, it would just be strange not to have this behavior, because it’s not “webby.”
I think this is different in VS Code. You likely want to usually move your cursor somewhere more than you navigate (or want ot jump to definition). Code editors have always behaved this way.

How about changing the behavior depending on whether a paragraph is being edited or not, so I can click anywhere in the paragraph/directive or in the directive to get the edit mode (pending https://github.com/silverbulletmd/silverbullet/issues/424), then click in the middle of the link to edit the link?
Of course, it wouldn't make sense to have two different modifiers to do essentially the same thing, so I'd suggest replacing Alt with Ctrl/Cmd to move the cursor without navigating outside the edited paragraph.

That's doable, but wouldn't it be highly confusing from a UX perspective? Sometimes clicking does one thing and sometimes another depending on where your cursor was before... I don't know...

Earlier versions of SB did what you suggest: you had to Cmd/Ctrl-click links to navigate there.

Is there a setting to revert the old behavior?

Personally I've gotten used to the current behaviour, but it's perhaps easier because I'm not editing Markdown (or other "text with links" formats) in other editors very often. And having an object that looks like a link behave like a link helps with consistency.
There is still one minor annoyance: when I Alt-click on a link, the cursor is placed at the start of the link, not on the character that I clicked on. Similarly, when I press the End key and the line ends with a link, the cursor ends at the beginning of the link, not at the end.
I sometimes edit a paragraph with multiple links and I think it would be nice to have an "edit mode" command that expands everything in a paragraph/page and keeps everything expanded until a page switch, but I'm not sure how much I'd actually use it.
PS: Thanks @zefhemel for the (partial) fix for #592, I had a similar issue with clicking on the empty space after a link and it seems to be fixed in 0.5.11 (in previous versions it looked like the mouse down event placed the cursor at the end of the link, the link expanded so it was now under the mouse cursor, and then the mouse up event opened the link).


(refactor): Modify the dummy app pvc name in the chaosengine spec of openebs experiments

Signed-off-by: Udit Gaurav<EMAIL_ADDRESS>
Modify the dummy app PVC name in the chaosengine spec of openebs experiments.

Refer https://github.com/litmuschaos/litmus-docs/pull/200/


Lineage data kinship

if anybody else also need this feature , please reply "+1", thx
finally, we will decide which version to implement this feature based on the level of attention.

+1

+1

+1

+1

if anybody else also need this feature , please reply "+1", thx
finally, we will decide which version to implement this feature based on the level of attention.

+1

+1

+1

+1111111111

+1

+1

+1

+1

+1

+1

+1

+1

I plan to implement data lineage function (Table level).

The sql node and etl node automatically parse the dependency table and target table.
The frontend controls whether to enable dependency detection through switch.
The master server automatically injects dependent nodes, create dependent nodes based on dependencies.
Rely on the node to set the default number of retries.
Open the node that dependent detection function, no longer need to manually connect.

Already start a discussion in mail list.
E.g.

Will this design cause of loops？
------------------ 原始邮件 ------------------
发件人<EMAIL_ADDRESS>发送时间: 2020年4月15日(星期三) 下午2:58
收件人<EMAIL_ADDRESS>抄送: "simon"<3656562<EMAIL_ADDRESS>主题: Re: [apache/incubator-dolphinscheduler] Lineage data kinship（Lineage数据血缘关系） (#249)
I plan to implement data lineage function (Table level).
The sql node and etl node automatically parse the dependency table and target table.
The frontend controls whether to enable dependency detection through switch.
The master server automatically injects dependent nodes, create dependent nodes based on dependencies.
Rely on the node to set the default number of retries.
Open the node that dependent detection function, no longer need to manually connect.
Already start a discussion in mail list.
E.g.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or unsubscribe.

Won't loops, Current workflow does not support circular relationships.
Checked when saving workflow.

+1    Can the blood relationship of the table field be resolved ?

The current design is to solve the blood relationship between the tables.

+1

+1

+1

+111111111111111

+1

+1

if anybody else also need this feature , please reply "+1", thx
finally, we will decide which version to implement this feature based on the level of attention.

+1

just like airflow ,task have inlets and outlets attribute, user can define the inlets and outlets manualy;
how can I impl this in dolphinscheduler?
@dailidong

It has the necessary functions

+1

+1

I plan to implement data lineage function (Table level).

The sql node and etl node automatically parse the dependency table and target table.
The frontend controls whether to enable dependency detection through switch.
The master server automatically injects dependent nodes, create dependent nodes based on dependencies.
Rely on the node to set the default number of retries.
Open the node that dependent detection function, no longer need to manually connect.

Already start a discussion in mail list.

支持sql节点和etl节点自动分析表之间的依赖关系，通过解析sql的select表和insert表实现，其他节点可以手工维护insert表（如果存在这种需求）
前端通过依赖检测开关控制master在任务调度时是否进行依赖解析
master server自动注入依赖节点，运行时根据依赖关系生成虚拟依赖节点，不修改工作流定义数据，仅针对定时调度上线的工作流进行依赖分析
生成的依赖节点设置默认失败重试次数，比如每5分钟检测一下
打开依赖解析开关后，节点间不再需要手工连线，master根据依赖关系的顺序进行节点的调度

E.g.

Hi @Rubik-W , I am testing your implement, How to set process_definition_json from frontend, Should you show me a sample?

I plan to implement data lineage function (Table level).

The sql node and etl node automatically parse the dependency table and target table.
The frontend controls whether to enable dependency detection through switch.
The master server automatically injects dependent nodes, create dependent nodes based on dependencies.
Rely on the node to set the default number of retries.
Open the node that dependent detection function, no longer need to manually connect.

Already start a discussion in mail list.

支持sql节点和etl节点自动分析表之间的依赖关系，通过解析sql的select表和insert表实现，其他节点可以手工维护insert表（如果存在这种需求）
前端通过依赖检测开关控制master在任务调度时是否进行依赖解析
master server自动注入依赖节点，运行时根据依赖关系生成虚拟依赖节点，不修改工作流定义数据，仅针对定时调度上线的工作流进行依赖分析
生成的依赖节点设置默认失败重试次数，比如每5分钟检测一下
打开依赖解析开关后，节点间不再需要手工连线，master根据依赖关系的顺序进行节点的调度

E.g.

Hi @Rubik-W , I am testing your implement, How to set process_definition_json from frontend, Should you show me a sample?

When the front-end creates a workflow and clicks save, it is automatically generated according to the task configuration information.

+1, 这个功能很需要，我们还准备开发这样的功能呢

+1 急需

+1急需此功能

+1急需此功能

No description provided.

+1 +1 +1 急需此功能

+1

+1

support +1

support +1

+1 I think we should not embedded with dolphin system. We could intro new module/plugin, so we could gen and put standard data lineage to other systems like apache atlas, marquez(Wework), ...
@dailidong

+1

+1

+1

+1

+1

+1

这个需求很重要，+1

+1

+1

+1，海豚3.X版本似乎还没有实现数据血缘功能，这个功能对数据仓库来讲很重要。

+1 ， +10086 ，非常需要

if anybody else also need this feature , please reply "+1", thx
finally, we will decide which version to implement this feature based on the level of attention.

+1

+1

+1

+1

+1


Full ANSI color support in build logs

This PR uses sensiolabs/ansi-to-html to support ANSI color sequences in the build logs.
It uses CSS classes and ships a classic white-on-black theme, which can be customized in public/assets/css/ansi-colors.css.
Please note the stylesheed is embedded in email messages, so keep it separate and minimal.

Been using this for a while now, it's a very much welcome addition. :+1:

Thanks. This pull request has been integrated manually.


watch: don't watch ignored paths

Fixes #1817
Not super confident in the API changes to notify for this. Going to sleep on it.

I was a bit surprised that this is fixing a leak when it doesn't seem to be cleaning up any watches, so I figured I'd try to state my understanding:

tilt never cleans up its watches
rust writes a lot of files to the target directory, using new paths for each build
(1)+(2) means after every new rust build, tilt has a lot of new watches, and they never go away
this could be mitigated by specifying ignore='target' in the Tiltfile, except ignore doesn't stop Tilt from watching files because of the issue discussed in #1580
This PR seeks simply to re-allow the mitigation mentioned in (4)

Do you have a guess as to whether cleaning up watches is hard? IIUC, the approach in this PR:

Requires the user to recognize this problem and then change their config to work around it.
Doesn't address the same problem in other cases where the new path names aren't ignorable.

I don't mean this to oppose this PR, and having a workaround is better than not, and this solves an actual user problem, so that's good. I'm just looking to understand.

All of that is correct.
To be clear this isn't fixing a leak. I don't think there is a leak in this case. I think there's just a lot of files being written.
A leak is possible, if files are removed we don't remove watches on Linux. I don't think that's what's happenin gin this case though.

Do you have a guess as to whether cleaning up watches is hard?
No, I haven't looked in to it at all. It wouldn't solve the problem in this case, right? The watches are legit.

After talking with @landism and @nicks last night I agree that the better approach is to lift Docker's strategy wholesale. This addresses a bunch of scenarios that are currently problematic in our system now, such as:
target
!target/*.go

However the way we are handling filters right now makes this system hard to adopt. Right now we are just storing an interface in memory to decide whether things should be included in a build and trigger builds for a given target. To use Docker's approach we would need to store a list of the include/exclude patterns and introspect them as we traverse the directory structure. (see https://github.com/moby/moby/blob/master/pkg/archive/archive.go#L850-L858)
I propose that we go with this PR's solution for now, to solve problems on Linux where there are too many files to watch, and schedule time to adopt the approach that Docker uses later.

After talking with @landism we think a workaround could be to somehow encode whether there any ignore exclusions, ie:
directory
!directory/*.go

Which is read as “ignore directory EXCEPT for any Go files in directory”. If the ignores do have such an exclusion, which I expect to be uncommon, then we revert back to watching everything. If there are no exclusions we can be moderately smart as this code does.

fwiw, i don't think we can move forward with this PR as-is without introducing unacceptable bugs. i can discuss more detail in-person if necessary

Closing this in favor of another approach @nicks is trying.


Add kubeadm_init_phase_kubeconfig_controller-manager.md and kubeadm_init_phase_mark-control-plane.md in zh doc.

For Chinese localization, base branch to release-1.14.
Add kubeadm_init_phase_kubeconfig_controller-manager.md and kubeadm_init_phase_mark-control-plane.md in zh doc.

@chenrui333 @tengqm  Already updated.

sorry for replying late. but 👍 for the work!


Add quick-file-actions

I think tree view already exposes these functions. We could just use those for the key bindings.

@astephenb i'm not sure I follow. Tree view's bindings are specific to tree view and wouldn't work anywhere else (things like M, or cmd-c).

you can access these from the command window.

oh i got ya, we don't need the extra package. cool, good idea, thanks.

@astephenb how's that look?

:+1:


Harmonize ontology identifier with Interlex

Suggestion to change "preferredOntologyIdentifier" to a list of all ontologyIdentifiers, and thus harmonize with how it is displayed in  Interlex (example link: https://neuinfo.org/interlex/view/ilx_0751626?searchTerm=alzheimer).

I don't understand the suggestion. Interlex only shows a single "preferred identifier". It has a list of all identifiers, but only one of them is marked as preferred.

That is true @apdavison, the idea is to have a list of 'ontologyIdentifiers', instead of or in addition to the 'preferredOntologyIdentifier'. This came from a case where openMINDS, Interlex and Knowledge Space all referred to different preferred ontology identifiers.


Update Orchestra/TestBench dependency for Laravel 5.2

By upgrading Orchestra/TestBench to  3.2, we are using the Laravel 5.2 compatible version.
For more information, see TestBench's Version Compatibility.

It's a tricky one, as support for L5.1 is more important than 5.2, because of the LTS. I don't really want to change it, as it might break stuff for 5.1 users.

For us, this broke PHPUnit in L5.2, as composer refused to pull in Orchestra/TestBench v3.1 since it requires L5.1. We had to add Orchestra/TestBench v3.2 to our root composer.json in order for us to get around the issue.
Would it be worth creating a 2.2 branch of Maatwebsite/Laravel-Excel with support for L5.2?

Are you sure you are installing your dependencies the right way? Testbench is a dev-dependency of this package and should normally never be installed in your project.
And for the 2.2 branch, rather not. It's already a lot of work to maintain 2 branches.

Well, this is not an issue on production as we don't run our unit tests there and we run composer with the --no-dev flag. It is, however, an issue locally when we try to run PHP Unit.
I'm pretty confident we're installing the dependencies correctly, it's just that Orchestra/TestBench has Laravel 5.1 as a dependency. Since we're on Laravel 5.2, composer is simply skipping the install for the test bench suite. On other sites we have running Laravel 5.1, this is not an issue.
I understand the maintainability issues with having two versions. Not sure I have an easy solution if Orchestra/TestBench 3.2 is not compatible with Laravel 5.1 (if it happens to be compatible, then it would be worth upping the version).
Either way, for now I've added Orchestra/TestBench 3.2 to my project's composer file and fixed the issue. It's not an ideal solution, but it's a viable workaround.

Still, it shouldn't install the dev dependencies of the installed packages. When I install the package locally, it never installs testbench. I'm afraid something about your setup is not right.


Change in the market place resource name

Monitoring + Management is now called Management.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: d7c2cc34-ba4a-1181-ccda-88dd901e0212
Version Independent ID: 9b4a3b68-03fc-387a-ee5d-e7f73ee3c567
Content: Azure Quickstart - Create an Azure Automation account
Content Source: articles/automation/automation-quickstart-create-account.md
Service: automation
GitHub Login: @csand-msft
Microsoft Alias: csand

@csand-msft thanks for bringing this to our attention. This feedback has been shared with the doc owner for consideration.  We will now close this issue. If you have any followup questions, please let us know and we will gladly re-open the conversation.

@csand-msft  - FYI


add proper license headers (GPL, Apache)

When bpf (kernel side) let's define the file as GPL. The rest can continue as Apache.

@nam-jaehyun @seungsoo-lee
For the rest of the project (Go Code = Apache), should the SPDX license identifier also be added in the first line as instructed by Kernel Coding Style (ebpf)? I know that those are different worlds, but I'm asking just for the sake of symmetry since we're doing this for ebpf.

Let's use GPL and Apache licenses like these.

KubeArmor/BPF/*

SPDX-License-Identifier: GPL-2.0

*.go / Dockerfile / Makefile

SPDX-License-Identifier: Apache-2.0


REST API for Tink

@kdeng3849 has already started this in https://github.com/tinkerbell/tink/pull/64

This is a duplicate of tinkerbell/tink#64


Updates spo file move command to new endpoint

Closes #6153

Due to an upcoming breaking change connected to CLI for Microsoft 365 login experience we will need to do a v9 release a bit sooner than we anticipated. Due to that we had to change the target of this PR to v10 which will be the next regular major release.

I've rebased and force-pushed this @milanholemans. Will be reviewing it now.


Add a spec of beginless range for Ruby 2.7

This PR adds a spec for beginless range for Ruby 2.7.
https://bugs.ruby-lang.org/issues/14799

Before submitting the PR make sure the following are checked:

[x] Wrote good commit messages.
[ ] Commit message starts with [Fix #issue-number] (if the related issue exists).
[x] Feature branch is up-to-date with master (if not - rebase it).
[x] Squashed related commits together.
[x] Added tests.
[ ] Added an entry to the Changelog if the new code introduces user-observable changes. See changelog entry format.
[x] The PR relates to only one subject with a clear title and description in grammatically correct, complete sentences.
[x] Run bundle exec rake default. It executes all tests and RuboCop for itself, and generates the documentation.

Thanks!