LetsEncrypt SSL Issue

Hi all,
Firstly, thank you for creating this project - it was very much needed!
I seem to be having issues with the mailserver using the LetsEncrypt SSL certificate option in the docker-compose.yml file:
- SSL_TYPE=letsencrypt
When using it, I seem to get the self-signed certificates coming up even though the location of the letsencrypt certs is correct:
/etc/letsencrypt/live
Does anyone know of anything I can do to debug, or even better fix this issue?

Die you Mount your /etc/letsencrypt folder to the container?

Yep, there's a a check on provided files.
@nicholasball have a look to this part of the code: https://github.com/tomav/docker-mailserver/blob/master/target/start-mailserver.sh#L721-L745

@mabunixda I thought I was, but maybe I'm doing it wrong. Not great with compose tbh.
I have this configured at the moment:
certs:/etc/letsencrypt/live
The certificates are in the certs folder on the same level as the yml file. Does this sound correct?

Hmm no you must create the certs in the host before Passing them to the container

I have the certs created, placed them both in /certs/ and in the directory where the yml config file is.  Maybe I'm missing something?

Did an inspect on the docker container and I get this configuration:
...             {                 "Type": "bind",                 "Source": "/home/docker-mailserver/certs",                 "Destination": "/etc/letsencrypt/live",                 "Mode": "rw",                 "RW": true,                 "Propagation": ""             }, ...
And nothing from the logs indicating that the SSL cert are being used:
... mail    |   Setting up DKIM mail    |   * DKIM keys added for: XXX.com mail    |   * Changing permissions on /etc/opendkim mail    |   Setting up SSL mail    |   Setting up PERMIT_DOCKER Option mail    |   * Adding container ip in my networks ...

OK I got it to work. Seems as though I had an issue with the actual cert files as well as mounting them to the correct place.
Thanks all

Great!

Sorry to open this back up but what was the solution. I am having the same issue. Can you share your compose yml?

Yes, plz

Same Problem here! Added /root/docker/letsencrypt/etc/letsencrypt:/etc/letsencrpyt to volumes in the docker-compose.yml certs were generated on host successfully.
Can you please share the solution?!

I think I have found the solution
This:
docker run --rm -ti -v $PWD/log/:/var/log/letsencrypt/ -v $PWD/etc/:/etc/letsencrypt/ -p 443:443 deliverous/certbot certonly --standalone -d mail.myserver.tld

Must be like this:
docker run --rm -ti -v $PWD/log/:/var/log/letsencrypt/ -v $PWD/etc/letsencrypt/:/etc/letsencrypt/ -p 443:443 deliverous/certbot certonly --standalone -d mail.myserver.tld

in the wiki part ....


Selecting input shows jumping content and keyboard overlays input

Ionic version:  (check one with "x")
[ ] 1.x
[x] 2.x
I'm submitting a ...  (check one with "x")
[x] bug report
[ ] feature request
[ ] support request => Please do not submit support requests here, use one of these channels: https://forum.ionicframework.com/ or http://ionicworldwide.herokuapp.com/
Current behavior:
Selecting input forces whole app to scroll up and down and sometimes keyboard overlays the sleected input field. this happes to me on all iOS devices with 10.3 and as I saw on ionic forum also in android. I didn't try it on minor iOS versions.
Expected behavior:
Not jumping up and down, just scrolling to the selected input.
Steps to reproduce:
It is a normal list with items as shown in the examples in the ionic docs inside a ion-card, nothing special. I also tried it without ion-card, same problem.
The same behavior I was in a fresh ionic app with only 1 page with input fields.
there is already an entry on ionic forum with videos and code snippets, please have a look at https://forum.ionicframework.com/t/form-jumps-when-an-input-is-selected/84254

Hello, thanks for using Ionic! This issue was caused by a regression in scroll events in Ionic 2.3.0. This issue has since been fixed and will be in the next release.

Thanks for information. But when will be the next release? I have an app ready for the AppStore and the only problem is this issue, my client won't wait to long. Is there a work around?


Simplify and fix dirty forms behaviour

Incorporates #2801 (fixes #2798), #2807 and #2808 (partially fixes #2513).
I noticed that @spmuck's approach in #2801 (listening to form submission actions rather than click events) allowed us to eliminate much of the old code, such as ignoredButtonsSelector. This also means that we're no longer relying on "which button/link triggered this event?" logic, which seems to be poorly standardised across browsers.
I had to make sure that I wasn't introducing any regressions by removing this code, so it made sense to fix (almost) all of the outstanding dirty forms issues, and put together the following checklist covering the expected behaviour and all past and current failing edge cases:

Browsing away (e.g. clicking 'Images') without making any changes SHOULD NOT trigger the message
Making a change then browsing away SHOULD trigger the message
Making a change then clicking 'Save' SHOULD NOT trigger the message
Making a change then pressing Cmd+S (with no input field focused) SHOULD NOT trigger the message
Making a change then pressing enter SHOULD NOT trigger the message
Making a change then clicking 'Preview' SHOULD NOT trigger the message; subsequently browsing away SHOULD trigger the message
Making a change then pressing Cmd+P (with no input field focused) SHOULD NOT trigger the message
(NB: may require allowing popups)
Making a change that fails server-side validation (e.g. blanking a required field in a formset, or entering an expiry date before the go-live date), clicking 'Save', then browsing away SHOULD trigger the message
Making a change that fails server-side validation then clicking 'Preview' SHOULD NOT trigger the message; subsequently browsing away SHOULD trigger the message
Making a change that fails client-side validation (e.g. entering an invalid email into an EmailField), clicking 'Save', then browsing away SHOULD trigger the message
Making a change that fails client-side validation then clicking 'Preview' SHOULD NOT trigger the message; subsequently browsing away SHOULD trigger the message
Making a change, then opening the document chooser popup and clicking a download link SHOULD NOT trigger the message

These now succeed on Chrome 51, Firefox 47, IE 11 and Safari 9.1 with the following exceptions:

