Transducers in Redux

Reusing Store functionality is something Flux has traditionally been very bad at, due to Stores not being composable. For example, I do silly things in Flux React Router Example just to reuse the pagination code in different Stores.
The reason for this being hard in Flux is because each Store is an event emitter, and composing event emitters is hard. But in Redux, “Stores” (reducers, really!) are pure functions, and pure functions are easy to compose!
This gist shows how reducers can be easily composed. But it's still manual composition. It's expressive, but there is some boilerplate for repetitive tasks. For example, you might want to implement things like optimistic updates, undo/redo or pagination scoped to specific parts of your state, but then you can't do it just once on the top—you need to repeat this logic in every relevant reducer.
Higher order functions to the rescue! In fact, we already have a higher-order reducer: composeStores (to be renamed composeReducers). It takes your app's reducers and returns a reducer that composes their state into a single object.
We can express more patterns with higher order reducers? Absolutely! In fact this may be the beginning of reusing logic in Flux because these higher order reducers don't need to know about specific actions in your app.
Consider this:
function whitelistActions(reducer, actionPredicate) {
  return (state, action) => actionPredicate(action) ? reducer(state, action) : state;
}

It's an example higher order reducer. Its purpose is a performance optimization by “cutting off” some expensive reducers from some unrelated actions.
const reducer = composeReducers({
  entities: composeReducers(entitiesReducers),

  // performance optimization!
  editor: whitelistActions(
    composeReducers(editorReducers),
    action => action.type.startsWith('EDITOR_')
  )
});

This is just an example of what higher-order reducers can do. They're not tied to your particular app. You can pass particular action types as parameters to them so they know which precisely actions to handle.
You can user higher-order reducers to implement things like:

undo/redo
pagination
optimistic updates
performance optimization
throttling actions
etc

in a generic way, reusable across the Redux ecosystem.
And guess what? We didn't invent higher-order reducers! They are precisely the same thing as transducers in ClojureScript.
Anybody want to take a stab at writing some transducers for Redux?

Interesting!  I prototyped this when looking at reducing over a whole log, since it seemed like a cool kind of optimization and I was generally excited about transducers. :)
In stepping back a bit, it seemed like two other optimizations might be more important than allocations.  One was to keep snapshots of previous reductions would be more important (especially as the n for items in the log grows) and another was an optimizer that could memoizing hot calls to reducers.  The problems I saw were how to make this work when composing calls, I founded I wanted to graph of computation Clojure style and then sort of stopped and didn't work much further on it.  So I'm excited to see you're thinking about this and super curious to hear about ideas other people have.  :)
Another thought is that I think finding the right API for composition is even more important, and so grounding compute or memory optimizations in real numbers might help too.  I don't have a sense of quite how bad the naive solutions are, so that might help inform what optimizations can have the most impact.

Wow!

They are precisely the same thing as transducers in ClojureScript.

Well not precisely, there is actually a spec for transducers in JavaScript https://github.com/cognitect-labs/transducers-js#the-transducer-protocol it mentions three functions instead of one etc.
This spec has number of compatible implementations:

cognitect-labs/transducers-js
jlongster/transducers.js
underarm
ramda (R.map(fn) returns a valid transducer, etc.)

Maybe it would be cool if Redux support actual spec, then we could use existing transducers implementations.  ;)
I'll mess around with this idea a bit today. I think the easiest way to do this is to transparently wrap each function passed to composeReducers in a transducer which only implements the step method. And @rpominov isn't crazy at all, sticking with the spec outlined by Cognitect is definitely the way to go here - it gives us access to all of the above libraries for free (and the spec is honestly trivial to implement).

@rpominov following a spec is the whole purpose of transducers! That way our reducers can talk with actions and really any other communication system that follow the spec (collections, streams, channels, pipes, observables…).
Clojure's page about transducers has some insight. It also links this nice talk of Rich Hickey.

@hugobessaa I agree... Using ramda with redux will be so comfortable this way

While we're discussing - have we thought about using transducers for middleware? After all, middleware in Redux seems to be (correct me if I'm wrong) just a form of event stream processing. I think with enough thought these could really tie a lot of the functional concepts we already have together nicely. And with a default set of Redux-specific middleware transducers and a nice API for creating new ones, it would be very possible to do this while maintaining the "don't have to live in a cabin built out of functional programming books to understand this" philosophy of the library.
If you stretch the concept to its extreme, you could implement Flux as one gigantic transducer. Stores reduce over actions to accumulate their state, components reduce over store state to display the proper UI elements and actions reduce over input events on components to perform their duties. It's the circle of life, baby!
I'm not actually suggesting this (I've actually tried it - turns out transducers don't solve everything D:), but I think it's worth considering various uses for them while we're on the topic.

@funkenstein this is pretty much the way Cycle.js works (just with different naming and events/views decoupling). I think Redux should do as much as possible to be just a lib that connect stuff that aren't redux specific.

@hugobessaa Ah, I believe I misunderstood the goal. We don't want transducer support in Redux, we just want transducers written for Redux. And upon using them, they will just return standard reducer functions which are already compatible with Redux (easy enough, any transducer library worth its salt has a toFn function for transducer transformers).

I'm dumb in this area so I'd be happy to see whatever you folks come up with :dancer:

The most common transducer I think will be something like this, which simply combines multiple reducers in sequence https://github.com/acdlite/reduce-reducers. I'm not an expert on this topic either... I'm sure this operation already has an actual name in FP.

Okay I lied, that's not a transducer... A transducer is reducer => reducer' Still useful, though!

I made a library to create reducers from transducers:
https://github.com/acdlite/redux-transduce
It supports transducers that conform to the transducer protocol used by transducers.js and transducers-js. I did discover a caveat, though (quoting from the README):

Transducers typically operate on collections. It's possible to use transducers to transform asynchronous streams, but it requires the use of local state that persists over time. We can't do this, because Redux makes a hard assumption that the reducer is a pure function -- it must return the same result for a given state and action, every time.

For this reason, transduce() transforms actions one at a time. That means transducers like filter() and map() work fine, but take() and dedupe() do not.

I'm not sure if this limits its usefulness prohibitively. On the plus side, I finally understand transducers :D

Isn't it possible to store transducer (and generally, middleware) state in the global app state under some unique key?

I thought about that, but how would the key be generated? What if you call the same transducer multiple times? Eventually, you end up just writing your own reducer manually, which kinda defeats the purpose.

@acdlite Wow, cool! I was thinking about function with exact same signature earlier today :)
I would implement it a bit different, though:
applyTransducer function(transducer, reducer) {
  const xform = transducer({
    '@@transducer/step': reducer
  })
  return (state, action) => {
    const result = xform['@@transducer/step'](state, action)
    if (result && result['@@transducer/reduced']) {
      throw new Error('Early termination doesn\'t make sense in context of Redux (you should\'t use transducers like take(n))')
    }
    return result
  }
}

This way stateful transducers like dedupe() will work, and if a transducer with early termination used like  take() an exception will be thrown.

@acdlite Unique dispatch key could be used for that. One per an invocation of any (including async) action creator.

That doesn't look like it works with stateful transducers to me... Can you show me an example?

@rpominov Okay, I can see how that would work with dedupe, but then there's still the problem of the reducer no longer being pure.

@acdlite Right, but I think they don't intend to be pure anyway, although it might a problem with their usage in Redux, I agree. Seems like transducers don't fit very well here.
Btw, I recommend everybody to watch (if not already) this talk by Rich Hickey about transducer
http://www.youtube.com/watch?v=6mTbuzafcII

Right, but I think they don't intend to be pure anyway,

Sorry, I meant transducers don't intend to be pure, while reducers in Redux certainly are.

Custom implementations that would have their state stored externally would still be possible instead of stateful transducers. A key would be generated per each usage of such transducers. So, instead of dedupe(), there would be something like dedupe(state)().

A key would be generated per each usage of such transducers

How is that pure?

Why not? UID generation is a pure operation. Did I misunderstand you?

A key would be generated per each usage of such transducers

But where the state of dedupe will be stored? I also don't understand.

dedupe would be a function that returns a transducer which stores its state in the global app state under a unique key generated per a call to the dedupe function. Each invocation of this transducer should store a new state instance under the same key.

Those keys can be stored under another unique key, one per an action creator invocation. This should work, but looks really complicated.

On the other hand, it's difficult for me to imagine a use case where such pseudo-stateful operations were necessary for a reducer.

If we want to make each action invocation to be pure, @acdlite already did that in https://github.com/acdlite/redux-transduce by simply initialising transducer on each action. What we can't do is to allow transducers to store state between actions invocations (if we want reducers to be pure).

@rpominov If there are good use cases for this, it can be done. Transducers needn't store local state, they can return it instead and it can be made to land in the global app state.

So it turns out that transducers work really well if you use them outside the reducer — to dispatch actions! This can be done by wrapping the store (using a higher-order store) so that it conforms to the transducer protocol. Then you can use into(to, xform, from) to dispatch a collection of actions.

https://github.com/acdlite/redux-transducers#example-mapping-strings-to-actions

I think the approach @acdlite posted above is a great method for combining transducers with reflux. As it was pointed out above, an important aspect of the design of redux is that its reducers are pure functions, and some transducers are stateful transformations. The idea that you could use only stateless transducers is problematic because transducers are composable, and it may be difficult to know whether a composed transducer contains any stateful operations. However, by transforming the input to a reducer, you can keep the reducer pure, enable stateful transformations, and preserve the ability to combine and reuse those transformations by applying them to the input of other reducers.

Perhaps alternatively a library such as baconjs.  There is a library called react-bacon that sorta prototyped the idea that I played around with once before.  There is also a react rxjs library too that may be woth looking at.
These libraries already provide ways to compose event streams and and implement some common stateful transforms such as debounce and flatmapLatest.

Closing, as the issue has been dormant for a while.
redux-transducers is mentioned in the Ecosystem page of the new docs.
Please feel free to keep the discussion going.

Sorry to necro this thread, but I just came across it.  Very interesting example of using transducers with Redux @acdlite.  Thanks for that.
Regarding this though:

Why not? UID generation is a pure operation. Did I misunderstand you?

A UUID generation function is the least pure function you can possibly have.  It's guaranteed to return a different value every time you call it! :smile:
It's even worse than a random number generator, because that will sometimes return a previously returned value.

