KAFKA-15030: Add connect-plugin-path command-line tool.

This adds only the list subcommand, the sync-manifests subcommand will be in a follow-up PR.
This includes new dependencies to the tools package on connect-runtime and connect-runtime-test in order to test the functionality of this command. New entry points for linux (.sh) and windows (bat) are added as well.
This script runs the Reflective and ServiceLoader scans used at worker startup, as well as directly reading the manifest files. This is in order to find plugins which have manifests but are not loadable. The alternative of having the PluginScanner emit erroneous plugins would not include the locations of the manifest files without a custom ServiceLoader implementation. The locations of the manifest files are necessary later for the sync-manifests command, which will directly re-write these manifests.
Committer Checklist (excluded from commit message)

[ ] Verify design and implementation
[ ] Verify test coverage and CI build status
[ ] Verify documentation (including upgrade notes)

Here's some sample output from the current implementation:
$ ./bin/connect-plugin-path.sh list --plugin-path ~/test/plugin-path/
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/greg.harris/github/kafka/tools/build/dependant-libs-2.13.11/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/greg.harris/github/kafka/trogdor/build/dependant-libs-2.13.11/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Reload4jLoggerFactory]
/Users/greg.harris/test/plugin-path/a2solutions-oracdc-kafka-<IP_ADDRESS>    solutions.a2.cdc.oracle.OraCdcJdbcSinkConnector OraCdcJdbcSink  OraCdcJdbcSinkConnector <IP_ADDRESS> sink    true    false
/Users/greg.harris/test/plugin-path/a2solutions-oracdc-kafka-<IP_ADDRESS>    solutions.a2.cdc.oracle.OraCdcLogMinerConnector OraCdcLogMinerConnector OraCdcLogMiner  <IP_ADDRESS> source  true    false
/Users/greg.harris/test/plugin-path/a2solutions-oracdc-kafka-<IP_ADDRESS>    solutions.a2.cdc.oracle.OraCdcSourceConnector   OraCdcSource    OraCdcSourceConnector   <IP_ADDRESS> source  true    false
/Users/greg.harris/test/plugin-path/microsoft-kafka-connect-iothub-0.6  com.microsoft.azure.iot.kafka.connect.sink.IotHubSinkConnector  IotHubSink      IotHubSinkConnector     0.6     sink    true    false
/Users/greg.harris/test/plugin-path/microsoft-kafka-connect-iothub-0.6  com.microsoft.azure.iot.kafka.connect.IotHubSourceConnector     IotHubSourceConnector   IotHubSource    0.6     source  true    false
[2023-07-20 14:19:13,855] ERROR Failed to get plugin version for class com.github.jcustenborder.kafka.connect.spooldir.elf.SpoolDirELFSourceConnector (org.apache.kafka.connect.runtime.isolation.PluginScanner)
java.lang.NoClassDefFoundError: com/google/common/base/Strings
        at com.github.jcustenborder.kafka.connect.utils.VersionUtil.version(VersionUtil.java:32)
        at com.github.jcustenborder.kafka.connect.spooldir.elf.SpoolDirELFSourceConnector.version(SpoolDirELFSourceConnector.java:57)
        at org.apache.kafka.connect.runtime.isolation.PluginScanner.versionFor(PluginScanner.java:199)
        at org.apache.kafka.connect.runtime.isolation.ReflectionScanner.versionFor(ReflectionScanner.java:74)
        at org.apache.kafka.connect.runtime.isolation.ReflectionScanner.getPluginDesc(ReflectionScanner.java:135)
        at org.apache.kafka.connect.runtime.isolation.ReflectionScanner.scanPlugins(ReflectionScanner.java:88)
        at org.apache.kafka.connect.runtime.isolation.PluginScanner.scanUrlsAndAddPlugins(PluginScanner.java:79)
        at org.apache.kafka.connect.runtime.isolation.PluginScanner.discoverPlugins(PluginScanner.java:67)
        at org.apache.kafka.tools.ConnectPluginPath.runCommand(ConnectPluginPath.java:213)
        at org.apache.kafka.tools.ConnectPluginPath.mainNoExit(ConnectPluginPath.java:79)
        at org.apache.kafka.tools.ConnectPluginPath.main(ConnectPluginPath.java:71)
Caused by: java.lang.ClassNotFoundException: com.google.common.base.Strings
        at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:445)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:587)
        at org.apache.kafka.connect.runtime.isolation.PluginClassLoader.loadClass(PluginClassLoader.java:136)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
        ... 11 more

The SLF4J lines and the ERROR logs are printed to stderr, so redirecting with 2> /dev/null is sufficient to clean up the output. Unloadable plugins (due to class structure problems) are printed with error logs.
Right now the stdout is formatted like a TSV, but without a header. The KIP only specifies that this output be human-readable, so i'm interested in changing this output slightly before merging. The columns are:

plugin location
full class name
simple name (if unique within the classpath+location), or null
pruned name (if unique within the classpath+location), or null
reported version, or undefined
plugin type (sink/source/converter/etc)
whether the plugin is reflectively loadable
whether the plugin has a manifest file

Because the ReflectionScanner is used on individual locations one-at-a-time, the script is slow, but prints results after scanning each location. For the above, the results start to be printed within about 1/4 second, and the whole listing takes 30s for 150 components (400 plugins) downloaded from the internet.

I think TSV is fine for the output format. It'd definitely help if we added headers.

👍

I also found it a bit difficult to parse with the plugin location being listed first

That has been bothering me too, so i'm glad you mentioned it. Especially when the plugins are deep in the filesystem tree, the constant part of the path takes up the whole screen. I'll move it.

When run on a worker config with no plugin.path property, there's no output. We should at least log a warning in this case, and if there's no legitimate reason to operate on a worker config without a plugin.path property, we should probably fail instead.

Thanks for testing this. I'm conflicted, because we disallow omitting all of the the location, path, and config arguments at the same time in an attempt to avoid empty listings. Since an empty plugin.path is permitted in a valid worker config without a warning, I think we also have to permit it here without a warning. We'll trust the user says what they mean, and if they don't actually mean what they say, they'll learn about that with an empty result.

More generally, if no plugins are detected, the script exits with no output. Perhaps we could summarize how many plugins were found at the end of the script?