Safari's onbeforeunload support somewhat broken as per https://github.com/torchbox/wagtail/pull/2793#issuecomment-229948331, and had to be tested by manually adding a cache-busting URL parameter to the URL each time. On the plus side, this bug only causes false negatives (not showing the warning when it should be shown), which are not nearly as bad as false positives...
Safari does not support client-side validation on input fields such as <input type="email">, so these are validated server-side (i.e. those tests just duplicate the two tests above, and still pass)
IE and Safari fail on document download links (#2513), due to not supporting the download attribute.

Unfortunately, removing the ignoredButtonsSelector closes off one possible avenue of fixing #2513 on IE and Safari - see #2535. However, I believe this is a fairly obscure bug, affecting minority browsers (I believe Edge is unaffected, but can't currently test this), and I think that leaving these unfixed is a better alternative than relying on the inherently unreliable button-detection code.

Merged in ad1f6716c583bedb0bce902b5e2259ef87755b4d Thanks!


Cannot Generate Genesis.ssz

hello, I have genesis.json and some files to be merged but when I want to merge those files I get an error.
actually i built my public blockchain with customization in genesis.json, config.yaml.
❯ eth2-testnet-genesis merge \
  --config "/home/Desktop/gitshock-client/config.yaml" \
  --eth1-config "/home/Desktop/gitshock-client/genesis.json" \
  --mnemonics "/home/Desktop/gitshock-client/mnemonics.yaml"

Logs :
using eth1 config to create and embed ExecutionPayloadHeader in genesis BeaconState
extra data is 117 bytes, max is 32

@protolambda

read the error message. The extra data in your genesis.json execution layer block is too long

read the error message. The extra data in your genesis.json execution layer block is too long

thankyou sir, solved!
but I want to ask something about bootnodes, I want to create my own bootnodes how do I get it? because what I read in the GETH documentation should be like this geth init --datadir ./keystore genesis.json and enter new console mode I see bootnode and enr. and these are good tools but I'm confused about entering ENR or bootnodes

geth init only initializes the node. you have to run geth from the same datadir. then you can get the enode entry from geth to bootstrap other nodes.

read the error message. The extra data in your genesis.json execution layer block is too long

thankyou sir, solved!
but I want to ask something about bootnodes, I want to create my own bootnodes how do I get it? because what I read in the GETH documentation should be like this geth init --datadir ./keystore genesis.json and enter new console mode I see bootnode and enr. and these are good tools but I'm confused about entering ENR or bootnodes

I also encountered this problem. How to solve the problem of too long extradata The execution layer extradata of the poa is more than 32. The genis.ssz generated by specifying the block number and the block hash cannot be read by Prysm


Publish this to PyPI

I think we can publish this as a library on PyPI, with a cli entry point
So people can directly do,
❯ pip install ModiScript
❯ MODI program.chai

Then even the website can be put into a separate repo, with ModiScript as a dependency.
I have some experience and I can set up a PR if you like the idea.

Hi @divykj
Thanks for the suggestion. Creating a .whl file is easy but it requires some time. Also given that the website is integrated on the API level and not cli level then that has to be changed as well. But since none of us are maintaining it regularly, we haven't gotten to doing it.
We welcome any PRs regarding this scenario as long as it does not break any existing functionality. Creating a setup.py file would require the imports in the binary files also to be possibly changed accordingly maybe.
Closing this issue for now as this is a feature request and nothing is to be tracked as the team isn't picking it up any time soon. Thanks again.
Regards


[doc]join优化文档笔误更改

Proposed changes
文档更改：应该是左边大右表小
Problem Summary:
Describe the overview of changes.
Checklist(Required)

Does it affect the original behavior: (No)
Has unit tests been added: (No Need)
Has document been added or modified: (Yes)
Does it need to update dependencies: (No)
Are there any changes that cannot be rolled back: (Yes)

hi @hf200012 , please change the commit log to English when merging, thank you!


undefined method `current_page' for #Mongoid::Contextual::GeoNear:0xcb48f64

i am using Ruby 2 and Rails 4 with Mongoid 4.
when i am trying to add pagination with geo_near, it throws the error.
though it works fine with normal queries.

I don't know much about MongoDB's geonear feature and I don't think I can implement it by myself. Please send a pull request if you want to see this support in.


fixes SPIFFS file reading; adds missing partition file

see https://github.com/espressif/esp-idf/issues/1437#issuecomment-354145860

it was able to read ide.html and whatever else:

Still not working for me. I did get the most recent esp-idf and made your sdkconfig tweaks
CONFIG_SPIFFS_META_LENGTH=0
behaviour is the same though.
D (30786) SPIFFS: read: offset:0 rd:128 data spix:0000 is data_pix:0000 addr:00000005

https://github.com/nkolban/duktape-esp32/issues/24#issuecomment-364710706
I can't see how to link discussions. Anyway it's all fixed, thanks!

and the issue or PR number (e.g. #24) will link to that issue or PR, if that’s what you mean. glad it’s fixed, sorry I broke it!


Fix check for Traversable in Zend\Log\Writer\PSR

Previously, this check always failed. See https://3v4l.org/YgpKg
This was detected by etsy/phan, and may or may not affect real code.

Thanks, @TysonAndre


Meson poc

[ ] closes #xxxx (Replace xxxx with the Github issue number)
[ ] Tests added and passed if fixing a bug or adding a new feature
[ ] All code checks passed.
[ ] Added type annotations to new arguments/methods/functions.
[ ] Added an entry in the latest doc/source/whatsnew/vX.X.X.rst file if fixing a bug or adding a new feature.

Build & install by doing (in the pandas directory)
pip install git+https://github.com/lithomas1/meson.git@fix-ghost-pdb-target
pip install git+https://github.com/lithomas1/meson-python.git@fix-install-subdirs
pip install Cython, wheel, oldest-supported-numpy>=0.10
pip install . -v --no-build-isolation

Builds are automatically multithreaded(thanks to ninja).
Known issues:

Sometimes the pxi's don't get generated (for me on macOS).
Addding the directory where your c files are will result in confusing errors about stuff defined in Python.h not being found. meson implicitly adds this dir.

@lithomas1 maybe you want to take over https://github.com/rgommers/pandas/commit/9cd411ea7be3901a0411c941b8352c746eb2f8d5? With that plus the PR I just opened, this PR builds with zero warnings (at least with GCC on Linux).

@rgommers @lithomas1 sorry for fragmenting conversation but I think this is better place to discuss than https://github.com/pandas-dev/pandas/pull/47081#issuecomment-1258688265
W.r.t. the versioneer issue, I think @rgommers and I might be talking about 2 different things when it comes to using meson-python versus setuptools. Without knowing much about meson-python, I am wondering why we couldn't continue to use setuptools as a "front end" while still using meson to generate the extensions. This is essentially what I did when getting CMake to work and it just required a small wrapper of setuptools
https://github.com/WillAyd/pandas/blob/ecef7476286ce80d063fe97cbd4ce8d6f0c9a3f4/build_support/build_backend.py
I am expecting we could do something similar with meson to make the transition easier? Meson-python probably still has advantages over setuptools that I am unaware but I think better to go incrementally rather than all at once where we can

@WillAyd it is possible, but I think that opens a whole new can of worms for no real reason. For example, you build the sdist with setuptools while you're building the wheel with a mix Meson and setuptools, leading to possible inconsistencies. And you'll be making cross-compiling worse rather than better.
If you want a gradual transition, it'd be better to merge this PR first, but still default to setuptools in pyproject.toml. That allows devs to start using Meson, without all contributors and users who are pip-installing from GitHub getting it straight away. And then it's a patch of a few lines to switch that default later.

@WillAyd I think I got this to basically green. I'm going to start upstreaming the work in chunks now.


Fix spinning wheel in login

Describe the bug
If you login as one user navigate to a certain space logout and then login as another user, there is a chance that you cannot log in and you get a spinning wheel
How to Reproduce

Create two meetings (A and B) and two users (C and D)
Add user C to meeting A
Add user D to meeting B
open a new tap
login as A
log out
login as B
spinning wheel
reload -> also spinning wheel
remove 'login' from the url and load -> you are directly logged in

Expected behavior
Additional context

I have tested some more. It seems, that after the first logout that the router is on a wrong url. Not just '/login', but '/11/login'. This leads to some problems, if the next user is not allowed to see meeting 11.

@rrenkert I don't know how to continue here. My fix would possible break the pub access code.


Add support language for method "fromLatLng"

Thank you so much for your efforts. Duplicate of https://github.com/shukerullah/react-geocode/pull/21


⚠ Jenkins Plugins Artifactory has degraded performance

In 0d8065b, Jenkins Plugins Artifactory (https://get.jenkins.io/plugins/artifactory/) experienced degraded performance:

HTTP code: 200
Response time: 1880 ms

Resolved: Jenkins Plugins Artifactory performance has improved in 5a6c0d6 after 56 minutes.


Fix link for pod yaml in vSphere Volumes README

This PR fixes the link in vSphere Volumes README file for pod yaml and also adds the yaml file.
Fixes https://github.com/vmware/kubernetes/issues/342
//cc @divyenpatel

/lgtm

Ok I see what is going on here. Next time can you be a bit more explicit in the PR message, it would help the review. Here I had to read the README to figure out that the yaml displayed was correct, but that the downloaded yaml was wrong and that you need to keep the yaml manifest because it is referenced earlier in the README :)

/lgtm


[WIP] [backport] Add axis option to batch normalization

Backport of #4266

[automatic post] Jenkins, test this please.

Jenkins CI test (for commit d5acfaebab9654fb353322a39b2c855743cde4fa) succeeded without errors!

We decided not to backport this PR, as discussed in #5050.


Link all histones MF to BP 'histone modification'

This is to group all activities that act on histones.
We will redefine GO:0016570 histone modification to be broader.
Pascale

This will be weird when we have no other protein modification terms...difficult to explain and justify. What would it's parent be (I thought the plan was to remove the term "protein modification"?


sources migrated to Tonel (fixes #14)

Used Iceberg > Mocketry > Extra > Convert repository sources to Tonel to convert repo to Tonel format to avoid Filetree error "The filename or extension is too long" on Windows.

Freshly redone by @pavel-krivanek


New Feature:  ReduxActions

This is a...
[X] request for feedback / interest level of integrating this idea into the store
Feature:  ReduxActions
What are they?
An attempt at a more object oriented and type safe approach to Redux actions that not only provide a means for better code organization, but also eliminate a lot of the boilerplate coding involved when dispatching and reducing actions.
How do they work?
All ReduxAction classes get decorated with @ReduxAction.  This decorator is used to register the Redux action class  under the specified "ActionName" (which also serves the purpose of the "type" in traditional Redux) in a ReduxActionRestorer instance.  The purpose of this is to store a reference to the class' constructor so that it can later be retrieved to reconstitute an action class from the plain Javascript object that ultimately gets stored within Redux.   NOTE: This reconstitution process is only necessary when restoring the application state from its serialized form such as from a JSON file.  Normal usage retains the ReduxAction's methods and allows for their usage without rebuilding the class.
ReduxAction classes also implement the following interface:
export interface IReduxAction<RootState> {
    ActionName: string;                    // the 'type' in Redux
    execute(state: RootState): RootState;  // executes the state change (replaces switch case)
    dispatch() : IDispatchAction;          // dispatches the action into Redux (replaces action method)
    toDispatchAction() : IDispatchAction;  // used to create a plain Javascript object from this class
                                           // with a type and a payload
}

This is further simplified by extending from the BaseReduxAction:
export abstract class BaseReduxAction<RootState> implements IReduxAction<RootState> {
  public readonly ActionName: string;

  public abstract execute(state: RootState): RootState;

  public constructor(actionName: string) {
    this.ActionName = actionName;
  }

  @dispatch()
  public dispatch() : IDispatchAction {
    return this.toDispatchAction();
  }

  public toDispatchAction() : IDispatchAction {
    return <IDispatchAction> {
      type: this.ActionName,
      payload: this
    };
  }
}

Example ReduxAction converted from the example-app:
@ReduxAction()
export class AnimalLoadStarted extends BaseAnimalAction
{
  public AnimalType : AnimalType;

  constructor(animalType: AnimalType) {
    super("ANIMAL_LOAD_STARTED");

    this.AnimalType = animalType;
  }

  execute(state: IAnimalList) : IAnimalList
  {
    return {
          items: [],
          loading: true,
          error: null,
        };
  }
}

A default reducer implementation is also provided that will apply any dispatched ReduxActions onto the current application state as well as restore any ReduxActions that have been serialized.
Usage:
new AnimalLoadStarted("elephant").dispatch();

Key Benefits:

Simplified setup/usage
Code organization - all of the code for a given action can now be found in one place
Increased type safety - no more switch statements!

The following repos will better demonstrate the full implementation and usage pattern:
Implementation in the store
Modified example-app
Please let me know what you think.  Thank you.

Hi @nbindel
Thanks for the detailed proposal, and kudos for providing a working implementation. I wish everyone was this thorough :)
However, I have to say I'm not sure what the benefits of this approach are.  To your section on "key benefits":
Simplified setup/usage:

This actually seems more complex - it introduces a great deal of boilerplate for defining actions. As an example, compare the current action definition approach, 43 LOC  for 4 actions with your action definition approach 83 LOC for 3 actions

Also, the extra code to support marshalling and unmarshalling actions whose serialization is not trivial is likely to be a performance concern.

Code organization:
You are correct that all code involved with an action (definition, dispatch, etc.) is now in a single place. However I don't understand why that's beneficial. It depends how you slice your concerns. Is an action a concern in and of itself or simply a message in a CQRS system? My feeling is that actions should remain simple, immutable, serializable messages. A record is a much better fit for this than an OOP class in my opinion.
Even back in my Java/OOP days I ended up adopting an approach that separated data from functions into different classes; data classes were immutable and functional classes were stateless. I don't really buy the philosophy of colocating methods and state any more, which is partly why I'm involved with Redux in the first place :).
Increased type safety - no more switch statements
We don't need to go to these lengths to ensure type safety; switch statements, while ugly from an FP perspective also, don't weaken the ability to type stuff, nor do classes inherently make for stronger typing.
My personal approach to type-safe actions comes from acdlite's flux-standard-action, which includes its own type definitions.
FSAs codify a pattern that has become very common in the Flux and Redux communities and is therefore much more accessible to people doing Redux than actions based on a class hierarchy.
export interface FluxStandardAction<PayloadType, MetadataType> {
  type: string | symbol;
  payload: PayloadType;
  error?: boolean;
  meta: MetadataType;
}

Due to the benefits of Typescript's excellent structural typing approach, a FluxStandardAction is assignable to a Redux Action because it satisfies the field requirements (it has a compatible type member).
In general, this kind of 'duck-typing' is preferred over the extremely limiting inheritance-only based polymorphism we're constrained to in Java.
So... what about reducers that accept several different action types? Typescript allows for this with union types:
import { Reducer } from 'redux';
import { FluxStandardAction } from 'flux-standard-action';

interface FooPayload { foo: string }
interface BarPayload { bar: number }
interface MetaData { metadata: Object }

export type FooAction = FluxStandardAction<FooPayload, MetaData>;
export type BarAction = FluxStandardAction<BarPayload, MetaData>;

export const FOO_LOAD_SUCCESS = 'FOO_LOAD_SUCCESS';
export const BAR_LOAD_SUCCESS = 'BAR_LOAD_SUCCESS';

// Typesafe: payload must be of type FooPayload.
export const loadFoo = (foo: FooPayload): FooAction  => ({
  type: FOO_LOAD_SUCCESS,
  payload: foo,
  meta: null
});

// Typesafe: payload must be of type BarPayload.
export const loadBar = (bar: BarPayload): BarAction  => ({
  type: BAR_LOAD_SUCCESS,
  payload: bar,
  meta: null
});

What about a reducer than needs to handle more than one action type? Consider this approach using union types and type assertions:
interface DataState {
  foo?: FooPayload;
  bar?: BarPayload;
}

export const dataReducer: Reducer<DataState> = (
  state: DataState = {},
  action: FooAction | BarAction): DataState => {
    switch(action.type) {
      case FOO_LOAD_SUCCESS: return {
        ...state,
        foo: <FooPayload>action.payload,
      };
      case BAR_LOAD_SUCCESS: return {
        ...state,
        bar: <BarPayload>action.payload,
      };
    }

    return state;
  };

If, like me, you consider the switch statement undesirable for aesthetic reasons, I can also suggest a more FP (and equally type-safe) way to remove it using a dictionary:
export const dataReducer: Reducer<DataState> = (
  state: DataState = {},
  action: FooAction | BarAction): DataState => ({
    [FOO_LOAD_SUCCESS]: { ...state, foo: <FooPayload>action.payload },
    [BAR_LOAD_SUCCESS]: { ...state, bar: <BarPayload>action.payload },
  }[action.type] || state);

Final notes
I must at this point confess to a personal bias. I worked for many years as a Java and C++ developer, doing canonical OOP, and I have grown disillusioned with it. class and extends bring with them a host of flexibility problems necessitating dependency injection, careful modelling of inheritance hierarchies, and an awful lot of boilerplate. They also invite side-effects and state synchronization problems by making it much too easy to mutate and segment state in uncontrollable, arbitrary ways.
Since making the jump to FP-style JavaScript I have realized that these problems are much more elegantly solved with pure functions, immutability, and referential transparency.
These days I only really use classes when a framework like Angular forces me to.
Don't get me wrong - I love strong typing. Strong typing !== OOP, and a type !== class. TypeScript has a much richer and more flexible typing system, with structural typing, generics, unions, intersections, and typeguards which make it possible to improve code correctness without building large class hierarchies, which is exciting.
Finally,  actions in redux are simple (structurally typed) records. This is the pattern widely used by the community, and I'm reluctant to change it for reasons of clarity and compatibilty.

First off, let me start by saying thank you for writing up such a detailed response to my proposal.  Frankly, it is far more than I was expecting and I also appreciated the background information that you provided.  It definitely helped me better understand where you are coming from.  As it turns out, I too come from a background in (C++/Java), but I have yet to become as disillusioned about the OO paradigm as you have (not that it doesn't have its issues some of which you pointed out).
Development Philosophy
My general programming philosophy revolves around a strong desire to reduce mistakes and errors in not only in solving the immediate problem at hand, but also when taking into account the full life cycle of the application.  As such, I try to implement patterns that rely heavily upon the compiler to not only detect various programmatic issues, but also to convey/enforce intent that will help provide guidance and reduce the cognitive load for both current and future developers looking at the code.  Consequently, if I can leverage the compiler to provide a compile-time guarantee or can come up with a pattern to follow that will logically eliminate a certain set of potential errors/mistakes then I almost always prefer that approach, even if it ends up making the code a bit more verbose at times.  The only time I find myself diverging from this is when the requirements of the application itself can't be met which usually means performance related reasons.
Responses to address some of your points / concerns:

Setup / usage seems more complex:
I will agree with you that it does exchange one sort of boilerplate for another, but I would argue that the new form helps reduce the cognitive complexity by making the pattern to follow more obvious and less error prone as I will describe in more detail in the sections below.
Additionally, I'd like to point out that using the direct LOC comparison between those two files is an apples to oranges comparison.  This is because the ReduxAction classes implement both the action creator and the action reducer cases.  A more direct comparison would involve comparing the sizes of both the resulting reducer files and the actions which actually comes out much closer.  In fact, the only reason there is a reducer class at all in my implementation of the example-app is because of the logic you've added to conditionally use it or not.  In general, this will not be the common usage pattern and I believe that it could even be eliminated in the example-app by doing a bit of restructuring.

Marshaling/unmarshaling performance concerns:
As I stated in my original post as a note, during normal usage this code is never even executed.  Nor does it happen when replaying the actions from within the Redux DevTools.  Perhaps, I'm misunderstanding what you meant or are referring to here, but I'm not currently aware of a major usage 	pattern that would require highly performant action restorations from a serialized state.  My understanding is that this is primarily useful to allow for the playing back of events for the purposes of debugging, which on the surface seems to be something that would merit performance considerations.

Actions in redux are simple (structurally typed) records (community concerns):
I understand the concerns about not following the current standards within the community.  However, I'm not proposing to change how everything works.  In fact, fundamentally nothing in my implementation changes what's going on at all, it simply organizes it in a different way that I believe solves a number of potential pitfalls within the existing approach.  I think part of the confusion here may be due to my reuse of the term "Action".  The Redux version of "Action"s in what I'm proposing are still those same structurally typed records (I just called them IDispatchAction and you stated you used 	"FluxStandardAction").  The only real difference is in how all theses pieces are tied together.  If changing the ReduxAction name to something else helps to better convey this or replacing IDispatchAction with FluxStandardAction will provide better community support then I'm all for making those changes.

Additional Details
ReduxAction Objectives:

Provide a simpler means to update the application's state using Redux
Requirements:
The fulfillment of this objective at a minimum requires fulfilling the following steps in the Redux methodology:

Creation of a state change event (aka Action)
Dispatch the state change event (aka Action)
Perform the state update

Eliminate the usage of string values as means to providing referential integrity between an action's "type" field and the corresponding intended state change found in the reducer function
The usage of strings here as a way to provide referential integrity relies entirely on the implementing developer's ability to keep things straight.  Accidental usage of the wrong string value will cause a disconnect between the dispatched action and the corresponding intended state change.  This will happen regardless of whether said reducer makes use of case statements or dictionaries.  Additionally, although the usage of string constants does help mitigate the issue here, it does not eliminate the problem since there is nothing preventing a developer from using raw string values instead.

Improve upon existing patterns to make them less error prone and intuitive
Considerations:
- How intuitive is it to add/update/remove an action dispatch -> state change life cycle?
- Is there a better way to implement the action life cycle that can make it more difficult for a developer to get wrong?

Improve upon existing patterns to aid in code creation and maintenance over time
Considerations:
- How many places in the code do you need to modify to add/update/remove a given state change? How many files do those places needing to be modified reside in?
- When removing an action -> state change does the compiler point out all the places the code needs to be cleaned up?

Maintain backwards compatibility with the existing Redux infrastructure and ecosystem
Requirements:
Implementation should not affect or limit existing Redux functionality or features or related tooling in the Redux ecosystem.

How ReduxActions accomplish these objectives:

Provide a simpler means to update the application's state using Redux
Solution:

A default reducer implementation is provided that is capable of reducing all ReduxActions. This can be registered once as the root reducer to handle all ReduxActions or be combined repeatedly to manage various substates.  If you only use ReduxActions, this could possibly be the only reducer function 			  you ever need to use.
An application state update can now be accomplished by simply fulfilling the contract defined by the IReduxAction interface.  The provided BaseReduxAction class further simplifies this process by eliminating the need to implement the dispatch() or toDispatchAction() methods and it also provides direction to the derived class that it requires the action's name (aka "type") to be provided by making that a requirement of its constructor.  This leaves us with only 5 setup steps to creating a fully functional action life cycle in Redux.
Steps to setup:

Create new file with a class that extends from the provided BaseReduxAction
Create a private static readonly constant representing the actions "type" in traditional Redux.
Decorate that class with @ReduxAction
Create a constructor that requires the values needed to perform the state change and store them as private readonly members.
Implement the actual state change like you would in a normal reducer's case statement in the execute() method referencing only member variables and the visiting application state.

Steps to use:

Create an instance of the ReduxAction class by providing the required parameters to the constructor.
Call the dispatch() method on that instance.

Eliminate the usage of string values as means to providing referential integrity between an action's "type" field and the corresponding intended state change found in the reducer function
Solution:

Reducer usage:  This has been resolved by implementing the state change itself inside of the command pattern.  This avoids the need for the switch statement in the reducer altogether since this allows an action to instead "execute" its state changes directly.
Action creator usage: This has been resolved by standardizing the creation of the Redux plain Javascript "Action" objects for all ReduxActions.  This is accomplished as a result of the readonly ActionName being set upon a ReduxAction's creation along with the entirely self-referential implementation provided in the BaseReduxAction's toDispatchAction() method which guarantees that the "type" field will be the "ActionName" and the "payload" will always be the ReduxAction itself.

By setting up both the action creation and the reducing process in this way we can guarantee that the action "type" being dispatched always results in the execution of the corresponding state change.  This to me is a huge win since getting this correct is so fundamental to the entire process.
Unfortunately, there is one possible minor issue that could not be prevented due to the limitations of Typescript/Javascript and that is the fact that the ActionName could be improperly set to the wrong value in the first place.  Originally, I had intended to make use of the class' name directly via reflection as a way to guarantee that the type would always correspond to the current action, but there does not seem to be a reliable way to achieve this in Typescript or Javascript.  Javascript does provide a "name" field on each class which does actually return the class' name.  However, this only works when the code is not minified.  Once the code is minified, the class names returned start becoming single letters (and in a lot of cases even the same letter).  The only reliable resolution is to manually provide the class' name and then store it on the class.  While this is not perfect, I believe the process for creating a ReduxAction does help to eliminate the possibility of incorrectly assigning an ActionName.  Additionally, there is a runtime check in place that will throw an exception at application startup to indicate if an ActionName has been utilized previously.  Ultimately though this is a non-issue so long as the ActionName used is unique to the system, the functionality itself will continue to work regardless of the fact that it contains the wrong semantic value.

Improve upon existing patterns to make them less error prone and intuitive
Solution:
This one is more subjective, but there are some definitive benefits to utilizing ReduxActions in terms of code maintenance.  To start with, I would recommend creating one ReduxAction per file and organizing them in folders the way they are currently grouped in .action classes.  Seeing them in the file structure this way will visually convey their importance and anyone familiar event driven programming concepts will most likely immediately recognize them as part of such a system whether they are familiar with Redux or not.  How to add a new action to the system becomes immediately apparent and the fact that all of the logic surrounding their implementation is now in one place instead of multiple places the pattern becomes easier to replicate.  Removing a ReduxAction from the system also becomes trivial, simply delete the corresponding file.  This will allow the compiler to identify all of the remaining places where it was referenced which will aid the developer in the cleanup process.  An additional benefit here by using the single action per file paradigm, is that import statements will also highlight for removal when they are not longer needed.  Imports to action creator classes would not highlight since those classes contain more than one action and their reference is not being deleted.  Yes, I understand that there is likely additional IDE tooling can help detect these unused imports, but this approach would do so automatically.

Maintain backwards compatibility with the existing Redux infrastructure and ecosystem
Solution:
So far this appears to have been achieved.  Fundamentally, the code is just a wrapper around the existing Redux implementation so it should be fully backwards compatible.

Works with existing reducers, can be combined, etc.
Works with Redux DevTools.
Ability to replay serialized Actions.
Middleware (has worked with the Epic middleware in the example-app, but has not been tested beyond that)

In Summary
Just to be clear, all I am proposing to do here is add an alternative approach to implementing state changes in angular-store.  Some may welcome this approach, while others who don't find this approach
useful can happily ignore it.
My apologies for this post turning into a bit of a short novel, but I felt it necessary to better explain what I was trying to accomplish and why.  Hopefully, this helps to further clarify things.

I have to agree on this with @nbindel.
I am currently in process of switching from ngrx/store to this project. And first thing i was hoping that i will not have to make 2 files to merge action with reducer and a way to remove "raw strings" as they are just a disaster waiting to happen. In ngrx/store i went around this issues making services and additional boilerplate just to ensure type safety and minimalize chances of semantic errors.
This as @nbindel said is just an alternative approach of how to write actions and reducers.
I will try to put this in simpler terms... your current approach is like a while loop while he is proposing a for loop approach. For while loop you have to take care of counter yourself. For loop allows you to take care of counter for you. So i presume both options should work alongside each other without any performance issues...
My 2 cents.

Circling back to this - sorry for the delay, I've been focusing on bugfixes / paid work for a while.
If people find value from this approach, there's no reason it can't be released as a standalone package - the changes to /store appear to be additive only; I have no problem with you publishing it as something that can be used side-by side with angular-redux/store.
However, I don't think this belongs in angular-redux/store itself. It is too much of a departure from standard Redux patterns and bundling it would reduce the focus of the library.
To @xban1x point,  "raw strings ... are just a disaster waiting to happen" - I have to say I disgree, for two reasons:

I have worked on very large Redux codebases (on the order of 100,000 LOC) and using strings for action types has never been an issue. Not once. Defining constants for them has been sufficient.

I'm afraid I don't understand the desire to make each action constant into its own type. Actions have a type: it's Action.  The value of the type property is data, not a static type, and I don't see the value of treating it as a static type. Redux is a message passing system. The string is part of the message. While there's no harm in making different actions into different types, there's also very little value.

To counter your for/while argument, let me describe how I see it.  Creating a tree of static types for each message in your Redux system is in my view akin to creating a different type for each integer.  E.g. 1 extends number, 2 extends number, and so on. I simply don't see the value.


Project takeover

I'm interested in taking over maintenance of this package. I've forked and have begun using it in a few projects.
So far, my improvements are:

fix bug in be-close-to
added support for color testing
add ability to fail with an error code (useful for CI)
added type safety to be
added have-the-keys and have-the-exact-keys map matchers
removed the dependency on sassyjson
added continuous integration for multiple versions of node-sass and ruby sass

I'm also working on better cross compiler support (related to #94 and #100).
I'm taking the initial setup in a different direction. I'm emphasizing a more unopinionated and pure sass build system (instead of relying on grunt).
Overall, I see a lot of value in this project and I think it's written very well. This is a very useful when testing sass libraries. (I think it's not right for testing "css", but that's a separate discussion)

If you're up for this, I'd like to have the npm package name transferred so I can continue releasing to it. It would be convenient to have ownership of this github repository transferred as well, so I don't have to recreate the wiki.

👍  I've just come across this library and would appreciate it continuing to be maintained, especially with the nice improvements @apexskier has added.


Microsoft JScript runtime error

I'm going insane :)
I've followed these steps:

npx create-serverless-stack@latest my-sst-app
npm install
npx sst start

I then get hit with this:

I tracked the issue down and aparently it's because Windows Script Host doesn't support modern JS like const and exports

What I've tried:

Updating to latest version of java
Updating to latest version of node (v16.14.0)
Uninstalling aws-cdk (this works fine btw, I can synth and deploy my normal aws-cdk projects)
Creating new projects in various locations
Praying to a higher power
Running these commands in cmd prompt

regsvr32 jscript.dll and press ENTER.
regsvr32 vbscript.dll and press ENTER.

Is this a common error? My first time using SST

Praying to a higher power

Oh wow, haha sorry you had to go through that.
Let me pull the team in on this. @fwang @thdxr

The higher power answered, and his name was Phil.

Clearer steps:

Create a JS file called whatever, eg test.js
Put a console.log('1') in it
Find it in Windows Explorer
Right click > Open with > Choose Another App
Tick always use this app to open .js files
More Apps > Scroll down > Choose another app on this pc
Navigate to node directory: eg C:\Program Files\nodejs
Select node.exe and Open
The icon for the file should change to the green node square

Above steps have stopped the JScript error from occurring.
There's a following error as follows but it may be unrelated to this so I will attempt to solve separately.
PS D:\Projects\Mafia\mafia-sst> npx sst start
Look like you’re running sst for the first time in this directory. Please enter a stage name you’d like to use locally. Or hit enter to use the one based on your AWS credentials (Jackson): dev
Using stage: dev
Preparing your SST app

=======================
 Deploying debug stack
=======================

Usage: cdk -a <cdk-app> COMMAND

Commands:
  cdk.js list [STACKS..]             Lists all stacks in the app   [aliases: ls]
  cdk.js synthesize [STACKS..]       Synthesizes and prints the CloudFormation
                                     template for this stack    [aliases: synth]
  cdk.js bootstrap [ENVIRONMENTS..]  Deploys the CDK toolkit stack into an AWS
                                     environment
  cdk.js deploy [STACKS..]           Deploys the stack(s) named STACKS into your
                                     AWS account
  cdk.js watch [STACKS..]            Shortcut for 'deploy --watch'
  cdk.js destroy [STACKS..]          Destroy the stack(s) named STACKS
  cdk.js diff [STACKS..]             Compares the specified stack with the
                                     deployed stack or a local template file,
                                     and returns with status 1 if any difference
                                     is found
  cdk.js metadata [STACK]            Returns all metadata associated with this
                                     stack
  cdk.js acknowledge [ID]            Acknowledge a notice so that it does not
                                     show up anymore              [aliases: ack]
  cdk.js notices                     Returns a list of relevant notices
  cdk.js init [TEMPLATE]             Create a new, empty CDK project from a
                                     template.
  cdk.js context                     Manage cached context values
  cdk.js docs                        Opens the reference documentation in a
                                     browser                      [aliases: doc]
  cdk.js doctor                      Check your set-up for potential problems

Options:
  -a, --app                REQUIRED: command-line for executing your app or a
                           cloud assembly directory (e.g. "node bin/my-app.js")
                                                                        [string]
  -c, --context            Add contextual string parameter (KEY=VALUE)   [array]
  -p, --plugin             Name or path of a node package that extend the CDK
                           features. Can be specified multiple times     [array]
      --trace              Print trace for stack warnings              [boolean]
      --strict             Do not construct stacks with warnings       [boolean]
      --lookups            Perform context lookups (synthesis fails if this is
                           disabled and context lookups need to be performed)
                                                       [boolean] [default: true]
      --ignore-errors      Ignores synthesis errors, which will likely produce
                           an invalid output          [boolean] [default: false]
  -j, --json               Use JSON output instead of YAML when templates are
                           printed to STDOUT          [boolean] [default: false]
  -v, --verbose            Show debug logs (specify multiple times to increase
                           verbosity)                   [count] [default: false]
      --debug              Enable emission of additional debugging information,
                           such as creation stack traces of tokens
                                                      [boolean] [default: false]
      --profile            Use the indicated AWS profile as the default
                           environment                                  [string]
      --proxy              Use the indicated proxy. Will read from HTTPS_PROXY
                           environment variable if not specified        [string]
      --ca-bundle-path     Path to CA certificate to use when validating HTTPS
                           requests. Will read from AWS_CA_BUNDLE environment
                           variable if not specified                    [string]
  -i, --ec2creds           Force trying to fetch EC2 instance credentials.
                           Default: guess EC2 instance status          [boolean]
      --version-reporting  Include the "AWS::CDK::Metadata" resource in
                           synthesized templates (enabled by default)  [boolean]
      --path-metadata      Include "aws:cdk:path" CloudFormation metadata for
                           each resource (enabled by default)
                                                       [boolean] [default: true]
      --asset-metadata     Include "aws:asset:*" CloudFormation metadata for
                           resources that uses assets (enabled by default)
                                                       [boolean] [default: true]
  -r, --role-arn           ARN of Role to use when invoking CloudFormation
                                                                        [string]
      --staging            Copy assets to the output directory (use --no-staging
                           files with SAM CLI)         [boolean] [default: true]
  -o, --output             Emits the synthesized cloud assembly into a directory
                           (default: cdk.out)                           [string]
      --notices            Show relevant notices                       [boolean]
      --no-color           Removes colors and other style from console output
                                                      [boolean] [default: false]
      --version            Show version number                         [boolean]
  -h, --help               Show help                                   [boolean]

If your app has a single stack, there is no need to specify the stack name

If one of cdk.json or ~/.cdk.json exists, options specified there will be used
as defaults. Settings in cdk.json take precedence.

There was an error synthesizing your app.
PS D:\Projects\Mafia\mafia-sst>

Hey @JacksonBowe, I just released v0.69.2 with the fix. Let me know if it fixes the issue for you.
^^ To add some context, CDK made a recent change to their binary. It seemed to affect Windows users.

We are transition this repo to https://github.com/sst/v2 and are closing this issue for now. If it is still relevant please reopen it there - sorry for the trouble


Soft Actor Critic (SAC) Model

What does this PR do?

Update for #596 (issue)
Implementation of SAC model for Reinforcement Learning

Before submitting

[x] Was this discussed/approved via a Github issue? (no need for typos and docs improvements)
[x] Did you read the contributor guideline, Pull Request section?
[x] Did you make sure your PR does only one thing, instead of bundling different changes together?
[x] Did you make sure to update the documentation with your changes?
[x] Did you write any new necessary tests? [not needed for typos/docs]
[x] Did you verify new and existing tests pass locally with your changes?
[ ] If you made a notable change (that affects users), did you update the CHANGELOG?

PR review

[x] Is this pull request ready for review? (if not, please submit in draft mode)

Anyone in the community is free to review the PR once the tests have passed.
If we didn't discuss your PR in Github issues there's a high chance it will not be merged.
Did you have fun?
Make sure you had fun coding 🙃

Hello @blahBlahhhJ! Thanks for opening this PR.

 Another RL pull request! This is for Soft Actor Critic which supports continuous action space and off-policy learning. Could you review and give me some feedbacks? About the PEP8 error, I tried both before and after and they lead to different errors so I don't know what to do.
Thanks in advance!

pls add chlog note

Done

@blahBlahhhJ mind check why so many tests are failing?

@blahBlahhhJ mind check why so many tests are failing?

@Borda Seems like all the tests fail when I set self.automatic_optimization = False with an AttributeError saying the attribute cannot be found. I take a look in PytorchLightningModule and see that this attribute is managed by a property setter function, and the __setattr__ function is implemented in pytorch.nn.Module. So I'm not sure there's anything I can do to solve any of them. (the tests pass on my local Mac environment which is strange).

Thank you @blahBlahhhJ for this nice PR
I have just merged the #598 which brought some collision, could you pls chek them

Thank you @blahBlahhhJ for this nice PR
I have just merged the #598 which brought some collision, could you pls chek them

@Borda Hi, thanks for merging the other PR! I've fixed all the conflict.

Thanks @blahBlahhhJ for your patience on this one, bolts has been under maintained so apologies on the time taken to get this merged :)


Improvements for Manage HH UI

Wrap javascript in IIFE, add 'use strict'
Improved the formatting of the javascript, I suggest viewing diff with ?w=1
Fix for address block help displaying incorrectly when no address has yet been entered
Add save/delete/cancel buttons to top of UI
Prevent Save status message from pushing UI and moving buttons

Refs #1385

:+1:

Thank you @dextermilo for taking care of this

@kbromer here you go, let me know if this works

Ah, you replied already ;)

:ear:

@njjc can you take a look at this pull from Ryan - run the build on it, and we can merge it for next release?  Thx!

@njjc hold on this for now

@kbromer given the reimplementation of Manage Household UI, I think we can close this pull request.  agreed?

Yes, agreed


Provide a convenient way for a developer to build the release variant or all variants of a project

Currently, a developer can build the release variant using the linkRelease task for libraries or the installRelease task for executables. It would be useful to offer a consistent lifecycle task that doesn't require the developer, or tooling, to know what kind of output the project produces.
To build both variants, the developer can run these tasks plus the assemble task. Again, it would be useful to offer a lifecycle task that produces all the variants of the project, without the developer or tooling knowing what kind of output is produced.
Personally, I don't think we should change the assemble task to build all variants. Building just enough for the developer to do something useful with the project is better for this task as well as the check and build tasks.

@adammurdoch, have you considered the possibility of taking variant specification as a kind of command-line flag which influences which tasks participate in a specific lifecycle rather than having to add new lifecycle tasks? For example, we might image gradle --variants release,debug assemble I am nervous about adding additional lifecycle tasks to Gradle’s model for some variants (e.g. release and debug) but not offering a generic mechanism for additional variants the user may come up with. (e.g. chocolate and pistachio)

Yes, there were a bunch of options in the design doc that we might implement. They're not all mutually exclusive.
It certainly wouldn't be the case that 'debug' and 'release' would be treated any differently to any custom variants. So, if we opt for adding an assembleRelease task, it would be implemented in such a way that any custom variant X would automatically get an assembleX task defined.
A downside of using command-line options - or any new CLI behaviour - is that it is not particularly usable or discoverable from a clickity-click UI (I can't just select something from a list of task), is not discoverable from the CLI, and is completely unusable from build logic to implement custom workflows or orchestration or aggregations or whatever. Or at least without us doing a bunch of work to introduce new concepts.
A downside of using tasks to define the groupings is that you need a task for every grouping x action.
A good solution would eventually sit in the middle, I think. There are super common groupings (specifically, "build me something I can test", "build me something I can release", "build me everything that you can on this machine") that should be easy to use out of the box and are important to be reachable from build logic for orchestration. There could and even should be lifecycle tasks for these, but we might look at other options, such as APIs to query a 'buildable' for a particular combination that the command-line, the tapi and build logic can all drive as they need to.
This story, however, should be scoped to the simplest increment that adds value.

I agree with the discussion so far. One issue I had with the software model implementation was the order in which the dimension appeared in the task name. It was always a pain to know what comes before/after when typing a task name. The workflow looks mostly like this:

./gradlew tasks
Find and copy the name of the task you want to invoke
./gradlew <past the name of the task to invoke>

This workflow happens several times a day and it was quite annoying. The issue with a CLI flag to filter, which can be easily implemented by the build author, is when you want to assemble a custom split as a single invocation: Build debug x86 and release x64. I can't say this happened a lot but it was a major step up compared to other build tools. You can go grab a coffee while this is happening. You can also trust Gradle to do the right thing.


Error with extension f90

Hey! I get the following error when I open a '.f90' file:
Error detected while processing function <SNR>36_SetLineLenghtAccordingToFileExtension..<SNR>36_SetLineLengthForFortranExtended:
line    4:
E492: Not an editor command:     Decho "extended"

Is this a plugin issue? I don't understand.

Hi physkets,
Thanks for the report.
Yes, this is about the plugin itself.
I will commit a fix for this problem.

I have updated the code in 395b7d3.
It should fix the problem, can you please check it?

Ran a :PluginUpdate. Opening a fortran90 file gives the same error.
Could it be due to another plugin? When I tried typing beyond a line length of 132, Vim automatically takes me to the next line. It does not let me type ahead. Is this normal behaviour?
The other plugins I have are:
Plugin 'VundleVim/Vundle.vim'
Plugin 'tpope/vim-sensible'
Plugin 'altercation/vim-colors-solarized'
Plugin 'w0ng/vim-hybrid'
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
Plugin 'scrooloose/syntastic'
Plugin 'valloric/listtoggle'

Could it be that you have not restarted Vim after running a :PluginUpdate ?
Because, if you have the latest version of fortran_line_length, the line with Decho does not exist anymore and there is nothing that could trigger that error.


mysql broken pipe [ write: broken pipe ]

Gogs version (or commit ref): Gogs version <IP_ADDRESS>7
Git version: git version 2.7.4
Operating system: ubuntu 16.04
Database (use [x]):

[ ] PostgreSQL
[x] MySQL
[ ] MSSQL
[ ] SQLite

Can you reproduce the bug at https://try.gogs.io:

[ ] Yes (provide example URL)
[x] No
[ ] Not relevant

Log gist (usually found in log/gogs.log):
[mysql] 2017/10/06 07:24:38 packets.go:33: unexpected EOF
[mysql] 2017/10/06 07:24:38 packets.go:124: write tcp <IP_ADDRESS>:58574-><IP_ADDRESS>:3306: write: broken pipe
[mysql] 2017/10/06 07:24:38 packets.go:33: unexpected EOF
[mysql] 2017/10/06 07:24:38 packets.go:124: write tcp <IP_ADDRESS>:50110-><IP_ADDRESS>:3306: write: broken pipe

Description
...

Does this error affects anything?


Bug: $setBlocksType doesn't work on text node

Using $setBlocksType while the selection contains a text node within a paragraph does not convert the paragraph into the desired type.
Lexical version: 0.9.0
Steps To Reproduce

Add a "text-match" transformer to MarkdownShortcutsPlugin that converts the text node's parent into a different type
Initiate the text transformer

Link to code example: https://codesandbox.io/s/lexical-plain-text-example-forked-m5tzve?file=/src/Editor.js
The current behavior
The text node's parent should be converted into the desired type.
The expected behavior
The text node's parent is not converted.

Hmmm - this seems more specific than the title implies. Like, setBlocksType seems to be working fine on the playground. In your sandbox, it seems like the selection is somehow on the ParagraphNode when you get it in that replacer (which causes the heuristic in setBlocksType to fail). Maybe something in the markdown transformer API? Will look more closely

Pretty sure this is the issue:
https://github.com/facebook/lexical/blob/556033e636521a7aeae08bef14bca2e1d3a623d8/packages/lexical-markdown/src/MarkdownShortcuts.ts#L113
If you look at the impl of selectNext, it selects the parent when there's no sibling, which is making setBlocksType do weird things because it's not getting the selection it expects.

Same error I am also getting
editor.jsx:28 TypeError: $setBlocksType_experimental is not a function
at editor.jsx:58:13
I am using  "@lexical/selection": "^0.13.1",

Same error I am also getting
editor.jsx:28 TypeError: $setBlocksType_experimental is not a function at editor.jsx:58:13
I am using "@lexical/selection": "^0.13.1",

Hi! i used $setBlockType method instead. And it works!


Clean up all files after job complete

This is important when using EFS
As discussed in today's meeting.

#65


Add std.internal.mmm and reap benefits in @safe-ty and OOM checking

This patch adds a new internal module std.internal.mmm with the following functions:
// Unsafe as T has pointers
T* checkedMalloc(T)() @system if (hasIndirections!T);

// Ditto
T[] checkedMallocArray(T)(size_t n) @system if (hasIndirections!T);

// Known to be safe because T has no pointers
T* checkedMalloc(T)() @trusted if (!hasIndirections!T);

// Ditto
T[] checkedMallocArray(T)(size_t n) @trusted if (!hasIndirections!T);

// Attributes depend on emplaceRef
T* checkedMalloc(T, Args...)(auto ref Args args);

// Attributes depend on the range primitives of `Range` as well as
// the construction and destruction of `ElementType!Range`
T[] checkedMallocArray(T, Range)(Range range)
if (isInputRange!Range && hasLength!Range && is(ElementType!Range : T));

// Ditto; same as above but with inferred element type
ElementType!Range[] checkedMallocArray(Range)(Range range)
if (isInputRange!Range && hasLength!Range);

// Always safe as calloc zero-initializes memory
T* checkedCalloc(T)() @trusted;

// Ditto
T[] checkedCallocArray(T)(size_t n) @trusted;

// Destroy all elements in the given array
void[] destroyArray(T)(ref T[] array);

Additionally, inferred purity can be supported if malloc and calloc are marked pure in core.stdc.stdlib in the spirit of memory allocation being practically pure.
Included are a few commits demonstrating how to reap benefits from this module. They can be moved to a different PR if desirable - the point is that they demonstrate the module's usefulness (hopefully).
It might be best to review this PR commit-wise.
edit:
These functions also handle OOM correctly; in Phobos, there are more examples of incorrect handling of OOM, like trying to dynamically allocate an exception, either directly or through enforce, rather than use onOutOfMemoryError.

I'm aware of the test failures and I'll fix them as soon as I can.

Test success depends on #3032.

How does test coverage look?
dmd std/internal/mmm -unittest -main -cov

How does test coverage look?

I used DMD's coverage analysis when writing the tests. IIRC all paths are tested except the OOM paths. I'll confirm when all the dependencies are figured out.

This passes now, finally. Review would be appreciated.
I want to patch unique and RefCounted to use this, but I don't know if I should put the commits in this PR or a new one that depends on this...

Looks great

Would be awesome to address minor comments and move this in

I have no skin in this game, but is there a better name we can use instead of mmm? That just doesn't seem right :)

Updated:

tabs -> spaces
Added destroyArray utility function and changed schwartzSort to use it
Added some more tests
Added documentation (but the module is still internal)

Passes the autotester again now.

Maybe we should make destroy array deallocate the array itself, keeping in mind the use cases in schwartzSort.

Maybe we should make destroy array deallocate the array itself, keeping in mind the use cases in schwartzSort.

Destruction and deallocation need to be separate so that the caller can manually vet the memory safety of the deallocation with @trusted, while leaving the memory safety of destruction to attribute inference.

I think this needs to be redone as a layer working with std.experimental.allocator. Then the functionality in these functions is immediate to achieve by using Mallocator.

If I'm not mistaken, the two interesting/useful functions in this are essentially the same as make and makeArray from std.alloactor, except hardcoded to use malloc. So we should definitely make this work with std.allocator instead.

I see that make returns null on failure. In the example use cases from this PR, there is nothing that can be done except throw OutOfMemoryError, and you'd think this is fairly common in both libraries and applications when used with something like malloc. So maybe this use case should be reflected in std.allocator.package; a kind of makeOrFail wrapper function. It's orthogonal to memory safety but I mention it since it was part of this PR.


Swift4 compile error

In Swift4，there have to be with @objc before function definition

我已经改好了！谢谢 Thank you
发自我的 iPhone

在 2018年2月2日，09:48，bubugao<EMAIL_ADDRESS>写道：
在报错的方法前加@objc
CAPSPageMen@objc uOption 改为 CAPSPageMenuOption
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or mute the thread.

is this issue fixed?? Not working with Swift 4..

@PrakashMaharjan not fixed yet

Have the same issue. Developer needs to update to Swift4 compatible.

切换之后指示器没有变化

+1


typo: Double word "not"

@nschonni : Thanks for your contribution! The author, @conceptdev, has been notified to review your proposed change.

#sign-off


slow loading of videos from youtube

DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

[X] I understand that I will be blocked if I intentionally remove or skip any mandatory* field

Checklist

[X] I'm asking a question and not reporting a bug or requesting a feature
[X] I've looked through the README
[X] I've verified that I'm running yt-dlp version 2023.06.21 (update instructions) or later (specify commit)
[X] I've searched known issues and the bugtracker for similar questions including closed ones. DO NOT post duplicates
[X] I've read the guidelines for opening an issue

Please make sure the question is worded well enough to be understood
it worked without errors. Slow video loading started today. Does not even exceed 1 mbit/sec. How to fix it?
Provide verbose output that clearly demonstrates the problem

[ ] Run your yt-dlp command with -vU flag added (yt-dlp -vU <your command line>)
[ ] If using API, add 'verbose': True to YoutubeDL params instead
[ ] Copy the WHOLE output (starting with [debug] Command-line config) and insert it below

Complete Verbose Output
No response

please add a verbose output!

Also, after testing it again to make sure it hasn't just randomly resolved itself, try running --update-to nightly@latest and see if it fixes it

Version 2023.06.22: I have the same issue. Downloading with yt-dlp itself is very fast
yt-dlp https://www.youtube.com/watch\?v\=yKDWtJt5qyw -x -f 140

but external downloader is throttled
yt-dlp https://www.youtube.com/watch\?v\=yKDWtJt5qyw -f 140 -J | jq .url

Version 2023.03.04 exposed .fragments with .urls that had &range= in them, it was great for external downloaders.
Is the lack of .fragments a bug or a feature of 2023.06.22?
Thanks

but external downloader is throttled

Youtube http formats need to be downloaded with an http chunk size of 10M, or else yt will throttle. yt-dlp's native http downloader does this; you'll need to configure your external downloader to do the same (if possible).

Version 2023.03.04 exposed .fragments with .urls that had &range= in them, it was great for external downloaders.
Is the lack of .fragments a bug or a feature of 2023.06.22?

DASH-ifying http formats is no longer necessary to natively mitigate youtube speed throttling, so the default behavior was reverted. fragments will still be available with "dashy" formats, which you could select by passing something like this:
--extractor-arg "youtube:include_duplicate_formats" -f "ba[format_id*=140-dashy]"

are we back to Range headers? Or is &range= URL query still required to avoid throttling?

are we back to Range headers? Or is &range= URL query still required to avoid throttling?

No, the range query param is NOT required anymore, which is why the default behavior was reverted back to NOT splitting up http formats into dash fragments.

This can be fixed using --extractor-args youtube:include_duplicate_formats -S proto:dash, although imo include_duplicate_formats is overloaded currently, and there should be a separate extractor arg for dashy formats

Also, this isn't just an external issue, because it also prevents users getting the benefits of --concurrent-fragments

We donot and cannot guarantee the presence of any format for any site. So this is not a regression.

imo include_duplicate_formats is overloaded currently, and there should be a separate extractor arg for dashy formats

We can do that, but can you provide a use case that would be significantly simplified by that option as compared to by include_duplicate_formats?


[nnx] add pmap

What does this PR do?

Adds pmap and Pmap. static_broadcasted_argnums, donate_argnums, and global_arg_shapes are not yet supported.
Refactors vmap (taken from #3949).
Splits the transforms module into multiple files. TODO: currently transforms.transforms still contains many of the existing transforms that need to be moved to separate files.

Integrated in https://github.com/google/flax/commit/78d85af67e5ac6dd1dc40398a3d451ef9f7fcc76


Netflix Hystrix  is EOL

Netflix Hystrix is end of life. They recommend Resilience4J ( https://github.com/resilience4j/resilience4j ) as an alternative in their readme: https://github.com/Netflix/Hystrix/blob/master/README.md

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

ID: e4699b7a-fc21-817e-5a37-aa17b55f47a2
Version Independent ID: 23efcd5d-11a5-c46f-a73e-5cc638591bcd
Content: Bulkhead pattern - Cloud Design Patterns
Content Source: docs/patterns/bulkhead.md
Service: architecture-center
Sub-service: cloud-fundamentals
GitHub Login: @dragon119
Microsoft Alias: pnp

@siepkes, Thanks for the feedback! We are taking a look into this and will get back to you soon.

@siepkes Thanks for the feedback! We have assigned this issue to the content author for further review and to update the doc accordingly.

AB#160212 - Thanks for reporting - this issue is under review


Question: Share ViewModel with navigation arguments

Hi,
I want to share a ViewModel across 3 screens and the VM relies on navigation arguments (passed through the first screen).
When using the dependenciesContainerBuilder  to share across screens i do not have the ability to use navArgs out of the box.
Can I "inject" those arguments somehow?

Hi @chriswiesner
dependencyContainerBuilder lambda does have access to current nav args through a field named navArgs.
Unless I missunderstood your question.

oh thanks,
i'm still not quite sure how i would pass the navArgs to the savedStateHandle then.
dependenciesContainerBuilder = {
    ...
    dependency(hiltViewModel<MyViewModel>(sharedLifeCycleOwner)) {
        // call custom constructor setting navArgs in savedStateHandle?
        // or use hiltViewModel delegate and just ".apply" the args to the savedStateHandle?
    }
}

You shouldn't need to do that? 🤔
You can just call SavedStateHandle.argsFrom method and they should provide you with the arguments you want.
If this is not the case, please provide me a small repository that I can deep dive and find what I can do to help in this scenario! 🙏

i've uploaded a sample here: https://github.com/chriswiesner/SharedNavArgs
i think you are referring to manual creation of the VM - i was still in the assumption i could use hilt

problem is that the ViewModel is relying on navArgs which are propagated by a destination in the graph.
so i cannot provide the VM in the graph as dependency{} from the start.
i need to lazily instantiate the ViewModel once I navigate to the first destination that requires it.

Hi @chriswiesner
Sorry, it took me a while.
                    DestinationsNavHost(
                        navGraph = NavGraphs.root,
                        dependenciesContainerBuilder = {
                            dependency(hiltViewModel<SharedViewModel>(this@MainActivity))
                        }
                    )

This will tie your ViewModel to the Activity. The activity will is never going to have the navigation arguments so the ViewModel's SavedStateHandle won't either.
Assuming you want to share the instance of the ViewModel with yout two screens, and since you cannot tie it to your activity, the best option is to create a nested nav graph and tie your ViewModel to it.
I made the changes and got it working here:
https://github.com/raamcosta/SharedNavArgs/commit/c57d6f1f2fee83f79ff8bc6ecf1f313fb518b24a
NOTICE that for now (until v2 of this library) start destinations of NavGraphs cannot have mandatory arguments and this is why I had to make the "id" parameter null and then assert that it isn't null in the ViewModel.
Even though it's not ideal, with official compose navigation you would always have to assert it in similar way.
After v2, we will be able to define mandatory arguments for start destinations of nested graphs, so you will be able to remove the "?" nullable sign from NavArgs class.

Thank you for taking the time!
I'm looking forwarding to v2 🚀


Error running executable that include autoit

Nuitka version, full Python version, flavor, OS, etc. as output by this exact command.
1.7.5
Commercial: None
Python: 3.11.4 (tags/v3.11.4:d2340ef, Jun  7 2023, 05:45:37) [MSC v.1934 64 bit (AMD64)]
Flavor: CPython Official
Executable: C:\Users\USER\PycharmProjects\USER\venv\Scripts\python.exe
OS: Windows
Arch: x86_64
WindowsRelease: 10
Version C compiler: ~\AppData\Local\Nuitka\Nuitka\Cache\downloads\gcc\x86_64\11.3.0-14.0.3-10.0.0-msvcrt-r3\mingw64\bin\gcc.exe (gcc).

I have a python script that uses module "autoit"
When using --onefile and --standalone, i get this error:
"autoit.py", line 26, in  OSError: Cannot load AutoItX from path: C:\Users\USER\AppData\Local\Temp\ONEFIL~1\autoit\lib\AutoItX_x64.dll
When not using --onefile or --standalone, there is no error
commands used  - results the same :
nuitka --onefile --enable-plugin=tk-inter --enable-plugin=pyqt6 --disable-console aio_main.py
nuitka --standalone --enable-plugin=tk-inter --enable-plugin=pyqt6 --disable-console aio_main.py

Example code :
(windowName = Any window name that is open)
import autoit as au3
import sys
windowName = "5565-EMS NEW"
print(au3.win_get_handle(windowName))

Sorry for the screenshot - CMD window closes before i can copy

You can launch a CMD to execute the program, and you should be using stable Nuitka.
If you are available to do a PR, this can be fixed by adding to the yaml configuration, described here: https://nuitka.net/doc/nuitka-package-config.html
And here is more of a walk through style post: https://nuitka.net/posts/nuitka-package-config-kickoff.html
Here are a example PRs for other packages:
#2030
#1993

Thank you so much , i go study links :)

- module-name: 'autoit'   dlls:     - from_filenames:         relative_path: 'lib'         prefixes:           - 'AutoIt'         when: 'win32'
Added to yaml configuration , works perfectly now

Thanks a lot, confirming it works, will be on factory soon.
Thanks for your report, this is fixed on the factory branch, which is a development version under rapid development. You can try it out by going here: https://nuitka.net/doc/factory.html
Feedback if this is working is very welcome, just please do not share plans of doing it, but rather confirmations or denials of it working.

Tested factory , it is working as well :)
Thank you

Part of the 1.9 release I just made.


titleize() changes non-alphanumerics to spaces

inflect.titleize("sanford & sons") => "Sanford   Sons"

The offending line is https://github.com/pksunkara/inflect/blob/355009895db1bd8dcceaa687b53fe085fc873b88/lib/methods.js#L208 -- obviously one could simply add to the list of acceptable characters, but I'm not sure why the code is making this substitution in the first place.

@pksunkara would you be willing to bump the version number to include this?

Done.


Utilizing UtinyRipper core for modding project

I would like to utilize UtinyRipper Core portion of this project to automate the extraction of Meshes, Textures, Materials and some shaders, to setup a modding environment for a specific game.   This would prevent users from having to engage in a significantly more complicated setup process.
The problem is that the project doesn't have a license officially attached, and as I'm utilizing an MIT license I can't utilize an unlicensed project as it opens me up to risk I'm not willing to take on.
I've submitted a PR to add the MIT license as stated previously as the project is, can this PR be added to mkae the MIT licensing official?
To make clear why I am unwilling to use unlicensed code, please reference the following stack overflow.
https://softwareengineering.stackexchange.com/questions/276144/using-unlicensed-code

The problem is that uTinyRipper project uses some third party stuff that need to be properly licensed first. I don't know how to do it and right now I don't have time for research.

Understood.   I actually ended up not being able to utilize the resulting work I wanted to use this for, but i can see it being useful in the future.
I'll see if I can find some time, it looks like you have all the 3rd party libs in ThirdParty and some of them do include license files, but some of them do not.

It looks like there only needs to be work done with the System.Half library and the YAML code.
YAML is an Open Format, so the format itself is fine, though this specific code implementation I can't seem to trace down.
System.Half appears to come from here:
https://gist.github.com/vermorel/1d5c0212752b3e611faf84771ad4ff0d
Possibly from this older source:
https://sourceforge.net/projects/csharp-half/
Both these sources would indicate that System.Half can be used without restriction, as its in public domain, thus requiring no modification to this code base to properly support the license/code.
Everything else is MIT licensed and you've already included the license file for those projects.
So if you can recall where the YAML source code was sourced from we can get this fixed up and properly license the project.

YAML is my code, I wrote it for this project.
Right now license information is present only in source project. License info doesn't come with binaries. I don't know is it allowed (I doubt that). How to properly combine all those licenses, how to inform user about those licenses? Is it allowed to add a link in the GUI to avoid license.txt file?

For System.Half its in public domain, nothing needs to be done for that.
MIT Licensed works have the following requirement for the license.
"The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software."
This means that simply including the license file in the binary and source code distributions meets the requirements of the license.
So as long as the Release contains each of the license files, perhaps named to make clear what they are for, then you meet the requirements for MIT.
You're not required to explicitly inform the user, Attribution is not part of the MIT license.
As such, no GUI is required, but can be added if you want to do a little extra.
If the current binaries don't include those license files that's actually in violation, simply including the files will remedy that.  So basically add the license files as a content resource to the Core project and that will include the files in the build output.
I actually skipped over the 7Zip code you have in my last update.  The format, LZMA is in public domain, and the official SDK is also in the public domain, so if that is where your code for 7zip comes from, then you're all set with 7zip.
Here are some links concerning these various topics.
https://www.7-zip.org/sdk.html
https://softwareengineering.stackexchange.com/questions/218331/what-are-the-requirements-for-attribution-in-the-mit-license
https://en.wikipedia.org/wiki/MIT_License
Adding a License folder with these license files as Content and Copy to Output will easily fulfill the requirements for both source and Binary distributions.
The locations of the license files don't need to be changed in the source code, and probably shouldn't be for clarity.

Concerning your YAML code, since you've placed it in a ThirdParty folder, you probably should add a separate MIT license to that YAML folder for clarity, since it would be implied that the source is not part of this project or of the projects author(s)

Well, I spent some time to research this question in detail and I got almost all answers I need. Some modules in https://github.com/mafaca/UtinyRipper/tree/master/uTinyRipperGUI/ThirdParty are still unlicensed or incorrectly licensed so I'm going to fix it soon.

Is there concern about the licensing being wrong in these, I've now again come to the conclusion being able to use utiny core in my project would be a huge boon for the project, along with some code a group I work along side is developing to fix up exported shader's which we could possibly push to UtinyRipper's core.
I can investigate these libraries as well to see what needs to be done for them.

Is there any progress on this?

I included license file in this project


Some websites don't show the results

Hello, I am integrating Crawl4AI with Scrapy and for some websites I get different results, for example:
Link: https://www.wafdbank.com/customer-service/faq
Result: 62c877a5211801b8

Link: https://quotes.toscrape.com
Result: #  [Quotes to Scrape](/)

[Login](/login)

“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.” by Albert Einstein [(about)](/author/Albert-Einstein)

Tags: [change](/tag/change/page/1/) [deep-thoughts](/tag/deep-thoughts/page/1/) [thinking](/tag/thinking/page/1/) [world](/tag/world/page/1/)

etc. (...)

So, the result is different since in the second website I actually get the result. What I find weird is that this used to work for both websites..
The version I am using is 0.3.74.
My code below (still in progress):

from crawl4ai import AsyncWebCrawler
from scrapy.exceptions import CloseSpider
from scrapy.http import Request
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule

class WebCrawlerSpider(CrawlSpider):
    name = "webcrawler"
    rules = (
        Rule(LinkExtractor(), callback="parse_item", follow=True),
    )

    def __init__(self, urls=["https://www.wafdbank.com/customer-service/faq"], *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.start_urls = urls

    #Passing arguments and setting here the configs depth, max_links and urls
    @classmethod
    def from_crawler(cls, crawler, *args, **kwargs):
        spider = super().from_crawler(crawler, *args, **kwargs)
        spider.settings.set("DEPTH_LIMIT", 1, priority="spider",)
        return spider

    # To crawl the start_url and avoid duplication of the same
    def start_requests(self):
        for url in self.start_urls:
            yield Request(url)

    # For max link, we probably need a manual implementation for now, maybe override the extract_links method of LinkExtractor
    async def parse_start_url(self, response):
        await self.process_url(response.url)
        if self.should_stop_crawling():
            self.logger.info("DEPTH_LIMIT is 0. Stopping crawl.")
            raise CloseSpider(reason="DEPTH_LIMIT reached 0, stopping spider.")

    async def parse_item(self, response):
        await self.process_url(response.url)

    def write_results_to_file(self, url, markdown):
        file_path = "results_markdown.txt"
        with open(file_path, "a", encoding="utf-8") as file:
            file.write(f"Link: {url}\nResult: {markdown}\n")

    async def process_url(self, url):
        async with AsyncWebCrawler(verbose=False) as crawler:
            result = await crawler.arun(
                url=url,
            )
        self.write_results_to_file(url, result.markdown)

    def should_stop_crawling(self):
        depth_limit = self.settings.getint("DEPTH_LIMIT", default=-1)
        return depth_limit == 0

Can someone help here please? Thank you

After checking 338, I used bypass_cache = True, and the content is extracted again. Will try to bump to 0.4.2 when I get a final version of this (since using the cache is a win).

On another note, now I am getting a bug using AsyncWebCrawler and I don't understand why. Can someone help?
from crawl4ai import AsyncWebCrawler, CacheMode
from scrapy.exceptions import CloseSpider
from scrapy.http import Request
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from scrapy.crawler import CrawlerProcess

class WebCrawlerSpider(CrawlSpider):
    name = "webcrawler1"
    allowed_domains = ["quotes.toscrape.com"]
    rules = (
        Rule(LinkExtractor(), callback="parse_item", follow=True),
    )

    def __init__(self, urls=["https://quotes.toscrape.com"], *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.start_urls = urls

    #Passing arguments and setting here the config crawl_depth
    @classmethod
    def from_crawler(cls, crawler, *args, **kwargs):
        spider = super().from_crawler(crawler, *args, **kwargs)
        spider.settings.set("DEPTH_LIMIT", 0, priority="spider",)
        return spider

    async def parse_item(self, response):
        await self.process_url(response.url)

    # To crawl the start_url and avoid duplication of the same
    def start_requests(self):
        for url in self.start_urls:
            yield Request(url)

    # For max link, we probably need a manual implementation for now, maybe override the extract_links method of LinkExtractor
    async def parse_start_url(self, response):
        await self.process_url(response.url)
        #if self.should_stop_crawling():
        #    self.logger.info("DEPTH_LIMIT is 0. Stopping crawl.")
        #    raise CloseSpider(reason="DEPTH_LIMIT reached 0, stopping spider.")

    def write_results_to_file(self, url, markdown):
        file_path = "results_markdown.txt"
        with open(file_path, "a", encoding="utf-8") as file:
            file.write(f"Link: {url}\nResult: {markdown}\n")

    async def process_url(self, url):
       #crawler = AsyncWebCrawler(always_bypass_cache=True)
        #result = await crawler.arun(
        #    url=url,
        #)
        async with AsyncWebCrawler(verbose=True) as crawler:
            result = await crawler.arun(
                url="https://www.kidocode.com/degrees/technology",
                cach_mode = CacheMode.DISABLED
            )
        self.write_results_to_file(url, result.markdown)

import asyncio

from scrapy.crawler import CrawlerProcess

from scrapy_webcrawler.spiders.spider import WebCrawlerSpider

class WebCrawlerConnector:

    async def start(self) -> int:
        process = CrawlerProcess({
            'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)'
        })
        process.crawl(
            WebCrawlerSpider,
            urls=["https://quotes.toscrape.com"],
            crawl_depth=0,
            max_links_per_page=2,
        )
        process.start()
        return 1

async def main() -> None:
    """Start the connector."""
    connector = WebCrawlerConnector()
    await connector.start()

if __name__ == "__main__":
    asyncio.run(main())

And the stacktrace:
ERROR:scrapy.core.scraper:Spider error processing <GET https://quotes.toscrape.com/> (referer: None)
Traceback (most recent call last):
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/utils/defer.py", line 295, in aiter_errback
    yield await it.__anext__()
          ^^^^^^^^^^^^^^^^^^^^
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/utils/python.py", line 374, in __anext__
    return await self.data.__anext__()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/utils/python.py", line 355, in _async_chain
    async for o in as_async_generator(it):
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/utils/asyncgen.py", line 14, in as_async_generator
    async for r in it:
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/utils/python.py", line 374, in __anext__
    return await self.data.__anext__()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/utils/python.py", line 355, in _async_chain
    async for o in as_async_generator(it):
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/utils/asyncgen.py", line 14, in as_async_generator
    async for r in it:
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 118, in process_async
    async for r in iterable:
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/spidermiddlewares/referer.py", line 355, in process_spider_output_async
    async for r in result or ():
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 118, in process_async
    async for r in iterable:
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/spidermiddlewares/urllength.py", line 30, in process_spider_output_async
    async for r in result or ():
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 118, in process_async
    async for r in iterable:
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/spidermiddlewares/depth.py", line 35, in process_spider_output_async
    async for r in result or ():
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 118, in process_async
    async for r in iterable:
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/spiders/crawl.py", line 122, in _parse_response
    cb_res = await cb_res
             ^^^^^^^^^^^^
  File "/Users/joao.martins/Downloads/test/scrapy_webcrawler/scrapy_webcrawler/spiders/spider.py", line 37, in parse_start_url
    await self.process_url(response.url)
  File "/Users/joao.martins/Downloads/test/scrapy_webcrawler/scrapy_webcrawler/spiders/spider.py", line 52, in process_url
    async with AsyncWebCrawler(verbose=True) as crawler:
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/crawl4ai/async_webcrawler.py", line 111, in __aenter__
    await self.crawler_strategy.__aenter__()
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/crawl4ai/async_crawler_strategy.py", line 265, in __aenter__
    await self.start()
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/crawl4ai/async_crawler_strategy.py", line 273, in start
    self.playwright = await async_playwright().start()
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/playwright/async_api/_context_manager.py", line 51, in start
    return await self.__aenter__()
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/playwright/async_api/_context_manager.py", line 40, in __aenter__
    done, _ = await asyncio.wait(
              ^^^^^^^^^^^^^^^^^^^
  File "/Users/joao.martins/.pyenv/versions/3.11.2/lib/python3.11/asyncio/tasks.py", line 418, in wait
    return await _wait(fs, timeout, return_when, loop)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/joao.martins/.pyenv/versions/3.11.2/lib/python3.11/asyncio/tasks.py", line 525, in _wait
    await waiter
RuntimeError: await wasn't used with future
2024-12-13 16:43:12 [scrapy.core.scraper] ERROR: Spider error processing <GET https://quotes.toscrape.com/> (referer: None)
Traceback (most recent call last):
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/utils/defer.py", line 295, in aiter_errback
    yield await it.__anext__()
          ^^^^^^^^^^^^^^^^^^^^
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/utils/python.py", line 374, in __anext__
    return await self.data.__anext__()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/utils/python.py", line 355, in _async_chain
    async for o in as_async_generator(it):
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/utils/asyncgen.py", line 14, in as_async_generator
    async for r in it:
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/utils/python.py", line 374, in __anext__
    return await self.data.__anext__()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/utils/python.py", line 355, in _async_chain
    async for o in as_async_generator(it):
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/utils/asyncgen.py", line 14, in as_async_generator
    async for r in it:
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 118, in process_async
    async for r in iterable:
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/spidermiddlewares/referer.py", line 355, in process_spider_output_async
    async for r in result or ():
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 118, in process_async
    async for r in iterable:
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/spidermiddlewares/urllength.py", line 30, in process_spider_output_async
    async for r in result or ():
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 118, in process_async
    async for r in iterable:
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/spidermiddlewares/depth.py", line 35, in process_spider_output_async
    async for r in result or ():
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/core/spidermw.py", line 118, in process_async
    async for r in iterable:
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/scrapy/spiders/crawl.py", line 122, in _parse_response
    cb_res = await cb_res
             ^^^^^^^^^^^^
  File "/Users/joao.martins/Downloads/test/scrapy_webcrawler/scrapy_webcrawler/spiders/spider.py", line 37, in parse_start_url
    await self.process_url(response.url)
  File "/Users/joao.martins/Downloads/test/scrapy_webcrawler/scrapy_webcrawler/spiders/spider.py", line 52, in process_url
    async with AsyncWebCrawler(verbose=True) as crawler:
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/crawl4ai/async_webcrawler.py", line 111, in __aenter__
    await self.crawler_strategy.__aenter__()
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/crawl4ai/async_crawler_strategy.py", line 265, in __aenter__
    await self.start()
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/crawl4ai/async_crawler_strategy.py", line 273, in start
    self.playwright = await async_playwright().start()
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/playwright/async_api/_context_manager.py", line 51, in start
    return await self.__aenter__()
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/joao.martins/Downloads/test/.venv/lib/python3.11/site-packages/playwright/async_api/_context_manager.py", line 40, in __aenter__
    done, _ = await asyncio.wait(
              ^^^^^^^^^^^^^^^^^^^
  File "/Users/joao.martins/.pyenv/versions/3.11.2/lib/python3.11/asyncio/tasks.py", line 418, in wait
    return await _wait(fs, timeout, return_when, loop)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/joao.martins/.pyenv/versions/3.11.2/lib/python3.11/asyncio/tasks.py", line 525, in _wait
    await waiter
RuntimeError: await wasn't used with future

I am trying to run it in WebCrawlerConnector but when launching the Scrapy spiders, the crawl4AI code doesn't work basically. Thank you in advance

@luisferreira93 Please update to 0.4.21, this has been resolved in 0.4.21. Do you still need my help for your first query or that one already resolved?

I already found a solution, thank you @unclecode ⭐

Today I release 0.4.23, let me know if you face with any issue


Adding support for openjdk 13

Updated gradle version to 6.3 for openjdk 13 support
./build.sh -p android release was getting error FilamentPlugin.groovy' Unsupported class file major version 57 when java_home is set to openjdk 13

@googlebot I signed it!

I may have to revert this if it causes incompatibilities.


[CI] enable CI for reddcoin

Enable CI

First pass enabling CI,
Still a few fix-ups to do in code