@mindjuice You're right, thanks! That's a glitch in my thought process that happened due to inertia after thinking about commands vs. queries (CQS) in context of another problem. UUID has query signature (it doesn't return a value), which somehow led me to stating that it is pure. But actually it isn't pure nor does it satisfy CQS, as it is not referentially transparent.


provider failed with terraform 1.5.3

Describe the bug
Managing a project via terraform 1.4.6 works fine.
same code with terraform 1.5.3 produce the following error:
C:\terraform_1.5.3\Modules>..\terraform apply
module.Artifactory.artifactory_user.build-user: Refreshing state... [id=mydemo-build-system]
module.Artifactory.artifactory_user.admin-user: Refreshing state... [id=e175409]

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # module.Artifactory.project.terraform-project will be created
  + resource "project" "terraform-project" {
      + block_deployments_on_limit = true
      + description                = "mydemo project admin: Terraform Project"
      + display_name               = "mydemo Project"
      + email_notification         = true
      + id                         = (known after apply)
      + key                        = "mydemo"
      + max_storage_in_gibibytes   = 10

      + admin_privileges {
          + index_resources  = true
          + manage_members   = true
          + manage_resources = true
        }

      + member {
          + name  = "e175409"
          + roles = [
              + "Project Admin",
            ]
        }
      + member {
          + name  = "mydemo-build-system"
          + roles = [
              + "Contributor",
            ]
        }
    }

Plan: 1 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

module.Artifactory.project.terraform-project: Creating...
╷
│ Error:
│ 400 POST https://artifactory-dev.amat.com/access/api/v1/projects
│ {
│   "errors" : [ {
│     "code" : "BAD_REQUEST",
│     "message" : "Project Quota cannot be lower than `1073741824` bytes. Input: -2147483648"
│   } ]
│ }
│
│   with module.Artifactory.project.terraform-project,
│   on ..\Artifactory_Project\main.tf line 51, in resource "project" "terraform-project":
│   51: resource "project" "terraform-project" {

Requirements for and issue

[ ] A fully functioning terraform snippet that can be copy&pasted (no outside files or ENV vars unless that's part of the issue)
[ ] Your version of artifactory (you can curl it at $host/artifactory/api/system/version  7.59.9
[ ] Your version of terraform 1.5.3

Expected behavior
should work as terraform 1.4.6.
changes to max_storage_in_gibibytes produce the same error again
Additional context
Add any other context about the problem here.

@samuev Using terraform 1.5.6, I was able to create the follow project with no error:
alexh@alexh-mac terraform-provider-project % terraform apply

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # project.myproject will be created
  + resource "project" "myproject" {
      + block_deployments_on_limit = false
      + description                = "My Project"
      + display_name               = "My Project"
      + email_notification         = true
      + id                         = (known after apply)
      + key                        = "myproj"
      + max_storage_in_gibibytes   = 10

      + admin_privileges {
          + index_resources  = true
          + manage_members   = true
          + manage_resources = true
        }
    }

Plan: 1 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

project.myproject: Creating...
project.myproject: Creation complete after 0s [id=myproj]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

alexh@alexh-mac terraform-provider-project % terraform -v
Terraform v1.5.2
on darwin_amd64
+ provider registry.terraform.io/jfrog/project v1.1.17

Your version of Terraform is out of date! The latest version
is 1.5.6. You can update by downloading from https://www.terraform.io/downloads.html

@samuev I upgraded terraform to latest 1.5.6 and still no error when creating new project.

@chb0github You are on the money. The thought of incorrect integer type crossed my mind briefly but I didn't follow up when I couldn't reproduce. Switching type to uint64 is definitely the safest course of action.

Yeah, you're going to have to replace strconv.Atoi to strconv.PrseUint too
https://stackoverflow.com/questions/21532113/golang-converting-string-to-int64


Remote Switch Bricklet added

Thank for this, at a quick glance it looks good, but can you revert the changes to the formatting in the README.md and back out the change to bricklets/IndAnalogOut.html as that will break things.

Also can you explain why you've added 2 nodes instead of making the difference a config option?

The Readme in this Format works in Gitlab AND Github. I use a Github instance for me locally. Do you have an issue with this formatting ?
I have seen that IndAnalogOut breaks all. Do you have an idea to fix that ? In my latest Version ive reverted the case.

Ive added 2 Nodes (will be 3) becouse the Remote Switch Bricklet allows 3 Types of Adressing. They are different Types of remote Switches so i find it an good solution to have also 3 different Types of Nodes.
I also have not added Tinkerforge to the Node names. I think its cleaner to have it only in the Group name its mostly so when i look at the other Nodes. Can i change this for the other Nodes too ?

In next Step i will add support for Ambient Light Bricklet 1.0 to your Ambient Light Bricklet 2.0 Node (I dont see an reason to use 2 Nodes ?!)
And the for Moisture Bricklet

The #'s in the README.md map to h1, h2 type headings which make the README much easier to read. They also render properly on npmjs.org and flows.nodered.org which are the most important places that file will be read
Please put the Tinkerforge back in to the names for now, so they match the existing nodes. We can discuss removing it for all of them later.
Having different nodes for different modes of the same bricklet is different from the existing nodes. Please combine these into one node and make the config options change based on a drop down list of  mode, you can do this by adding code to the oneditprepare function.
One ambient light node is fine but you will have to be carefull to pull both types when checking the connected bricklets and you will have to store the bricklet version in the node config so it can pick the right API.
For the Industrial Analog Out. The identifier has to match in all 3 places in the HTML file and where the node is regiested in the js file, you have only changed one so that will never work.
Also please pull in the latest changes from last week. I've added some code to the part of the editprepare function that makes sure the sensor UID is properly set when you have more than one of each type of bricklet connected to a stack.
In future, please put a detailed description of what you are changing in the opening comment for a pull request then the person receiving it doesn't have to wade through all the code just to see what it's supposed to do, before even thinking about coding style and correctness.

Ive pulled Yesterday. So your Change should be there, isnt it ?

yes, but you need to copy the changes into your new nodes

I have made the changes you wanted

I'm not going to have time to look at this properly before the weekend

should be complete now

Thanks I'll have another look

It looks good.
I've made a few little clean changes, could you pull from my repo and just give them a test before I push them as a npm. Thanks

The Remote switch bricklet dont works in your version, i dont see why at time. Ill take a look.

No i havend found it in 30mins and i leave it for me on my stand. JS is not my 1st choice Language so ive dont found it fast.


Blog Post: SC Elections

Adding blog post and image for steering committee election

PTAL @parispittman @castrojo

/lgtm

/lgtm


render.yaml: Prevent auto deploys

How does this affect people who are already using this render.yaml and have auto-deploys enabled? Does it disable auto-deploys for them?

How does this affect people who are already using this render.yaml and have auto-deploys enabled? Does it disable auto-deploys for them?


bokeh 2.3 ignores plot_width

CI has started failing after bokeh was upgraded from 2.2 to 2.3:
______________________________ test_profiler_plot ______________________________
[gw1] linux -- Python 3.8.8 /usr/share/miniconda3/envs/test-environment/bin/python

    @pytest.mark.skipif("not bokeh")
    @ignore_abc_warning
    def test_profiler_plot():
        with prof:
            get(dsk, "e")
        p = prof.visualize(
            plot_width=500,
            plot_height=300,
            tools="hover",
            title="Not the default",
            show=False,
            save=False,
        )
>       assert p.plot_width == 500
E       AssertionError: assert 800 == 500
E        +  where 800 = Figure(id='1002', ...).plot_width

dask/diagnostics/tests/test_profiler.py:241: AssertionError
_________________________ test_resource_profiler_plot __________________________
[gw1] linux -- Python 3.8.8 /usr/share/miniconda3/envs/test-environment/bin/python

    @pytest.mark.skipif("not bokeh")
    @pytest.mark.skipif("not psutil")
    @ignore_abc_warning
    def test_resource_profiler_plot():
        with ResourceProfiler(dt=0.01) as rprof:
            get(dsk2, "c")
        p = rprof.visualize(
            plot_width=500,
            plot_height=300,
            tools="hover",
            title="Not the default",
            show=False,
            save=False,
        )
>       assert p.plot_width == 500
E       AssertionError: assert 800 == 500
E        +  where 800 = Figure(id='1038', ...).plot_width

dask/diagnostics/tests/test_profiler.py:268: AssertionError
___________________________ test_cache_profiler_plot ___________________________
[gw1] linux -- Python 3.8.8 /usr/share/miniconda3/envs/test-environment/bin/python

    @pytest.mark.skipif("not bokeh")
    @ignore_abc_warning
    def test_cache_profiler_plot():
        with CacheProfiler(metric_name="non-standard") as cprof:
            get(dsk, "e")
        p = cprof.visualize(
            plot_width=500,
            plot_height=300,
            tools="hover",
            title="Not the default",
            show=False,
            save=False,
        )
>       assert p.plot_width == 500
E       AssertionError: assert 800 == 500
E        +  where 800 = Figure(id='1095', ...).plot_width

dask/diagnostics/tests/test_profiler.py:303: AssertionError

Thanks for reporting @crusaderky. Cross-referencing https://github.com/dask/distributed/issues/4534 as it's likely related. Also cc @quasiben visibility

@jrbourbeau This seems to work at least as far back as 1.0.4
from bokeh.plotting import figure, show

p = figure(width=200)

#also works
#p.width = 200

p.circle([1,2,3], [4,5,6])

show(p)

Is that far enough?  width and height are also part of properties() as well

Going back to 1.0.0 is perfect as that's our minimum supported bokeh version
https://github.com/dask/dask/blob/ff63ae7e5f5c8ae724d1347cf19732ebe6675d52/setup.py#L26
Also, FWIW I opened up https://github.com/bokeh/bokeh/pull/10979 to add dask/dask tests to bokeh's downstream CI build


No visible @interface ... declares selector "handleOpenURL"

I have no idea why, but using Xcode 6.2 this compiled fine; now it doesn't in Xcode 6.3:
#import "TMAPIClient.h"
// ...
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    [[TMAPIClient sharedInstance] handleOpenURL:url];
}

I tried a clean, deleting derived data, and I even tried with <TMTumblrSDK/TMAPIClient.h> but no dice?
Via CocoaPods, I'm Using TMTumblrSDK (2.1.1)

Try #import <TMTumblrSDK/TMAPIClient.h>

Yeah ^ I did try that too, no luck.

Oh, I just realized it's inside the conditional
#ifdef __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__

Ah, just read https://github.com/tumblr/TMTumblrSDK/commit/c4fb542710d4d7d931e390c3755784ee4f151cf3. I'll try the fork - I implemented my own UIWebView, so hopefully it ties in with the fork nicely.


Enable email enumeration protection

Recently received an email from Firebase that recommends enabling email enumeration protection on our projects. The email also mentioned that if we currently utilize fetchSignInMethodsForEmail, our projects will be affected.
We are using FirebaseUI Auth in our iOS project (providing sign-in with Apple, Google, Facebook, email/link).  I didn't find anything in your documentation in this regard. What should we do and how we are affected?
We used to have email/password. What would happen to old users trying to login with email/link?

Until this issue is resolved, disable Email enumeration protection (recommended) in Firebase Authentication Settings.

Any update here?


0.93  - frame rate slow in Battelfield V

Hi,
using wine 3.19, Mesa 18.3 and dxvk 0.93 and noticed a dramatic slow down of frame rates in Battlefield V, 1 and 4. Downgrade to 0.92 and anything is running well again. So i think it has to do with something changed in the build of the 0.93 Version.
Btw: Thank you for this master piece of software ... you, the wine/Staging Team are geniuses :-)
Again... thank you
lle

You need to bisect the issue before anything can be done about it

Try deleting the state-cache file on the game path

Log files? Hardware configuration? ANYTHING?
Anyway, if this is a regression, please bisect it.

I couldn't test Battlefield V but OP said the issue was still there with Battlefield 1, thought I'd fill out a whole report.
I noticed that when I switched from 0.92 to 0.93, there were large spikes in frametime causing lots of lag spikes. The issue was gone when I switched back to 0.92.
Software information
Battlefield 1 ultra preset @ 1080p 144Hz no vsync
System information

GPU: Geforce GTX 980 Ti
Driver: 415.18
Wine version: 3.21-tkg esync disabled
DXVK version: 0.93

Apitrace file(s)

apitrace
Game rendered really slowly at runtime and took a long time for anything to happen, I can get a longer one if you need.

Log files

d3d11.log: here

dxgi.log: here

@JibbityJobbity Isn't that just shader compilation? There is absolutely no reason for 0.93 to introduce frame time issues. Apparently BF1 doesn't like 5d49644cdc071866c5556997a35bd946d7724457 though, so reporting your hardware as an actual Nvidia card via dxvk.conf might help.
As for BF5, I heard from another person that BF5 runs pretty much the same on both 0.92 and 0.93.

I don't think it's shaders for me, I ran through the same scene a few times and switched dxvk versions but it still happened. That being said, yeah, it got fixed when I set it to my actual card ID. Maybe add a default config?

What's the exe name for BF1?

bf1.exe

Interesting... So we might end up with a list of "spoof nVidia cards BACK to nVidia" compiled in then? :)

If games insist on running slow code on AMD then yes. I'd prefer if this wasn't necessary, but the D3D11 ecosystem is a mess, and games are an even bigger mess.

And tbh i am not a huge fan of the "compiled in defaults" at all, but would rather see either a "game overrides" section in the dxvk.conf file, although i know a local "in the same folder as .exe" works as it is now.
Something in the line of:
# Override settings for BattleField 1
{ bf1.exe,
    dxgi.customDeviceId = xxxx,
    dxgi.customVendorId = xxxx,
    dxgi.whateveroption.ppl.find.suitable = yes }

# Override settings for ThatAwesomeGame
{ awesome.exe,
    dxgi.maxFrameLatency = 2 }

And you could publish this in a "gamesettings.dxvk.conf" file in the sourcetree, where its updated with whatever new settings and whatnot, instead of ppl needing to look at the wiki for new available settings (and best of all, not having to recompile to get that game working)
Just an idea.. Dont be mad :)