I have been doing that with | wc -l, which becomes a bit messy with the addition of the header. Perhaps following the direct listing with a separator that is easy to parse (an empty line), and then printing a summary (# of plugins, # of classes, # of sink connectors, # that will be changed by sync-manifests, etc) would be appealing. That way, anyone that wants to process the raw data themselves can cut off the summary at the separator. I'll explore this a bit more.

When run on a worker config with plugin.path set to a blank string (i.e., plugin.path=), then the script scans the current directory. Since this is also the behavior for Connect workers, I don't think we can disallow this case, but maybe it's worth printing a warning (in both cases)?

Oh no, I didn't realize that we accepted relative paths in the plugin.path, but it makes sense given the re-use of the PluginUtils#pluginLocations. Since this command will very likely be called from a different working directory than the worker itself, I think adding a warning for this is a good idea.

It seems like we're introducing divergence here between the plugin path CLI and Connect workers in how aliases are computed. Workers compute aliases after doing complete scanning of the plugin path, whereas this script does it for each plugin location. Doesn't that introduce false negatives into the script's collision detection logic?

I justified it to myself that it was the "most generous" set of aliases, counting only collisions internal to each individual plugin location. But that isn't even correct with the current implementation, since collisions with the classpath also cause aliases to be hidden! I think consistency with the runtime is more important, so I'll change this to compute aliases over the whole run. It's so sad to lose the incremental output though, since the aliases of the first line printed depend on the classname used in the final plugin found.

Nearly all of the out-of-the-box plugins for Connect (SMTs, client config override policies, predicates, converters, header converters) have undefined versions. Can we implement the Versioned interface in these plugins so that they show up with valid version info? (If so, it's fine to leave that for a follow-up PR).

This is an amazing suggestion, and I'll certainly implement that in a follow-up PR.

IIUC this is because the JSON converter implements two different plugin interfaces (Converter and HeaderConverter), but the PluginDesc class is only capable of storing one plugin type for each kind of plugin. It hasn't been (much of) a problem til now, but we should probably address that somehow before merging this PR.

Haha yeah that needs some tweaking. I'm worried about the other effects of changing that line, i'll have to look into that more.

Finally, I could be missing something, but it seems like we don't have logic to ensure that plugins which implement multiple plugin interfaces (like the aforementioned JSON converter) have all of the necessary service loader manifests; instead, it looks like we only check for at least one manifest. If that's the case, can we start reporting these plugins as not having manifests, in the output lines for the plugin types that they're missing manifests for?

Well, if the PluginDesc constructor was consistent with equals, then if you had a plugin implement multiple interfaces it would show up in two PluginDesc objects, one for each type. Then, as the script iterates over the PluginScanResult, it would perform the migration once as one type and then again as the other type. I think this is broken because of the PluginDesc constructor, so i'll adjust that and then the migration should work correctly.
@C0urante Thank you for being so thorough, these are details that are really important to get right. That goes for all of the other PRs in this KIP, the feature wouldn't be half as reliable without your scrutiny. I'll take some time to iterate on this and let you know when this is ready for another pass.

Hmmm... getting an NPE when I try to run the command now:
Cannot invoke "java.util.Set.removeIf(java.util.function.Predicate)" because the return value of "java.util.Map.get(Object)" is null
java.lang.NullPointerException: Cannot invoke "java.util.Set.removeIf(java.util.function.Predicate)" because the return value of "java.util.Map.get(Object)" is null
	at org.apache.kafka.tools.ConnectPluginPath.lambda$enumerateRows$5(ConnectPluginPath.java:289)
	at java.base/java.lang.Iterable.forEach(Iterable.java:75)
	at org.apache.kafka.connect.runtime.isolation.PluginScanResult.lambda$forEach$0(PluginScanResult.java:136)
	at java.base/java.util.Arrays$ArrayList.forEach(Arrays.java:4204)
	at org.apache.kafka.connect.runtime.isolation.PluginScanResult.forEach(PluginScanResult.java:136)
	at org.apache.kafka.tools.ConnectPluginPath.enumerateRows(ConnectPluginPath.java:285)
	at org.apache.kafka.tools.ConnectPluginPath.lambda$runCommand$2(ConnectPluginPath.java:234)
	at java.base/java.util.stream.Collectors.lambda$uniqKeysMapAccumulator$1(Collectors.java:180)
	at java.base/java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
	at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
	at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1845)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
	at org.apache.kafka.tools.ConnectPluginPath.runCommand(ConnectPluginPath.java:233)
	at org.apache.kafka.tools.ConnectPluginPath.mainNoExit(ConnectPluginPath.java:84)
	at org.apache.kafka.tools.ConnectPluginPath.main(ConnectPluginPath.java:76)

This happens with both the --plugin-location and --plugin-path flags, when performed on directories that worked well with the CLI on previous commits.
Regarding "following the direct listing with a separator that is easy to parse (an empty line), and then printing a summary (# of plugins, # of classes, # of sink connectors, # that will be changed by sync-manifests, etc)" -- love this, great idea 👍
Regarding the discussion on aliases and eager printing--what if we printed the full set of aliases for each plugin without doing any collision detection, which would allow us to print things eagerly, but then made a note of any collisions that we detected in the summary section? IMO it's more valuable to print things quickly than to have completely-accurate, collision-free info on aliases, especially if running the script against a large plugin path.
As far as everything else goes--unlike most reviews, I'm doing a lot of manual testing for this one, so I'll hold off on another complete round until we can resolve the NPE issue; LMK if you're not getting the same thing and I can try to figure out what's going wrong on my end.

Hmmm... getting an NPE when I try to run the command now:

I've fixed that, sorry. I've also added tests that would catch that NPE.

made a note of any collisions that we detected in the summary section

This is a better solution than hiding it in the row listing, as the collisions are much more apparent. I've ported the DEBUG log contents to stdout, and made it part of the summary.
See the new summary below:
Ignoring ambiguous alias 'ByteArray' since it refers to multiple distinct plugins [org.apache.kafka.connect.converters.ByteArrayConverter, io.debezium.converters.ByteArrayConverter, io.confluent.connect.cloud.storage.source.format.ByteArrayConverter, io.confluent.connect.replicator.util.ByteArrayConverter]
<snipped>
Ignoring ambiguous alias 'ByteArrayConverter' since it refers to multiple distinct plugins [org.apache.kafka.connect.converters.ByteArrayConverter, io.debezium.converters.ByteArrayConverter, io.confluent.connect.cloud.storage.source.format.ByteArrayConverter, io.confluent.connect.replicator.util.ByteArrayConverter]
Total plugins:                  419
Loadable plugins:               419
Compatible plugins:             7
Total locations:                150
Compatible locations:           10
All locations compatible?       false

I had to duplicate some of the alias computation logic, since the PluginUtils implementation is tightly coupled to the PluginDesc objects, which we can't use in the summary. If we keep the PluginScanResults from the scanning portion, we end up leaking enough memory that the default 256MB heap runs out of space. Now the script is incremental (again) and can iterate over multi-gb plugin paths with a bounded heap, less than the corresponding worker at least (which gets a 2GB heap by default).
Unfortunately, if there are JDBC drivers included in a plugin, then it will leak memory until the script exits. I don't expect this will be an issue in practice (i'm already testing plugins including JDBC drivers), and people can always increase their heap to compensate.

I gave this another shot and it seems like the logic for detecting compatible plugins isn't working. I tried running bin/connect-plugin-path.sh list --plugin-location connect/basic-auth-extension/build/libs/ after building the basic auth extension and got this output (omitting the SLF4J warning messages emitted to stderr):

This causes the PluginClassLoader#getResources() to return the same URL twice, because the same jar path is visible via the plugin location and the classpath. I use the equality of two manifests URLs to exclude ManifestEntry objects that come from the classpath, causing the ManifestEntry for the basic auth extension in the plugin location to be excluded erroneously.
I tested this and it worked:
cp -r connect/basic-auth-extension/build/libs basic-auth-extension-copy
bin/connect-plugin-path.sh list --plugin-location basic-auth-extension-copy

I'll have to figure out a way to distinguish these URLs when the same exact jar is in the classpath and plugin locations.

Okay I have a potential fix: we can make the URL unique by inserting . in the path.
It works with the test case you provided, and even this one:
 cd connect/basic-auth-extension/build/libs
 ../../../../bin/connect-plugin-path.sh list --plugin-location .
 cd ../../../..

Hmm... seems like we're still failing to detect missing manifests for plugins that implement multiple interfaces. I added a Converter manifest for the JSON converter (but not a HeaderConverter manifest), then ran the tool:
> bin/connect-plugin-path.sh list --plugin-location connect/json/build/libs/
pluginName	firstAlias	secondAlias	pluginVersion	pluginType	isLoadable	hasManifest	pluginLocation
org.apache.kafka.connect.json.JsonConverter	JsonConverter	Json	undefined	converter	true	true	connect/json/build/libs
org.apache.kafka.connect.json.JsonConverter	JsonConverter	N/A	undefined	header_converter	true	true	connect/json/build/libs

Total plugins:           	2
Loadable plugins:        	2
Compatible plugins:      	2
Total locations:         	1
Compatible locations:    	1
All locations compatible?	true

I also tried moving the JSON converter JAR to a different directory so that it'd be off of the worker classpath, and received the same result.

I also understand the rationale for listing compatible plugin locations, and if we can accurately report this, then I think it'd be worth it to include that information. However, I'm worried if we're reporting false (or at least, misleading) positives in cases where all plugins in a given location both cannot be loaded and do not have a manifest. If that occurs, do we report that location as compatible? And if so, isn't that likely to confuse users?

Hmm... seems like we're still failing to detect missing manifests for plugins that implement multiple interfaces. I added a Converter manifest for the JSON converter (but not a HeaderConverter manifest), then ran the tool:

Thanks, fixed this and added a manifest to the NonMigratedMultiPlugin to reproduce it.

However, I'm worried if we're reporting false (or at least, misleading) positives in cases where all plugins in a given location both cannot be loaded and do not have a manifest. If that occurs, do we report that location as compatible? And if so, isn't that likely to confuse users?

Compatible here is shorthand to mean that under various plugin.discovery settings, the plugin will behave the same. A plugin which is not loadable and does not have a manifest will not appear in the listing, and is vacuously considered compatible. This is because the output of the PluginScanners cannot distinguish between a class which does not exist and which does exist but has some error during loading.
I'm using this definition of compatible because the sync-manifests command can "make plugins compatible" by adding or removing manifests. If erroneous plugins were not considered compatible, then the sync-manifests command could not "make plugins compatible" because that would involve solving the errors, which is not in scope.

I think our workaround with a special path of classpath to denote classpath plugins in PluginUtils::classpathPluginSource should be improved. I built the basic auth extension, created a directory named classpath, moved the JAR file for the extension into that directory, and then ran bin/connect-plugin-path.sh list --plugin-location classpath. The end result was fairly confusing:

Thanks for finding that, I've changed it so that PluginSource uses null as a sentinel value for the classpath, and changed all of the places it's printed to re-inject the "classpath" string after all the control flow has used null.
I've replaced the makeUnique hack with Lists and counting instead of trying to make the ManifestEntry objects completely unique.

I've also finally gotten around to looking at the tests. It seems like we have a great foundation of scenarios to build on, but the assertions we're making are fairly minor. Can we add some coverage to verify, e.g., how many plugin rows are listed, the (partial or complete) contents of the post-table summary, and which plugins are described as being migrated vs. non-migrated?

Yes the assertions are pretty sparse. I've been avoiding parsing the output while it was still in flux, but I think the format is starting to settle down now. I'll go through and see what I can add.

I've also added a new warning to stdout which alerts users when they have incompatible plugins on the classpath that will not be auto-migrated. Currently without any manifests in the runtime (they're in a different PR) this is what it looks like:
46 plugins on the classpath are not compatible, and will not be auto-migrated. Please move these plugins to a plugin path location.
        org.apache.kafka.connect.transforms.ReplaceField$Value
        org.apache.kafka.connect.converters.FloatConverter
<snipped>
        org.apache.kafka.connect.converters.ShortConverter
        org.apache.kafka.connect.transforms.predicates.TopicNameMatches
Total plugins:                  1
Loadable plugins:               1
Compatible plugins:             1
Total locations:                1
Compatible locations:           1
All locations compatible?       true

They aren't part of the main table, and they aren't part of the summary.

We may choose to report broken plugin locations (i.e., any that has one or more unloadable plugins), but IMO it's better to leave this info out entirely. We have room to maneuver in the future with this tool if we want (the public interface boundaries set by the KIP are very permissive), and I'd rather we err on the side of simplicity for now. Total/loadable/compatible plugins seems like plenty.

I removed the location summaries and overall summaries. Users will need to inspect the table to figure out if everything is compatible, or run a worker verification, which is the more reliable way to find incompatibilities anyway.

I'm also worried about our alias collision reporting. Right now every invocation of the command so far has produced a ton of warnings about SMT aliases collisiding. It'd be nice if we could use ReplaceField$Key as an alias instead of just Key, but until/unless that KIP gets approved, we're stuck with a fairly large number of collisions with the aliases for our OOTB transforms.

I think this is the right call, since we already changed it so that the aliases in each row of the table doesn't depend on other rows. The alias collision logic was a red-herring because I accidentally used the collision logic in the original implementation, when it really isn't relevant to the tool at all.

