Extend Iceberg with a way to overwrite files for eager updates/deletes

We need an API to remove some existing files and add new ones to perform "eager" updates and deletes. While RewriteFiles is doing exactly this, it is designed for cases like compaction, where a set of files is replaced but the content does not change.
This PR introduces a way how to commit "eager" updates and deletes. Right now, we do partition-level conflict resolution but it can be enhanced further by leveraging columns stats. The isolation level can be either serializable or snapshot isolation.
This resolves #316.
Original credit goes to @miguelnmiranda.

@johnclara @rdblue I gave it more thought and it probably makes sense to merge this with OverwriteFiles API to avoid the proliferation of classes around deleting/adding files. Potentially, we can also reuse DataOperations.OVERWRITE as it allows the content to change. However, I want to discuss how we see the merged API first, so I submit this PR as-is for now.

My high-level feedback is that I'd prefer to reuse OverwriteFiles and update it to expose the behavior required by this. If the required behavior is to fail if any file is added that matches the delete filter, then we can add a flag to set that like validateAppendOnly in ReplacePartitions. How about validateNoConflictingAppends?
I think we want to make both behaviors available, but we should also consider making failure when a conflict is detected the default. OverwriteFiles currently implements an idempotent change: replace all data matching a filer with new data. The intent is for cases like overwriting an aggregation: you update the aggregation every hour and always produce a completely new copy independent of the data in the table. But, that use case is unlikely to run into a problem if validateNoConflictingAppends were the default. Instead of two concurrent runs both succeeding, one would fail.
If we want to fail if there are conflicting appends by default, then we could add allowConflictingAppends instead. We would also want to decide whether the current overwrite behavior in Spark should allow or not allow conflicting appends. I think if the default is to not allow them, then we should go with that. We can add a write option to allow conflicting appends, like "is-idempotent".
@aokolnychyi, what do you think?

I see the benefit of reusing OverwriteFiles, so let's think it through.
We have the following methods in OverwriteFiles:
OverwriteFiles overwriteByRowFilter(Expression expr);
OverwriteFiles addFile(DataFile file);
OverwriteFiles validateAddedFiles();

First of all, we need to track the base snapshot id when the data was read and it should not change during retries. That's the reason why we accept the base snapshot id in the constructor. We collect all added files since that snapshot. So, we will probably need to do the same for OverwriteFiles.
Second, we cannot mark deleted files using overwriteByRowFilter as that would require all rows to match the predicate and it would also require proper column stats when we have predicates on non-partition columns. So, it seems we will need some sort of overwriteFiles(deletedFiles, addedFiles).
Third, we cannot use the expression passed to overwriteByRowFilter for conflict resolution because of the aforementioned differences. Also, in certain cases, we cannot convert all filters in query engines into equivalent Iceberg filters. Internally, we prohibit concurrent appends in such cases and pass a set of files to delete. It seems we need a separate expression for validating concurrent appends. So, allowConflictingAppends or validateNoConflictingAppends will probably need to accept a row filter as well. By default, we can set that expression to either true or false depending on what behaviour we want.
Fourth, we already have validateAddedFiles that ensures that all files added by OverwriteFiles match the predicate passed in overwriteByRowFilter. Calling validateAddedFiles will only make sense if we use overwriteByRowFilter, so we need to document that properly to avoid misuse of the API. Then validateAddedFiles will operate on files passed to OverwriteFiles and allowConflictingAppends or validateNoConflictingAppends will operate on all files added since the base snapshot.
@rdblue, how do you see the merged API?

we need to track the base snapshot id when the data was read and it should not change during retries

Do we need to add this to the constructor? I think it should be possible to start an overwrite, then scan the same table state, where both operations use the current snapshot ID. If we want to be explicit about the snapshot that is read, we could alternatively add a method to set it.

we will need some sort of overwriteFiles(deletedFiles, addedFiles) or deleteFile(file)

I think it makes sense to add deleteFile. This is already supported in the implementation, MergingSnapshotProducer that is used for almost all operations.

in certain cases, we cannot convert all filters in query engines into equivalent Iceberg filters

In these cases, the validation must be that the current snapshot ID has not changed, right? In that case, we just need to specify that's the requirement with something like validateNoConflictingAppends() -- if there is no filter then it means any write in the entire table would conflict.
An alternative is to use a more generic filter. We can safely drop and predicates if they can't be converted. For example, if the filter is date(ts) = '2019-06-01' AND hour(ts) = 10, the second predicate can't be converted (there is no hour-of-day transform). But, we can make sure that none of the data for the entire day has changed instead of just hour 10.

we cannot use the expression passed to overwriteByRowFilter for conflict resolution . . . validateNoConflictingAppends will probably need to accept a row filter as well.

Agreed. Passing a filter here would work well.

validateAddedFiles that ensures that all files added by OverwriteFiles match the predicate passed in overwriteByRowFilter

We can update docs and the name as well. Maybe it should be validateAddedFilesMatchRowFilter. In addition, I think we might want to add preconditions that check to make sure this method isn't used with other configuration methods that may conflict.

Do we need to add this to the constructor? I think it should be possible to start an overwrite, then scan the same table state, where both operations use the current snapshot ID.

Could you elaborate a bit? I am not sure I got the use case. In general, knowing the snapshot that was read is essential to guarantee serializable isolation in case of updates/deletes. It also has to stay the same during retries as we have to analyze every operation that happened after we read the data. The main motivation to accept it in the constructor is to avoid asking the user to set one more parameter right. Without the correct base snapshot, validateNoConflictingAppends is useless. I have a test for such a use case here. For existing use cases with overwriteByRowFilter, it should not have any impact and is also not visible to the user.

In these cases, the validation must be that the current snapshot ID has not changed, right?

Not necessarily, I guess. If there is a delete that removed other files (i.e. not the ones that we are rewriting), it should be OK to commit the update. So, I would probably rely on a more generic row filter being set (we do this internally now).
Based on the discussion, the API can look like:
OverwriteFiles overwriteByRowFilter(Expression expr);
OverwriteFiles addFile(DataFile file);
OverwriteFiles deleteFile(DataFile file);
OverwriteFiles validateAddedFilesMatchRowFilter();
OverwriteFiles validateNoConflictingAppends(Expression expr);

By default, the expr for validateNoConflictingAppends can be set to false to match the current behaviour. As of now, if we are rewriting via overwriteByRowFilter, OverwriteFiles will successfully retry and delete matching files added in a concurrent transaction.

I think that plan sounds reasonable.

Could you elaborate a bit? I am not sure I got the use case.

We need to make sure the snapshot ID enforced on the write is the same one that is read. We can do that two ways. First, start the overwrite, get its base metadata's snapshot ID, and then set up the scan to read that. Second, read and note the snapshot ID, then start the overwrite and set the snapshot ID to enforce. Both of those should work.
In both cases, we don't need to pass a snapshot ID when creating the operation. We can set it later with a configuration method if we are setting the read's snapshot ID on the write. If we want to read the snapshot ID that the write is using for its base, then we just need to add an accessor for the base snapshot ID.

@rdblue @johnclara ready for another review round

@rdblue What is our story on case sensitivity for metrics evaluators?
We respect it in FilteredManifest, for example. However, MergingSnapshotProducer and OverwriteData use StrictMetricsEvaluator with caseSensitive always set to true.
Do we want to expose a method on PendingUpdate to configure it? Any better idea?

I guess we should add a method to configure case sensitivity. We could also add a boolean flag to the methods where expressions are passed, or have case sensitive name variants?
We should definitely handle case sensitivity, though. Not doing that is an oversight.

My first guess was to use a separate method as it is probably more descriptive than passing a boolean parameter (as discussed before, no way to pass named variables in Java). I would be also ok to provide name variants. Which option would you prefer personally?

I merged #387 so this is unblocked.

I've updated this PR but there are still a couple of open questions.


Local driverProvider should use the update-config.json for binaries

The binaries downloaded from webdriver-manager should be referenced from update-config.json

Quick note: this fix should be against the beta branch.

I think this is not appropriate. Or just specify the version in update-config.json, not with path.

Response in stackoverflow.


[🐛 BUG]: Status is not available during graceful shutdown

No duplicates 🥲.

[X] I have searched for a similar issue in our bug tracker and didn't find any solutions.

What happened?
During the graceful shutdown status plugins goes unavailable and that leads to problem with kubernetes.
When probes are of for k8s when SIGQUIT is sent immediately and graceful shutdown is skipped
Version (rr --version)
rr version 2024.1.2
How to reproduce the issue?
Code is from grpc repository (test catalog)
Use configuration:
version: '3'

rpc:
  listen: "tcp://<IP_ADDRESS>:6111"

server:
  command: "php ../php_test_files/worker-grpc.php"
  relay: "pipes"
  relay_timeout: "20s"

status:
  address: "<IP_ADDRESS>:35544"

# GRPC service configuration
grpc:
  listen: "tcp://<IP_ADDRESS>:9111"
  proto:
    - "../proto/service/service.proto"
  max_send_msg_size: 50
  max_recv_msg_size: 50
  max_connection_idle: 0s
  max_connection_age: 0s
  max_connection_age_grace: 0s
  max_concurrent_streams: 10
  ping_time: 1s
  timeout: 200s
  pool:
    num_workers: 1
    allocate_timeout: 60s
    destroy_timeout: 5s

endure:
  grace_period: 30s

logs:
  output: stderr
  encoding: json
  level: info
  mode: production

class EchoService implements EchoInterface
{
    public function Ping(ContextInterface $ctx, Message $in): Message
    {
        sleep(30);
        $out = new Message();
        return $out->setMsg(strtoupper($in->getMsg()));
    }
}

Make a long request

grpcurl -plaintext -proto ./proto/service/service.proto -d '{}'  <IP_ADDRESS>:9111 service.Echo/Ping

Send SIGTERM

kill -TERM {{pid}}

http://<IP_ADDRESS>:35544/health?plugin=grpc and http://<IP_ADDRESS>:35544/ready?plugin=grpc returns 404

Relevant log output
No response

Hey @cv65kr 👋
Hm.. Plugins are stopped asynchronously (all at the same time). That means, if the Status plugin (which is responsible for these urls in p.3) stopped first, they (urls) won't be available while other plugins, like gRPC are still in the shutdown process (because you have a graceful timeout).
This is done, because graceful shutdown should be spread across all plugin simultaneously, and should not be more than configured value.
Sorry, could you please rephrase this: When probes are of for k8s when SIGQUIT is sent immediately and graceful shutdown is skipped as well. I'm not sure, that I understand you correctly. Immediately after start? Or two signals?