Hi,
sorry, i missed my hw configuration.
System specs:
hw: ryzen 7 2700, 16 gb, nvidia 1060 6 gb
os: suse leap 15
sw: mesa 18.3, nvidia 415.18, wine staging 3.21, dxvk 0.93
I tried to set the card ID and vendor ID in dxvk.conf main config file. No other parameter set. Set the Card ID fix the problem not for my setup. Frames get stuck and frame rates drop from 70 to 19.
In my wine config i disable nvapi.dll and nvapi64.dll because BF have problems and recognizes a wrong nvidia driver version. Without disable nvapi i can't run BF (3,4,1 and V).
Maybe i missed something but i changed only the dxvk version from 0.92 to 0.93. After downgrade to 0.92 it works like a dream.

@SveSop not an option. The defaults are necessary because they require no user interaction at all, and that is especially important for Proton.
@lle211967 as mentioned, there is at least one other user who doesn't run into problems with 0.93 in BF5. If you think it's a DXVK regression, then please bisect it.

@doitsujin Not sure i understand the reason it is especially important for proton, cos they could just aswell have a dxvk.conf file included in the dist. (Just like the /.steam/steam/steamapps/common/Proton 3.16/user_settings.py script already is)
Then again, one can just aswell use config file overrides as it is now, just thought it COULD be less of a fiddly art for you to add patches to the source every time someone finds a setting that works :)

But they don't, and they shouldn't have to, and having multiple different locations for config files is also less than ideal.

They dont cos its "not an option". There is no "multiple different locations" for the user_settings.py script now tho, cos its tied to the proton version you are currently using (is my understanding of it), and thus ALSO to the dxvk version included in that proton folder.
The current "existing workflow" to my knowledge for the END-USER is that Steam update Proton "if-needed", and its still at wine-3.16 w/dxvk 0.90.. so they probably already have missed a few inclusions and reverts to the dxvk source...
Well.. No point in debating. Ill stop now, and let the thread get back to topic :) Sorry.

Hi,
okay... i found some diffs in the log files that could give some more information of the problem.
btw: The problems are not only in BF V it is the same on BF 1 and BF 4. All Versions are running well without the mentioned problems with the 0.93 Release of dxvk. Here 0.92 :-)
In the diff. log entries there are a interesting lines: NvAPI workaround enabled, reporting AMD GPU
At my hw setup i use a ryzen amd cpu. Maybe here is the problem. Maybe the other user without any BF V problems use a intel cpu?
In addition there are also different numbers of state cache entries. But i don't know if this is normal.
I'm sure this is a complex Environment but changing only the dxvk version from 0.92 to 0.93 and nothing else let me doubt that anythin else can be the problem than the change to the version 0.93.
Here are the diff results of the dxgi_log files of versions 0.92 and 0.93:
diff bfv_dxgi.log /data/daten/temp/lle/0.93/bfv_dxgi.log
2c2
< info:  DXVK: v0.92

info:  DXVK: v0.93
47a48
info:  DXGI: NvAPI workaround enabled, reporting AMD GPU
49c50
< info:  DXVK: v0.92

info:  DXVK: v0.93
94a96,98
info:  DXGI: NvAPI workaround enabled, reporting AMD GPU
info:  DXGI: NvAPI workaround enabled, reporting AMD GPU
info:  DXGI: NvAPI workaround enabled, reporting AMD GPU
107c111
< info:  DXVK: Read 5178 valid state cache entries

info:  DXVK: Read 5060 valid state cache entries

I tried to set the card ID and vendor ID in dxvk.conf main config file.

Apparently you screwed that up, because you shouldn't be seeing info: DXGI: NvAPI workaround enabled, reporting AMD GPU. Please make sure that your config file is correct, and maybe set the environment variable DXVK_CONFIG_FILE=/path/to/dxvk.conf.
Also, please fix the formatting of your comment, I'm not blind.

@lle211967 If you dont set any options, the default compiled version is to "fake" all nVidia cards to AMD cards.
You must set THIS in the config file:
dxgi.customDeviceId = 10de
dxgi.customVendorId = 1c06

If you put that file in the same folder that your .exe file is (inside the wineprefix) called dxvk.conf it should be read... or you can specify this with eg:
export DXVK_CONFIG_FILE=/home/youruser/theplaceyoulike
(obviously changing THAT folder to the REAL folder)

@SveSop Thank you. I setup this two parameters but it don't help.
I tried a another game Titanfall 2 and this game has no problems at all with the 0.93 Version. No stuck and frame drops. Also here are the AMD Workaround messages in the dxgi log?!
I test BF V, BF 1 and both has the same problems. After this i make a test with BF 4 and i can't believe it, BF 4 runs well without any problems. Like Titanfall 2.
I have no ideas anymore :-( I think we close this post. Seems i was the only one who has problems with version 0.93 and BF V and BF 1. I will have to use version 0.92 for this games.
Thank all for the support and help!
lle


missing folders files of testsuite in tarball in release of -1.4

running with
$ python testapp/runtests.py
appears to work well enough.
Running the ./runtests.sh yields
PASS: normal settings
PASS: normal settings (--help)
PASS: django_nose.run_tests format
PASS: django_nose.run_tests format (--help)
PASS: via run_tests API
PASS: via run_tests API (--help)
PASS: with plugins
PASS: with plugins (--help)
FAIL: unittests
E
======================================================================
ERROR: Failure: ImportError (No module named 'unittests')
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib64/python3.4/site-packages/nose/failure.py", line 39, in runTest
    raise self.exc_val.with_traceback(self.tb)
  File "/usr/lib64/python3.4/site-packages/nose/loader.py", line 409, in loadTestsFromName
    module = resolve_name(addr.module)
  File "/usr/lib64/python3.4/site-packages/nose/util.py", line 312, in resolve_name
    module = __import__('.'.join(parts_copy))
nose.proxy.ImportError: No module named 'unittests'
-------------------- >> begin captured logging << --------------------
django.db.backends.schema: DEBUG: CREATE TABLE "django_migrations" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "app" varchar(255) NOT NULL, "name" varchar(255) NOT NULL, "applied" datetime NOT NULL); (params [])
--------------------- >> end captured logging << ---------------------

----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (errors=1)

The folder unittests in the repo simply didn't make it to the tarball. I don't know whether this is by accident or intent, but the running by ./runtests.sh isn't equipped to pass.

This is fixed in master, 112f48f, and will be included in the 1.4.2 release.

thanks


Document the need for model objects to be immutable

New issue checklist

[x] I have reviewed the README and documentation
[x] I have searched existing issues and this is not a duplicate

General information

IGListKit version: master
iOS version(s): not applicable
CocoaPods/Carthage version: not applicable
Xcode version: 8.3
Devices/Simulators affected: not applicable
Reproducible in the demo project? (Yes/No): not applicable
Related issues: #407 #460  #461

This caught me out a bit, but IGListKit currently requires that an object's pointer personality changes for any type of reload action to occur.
Even if diffIdentifier changes and the isEqual value returns false if the object's pointer is the same the diff algorithm ignores it.
I understand why this is difficult to achieve but I feel like it's sort of a hidden implementation detail and there is little documentation stating that object pointer's must change for reloads to occur.

Gah I totally missed the Diff and Equality document. Sorry

No worries! Thanks @robertjpayne ! 👍


ci: add prow bot to manage issues and PRs

Resolves: https://github.com/envoyproxy/gateway/issues/732

Codecov Report

Merging #1093 (e4bc889) into main (08da29e) will decrease coverage by 0.10%.
The diff coverage is n/a.

:mega: This organization is not using Codecov’s GitHub App Integration. We recommend you install it so Codecov can continue to function properly for your repositories. Learn more
@@            Coverage Diff             @@
##             main    #1093      +/-   ##
==========================================
- Coverage   62.71%   62.61%   -0.10%
==========================================
  Files          72       72
  Lines        9440     9440