CI failures appear unrelated, and the tests pass locally.

Hello, @gharris1727 , @C0urante
I'm working on #13247 and this commit somehow interfere with my change :)
ReassignPartitionsIntegrationTest that I rewrite in java works before this commit and hangs after.
Meanwhile I don't find a reason - why this breaks my test, but removing all connect dependencies from classpath of tools makes test pass without any additional changes.
Do you have any idea - how connect:api dependency can affect test cluster or similar code?

In case someone interested, adding :connect:api dependency to tools somehow make :storage:api classes invisible.
I fix it adding explicit dependency on :storage:api project.


Borken links in Service Section

While looking up some things in the docs I recognized that the Services section with all sublinks leads to a 404 (e.g. https://js-toolkit.meta.fr/services/key/)

Thanks, it will be fixed in the next release!


Cannot build my music mods (Closes during the process)

I'm trying to build my music mod, but i can't because the program closes before it can finish.

Please make sure you've followed the instructions that go with the release and provide more information about your issue, logs, or anything that can help identify your issue.


chore: split Elixir tasks

What kind of change does this PR introduce?
Split Elixir tasks in CI to improve build times.

Some problems with Dialyzer when ran in test environment - https://github.com/supabase/supavisor/actions/runs/9711545084/job/26804706396?pr=375#step:10:31

we can ignore it via .dialyzer_ignore.exs


Query regarding Building and improving user documentation and developer guides 📜

Hi @frank-zsy, I'm redirecting from here, and I'm interested to know more about the project — "Building and improving user documentation and developer guides" , and so, how can I get started?

I'm pretty familiar with the required tech stack & I have a ton of experience with Docusaurus, as well as React, Markdown & all of the required technologies. I've built my own blog page and I maintain it by frequently writing blogs which can be explored here.

I can see that my potential mentor (listed) is 彭佳恒 (Peng Jiaheng), and have provided an email —<EMAIL_ADDRESS>So, should I draft an email and drop it? And also, is there any communication channel that I can join to stay updated?
Thanks!

Hi, welcome to contribute to the repository.
If you have any questions, you can directly open an issue in this repository.
The homepage of opendigger provides an introduction to the existing metric documentation: https://github.com/X-lab2017/open-digger

This document explains how to use the sample data: https://github.com/X-lab2017/open-digger/blob/master/sample_data/README.md
Get start: https://github.com/X-lab2017/open-digger/blob/master/python_v2/README.md
And use opendigger to do some analysis work: https://github.com/X-lab2017/open-digger/blob/master/notebook/handbook.ipynb

Thanks @Peng99999 for the info! Also, are there any slack or discord server where I can tap into to get more insights on the tasks that are up for grabs regarding "Building and improving user documentation and developer guides"?
I'll invest time in exploring the project further but yeah, a few good starter tasks can help me to get started.

Currently, there are none. If you have any questions or wish to communicate, please discuss in the issues of this repository (or opendigger: https://github.com/X-lab2017/open-digger). We usually discuss matters in the GitHub issues. @Neilblaze

@Neilblaze Welcome, actually we do have a wechat group but no slack or discord channel available right now. But as more global developers starts to join us, I just start a slack channel, welcome to join us.
https://join.slack.com/t/slack-ok66537/shared_invite/zt-2ie5r42gz-q4dcm7FqDamZCYCkowgzyg
@Peng99999 We should start a new issue about the task which describes the details of the task to help developers get start.

Thank you @frank-zsy for the invite! Now as soon as new tasks are set up by either or both of you and @Peng99999, I'll take that up! As of now, I'm trying to go through the resources provided by Peng to get a holistic idea of the codebase.


misc: project smell tracker

[ ] Databases pinned to ancient version
[ ] Scripts call other scripts (PLEASE no): docker/makefile etc
[ ] Bloated tools folder
[ ] Tests broken / do not exist
[ ] Whole dependency pipeline is very prone to exploding. Dependabot and stuff is nice and all but it is spammy and breaks things. Would like an approach similar to osu! repositories where they just do it manually when necessary. Ideally the action should detect changes on pipfile / pipfile.lock then re-pin all 4 files (similar to make update)

Feel free to take any of these tasks / discuss. Opening as this is getting to a point where it is a bit annoying to work with.
Also I want to mention that we should really consider caddy over nginx as well.

#525


Web Accessibility index.md

I fixed some grammatical an structure issues.

[x] I have read freeCodeCamp's contribution guidelines.
[ ] My pull request has a descriptive title (not a vague title like Update index.md)
[ ] My pull request targets the master branch of freeCodeCamp.
[x] None of my changes are plagiarized from another source without proper attribution.
[ ] My article does not contain shortened URLs or affiliate links.

If your pull request closes a GitHub issue, replace the XXXXX below with the issue number.
Closes #XXXXX

Thank you for  creating this PR.  However, since it was created, the underlying document has changed.  Can you please review and resolve the current merge conflicts?  It could be the changes to the underlying document are so significant that your changes are no longer relevant.  If the latter is the case, it might be easier to just close this PR and create a new PR with any changes you still feel are important to make.
If you need any assistance or have questions about resolving the merge conflicts, please reply back or contact someone in the Contributors Room on Gitter.
Thank you.

Hi @asanc414
As there has been no response from your end for a while, we are closing this PR.
Feel free to request this PR to be reopened or create a new PR, if you still wish to make the changes you originally added plus any additional change requests asked of you.  Also, remember to update your fork, so you have the latest version of master in case it has changed significantly.
Happy Coding!


webrtc: addTransceiver: demo doesn't work when trying to bypass trickle ICE

Previously with addTrack it was possible to bypass trickle ICE.

Disable sending new-ice-candidate or immediately sending video-offer/video-answer
Wait until ICE gathering is complete event.candidate === null; then send video-offer/video-answer; in this case the SDP is fully populated with ICE candidates.

With addTransaction, this no longer works.

My mistake - when trying to stall the SDP(to gather all the ICE candidiates), there is a race condition with the caller-generated video-offer/video-answer round-trip. Still need to look at this closer.


Allocation profiling reports in sample unit other than bytes

To test I used a benchmark workload and compared JMC reporting to AP, benchmark code:
public class AllocationProfilingBench
{
    static class A {} // 16b
    static class B extends A {long f1,f2;} // 32b
    static class C extends B {long g1,g2,g3,g4;} // 64b

    A newA() { return new A();}
    B newB() { return new B();}
    C newC() { return new C();}

    @Benchmark
    public Object allocate()
    {
        Object result;
        double rnd = ThreadLocalRandom.current().nextDouble();
        if (rnd < 0.333)
            result = newA();
        else if (rnd < 0.666)
            result = newB();
        else
            result = newC();
        return result;
    }
}

In JMC I see the following breakdown:
Class				Size		Pressure(%)
AllocationProfilingBench$C	64b		57%
AllocationProfilingBench$B	32b		28%
AllocationProfilingBench$A	16b		14%

This is as expected. In AP I would expect an output in the object size multiple, but I'm getting this (trimmed the stacks):
AllocationProfilingBench$A_[k] 89
AllocationProfilingBench$A_[i] 5368
AllocationProfilingBench$B_[k] 213
AllocationProfilingBench$B_[i] 10599
AllocationProfilingBench$C_[k] 422
AllocationProfilingBench$C_[i] 20001

I assume the _[i] are in TLAB and _[k] are out of TLAB (nice touch, I'll add a wiki page on alloc profiling to give some details). The ratios look right, but the quantities reported are not in the unit I expected.

This behavior is intended.
In flat or traces view you will see both number of samples and bytes. Unfortunately, FlameGraph can show only one value. By default, this is number of samples. With -o collapsed=counter it will show total size. However, the ratio will be obviously different, since the bigger number of samples will be multiplied by a bigger object size. In this sense the number of samples is more fair.

@nitsanw Does my explanation make sense? Any suggestions on what to do with this issue?

I'm not sure what the best method in this case is:

default = samples: does not reflect size, so bias towards smaller allocations
counter = samples * size: reflects size, but not TLAB churn
There's a further issue here that TLAB size is not uniform and we are in that sense biased to wards the small TLAB, so TLAB size should also play into the evaluation...

I don't fully agree that samples bias towards smaller allocations, because smaller allocations will cause less frequent TLAB overflows. The above test case shows that the ratio is correct, and I believe current defaults are sane.
Have no idea what to do about this issue. Closing as "not-a-bug".


better swiping

Look at Instagram's view paging. Views should be able to be swiped and advance to whatever index is in view. Right now it will only advance one view regardless of how far you've swiped.

Hello,
In fact, that was one of the two improvements I wanted to suggest for react-view-pager.
Since you've already taken some inspiration from some Flickity related stuff (animation-bus), maybe this article from Flickity's creator could interest you :
http://metafizzy.co/blog/math-time-resting-position/
tldr: From, the velocity of the swipe, you could go the algebric way, but as he says, Math.log and Math.pow can be expensive operations, or you could run some kind of simulation to approximate the resting position.
Here's the very simple loop I use :
export default (x0, v0, f, vMin = 0.0001) => {
  let x = x0
  let v = v0
  while ( Math.abs(v) > vMin ) {
    v *= 1 - f
    x += v
  }
  return x
}

with x0 then initial position, v0 the velocity of the swipe, f the friction  constant and vMin the delta at which the simulation should stop.
The 2nd improvement I could see is adding some kind of resistance when dragging at one of the bounds of the track (when infinite=false)
Again, thx for your awesome work !

Thanks for the link! I'll check it out when I get a chance :) I found a way to add resistance https://github.com/souporserious/react-view-pager/issues/45 🎉  thanks for the kind words! I appreciate your feedback 😄


 Or am I doing something wrong while using them?

@tungfam Thanks for raising this issue! 👍
You're right, somehow the parser didn't find these symbols.
However, with the release of the next version SFSafeSymbols (happening within the next 2 weeks), that will be fixed.
Until then, I'll leave this issue open.

@tungfam A short update: Due to the missing release of macOS Big Sur, the update will only happen as soon as Big Sur is released. That might take some more weeks than the 2 weeks I suggested in my previous reply.

Many thanks for the update!
Sounds great 👍

@tungfam The 2.0.0 release is now available and fixes this issue.


bug(semantic): Export equals declaration not counted as a Read reference

Found by #4445
Correct, counts as a Reference::Read

Incorrect, does not count as a Reference::Read
type Foo = number
export = Foo

type Foo = number
export { Foo }

In this example. The foo flagged as ReferenceFlags::Read and ReferenceFlags::Type. Do you think we should just flag foo as ReferenceFlags::Type?

type Foo = number
export { Foo }

In this example. The foo flagged as ReferenceFlags::Read and ReferenceFlags::Type. Do you think we should just flag foo as ReferenceFlags::Type?

It would be better if we only flagged it as ReferenceFlags::Read, We can determine Foo is not a type symbol by ReferebceFlags. That would be useful for fixing #4504

What if it's not a type? Shouldn't export = compile to module.exports =? Or is it only used in type declarations?

What if it's not a type? Shouldn't export = compile to module.exports =? Or is it only used in type declarations?

Both value and type declarations can be referenced.

Closing this as it seems resolved.


Is there a way to NOT format certain files/buffers?

I have a project that's mostly under my control and I format all the things with black.
But, it has a subtree that is legacy code that has been copied in from another location.  I'd like keep it in it's original formatting so as to minimize differences from it's upstream.  Black has ways to ignore files/directories, but since python-black is running content through black via standard in, those exclusions don't seem to apply.
I'm not sure if there's something that I need to do in the python-mode universe or here in python-black, or in reformatter.el.
Any suggestions?
THANKS

i understand the issue, but i'm not sure the emacs package can do something about this.
to use black's exclusion configuration, that would need to live on the python side of the fence.
if black would take a filename that could work, sth like --stdin-filename which apparently exists for other formatters/linters for exactly the same reason; see recent remarks about this over here: https://github.com/purcell/reformatter.el/issues/13#issuecomment-634662838
so i guess black is the right place to request this feature; please cc me if you open one. (maybe it exists? didn't check, using phone now).
alternatively, it could theoretically live inside black-macchiato (i know the maintainer quite well 🙃) but since a) it's not related to partial formatting and b) it likely requires poking into black internals, i'm pretty sure that the maintainer 😜wouldn't be eager to add it there.

small addition, if black has a flag like that, this package is the right place to add it, reformatter.el let's us pass arbitrary flags, and a filename is easy to add. (see issue i linked above.)

I'll think about that for a while.
Would it be possible to do something with a file local variable that either python-black or reformatter could notice and return w/out changing anything?

you could make the enabling of the -on-save-mode conditional. how do you currently enable it?

This is my python setup:
(use-package python
  :mode ("\\.py\\'" . python-mode)
  :interpreter ("python" . python-mode)
  :config
  (use-package lsp-python-ms
    :init (require 'lsp-python-ms))
  (use-package py-isort)
  (use-package python-black)
  ;; (use-package py-yapf)
  :hook (
         (python-mode . lsp-deferred)
         (python-mode . py-isort-enable-on-save)
         ;; (python-mode . py-yapf-enable-on-save)
         (python-mode . python-black-on-save-mode)
         )
  )

that :hook for the on-save-mode is unconditional in that setup. you could make your own hook which has an if statement in it, and use whatever condition makes sense for your setup.


Bump v4.0.0-beta.1

Signed-off-by: MyonKeminta<EMAIL_ADDRESS>
What have you changed?
Bump version v4.0.0-beta.1
What is the type of the changes?

Misc (other changes)

How is the PR tested?

Unit test
Integration test

Does this PR affect documentation (docs) or should it be mentioned in the release notes?
No
Does this PR affect tidb-ansible?
No

/merge

/merge


add watchOS build to Travis

Previously, Travis CI didn't cover all supported ReSwift platforms.

Codecov Report

Merging #384 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master     #384   +/-   ##
=======================================
  Coverage   99.42%   99.42%
=======================================
  Files           5        5
  Lines         174      174
=======================================
  Hits          173      173
  Misses          1        1

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 948f7f6...8b35f28. Read the comment docs.

@mjarvis  At work, we had unexpected problems with building for different targets, so I maybe got a bit overzealous :) Do you have experience with picking Travis SDKs? I wonder why we used simulator, when we could'be used the production target.

@DivineDominion I've learned Xcode auto-selects the simulator variant when building to a simulator even if you select the device-oriented SDK, so the extra builds are actually exactly the same.
You can confirm this by looking at the logs for the device SDK travis builds, and note they're using Debug-iphonesimulator as output.
So we can pick either the simulator or the device variant to specify for travis, and reduce our builds by 3

Settings like FRAMEWORK_SEARCH_PATHS[sdk=watchos*] wouldn't work for the simulator, but we don't use that, so out with it :) Thanks for pointing out the redundancy, @mjarvis


fixed small error

Thanks so much for catching all of this and being my spellchecker @chill5018 😄🙏

Hey @0xflotus
Would you mind signing our CLA for this project? Since our repos are new, we didn't have cla assistant setup at that time.
Please sign it here: https://cla-assistant.io/prisma/prisma2-docs?pullRequest=1
If you don't sign this, we will, unfortunately, have to remove your commit.


Support installing from a specific commit

This can be done by removing the dependency on Mint.

Failing build log: https://app.bitrise.io/build/e6a3736a41698299#?tab=log


RBAC: handle all request.auth.claims[] using RBAC list matcher

RBAC: handle all request.auth.claims[] (e.g., request.auth.claims[groups], request.auth.claims[issuer], and etc) using RBAC list matcher.

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by:
To fully approve this pull request, please assign additional approvers.
We suggest the following additional approver: rshriram
If they are not already assigned, you can assign the PR to them by writing /assign @rshriram in a comment when ready.
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

/cc @liminw

/cc @diemtvu

@lei-tang: The following test failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/istio-unit-tests.sh
8b03e92e1a2cf399e2520e1e64af1084185e78ce
link
/test istio-unit-tests

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@lei-tang: The following tests failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/istio-unit-tests.sh
8b03e92e1a2cf399e2520e1e64af1084185e78ce
link
/test istio-unit-tests

prow/istio-presubmit.sh
8b03e92e1a2cf399e2520e1e64af1084185e78ce
link
/test istio-presubmit

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@lei-tang: PR needs rebase.

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

@lei-tang: The following tests failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/istio-presubmit.sh
8b03e92e1a2cf399e2520e1e64af1084185e78ce
link
/test istio-presubmit

prow/istio-unit-tests.sh
ac219fa62f38cd306e5f2de5af25fb5a8a8882f0
link
/test istio-unit-tests

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@lei-tang: The following tests failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/istio-unit-tests.sh
ac219fa62f38cd306e5f2de5af25fb5a8a8882f0
link
/test istio-unit-tests

prow/istio-presubmit.sh
ac219fa62f38cd306e5f2de5af25fb5a8a8882f0
link
/test istio-presubmit

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@lei-tang: The following test failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/istio-presubmit.sh
d23daab388c1ac8862b65040bb3b421c27b050a9
link
/test istio-presubmit

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@lei-tang: The following test failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/istio-unit-tests.sh
2034f98cd634f7da9c91649720875842c4f0e45c
link
/test istio-unit-tests

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@lei-tang: The following test failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/istio-unit-tests.sh
c11e55161115401c94415a11811cd34cea8fc6cf
link
/test istio-unit-tests

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

#6984

#2802

@lei-tang: The following tests failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/istio-unit-tests.sh
c11e55161115401c94415a11811cd34cea8fc6cf
link
/test istio-unit-tests

prow/e2e-dashboard.sh
c11e55161115401c94415a11811cd34cea8fc6cf
link
/test e2e-dashboard

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@lei-tang: The following test failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/e2e-simpleTests.sh
0ae7788c60effb9fabba471a071782186f7e3cd1
link
/test e2e-simple

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@lei-tang: PR needs rebase.

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by: liminw
To fully approve this pull request, please assign additional approvers.
We suggest the following additional approver: rshriram
If they are not already assigned, you can assign the PR to them by writing /assign @rshriram in a comment when ready.
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@rshriram can you review the PR again? The PR needs an approval from reviewers with write access.

New changes are detected. LGTM label has been removed.

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by: diemtvu, liminw
To fully approve this pull request, please assign additional approvers.
We suggest the following additional approver: rshriram
If they are not already assigned, you can assign the PR to them by writing /assign @rshriram in a comment when ready.
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@lei-tang: The following test failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/e2e-bookInfoTests-v1alpha3.sh
0a2dae2d481b94b3884d67f7ccba21137653700d
link
/test e2e-bookInfo-envoyv2-v1alpha3

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

/retest

/approval

/approve

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by: diemtvu, lei-tang, liminw
To fully approve this pull request, please assign additional approvers.
We suggest the following additional approver: rshriram
If they are not already assigned, you can assign the PR to them by writing /assign @rshriram in a comment when ready.
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

/approved

/cc @wattli

/approve

[APPROVALNOTIFIER] This PR is APPROVED
This pull-request has been approved by: diemtvu, lei-tang, liminw, wattli
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

OWNERS [wattli]

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@lei-tang: The following test failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/istio-pilot-multicluster-e2e.sh
0a2dae2d481b94b3884d67f7ccba21137653700d
link
/test istio-pilot-multicluster-e2e

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.


catchall for get does not respect order for any

I can't seem to hit the any handler with a get request method in the demo.
Repro:

Use router example: https://github.com/uNetworking/uWebSockets.js/blob/master/examples/Router.js
await fetch('/anything', {method: 'get'}).then(res => res.text()) // Nothing to see here! <-- bad
await fetch('/anything', {method: 'post'}).then(res => res.text()) // Any route with method: post <-- good
remove the catchall /* & it works

Expectation:

the matcher follows the order of the method chain

Version: 16.4

#860 #822

I think the way to go is to completely drop the idea that adding routes in a particular order changes matching. It makes no sense, you really only need the rule to be:
Static routes match first
Paremeter routes match second
Wildcard routes match last
And of course, any should not be treated different to get/post
What do you think?

This is yet another example of how this project has to differ from Express.js because of differing implementations

https://github.com/dimfeld/httptreemux/blob/master/README.md#routing-priority
This makes sense

matching based on specificity rules confuse me a bit. Essentially it's turning an O(log(n)) into O(n).  But for developer experience, that means I have to read every single rule to understand which one is at fault.
say the requested route is /a/b/c/d
/* <- matches, but maybe something more specific?
/a/b/*cat <- matches, but something more specific?
/a/b/c/:dog <- matches, but something more specific?
...100 rules later. nothing better, so go with the handler behind /a/b/c/:dog.
super contrived example & i hope  no one's logic is that ugly, but IMO order seems simpler.

Essentially it's turning an O(log(n)) into O(n).

No it's the opposite, matching in order of registration like Express is O n while matching in order of (static, paremeter, wildcard) is the only order you can do with O log n
I've seen cases where the O n matching has large differences between first and last in speed, something you rarely will have with a proper tree.
Besides - it makes sense that wildcards are lowest prio while static have highest (the more specific the higher priority)

Whoa! Never thought the difference would be noticeable. You're right then, specificity matching sounds like the way to go. If I understand correctly, a fixed any matcher comes before a wildcard get, if there's a tie, the any matcher loses?

Yes I guess that's how it goes. Simply put, the more specific route the higher priority. I guess any should come behind get if their route is equally specific.

Please have a test with npm install uNetworking/uWebSockets.js#binaries


Fix NCCL backend with MPI failing tests

This PR fixes https://github.com/ROCmSoftwarePlatform/frameworks-internal/issues/4135 (JIRA:https://ontrack-internal.amd.com/browse/SWDEV-393039)
Some NCCLBackendWithMPI tests are failing on ROCm 5.6. They are not failing on ROCm 5.4 and when run individually on ROCm 5.6.
The failure seems to be because of a synchronization issue between threads. This PR adds sleep for the threads before comm operations to avoid the failure. The change has been tested multiple times on ROCm 5.6 and tests passed in all of them.
It also includes @lcskrishna's fix for compilation issues with ROCm 5.6 (https://github.com/lcskrishna/cupy/commit/f2381ddf003c4d8fb1261914a077cfabae76c1d6)

This PR is currently outdated. Closing


Application resource authorized_redirect_urls get scrambled

Context: FusionAuth relies on the order of the authorized redirect URLs to determine the default URI in cases where none is specified—as in an IdP-initiated SAML sign-on with no RelayState provided.
Problem: The terraform provider does not preserve the configured order of the URLs.
With a terraform like this:
resource "fusionauth_application" "my_app" {
  oauth_configuration {
    ...
    authorized_redirect_urls                      = [
      "https://console.stage.example.com",
      "https://console.stage.example.com/api/auth/callback/fusionauth",
      "https://console.stage.east.us.example.com",
      "https://console.stage.east.us.example.com/api/auth/callback/fusionauth",
      "http://localhost:3000",
      "http://localhost:3000/api/auth/callback/fusionauth",
    ]
    ...
  }
}

I get a plan like this:
      ~ oauth_configuration {
          ~ authorized_redirect_urls           = [
              + "http://localhost:3000/",
              + "http://localhost:3000/api/auth/callback/fusionauth",
              + "https://console.stage.east.us.example.com/",
              + "https://console.stage.east.us.example.com/api/auth/callback/fusionauth",
              + "https://console.stage.example.com/",
                # (1 unchanged element hidden)
            ]
            # (14 unchanged attributes hidden)
        }

This appears to be the same type of issue as addressed for another list in https://github.com/FusionAuth/terraform-provider-fusionauth/pull/280

@jcamenisch
Yes, the cause of this seems to be the usage of TypeSet instead of TypeList. TypeSet will automatically create a set of unique values, but at the cost of ordering the elements, while TypeList will preserve the order of elements, but will allow for duplicate values to be passed down to the API request (potentially causing some bugs). Still, in cases where ordering is needed the TypeList is the way to go in my opinion.

Fixed in v0.1.107.


Create Executable Config Parser

Executable Parser to load Executable commands from

Resources
Application Arguments
Properties

Subtask of parent #7

Base case for loading from Resources completed

Below actions are pending

Support for loading executable using Application Arguments
Support for loading executable using System Properties


Tensorflow support

Tracking issue for all tensorflow related tasks.

With the release of Tensorflow 2, they deprecated freeze_graph
And introduced a new format called SavedModel. This can be easily shared and further tuned if needed, since the weights are stored separatelly.
Model zoos with tensorflow: tfhub.dev, kaggle
To load this model in c++, they added a new API.
But there is no prebuilt library provided. Only for C. (which has an (3+ years old) experimental api for this)
It requires manually building tensorflow. This can be done with bazel using the //tensorflow:libtensorflow_cc.so target.
To get a proper rocm build, there is a dedicated repository for it.

Instead of depending on TF, we should create a tf2 parse in migraphx which can handle the new format.

The SavedModel will contain the following format: (source)
assets/
assets.extra/
variables/
    variables.data-?????-of-?????
    variables.index
saved_model.pb

An example SavedModel: https://www.kaggle.com/models/tensorflow/resnet-50 (It only has variables, no assets)
Those names come from here: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/cc/saved_model/constants.h
And the variables naming: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/util/tensor_bundle/naming.cc
The saved_model proto is here
These will be used to generate the c++ code, and parse the binaries with these.
Inspecting any protobuf:
pip install protobuf-inspector ansi2txt
protobuf_inspector < saved_model.pb | ansi2txt &> saved_model.dump
A partial config file to get better logs. See CONFIG.md.
Some of these proto-s are already in MGX, and the matching protos in TF and TSL.
We will need to update these as well, since never versions available.
Or go with "tf2" folder and write it from scratch. But it would be ideal to have a "common" set.
Parsing the protobuf will contain a meta_graph, which has the following: GraphDef, SaverDef, CollectionDef, SignatureDef, AssetFileDef, SavedObjectGraph.
The GraphDef is what currently parsed as tf1.
The SavedObjectGraph will hold references to the actual variables. Each path is in variables.index file, which probably holds the weight location in variables.data-*.
Here are some files to check for start: loader.cc, reader.cc, env.cc

Check https://github.com/onnx/tensorflow-onnx to see if it can be used to avoid/workaround tf2 implementation.

Tensorflow
Official documentation is here.
python3 -m venv tf_onnx
. tf_onnx/bin/activate

pip install -r requirements.txt

Test with ResNet50
curl -L -o ./resnet50-model.tar.gz\
  https://www.kaggle.com/api/v1/models/tensorflow/resnet-50/tensorFlow2/classification/1/download
mkdir resnet50
tar xzvf resnet50-model.tar.gz -C resnet50
python -m tf2onnx.convert --saved-model resnet50 --output resnet50.onnx

It should compile fine.
curl -L -o ./bert-model.tar.gz\
  https://www.kaggle.com/api/v1/models/google/bert/tensorFlow2/answer-equivalence-bem/1/download
mkdir bert
tar xzvf bert-model.tar.gz -C bert
python -m tf2onnx.convert --saved-model bert --output bert.onnx

It will fail, because Xla* operators are not supported.
see here and here
#!/bin/bash
curl -L -o ./bert-qa-model.tar.gz\
  https://www.kaggle.com/api/v1/models/seesee/bert/tensorFlow2/uncased-tf2-qa/1/download
mkdir bert-qa
tar xzvf bert-model.tar.gz -C bert-qa
python -m tf2onnx.convert --saved-model bert-qa --output bert-qa.onnx

SDXL
TODO: https://www.tensorflow.org/tutorials/generative/generate_images_with_stable_diffusion
Note: Make sure to disable JIT

What is uploaded for HuggingFace, is either in safetensor or h5. No SavedModel format.
In theory, all it would take to load convert it is:
import tensorflow as tf
import tf2onnx
import onnx
from tensorflow import keras
from keras.models import load_model

model = load_model('path/to/keras_model_you_want_to_convert.h5')

onnx_model, _ = tf2onnx.convert.from_keras(model)
onnx.save(onnx_model, 'new_model.onnx')

It might work for some, but in practice, sadly this is not the case. Because the model config is not saved, only the weights.
There are classes to help in transformers e.g. TFBertModel, which knows the config. But in that case, optimum would already do a better job with converting.


Creating GitHub releases

Hi! This is just a small suggestion
I use the watching of repos releases a lot to stay up to date with what new features are out in different repos. Do you have any plans on tagging your releases and making github releases out of them? (You know, those that are found here: https://github.com/cannorin/FSharp.CommandLine/releases)
Kind regards

Honestly I didn't expect this library becomes to be used by many people (anyone besides me 😅).
I think I must maintain this library much more from now on. Thank you for your suggestion!

Honestly I didn't expect this library becomes to be used by many people (anyone besides me 😅).
I think I must maintain this library much more from now on. Thank you for your suggestion!

You mustn't do anything.


How to install the gdal2.1.0

Hi,@avanetten
When installing gdal2.1.0 with conda,why is the display:
CondaRuntimeError: Runtime error: RuntimeError: Runtime error: Could not open u'/home/cp/anaconda2/pkgs/geos-3.5.0-0.tar.bz2.part' for writing (HTTPSConnectionPool(host='repo.continuum.io', port=443): Read timed out.).

Try using the Dockerfile to install gdal, rather than using conda.


[Question] Should'nt the arrow icon be responsive?

Is it relevant to change the orientation of the arrow icon that is before the text "Try either of the following users" on the login page for responsiveness reasons?
It's true that it has nothing to do with "learning symfony" but it's good aspect design of the application and to help the user.
If so, i am interested in doing a PR.

@sir-kain thanks for reporting! I agree this is something that must be fixed. I know you said you were willing to create a PR yourself ... but the change is minimal, so I did it myself: #840. But we'll be happy to get other contributions from you in the future. Thanks!


deployment doesn't stop

When installation of node is done it should inform Foreman. There is a wget command in kickstart file which should do this.
this is how it looks in my env:
echo "Informing Foreman that we are built"
wget -q -O /dev/null --no-check-certificate http://foreman-server.opnfv.com:80/unattended/built?token=45da12c4-e91a-4315-b77c-e3d0170b5e4f

I put 'sleep 3h' into kickstart
then i observed following message occurs right before 'Informing foreman that we are built'
Exiting; failed to retrieve certificate and waitforcert is disabled

Seems like certificate issue between puppet master and agent
after that I can do manualy:
wget --no-check-certificate http://foreman-server.opnfv.com:80/unattended/built

and then when reboot, it will boot from disk. (then i see puppet errors but that's another issue :smile: )

certificate issue is not relevant it was caused by previous installation. There was need to clean it on foreman node before build start again:
puppet cert clean oscontroller1.opnfv.com

Thanks to Tim advice to use wget with --no-proxy option in kicstart file
Now the issue is solved.

Closing this issue and will add the wget with --no-proxy option to the proxy issue fix.


jsonapi and definitions

I am trying to write a specification for a simple API following http://jsonapi.org/
jsonapi has a kind of complex way to send the data and attributes, for example to create a object a have to send something like:
data:
  type: specifications
  attributes:
    name: "a name"
    format: "yaml"

I did in this way,  but looks a little complex.
paths:
  /api/specifications:
    post:
      summary: Create a specification
      description: Specifications POST /api/specifications Create a specification
      parameters:
        - type: string
          in: query
          required: true
          name: api_key
          description: API Key
        - in: body
          required: true
          name: data
          description: data
          schema:
            $ref: '#/definitions/Specification'

definitions:
  Specification:
    type: object
    properties:
      data:
        $ref: '#/definitions/SpecificationData'
  SpecificationData:
    type: object
    properties:
      type:
        type: string
        example: specifications
      attributes:
        $ref: '#/definitions/SpecificationAttributes'
  SpecificationAttributes:
    type: object
    properties:
      name:
        type: string
      format:
        type: string
        example: yaml

Any suggestions on how to simplify?

That actually looks like the right way to define it. You can define everything inline, but for DRY, you're better off the way you defined it here.

Thanks @webron
Could you show me an example of how to do inline?

Sure. It'd be something like:
paths:
  /api/specifications:
    post:
      summary: Create a specification
      description: Specifications POST /api/specifications Create a specification
      parameters:
        - type: string
          in: query
          required: true
          name: api_key
          description: API Key
        - in: body
          required: true
          name: data
          description: data
          schema:
            type: object
            properties:
              data:
                type: object
                properties:
                  type:
                    type: string
                    example: specifications
                  attributes:
                    type: object
                    properties:
                      name:
                        type: string
                      format:
                        type: string
                        example: yaml

As you can see, it can get lengthy and difficult to follow. It also means you can't reuse the definition should you need to.

Cool, thank you very much.
At the end I have a definition like

  "definitions": {
    "Specification": {
      "type": "object",
      "properties": {
        "data": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "example": "specifications"
            },
            "attributes": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "format": {
                  "type": "string",
                  "example": "yaml"
                }
              }
            }
          }
        }


Feature/3

Description
The pull request adds migration and seeding of the database, it also setups up a factory to get connections for the database.
Resolved Issue
Closes #3
Additional Information
Discuss whether the proposed idea for handling seeding is of any use. Maybe remove the sql dummy data and create the dummy data based on application objects

Unfortunately, instructor table is missing - this has to be added before merging.

Hej Kristian. Ser rigtig godt ud. Jeg savner lidt et instructor table i dit migration schema. Håber du har det godt. :-)
Med venlig hilsen
Din kollega og ven
Andreas Würtz


Incorrect preview image displayed on various platforms

Describe the issue
There's a discrepancy in the preview image displayed for https://datahub.io/ when shared on platforms like LinkedIn and Google Chat. It appears that the Open Graph image tag or equivalent meta tags might not be rendering the correct preview image. This issue seems to be a recent development as the preview image was displaying correctly until not long ago.
Issue Details

Platforms Affected: LinkedIn, Google Chat (potentially others)
Expected Behavior: The preview image should accurately represent the website's home page
Current Behavior: The preview image displayed is incorrect

Screenshots

FIXED


Positioning improvements

With this PR, I propose some improvements for positioning stuff. Mainly, i renamed variables and implemented an initial version (We do need a solution for two defensive players!) of GoToDefensePosition.

By implementing the BallIDefensiveArea decision I am trying to define an area in which the defensive players are acting more active and go to the ball to kick it away (maybe to an offensive playing robot?).  Or in the goal.

As 87da736 suggests, I am pretty useless with these simple position calculations. It would be nice if somebody could have look over that stuff.


CCTP should be fully implemented

As a user
I want to burn ETH using dYdX and have Noble validate, mint, and IBC forward
Because ______
Scenario: Strangelove will implement a CCTP Relayer that enables the following use case:
  When a User initiates token burn on ETH using dYdX App
  Then IBC forwarding information is (optionally) included in the message metadata
  When ~13 minutes elapse for burn finality on ETH
  Then Strangelove CCTP Relayer observes burn on ETH
  And requests Attestations from Circle API
  And manages retry handling for block observation errors and attestation request errors
  When Circle API proves burn and issues attestation
  Then Strangelove CCTP Relayer broadcasts tx to Noble chain with attestations (with retry handling on broadcast errors)
  And Noble chain validates attestations, performs mint, then initiates IBC forward if specified

In protocol
design here
### Tasks
- [ ] https://github.com/strangelove-ventures/noble/issues/120
- [ ] https://github.com/strangelove-ventures/noble/issues/218
- [ ] https://github.com/strangelove-ventures/noble/issues/219
- [ ] https://github.com/strangelove-ventures/noble/issues/220

Current threads-

Working through the CCTP Module PR by PR with Circle.  Walkthrough with Halborn on Tuesday next week.
Router module is out for audit.
We have a duct-taped version of both modules on testnet with a working interchain test for mint+forward.  This should be good enough for DYDX to integrate

@jonathanpberger


Forward session request with forwarder

Which issues of this PR fixes:

This PR try to fix #37 and #123
Change log:

Forward new session and update session requests by forwarder.
Add ZooKeeperNewSessionRequest and ZooKeeperUpdateSessionRequest
Change new session and update session log format
Disable NuRaft auto forwarding
Optimize sync sessions request format(add body length)
Code factoring to make it more readable.
Add opnum unspecified for triggered watch response

@lzydmxy please review the PR.

Introduced performance regression, should be fixed
================= Result (Time measured in microsecond.) =================
thread_size,tps,avgRT(microsecond),TP90(microsecond),TP99(microsecond),TP999(microsecond),failRate
300,49590,6229.0,6400.0,8900.0,51300.0,0.0

total requests: 1091000
fail count: 0
total time cost:<PHONE_NUMBER> microsecond
wallTime: 42 second

Performance issue fixed and now the performance test shows 25% improment compared with v2.0.0
Binary built by master
================= Result (Time measured in microsecond.) =================
thread_size,tps,avgRT(microsecond),TP90(microsecond),TP99(microsecond),TP999(microsecond),failRate
2000,87441,22902.0,36600.0,48400.0,67500.0,0.0

total requests: 2973000
fail count: 0
total time cost:<PHONE_NUMBER>8 microsecond
wallTime: 107 second

Binary of v2.0.0
================= Result (Time measured in microsecond.) =================
thread_size,tps,avgRT(microsecond),TP90(microsecond),TP99(microsecond),TP999(microsecond),failRate
2000,70078,28587.0,43000.0,71200.0,121500.0,0.0

total requests: 2663000
fail count: 0
total time cost:<PHONE_NUMBER>3 microsecond
wallTime: 113 second


Default sort order wiki

Thanks again for the great working vue-table :)
I noticed that the wiki to provide a default sort order is currently wrong.  It states to provide the following:
https://github.com/ratiw/vuetable-2/blob/08f453ecfaa6707571bba6fcfc3890dee256304f/docs/Sorting.md#initial-sorting-order
sortOrder: [
      {
        field: 'email',
        direction: 'asc'
      }
    ]

While this orders the column, it does not put the sorted symbol on the header.  I had to use the following code in order for it to work:
sortOrder: [
      {
        field: 'email',
        sortField: 'email',
        direction: 'asc'
      }
    ]

For me, the proposed code does not work.
I have however found out that the initial sort symbol isn't applied when i'm using a __slot: field.
For regular column fields the symbol is displayed correctly, even though I did not add the sortField that is mentioned by @SimplyCorey

@gmw-web Thanks. Will find time to check it this weekend.

just found out that if field name is different than sortField value, then you have to specify both of them in the sort-order param, in order for the symbol to show up.
If name and sortField are the same, then only field is enough.

bump

sortField: 'email' debe ponerse en fields y poner el simbolo.
fields: [
{
name: 'email',
sortField: 'email'
},


create a model for jointly optimizing multiple models

It would be neat if we could create two models (e.g. and "encoder" and a "decoder" like http://arxiv.org/pdf/1406.1078.pdf) and then stuff them into another "meta-model" that would jointly optimize the parameters of each sub-model together. Maybe hook together the losses, or just add the parameters of the first model to the loss for the second?

would it be better to do this having another layer class, SplitLayer?
each SplitLayer would split the inputs and/or outputs in 2 or many parts and the costs and weights are updated relative to the parts
ex: you have 6 inputs and 12 outputs and you split them in half: first 3 inputs would connect only with the first 6 outputs. in this way you can have a network which has two separate networks inside or whatever combination of small networks inside it which join into larger networks.
I have done something similar implementing a recurrent regressor for source separation (input=1024, output =2048), basically the output contains the two separated sources. the original paper is this: http://www.ifp.illinois.edu/~huang146/papers/DRNN_ISMIR2014.pdf

In the theanets master branch is some code for implementing multiple losses within a single model. I think this will address the current need (and others!).
I still need to write some documentation for the feature, so I'll close this when that's finished.

I've added some documentation at http://theanets.rtfd.org/en/latest/api/losses.html

Any progress on the encoder-decoder model?


Continuous freezing

I can't type more than a few characters before any keyboard entry halts for about 5 sec.
Windows 7
vscode: 1.20.1
version: 0.16
Update
The issue only exists when using the vscodevim extension
Update 2
Using the amVim extension also results in the exact same issue.
Solved
Turns out I didn't change the elm-package.json src-directories value from the default, but the fact that the error message appears linked to the src/Main.elm file doesn't lead me to think that the elm compiler is looking in the wrong directory.

I've also experienced this with VSCodeVim. If I understand correctly - were you able to solve this by changing any source directories?

Yes, when the src-directories attribute was set everything then worked as expected.


Picture generation does not work in Sketch 3.5.2

Error code:
18/02/2016 10.21.33,577 Female (Sketch Plugin)[18844]: TypeError: fill.setPatternImage_collection_ is not a function. (In 'fill.setPatternImage_collection_( image  ,coll)', 'fill.setPatternImage_collection_' is undefined)
line: 147
sourceURL: /Users/Halborg/Library/Application Support/com.bohemiancoding.sketch3/Plugins/Content Generator Sketch Plugin/Persona/Photos/Female.sketchplugin
column: 50

Newest version of Sketch and the plugin.
Help! :-)
Btw, super awesome plugin

(as noted in issue #79 within the past couple of days)

did you update the plugin using sketch toolbox?

@timuric - I did. Just retried all of the standard stuff (reloading program, reinstalling plugin) and somehow it worked. Thanks for the quick response :-)

There is an issue with sketchtoolbox updates ;)


[GHSA-46v3-ggjg-qq3x] Rancher UI has multiple Cross-Site Scripting (XSS) issues

Updates

Affected products

Comments
Correct the package name

Hi there @macedogm! A community member has suggested an improvement to your security advisory. If approved, this change will affect the global advisory listed at github.com/advisories. It will not affect the version listed in your project repository.
This change will be reviewed by our Security Curation Team. If you have thoughts or feedback, please share them in a comment here! If this PR has already been closed, you can start a new community contribution for this advisory


onboarding exercise 4, 5 ,6

Also, when opening a PR for review you should run

make format
make lint
make test
And make sure the tests and lint checks pass

Discussed with @rose2221 this PR. Closing it.


will not load and breaks my page

do not know why but vlucas does not work for me and just breaks every page as soon as I load it
<?php
$dotenv = Dotenv\Dotenv::create(__DIR__);
$dotenv->load();

its a real pain the problem is the $dotenv->load()  because as soon as I comment that part out the page then works fine. But I do not know what the root of the problem is. all of my other library's load fine with composer but not this one

sorry I have now found out what the problem is and what was breaking my page
in the .env file after each var I was putting ; eg MASS_PASS = "secret" ;
Id = 123; I never knew that it separates them automatically I have now taken out the semi colon and it works fine.. School boy error


Switch to building JS locally using webpack or gulp

Use webpack or gulp to compile jQuery, Bootstrap and any other modules into a single JS file.  Do the same for CSS.

Ended up going with Laravel Mix.  It's what I know...


Leaked PackedSceneEditorTranslationParserPlugin in editor

Godot version:

4.0.dev.custom_build. 93b50a62e
Issue description:

When I open and close editor then with -v flag I see this leak
WARNING: ObjectDB instances leaked at exit (run with --verbose for details).
     at: cleanup (core/object.cpp:2041)
Orphan StringName: PackedSceneEditorTranslationParserPlugin
StringName: 1 unclaimed string names at exit.

Steps to reproduce:

Run Godot - godot4 -e -v -q

CC @SkyLucilfer


Unable to connect to Databricks from Github Actions using Windows runner OS

I'm trying to set up Github Actions for CI for harlequin-databricks, but whenever setting one of the Windows images as the OS for the Github Action, the Action hangs & is unable to connect to Databricks & initiate a SQL query.
Have tried both OAuth M2M and PAT as auth methods, and setting _tls_no_verify=True in sql.connect() without success.
Running the Action using an Ubuntu or MacOS image works fine, so this is specifically a Windows issue. It is also specific to Github Actions, as running the MWE below works fine on a windows laptop. So potentially this is a Github Actions issue not one with this package.
Does anyone have any ideas what's going on?
from databricks.sdk.core import Config, oauth_service_principal
from databricks import sql
import os

def credential_provider():
    config = Config(
        host = os.getenv("DATABRICKS_HOST"),
        client_id = os.getenv("DATABRICKS_CLIENT_ID"),
        client_secret = os.getenv("DATABRICKS_CLIENT_SECRET"),
    )
    return oauth_service_principal(config)

def main():
    with sql.connect(
        server_hostname = f'https://{os.getenv("DATABRICKS_HOST")}',
        http_path = os.getenv("DATABRICKS_HTTP_PATH"),
        credentials_provider = credential_provider,
        #access_token = os.getenv("DATABRICKS_TOKEN"),
        #_tls_no_verify=True,
    ) as connection:
        with connection.cursor() as cursor:
            cursor.execute("SELECT 1")
            result = cursor.fetchall_arrow()
            print(result)

if __name__ == "__main__":
    main()

hey folks - this is resolved. It was a GitHub Actions issue relating to setting bash as the shell on the windows runner*. With bash set the Action always hangs upon the first attempt to connect to Databricks. Using the default windows shell everything works fine.
*setting shell: bash for windows is a requirement of snok/poetry install action. I can work around this issueby not using that poetry install action.
This is a minimal code example of the issue for visibility:
Action:
name: windows-latest with shell bash

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
  workflow_dispatch:

jobs:
  windows_latest_bash:
    runs-on: windows-latest
    defaults:
      run:
        shell: bash
    timeout-minutes: 5

    steps:
      - name: Check out code repository
        uses: actions/checkout@v4

      - name: Set up Python 3.12
        uses: actions/setup-python@v5
        with:
          python-version: 3.12

      - name: Run connection
        env:
          DATABRICKS_HOST: ${{ secrets.DATABRICKS_HOST }}
          DATABRICKS_HTTP_PATH: ${{ secrets.DATABRICKS_HTTP_PATH }}
          DATABRICKS_CLIENT_ID: ${{ secrets.DATABRICKS_CLIENT_ID }}
          DATABRICKS_CLIENT_SECRET: ${{ secrets.DATABRICKS_CLIENT_SECRET }}
          #DATABRICKS_TOKEN: ${{ secrets.DATABRICKS_TOKEN }}
        run: |
          pip install databricks-sql-connector databricks-sdk
          python db_test.py

Running a simple Databricks connection test script db_test.py:
from databricks.sdk.core import Config, oauth_service_principal
from databricks import sql
import os

def credential_provider():
    config = Config(
        host = os.getenv("DATABRICKS_HOST"),
        client_id = os.getenv("DATABRICKS_CLIENT_ID"),
        client_secret = os.getenv("DATABRICKS_CLIENT_SECRET"),
    )
    return oauth_service_principal(config)

def main():
    with sql.connect(
        server_hostname = f'https://{os.getenv("DATABRICKS_HOST")}',
        http_path = os.getenv("DATABRICKS_HTTP_PATH"),
        credentials_provider = credential_provider,
        #access_token = os.getenv("DATABRICKS_TOKEN"),
    ) as connection:
        with connection.cursor() as cursor:
            cursor.execute("SELECT 1")
            result = cursor.fetchall_arrow()
            print(result)

if __name__ == "__main__":
    main()

Commenting out these lines in the yml will result in a successful action run:
    defaults:
      run:
        shell: bash

if included however the Action will hang upon Databricks connect


Lobber Zombies are too difficult to fight

On the official wiki it was shown where it was written that the rotten flesh projectile only gives 1 damage to players in Minecraft Earth. But in the mod they do a lot of damage thus piercing iron armor (and any armor) which is why they are hard to deal with. I'll imagine this: if they participated in Trial Chambers, they would spawn from the spawner instead of skeletons and they would kill the player in few seconds in any chamber (even sometimes the shield may not help the player if lobber zombie is behind, and also it may not be able to withstand such long durability from such damage). What are your thoughts on this?

I've reduced the projectile damage, should be easier now to survive the lobber zombie


Performance on iphone 6 is low

The performance of the app on IPhone 6 is low

We removed the background blur effect in the latest version which should help the iPhone 6 a lot. Please make sure you are running a release build. Debug builds will run slow on older devices.


featimplement alterDatabaseRenameCommand in nereids

What problem does this PR solve?
Issue Number: close #https://github.com/apache/doris/issues/42786
Related PR: #xxx
Problem Summary:
Release note
None
Check List (For Author)

Test

[x] Regression test
[ ] Unit Test
[ ] Manual test (add detailed scripts or steps below)
[ ] No need to test or manual test. Explain why:

[ ] This is a refactor/code format and no logic has been changed.
[ ] Previous test can cover this change.
[ ] No code files have been changed.
[ ] Other reason

Behavior changed:

[x] No.
[ ] Yes.

Does this need documentation?

[x] No.
[ ] Yes.

Check List (For Reviewer who merge this PR)

[ ] Confirm the release note
[ ] Confirm test cases
[ ] Confirm document
[ ] Add branch pick label

Thank you for your contribution to Apache Doris.
Don't know what should be done next? See How to process your PR.
Please clearly describe your PR:

What problem was fixed (it's best to include specific error reporting information). How it was fixed.
Which behaviors were modified. What was the previous behavior, what is it now, why was it modified, and what possible impacts might there be.
What features were added. Why was this function added?
Which code was refactored and why was this part of the code refactored?
Which functions were optimized and what is the difference before and after the optimization?

run buildall


new approach for builder pattern

feel free to make suggestion  and improvements based on the approach.

@torokmark, have you checked my suggestion of the changes? :)

Hi Milad,
Nice approach. Though, I am a bit concerned about the followings:

Even though, Build interface is a general type with type param, it requires the implementor class to have setAge, setPhone, setAddress methods.
What if I am intended to use Build with other type paramater like Car. I cannot use it, since it makes me implement setPhone in Car, but a car does not have phone number.
In my point of view, Build is quite misleading in this way.
Let me suggest the following.
Let us have a Build interface with type parameter, and this interface has only one method, like build(): T

namespace BuilderPattern {
    export interface Builder<T> {
        build(): T;
    }

    // ...
}

Director with UserBuilder parameter in its constuctor is a bit smelly in this way. Why does not makeUser return a User?

I would recommend the following here:
export class UserDirector implements Director<User> {

    constructor(private userBuilder: UserBuilder){}

    create(): User {
        if(this.userBuilder.Name === 'Jancsi') {
            this.userBuilder.setAge(12)
            .setPhone("0123456789")
            .setAddress("asdf");
        } else {
            this.userBuilder.setAge(0)
            .setPhone("xxxxxxxxx")
            .setAddress("xxxx");
        }
        return this.userBuilder.build()
    }
}

Hi Mark 👋
Your approach makes much more sense to me, hence I completely agree on this. Shall i refactor with your approach in my next commit in this thread with polishing stuff? 😃

@miladvafaeifard , yes please, it would be great if you did refactoring on the approach.
I am always happy to see people contributing. Thank you

Hi @torokmark,
I refactored and polished based on your suggestion. I would appreciate if you could review the change. and provide your thoughts on this.


[Wiki] Link to download v1.6 on the Wiki please.

Please can you update the Wiki with a link to v1.6 for the Anbernic 351m, many thanks for your hard work!.

I will eventually but it will take some time.  Until then, you can download the current image and update online to it.  Stay tuned.

OK that makes sense, i appreciate the response.


Annotations collection not available

I want to add a new annotation like a text-rectangle or speech-bubble, but I can't find the annotations collection in the project class. Is it missing?
If I am missing something, do you have an example of how to add an anotation?
I see that this issue  is still open. If so, when will this enhancement be available?

If I am missing something, do you have an example of how to add an anotation?

There are no examples, though a good start would be some tests, I guess. The way to add annotations is through the Track class, passing the results of the various annotation functions as the first argument:
from camtasia.annotations.shapes import rectangle
from camtasia.annotations.types import Color
. . .
track = timeline.tracks[0]
track.medias.add_annotation(rectangle(fill_color=Color(1, 0, 0)), start=100, duration=300)

I haven't actually tested this on a recent version of camtasia, but I know this used to work (at least for whatever limited needs I had for it).
I know all of this is underdocumented, etc., and I apologize for that, but this project has fallen way off of my radar. If it's a useful project for you, I'd be happy to merge in any improvements you want to provide.

I see that this https://github.com/sixty-north/python-camtasia/issues/6 is still open. If so, when will this enhancement be available?

I have no plans to do any work on it.


New success condition Puppet Challenge

Hi (@tinchoabbate ),
Apologies if I'm not supposed to post here; there is no issue tab on the author's V3.
In puppet V3, the player is supposed to succeed executing only a single transaction. I don't think this is possible. Even if one was to deploy a contract to handle all necessary steps, that's still contract deployment + contract call (+ token approval to attack contract).
Am I missing something here or is it a mistake ?
Thank you for your help,
Cheers 😄

Hey @Koowah. Thanks for the notice. I opened an issue tab in the repo github.com/tinchoabbate/damn-vulnerable-defi. So any future questions you can post there.
Not sure what you're referring to regarding the success condition in Puppet v3. It does not say nor enforce that you should pass the challenge in a single transaction.

You might be missing something :) Have you checked the new feature of the Damn Valuable Token ?
Anyway, please let's keep any future question or similar here: https://github.com/tinchoabbate/damn-vulnerable-defi/discussions
Thanks!

Oh flash swaps right! Thanks for your answers.
See you in your repo 😄


SAMZA-1370: Memory leak in CachedStore when using ByteBufferSerde as key Serde

ByteBufferSerde uses relative bulk get to serialize the provided ByteBuffer which changes its internal position. ByteBuffer's equals and hashCode depend upon its remaining elements, i.e. on its position. This means that when using ByteBuffers as keys in the CachedStore, flushing cache contents to the underlying store changes their hashCode. Since the hashCode for the key no longer matches the one used when inserting it into the map, the LinkedHashMap cannot correctly evict or remove these entries, leading to a memory leak.
Changing ByteBufferSerde to duplicate the provided ByteBuffer before copying should fix this issue. Prefer this over using absolute gets since there's no bulk absolute get API for ByteBuffer.

@nickpan47 @vjagadish1989 Please take a look.


[forwardport] api keys ttl

Forwardport of

https://github.com/rancher/ui/commit/ec27b163a344a857bd2012651754b78ee34736fe
https://github.com/rancher/ui/commit/f38b44088d6d2ff353164d3d392f4179fbc91940
https://github.com/rancher/ui/commit/4a6d736b01325db286123e5bf8896a8efbe78207

removing backend label, just merged the PR


Documentation for polymorphic domain object containers

The documentation about polymorphic domain object containers in 7.4.2 is extremely sparse.
The only things I could find were a two-sentence mention at https://docs.gradle.org/current/userguide/custom_gradle_types.html#extensiblepolymorphicdomainobjectcontainer and the DSL doc / JavaDoc.
I had a hard time the last two days to get this done properly.
Please elaborate a bit more about the correct usage in the user guide and maybe a sample.
For example that you are forced to register each and every type manually even if there is no difference between public-facing interface and implementation.
Or whether something is necessary to get the Gradle magic like foo(IvyPublication) { ... } or whether it should just work and so on.

In the meantime these tests are probably the next best thing, but absolutely agree it would be useful to see some proper examples in the docs:
https://github.com/gradle/gradle/blob/540473b8118064efcc264694cbcaa4b677f61041/subprojects/core/src/integTest/groovy/org/gradle/api/internal/model/ObjectFactoryIntegrationTest.groovy#L755-L804

Is there an official example of how to use ExtensiblePolymorphicDomainObjectContainer in Kotlin? I couldn't find any https://github.com/search?q=repo%3Agradle%2Fgradle+ExtensiblePolymorphicDomainObjectContainer+lang%3AKotlin+&type=code
I would like to know how to 'duplicate' the factories from one ExtensiblePolymorphicDomainObjectContainer to another.
/** Dummy config that a plugin-user might subclass */
abstract class UserProvidedConfig @Inject constructor(
  private val configId: String
) : Named {
  abstract fun encode(): String
  override fun getName(): String = configId
}

// this is the container that is defined in my plugin's extension DSL
val userProvidedConfigInAnExtension: ExtensiblePolymorphicDomainObjectContainer<UserProvidedConfig> =
  objects.polymorphicDomainObjectContainer(UserProvidedConfig::class)

// and this is defined in some task for my plugin
val userProvidedConfigInATask: ExtensiblePolymorphicDomainObjectContainer<UserProvidedConfig> =
  objects.polymorphicDomainObjectContainer(UserProvidedConfig::class)

// I can't copy the values, because I get an error: this type is not known to this container. Known types are: (None)
userProvidedConfigInATask.addAllLater(provider { userProvidedConfigInAnExtension})

// And I can't copy the factories, even when using an internal Gradle API
val createableTypes =
  (userProvidedConfigInAnExtension as org.gradle.api.internal.DefaultPolymorphicDomainObjectContainer<UserProvidedConfig>).createableTypes

createableTypes.forEach { createableType ->
  // ERROR None of the following functions can be called with the arguments supplied.
  userProvidedConfigInATask.registerFactory(
    createableType,
    NamedDomainObjectFactory { name ->
      myExtension.userProvidedConfig
        .containerWithType(createableType)
        .create(name)
    }
  )
}


Removing two dead job lists

Hey @emredurukn
just removing two dead links from the list.
Cheers!

Thanks @spekulatius

No worries, happy to help out!


docs(readme): add support section

Current coverage is 100.00%

Merging #26 into master will not affect coverage as of 5d1a013

@@            master     #26   diff @@
======================================
  Files           14      14
  Stmts           54      54
  Branches         0       0
  Methods          0       0
======================================
  Hit             54      54
  Partial          0       0
  Missed           0       0

Review entire Coverage Diff as of 5d1a013

Powered by Codecov. Updated on successful CI builds.


fixing Contact Number Bug in sign up page

Describe the bug
SignUp page design needed to be fixed

There is also a bug inthe the Contact number where it is given to select by increasing or decreasing. So I I think We can remove this increasing and decreasing feature. And make it a simple type contact number feature.
So please assign me this issue So that I can work on it.
Screenshort

I requested a pull request #631 to be merged. please check !