@rustatian sorry, I was in a hurry 😄
When /read and /health endpoints are offline then k8s sent SIGQUIT immediately and graceful shutdown is skipped

Imo
/health should continue to return a positive response as long as the application is still capable of handling requests
/ready endpoint should start returning a not ready status (e.g., HTTP 503) to inform Kubernetes that the pod should not receive new requests

Makes sense.
Ok, got u. Will fix that in the next bugfix release. Thanks for the report 👍


⚠ Bofrost.lu has degraded performance

In c3d0ba0, Bofrost.lu (https://www.bofrost.lu) experienced degraded performance:

HTTP code: 200
Response time: 1333 ms

Resolved: Bofrost.lu performance has improved in 030925b after 21 minutes.


Add Geco, code generator to Entity Framework Tools & Extensions

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.:x: popcatalin81 sign nowYou have signed the CLA already but the status is still pending? Let us recheck it.


Settings that were set via environment variables should no be updatable

While addressing https://github.com/rancher/rancher/issues/14392 and https://github.com/rancher/rancher/issues/17312, we introduced functionality to make the API more accurately reflect the state of settings in rancher.
Rancher has always functioned such that settings that were set as environment variables could not be updated via the API. However, they were just silently ignored when updated via the API. Now, if the setting was set via an env var, the update link will be removed from the resource in the UI and an error will be returned if a user attempts to update the setting.

moved this back to dev bc the PR had to be reverted

Tested with latest build from master:
Tried to update the setting - helm-version and get the following error as expected:
{"baseType":"error","code":"MethodNotAllow","message":"helm-version is readOnly because its value is from environment variable","status":405,"type":"error"}


[MM-21909] Keyboard shortcuts and a11y-controller classes

Summary
Keyboard shortcuts (navigating channels) and a11y-controller classes for keyboard navigation implemented from old sidebar.
Ticket Link
https://mattermost.atlassian.net/browse/MM-21909
Related Pull Requests
Currently based on https://github.com/mattermost/mattermost-webapp/pull/4799 as there are dependencies.
Do not merge until the above is reviewed/merged.

Changes specific to this PR: https://github.com/devinbinnie/mattermost-webapp/compare/MM-21907...devinbinnie:MM-21909


No module named 'gi'

when i run the base demo (using the MobileNet v1 backbone with 640x480 input) :  python3 bodypix.py
i got an error : No module named 'gi'
but i can't install 'gi' package by "pip install gi", i want to know what is the module "gi"
my enviroment:
- Mac OS
- python: 3.6
-

If you are not using a virtual environment, try this:
install PyGObject
If instead you are using something pipenv:
pipenv install PyGObject
I hope this helps!

@InnocentYang1 Were you able to fix this issue ?

I solve this problem by "sudo apt-get install libgirepository1.0-dev"


Portability

Required Info

Camera Model
D415

Operating System & Version
{Win10}

Issue Description
I've been testing cameras for some time, We think D415 is available to us, But there's another problem that bothers me.
I used six cameras attached to my desktop's PCIE card, It seems to be working well
Now we want them to be portable，How can I connect them to my laptop？Thunderbolt 3 ？or something other?
by the way, I just want them to run at 6fps.

A USB hub with 6 or 7 ports that has a short hub-to-PC cable (to help keep cabling tidy) and is unpowered (not connected to mains electricity) is likely the best option for multicam portability on a laptop.
I would be concerned about running 6 cams off a laptop's internal power supply compared to the strong power supply units on a desktop PC.  It may be doable if you are only using 6 FPS though.

ok, I used hub, It looks good now.

Great news - thanks for the update!


Joint State Publisher ROS2 Humble

Having a very difficult time with running the joint state publisher to control the simulation in Zazebo for ROS 2 because I'm very new learner.
Can you please provide the steps to control the joints for your simulation?
Thank you

Hi @kavikode,
You should be able to move the joints individually by using the rqt-joint-trajectory-controller or using rviz2, as explained in the README of the repository.

thank you


Double quotation (") in image title breaks parsing the image

The original parser does support escape double quotation at image title.
![Alt text](https://upload.wikimedia.org/wikipedia/commons/c/c1/PHP_Logo.png "PHP \"test\" logo")

Would a temporary solution to this be using single quotes instead?


Tensorflow version, learning part not working

First of all, I would like to congratulate you on this great work. I try to reproduce the results and see how to integrate a new approach into this benchmark. However, not having experience with Tensorflow, I'm having a little trouble debugging the error below.
In fact, I have a problem with Tensorflow learning part of the code.  The generation of feautre is going well but the learning part is not working.  Below is what I get as an error. I followed all the steps you recommended. I'm using Docker and I have version 2.16 of Tensorflow.
Thanks for your help.
python train_test.py -c config_files/PCPA.yaml

 Total params: 31,165,953 (118.89 MB)
 Trainable params: 31,165,953 (118.89 MB)
 Non-trainable params: 0 (0.00 B)
### Class weights: negative 0.204 and positive 0.796 ###
lerreur commence par là je crois
Traceback (most recent call last):
  File "/data/PedestrianActionBenchmark/PedestrianActionBenchmark/train_test.py", line 165, in <module>
    run(config_file=config_file)
  File "/data/PedestrianActionBenchmark/PedestrianActionBenchmark/train_test.py", line 107, in run
    saved_files_path = method_class.train(beh_seq_train, beh_seq_val, **configs['train_opts'],
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/data/PedestrianActionBenchmark/PedestrianActionBenchmark/action_predict.py", line 759, in train
    history = train_model.fit(x=data_train['data'][0],
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/dist-packages/keras/src/utils/traceback_utils.py", line 123, in error_handler
    raise e.with_traceback(filtered_tb) from None
  File "/usr/local/lib/python3.11/dist-packages/tensorflow/python/data/ops/from_generator_op.py", line 124, in _from_generator
    raise TypeError(f"`output_signature` must contain objects that are "
TypeError: `output_signature` must contain objects that are subclass of `tf.TypeSpec` but found <class 'list'> which is not.

Hi, thank you for your interest in our work.
This issue is caused by the generator in the recent versions of tensorflow. Changing line 2379 in action_predict.py to return tuple(X) fixes it.

I'm rerunning some results on the newer version of TF, if they are ok, I'll update the repo.

Hi, Thanks for your help.
Could you tell me how to change please?
            _data_rgb = (_data_samples[feature_type], _data_samples['crossing'])
            _data_opt_flow = (_data_samples['optical_flow'], _data_samples['crossing'])

        return {'data_rgb': _data_rgb,
                'ped_id': data['ped_id'],
                'tte': data['tte'],
                'data_opt_flow': _data_opt_flow,
                'data_params_rgb': {'data_types': [feature_type],
                                    'data_sizes': [data_type_sizes_dict[feature_type]]},
                'data_params_opt_flow': {'data_types': ['optical_flow'],
                                         'data_sizes': [data_type_sizes_dict['optical_flow']]},
                'effective_dimension': effective_dimension,
                'count': {'neg_count': neg_count, 'pos_count': pos_count}}

In the meantime, I disabled generation step (in config file I set generator= False) and it works. However, I can't reproduce the results as they are in the paper.
Thanks again.


[POC][Field] Form components - Field, Label, HelperText

Example:
<FormField name="shipping_country">
  <Label>Shipping Country</Label>
  <HelpText>
    We cannot ship cards to unsupported countries
  </HelpText>
  <Select defaultValue="AU">
    <Option value="AU">
      Australia
    </Option>
    <Option value="BE">
      Belgium
    </Option>
    <Option value="CA">
      Canada
    </Option>
  </Select>
</FormField>

Shaping doc: https://www.notion.so/mui-org/base-ui-Making-form-fields-with-the-composition-API-ab5a887191534a2fa6f2dc7e0f2a87c8?pvs=4

[x] I have followed (at least) the PR section of the contributing guide.

Is this PR still relevant now that we have https://github.com/mui/base-ui/pull/477?


Couldn't find Gojek app installed on IOS

Screenshoot:

i build my app with release mode and midtrans production. Midtrans couldn't find Gojek app installed on IOS.
I have followed the instruction to init midtrans.
Am i doing it the wrong way ?
Here is my flutter doctor -v:
[✓] Flutter (Channel stable, 2.10.2, on macOS 12.2.1 21D62 darwin-x64, locale
en-ID)
• Flutter version 2.10.2 at /Users/adlifaldiz/developer/flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 097d3313d8 (7 weeks ago), 2022-02-18 19:33:08 -0600
• Engine revision a83ed0e5e3
• Dart version 2.16.1
• DevTools version 2.9.2
[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
• Android SDK at /Users/adlifaldiz/Library/Android/sdk
• Platform android-31, build-tools 31.0.0
• Java binary at: /Applications/Android
Studio.app/Contents/jre/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7590822)
• All Android licenses accepted.
[✓] Xcode - develop for iOS and macOS (Xcode 13.3)
• Xcode at /Applications/Xcode.app/Contents/Developer
• CocoaPods version 1.11.2
[✓] Chrome - develop for the web
• Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
[✓] Android Studio (version 2021.1)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
• Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7590822)
[✓] IntelliJ IDEA Community Edition (version 2020.3)
• IntelliJ at /Applications/IntelliJ IDEA CE.app
• Flutter plugin version 53.1.5
• Dart plugin version 203.7759
[✓] VS Code (version 1.66.0)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension version 3.38.0
[✓] Connected device (2 available)
• MSG (mobile) • 00008030-001161693663802E • ios            • iOS 15.3.1
19D52
• Chrome (web) • chrome                    • web-javascript • Google Chrome
97.0.4692.99
[✓] HTTP Host Availability
• All required HTTP hosts are available
• No issues found!

On iOS application web view, you need to add LSApplicationQueriesSchemes key to your app’s Info.plist, please find the detail on below code :
LSApplicationQueriesSchemes

gojek

Sorry for late reply,
Thank u, it works now.


CB-13866 Do deploy client config and refresh cluster command after sc…

…ale up
See detailed description in the commit message.

retest this please

retest this please

Current behaviour (tested on mow-dev with 7.2.12 SDX):
DE scale up, 1 node, worker group:

Nifi scale up, 1 node, nifi_scaling group:
![Screenshot from 2021-10-01 12-58-08](https://user-images.githubusercontent.com/26329499/135616605-45506464-c41e-4d29-adfa-0363b6533881.pn

g)

New behavior, tested locally with 7.2.12 SDX:
DE scale up, 1 node, worker group:

New behavior, tested locally with 7.2.12 SDX:
Nifi scale up, 1 node, nifi_scaling group (management node modified based on steps provider by Vitaly in the ticket):


Label transfer crashes when too many cells are there

Apparently label transfer, actually the step when affinities are calculated, can crash due to memory error when too many cells are there, and "many" is not even high (>25k).
This probably is due to the fact schist tries to address a numpy array which is too big to be managed. Going with sparse implementations could be the way, but I'm afraid the affinity matrix is not really sparse, unless we set a threshold under which every thing is actually 0

Actually it's on graph-tool, as it crashes when tries to initialize a blockstate
> /beegfs/scratch/ric.cosr/cittaro.davide/src/schist/schist/tools/_affinity_tools.py(119)calculate_affinity()
-> state = gt.BlockState(g, b=partitions)
(Pdb)
Segmentation fault (core dumped)

Ok, I've figured this out. graph-tool crashes when partitions have negative values, this happens when there are nan in the label to be assigned. It should be easy to fix by filling nan with the unknown label

Fixed in 5c0a26edc81cf807b2470af820017716e7568861


Annotations

I think I might add annotations to the lib. I hate to think about a solution about this. There will be probably class related events I can use for annotations. Or I hardcode the annotations into the system. Not sure yet.
What events are we talking about?

class creation {class}
class cloning {class}
classline creation {baseClass} (class.classLine = {nativeClass, baseClass})
adding method to a class {class, key, method}
removing method from a class {class, key, method}
replacing method in a class {class, key, old, new}
adding property to a class {class, property, value}
removing property
replacing property

I think that's all, maybe property and method cloning should be added too, since we are talking always about clone + merge...
events: class.clone, class.merge, method.clone, method.merge, property.clone, property.merge. Note that method and property can have metadata. For example property.type, method.arguments.x.type, etc. If we want to have auto-validation then these should be added. But I think it would be better to use typescript for validation.
Class metadata should be stored in a single class related object instead of per property or per method. class.meta or class.annotations?
This meta must be cloned from the ancestor class.
class.clone() - clones the meta objects
We are able to add meta by merge:
class.merge({meta: staticMeta, prototype: {meta: dynamicMeta}})
Originally meta was about how to customize cloning and merging properties. I think we can extend this with new features. I have to review the old propositions about this.

I think I'll use annotations for inheritance and validation meta data.

Some ideas can be used from #47. For example using graph instead of tree structure and that classes and prototypes should annotated separately.

Class.merge({
    annotations: ???
})

It should be something general, array or config object. If it is general, we need an annotation handler, which processes the annotations. Let's check how java solves this.

import java.lang.annotation.Annotation;
import java.lang.reflect.AnnotatedElement;

public class UseCustomAnnotation {
    public static void main(String [] args) {
        Class<SetCustomAnnotation> classObject = SetCustomAnnotation.class;
        readAnnotation(classObject);
    }

    static void readAnnotation(AnnotatedElement element) {
        try {
            System.out.println("Annotation element values: \n");
            if (element.isAnnotationPresent(TypeHeader.class)) {
                // getAnnotation returns Annotation type
                Annotation singleAnnotation =
                        element.getAnnotation(TypeHeader.class);
                TypeHeader header = (TypeHeader) singleAnnotation;

                System.out.println("Developer: " + header.developer());
                System.out.println("Last Modified: " + header.lastModified());

                // teamMembers returned as String []
                System.out.print("Team members: ");
                for (String member : header.teamMembers())
                    System.out.print(member + ", ");
                System.out.print("\n");

                System.out.println("Meaning of Life: "+ header.meaningOfLife());
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
}

By js we don't have interfaces and we don't need to define annotation classes. So using an object is just enough. I want to do this on the fly, so using comments for annotations and compile is not an option. What I need is only the annotated class and the parse annotation examples by js.
annotated class:
AnnotatedClass = Object.extend(null, {
    foo: function (myParam){console.log(myParam);},
    annotations: {
        "foo": {Test:{info:"AWESOME"}}
    }
});

parser:
function parseAnnotation(AnnotatedClass){
    for (method in AnnotatedClass)
        if (method in AnnotatedClass.annotations)
            AnnotatedClass[method](AnnotatedClass.annotations[method].Test.info);
}

Not bad. :-)
So we don't need implicit rules about binding annotations to methods. We can use just the same name as the method, or a completely different one as well. It does not matter.

Let's try this with merge and clone.
var StackTrace = Class.extend({
	frames: [],
	annotations: {
		clone: {
			frames: o3.shallowClone
		},
		merge: {
			frames: function (frames, source, index, sources){
				if (!(source instanceof Array))
					throw new StackTrace.StackFramesRequired();
				for (var frame in source)
					if (!(source[frame] instanceof Frame))
						throw new StackTrace.StackFrameRequired();
				frames.push.apply(frames, source);
			}
		}
	}
});

vs
var StackTrace = Class.extend({
    frames: [],
    build: function () {
        this.frames = shallowClone(this.frames);
    },
    merge: function (source) {
        for (var index in arguments)
            deep(this, arguments[index], {
                property: {
                    frames: {
                        subject: function (subjectFrames, frames, eachProperty) {
                            if (!(frames instanceof Array))
                                throw new StackTrace.StackFramesRequired();
                            eachProperty();
                            subjectFrames.push.apply(subjectFrames, frames);
                        },
                        defaultProperty: function (stackTrace, frame) {
                            if (!(frame instanceof StackFrame))
                                throw new StackTrace.StackFrameRequired();
                        }
                    }
                },
                defaultProperty: function (stackTrace, value) {
                    return value;
                }
            }, [index]);
        return this;
    }
});

What about class related events?
We could use eventemitter approach. Or we could do something like this:
instance = new ...;
if (Class.annotations.events.create)
    Class.annotations.events.create(instance);

I don't think this would be the real usage of annotations. Custom merge and clone is much more common.

What about annotation merging and inheritance?

E.g. I have the following annotation:
        clone: {
            property: o3.shallowClone
        },

and I add another property to the descendant class:
        clone: {
            anotherProperty: o3.shallowClone
        },

we need
annotations.clone = shallowClone(annotations.clone);

by the build
okay. this works, but it has only a single level depth
what if we want something like this:
        clone: {
            property: {a: o3.shallowClone}
        },

        clone: {
            property: {a: o3.shallowClone, b:o3.shallowClone}
        },

if we want to be dry, we want to do only
Class.extend({annotations: {clone: {property: {b:o3.shallowClone}}}})

but we have missing information here:
annotations.clone.property = {behavior:extend} //instead of the default override

how to pass this information to the system?
let's check when this annotation cloning and merging happens.
by default the build clones the annotations with Object.create()
after that it calls merge on the new Class and the new annotations, so it is more or less a single level deep clone and merge. how to make this multi level deep?
   annotations: {
        clone: {
            annotations: {
                clone: {
                    property: o3.shallowClone
                },
                merge: {
                    property: o3.shallowMerge
                }
            }
        }
    }

After that we can use
        clone: {
            property: {b:o3.shallowClone}
        },

since the old property will be inherited with shallowClone and merged with shallowMerge

what about the annotations object itself? how to describe it?
by clone and merge annotations we have an implicit role.
if something has an object configuration instead of a function configuration, then we will use deepClone or deepMerge to clone or merge the object. so
{} //deep
function (){} //shallow

this solution has some limitations. for example if we have one behavior to merge, but we want to use a pre or post merge hook on the source or on the subject, we won't be able to do that. we won't be able to override the default behavior either. according to another issue, using annotation graph instead of annotation tree would be a much better solution to make this work. luckily the json-ld graph is more or less tree compatible, so we can start with a tree and we can implement the graph annotations later without breaking backward compatibility.

implementation problems:
just like by the error - clone/merge circular dependency, we have an annotation - clone/merge circular dependency here. if we want to use deepClone and deepMerge, we need annotations. if we want to annotate, we need deepClone and deepMerge. our traditional solution to this problem was to use a merge/clone function which calls shallowMerge/shallowClone by default, and we can give a custom merge/build method in the object to use deepMerge/deepClone with it. this might work with annotations as well.

let's check this on the other basic examples

var StackFrame = Class.extend({
    description: undefined,
    path: undefined,
    row: undefined,
    col: undefined,
    string: undefined,
    init: function () {
        Class.prototype.init.apply(this, arguments);
        if (typeof (this.description) != "string")
            throw new StackFrame.DescriptionRequired();
        if (typeof (this.path) != "string")
            throw new StackFrame.PathRequired();
        if (isNaN(this.row))
            throw new StackFrame.RowRequired();
        if (isNaN(this.col))
            throw new StackFrame.ColRequired();
    },
    toString: function () {
        var string = "\tat " + this.description + " (" + this.path + ":" + this.row + ":" + this.col + ")";
        if (this.description === "")
            string = string.replace("  ", " ");
        return string;
    }
}, {
    DescriptionRequired: InvalidConfiguration.extend({
        message: "Description string required."
    }),
    PathRequired: InvalidConfiguration.extend({
        message: "Path string required."
    }),
    RowRequired: InvalidConfiguration.extend({
        message: "Row number required."
    }),
    ColRequired: InvalidConfiguration.extend({
        message: "Col number required"
    })
});

Okay, here the InvalidConfiguration, etc... is not a proper exception. I don't want to have such low level exceptions if not needed. Here only InvalidArgument and a message is needed, so it does not make sense to have ColRequired etc...
What about the validation?
    init: function () {
        Class.prototype.init.apply(this, arguments);
        if (typeof (this.description) != "string")
            throw new StackFrame.DescriptionRequired();
        if (typeof (this.path) != "string")
            throw new StackFrame.PathRequired();
        if (isNaN(this.row))
            throw new StackFrame.RowRequired();
        if (isNaN(this.col))
            throw new StackFrame.ColRequired();
    },

The Class.prototype.init merges the arguments, and I validate after the merge. This works, but it is not a good practice. If an argument is not valid, it should not be set.
I'd like to add argument validation and use it before merge.
	annotations: {
		validate: {
			description: o3.type.String,
			path: o3.type.Path,
			row: o3.type.Integer,
			col: o3.type.Integer
		}
	}

it's not that hard to do this by the class, but it is harder to do something general. I think I'll do something like I did by merge and clone.
What about the exception types and error messages? That's a harder issue, because everything is nested here, so it needs a special error message.

var FunctionWrapper = Class.extend({
    preprocessors: [],
    done: function () {
        return toArray(arguments);
    },
    algorithm: function (wrapper) {
        return function () {
            return wrapper.done.apply(this, arguments);
        };
    },
    properties: {},
    build: function () {
        deep(this, this, {
            property: {
                preprocessors: function (subject, preprocessors) {
                    return shallowClone(preprocessors);
                },
                properties: function (subject, properties) {
                    return shallowClone(properties);
                }
            }
        });
    },
    merge: function (source) {
        for (var index in arguments)
            deep(this, arguments[index], {
                property: {
                    preprocessors: {
                        subject: function (subjectPreprocessors, preprocessors, eachProperty) {
                            if (!(preprocessors instanceof Array))
                                throw new FunctionWrapper.ArrayRequired();
                            eachProperty();
                            subjectPreprocessors.push.apply(subjectPreprocessors, preprocessors);
                        },
                        defaultProperty: function (subjectPreprocessors, preprocessor) {
                            if (!(preprocessor instanceof Function))
                                throw new FunctionWrapper.PreprocessorRequired();
                        }
                    },
                    done: function (wrapper, done) {
                        if (!(done instanceof Function))
                            throw new FunctionWrapper.FunctionRequired();
                        return done;
                    },
                    algorithm: function (wrapper, algorithm) {
                        if (!(algorithm instanceof Function))
                            throw new FunctionWrapper.AlgorithmRequired();
                        return algorithm;
                    },
                    properties: {
                        defaultProperty: function (subjectProperties, value) {
                            return value;
                        }
                    }
                },
                defaultProperty: function (subject, value) {
                    return value;
                }
            }, [index]);
        return this;
    },
    toFunction: function () {
        var func = this.algorithm(this);
        if (!(func instanceof Function))
            throw new FunctionWrapper.InvalidAlgorithm();
        shallowMerge(func, [
            {
                wrapper: this
            },
            this.properties
        ]);
        return func;
    }
}, {
    algorithm: {
        cascade: function (wrapper) {
            return function () {
                var parameters = toArray(arguments);
                for (var index in wrapper.preprocessors) {
                    var preprocessor = wrapper.preprocessors[index];
                    var result = preprocessor.apply(this, parameters);
                    if (!(result instanceof Array))
                        throw new FunctionWrapper.InvalidPreprocessor();
                    parameters = result;
                }
                return wrapper.done.apply(this, parameters);
            };
        },
        firstMatch: function (wrapper) {
            return function () {
                var parameters = toArray(arguments),
                    match;
                for (var index in wrapper.preprocessors) {
                    var preprocessor = wrapper.preprocessors[index];
                    match = preprocessor.apply(this, arguments);
                    if (match !== undefined) {
                        if (!(match instanceof Array))
                            throw new FunctionWrapper.InvalidPreprocessor();
                        parameters = match;
                        break;
                    }
                }
                return wrapper.done.apply(this, parameters);
            };
        },
        firstMatchCascade: function (wrapper) {
            return function () {
                var parameters = toArray(arguments);
                var reduce = function () {
                    var match;
                    for (var index in wrapper.preprocessors) {
                        var preprocessor = wrapper.preprocessors[index];
                        match = preprocessor.apply(this, parameters);
                        if (match !== undefined) {
                            if (!(match instanceof Array))
                                throw new FunctionWrapper.InvalidPreprocessor();
                            parameters = match;
                            break;
                        }
                    }
                    if (match !== undefined)
                        reduce.call(this);
                };
                reduce.call(this);
                return wrapper.done.apply(this, parameters);
            };
        }
    },
    ArrayRequired: InvalidConfiguration.extend({
        message: "Array required."
    }),
    PreprocessorRequired: InvalidConfiguration.extend({
        message: "Function required as preprocessor."
    }),
    FunctionRequired: InvalidConfiguration.extend({
        message: "Function required."
    }),
    AlgorithmRequired: InvalidConfiguration.extend({
        message: "Function required."
    }),
    InvalidAlgorithm: InvalidConfiguration.extend({
        message: "Invalid algorithm given."
    }),
    InvalidPreprocessor: InvalidResult.extend({
        message: "Preprocessor must return Array as result."
    })
});

Here every algorithm needs a separate class or function. I don't want to use them only by wrappers, so probably separate functions are better.
Let's check the clone and merge.
	annotations: {
		validate: {
			preprocessors: [o3.type.Function],
			properties: o3.type.Object,
			done: o3.type.Function,
			algorithm: o3.type.Function
		},
		clone: {
			preprocessors: o3.shallowClone,
			properties: o3.shallowClone
		},
		merge: {
			preprocessors: o3.shallowMerge,
			properties: o3.shallowMerge
		}
	},

vs
    build: function () {
        deep(this, this, {
            property: {
                preprocessors: function (subject, preprocessors) {
                    return shallowClone(preprocessors);
                },
                properties: function (subject, properties) {
                    return shallowClone(properties);
                }
            }
        });
    },
    merge: function (source) {
        for (var index in arguments)
            deep(this, arguments[index], {
                property: {
                    preprocessors: {
                        subject: function (subjectPreprocessors, preprocessors, eachProperty) {
                            if (!(preprocessors instanceof Array))
                                throw new FunctionWrapper.ArrayRequired();
                            eachProperty();
                            subjectPreprocessors.push.apply(subjectPreprocessors, preprocessors);
                        },
                        defaultProperty: function (subjectPreprocessors, preprocessor) {
                            if (!(preprocessor instanceof Function))
                                throw new FunctionWrapper.PreprocessorRequired();
                        }
                    },
                    done: function (wrapper, done) {
                        if (!(done instanceof Function))
                            throw new FunctionWrapper.FunctionRequired();
                        return done;
                    },
                    algorithm: function (wrapper, algorithm) {
                        if (!(algorithm instanceof Function))
                            throw new FunctionWrapper.AlgorithmRequired();
                        return algorithm;
                    },
                    properties: {
                        defaultProperty: function (subjectProperties, value) {
                            return value;
                        }
                    }
                },
                defaultProperty: function (subject, value) {
                    return value;
                }
            }, [index]);
        return this;
    },

Okay, so the merge and clone must be shallowMerge and shallowClone compatible.

	annotations: {
		clone: {
			flows: function (source){
				this.flows = new ComponentSet();
				this.addAll.apply(this, source.toArray());
			}
		},
		validate: {
			flows: [df.Flow]
		},
		merge: {
			flows: function (source){
				this.addAll.apply(this, source.toArray())
			}
		}
	}

vs
    build: function () {
        return deep(this, this, {
            property: {
                flows: function (component, flows) {
                    component.flows = new ComponentSet();
                    component.addAll.apply(component, flows.toArray());
                }
            }
        });
    },
    merge: function (source) {
        for (var index in arguments)
            deep(this, arguments[index], {
                property: {
                    flows: function (component, flows) {
                        if (!(flows instanceof Array))
                            throw new Component.ItemsRequired();
                        component.addAll.apply(component, flows);
                    }
                },
                defaultProperty: function (component, value) {
                    return value;
                }
            }, [index]);
        return this;
    },

Two major problems here:

need to reach the source and target root object by deep merge or clone
reuse a deep merge by cloning

The first is clone/merge dependent behavior, so it should be implemented there.
Reusing different parts of annotations is feature could possibly be implemented here.

    annotations: {
        clone: {
            flows: function (source){
                this.flows = new ComponentSet();
                this.addAll.apply(this, source.toArray());
            }
        },
        validate: {
            flows: [df.Flow]
        },
        merge: {
            flows: function (source){
                this.addAll.apply(this, source.toArray())
            }
        }
    }

In theory this should solve the reusability problem:
    annotations: {
        clone: {
            flows: function (source){
                this.flows = new ComponentSet();
				this.merge({flows: source});
            }
        },
        validate: {
            flows: [df.Flow]
        },
        merge: {
            flows: function (source){
                this.addAll.apply(this, source.toArray())
            }
        }
    }

So we won't need to pass the annotation.

Let's check something external. Backbone UI options are interesting.
Backbone.UI.Button = Backbone.UI.BaseView.extend({
    options : {
      // true will disable the button
      // (muted non-clickable)
      disabled : false,

      // true will activate the button
      // (depressed and non-clickable)
      active : false,

      // A callback to invoke when the button is clicked
      onClick : null,

      // renders this button as an input type=submit element as opposed to an anchor.
      isSubmit : false
    },
    ...
});

The main problem here:

need to inherit default options.
need to override default options in instances or in sub-classes.

This is not that hard with the new system. We can use the same structure because we have nested clone.
Backbone.UI.BaseView = o3.Class.extend({
    annotations: {
		clone: {
			options: o3.shallowClone
		},
		merge: {
			options: o3.shallowMerge
		}
    }
});

The Backbone.UI.Button code could be the exact same. The BaseView could be a new ClassLine from Backbone.View with overridden extend. Probably the default o3.extend won't be enough, and we'd need somehow reuse the Backbone.extend as well. We'd need to examine Backbone code to make a perfect solution. Ofc. I won't implement this.

Okay, so annotations are simple objects. There is nothing special about them. Clone and merge needs to use annotations. Annotation inheritance and override are affected by the clone and merge settings by the original annotations. There is nothing new about that either.
What we need to add to the code is the default annotation cloning and merging behavior stored in a base annotation object. We need to modify the clone and the merge methods to use the annotations as options. We need a deepMerge and deepClone method. We need to make it in a way that is compatible with the current shallowMerge and shallowClone. So by the annotations we could set shallowClone and shallowMerge instead of some callback which calls these functions. I am not sure whether we really need the merge() and clone() methods. They are interesting, but it is too easy to make infinite loop with them.

To summarize we need merge, clone and possibly validate to make these annotations work as intended, thus we need to implement deepMerge and deepClone first, inheritance with these second and annotations third. I set a lower priority here while #46 will have a higher priority.

I found this interesting blog about how others use github issues: http://www.ianbicking.org/blog/2014/03/use-github-issues-to-organize-a-project.html they had the same problem with master - sub issues, the master usually goes out of sync, and nobody wants to maintain it. So I think I don't have luck by resolving this issue dependency problem. I backreference this issue from the #46 and that will be all.

Another concept to add annotation:
Object.extend({
    annotations: {
        clone: {
            flows: function (source){
                this.flows = new ComponentSet();
                this.addAll.apply(this, source.toArray());
            }
        },
        validate: {
            flows: [df.Flow]
        },
        merge: {
            flows: function (source){
                this.addAll.apply(this, source.toArray())
            }
        }
    }
});

vs
Object.extend({
	"@clone": {
		flows: function (source){
			this.flows = new ComponentSet();
			this.addAll.apply(this, source.toArray());
		}
	},
	"@validate": {
		flows: [df.Flow]
	},
	"@merge": {
		flows: function (source){
			this.addAll.apply(this, source.toArray())
		}
	}
});

Normally by oo languages it is something like
class Descendant {
     @customize({flows: [df.Flow]})
     validate(){
          ...
     },
     @customize({flows: function (source){
            this.flows = new ComponentSet();
            this.addAll.apply(this, source.toArray());
      }})
     clone (){
          ...
     },
     ...
}

By o3 I don't want to parse and compile, so I cannot do something like this.

What I am not sure about whether I need a config object, which contains lambda functions, or I need an object with behavior, and a well defined interface the annotated object could use. For example backbone moved this logic from annotations to private functions and it was more or less burnt into the classes. I would rather move it outside and create helpers, which can help by cloning an object, etc.
Object.extend({
    annotations: {
        clone: new Helper({
            cloneProperty: function (property, value){
                if (property=="flows"){
                    this.context.flows = new ComponentSet();
                    this.context.addAll.apply(this.context, value.toArray());
                }
                else
                    this.context[property] = clone(value);
            }
        })
    }
});

Not as good as I expected.

This will go another lib, if I'll ever use something like this.

The reason of the denial that I don't want to add a feature to the general lib, which won't be used by most of the classes. I'll create an o3.Options framework later, which will contain nested merge and nested inheritance and probably something similar to these annotations.


Neo4jSession save( ) cannot handle unique constraints

The tutorial at http://neo4j.com/docs/ogm/java/stable/ has me building a createOrUpdate(T entity) method, which my intuition was that it would either create or update a node obviously, however it seems to only go the "update" route if I give it an object with an id field that has been seen and cached before by that session object.
this seems to mean that a) if my entity object outlives the neo4j session, trying to update it with a new session fails, but more importantly for my use case b) I create a new entity object that is the same as a previous one (by enforcing uniqueness on some uuid field) trying to createOrUpdate it (and here naturally would be update) the session chokes on a ConstraintViolation exception.
The culprit is here, I think:
neo4j.ogm.compiler.emitters.NewNodeEmitter.java
@Override
public void emit(StringBuilder queryBuilder, Map<String, Object> parameters) {
    if (newNodes != null && newNodes.size() > 0) {
        Node firstNode = newNodes.iterator().next();

        queryBuilder.append("UNWIND {rows} as row ")
                .append("CREATE (n");

At least for my use case, if that CREATE was a MERGE instead, my problem would be solved. But more generally it seems like there should definitely be a path to do the MERGE instead.
Right now my options are going out to Neo and asking if a node exists before I create it, which is way too expensive, or manually writing the Cypher myself for each and every type of upsert query I want to do, which is what I was trying to get away from by using the OGM in the first place.

+1
This could be solved by introducing a new field annotation, @Merge, that would cause SDN to MERGE nodes rather than just CREATE them.
eg:
  public class Person {
    @Merge
    private String ssn;
    private String name;
    ...
  }

@veksev @cvwj : This should be fixed by using the @Index(unique=true, primary=true) configuration.  You can define one primary index in a class hierarchy and on save will use merge. This can also be combined with ogm.properties auto.indexes=assert during development to drop and create indexes/constraints on startup. Please try it out. If you find issues with that implementation please raise a new bug :)


eslint runs from /, not working directory

I'm trying to use eslint-plugin-import. This takes in a src directory to better understand import statements:
  "settings": {
    "import/resolver": {
      "node": {
        "paths": ["src"]
      }
    }
  }

Reproduction
I've made a small package showing the error here: https://github.com/bmalehorn/eslint-monorepo-example
When I run yarn eslint, src is resolved to ./src, and runs correctly:
> git clone https://github.com/bmalehorn/eslint-monorepo-example
> cd eslint-monorepo-example/my-react-app
> cd my-react-app
> yarn eslint src
yarn run v1.12.0
$ /Users/brianmalehorn/eslint-monorepo-example/my-react-app/node_modules/.bin/eslint src
✨  Done in 1.77s.

However, when I open the file in VSCode, src is resolved to /src, which causes eslint errors:

Fix
I can workaround this by specifying an absolute path:
-        "paths": ["src"]
+        "paths": ["/Users/brianmalehorn/eslint-monorepo-example/my-react-app/src"]

I can tell it's running in / because I can leave of the the leading / and it still works:
-        "paths": ["src"]
+        "paths": ["Users/brianmalehorn/eslint-monorepo-example/my-react-app/src"]

However, and ideal fix would be to run eslint in the same directory as package.json. This way, relative paths in eslint plugins would work correctly.
Related: https://github.com/microsoft/vscode-eslint/issues/712

Since you use relative paths you need to let the extension know that you want to change the working directory (which is off by default since it might cause other side effects since eslint is very sensitive to the current working directory).
Something like
{
  "eslint.workingDirectories": [
    { "directory": "my-react-app", "changeProcessCWD": true }
  ]
}


Triggering abuse detection

@lee-dohm installed the stale plugin on @atom. I'll need to dig into why this triggered the abuse detection.
https://sentry.io/bkeepers/probot/issues/269777963/
Error: {"message":"You have triggered an abuse detection mechanism and have been temporarily blocked from content creation. Please retry your request again later.","documentation_url":"https://developer.github.com/v3#abuse-rate-limits"}

This happened again when @hzoo added it to https://github.com/babel/babel.github.io/issues

Another idea that came up while @lee-dohm and I were talking that might help solve this and reduce complaints from end-users is to artificially limit the number of issues that can be marked in one run. For example, if it only marked 5 during each hourly run, then it would avoid abuse issues, and might not seem as aggressive to contributors.

+1 on the issue https://github.com/probot/stale/issues/59.  I saw a bunch of issues getting closed on atom after 14 days after it got marked as stale but no comment was added.
example:
https://github.com/atom/atom/issues/10831
https://github.com/atom/atom/issues/12308
https://github.com/atom/atom/issues/8880
There's a lot more.


Recover from failed or slow secondary requests

This came up specifically in the context of the home page error-ing with 503 when Positron requests were timing out (after 5 seconds). This maybe isn't a big production risk since 5 seconds is already pretty generous, but could be a simple opportunity for more graceful degradation. When article requests fail or time-out, Force could render a home page without magazine content.
The page would only be slightly leaner, and a temporarily bad situation in 1 system would be prevented from cascading across others. It's also a nice practice for our increasingly complex ecosystem in general... we could put small services into maintenance mode briefly without needing to coordinate down time all over the product.

10/31 - Positron staging down, suffering from ^


[core] Unify ActorRef type

This PR unifies the ActorRef type to contain all methods previously only present on the SpawnedActorRef type. This was found to be redundant in #2271, so now the types are as follows:

ActorRef contains all methods (required)
BaseActorRef only requires send; all other methods are optional. This should seldom be used.
SpawnedActorRef is now an alias to ActorRef; it is deprecated and will be removed in v5.

What is the guidance about actorRef.id? Is it supposed to be globally-unique, or machine unique, or...?
It seems to be somewhat XState specific, rather than actor-specific.

The toActorRef() functon seems to not infer well:
type TEvent = { type: 'one' } | { type: 'two' }

type TActor = BaseActorRef<TEvent>
const baseActor: TActor = null!

// Argument of type 'TActor' is not assignable to parameter of type 'BaseActorRef<EventObject, any>'.
//  Type 'EventObject' is not assignable to type 'TEvent'.
//    Type 'EventObject' is not assignable to type '{ type: "two"; }'.
//      Types of property 'type' are incompatible.
//        Type 'string' is not assignable to type '"two"'.(2345)
const a = toActorRef(baseActor)

What is the guidance about actorRef.id? Is it supposed to be globally-unique, or machine unique, or...?
It seems to be somewhat XState specific, rather than actor-specific.

Right; we can probably rename this to name (as it is in v5)

The toActorRef() functon seems to not infer well:
type TEvent = { type: 'one' } | { type: 'two' }

type TActor = BaseActorRef<TEvent>
const baseActor: TActor = null!

// Argument of type 'TActor' is not assignable to parameter of type 'BaseActorRef<EventObject, any>'.
//  Type 'EventObject' is not assignable to type 'TEvent'.
//    Type 'EventObject' is not assignable to type '{ type: "two"; }'.
//      Types of property 'type' are incompatible.
//        Type 'string' is not assignable to type '"two"'.(2345)
const a = toActorRef(baseActor)

Fixed in 15c6e7d


Update aggregation code in response to change in Notion schema

(Related to https://github.com/jamalex/notion-py/issues/94)
Looks as if aggregation did indeed change, so I've made updates here (with back-compatibility).

Oh, this was actually already fixed in #95 -- unwinding for now to get that in, and then may bring pieces of this back


Publish for Scala Native 0.5.x

It'd be cool if the toolkit could work with Scala Native 0.5.x (0.5.1 as of me writing this)
scala-cli -e 'println("Hello")' --toolkit typelevel:0.1.25 --native --native-version 0.5.1
# Downloading compiler plugin org.scala-native:::nscplugin:0.5.1
# Downloading Scala Native CLI
# Downloading 4 dependencies and 2 internal dependencies
# [error]  Error downloading org.typelevel:toolkit_native0.5_3:0.1.25
# [error]   not found: /Users/pchabelski/.ivy2/local/org.typelevel/toolkit_native0.5_3/0.1.25/ivys/ivy.xml
# [error]   not found: https://repo1.maven.org/maven2/org/typelevel/toolkit_native0.5_3/0.1.25/toolkit_native0.5_3-0.1.25.pom
# [error]   not found: /Users/pchabelski/Library/Caches/ScalaCli/local-repo/1.2.2/org.typelevel/toolkit_native0.5_3/0.1.25/ivys/ivy.xml
# [error]   No fallback URL found
# [error] COMMAND_LINE

Hey @Gedochao, I totally agree with you! At the moment we're tracking the status of the migration towards Scala Native 0.5.x for the whole ecosystem here: https://github.com/orgs/typelevel/projects/2
We will soon publish everything up until Cats really soon, but then we'll have to decide what to do with Cats Effect, if releasing a native version that still works single-threadedly or waiting for intelligent people like @djspiewak to craft something multi-threaded.
Given that the toolkit depends on a lot of stuff it's the last piece that will get published for sn 0.5, as we'll have to wait for things like http4s.
Thanks for being so interested :)


Fixed example path on README.md

this is related with #109

Thanks! Keep in mind it's still work in progress and heavily under development.


Make requires.io, coveralls, etc. options at install time

Just an idea: I personally would not use the requires.io and coveralls hookups in this template, and was thinking it'd be nice if things like that were options that I could enable/disable when cookiecutter asks all those questions while generating a project. Same could go for Travis or Docker support.
Thoughts?

Can cookiecutter ask boolean style quesions?
We tried to document some of the opinions of sugardough in the README. Perhaps we can add more about what it would take to rip out requires.io or coveralls.

fumbled on the close button

So I did some research into this. The pre- and post-generation hooks are both passed through Jinja2 with the context before being run, so we could add the logic for deleting unnecessary files (like .coveragerc) there.
The main problem is with how sugardough is developed. Because of the fabricate-cookiecutter.py script, it's impossible to do anything but simple variable substitution, nor is it even possible for us to have two variables with the same value because it just does a blind find and replace for all instances of the value across the project.
For example:

language: python
python:
  - "2.7"
before_script:
  - mysql -e 'create database sugardough_db character set utf8;'
install:
  - pip install -r requirements/base.txt
  - pip install -r requirements/dev.txt
  {% if use_coveralls == 'yes' %}
  - pip install coveralls
  {% endif %}
env:
  - DEBUG=False SECRET_KEY='FOO' ALLOWED_HOSTS=localhost, DATABASE_URL=mysql://root@localhost/sugardough_db
script:
  coverage run manage.py test
after_success:
  coveralls

There's nothing in fabricate-cookiecutter.py that supports adding an if statement like that.

I've got an idea on how to work on sugardough without the need for fabricate-cookiecutter.py and will have a branch for feedback soon.

I'm still a big noob at cookiecutter. Is it cookiecutter that is insufficiently flexible or how we use it?
One thing I remember @glogiotatidis menioned is that if we have things like
# in the requirements.txt
...
{% if use_postrgesql %}
# sha256: JLo_Moq6CNjVBbwqj2ipTr4kqF6Eg2QLZnIhvA79Ox4
psycopg2==2.5.4
{% endif %}
...

Then, the file is no longer a plain .txt file. It's a template file. And thus you can't send it to requires.io as a parameter. Maybe the answer to that is; forfeit requires.io and use templates everywhere instead.

I'm still a big noob at cookiecutter. Is it cookiecutter that is insufficiently flexible or how we use it?

It's how we use it. The nature of our use is that we generate the template from a generated instance; the if statement in the example above either inserts or does not insert code into the generated instance. Thus, it's impossible to generate that kind of statement from a generated instance, because the necessary info (such as what the if statement is testing) is unavailable.

Then, the file is no longer a plain .txt file. It's a template file. And thus you can't send it to requires.io as a parameter. Maybe the answer to that is; forfeit requires.io and use templates everywhere instead.

It's a template file, but remember that template files are rendered when a project is generated from the sugardough template. When you actually generate a project from the template, the if statement goes away, and psycopg2 is either included in the requirements.txt file or it is. The output after generation is a valid file that can be sent to requires.io.
Does that make sense?


Global response function

I'm trying to implement something where I can just return the object instead of using res.json, and would love to hear your thoughts on how it might be done.
For example, instead of this:
@Controller('api/users')
export class UserController {
    @Get(':id')
    private get(req: Request, res: Response) {
        return res.status(OK).json({
            message: 'get_called',
        });
    }
}

I can write this:
@Controller('api/users')
export class UserController {
    @Get(':id')
    private get(req: Request, res: Response) {
        return {
            message: 'get_called',
        };
    }
}

And perhaps have a global response function somewhere:
this.app.onResponse = (returned: any, req: Request, res: Response) => {
  res.json(returned);
};

This is certainly doable but it deviates from express more than I'd like to go. I didn't want overnight to be an abstraction of top of express.

@AnandChowdhary Try the following as a wrapper:
function statusOkWithJson(method: Function): RequestHandler {
    return (req: Request, res: Response): Response => {
        return res.status(200).json(method(req, res));
    }
}

Full example in this gist.

This makes perfect sense, @joeykilpatrick.
@seanpmaxwell Do you think we can have a global wrapper? Since there's global middleware, class middleware, and function middleware, but only class wrapper and function wrapper.


fix: 🐛 Validate primary key on modifySignerPermissions

Description
Added validation that the signing Account should be the primary Account of the Identity in modifySignerPermissions procedure
Breaking Changes
🧨 accountManagement.modifyPermissions and accountManagement.revokePermissions
now throw an error if the signing Account is not the primary Account of the Identity
whose secondary Accounts' permissions are modified/revoked
JIRA Link
DA-308
Checklist

[ ] Updated the Readme.md (if required) ?

Sonar says the following in the procedure methods

Remove the unused function parameter "this" or rename it to "_this" to make intention explicit.

I think this is something which @polymath-eric also faced once. Probably to be marked as false positive. @monitz87 can you help here?

Solved!

:tada: This PR is included in version 14.0.0-beta.9 :tada:
The release is available on:

npm package (@beta dist-tag)
GitHub release

Your semantic-release bot :package::rocket:

:tada: This PR is included in version 15.0.0-alpha.11 :tada:
The release is available on:

npm package (@alpha dist-tag)
GitHub release

Your semantic-release bot :package::rocket:

:tada: This PR is included in version 15.0.0-beta.1 :tada:
The release is available on:

npm package (@beta dist-tag)
GitHub release

Your semantic-release bot :package::rocket:

:tada: This PR is included in version 15.0.0 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Make Login i18n, updated italian translation

The login form is not translatable and live in flash_appbuilder package.
This PR add the login form to the local templates of superset templates/appbuilder/general/security/login_db.html, so it can be translated.
Update italian translation for login form too.

Codecov Report

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

@@           Coverage Diff           @@
##           master    #4592   +/-   ##
=======================================
  Coverage   71.17%   71.17%
=======================================
  Files         188      188
  Lines       14834    14834
  Branches     1086     1086
=======================================
  Hits        10558    10558
  Misses       4273     4273
  Partials        3        3

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 f988110...7a9f7cf. Read the comment docs.

Why not translate it in flask app builder instead?


Use Facebook URL instead of File when present

Thanks! Note that this will functionally change behavior of the plugin. In a patch release. Is that really what we should do?

I believe we should because without this the image file itself is the click destination for Facebook rather than the URL.  This at least keeps the sharing feature of the plugin working.
On Apr 13, 2020, 3:43 PM -0400, Eddy Verbruggen<EMAIL_ADDRESS>wrote:

Thanks! Note that this will functionally change behavior of the plugin. In a patch release. Is that really what we should do?
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub, or unsubscribe.

If anything, this sounds like a better default anyway. Thanks again!

would you be ok releasing the 5.6.5 milestone.  I'd like to incorporate this official package into our next release with this merge.

Done!


As a user, I can access a JSON feed of controllers with special endorsements

:tada: This issue has been resolved in version 4.17.0 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


Bump T1 dependencies

Updated: nix/t1/_sources/generated.json
nix/t1/_sources/generated.nix

Closed in favor of #646 .


Fully define session audit field behavior

Summary
Portions of the audit fields must be maintained by the blockchain for integrity
Problem Definition
Currently a user may specify all portions of the audit fields on a session.  This can result in information that is not as accurate as it could be or potentially even misrepresents data.
Proposal
Determine if all/some/none of the information in the audit fields is able to be controlled from the client.  For the values that are not controlled by the client (example timestamp) use values calculated in the module (caller address, blocktime, etc).

For Admin Use

[ ] Not duplicate issue
[ ] Appropriate labels applied
[ ] Appropriate contributors tagged
[ ] Contributor assigned/self-assigned

Previously all of the values in the audit fields were managed by the module and none of these could be specified directly.
In the following example the previous version of the audit fields are used to provide created by values that are carried forward, blocktime is used for the updated time, the singer [invoker] is the updated by value, version is updated on edit, and a message is applied based on the operation performed.
updatedAudit := &p8etypes.AuditFields{
	CreatedBy:   g.Audit.CreatedBy,
	CreatedDate: g.Audit.CreatedDate,
	UpdatedDate: &timestamppb.Timestamp{Seconds: ctx.BlockTime().Unix()},
	UpdatedBy:   invoker.String(),
	Version:     g.Audit.Version + 1,
	Message:     "ownership information changed",
}
g.Audit = updatedAudit

For a new instance of audit fields the version was set at one, created date was set to blocktime, and created by was the account that signed the create request.  No message was included.


[FLINK-8191] [Kafka Connector] Add a RoundRobinPartitioner to be shipped with the Kafka…

Add a RoundRobinPartitioner to be shipped with the Kafka connector
Thank you very much for contributing to Apache Flink - we are happy that you want to help us improve Flink. To help the community review your contribution in the best possible way, please go through the checklist below, which will get the contribution into a shape in which it can be best reviewed.
Please understand that we do not do this to make contributions to Flink a hassle. In order to uphold a high standard of quality for code contributions, while at the same time managing a large number of contributions, we need contributors to prepare the contributions well, and give reviewers enough contextual information for the review. Please also understand that contributions that do not follow this guide will take longer to review and thus typically be picked up with lower priority by the community.
Contribution Checklist

Make sure that the pull request corresponds to a JIRA issue. Exceptions are made for typos in JavaDoc or documentation files, which need no JIRA issue.

Name the pull request in the form "[FLINK-XXXX] [component] Title of the pull request", where FLINK-XXXX should be replaced by the actual issue number. Skip component if you are unsure about which is the best component.
Typo fixes that have no associated JIRA issue should be named following this pattern: [hotfix] [docs] Fix typo in event time introduction or [hotfix] [javadocs] Expand JavaDoc for PuncuatedWatermarkGenerator.

Fill out the template below to describe the changes contributed by the pull request. That will give reviewers the context they need to do the review.

Make sure that the change passes the automated tests, i.e., mvn clean verify passes. You can set up Travis CI to do that following this guide.

Each pull request should address only one issue, not mix up code from multiple issues.

Each commit in the pull request has a meaningful commit message (including the JIRA id)

Once all items of the checklist are addressed, remove the above text and this checklist, leaving only the filled out template below.

(The sections below can be removed for hotfixes of typos)
What is the purpose of the change
We should perhaps consider adding a round-robin partitioner ready for use to be shipped with the Kafka connector, along side the already available FlinkFixedPartitioner.
Brief change log
Add a FlinkRoundRobinPartitioner class in org.apache.flink.streaming.connectors.kafka.partitioner package.
Verifying this change
Verified by new added unit test FlinkRoundRobinPartitionerTest.
Does this pull request potentially affect one of the following parts:

Dependencies (does it add or upgrade a dependency): (yes / no)
The public API, i.e., is any changed class annotated with @Public(Evolving): (yes / no)
The serializers: (yes / no / don't know)
The runtime per-record code paths (performance sensitive): (yes / no / don't know)
Anything that affects deployment or recovery: JobManager (and its components), Checkpointing, Yarn/Mesos, ZooKeeper: (yes / no / don't know)
The S3 file system connector: (yes / no / don't know)

Documentation

Does this pull request introduce a new feature? (yes / no)
If yes, how is the feature documented? (not applicable / docs / JavaDocs / not documented)

I'm closing this as "Abandoned", since there is no more activity and the code base has moved on quite a bit. Please re-open this if you feel otherwise and work should continue.


Created Dockerfile for Node and React App

Added a Dockerfile for Node and React App
Addresses issue #6

The issue meant for separate dockerfiles for react applications , and a separate one for node js applications


Suggestion: Use Github's Discussions tool

I see many discussions in the "Issues" but (as a long time developer), "Issues" is reserved for bugs and feature requests. I think the format of Discussions is more appropriate.
If you choose to accept my suggestion, you can enable Discussions from the repo's settings.
cheers,
Noam

Sure, happy to give it a try. Enabled.


VScode cannot start after update getting error 'TypeError require(...).load is not a function'

Does this issue occur when all extensions are disabled?: Yes

VS Code Version: 1.88.1
OS Version: Windows 11 Enterprise Version 22H2 Build 22621.3296

Steps to Reproduce:

Update vscode using the built-in update popup dialog.
Tro to execute using with code --verbose.

When downloading vscode from the official page and installing it, it will work again.

Closing the issue because it seems like a transient issue, or an issue specific to that older version. Let us know if you're still seeing it on VS Code 1.96 or later.


Use net.IP.Equal instead of bytes.Equal

As suggested by go-staticcheck. Appears to be present in Go since at least v1.

Thank you for your PR.


reset is not properly handled

the reason why the first instruction is not executed and the second is executed twice is due to wrong coding of reset signal. all registers in processes must be intitalized in case of reset signal. Otherwise the first instruction is not executed and second is executed twice.

As we move to Chisel, we use synchronous reset, and the first instruction will be executed. The comment is on the VHDL version of Leros.


Support for nested Skeletons

Hi,
I'm trying to make an ExpansionTile to work with Skeletonizer. For this I need to nest 2 Skeletonizers (One for the tile's main content, and one for the content loaded when it is expanded) but it appears that it is not supported as I get this error:
Skeletonizer widgets can not be nested directly, use Skeletonizer.zone as a parent for child Skeletonizers.

Maybe I'm getting skill-issued here but not matter what I tried with a Skeletonizer.zone it didn't work.

So support to have multiple Skeletons would be really nice for Widgets like ExpansionTiles.

I also encountered this. Up to a certain version, it was possible to embed a Skeletonizer into a Skeletonizer, and this didn't cause an error. I might be wrong, but it seems that the issue appeared when Bone was added.

@Caesarovich @Gagaved  nesting skeletonizes is now allowed in 1.2.0, please confirm and close

Just tested @Milad-Akarie  works fine thank you for the update

Nice job @Milad-Akarie 👍


scss/declaration-nested-properties wrongly reports some selectors

Seems that following rule doesn't work well with escaping in selectors,
  scss/declaration-nested-properties: never

This
.test4\:3 {}

Will produce following errors:
source/styles/generic/_code.scss
 1:1  ×  Unexpected nested property ".test4\"                             scss/declaration-nested-properties

Thanks for reporting! This rule also needs to handle escaped characters.

Thanks, works perfectly!


Move "Property compatibility table"

https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Property_compatibility_table_for_form_widgets
This is pretty useful, but I'm not sure it should be part of the learning area. Maybe put it under the input element reference instead?
Acceptance criteria

[ ] Article moved as appropriate

Updated the page/
Move it and all the "advanced" tutorials to an "other" topic section
Added links to that file from all the non-deprecated input pages.


Build Script

Great work! How do you build/compile the html page? I was looking for something similar, but don't wan't to do it all copy/paste style.  I have the verses and statements in json.

@mikecasas, We could make this easier and typeset the document in LaTeX, allowing for nicely-formatted PDF and hopefully also HTML output.  I was thinking of making a new branch and PR for this.

Thanks for the comment @njsch, otherwise another three years would probably have passed before I noticed this issue. Unfortunately the html page was manually created. Obviously I let this project stagnate.


Accessibility fixes

Fixed #94. Added an aria-expanded attribute to the button element in Filters.Group
Fixed #91. Added a <span className='sr-only'>send and email to </span> in EmailLink

Issue #90 and #87 are covered by this PR.

Fixed #89


test: replace should with node:assert

Part of https://github.com/ladjs/superagent/issues/1779
Checklist

[x] I have ensured my pull request is not behind the main or master branch of the original repository.
[x] I have rebased all commits where necessary so that reviewing this pull request can be done without having to merge it first.
[x] I have written a commit message that passes commitlint linting.
[x] I have ensured that my code changes pass linting tests.
[x] I have ensured that my code changes pass unit tests.
[x] I have described my pull request and the reasons for code changes along with context if necessary.

Codecov Report
Patch and project coverage have no change.

Comparison is base (83e92cb) 94.39% compared to head (a679c6a) 94.39%.
Report is 1 commits behind head on master.

:exclamation: Your organization is not using the GitHub App Integration. As a result you may experience degraded service beginning May 15th. Please install the Github App Integration for your organization. Read more.
Additional details and impacted files
@@           Coverage Diff           @@
##           master    #1782   +/-   ##
=======================================
  Coverage   94.39%   94.39%
=======================================
  Files          14       14
  Lines        1141     1141
=======================================
  Hits         1077     1077
  Misses         64       64

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


Efficient dequantization with new MLIR backend

see https://github.com/openai/triton/pull/759#issuecomment-1275357306

May I ask you why it needs special support at mlir level?
Just multiplying int8 matmul output by some factor would not generate optimized PTX code? (In case of quantized linear layer for instance)


fix: import cookies from next/headers

Import cookies from next/headers to fix the error message: cookies is not defined

This is fixed on master so can be closed https://github.com/lucia-auth/examples/blob/main/nextjs-app/github-oauth/lib/auth.ts#L4


Latest release (1.7.0) incompatible with Ubuntu 120.04

The latest release downloads prebuild binaries which require a newer version of GLIBC.
Error: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found (required by /.../node_modules/usb/build/Release/usb_bindings.node)

Release 1.6.5 works ok.
The package.json install script performs the prebuild-install and on failure would invoke node-gyp, however it
is succeeding in installed the wrong binaries.

Thanks @systemmonkey42 , this is a duplicate of #417


Update cloudflow-avro, ... to 2.3.1

Updates

com.lightbend.cloudflow:cloudflow-avro
com.lightbend.cloudflow:cloudflow-streamlets
com.lightbend.cloudflow:kubectl-cloudflow
com.lightbend.cloudflow:sbt-cloudflow

from 2.3.1-RC1 to 2.3.1.
GitHub Release Notes - Version Diff
I'll automatically update this PR to resolve conflicts as long as you don't change it yourself.
If you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.
Configure Scala Steward for your repository with a .scala-steward.conf file.
Have a fantastic day writing Scala!

Ignore future updates
Add this to your .scala-steward.conf file to ignore future updates of this dependency:
updates.ignore = [ { groupId = "com.lightbend.cloudflow" } ]

labels: library-update, early-semver-pre-release, semver-spec-pre-release, commit-count:1

Superseded by #125.


Maven error when updating to Azure SDK for Java v0.9.1 release

@jianghaolu
For example, when I try to install the azure-media package v0.9.1 by updating my pom.xml file:
<dependency>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure-media</artifactId>
    <version>0.9.1</version>
</dependency>

I receive the following Maven dependency error:

org.eclipse.aether.resolution.ArtifactDescriptorException: Failed to read artifact descriptor for com.microsoft.azure:azure-media:jar:0.9.1

If I try a previous version (v0.9.0) everything works as expected.

The problem seems to be the missing com.microsoft.azure:azure-bom:pom:0.9.1 package.

org.eclipse.aether.transfer.ArtifactNotFoundException: Could not find artifact com.microsoft.azure:azure-bom:pom:0.9.1 in central (https://repo.maven.apache.org/maven2)

From maven I see them all published: http://search.maven.org/#artifactdetails|com.microsoft.azure|azure-media|0.9.1|jar. Will give it a try.

Ah you are right, azure-bom wasn't published successfully.  Publishing it now you should get that in 24 hours. But if you don't use azure-bom but use azure-media directly this issue shouldn't appear?

Thanks @jianghaolu
I'm just adding the azure-media package as a dependency in my pom.xml file and it seems that azure-bom is one of its dependencies. Not just how to skip that.
Regards,
Mariano

@mconverti
Just want to let you azure-bom:0.9.1 is already live. I was able to reproduce and now the issue is gone. Please let me know if you find other issues. Thanks for reporting this so quickly!

@jianghaolu Great! It is also working in my Maven project.
Thanks for the quick turnaround!


IPV6 proxy does not work

I have a IPV6 proxy, command as follow:
youtube-dl --proxy user_name:password@[IPV6 addr]:port --skip-download --no-playlist --print-json --no-check-certificate https://www.youtube.com/watch?v=zPwnYItGeLQ --verbose
but it seemed to does not work. How should I do?
I guess whether youtube-dl does not support ipv6 address or I do not get a correct command format?

try adding --force-ipv6 to your command and see if that works.

no, still does not work..

try the tips here - https://askubuntu.com/questions/210410/how-to-run-youtube-dl-through-proxy-server

  --proxy URL
         Use  the  specified  HTTP/HTTPS/SOCKS  proxy.   To  enable SOCKS
         proxy,    specify    a    proper    scheme.      For     example
         socks5://<IP_ADDRESS>:1080/. ...

Eg,
-youtube-dl --proxy user_name:password@[IPV6 addr]:port --skip-download --no-playlist --print-json --no-check-certificate https://www.youtube.com/watch?v=zPwnYItGeLQ --verbose
+youtube-dl --proxy 'http://user_name:password@IPV6_addr:port' --skip-download --no-playlist --print-json --no-check-certificate 'https://www.youtube.com/watch?v=zPwnYItGeLQ' --verbose

Paste an actual complete log of the error (redacted as desired) for further help.
The askubuntu page is a bit out of date but as I understand it (not using a proxy) basically accurate; I guess that what was --cn-verification-proxy is now --geo-verification-proxy:

  --geo-verification-proxy URL
         Use this proxy to verify the IP address for some  geo-restricted
         sites.   The default proxy specified by --proxy (or none, if the
         option is not present) is used for the actual downloading.

Use --verbose and include the actual command line: redact authentication and/or IPv6 address as desired, but ideally without masking the structure of the command and parameters. Also, put your log inside a pair of triple backquotes to avoid random line wrapping.

the real command is:

That's an option when building the interpreter. You can run this to see the value:
python -c 'import socket;print(socket.has_ipv6)'

The format of your proxy URL seems OK. Do you have another application that uses the proxy successfully? Try accessing YouTube with your browser via the IPv5 proxy. 502 means "Bad gateway", so there may be a problem in the proxy.
The verbose log should include the whole output, not just the error and backtrace.

value of python -c 'import socket;print(socket.has_ipv6)'  is True
The proxy worked well in curl command..
the whole output is:
[debug] System config: []
[debug] User config: []
[debug] Custom config: []
[debug] Command-line args: [u'--proxy', u'http://xxxx:xxxxx@[xxxx:xxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx]:xxxx', u'--skip-download', u'--no-playlist', u'--print-json', u'--verbose', u'--no-check-certificate', u'http://www.youtube.com/watch?v=zPwnYItGeLQ']
[debug] Encodings: locale UTF-8, fs UTF-8, out UTF-8, pref UTF-8
[debug] youtube-dl version 2021.12.17
[debug] Python version 2.7.9 (CPython) - Linux-5.4.143.bsk.5-sign-amd64-x86_64-with-debian-8.11
[debug] exe versions: ffmpeg 3.2.10-1, ffprobe 3.2.10-1
[debug] Proxy map: {u'http': u'http://xxxx:xxxxx@[xxxx:xxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx]:xxxx', u'https': u'http://xxxx:xxxxx@[xxxx:xxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx]:xxxx'}
ERROR: Unable to download API page: HTTP Error 502: No video id found (caused by HTTPError()); please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; see  https://yt-dl.org/update  on how to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
  File "/usr/local/lib/python2.7/dist-packages/youtube_dl/extractor/common.py", line 634, in _request_webpage
    return self._downloader.urlopen(url_or_request)
  File "/usr/local/lib/python2.7/dist-packages/youtube_dl/YoutubeDL.py", line 2288, in urlopen
    return self._opener.open(req, timeout=self._socket_timeout)
  File "/usr/lib/python2.7/urllib2.py", line 437, in open
    response = meth(req, response)
  File "/usr/lib/python2.7/urllib2.py", line 550, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib/python2.7/urllib2.py", line 475, in error
    return self._call_chain(*args)
  File "/usr/lib/python2.7/urllib2.py", line 409, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 558, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)

in your command, try adding s to http - https, see what that does

That's an option when building the interpreter. You can run this to see the value:
python -c 'import socket;print(socket.has_ipv6)'

The format of your proxy URL seems OK. Do you have another application that uses the proxy successfully? Try accessing YouTube with your browser via the IPv5 proxy. 502 means "Bad gateway", so there may be a problem in the proxy.
The verbose log should include the whole output, not just the error and backtrace.

I have solved the question.. There is another proxy called A behind my specific proxy, and the error occured when the specific proxy connected proxy A. When I changed another ipv6 proxy, youtue-dl worked fine. Thanks a lot, best wishes !!!

It's proxies all the way down.


fix integration test failure with topo parallelism update

Two integration test with topo parallelism update fails in travis ci because of unmatched expected and actual results.
During topology parallelism update, one instance (identified as container_id-task_id) may be one of the following case:

If it is not changed between the old and the new packing plans, it will not be killed, instead it will be deactivated and then activated which results in instance state before the update being reserved.
If it is changed, it will be killed and start somewhere else, thus instance state before the update will be lost.
The thing can happen to both spouts and bolts. But in the two tests, AT_LEAST_ONCE only requires tuples emitted at spouts to be a subset of tuples processed at bolts, thus clear spout state when update topology parallelism can guarantee test correctness no matter how packing plan changes.

@nwangtw @nlu90 @huijunwu


Errors when running make clean to tear down cluster

This has been consistently happening the last few times I run make clean:
Error applying plan:

3 error(s) occurred:

* aws_subnet.public.1: Error deleting subnet: timeout while waiting for state to become '[destroyed]'
* aws_subnet.public.2: Error deleting subnet: timeout while waiting for state to become '[destroyed]'
* aws_internet_gateway.main: Error waiting for internet gateway (igw-3e7f795b) to detach: couldn't find resource

Terraform does not automatically rollback in the face of errors.
Instead, your Terraform state file has been partially updated with
any resources that successfully completed. Please address the error
above and apply again to incrementally change your infrastructure.
make: *** [destroy] Error 1

I don’t recall having seen that myself. Does punching make clean again work ?

On May 11, 2016, at 9:50 AM, Nathan Broadbent<EMAIL_ADDRESS>wrote:
This has been consistently happening the last few times I run make clean:
Error applying plan:
3 error(s) occurred:

aws_subnet.public.1: Error deleting subnet: timeout while waiting for state to become '[destroyed]'
aws_subnet.public.2: Error deleting subnet: timeout while waiting for state to become '[destroyed]'
aws_internet_gateway.main: Error waiting for internet gateway (igw-3e7f795b) to detach: couldn't find resource

Terraform does not automatically rollback in the face of errors.
Instead, your Terraform state file has been partially updated with
any resources that successfully completed. Please address the error
above and apply again to incrementally change your infrastructure.
make: *** [destroy] Error 1
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub https://github.com/kz8s/tack/issues/12

Nope I still get the same error. I think it's due to some network interfaces not being detached properly. Once I detach and delete those, the make clean is successful. Maybe this is a bug in terraform?

Does it happen every time ? I spin up and tear down clusters several times a day and haven't seen it yet.  Are you running 'make clean' right after 'make all' ?

On May 11, 2016, at 10:02 AM, Nathan Broadbent<EMAIL_ADDRESS>wrote:
Nope I still get the same error. I think it's due to some network interfaces not being detached properly. Once I detach and delete those, the make clean is successful. Maybe this is a bug in terraform?
—
You are receiving this because you commented.
Reply to this email directly or view it on GitHub

Ohhh I figured it out, Deis Workflow automatically provisions an extra load balancer. So I just needed to delete that first.


Spindle RPM not updating when changed

Hey there,
i'm currently brining a machine to life with grblHAL and noticed this odd behaviour in ioSender.
When the spindle is running and i want to change the spindle rpm i have to  either use the MDI command line ( e.g.: S12000 ) or put the spindle on off and back to CW as fast as i can so it sends the new speed to the spindle.
Is this wanted behaviour or a bug? I expected it to change the RPM after hitting enter or leaving the field.
Running the latest version of XL and tested in normal too.
Thanks for the awesome sender! It's a joy to work with.

Can you try the latest edge version?

Just tried the edge version.
the field now sends the proper S command when enter is pressed.
thank you very much!


ARC-1240:  Limit createPullRequestUrl to 2000

Our generateCreatePullRequestUrl generates a create pull request link that's shown on the screen below: (you can see the formatted URL on the very bottom of the page)

However, the createPullRequestUrl has a max length of 2000 that we were not checking for, and therefore, we've been receiving a lot of 400 Bad Request errors for pull_requests events.

I have added a test to make sure we're not sending the createPullRequestUrl parameter if length > 2000.

[] Test in staging


Preserve original linebreaks in the instructions strings.

Resolves https://github.com/findthemasks/findthemasks/issues/309

I'm afraid I wasn't able to get to this yesterday and won't today either,
so feel free to push commits to this branch if you'd like! And if not I
will be able to do something here tomorrow.
On Mon, Mar 30, 2020, 1:43 PM drwestco<EMAIL_ADDRESS>wrote:

@drwestco commented on this pull request.
In public/locations-list-map.js
https://github.com/findthemasks/findthemasks/pull/324#discussion_r400376116
:

@@ -195,6 +201,17 @@ function ctn(text) {
return document.createTextNode(text);
}

+// Turns a string with embedded \n characters into an Array of text nodes separated by
+function multilineStringToNodes(input) {

const textNodes = input.split('\n').map((s) => ctn(s));
let returnedNodes = [];
textNodes.forEach((e) => {
returnedNodes.push(e);
returnedNodes.push(document.createElement('br'));
})
return returnedNodes.slice(0,-1);

You can just decrement the length of returnedNodes to chop off the last
, instead of making a copy via slice()
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/findthemasks/findthemasks/pull/324#pullrequestreview-384086411,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAKTI36XPVKIUZJ72JUKE3TRKDK23ANCNFSM4LVXCZJQ
.

@drwestco  if you'd like to make the efficiency fixes, please do so in a follow-up. Merging this.