==========================================
- Hits         5920     5911       -9
- Misses       3117     3124       +7
- Partials      403      405       +2

Impacted Files
Coverage Δ

internal/provider/kubernetes/controller.go
50.00% <0.00%> (-1.25%)
:arrow_down:

internal/provider/kubernetes/helpers.go
85.13% <0.00%> (+1.35%)
:arrow_up:

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

where does the bot host?

https://github.com/Xunzhuo/kube-prow-bot/pull/5
FYI.

PLUGINS defined in env of workflows, it is the inclusion relationship between permissions.

As for https://envoyproxy.slack.com/archives/C03E6NHLESV/p1678388104708569, I think the /lgtm and /approve can solve it. We do not need to change the conditions to 2 reviews, we just need a /lgtm from reviewer and /approve from maintainers, and then we can merge the PR.
Take this as an example: https://github.com/mosn/layotto/pull/898. a /lgtm and an /approve and without /hold, can automatically merge a PR.
@youngnick may be familiar with this, this kind of workflows are widely used in k8s community.

cc @mattklein123 @phlax

After: https://github.com/envoyproxy/gateway/pull/1156

/hold
I do not have strong opinions to push to use this bot written by me. Compared with prow itself, this bot can just do some simple issues/PRs managements. Prow can support more commands and do e2e tests, and it is widely used in k8s communities, which makes it more stable and powerful.
So I think before everything goes on, I think we should decide if we can just use prow directly. If so, we need a cluster to deploy prow and may need some helps from CNCF service desks.

IMHO, this is too complex to maintain, can we use prow bot from kubernetest/test-infra?

I will close this first, reopen it if we still need it.


[WIP] List all commits for integration

Working now on List all commits for integration models.

Looking good so far!

I wonder what status is in:
"XCSCommitCommitChangeFilePaths": [{
					"status": 4,
					"filePath": "XcodeServerSDK.podspec"
				}],

Changed, added or deleted? Maybe?

And moved?

Yeah, you're right...
So far I got this:

Dunno
Added
Dunno
Dunno
Changed/Modified

Do you think that this is documented somewhere? MongoDB doesn't hold types but from reverse engineering you can see that this will be be based on bit modifications.

:+1:

And btw I checked everywhere and I can't find where all the file change statuses are defined.

I guess it must be hardcoded somewhere so we won't get access to this... 😢

I don't think it's intentional, tbh. Anyway, put it in an enum with Int raw value.

So far, I got this
public enum FileStatus: Int {
    case Added = 1
    case Deleted = 2
    case Modified = 4
    case Moved = 8192
}

I guess it isn't possible to call something like:
FileStatus(rawValue: 8)

So we should make it Optional?

Came with this. What do you think @czechboy0?
public enum FileStatus: Int {
    case Added = 1
    case Deleted = 2
    case Modified = 4
    case Moved = 8192
    case Other

    public init?(rawValue: Int) {
        switch rawValue {
        case 1:
            self = .Added
        case 2:
            self = .Deleted
        case 4:
            self = .Modified
        case 8192:
            self = .Moved
        default:
            self = .Other
        }
    }
}

Don't enums already have failable initializers generated by default?

So in the Commit you'd do let fileStatus = FileStatus(rawValue: parsed) ?? .Other

Yes, they have but I was hoping I can somehow assign other value to .Other but I guess it's impossible...

Yeah I'm afraid enums don't have a default value, which is basically what you're looking for. Radar?

It's a bit controversial... Should enums  have default values? But on the other hand, they already store rawValues so where's the problem to assign .Other value?

Well, they have a failable initializer. It'd be nice to have the enum, instead of potentially returning nil, when the rawValue doesn't match a case, return one of the predefined cases (the default case). Something like Hash default values in Ruby, which you can tell to return a specific value when you're trying to pull a value for an unknown key.
This would be nice because you could have the enum have a non-failable initailizer, because it'd always return one of the cases.

Exactly but that's probably why failable initializers are default ones in enums...

@czechboy0 we have an answer straight from  about our little enum thing:
public enum FileStatus: RawRepresentable {
  case Added, Deleted, Modified, Moved, Other(Int)

  init(rawValue: Int) {
    switch rawValue {
    case 1: self = Added
    case 2: self = Deleted
    case 4: self = Modified
    case 8192: self = Moved
    default: self = Other(Int)
  }

  var rawValue: Int {
    switch self {
    case Added: return 1
    case Deleted: return 2
    case Modified: return 4
    case Moved: return 8192
    case Other(let x): return x
    }
  }
}

Hmm interesting, but is all this code worth it? I still don't hate let fileStatus = FileStatus(rawValue: parsed) ?? .Other as much I'd hate to have this much code to achieve the same thing :(

The thing I keep in mind when thinking about this is we only know 4 values for status. I want to keep somehow value of statuses which aren't known yet... ← This is my personal opinion.
On the other hand - this will be an official API call so there should be a documentation for this soon (they've promised beta 3 or 4 but still not here...). If we get ths documentation we can easily add missing cases and live happily after all 😉
I hate making decisions... So, it's up to you 😜

Yeah I get your point. But IMHO, if we do see .Other state somewhere, we can always debug and take a look at the actual value. Since we don't need the value anywhere else (at the moment), I would only see this as a small help during debugging. Which, as you said, hopefully should not be required if Apple gives us official docs on this.
I'd go with the simpler solution for now.

Fair enough! 👍

Result of Integration 1
Duration: 23 seconds
Result: -1error, failing state: build-failed

Result of Integration 1
Duration: 28 seconds
Result: 4errors, failing state: build-errors

Can you please merge czechboy0/swift-2 into this branch? I made changes for Xcode7b4 compatibility.

Done with merging...

results contain array... In our case it'll be of type [IntegrationCommits]. Do you think thath it's possible there'll be more than one element in this results array? If yes then I think name of this class should be changed... If no, we should return only one object of type IntegrationCommits.

This is my implementation of init - just code, without any proof... We'll have to record a cassete and write request method for this. I still think that the name commits in this JSON is confusing, so I just flatMapped this shit... 💩

Result of Integration 1
Duration: 21 seconds
Result: -1 error, failing state: build-failed

Result of Integration 2
Duration: 51 seconds
Result: Perfect build! All 36 tests passed. :+1:
Test Coverage: 48%.

Result of Integration 2
Duration: 1 minute and 4 seconds
Result: Perfect build! All 36 tests passed. :+1:
Test Coverage: 48%.

Do you really think it'd be logical to have a Dictionary instead of Array as commits property? Imagine yourself using this...

"I just want to see how many commits have this integration"
"WTF, why it's a Dictionary of freaking Strings instead of [Commit]!?"

That's why I'm using here flatMap, so when I access commits object in JSON and get Dictionary of  type [String: [Commit]] from it I'm taking allValues, so the array of arrays and flatten it so we'll have one dimensional array. Why I'm flatMapping? As we've discussed - we may have more RepositoryBlueprintIDs (which we don't know how to prove, yet).

I think a repository with git submodules will have multiple repository ids.
But yes, I think we should map the returned objects as closely as possible. The user can always do the flat map themselves, but right now we're taking away information about which repo generated those commits.
The purpose of this project is to map the JSON api into Swift objects. Plus we have a couple of utility functions. But we shouldn't be dictating what information the user doesn't need to see, if we have it. That's up to them to decide. So yes, I think the type should be preserved from the JSON, [String: [Commit]].

From my POV, Apple screwed naming... Why commits? 😑

Yeah maybe. commits as in this is where you get commits. But they are keyed by repo. What else would you name it?

Now we can't do anything... But when they post docs for this endpoints and we'll be assured that those are submodules, we can name it submodules...

Got any pattern on how to work with conversion from NSDictionary → Dictionary?
Also, please review in free time this pull request as it's some kind of blocker for me 😓

I merged you PR in BuildaUtils, in the Podfile change the BuildaUtils version to 0.0.6.
Just do an optional cast from NSDictionary to your type of Dictionary. It will check the objects inside to make sure it contains the right objects. Is that what you mean?

Result of Integration 3
Duration: 44 seconds
Result: Perfect build! All 37 tests passed. :+1:
Test Coverage: 49%.

Lately I changed my opinion and now I think we should really minimize the places where we force unwrap optionals.

Now, change your opinion and let's drop all those NSDictionaries 😍

I will try it later... Now it's pizza Friday!!! 🍕

How do you mean? Where do you think we shouldn't be using NSDictionarys?

Call me hipster or whatever but I really hate mixing Swift with Objective-C... For me, this project is totally platform independant (we don't use any of UI stuff specific to OS) that's why I see a possibility to do it Swifty.
I know that parsing JSON without NSDictionary will be a PITA but. hey, it's Open Source, we have tame, we have possibilities and we're willing to learn new stuff, right?
Because of these easy casting to NSDictionary or NSArray we're fighting with Swift's static typing and (I think so) losing some security.

It's still your project and I'm only, a contributor so... I'll do it by following your leads but I only wanted to share my honest opinion 😉

In principle I agree, but JSON is a special case IMHO. Even if we have a native JSON object in Swift, it will still be dynamic when it comes to its contents, because it can contain any sorts of stuff. So we won't get any added security because the types are not known at compile time.
I agree it would be nice to get rid of all NS classes, but in practice I'm not sure I understand what you're proposing :)

You probably won't exactly understand what I mean as this is only me talking, so don't bother 😉
I hate that we have this Objective-C technical debt in every code we write right now... 😭

Yeah I feel you, but it could be much worse, trust me. Plus, most of Apple's energy and time seems to be poured into Swift now. There is hope :wink:

Just a couple of comments I added - awesome stuff as usual, @cojoj! Thanks for all your work here :+1:

Let me know when this is ready, @cojoj! :wink:

Probably tomorrow as I don't know if I'll have time today to do some coding... 😕

Result of Integration 4
Duration: 53 seconds
Result: Perfect build! All 56 tests passed. :+1:
Test Coverage: 54%.

Result of Integration 5
Duration: 48 seconds
Result: Perfect build! All 56 tests passed. :+1:
Test Coverage: 54%.

Casting fixed (looks neat). I'll now spend a while with writing some test cases and after that I think we'll be ready with this.

Result of Integration 6
Duration: 57 seconds
Result: Perfect build! All 56 tests passed. :+1:
Test Coverage: 54%.

It works!

Ready to review 👌

looking good!

I've commented some code as I'm not fully happy with it... Please take a look in some spare time. Maybe together we can work out something better 👌

Result of Integration 7
Duration: 53 seconds
Result: Perfect build! All 56 tests passed. :+1:
Test Coverage: 54%.

You can use the new BuildaUtils spec 0.0.7

Looks like everything's fine now 😉 Take a look!

Result of Integration 8
Duration: 54 seconds
Result: Perfect build! All 56 tests passed. :+1:
Test Coverage: 54%.

Result of Integration 9
Duration: 50 seconds
Result: Perfect build! All 56 tests passed. :+1:
Test Coverage: 54%.

Awesome! Thanks @cojoj, great stuff.

Our code coverage is sneaking up, great job everyone! :+1:


WIP: Create consensus-encoding crate

Just a quick demo of what creating the bitcoin-consensus-encoding crate will involve.
I'm hitting orphin rule violations that I can't debug right at this minute, compiler is complaining about a base58::Vec type, no clue what that is.

consensus stuff seem like it is better just being in primitives (see #2776).


more current limits

I believe most cars that can take 3-phase can also charge with a lower current than 8A (tested with a Kia so far). And since not everyone have a Equalizer installed I think it is sometimes useful to be able to reduce the charge current down to 6A and also have a 12A option.
So I added 6.0A and 12.0A to list of selectable Current Limits.

Hi @runevad,
Yes, you're right. However, there is some major rewrite ongoing, so I think I'll leave it until that is released. In the next versions you'll be able to fully configure everything (see #19 if your interested).

Ok, no worries, I will try the new and revised version 😄.


Passing component to grandchildren's nested named slot will resolve in the default slot.

Version
2.5.2
Reproduction link
https://jsfiddle.net/daxchen/k75y6tu0/
Steps to reproduce
My use case is that I have a default layout with Toolbar and main content wrapper. But some pages needs a SearchBar and some don't, and layouts may have different levels.
So I created a component called LayoutDefault as a base for other layouts to use. And because I want to be able to replace the default Toolbar when needed, I put the default Toolbar in <slot name="toolbar">, with Toolbar as fallback content.
Code snippet:
// LayoutDefault.vue
<slot name="toolbar">
  <Toolbar title="title from layout-inner">
    <slot name="toolbarSlot"></slot>
  </Toolbar>
</slot>

I make these kind of components because I want to be able to:

Replace the default Toolbar if need.
Using the default Toolbar, but pass things to its slot ("toolbarSlot" in above example)

And then in other layout components, I do this:
// LayoutLv1.vue
<div class="layout">
  <LayoutDefault>
    <slot name="toolbar" slot="toolbar"></slot>
    <slot name="toolbarSlot" slot="toolbarSlot"></slot>
    <slot>default content from Layout</slot>
  </LayoutDefault>
</div>

As you can see, to pass components to grandchild's slots, I used this pattern: <slot name="foo" slot="foo">.
For some reason, components passed using this pattern will be passed to the default slot if there's one.
See examples 2, 3, and 4 in the reproduction.
What is expected?
I expect when no nothing is passed to a named slot, the fallback content will be rendered, with it's slots too.
What is actually happening?
In example 2, the replaced Toolbar is rendered in LayoutDefault's default slot.
In example 3 and 4, SearchBar is passed to slot="toolbarSlot", but not rendered.

Is this the expected behavior?
Or if there's a way for me to make these kind of reusable layouts with each default parts replaceable, and if using the default parts, be able to pass components into their (default parts) slots?

WOW that's amazing!
Cloned, built, and tested, it works!!
Evan you're the best~~~
Thank you so much!!!

btw this is already out in 2.5.3 :)

@faragos here's how I accomplished passing slots to a grandchild that uses slot-scope.
https://jsfiddle.net/alexm/5hx43mb2/


fix Int16 issue

Codecov Report

Merging #1 (e89a4e8) into master (54da125) will decrease coverage by 3.27%.
The diff coverage is 91.89%.

@@             Coverage Diff             @@
##            master       #1      +/-   ##
===========================================
- Coverage   100.00%   96.72%   -3.28%
===========================================
  Files            3        3
  Lines          264      305      +41
===========================================
+ Hits           264      295      +31
- Misses           0       10      +10

Impacted Files
Coverage Δ

pybv/tests/test_bv_writer.py
94.61% <89.39%> (-5.39%)
:arrow_down:

pybv/io.py
98.25% <95.45%> (-1.75%)
:arrow_down:

pybv/__init__.py
100.00% <100.00%> (ø)

Continue to review full report at Codecov.

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


Add support for configuration file (-c --config)

Users want to be able to specify all of their SSG options in a JSON formatted configuration file instead of having to pass them all as command line arguments every time. For example, consider the following config file, ./ssg-config.json:
{
"input": "./site",
"output": "./build",
"stylesheet"<EMAIL_ADDRESS>"lang": "fr"
}

Duplicate issue


The testcafe statusbar is not visible when the browser viewport is larger than the browser size

The testcafe statusbar (root-hammerhead-shadow-ui) which is normally displayed on the bottom of the browser, is not visible when the viewport of the browser is larger than the actual window size of that browser.
If I start the chrome or chromium browser with a window-size of 1920x1080 and a viewport of 2560x1440 the statusbar is presumably displayed at the bottom of the viewport (so outside the window).
This behaviour prevents me from using the debug mode of testcafe for these tests.
I would like to see the statusbar fixed to the bottom of the window and not the viewport. Or perhaps a configurable option where one could have the option to display the statusbar on for instance the top of the browserwindow.
Your Environment details:

testcafe version:                  1.4.3
node.js version:                    10.15.3
browser name and version: Chromium 74.0.3723.0
platform and version:           Linux Ubuntu 18.04

@stefanschenk
Hello,
I checked a simple scenario and it works correctly on my side.
My environment details: TestCafe v1.6.0, Ubuntu, Chromium.
Result:

Please provide us with a simple project or a public URL. It will help us examine the issue.

Sorry for the late comment. I don't have a public facing url to share for this issue. But maybe I can shed some light on the issue.
I don't have a problem using firefox or chrome, because I use the built-in default browser provider from testcafe.
With my testruns I use a forked version of the puppeteer browser provider.
Using puppeteer you can instruct chromium to start with a window size and a viewport size (for instance window size = 19201080, viewport size = 800600)
Our application had to be tested on a resolution of 25601440. But as I was testing on a full hd monitor I set the window size to 19201080, but the viewport size to 2560*1440. (and I used forced device scaling to fit the larger viewport in the full hd window)
For the loaded webpage the available size is the latter and therefore the testcafe statusbar is also displayed at the bottom of the viewport and therefore invisible in the browser window.
So I'm guessing this issue can be closed.


Feature/ui

WIP: Right now just have both the app interface in go and the slide backend communicating. @ayazhafiz Can we possibly discuss what we want to do for arguments right now. I would like it to just be like Wolfram and we apply a bunch of predetermined rules at first. Thoughts?

I would like it to just be like Wolfram and we apply a bunch of predetermined rules at first.

I think this is a good idea. We can make it more complicated later on; right now it can just run ./slide <program>

BTW we should think about versioning too. How will people run different versions of slide/what versions do we want to allow? I am thinking all releases (currently just 0.0.1) and the master branch.

Eventually, I think our UI will be very thorough. Like possible have a set of default rules you can check and uncheck as well as writing your custom rules. However, I think the average person probably doesn't care what version of slide they are using in the UI, thats much more of a developer problem which I think is why we have the slide-bot/tests and can add it there.

Also, we probably should just switch from golang to like a react/angular frontend for scalability. Thoughts?

should just switch from golang to like a react/angular frontend

Go is that backend; that can stay. On the frontend that sounds good, but maybe we should use something like Vue so we can have just a single HTML page.

I see, so currently the view is generated by the server. You can also make a static webpage that will communicate to the server without having to refresh. Lmk if you want to video chat about how to do this, maybe for a live stream on your YT ;)

Yeah, thats exactly what I mean. I am just unsure how do I run the slide application from a go server? maybe we can chat about this bc I understand setting up the api.

I think I will just use commands following something like this tutorial now that I explore more.Thanks.
https://blog.kowalczyk.info/article/wOYk/advanced-command-execution-in-go-with-osexec.html

I recommend keeping the go server, and getting rid of the rust one.

Frontend pref @ayazhafiz @timothycobrien react or angular are my choices. This probably will be something we all work on so lmk if you have a pref.

I prefer Vue > React > Angular for this project because I would rather keep everything in a single HTML file. However I am not opposed to a larger frontend app with many sources, it is just more maintenance.

I haven't used vue before, but that is fine. The intro docs look readable so I'm gonna use that. Hoping to have a small little setup that we can expand on.

dope, im very excited for this feature. thanks for doing this

@lukebhan any updates on this?


Cannot run tests on local machine using @wdio/selenium-standalone-service because of ERR_REQUIRE_ESM

What are you trying to achieve?
I would like to run tests locally using @wdio/selenium-standalone-service
What do you get instead?
Could not load plugin wdio from module './plugin/wdio':

Provide console output if related. Use --verbose mode for more details.

Could not load plugin wdio from module './plugin/wdio':
Couldn't initialise "@wdio/selenium-standalone-service".
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module<EMAIL_ADDRESS>require() of ES modules is not supported.
require() of<EMAIL_ADDRESS>from /Users//Desktop/Repositories/PoCs/codecept_poc/node_modules/codeceptjs/lib/plugin/wdio.js is an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which defines all .js files in that package scope as ES modules.
Instead rename index.js to end in .cjs, change the requiring code to use import(), or remove "type": "module" from<EMAIL_ADDRESS>
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1015:13)
    at Module.load (internal/modules/cjs/loader.js:863:32)
    at Function.Module._load (internal/modules/cjs/loader.js:708:14)
    at Module.require (internal/modules/cjs/loader.js:887:19)
    at require (internal/modules/cjs/helpers.js:74:18)
    at safeRequire (/Users//Desktop/Repositories/PoCs/codecept_poc/node_modules/codeceptjs/lib/plugin/wdio.js:246:12)
    at module.exports (/Users//Desktop/Repositories/PoCs/codecept_poc/node_modules/codeceptjs/lib/plugin/wdio.js:104:21)
    at createPlugins (/Users//Desktop/Repositories/PoCs/codecept_poc/node_modules/codeceptjs/lib/container.js:291:44)
    at Function.create (/Users//Desktop/Repositories/PoCs/codecept_poc/node_modules/codeceptjs/lib/container.js:47:25)
    at Codecept.init (/Users//Desktop/Repositories/PoCs/codecept_poc/node_modules/codeceptjs/lib/codecept.js:56:15)
Error: Couldn't initialise "@wdio/selenium-standalone-service".
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module<EMAIL_ADDRESS>require() of ES modules is not supported.
require() of<EMAIL_ADDRESS>from /Users//Desktop/Repositories/PoCs/codecept_poc/node_modules/codeceptjs/lib/plugin/wdio.js is an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which defines all .js files in that package scope as ES modules.
Instead rename index.js to end in .cjs, change the requiring code to use import(), or remove "type": "module" from<EMAIL_ADDRESS>

Provide test source code if related

Feature('login');

Scenario('test something', async ({ I }) => {
    await I.amOnPage('/')
});

Details

CodeceptJS version: 3.3.7
NodeJS Version: Had 12.22.6, then installed and set it to use 18.13.0
Operating System: macOS Monterey MacBook Pro (16-inch, 2019)
puppeteer || webdriverio || testcafe version (if related): webdriverio
Configuration file:

import { setHeadlessWhen, setCommonPlugins } from '@codeceptjs/configure';
// turn on headless mode when running with HEADLESS=true environment variable
// export HEADLESS=true && npx codeceptjs run
setHeadlessWhen(process.env.HEADLESS);

// enable all common plugins https://github.com/codeceptjs/configure#setcommonplugins
setCommonPlugins();

export const config: CodeceptJS.MainConfig = {
  tests: './*_test.ts',
  output: './output',
  helpers: {
    WebDriver: {
      url: 'http://www.google.com',
      browser: 'chrome'
    }
  },
  include: {
    I: './steps_file'
  },
  name: 'codecept-js-huong',
  fullPromiseBased: true,
  plugins: {
        pauseOnFail: {},
        retryFailedStep: {
            enabled: true
        },
        tryTo: {
            enabled: true
        },
        screenshotOnFail: {
            enabled: true
        },
        wdio: {
            enabled: true,
            services: ['selenium-standalone']
        }
    }
}

ESM version: https://www.youtube.com/watch?v=sLW4YEl5IIA
wdio/selenium-standalone-service uses ESM: https://openbase.com/js/@wdio/selenium-standalone-service (version 8)
Solution:
Use
"@wdio/selenium-standalone-service": "^7.30.0",
"webdriverio": "^7.30.0"

I'm re-opening this because the above solution is actually just a workaround. I want to be able to use the latest wdio/selenium-standalone-service with webdriverio helper. I already tried to create a CodeceptJS project with TypeScript and set "type":"module" in package.json but I'm still getting this error (when I did something similar for webdriverio project without Codecept it was able to run)
Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /Users//Desktop/Repositories/PoCs/codecept-ts-huong/codecept.conf.ts
require() of ES modules is not supported.
require() of /Users//Desktop/Repositories/PoCs/codecept-ts-huong/codecept.conf.ts from /Users//Desktop/Repositories/PoCs/codecept-ts-huong/node_modules/codeceptjs/lib/config.js is an ES module file as it is a .ts file whose nearest parent package.json contains "type": "module" which defines all .ts files in that package scope as ES modules.
Instead change the requiring code to use import(), or remove "type": "module" from /Users//Desktop/Repositories/PoCs/codecept-ts-huong/package.json.

    at createErrRequireEsm (/Users//Desktop/Repositories/PoCs/codecept-ts-huong/node_modules/ts-node/dist-raw/node-internal-errors.js:46:15)
    at assertScriptCanLoadAsCJSImpl (/Users//Desktop/Repositories/PoCs/codecept-ts-huong/node_modules/ts-node/dist-raw/node-internal-modules-cjs-loader.js:584:11)
    at Object.require.extensions.<computed> [as .ts] (/Users//Desktop/Repositories/PoCs/codecept-ts-huong/node_modules/ts-node/src/index.ts:1610:5)
    at Module.load (node:internal/modules/cjs/loader:1081:32)
    at Function.Module._load (node:internal/modules/cjs/loader:922:12)
    at Module.require (node:internal/modules/cjs/loader:1105:19)
    at require (node:internal/modules/cjs/helpers:103:18)
    at loadConfigFile (/Users//Desktop/Repositories/PoCs/codecept-ts-huong/node_modules/codeceptjs/lib/config.js:156:26)
    at Function.load (/Users//Desktop/Repositories/PoCs/codecept-ts-huong/node_modules/codeceptjs/lib/config.js:95:16)
    at module.exports.getConfig (/Users//Desktop/Repositories/PoCs/codecept-ts-huong/node_modules/codeceptjs/lib/command/utils.js:15:33)

I also took a look at these resources, and others, but am not understanding the problem, maybe because I am new to Javascript
https://stackoverflow.com/questions/69081410/error-err-require-esm-require-of-es-module-not-supported
https://stackoverflow.com/questions/61401475/why-is-type-module-in-package-json-file
https://codecept.discourse.group/t/selenium-standalone-service-plugin-can-not-working/236/2

ESM version: https://www.youtube.com/watch?v=sLW4YEl5IIA wdio/selenium-standalone-service uses ESM: https://openbase.com/js/@wdio/selenium-standalone-service (version 8)
Solution: Use "@wdio/selenium-standalone-service": "^7.30.0", "webdriverio": "^7.30.0"

"@wdio/selenium-standalone-service": "^7.30.0",
"webdriverio": "^8.3.5"

this combination also works

Could this be reviewed? As of it's latest release @wdio/selenium-standalone-service is no longer being maintained. This is because WebdriverIO has moved to eliminate driver services as of WebdriverIO 8.14.
Instructions for setting up Webdriver  should probably be updated to no longer use @wdio/selenium-standalone-service


Release: laddr v2.4.0

README updates
Add project roles/applications feature (thanks @kevin-dexter !)
Remove person details summary from blog post byline
Add slack and saml2 integrations as standard
Add UI for managing event segments

TODO

[ ] Test roles/applications feature and review syntax

The dates and times in the event editor now show ❤
Segments are wonderful. Segment locations appropriately show / don't show on the main agenda list based on whether or not they were set. 👍
What's the roles / applications feature?

@AndrewNatoli all tables get created automatically when they are first written to. If you see any SELECT queries causing errors because any table does not exist that's a bug in the query code not handling a table not existing as an empty result.
The roles/applications feature would let projects post "We need a UX designer" and then someone apply to be assigned that role. It's intended to replace the system where people just add themselves to projects, so that projects can declare their needs and moderate adding people. It needs some testing/polish before release that isn't tough but I just haven't gotten to

@themightychris I'll reset my local instance and try again but the projects page wasn't "failing" gracefully for me on this branch as it originally did in my install for Open Charlotte. Will update you soon hopefully


arangodb tool used to create cluster, doesn't yield control to shell

my environment running ArangoDB
I'm using the latest ArangoDB of the respective release series:

[ ] 2.8
[ ] 3.0
[ ] 3.1
[*] 3.2
[ ] self-compiled devel branch

Mode:

[*] Cluster
[ ] Single-Server

Storage-Engine:

[ ] mmfiles
[ ] rocksdb

On this operating system:

[ ] DCOS on

[*] AWS
[ ] Azure
[*] own infrastructure

[ ] Linux

[ ] Debian .deb
[*] Ubuntu .deb
[ ] SUSE   .rpm
[ ] RedHat .rpm
[ ] Fedora .rpm
[ ] Gentoo
[ ] docker - official docker library
[ ] other:

[ ] Windows, version:
[ ] MacOS, version:

this is an AQL-related issue:
[*] I'm using graph features
this is an installation-related issue:
Describe which steps you carried out, what you expected to happen and what actually happened.
Objective is to create a arangod cluster using the tool arangodb:
Using Arangodb version : 3.2.6
Scenario 1:
1- In the master node :  run command  ' arangodb start '
2- In the slave nodes : run command ' arangodb start --starter.join <master_ip> '
3- Observe that the control is not yield back to the shell
Trace:
what actually happened:
arangodb start --starter.join <IP_ADDRESS>
2017/12/05 05:13:11 Starting arangodb version 0.10.2, build 7f0affe in the background
2017/12/05 05:13:11 Waiting for starter API to be available...
Scenario 2:
1- In the master node :  run command  ' arangodb start '
2- In the slave nodes : run command ' arangodb start --starter.join <master_ip> & '
3- Observe that the control is not yield back to the shell, until you press Enter key for keyboard input.
Trace:
what actually happened:
arangodb start --starter.join <IP_ADDRESS> &
[1] 1864
root@centralmsvm:~# 2017/12/05 05:15:49 Starting arangodb version 0.10.2, build 7f0affe in the background
2017/12/05 05:15:49 Waiting for starter API to be available...
what you expected to happen:
The control should be yield back to the shell

Hi,
the starter isn't meant to be used with DC/OS, its probably not what you did in first place, right?

In general you want to say that https://github.com/arangodb-helper/arangodb#starting--stopping-in-detached-mode doesn't work for you?

Using the below cloud image:
3.13.0-116-generic
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.5 LTS
Release:        14.04
Codename:       trusty

The arangodb starter tool works but it is expected that the control should be released and the tool should run in the background, but that is not happening.

Hi,
did you specify the options mentioned in the documentation I've posted?

I'm having the exact same issue. I am able to make it work if I start it first(not as a backgroundprocess). Then stop it and restart it with arangodb start --starter.join . The problem is that we have to automate this so there is no manual interaction possible.
I tried it with the --starter.wait but I still got the same issue

@dothebart Tried out all options present in the documentation, also tried with latest arangodb , still the issue persists.

@hisoumit @sebastienpattyn93 Yep it seems to be a bug. Running arangodb start with parameter starter.join is not putting the starter into background mode. Original issue in the arangodb starter repository here: https://github.com/arangodb-helper/arangodb/issues/112#issuecomment-367757379

Hi all,
This bug has been fixed in the Starter version 0.12.0, which is included in ArangoDB in version 3.3.11, and will be included in version 3.2.16 as well
Closing. Please let us know if the issue persists
Many thanks,


Jest v27 requires syntax that docs state is not needed for reset() method.

This is a request to update the documentation for the fetchMock.reset() method.
After updating to Jest v.27.0.5 I had test suites failing with:
Test functions cannot both take a 'done' callback and return something. Either use a 'done' callback, or return a promise.

The code that was failing was adhering to what is currently listed in the docs: afterEach(fetchMock.reset);.
The fix was to use syntax that is explicitly stated as not needed: afterEach(() => fetchMock.reset());
Would appreciate a small fix to current documentation that notes this actually may be needed in some circumstances.

Fixed.


while initialize cache provider, it's unnecessary to render fallback component

// App.jsx
import { SWRConfig } from 'swr'
import { useCacheProvider } from '@piotr-cz/swr-idb-cache'

function App() {
  // Initialize
  const cacheProvider = useCacheProvider({
    dbName: 'my-app',
    storeName: 'swr-cache',
  })

  // it's unnecessary to render fallback component
  // swr will re-render after the provider initialized
  // if (!cacheProvider) {
  //  return
Initializing cache…

  //}

  return (
    <SWRConfig value={{
      provider: cacheProvider,
    }}>
      <Dashboard />
    </SWRConfig>
  )
}

I would say it's up to the developer how to handle situation when cache provider is getting ready.
What about changing the comment
- // Cache Provider is being initialized - render fallback component in the meantime
+ // Optional: Render fallback component while Cache provider is being initialized
  if (!cacheProvider) {
    return
Initializing cache…

  }

I've been thinking about this.
If you don't use fallback component or implement any other mechanism, SWR will use it's own default in-memory cache during package initialization and requests won't be saved into persistent cache.
So while it's not necessary to use fallback component, it makes very little sense to do so.
I have no idea how to rephrase the comment, so I'll leave it like it is.
If you have any suggestions, please add them here and I may reopen this issue.


support potree2

Hi,
thanks for sharing this tool.
When switching to Potree2 format, the file "cloud.js" is not written by potreeconverter anymore.
It is replaced by a "metadata.json" file.
I did not test it, but given the fact that access to "cloud.js" is hard-coded, I presume potree2 format is not supported

2/ If I bring the PR for this, would it be merged ?

I'd like to do the same, any advice?
I would actually like to add new Lidar scans to an existing potree point cloud. Currently I create a las for every scan, convert it to potree and at the end of the stream I merge the las files and create the final potree point cloud...but that's all a bit messy


regex sticky?

I'm currently trying to figure out what the heck the y regex sticky mode actually does (lots of varied examples that conflict, and mis-information), but I was surprised to see it's not listed here at all. Plans to cover it?
 But perhaps you might already have a good way to explain it that would clear up the confusion?

the sticky flag is more of a regex feature than es6, as it's supported elsewhere - however, MDN has a really concise example here, that explains the functionality well:
var text = 'First line\nsecond line';
var regex = /(\S+) line\n?/y;

var match = regex.exec(text);
console.log(match[1]);        // prints 'First'
console.log(regex.lastIndex); // prints '11'

var match2 = regex.exec(text);
console.log(match2[1]);       // prints 'Second'
console.log(regex.lastIndex); // prints '22'

var match3 = regex.exec(text);
console.log(match3 === null); // prints 'true'

From the same page, more clarification (bolded the part that should clear up an important use case for this flag):
The "y" flag indicates that it matches only from the index indicated by the lastIndex property of this regular expression in the target string (and does not attempt to match from any later indexes). This allows the match-only-at-start capabilities of the character "^" to effectively be used at any location in a string by changing the value of the lastIndex property.

@getify FWIW, last year I documented how y works here: https://docs.webplatform.org/wiki/javascript/RegExp/sticky
You’re right that there is a lot of misinformation about this feature. Firefox/SpiderMonkey shipping a broken implementation and not fixing it for a long time (and the description on MDN matching that brokenness) didn’t really help.
Also check the V8 tests for this feature.

the sticky flag is more of a regex feature than es6, as it's supported elsewhere

Turns out there's a fair bit of very ES6 specific stuff to support sticky in a very particular way. Seems definitely like an ES6 feature to call out.

MDN has a really concise example here, that explains the functionality well

FWIW, I found that example (and others like it) to be really terrible at explaining what I needed to know about y sticky. In fact, it quite mislead me initially.
It shows only the happy path (where subsequent matches are already adjacent by virtue of cooperation between known string contents and the way the pattern is structured), shows no failure or reset of index cases, and also uses only exec(..), instead of pointing out that this behavior extends to other regex-aware utilities, such as String#match(..).

Absolutely fair! My (incorrect) assumption was that the y behavior was consistent across regex engines, this issue seems much more warranted now.

@mathiasbynens

last year I documented how y works here:

Your examples are definitely clearer. Appreciate that.
They don't explicitly illustrate how a match failure resets lastIndex back to 0, which I think is an important detail. Also, they don't explain what happens if a ^ anchor is in the pattern (in both absolute and conditional positions). That particular thing seems to be a point of disagreement between older Firefox's initial invention of y and the codified ES6 y.

@jesseditson

This allows the match-only-at-start capabilities of the character "^" to effectively be used at any location in a string by changing the value of the lastIndex property.

Actually, I think that's the old FF behavior, it appears ES6's y does not allow that. Case in point of misinformation and confusion.

Finally found spec text that perfectly clarifies ^ with y. From <IP_ADDRESS>:

Note: Even when the y flag is used with a pattern, ^ always matches only at the beginning of Input, or (if Multiline is true) at the beginning of a line.

So, /^b../y will only match if there's a "b.." at the beginning of the string, regardless of what you set lastIndex to (i.e., y does not make ^ relative to lastIndex). Moreover, if lastIndex is greater than 0, a regex like /^b../y would never be able to match.

Wow, really good to know.

FWIW, I've completely rewritten (and expanded) my book section on "sticky mode" after all these explorations. If it helps at all, here how I went about it:
https://github.com/getify/You-Dont-Know-JS/blob/master/es6 & beyond/ch2.md#sticky-flag
If there's interest, I'll happily author a significantly reduced summary version of that discussion for this README, and submit a PR. Just let me know.


If I tap the chat with X I am taken to a "random" chat, not the one with X

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Action Performed:

open any chat
Navigate to user in LHN
Open user details and click "Message X"

Expected Result:
When click "Message X" user should be navigated to chat with this user
Actual Result:
When click "Message X" user is navigated to random chat
Workaround:
unknown
Platform:

Where is this issue occurring?

Web
iOS
Android
Desktop App
Mobile Web

Version Number: 1.1.39-1
Reproducible in staging?: Y
Reproducible in production?: Y
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos: Any additional supporting documentation
https://user-images.githubusercontent.com/43995119/154830925-e66f14c1-3edd-4fd6-97b7-72e82d13a182.mp4
Expensify/Expensify Issue URL:
Issue reported by: @iwiznia
Slack conversation: https://expensify.slack.com/archives/C01GTK53T8Q/p1644343200171039
View all open jobs on GitHub

Triggered auto assignment to @marcochavezf (Engineering), see https://stackoverflow.com/c/expensify/questions/4319 for more details.

I wasn't able to reproduce the issue with the latest changes of main branch, probably was already fixed in the last few days:
https://user-images.githubusercontent.com/6829422/155562796-d5d1b024-9399-4c2b-89a9-5e8ab87b9f19.mov
I'm going to close the issue, but feel free to open it if the issue persists in the next version.


remove deprecated --dev option in composer install at .travis.yml

merged.
master : https://github.com/sitrunlab/LearnZF2/commit/69483044e5088da19c403701573787f36e9ef41f
develop : https://github.com/sitrunlab/LearnZF2/commit/df9521f8bdef30c4217cdc7d163aeafeb9f78e2b


Styled Components: Fix interpolated className

This update consolidates how the interpolated className is created, in an attempt to resolve https://github.com/WordPress/gutenberg/pull/29084#issuecomment-788372734
Changes:

A new getInterpolatedClassName util is created and exported from @wp-g2/create-styles
getInterpolatedClassName ensures the @emotion/hash function is only called if the argument is valid
@wp-g2/context adds @wp-g2/create-styles as a dependency (was previously missing)
All calls to @emotion/hash go through the new getInterpolatedClassName util

Going to try an alpha 0.0.160 release to test in Gutenberg


DRILL-1942-templates: template changes with a few related dependencies.

Changes to template files in the allocator branch, along with a few related dependencies.
Unit tests pass, and regression suite passes.

+1 LGTM


Locations Parse -  /etc/nginx/conf.d/www.url.conf

Can you have more than one location under the file /etc/nginx/conf.d/www.url.conf
I get error message on the dashboard for my second added app that reads:

Server not reachable: server version too low

Example:
location /app2/ {
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_set_header X-NginX-Proxy true;
             proxy_pass http://localhost:1338/parse/;
             proxy_ssl_session_reuse off;
             proxy_set_header Host $http_host;
             proxy_redirect off;
     }

location /app1/ {
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_set_header X-NginX-Proxy true;
             proxy_pass http://localhost:1337/parse/;
             proxy_ssl_session_reuse off;
             proxy_set_header Host $http_host;
             proxy_redirect off;
     }

Closing this as it is not a Parse Server specific issue. You may use Server Fault for questions about managing Parse Server, including nginx configuration.
For code-level and/or implementation-related questions or technical support, please refer to Stack Overflow.


Developer Documentation Fix, Added required environment variables for API start

Made corrections to developer documentations, added annotation for nginx usage
Added required environment variables to run_with_dummy.sh that prevented starting the API via ib.py

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.Joerg Bastian seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.You have signed the CLA already but the status is still pending? Let us recheck it.


[fix] Upgrade Busybox to fix CVE-2023-4236

Motivation
Upgrade busybox package in Alpine at build time to get latest version with fix.
Modifications

Verifying this change

[ ] Make sure that the change passes the CI checks.

(Please pick either of the following options)
This change is a trivial rework / code cleanup without any test coverage.
(or)
This change is already covered by existing tests, such as (please describe tests).
(or)
This change added tests and can be verified as follows:
(example:)

Added integration tests for end-to-end deployment with large payloads (10MB)
Extended integration test for recovery after broker failure

Does this pull request potentially affect one of the following parts:

If the box was checked, please highlight the changes

[ ] Dependencies (add or upgrade a dependency)
[ ] The public API
[ ] The schema
[ ] The default values of configurations
[ ] The threading model
[ ] The binary protocol
[ ] The REST endpoints
[ ] The admin CLI options
[ ] The metrics
[ ] Anything that affects deployment

Documentation

[ ] doc
[ ] doc-required
[x] doc-not-needed
[ ] doc-complete

Matching PR in forked repository
PR in forked repository:

LGTM
Would it be useful to upgrade all packages that are upgradeable? Does Alpine have something similar to Ubuntu's apt-get -y dist-upgrade?

Good point. There seems to be a way: https://docs.alpinelinux.org/user-handbook/0.1a/Working/apk.html#_upgrading_packages
I've updated the PR


Allow memory/buffer to have zero capacity

Coverage remained the same at 95.288% when pulling bf7e6dc98cc3c54f6d68a4ce3a8d85b243f03f31 on niketh:master into 9a66a5366a1e2e4479e518045652f3258229f82f on DataSketches:master.

Maybe create a static instance with zero capacity and always return it when zero capacity is requested?

@leventov Good suggestion. Adding this in a separate PR. This makes my Druid implementation with Memory easier now.


Include setUser and consent/privacy API

This PR includes setUser API to allow user information in server to server callbacks

implemented privacy / consent api


wg_engine: fix stroke trimming

Handle very close values of begin and end.

https://github.com/thorvg/thorvg/pull/2771


Update configure-common.md

In azure portal the setting's title has been changed to Session Affinity. So, it would be great if we can change "ARR to Session" to prevent confusions like "what is ARR affinity?" "why we can't see it in the portal"

@cephalin
Can you review the proposed changes?
Important: When the changes are ready for publication, adding a #sign-off comment is the best way to signal that the PR is ready for the review team to merge.
#label:"aq-pr-triaged"
@MicrosoftDocs/public-repo-pr-review-team

#sign-off

I'm closing this PR because the merge conflict shows that the change has already been made in the live version of the article.


refactor: change asm names and structure

As discussed we are refactoring our asm modules:
asm
├── miden
│   ├─ auth
│   ├─ faucets
│   ├─ kernels
│   │  └─ single_account
│   └─ wallets
└── scripts

Looking through the changes and thinking more about this, I'm not 100% sure kernel part.
First, maybe we should just have a single transaction kernel. I haven't thought everything through - but it seems like even when we want to enable multi-account transactions, we would still want to keep a single kernel as the kernel specifies not just how transactions are processed but also how account data is laid out and accessed in memory.
So, my first thought was to change the structure to something like this:
asm
├── miden
│   ├─ auth
│   ├─ faucets
│   ├─ kernels
│   |  ├─ batch [in the future]
│   |  ├─ block [in the future]
│   │  └─ tx
│   └─ wallets
└── scripts

Then I also thought that the path miden::kernels::tx::account is kind of counter-intuitive (i.e., why is account under kernels::tx). So, maybe a more proper structure would be to move "user-facing" modules up to the top level? The structure then would look like this:
asm
├── miden
│   ├─ account [moved up from sat::account]
│   ├─ auth
│   ├─ asset [moved up from sat::asset]
│   ├─ faucets [not yet sure how to combine this with sat::faucet]
│   ├─ kernels
│   |  ├─ batch [in the future]
│   |  ├─ block [in the future]
│   │  └─ tx [modules from sat::internal + sat::kernel]
│   ├─ note [moved up from sat::note]
│   ├─ tx [moved up from sat::tx]
│   └─ wallets
└── scripts

But this also doesn't feel quite right (seems like top level modules are not quite doing similar things). So, I'd like to think more about this.
Maybe for this PR we should reduce the scope and aim for the following structure:
asm
├── miden
│   ├─ auth
│   ├─ faucets
│   ├─ sat
│   └─ wallets
└── scripts

And we can tackle refactoring of the sat module in a separate PR?

Mr. Bobbin, ser.
Should we do that?
https://github.com/0xPolygonMiden/miden-base/pull/309#issuecomment-1803671085

i would probably not put contracts into a separate library - we should still have it in miden library. But I think the idea of grouping them into their own namespace could make sense. So, maybe we try something like this:
asm
├── miden
│   ├─ account [moved up from sat::account]
│   ├─ asset [moved up from sat::asset]
│   ├─ faucet [moved up from sat::faucet]
│   ├─ kernels
│   |  ├─ batch [in the future]
│   |  ├─ block [in the future]
│   │  └─ tx [modules from sat::internal + sat::kernel]
│   ├─ note [moved up from sat::note]
│   ├─ tx [moved up from sat::tx]
|   └─ contracts
│       ├─ auth
|       ├─ faucets
│       └─ wallets
└── scripts

While I think this is better than previous version, I still have some doubts about this structure. So, probably would still be good to break this into two PRs and first refactor the structure to look like:
asm
├── miden
│   ├─ auth
│   ├─ faucets
│   ├─ sat
│   └─ wallets
└── scripts

And then we can tackle the rest of the renaming in a different PR.

ok, now it is
asm
├── miden
│   ├─ auth
│   ├─ faucets
│   ├─ single_account
│   └─ wallets
└── scripts

because sat was not easy to understand.

Should we merge?

I would keep sat for now to avoid renaming it twice.

I am not sure I follow. The whole reason to change the names (not only the structure) was that not even everyone in the team understood sat. Didn't we want to change sat into single_account?

I am not sure I follow. The whole reason to change the names (not only the structure) was that not even everyone in the team understood sat. Didn't we want to change sat into single_account?

In my mind, neither sat nor single_account is the correct way to go and we are going to change this in a follow-up PR. So, I'm not seeing much value in first renaming sat to single_account, and then changing this to one of the structures we discussed above.
For this PR, we can focus on light re-naming (which we are confident in) and moving scripts out of miden library - this will also make the PR easier to review and reduce potential for merge conflicts with other outstanding PRs.

Looking at the code more closely now, I think we need to make some deeper changes. Specifically - we still want to have a single miden namespace (to avoid doing miden::miden everywhere). Basically, asm directory should contain two things:

miden library.
Standardized scripts which are not a part of miden library but are individual files.

The first part should be pretty simple to achieve - we just need to change the root of the library from asm to asm/miden.
The second part would require more work as we'd need to compile these individual files and output compiles versions (i believe we have all the machinery for this ready).

thanks @bobbinth

The first part should be pretty simple to achieve - we just need to change the root of the library from asm to asm/miden.

If I am not mistaken, this here is where we define the root of the library, right?
https://github.com/0xPolygonMiden/miden-base/blob/441c23b00683af94a62ffa7d1e0d3099d0bf6c01/miden-lib/build.rs#L4-L7
So a simple change to
// CONSTANTS
// ================================================================================================
const ASL_DIR_PATH: &str = "assets";
const ASM_DIR_PATH: &str = "asm/miden";

together with renaming all use.miden::miden:: to use.miden:: should do the trick.
But somehow it fails to create a new folder.
   Compiling miden-lib v0.1.0 (/Users/ich/miden-base/miden-lib)
error: failed to run custom build command for `miden-lib v0.1.0 (/Users/ich/miden-base/miden-lib)`

Caused by:
  process didn't exit successfully: `/Users/ich/miden-base/target/debug/build/miden-lib-7748f31eefd341ec/build-script-build` (exit status: 101)
  --- stdout
  cargo:rerun-if-changed=asm

  --- stderr
  thread 'main' panicked at miden-lib/build.rs:37:46:
  called `Result::unwrap()` on an `Err` value: Os { code: 2, kind: NotFound, message: "No such file or directory" }

Is there a trick to do that? I simply run with cargo build

If I am not mistaken, this here is where we define the root of the library, right?

There is also this place: https://github.com/0xPolygonMiden/miden-base/blob/main/miden-lib/src/lib.rs#L31.

Closing in favor of https://github.com/0xPolygonMiden/miden-base/pull/339


System clipboard not found (Raspberry Pi)

Try using Micro Editor over SSH. (Chromebook -> Rasberry Pi 4)
So the Micro Editor installed on a Raspberry Pi 4.
When started the Micro editor, it shows this error:

Installed xclip and xsel , but after restart the error shows again.
Reading the documentation, also read the 'help copypaste'.
Trying also {"clipboard": "terminal"} in the settings.json without luck!
UPDATE: i can paste perfecly 'remotly' with [CTRL] + [SHIFT] + [C], but the error still appears
Specifications

Commit hash: cfcb2e45
OS: Rasbian Buster
Terminal: Secure Shell App (ChromeOS)

I am getting the same but on a RHEL7 installation.
I have both xclip and xsel installed.
Version: 2.0.8
Commit hash: cfcb2e45
Compiled on October 06, 2020

Usually xclip/xsel only work when you have an x-session running on the remote machine. You can read > help copy-paste for all the details. Things are complicated when micro is running on a remote machine because it can't access your local clipboard (except in certain cases through your terminal over the network). For ssh connections, I recommend just setting clipboard to internal, and using your terminal's copy/paste (via ctrl-shift-c and ctrl-shift-v). Note that using the terminal's copy may require turning off mouse mode in micro.

I have the same problem when connecting through ssh to an Ubuntu computer. Changing the setting is a bit annoying because I also use the computer with the desktop. I sometime connect to the computer remotely.
Beside  "clipboard":"terminal" is a bit useless when using micro through an ssh session. When set, I can copy text from another terminal using ctrl-shift-c and past it in the micro editor (through ssh session) with ctrl-shift-v. But then copy(ctrl-c)/past(ctrl-v) inside same micro edited text (through ssh session) doesn’t work. I get the error message "No clipboard received from terminal".
This setting option is thus useless.
When the setting is set to "clipboard":"internal", I than can copy from another terminal (ctrl-shift-c) and past into micro edited text (through ssh session) with ctrl-shift-v, and copy(ctrl-c)/past(ctrl-v) inside the edited text works. But copying from a micro edited text to another terminal doesn’t work. I tried ctrl-shift-c/ctrl-shift-v and ctrl-c/ctrl-shift-v without success. This is the most annoying limitation.
I’m using Ubuntu 20.04 and micro 2.0.8.

I have the same problem when connecting through ssh to an Ubuntu computer. Changing the setting is a bit annoying because I also use the computer with the desktop. I sometime connect to the computer remotely.
Beside  "clipboard":"terminal" is a bit useless when using micro through an ssh session. When set, I can copy text from another terminal using ctrl-shift-c and past it in the micro editor (through ssh session) with ctrl-shift-v. But then copy(ctrl-c)/past(ctrl-v) inside same micro edited text (through ssh session) doesn’t work. I get the error message "No clipboard received from terminal".
This setting option is thus useless.
When the setting is set to "clipboard":"internal", I than can copy from another terminal (ctrl-shift-c) and past into micro edited text (through ssh session) with ctrl-shift-v, and copy(ctrl-c)/past(ctrl-v) inside the edited text works. But copying from a micro edited text to another terminal doesn’t work. I tried ctrl-shift-c/ctrl-shift-v and ctrl-c/ctrl-shift-v without success. This is the most annoying limitation.
I’m using Ubuntu 20.04 and micro 2.0.8.


Windows Agents not appearing in DevOps agent pool

Hi there,
I have build Windows containers and pushed to ACR ok
The Terraform files build and the ACI's are running.
But the agents are not appearing in the Azure DevOps Agent pool
My Terraform Code:
module "aci-devops-agent" {
source                = "Azure/aci-devops-agent/azurerm"
resource_group_name   = "rg-aci-devops"
location              = "uksouth"
create_resource_group = true
enable_vnet_integration  = false
windows_agents_configuration = {
agent_name_prefix = "windows-agent"
agent_pool_name   = "Azure_Docker_Pool_TestLabs"
count             = 2,
docker_image      = "acrnewasm.azurecr.io/servercore"
docker_tag        = "v1"
cpu               = 1
memory            = 4

}
azure_devops_org_name              = "ORGNAME"
azure_devops_personal_access_token = "PATTOKEN"
}

What's your docker image look like? At least for Linux, I did not have luck following the dockerfile in this repository and instead used the dockerfile and script here: https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/docker
Perhaps try testing with this one and see if that works (the Linux one worked for me, at least):
Image: jcorioland/aci-devops-agent
Tag: 0.2-win

Hi @petercharleston! Have you been able to solve your issue? As suggested by @soccerjoshj07 (thanks!) you should not reuse the Dockerfile from this repository. They are just sample but are not updated on a regular basis. The documentation link pointed by @soccerjoshj07 is the one to follow.
Please let us know if you have been able to resolve your issue and if this ticket can be closed.
Thank you!

Assuming you've solved your issue @petercharleston, otherwise, feel free to reopen with details so we can help you! Thanks.