Version 2.0

Topics to version 2.0:

#6 Support XmlAttribute
#12 Suggestion: Introduce ExtendedXmlSerializer Namespace
#7 Serialization class that inherits from IList, ICollection with additional properties
#14 Support for byte[] property
Create configuration that works fine for inheritance in all situations.
Add the ability to changing name (order ...) to the configuration without XmlRoot, XmlElement and XmlAttribute.

I wanted to do migration for inheritance. But I have a problem.
Currently in xml we have:
and e.g.:
class A : B,
class B : C
and if we have migration for A, B and C e.g.:
A has 2 migration - ver="2"
B has 1 migration - ver="1"
C has 1 migration - ver="1"
and of course user can add other migration for any type in the future.
I don't have idea how xml should look for this situation in case we want run migration from base type in current type. And what order to run migrations if user can add migration migration in order e.g. C,A,B,A. And we should deserialize all old xml.
Do you have any idea or do you think it is wrong way?
Now, user have to create migrations for all type and he have to call base migration in subclass manually. Maybe it is ok and it not need changes?

Are you familiar with EntityFramework, by chance?  I think the way out here is to create an IMigrationPlan object that has a set of steps (or commands/instructions) that are built and then executed.  So in the case above, an IMigrationPlanBuilder would walk the hierarchy of a given type and create a set of IMigration objects, which would then be executed by the IMigrationPlan.
BTW, I don't think EntityFramework uses this strategy but it made me think of it FWIW. :)

I don't understand you. I think you didn't wonder enough about what I wrote or I didn't write understandable.
The idea is, ExtendedXmlSerializer could read any old XML. And If you have hierarchy of classes like this:
class A inherits from B
class B inherits from C
And in the past the classes have changed and you have old XML from each period time. E.g.

In 2000 year you remove property from C
In 2001 year you renamed property form A
In 2002 year you change type of property from B
In 2003 year you changed property from A.

E.g. We have only xml from A class.
Currently you have to write migrations for each changes for class A. If you have another class Z that inherits from B you have to create migrations with changes from point 1,2,3 too. In new configuration I would like to create migrations for base class, that will be run for subclass. But if you think about all old xml you don't know which migrations you should run for xml. Becouse in xml you have only version of class A. E.g In case xml from point 3. You still have ver="1".
I think that running migration from base class in subclass is wrong way.
I had idea that you could be create configuration for this situation:
ExtendedXmlSerializer.CreateConfig(cfg=>{
cfg.ConfigType<C>().AddMigration(ClassCMigration);
cfg.ConfigType<B>().AddMigration(ClassBMigration);
cfg.ConfigType<A>().AddMigration(ClassAFirstMigration).AddMigration(ClassASecondMigration);
});

And for other options:
cfg.ConfigType<OtherClass>()
.Property(p=>p.Id).ObjectReference().AsAttribute()
.Property(p=>p.Password).Encrypt()
.Property(p=>p.UserName).ChangeName("User").Order(1);

Ahhh yes I have toooo many problems floating in my head right now and I did not grasp this one, doh.
Let me focus on getting you the PR and then we can circle back around to this one.  I like how you're thinking though. :)

I've added test for v2:
Type=XmlSerializerTest  Mode=Throughput

                            Method |     Median |    StdDev |
---------------------------------- |----------- |---------- |
   SerializationClassWithPrimitive | 51.5149 us | 0.9199 us |
 DeserializationClassWithPrimitive | 80.0274 us | 1.2360 us |

Type=ExtendedXmlSerializerV2Test  Mode=Throughput

                            Method |      Median |     StdDev |
---------------------------------- |------------ |----------- |
   SerializationClassWithPrimitive | 900.8198 us | 26.4454 us |
 DeserializationClassWithPrimitive |  42.5747 us |  0.5083 us |

Type=ExtendedXmlSerializerTest  Mode=Throughput

                            Method |      Median |     StdDev |
---------------------------------- |------------ |----------- |
   SerializationClassWithPrimitive | 937.6775 us | 18.8019 us |
 DeserializationClassWithPrimitive | 122.2478 us |  2.2484 us |

These results are not bad but they are not good enough.

I think that your solution is too big for this small project. But it is good start.
Did you read this book book https://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X ? It could be good position for you.
Anyway, I want to come back to configuration.
W think that profiles are good for us but for users they could be to hard.
We should create similar configuration like in automapper.
You will be able to create static or instance configuration:
ExtendedXmlSerializer.Initialize(cfg => cfg. [...] );
//or
var config = new ExtendedXmlSerializerConfiguration(cfg => cfg.[...]);

Then you will be able to create serializer:
//Without configuratino
var serializer = new ExtendedXmlSerializer();
// with configuration
var serializer = new ExtendedXmlSerializer(config);
// or from configuration
var serializer= config.CreateSerializer();

In configuration you will be able to configure all settings:
for example:
ExtendedXmlSerializer.Initialize(cfg =>{
cfg.ConfigType<OtherClass>()
.Property(p=>p.Id).ObjectReference().AsAttribute()
.Property(p=>p.Password).Encrypt()
.Property(p=>p.UserName).ChangeName("User").Order(1)
.AddExtension(AttachedPropertyToOtherClass);

cfg.UseAutoProperties();
cfg.UseNamespaces();
cfg.AddExtension(AttachedPropertyToAllTypeExtension);
});

What do you think about it?

I think that your solution is too big for this small project

I completely agree.  This has been a good experience for me.  In that have I have not been very pragmatic in my approach here, haha.  Thanks for that book. I bought it!

These results are not bad

You are far too kind!  Those results are terrible haha.  I basically took your awesome performance made nearly 20 times slower,  That is simply unacceptable.
I did do some further analysis over the weekend, and I was able to get a barebones test to about 400us, but it was very bare without any of the (bug-fixing) features I wanted to add.
So, I feel that I have taken the wrong approach here and have gone down the wrong path.  However, I do have another idea I want to try out.  If I can get it within 250us, then I think that would be worth exploring.  Otherwise, I might have to bow out and cut my losses here. :(

What do you think about it?

Very awesome. :)  I approve.  That would be a nice way to add extensions and such, too.  My only concern is using a static entry point.  Make sure that this is used for applications and not testing as this will break tests (two tests inadvertently using the same configuration).
I've added this as https://github.com/wojtpl2/ExtendedXmlSerializer/issues/22

Are you working still on version 2 or you give up ?

LOL no I am working on it!  I have totally rewrote it and have got caught up in performance.  It is much simpler now.  However, not all the tests are passing yet.  Once I get them passing I will send another PR your way.  Hopefully today or tomorrow.  This is the serializer still not deserializer.  So the way I see it:

New (fast! -- I am getting ~71us/op on my machine) serializer
New Configuration API (#22)
Deserializer

Taking a little longer than I had hoped, as it always does.  I should be done by next week.  Is that OK?

That sounds amazing! Thank!
I don't remember how fast was version 1.5.0, but 71 it is very fast.
After these points we can publish version 2.0. Of course I will add information about your effort in readme ;)

Cooooool. :)  Yeah, I am full throttle on this.  I guess I have an interest in serialization, haha.  Plus there are new things I am learning such as .NET Core and Benchmark.NET, so it's been very valuable!
Speaking of Benchmark,NET, I did get wrapped up this weekend with a mysterious issue that I couldn't seem to figure out.  I have opened up an issue on Benchmark's repo, if you're interested:
https://github.com/dotnet/BenchmarkDotNet/issues/330
BTW, the v1.x serializer was getting 76-74us/op on my machine.

Thank for info! I'll check it.

I saw your code. It looks much better and it has good performance! Great job!
In new year I will join to you to work on version 2.0. But now I have a holiday.
Merry Christmas & happy new year!

Hey, thanks!  Much appreciated!  I am actually almost done with getting the tests passing.  I should have that done today -- it's taken much much longer than anticipated!  But once I have this checked in, it will be a much more simplified 2.0 and faster.
Unfortunately, the ~71us was before adding the type="<type>", so now performance is around ~79us on my machine, which is still pretty good.  I am hoping that the new ConfigurationAPI will allow for new ways to make it faster eventually.
So next week I will be working on that ConfigurationAPI and hopefully when you can start working on this project again it will be done for you and I can finally start working on that deserializer. 👼 😄
Happy Holidays to you as well, @wojtpl2!  I have appreciated the opportunity to assist you here. 👍

Great job!
.net 4.5

Type=XmlSerializerTest  Mode=Throughput

                            Method |       Mean |    StdDev |   Gen 0 | Allocated |
---------------------------------- |----------- |---------- |-------- |---------- |
   SerializationClassWithPrimitive | 66.3622 us | 0.7910 us | 24.3164 |  56.85 kB |
 DeserializationClassWithPrimitive | 72.4928 us | 0.9108 us |  8.3333 |  22.91 kB |

Type=ExtendedXmlSerializerV2Test  Mode=Throughput

                            Method |        Mean |    StdDev |   Gen 0 | Allocated |
---------------------------------- |------------ |---------- |-------- |---------- |
   SerializationClassWithPrimitive |  91.2706 us | 1.6230 us | 27.3763 |  62.75 kB |
 DeserializationClassWithPrimitive | 104.2177 us | 1.4177 us | 15.0716 |  42.92 kB |

Type=ExtendedXmlSerializerTest  Mode=Throughput

                            Method |        Mean |    StdDev |   Gen 0 | Allocated |
---------------------------------- |------------ |---------- |-------- |---------- |
   SerializationClassWithPrimitive |  88.6446 us | 1.5373 us | 21.3379 |  50.25 kB |
 DeserializationClassWithPrimitive | 105.0393 us | 0.8864 us | 15.0716 |  42.92 kB |

.net core

Type=XmlSerializerTest  Mode=Throughput

                            Method |     Median |    StdDev |
---------------------------------- |----------- |---------- |
   SerializationClassWithPrimitive | 92.0979 us | 2.5228 us |
 DeserializationClassWithPrimitive | 72.4231 us | 0.9267 us |

Type=ExtendedXmlSerializerV2Test  Mode=Throughput

                            Method |      Median |    StdDev |
---------------------------------- |------------ |---------- |
   SerializationClassWithPrimitive | 127.0124 us | 1.4236 us |
 DeserializationClassWithPrimitive | 104.3320 us | 1.9484 us |

Type=ExtendedXmlSerializerTest  Mode=Throughput
                            Method |      Median |    StdDev |
---------------------------------- |------------ |---------- |
   SerializationClassWithPrimitive | 125.0962 us | 1.8916 us |
 DeserializationClassWithPrimitive | 105.0153 us | 3.9010 us |

Awesome!  That's great, indeed.  So basically maintaining v1 speed with a little overage.  A couple thoughts:

Looks like .NETCore compiles and works?  That was something I thought of last night, but forgot to check!  Good to see that it does work.
Right now the current emitter used for ExtendedXmlSerializerV2Test is super basic and doesn't do recursion checking. :(  When you use XmlExtendedSerializer.SerializationToolsFactory, a new emitter is employed that does do recursion checking.  I hope to address this with the ConfigurationAPI.
Speaking of SerializationToolsFactory.  I was thinking we should deprecate this and send people to the new ConfigurationAPI instead.  Is that OK with you?

Also, kind of weird that serializer is faster in .NET framework, but slower in .NET Core. heh. 😮

yes it works.
I think in version 2 we should remove old SerializationToolsFactory and create only new configurationAPI.

Coooooooool.  On further thought, I think it's better to get the Deserializer done first, as that involves less work (or should involve less work) and will provide less risk to build further features upon.  I will also see if I can attend to #14 as well (should also support ImmutableArray too!)

What have you been up to? Have you worked on ExtendedXmlSerializer? Have you done something?

Hey!  Happy New Year. :)  Yeah... I have worked on something but haven't finished it, unfortunately.   Last week was not nearly as productive as I had hoped for, and it culminated in helping the parents with their home networking that took far much longer than it should have.
In any case, I probably have a few more days on getting you a deserializer, unfortunately.  Are you able to wait until Wednesday?

Thank! Happy New Year for you too!
Yes of course. We don't have any deadline. I'm doing this project after hours just for fun and learning. Nothing by force. I hope you too ;) I just need information that you are still working or you already gave up. If you need more time and you want still working for this project - I'm glad to hear that.

Haha yeah no worries, just making sure!  That's my problem is once I commit I feel obligated.  I also want to be sure there are no pressing expectations on your side, either.  So, OK then.  I will check in on Wednesday and let you know. 👍

Heya... I wanted to check in.  I have made some progress but it is taking a little longer than expected.  I am thinking at this point I will have a new PR for the serializer/deserializer for you if not over the weekend then Monday at the very latest.  I think I have finally landed on a design I am happy with, but I will not know until I am done and all the tests are passing haha.  It looks promising, though.

No worries. I really wonder what you've done.

Haha nothing too impressive.  Just making it WORK, for starters. :P  I had some invalid assumptions with the serializer that didn't work so well with the deserializer, so things were inconsistent.  And messy. :P

Yikes, yeah when I get it to a good point I will do that.  I sort of got it into a funky state right now.
I will try to give you some insight, however.  I was using INode and IEmitter and IWriter which turns out was WAY too abstract.  So what I have done is simply make a converter, which is a reader and a writer (with first-hand knowledge of Xml namespace components):
public interface IConverter : ISpecification<TypeInfo>, IWriter, IReader {}

public interface IWriter
{
    void Write(XmlWriter writer, object instance);
}

public interface IReader
{
    object Read(XElement element);
}

So, simpler and more aligned with how you did things in v1.0. :)

Also, I have gotten rid of the idea of "primitives" versus "objects".  Now there are simply converters that are used for a particular type.  This will make items such as #14 easier to implement, as well as implementing future types (such as ImmutableArray etc).

It sounds much better! Interesting and simple idea.

Yes I am actually very happy with the design now.  I shouldn't admit this but I have gone through like 3 or 4 times of trying to get this right. 😛 It's been quite the adventure.  Anyways, almost done.  I just posted my latest efforts here:
https://github.com/Mike-EEE/ExtendedXmlSerializer/tree/feature/Deserializer
So you can take a look at it.  I have everything done except for the References (8 tests).  Everything is working on a legacy-basis for both serialization and deserialization.
Unfortunately it is a little slower now (like 10-20us).  I will have to look into it and figure out why.  I am doing some things for the legacy scenarios that are adding a little time now, but in 2.0 they won't be there so should be faster.
Anyways, I would say that I can get references done tomorrow, and then performance done on Tuesday (hopefully).  Then we can (finally!) start working on that configuration and other tasks.
Sorry this has taken so long!  I feel like I am holding up your project. Ha ha.  I hope you like what I have done.  It contains the best elements of the different attempts at getting this right and feels a lot better with getting features put in place.

Your code looks better. I didn't have time to read and understand everything, but this solution is really good.
For now, I have question about your features: atributes, namespaces (all from FuturesTest). You will be support this functions?

Yes indeed... everything is in place for those features.  Part of #22 will be to implement them so that they are accessible as well. :)

Ok I need more time. ExtendedXmlSerializer.Samples doesn't work.

Boo.  I will get that fixed!

I've seen that you do big changes. It's ok. I'll wait patiently for your changes.
Then I (or you if you wish) can create interface of new configuration. But I can have trouble with connection it with new Serializer. I will need a lot of time to understand all functions. I don't have to much time now and it can takes me about 2 weeks.

Hah!  Yeah, I keep adding code. :(  There's a lot of files but they are small.  This is a side effect of composition over inheritance.
I did change the IReader/IWriter to accept an IReadContext and IWriteContext respectively.  This abstracts the read/write implementation a bit (technically now we could also make a JSON reader/writer ;)), but allows further extendibility with services and a service provider.  I was going to do this for the configuration API but thought I would slide it in now.
Hope this is not too much for you!  I can totally understand if it is... it's turned into a complete rewrite!  I did strive to maintain as much of your logic as possible. It's all still in there, just organized into discrete, extendible/extensible files now.  Just let me know if this is going to be a problem.  Hope it's OK!

Also, I am thinking it is going to take 2 weeks for the configuration API so that works out, too. 😮

It is OK. I created this project in short time and I didn't have time to refactoring it. You solution is ok and I really like it.
I thought about JSON reader/writer. I've even create pull request to Json.NET ;) https://github.com/JamesNK/Newtonsoft.Json/pull/1015
Maybe I'll create interface for Congituration API and I'll remove old api? Then you will connect it to your new serializer ? It sounds ok?

Cool!  yes, that sounds great.  So you will create the Configuration API interfaces and maybe implementation, and then I will wire it into the new serializer?  Yeah that works for me.  I think you have a better grasp on what makes a nice fluent API, so please do. :)  I will move my efforts towards performance and also some of the other items (like #14).

That's cool about JSON.NET.  It would be kinda cool to make an Extendible Serialization API (ESA? haha).  Then our Configuration API could have a UseFormat (or equivalent) method call. 😎

Ok. But want to start my job after you push. We will have less conflicts. Then you can do other improvements, ok? I'll do my changes on branch v2.0.

Ok sounds good.  I should have something to push by end of day today. 👍

Hey I wanted to check in with you... today was not a good day so I didn't get as much done as I would have liked.  If you want to start, you can delete all the files in the Configuration namespace and work from there if you would like.  I will not be working in there at all and none of the files in there are valuable/used anymore so you can use it without fear of being stomped on. :)
Otherwise, I hope to have a PR tomorrow for you.

I wanted add profiles to configuration. (something like: https://github.com/AutoMapper/AutoMapper/wiki/Configuration#profile-instances)
But I don't see in ExtendedXmlSerialization.ExtendedXmlSerializer any constructor with IExtendedXmlConfiguration parameter. Do you want use it in v2?
I don't understand it now. Do you want implement migrations, custom serializer, encrypt, object reference in v2?
I've been watching this code and i don't understand ExtendedXmlSerialization.Legacy.ExtendedXmlSerializer. I've changed configuration for this version. If someone will be use version 2 library, will have to change current exists code. Probably I did it wrong, didn't it?

Ah!  Yes, sorry if that wasn't clear, but I am fully intending on implementing all four extensions (references, encryption, custom xml, and migrations) in v2.  That is next on my plate here.  You don't have to worry about it. :)  I did have a constructor at one point but removed it get other things working.  ConfigurationAPI has not been tied in yet so that is part of that story.
As for the Legacy namespace, everything in there is deprecated/obsolete and there in case someone wants v1 functionality and/or wants to migrate it to v2.  If you see the [Obsolete] attributes on all the public classes, they point to this message.  At some point we will have to add documentation to that page, too. :)
Also, I haven't mentioned this yet, but if my changes are too disruptive, please let me know.  I have no problem using this code in my own.  I don't want you to feel that I have hijacked your project or anything like that.  I sort of feel I have!  So just to be sure, you are more than welcomed to go another direction if it is too disruptive/different.  I wanted to make sure I said that because it has been on my mind for a while.

Your changes are ok. And I'm happy with your fast work. I don't have enough time to finish this project on my own. I think that this project has potential. I would be sad if it ended in failure.
I asked because I didn't see that in ExtendedXmlSerialization.Legacy you create old file ExtendedXmlSerializerConfig.cs with old functions. Sorry my fault. Now I understand.
I will do profiles (or modules) quickly because it is easy for me. In this case maybe I wait for your changes. When you use configuration in v2, I'll be able to do this.
What do you think?

Ahhh yes, I would definitely wait for Configuration API integration work first if possible.  I am cranking along here, so things are happening much faster.  I should have attributes (#6) and collection properties (#7 ) done this weekend, and then all the extensions done next week.  Then Configuration API to make it all work nicely.   :)

Looks like VS2017 is set to be released on March 7th:
https://blogs.msdn.microsoft.com/visualstudio/2017/02/09/visual-studio-2017-launch-event-and-20th-anniversary
It would be cool (and I think very doable) to launch v2 around that time, we could even promote it as a VS2017-based project.  After we upgrade to it, of course. :)

Here's a really nice example of a quick site we could put together:
http://www.thepollyproject.org/
I just hate signing up for more work. ;)

I've added information about v2 in article on CodeProject.

7th March could be great date. I have birthday in half of March. 😄
VS2017 it is good idea. Do you know if project will be have new structure or configuration in VS2017? Now I cannot to install new version VS. If I could still use VS2015 you are allowed to upgrading.

Cool!  Hopefully we can make this work out in time.  And yes, the entire project structure will have to be migrated to 2017.  project.json is no longer and has returned to .csproj.  This will be a good opportunity to try all the new bits.  We might want to try a little after 7th as it will take some time to adjust.  So maybe on your birthday? 😄  Well, at the latest, at least.

no comment for csproj 😞 I think that csproj is not bad but what for I learned project.json. Doesn't matter.

Hah, well I'll comment on it: it's a total disaster! 😛  MSFT has done an amazing job with .NET and imperative code, but declarative data has not gotten the same treatment, and so here we are.  I wish everything was Xaml, but alas I am but in the minority.
I almost want to make EXS a Xaml parser still. :P  I've put enough time into this already that I should!  Haha... maybe v3 or something.

That great!
I've seen the page Polly web. This page was created in Ghost. Have you ever used it.
It is great page https://www.staticgen.com/. On this page you can see comparison of static web generators. I think that http://gohugo.io/ or http://jekyllrb.com could be useful for us.
Then we can host this page as github pages. What do you think ?

Wow!  that's interesting.  That definitely makes it easier than I was anticipating.  I like the look of Jekyll better, but I am not sure.  There are so many to choose from!  Have you had experience in any of these?  My preference would be to go with something in .NET "just in case" but I am definitely open to alternatives.  Whatever is easiest. :)

I haven't. But both look promising.
WebApi, MVC, ASP.NET is good but not for static pages. I didn't find any
generators for .net. Maybe because of front developers don't know .net.
I have experience in Angular, bootstrap and all .net technology (WebApi,
MVC, ASP.NET) but we need something simpler. I don't want to create custom
solution.
2017-02-14 14:00 GMT+01:00 Mike-EEE<EMAIL_ADDRESS>
Wow! that's interesting. That definitely makes it easier than I was
anticipating. I like the look of Jekyll better, but I am not sure. There
are so many to choose from! Have you had experience in any of these? My
preference would be to go with something in .NET "just in case" but I am
definitely open to alternatives. Whatever is easiest. :)
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/wojtpl2/ExtendedXmlSerializer/issues/20#issuecomment-279700890,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AQh-j_xkmkVR9Zk0w_Cqny4RphkYtNn9ks5rcaVRgaJpZM4LFQau
.

Yeah, definitely don't want to create a custom solution.  I was thinking "just in case", but that is not a good way of thinking of things. 😮

How's everything coming along for v2? Do you need help?

Hah!  Probably a question I will never answer "yes" to. 👼   Things have gone a little slower than expected, but I am finally putting some features together.  I hope to have #6 and collection properties done this weekend, and then start on the extensions (references, encryption, custom xml, and migrations) next week.
If anything, I would like help on that website.  Is that something you could probably assist with doing?

Until

Heya... heads up.  Letting you know that with my latest commit that IPropertyEncryption is going away.  Currently in ExtensionModel there is an IEncryption that is used for encryption.  PropertyEncryption implies only for properties, whereas the Encryption can be used for anything.
Hope that makes sense.  I wanted to mention it here so you don't think I am deleting your work.  I feel bad enough as it is with all the changes I've made... even if they are turning out pretty well now, finally. :)
Please let me know if this will be a problem.

Btw, have you seen VS2017 yet?  It is currently clocking 7800 (!) problems.  Last week it was ~7650 when I first saw it after it was launched:
https://developercommunity.visualstudio.com/spaces/8/index.html
So, it might be best to wait a bit before using or upgrading to it. 😉   They might have an update for //build and/or Redstone 2 (Windows Creator Update).
In any case, I am thinking upgrading to VS2017 should be the very very last thing we do before launching v2 LOL.

In my case it can be tricky to have VS 2017 and new resharper. We must have web page if we want use free Resharper. I will submit our project to https://www.jetbrains.com/buy/opensource/?product=resharper

Don't forget OzCode, as well! :D
http://o.oz-code.com/open-source

ok.

I am going to close this issue now as everything is completed from a v2 perspective.  The only thing not implemented in the original list yet is #14, which I will be attending to sometime soon.

Awesome! So many changes! Thank! I'll try read this today and try v2.0.

Cool.  Hopefully it works OK for you. :)


Paypal Data Collector com.paypal.android.sdk:data-collector: Consider upgrading to version com.braintreepayments.api:data-collector:3.21.0 of the SDK.

Hi, we've been using the package for a long time and a few days ago we got the warning from PlayStore,

Can someone tell me how to resolve this?

The reason for this warning is that this package uses an old version of 'com.braintreepayments.api:drop-in'.
For me, it was enough to just update the version of this package to '6.13.0'.
The package with an updated version of 'com.braintreepayments.api:drop-in' can be found at https://github.com/claudius-kienle/flutter-braintree and one can overwrite this dependency in the pubspec.yaml by adding a entry to dependency_overrides:
...
dependency_overrides:
  flutter_braintree:
    git:
      url: https://github.com/claudius-kienle/flutter-braintree.git
      ref: 053a19e

So if I just update the dependency it should work? Or do I need to handle any code changes?

It seems to work without any additional code changes. But I am only using the DropIn UI.

@BunnyBuddy thanks for sharing, I'm using it but one problem I face after update that, vault is not working, like in the payment request option if the amout = null, then it won't work but before update it's working like that, so did you check that.
thank you

I updated the drop in version but it broke the code I guess, it needs some changes in the code as well :(

I believe this is closed by #145

I believe this is closed by #145

Woahhh the legendery dev is back ??? :O

@BunnyBuddy can you help me to solve the BraintreePayPalRequest
final dropInRequest = BraintreeDropInRequest(
      tokenizationKey: paymentBloc.clientToken,
      collectDeviceData: true,
      vaultManagerEnabled: true,
      requestThreeDSecureVerification: true,
      email<EMAIL_ADDRESS>      billingAddress: BraintreeBillingAddress(
        givenName: "Jill",
        surname: "Doe",
        phoneNumber: "5551234567",
        streetAddress: "555 Smith St",
        extendedAddress: "#2",
        locality: "Chicago",
        region: "IL",
        postalCode: "12345",
        countryCodeAlpha2: "US",
      ),
      googlePaymentRequest: BraintreeGooglePaymentRequest(
        totalPrice: '4.20',
        currencyCode: 'USD',
        billingAddressRequired: false,
      ),
      applePayRequest: BraintreeApplePayRequest(
          currencyCode: 'USD',
          supportedNetworks: [
            ApplePaySupportedNetworks.visa,
            ApplePaySupportedNetworks.masterCard,
            // ApplePaySupportedNetworks.amex,
            // ApplePaySupportedNetworks.discover,
          ],
          countryCode: 'US',
          merchantIdentifier: '**********',
          displayName: '',
          paymentSummaryItems: []),
      paypalRequest: BraintreePayPalRequest(
          amount: 'null',
          billingAgreementDescription: "HandyX",
          displayName: 'HandyX'),
      cardEnabled: true,
    );

    BraintreeDropInResult? result = await BraintreeDropIn.start(dropInRequest);

this is the error
StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:652:7)
E/flutter ( 5666): #1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:310:18)
E/flutter ( 5666):
E/flutter ( 5666): #2      BraintreeDropIn.start (package:flutter_braintree/src/drop_in.dart:22:18)
E/flutter ( 5666):
E/flutter ( 5666): #3      _SourceListScreenState.addPaypal (package:handyx/views/settings/payment/payment_source_list_screen.dart:488:37)
E/flutter ( 5666):

Here's the deal,
if updating
com.braintreepayments.api:drop-in to '6.13.0'
breaks your code then try and update it to
'5.4.2'
This issue of PlayStore not allowing apps is popping up everywhere on braintree_android_sdk and drop_in.
https://github.com/braintree/braintree-android-drop-in/issues/460
I just read the discussion on their Github (you can too btw) and they recommend updating the code involving drop-in as well as the drop-in library to the latest versions but it requires you to rewrite the code part in this package (latest version i.e 6.13.0+ has too many breaking changes and this package's current code is depreciated and it'll only work upto 5.4.2 which fortunately is accepted by PlayStore for the time being).
Another thing is, remove all the app bundles (active or inactive whether it's in production or testing track) which have been flagged by PlayStore as non compliant with the PlayStore's privacy policy.
Update the version of your app bundle and publish it.
If you still face the issue, then you can go for the appeal option provided by PlayStore.
I'll try and come back (hopefully with some good news).

Okay we finally got through.
Change the library versions (and our code had to be updated as well because it was only fine upto 5.4.2) as follows in the build.gradle file.
implementation 'com.braintreepayments.api:drop-in:6.13.0'
implementation 'com.braintreepayments.api:data-collector:4.38.2'
Secondly, added this line our app's policy page "We only collect device data for Braintree (for the sole purpose of fraud detection)"
And also provided links to PayPal and Braintree's policy pages links there.


pkg messages breaks doctests

We have some problems with Trains pushing messages via sys.stdout instead commonly used sys.stderr. The case is with doctests where the output is compared to the expected value and with just minor package update a message text change it breaks our tests like this example:
064         >>> logger.log_metrics({"val_loss": 1.23}, step=0)
Expected nothing
Got:
    TRAINS new version available: upgrade to v0.14.1rc2 is recommended!

a simples solution on our side is to freeze version but it would limit Trains users so I would appreciate to change the streaming channel or be able to configure it
https://github.com/PyTorchLightning/pytorch-lightning/pull/1087/checks?check_run_id=532067360

@bmartinn could we do something here? it is really important for us... :]

@Borda will routing the message to sys.stderr solve the issue ?

it should, it is a similar case as TQDM :]
pls check this example:
import sys

def anyfunc(bool_std):
    """
    >>> anyfunc(True)
    print with `sys.stdout`
    'abc'
    >>> anyfunc(False)
    'abc'
    """
    if bool_std:
        sys.stdout.write("print with `sys.stdout`\n")
    else:
        sys.stderr.write("print with `sys.stderr`\n")
    return "abc"

@Borda, there should not be any (stdout or stderr) prints in the current (master branch) of PyTorch-Lightning. I think this is a specific issue with this PR since it was before we introduced the "bypass mode"/"offline mode" to the test_trains.py .
May I suggest merging the test code from the master branch into the PR so that the CI pass ?

ok, Ill try but still I would recommend doing this change... :]

Thanks @Borda , let me repeat here, just so I'm sure I understand your suggestion.
Are you suggesting to have all the Trains messages printed on stderr instead of stdout ?

yes or having the stream as a parameter, eg pprint so you can define even a file

Since Trains is an auto-magical solution, there is really very little you have to do in order to get full versioning of your experiment.
Just importing and initializing Trains is enough, anything you push to stderr / stdout will be automatically logged to the server, any TensorBoard graph, or MatplotLib plot will be logged as well.
Further more, all the models loaded or saved by PyTorch/Keras/TF will be logged as well.
This is still with no additional code on the user part (other than the first import/initialize).
This is why if Trains outputs any general purpose information (i.e. not something I'd like to see on stderr , since it is not an error) it will be on stdout. Any other warning/error is logged using the standard python logger.
Makes sense?

well not very happy about it but fine :]
so could you please remake tests in lightning from doctest to standard unittests :angel:

It is not, this is a general purpose message (that should not appear in "bypass mode") saying you should upgrade your Trains RC package. The fact it was printed just after the logger call is just a coincidence, they are unrelated :)

I understand the purpose but it breaks doctest as with newer installed package version the text might change... and a week ago there was no message at all...

@Borda, let me stress that again, Zero messages will be printed after your PyTorch-Lightning PR 1172 . Regardless of the Trains version, or anything else, this is exactly why we added the "bypass mode" :)

@Borda just checking in, did the CI tests pass? Should I push a temp fix to the PR branch?

to be honest it is quite hard to check if the failing PRs are using latest master with the "by-pass" fix or not but just today I say failing some tests because of anonoucing new release...

@borda, Could you temporarily block the update domain? (Like set the hosts file on the CI machine)
It would eliminate any "version update"

that shall be the "by-pass" right?

Regardless of the "by pass" fix.
It will block the update query, so it will not "know" there is an update, hence no message print.
That said, there are other prints, like experiment ID, that might change, not sure how that affects the CI tests.
I guess the easiest way is still to merge the "by pass" fix...
Just trying to help with this specific older branch PR.

Fix PyTorchLightning/pytorch-lightning#1379 merged to master


Invalid callable parameter return type of method \Illuminate\Support\Collection::transform()

Laravel Version: 9.25.1
PHP Version: 8.1.7
LaraStan Version: 2.1.12
Database Driver & Version: N/A

Description:
\Illuminate\Support\Collection::transform() has an invalid callable return type. The callable can return anything, as such the return type should be similar to \Illuminate\Support\Collection::map() - returning a templated value, such as TTransformValue.
This causes false errors when using static analysis tools such as LaraStan.
Steps To Reproduce:

Create a collection containing items:

        $collection = collect(['a', 'b']);

Transform these items, purposely returning a type different from the $value type:

        $collection->transform(static fn (string $value, int $key): int => 1);

Static analysis understands the callback's return type as invalid, due to invalid PHPDOC:

Parameter #1 $callback of method Illuminate\Support\Collection<int,string>::transform() expects callable(string, int): string, Closure(string, int): 1 given.

This isn't a bug. If you want to adjust something to a DocBlock we're welcoming PR's.


chore: increase timeout for streaming test

We have an integration test that's a little flaky on CI. I'm not sure what's causing that, but I have a hunch that we're sending the two chunks fast enough that a busy CI runner will see them batched together. Let's see if this CI runs better!
Resolves https://linear.app/netlify/issue/COM-373/unflake-cli-test-for-streaming

I've run the CI two times in a row now, and there wasn't a single flake. Looks like it's good now!


Allow absolute target path in build.go

Fixes #1099

Codecov Report

Merging #1100 into master will decrease coverage by 3.48%.
The diff coverage is n/a.

@@            Coverage Diff             @@
##           master    #1100      +/-   ##
==========================================
- Coverage   53.69%   50.21%   -3.49%
==========================================
  Files         115      118       +3
  Lines        8923     8946      +23
==========================================
- Hits         4791     4492     -299
- Misses       3424     3773     +349
+ Partials      708      681      -27

Impacted Files
Coverage Δ

src/restic/backend/b2/b2.go
0% <0%> (-80.59%)
:arrow_down:

src/restic/backend/swift/swift.go
0% <0%> (-73.69%)
:arrow_down:

src/restic/backend/swift/config.go
36.95% <0%> (-54.35%)
:arrow_down:

src/cmds/restic/background.go
0% <0%> (ø)

src/restic/node_darwin.go
100% <0%> (ø)

src/restic/progress_unix_with_siginfo.go
62.5% <0%> (ø)

src/restic/repository/index.go
67.98% <0%> (+0.94%)
:arrow_up:

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 1d2045c...52004cd. Read the comment docs.

Good catch, thanks!


feat/updated-readme-fixed-setup-help-message

@BAntonellini this looks good, can you check one thing.
run setup shh with the ssh flag and provide a key
look at what is generated in .ssh (should be 3 files
now run setup all
see if you have another file in .ssh I saw an extra one at Janssen


Proposal: Bug bounties on gitea?

Proposing to implement handling to allow anyone to submit a bug bounty on gitea issues that they care about to influence it's priority and handling in case the issue:

affects small user base (low priority issues in general)
is not economical for (F)LOSS development as it's too complicated e.g. https://github.com/QubesOS/qubes-issues/issues/4318
is for Libre Open Source Software (LOSS) project that depends on business plan in place which bug bounties would allow for.

To clarify: with "on gitea issues" do you mean Gitea the project, or Gitea the software?

To clarify: with "on gitea issues" do you mean Gitea the project, or Gitea the software?

To clarify: with "on gitea issues" do you mean Gitea the project, or Gitea the software? @noerw

Gitea the software as i would like to use this for my projects.

To clarify: with "on gitea issues" do you mean Gitea the project, or Gitea the software? @noerw

Gitea the software as i would like to use this for my projects.

Closing this ticket as bounties for the Gitea project are a thing already (please see the link in README, https://www.bountysource.com/teams/gitea). Last week there were two large ones made. As well, commissioning developers directly is also possible.

Closing this ticket as bounties for the Gitea project are a thing already (please see the link in README, https://www.bountysource.com/teams/gitea). Last week there were two large ones made. As well, commissioning developers directly is also possible.

As @Kreyren clarified, this is about integrating bug bounty programs with gitea's issue tracker, not about bounties on issues of the gitea project.

As @Kreyren clarified, this is about integrating bug bounty programs with gitea's issue tracker, not about bounties on issues of the gitea project.

I think then this would be in scope for the bounty projects of potentially using oauth to edit tickets to insert a link into the ticket, and labelling issues appropriately. If this is a request for the bounty logic to be put directly into Gitea I think that is out of scope as dealing with being a bank and storing funds is significant undertaking.

I think then this would be in scope for the bounty projects of potentially using oauth to edit tickets to insert a link into the ticket, and labelling issues appropriately. If this is a request for the bounty logic to be put directly into Gitea I think that is out of scope as dealing with being a bank and storing funds is significant undertaking.

I think then this would be in scope for the bounty projects of potentially using oauth to edit tickets to insert a link into the ticket, and labelling issues appropriately. If this is a request for the bounty logic to be put directly into Gitea I think that is out of scope as dealing with being a bank and storing funds is significant undertaking.

We dont have to deal with a bank if it was using cryptocurrency e.g. monero which would allow handling the funds through the instance quite nicely.

I think then this would be in scope for the bounty projects of potentially using oauth to edit tickets to insert a link into the ticket, and labelling issues appropriately. If this is a request for the bounty logic to be put directly into Gitea I think that is out of scope as dealing with being a bank and storing funds is significant undertaking.

We dont have to deal with a bank if it was using cryptocurrency e.g. monero which would allow handling the funds through the instance quite nicely.

I think this is outside of gitea's scope too .. but would be a nice smal project ...
something like a "gitea bounty bot" ... since it also has to connect to cryptocurrency nodes + manage wallets, ...

I think this is outside of gitea's scope too .. but would be a nice smal project ...
something like a "gitea bounty bot" ... since it also has to connect to cryptocurrency nodes + manage wallets, ...


any plans to continue?

do you have any plans to continue development of Maui.Gtk?
if yes, there's a plan needed to get away from https://github.com/jsuarezruiz/maui-linux
maybe a separate github organization with own https://www.nuget.org/ packages etc etc

@lytico hey, sorry, I just spotted this github issue

if yes, there's a plan needed to get away from https://github.com/jsuarezruiz/maui-linux

What do you mean?

if yes, there's a plan needed to get away from https://github.com/jsuarezruiz/maui-linux

What do you mean?

at the time i opened this issue, nothing happened on https://github.com/jsuarezruiz/maui-linux (no PR's merged etc.)
this changed since then, so this issue is obsolete.

@lytico but it's now happening again (maybe because the maintainer has become a parent, I think I saw that in X), for example he's not answering in issue 93 where we have clearly found the problem (easier to do than reviewing a PR).


Top contributors adjacency matrix

Compare top contributor results from different count and network-based categorizing methods.

@mariashev did you do this in the last sprint?

Closed as it is in the "done" column


What is the permission to request access to reviews?

As a Stripe extension we could load radar reviews (https://stripe.com/docs/api/radar/reviews)
I see no permissions to access these reviews as a Stripe app.

Hi @clement911, the review_read and review_write permissions are now available for Stripe Apps and can be added using stripe apps grant by upgrading your Stripe Apps CLI plugin to 1.5.9 or newer (stripe plugin upgrade apps).


About: update content & format

@gcgbarbosa George, I'm not done yet, but I'd like you to have a look at the some of the format changes I've made before I continue further. Specifically, I've been trying to cut down on excess spacing by converting lists to lines of plain text followed by breaks. It looks fine in my browser, but perhaps I'm screwing things up for mobiles. Feel free to let me know if there is a better way to do this. Perhaps edit list style to reduce spacing?

Hi Brad,
Looks good to me.
Don't worry about messing up anything for mobile. I just checked the mobile version and it seems like it was not optimized for such devices since the beginning anyway. I will have to work on this during the code review. I think I have to re-write some parts of it to make it fit mobile guidelines.
Let me know when it is time to merge.

Hi Brad,
Looks good to me.
Don't worry about messing up anything for mobile. I just checked the mobile version and it seems like it was not optimized for such devices since the beginning anyway. I will have to work on this during the code review. I think I have to re-write some parts of it to make it fit mobile guidelines.
Let me know when it is time to merge.

@gcgbarbosa Changes to About are complete. Please go ahead and merge this branch to master.

Thanks @ojalaquellueva, it is on my todo list.


Router Transition Error when changing routes fast when mode is 'out-in', and with single div on root in the page.

Environment
Nuxt 3
Reproduction
apply a longer page transition and use 'out-in' mode, and an error occurs. i made sure every page has 1 div in the root and not multiple but still the error occures.
Describe the bug
apply a longer page transition and use 'out-in' mode, and an error occurs. i made sure every page has 1 div in the root and not multiple but still the error occures.
Additional context
No response
Logs
No response

Did you got this error migrating from 3.5.3 to 3.6.1? becouse i got the same error.

https://github.com/nuxt/nuxt/issues/22093
Is that the same issue as yours?

If the problem is exactly the same, there is a work around. you need to add the following code to /plugins.

 Here is the work around
let running: boolean
let nextRoute: string | null

export default defineNuxtPlugin({
  name: 'fix-transiton',
  setup(app) {
    app.hook('page:start', () => {
      const nuxtApp = useNuxtApp()
      running = false
      nuxtApp.$router.beforeEach((to, _, next) => {
        if (running) {
          next(true)
        }
        else {
          nextRoute = to.fullPath
          next(false)
        }
      })
    })
    app.hook('page:transition:finish', () => {
      const nuxtApp = useNuxtApp()
      running = true
      if (nextRoute) {
        nuxtApp.$router.push(nextRoute)
        nextRoute = null
      }
    })
    return {
      provide: {
        hooks: {
          'page:transition:finish': function () {
            const nuxtApp = useNuxtApp()
            running = true
            if (nextRoute) {
              nuxtApp.$router.push(nextRoute)
              nextRoute = null
            }
          },
        },
      },
    }
  },
})

I think the issue is being tracked in https://github.com/nuxt/nuxt/issues/13350. It's an upstream vue issue although it now occurs more frequently due to Nuxt using <Suspense> as the parent of layouts.


Mobile: Allow usage of a photo from iPad gallery

Currently adding a photo will only allow you to take a new picture, users want to be able to select a picture already taken on the iPad.

https://capacitorjs.com/docs/v5/apis/camera
We currently use Capacitor's Camera tool to get access. But we are likely not getting permissions for storage access, blocking us from uploading images directly through this context.
Good first place to look when working on this

Need Developer permission to get the app running on my personal ipad. Reached out for access.


Grid properties GridColumnStart and GridRowStart values are being passed as "px"

glamorous version: using codesandbox
glamor version: codesandbox
react version: codesandbox

Relevant code.

What you did:
Trying to set the gridColumnStart or gridRowStart property
What happened:

When trying to use grid layout the gridColumnStart or gridRowStart property is not being set. It is attempting to set it to pxs instead of a row or column number.

Reproduction:

https://codesandbox.io/s/MQGn08JLG
Problem description:
I've tested
Suggested solution:
I think this property value is being turned into pixels and it shouldn't be.

When I enter the property manually in the styles tab of dev tools it accepts it.

Seems like its already mentioned at threepointone/glamor#274

Noted, but since it's not on the main fork, when I searched for it I found nothing. Is there something I should have done differently to prevent this duplication? Second, I'm going to take a look and see if I can fix this, since it's a pretty low priority and that just sounds like a fun time.

Don't think so, I was just curious about the bug.
I already opened a PR to fix this.

I'll go ahead and close this since it's a glamor issue that's being tracked :+1:

Also, thanks for bringing it up @WillowHQ and for addressing it @tdeschryver!

Fyi, PR has been accepted and should be included in the next minor release (likely within a week).

Fyi, is live in live in<EMAIL_ADDRESS>


Meta type error when building the package

What happened?
When try to build the package, I get the following error:
crossplane: error: failed to build package: not exactly one package meta type

How can we reproduce it?
It was working. But suddenly just started to fail. The command is from README.md development chapter:
# Build a function package - see package/crossplane.yaml
$ crossplane xpkg build -f package --embed-runtime-image=kcllang/crossplane-kcl

What environment did it happen in?
This happens as a result of local development.

I removed crossplane.yaml by accident. Closing the issue.

No worries. Communicate anytime if you have any questions.


Also stick to bottom of StickyContainer

Hi there!
Not sure if this project is still being maintained, but I was wondering if there is a way to the Sticky element to not only stick when you scroll past the top of the StickyContainer but also stick to the bottom of the StickyContainer too rather than jump back to it's original top position?
Thanks :-)

@oldo I think this might be useful,
This component allows you to pass css classes, You can set bottom: 0 and make it sticky at the bottom of the page.
Stickky

Thanks for the heads up @ShyamRaj
I'll check this project out for sure :-)

Was also trying to stick it to the bottom, however, if you pass bottom: 0 styling via children div wrapper className it does not unstick when you scroll past the container and keeps being sticky at the very bottom of your viewport.

@kosanna I ended up taking @ShyamRaj's suggestion and am now using react-stickky which allows you to specify the id of the container that you'd like it to stick to the bottom of :-)

Whoops, didn't mean to close... I think this is still relevant to this project incase someone else picks up maintaining it again.

@oldo could you please help me a little then, because I can't see that you can pass id from the source code https://github.com/ShyamRaj/react-stickky/blob/master/src/index.js

Sure @kosanna
Just pass bottomBoundary as a prop. For example in one of my projects I'm using:
<Sticky top={160} bottomBoundary="#product-container">
The nice thing is that the item that you are referring to doesn't need to exist within the same file or component.
For anyone else landing here, this is in reference to ShyamRaj/react-stickky - a different project to this captivationsoftware/react-sticky :-)

Hold on! My bad... Actually, the project that I should of linked to originally is: https://github.com/yahoo/react-stickynode
Sorry for steering you in the wrong direction @kosanna :-)

@oldo I'm not quite sure I'm following what behavior you'd like. Are you saying that once you scroll down far enough so that the element goes out of view, scrolling back up should show the element at the bottom? That's the behavior I see in the examples.

Hi @vcarl
It's been a long time since I have thought about this issue but from memory the behaviour you are describing is what I was looking for but at the time it was not sticking to the bottom when scrolling back up the page. This was over a year ago though so it could be that a fix was released that I was not aware of.

Okay, I'm going to close this out then. Thanks for responding!

Hopefully this will be helpful. I was able to stick an element to the bottom when scrolling by overriding the style object.
<Sticky topOffset={350}>   {({ style }) => (     <div style={{...style, bottom: '0px', top: 'unset', zIndex: 1020}}>       // your content here     </div>   )} </Sticky>

I've switched to react-sticky-box  and it's doing ok


Slots not populating in Rasa X

Rasa version: Rasa 1.0.0
Python version: Python 3.7.3
Operating system (windows, osx, ...): OS X 10.14.4
Issue:
Slots are not populating properly in Rasa X's interactive learning mode. I have a slot called 'name' from the original domain.yml that's provided on rasa init and although there's a slot populated in the story that's created, it still says 'No slots' underneath Slots.
Content of configuration file (config.yml):
# Configuration for Rasa NLU.
# https://rasa.com/docs/rasa/nlu/components/
language: en
pipeline: supervised_embeddings

# Configuration for Rasa Core.
# https://rasa.com/docs/rasa/core/policies/
policies:
  - name: MemoizationPolicy
  - name: KerasPolicy
  - name: MappingPolicy

Content of domain file (domain.yml) (if used & relevant):
%YAML 1.1
---
actions:
- utter_greet
- action_spent_timeframe
- utter_goodbye
- utter_date_info
- action_spent_since
- utter_thanks
- utter_name
entities:
- name
- budget_action
- time_unit
- time_count
- end_date
- start_date
intents:
- greet
- spent_timeframe
- name
- date_info
- spent_since
- thanks
- goodbye
- deny
slots:
  end_date:
    type: text
  name:
    type: text
  start_date:
    type: text
  time_count:
    type: text
  time_unit:
    type: categorical
    values:
    - day
    - week
    - month
    - year
templates:
  utter_date_info:
  - text: Sure, what are the start and end dates? Here's an example date April 14
      2015
  utter_goodbye:
  - text: Talk to you later!
  utter_greet:
  - text: Nice to you meet you {name}. How can I help?
  utter_name:
  - text: Hey there! Tell me your name.
  utter_thanks:
  - text: My pleasure.

Here's a screenshot displaying my issue:

@anishrav great to see you're trying out rasa x! hmm that's certainly not intended behaviour, let me try and reproduce that and get back to you

odd, seems to happen only when it's a slot from an entity. We'll look into fixing it


Add retrospective broadcast

Summary
This PR adds retrospective broadcast to the channels. When the run's actions are configured to broadcast status updates to channels, we broadcast retrospective to the same thread.
Updated the Run actions dialog copies, needs review.

https://user-images.githubusercontent.com/4368372/181244657-d7148c57-fdee-40de-baf7-5985abf9cd16.mp4
Ticket Link
https://mattermost.atlassian.net/browse/MM-45175
Checklist

- [ ] Telemetry updated
- [ ] Gated by experimental feature flag

[ ] Unit tests updated

Thanks, @gbochora, this looks good to me! :)


Auto-following GET redirects, with header alteration

Gem version: 2.0.0
Running into an issue where an authenticated GET endpoint is returning a redirected to a third party, we wish to follow the redirect, but strip out the auth headers for security purposes. This is proving to be quite tedious, based on the documentation I'm following.
Simply allowing the auto-redirect to take over here is not acceptable in its current implementation, since it does not strip Authorization headers.
For example, here's some roughly put together code that looks real nasty to me.
headers = {'User-Agent' => 'foo bar', 'Authorization' => "Bearer #{my_auth_token}"}
max_redirects = 5
redirects = 0
loop do
  begin
    response = RestClient::Request.execute(method: :get, url: url, max_redirects: 0, headers: headers)
    raise StopIteration
  rescue RestClient::ExceptionWithResponse => err
    if [301, 302, 307].include? err.response.code
      url = err.response.headers[:location]
      headers.delete('Authorization')
      redirects += 1
      raise StopIteration if redirects > max_redirects
    else
      raise StopIteration
    end
  end
end

Is there a cleaner way to do this? Or maybe something on the roadmap for 3.0?

Hmm, I can imagine that this is a fairly common use case. It's not totally obvious to me what the right behavior ought to be though, since many headers you would expect to be carried through on redirects.
One way to handle it might be to add a parameter :redirect_skip_headers that contained a list of header names to drop when following redirects. This seems probably more straightforward than trying to determine whether a given redirect is to a third party or not.
So usage might look like:
RestClient::Request.execute(method: :get, url: url, headers: headers, redirect_skip_headers: ['Authorization'])

Pull requests welcome here. As long as the functionality is backwards-compatible, it could be considered for release in a new 2.x version.


update zh_TW translation

:exclamation: Please review the guidelines for contributing
Description
Updated zh-tw translation to latest version.

@5idereal thanks :+1:


fix unit-test for wsman's unknown friendly power state

Commit 75a8a724da48be27a132d203a383c71529710316 broke one of the
unit-tests around wsman.friendly_power_state() function.
Modified to test to conform to the new behaviour.

Thanks!

Released this, plus your other change in 0.6.0


Toasts are hidden when a modal is up

@benawad  I have tested this issue and toasts are working fine on my end please verify. I have attached a screenshot on this too.
The Steps I followed are

I created a test modal (covering all screen).
added a button to trigger toast
and toast was functional and I was able to close it.

I tried a simple code and it works.
      <button onClick={() => showErrorToast('test')}>
  Activate Error
</button>

No problem with this in Kibbeh (as far as I know. please reopen/create new issue if it's broken in kibbeh)


Upstream compatibility: RPC Service definitions

c.f. https://github.com/RainwayApp/bebop/pull/173/files#diff-765580732a8e5a2af5ce13353285bd400ef49d9b16a25620a1114355ac0de12e

Upstream bebop has allegedly released this support, but when you run bebopc 2.4.2, the latest release as of now, against the service defined in their wiki: https://github.com/RainwayApp/bebop/wiki/RPC, it errors:
[Compiler][Error] The given key 'string' was not present in the dictionary.

This error is not coming from bebopc code itself (at least not from cursory searches), so is more likely coming from some underlying library, and probably from some mismatch between the definition of what a service should be defined as between 2.4.2 and the writing of the wiki article.
So this will have to wait.

RPC is still in active development. A spec will be formalized in January.

Tempo / rpcs are viable to add support for, in theory, now.


Expose slasher's healthz in ha config

stefa2k/prysm-ansible#5
blocked by https://github.com/prysmaticlabs/prysm/issues/6433

blocked by #28


fix: Test connection whitelist added for gsheets

SUMMARY
Handles the case of throwing the following error message: An error occurred while creating databases: "Could not connect to database." when adding gsheets:// as a Database.
Fixes #11844
BEFORE/AFTER SCREENSHOTS OR ANIMATED GIF

TEST PLAN

ADDITIONAL INFORMATION

[ ] Has associated issue:
[ ] Changes UI
[ ] Requires DB Migration.
[ ] Confirm DB Migration upgrade and downgrade tested.
[ ] Introduces new feature or API
[ ] Removes existing feature or API

Codecov Report

Merging #11857 (4e6dc2d) into master (16e69f1) will decrease coverage by 4.06%.
The diff coverage is 75.00%.

@@            Coverage Diff             @@
##           master   #11857      +/-   ##
==========================================
- Coverage   67.59%   63.52%   -4.07%
==========================================
  Files         917      461     -456
  Lines       44727    28337   -16390
  Branches     4235        0    -4235
==========================================
- Hits        30231    18000   -12231
+ Misses      14393    10337    -4056
+ Partials      103        0     -103

Flag
Coverage Δ

cypress
?

javascript
?

python
63.52% <75.00%> (-0.64%)
:arrow_down:

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

superset/databases/commands/test_connection.py
92.50% <75.00%> (+0.39%)
:arrow_up:

superset/db_engines/hive.py
0.00% <0.00%> (-85.72%)
:arrow_down:

superset/db_engine_specs/hive.py
54.08% <0.00%> (-29.97%)
:arrow_down:

superset/db_engine_specs/presto.py
69.76% <0.00%> (-12.53%)
:arrow_down:

superset/db_engine_specs/mysql.py
79.59% <0.00%> (-12.25%)
:arrow_down:

superset/examples/world_bank.py
97.10% <0.00%> (-2.90%)
:arrow_down:

superset/examples/birth_names.py
96.51% <0.00%> (-2.33%)
:arrow_down:

superset/views/database/mixins.py
80.70% <0.00%> (-1.76%)
:arrow_down:

superset/models/core.py
87.33% <0.00%> (-1.62%)
:arrow_down:

superset/views/core.py
74.31% <0.00%> (-0.47%)
:arrow_down:

... and 465 more

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 16e69f1...4e6dc2d. Read the comment docs.

Thanks for fixing this, @FredrikBakken!
I'll update the gsheetsdb module to implement the do_ping method, then we can remove the whitelist.

I updated gsheets: https://github.com/betodealmeida/gsheets-db-api/commit/3c66a65d7cfae266d49c88761f51b02cea701242#diff-6c20da8e97bdaf0dea329cc2d6e0634cb67afad1ee29ff69d8c3e162ab1da5f3R129-R130

Thanks, @betodealmeida! Closing this pull-request as the whitelist is no longer necessary. Just make sure to use version 0.1.12 or higher of gsheetsdb.


Volume buttons not working [Android]

Hello,
When I try to change the volume by using the physical buttons, there is no effect. It is changing a new bar that has no effect.

How can I solve that ?
Thanks !

Do you use this to play web video successfully on Android?

@lekenny Yes I'm playing videos from a server.

I have the same problem like you. Do you have a solution?
Thanks !

I'm also getting this -when hardware button is used to adjust volume the device changes ringtone volume not media volume. In Java, this is what needs to be done "setVolumeControlStream(AudioManager.STREAM_MUSIC);
".
Does react-native-video do this?

For @Deevent it appears that he is changing the Chromecast audio rather than the video audio.
@hisham I'm pretty sure the Android MediaPlayer and ExoPlayer both let the device know that they are a media player and should adjust the music volume. If that's not happening it's likely because your video doesn't have sound or something like that.


Added Lombardia in Italy

This covers most of Lombardia, though some municipalities are missing, most notably the city of Milan. There seems to be ongoing work to bring the data from all municipalities online, so hopefully this gets updated in the near term.

There might be some issues with downloading the data directly. If so, it might need to be cached from here: http://www.geoportale.regione.lombardia.it/download-pacchetti?p_p_id=dwnpackageportlet_WAR_geoportaledownloadportlet&p_p_lifecycle=0&metadataid={16C07895-B75B-466A-B980-940ECA207F64}

Re-run this please

Using these these direct links you'll be able to download addresses open datasets about Lombardia Region divided on the Provinces ...
http://www.geoportale.regione.lombardia.it/rlregis_download/service/package?dbId=323&cod=12 --> Varese
http://www.geoportale.regione.lombardia.it/rlregis_download/service/package?dbId=323&cod=13 --> Como
http://www.geoportale.regione.lombardia.it/rlregis_download/service/package?dbId=323&cod=14 --> Sondrio
http://www.geoportale.regione.lombardia.it/rlregis_download/service/package?dbId=323&cod=15 --> Milano
http://www.geoportale.regione.lombardia.it/rlregis_download/service/package?dbId=323&cod=16 --> Bergamo
http://www.geoportale.regione.lombardia.it/rlregis_download/service/package?dbId=323&cod=17 --> Brescia
http://www.geoportale.regione.lombardia.it/rlregis_download/service/package?dbId=323&cod=18 --> Pavia
http://www.geoportale.regione.lombardia.it/rlregis_download/service/package?dbId=323&cod=19 --> Cremona
http://www.geoportale.regione.lombardia.it/rlregis_download/service/package?dbId=323&cod=20 --> Mantova
http://www.geoportale.regione.lombardia.it/rlregis_download/service/package?dbId=323&cod=97 --> Lecco
http://www.geoportale.regione.lombardia.it/rlregis_download/service/package?dbId=323&cod=98 --> Lodi
http://www.geoportale.regione.lombardia.it/rlregis_download/service/package?dbId=323&cod=108 --> Monza e Brianza
In this way I think that you can automatize the downloads also for future update!!
Do you need I prepare a separate JSON for each province?
Cesare

Hi Cesare, thanks a lot!
These seem to be the same links I have put into the JSON files before (see Files Changed at the top of this PR), but last time there were some issues for the machine to download them. I think that this is due to the need to accept the "terms" when you enter the Geoportale website, so it sets some cookie and the links do not work without that cookie. Any chance for a work-around on OA side (i.e. some sort of stateful "session" download, I am no expert) or asking the guys in Lombardia to open their links?
Sergiy

Use the OpenAddresses S3 uploader to upload the downloaded files.

On Dec 5, 2016, at 23:33, sergiyprotsiv<EMAIL_ADDRESS>wrote:
Hi Cesare, thanks a lot!
These seem to be the same links I have put into the JSON files before (see Files Changed at the top of this PR), but last time there were some issues for the machine to download them. I think that this is due to the need to accept the "terms" when you enter the Geoportale website, so it sets some cookie and the links do not work without that cookie. Any chance for a work-around on OA side (i.e. some sort of stateful "session" download, I am no expert) or asking the guys in Lombardia to open their links?
Sergiy
―
You are receiving this because you commented.
Reply to this email directly, view it on GitHub, or mute the thread.

Hi Sergi!
I've tried to download a zip file using wget and seems work fine .....
Here you're a sample that you can try
wget "http://www.geoportale.regione.lombardia.it/rlregis_download/service/package?dbId=323&cod=12" -O Varese.zip
So in this manner you can automatically download the zip files (I hope ... )

In Varese.zip file you'll find the shapefiles that you need

I seem to have found the issue with Lombardia: the address string in my original JSON files included the url encoding for the ampersand ("&"), whereas Cesare's links work well.
I have changed the files now, but the machine is still having problems with it, can you check? Also, could not easily fix the file for Varese (the last one, "va.json"), please change "&" to "&" in the URL there too.
Good news is that no uploads are required, should be sourced straight from the Region's website.

Ok, I think Lombardia is now done - it all gets downloaded straight from sources.
The bot has only plotted one province out of twelve though, perhaps it is related to the fact that this PR has multiple files, so it just took a random one of those.

Good! Are there any other open issues on Italy on which I can try to help?

@cesaregerbino These are the open Italy issues:

https://github.com/openaddresses/openaddresses/issues?utf8=✓&q=is%3Aissue is%3Aopen italy

If you can help sort thru them noting which ones have been addressed by your recent PRs (and close the issue) and which ones still need to be added (via new PRs) that would be a huge help. Thanks!


pizza example working?

I'm trying to run the pizza example on a pair of Beaglebone Green Wireless modules, one running the noble central and the other running the bleno peripheral. The central is able to find the peripheral and connect to it but discoverServices returns an empty array of services. Any idea why that might happen?

@dbetz could you please share:

debug logs: node DEBUG=* <file>.js
HCI dump capture: sudo hcidump -t -x

Maybe bluetoothd is still running on the bleno side?

Yes, bluetoothd is running on both the noble and the bleno side. Is that a problem?

I just noticed this in the output of hcidump on the bleno side. Could this be causing my problem?
2016-08-23 15:27:33.156270 > HCI Event: Command Complete (0x0e) plen 4
LE Set Advertise Enable (0x08|0x000a) ncmd 1
status 0x0c
Error: Command Disallowed

Yes, bluetoothd is running on both the noble and the bleno side.

See https://github.com/sandeepmistry/bleno#linux for bleno side.

I just noticed this in the output of hcidump on the bleno side. Could this be causing my problem?

No, this is just to clear advertisement state on startup.
Could you also share the full HCI dumps?

Here is the debug output as well as the hcidump output for the noble side. The hcidump for the bleno side was basically empty. Is that because I shut down bluetoothd?
bleno.txt
noble.txt

@dbetz

Is that because I shut down bluetoothd?

Yes, you'll also need to run sudo hciconfig hci0 to power up the adapter after closing bluetoothd.
From the logs:
  bleno platform linux +53ms
  bleno stateChange poweredOff +26ms

Before the run that produced the logs I posted, I did the following commands from a root shell:
systemctl stop bluetooth
hciconfig hci0 up
I think I got those two commands from the bleno readme. Is that not sufficient to guarantee that bluetooth is powered up?
Thanks,
David

On Aug 28, 2016, at 6:35 PM, Sandeep Mistry<EMAIL_ADDRESS>wrote:
@dbetz https://github.com/dbetz
Is that because I shut down bluetoothd?
Yes, you'll also need to run sudo hciconfig hci0 to power up the adapter after closing bluetoothd.
From the logs:
bleno platform linux +53ms
bleno stateChange poweredOff +26ms
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub https://github.com/sandeepmistry/noble/issues/441#issuecomment-243003804, or mute the thread https://github.com/notifications/unsubscribe-auth/AAq-1q3Nb0JsP5cGF1RYuBMX7ZLC6w3Vks5qkg0VgaJpZM4Jb9zi.

@dbetz

I think I got those two commands from the bleno readme. Is that not sufficient to guarantee that bluetooth is powered up?

If your system is using systemd yes. You can check if bluetoothd is running using something like: ps -eaf | grep bluetoothd

I did that and verified that bluetoothd was not running prior to starting peripheral.js.

On Sep 5, 2016, at 2:42 PM, Sandeep Mistry<EMAIL_ADDRESS>wrote:
@dbetz https://github.com/dbetz
I think I got those two commands from the bleno readme. Is that not sufficient to guarantee that bluetooth is powered up?
If your system is using systemd yes. You can check if bluetoothd is running using something like: ps -eaf | grep bluetoothd
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub https://github.com/sandeepmistry/noble/issues/441#issuecomment-244797766, or mute the thread https://github.com/notifications/unsubscribe-auth/AAq-1soU6bhhjwsup3X8z2SksqPyOMk-ks5qnGKwgaJpZM4Jb9zi.

@dbetz could you redo the HCI dump capture, since the previous ones you shared had the powered off state. Thanks.

Closing this due to lack of activity for now.


Fixes the tutorial link

Can you pull from the main branch? There was an update to ruff and there were some checks which needed to be fixed, and now are.

Can you pull from the main branch? There was an update to ruff and there were some checks which needed to be fixed, and now are.

I figured out how to do this on my end, thanks for you contribution!

Great thanks!


chore: only buffers response body if the mime type is the desired one.

Ping @M4tteoP

Thank you for contributing to Coraza WAF, your effort is greatly appreciated
Before submitting check if what you want to add to coraza list meets quality standards before sending pull request. Thanks!

Make sure that you've checked the boxes below before you submit PR:

[ ] My code includes positive and negative tests.
[ ] I have an appropriate description with correct grammar.
[ ] I have read Contribution guidelines, maintainers note and Quality standard.
[ ] My code is properly linted and passes pre-commit tests.

Thanks for your contribution :heart:

Codecov Report
Base: 78.08% // Head: 78.08% // No change to project coverage :thumbsup:

Coverage data is based on head (7bb2033) compared to base (bffb435).
Patch coverage: 100.00% of modified lines in pull request are covered.

Additional details and impacted files
@@           Coverage Diff           @@
##           v3/dev     #514   +/-   ##
=======================================
  Coverage   78.08%   78.08%
=======================================
  Files         145      145
  Lines        6876     6876
=======================================
  Hits         5369     5369
  Misses       1270     1270
  Partials      237      237

Flag
Coverage Δ

default
73.34% <100.00%> (ø)

examples
27.19% <100.00%> (ø)

ftw
55.44% <100.00%> (-0.04%)
:arrow_down:

tinygo
71.29% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

http/interceptor.go
45.34% <100.00%> (ø)

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

:umbrella: View full report at Codecov.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.

Thanks! I like it. The comments themself of   IsProcessableResponseBody() are suggesting that can be used by the servers, therefore an exportable function: https://github.com/corazawaf/coraza/blob/bffb4359d11967e9d13c7ec67a35868b1553ad1e/internal/corazawaf/transaction.go#L850-L851

@jptosso @piyushroshan shall we do the same for request body?


useFlexLayout is broken in v7.6.0

Describe the bug (required)
Changes introduced to useFlexLayout in v7.6.0 (see: #2639) seems to break full-width capabilities.
Provide an example via Codesandbox! (required)
Take a look at the original Full Width Resizable Table example in the docs, you will notice the issue on smaller screen sizes.
See screenshot below.
Steps To Reproduce (required)
Steps to reproduce the behavior:

Simply follow example of using useFlexLayout for full width with resizable columns: https://react-table.tanstack.com/docs/examples/full-width-resizable-table
Make the window small enough so that horizontal overflow occurs
Notice various unexpected width issues

Expected behavior (Recommended)
Full width is properly set on the entire table
Screenshots

Desktop (please complete the following information):

OS: Mac
Browser: chrome
Version: most recent

I believe this is resolved, the docs was never updated but basically you need add an overflow to the table itself see conversation in #2639


ui: Improve Optional validation popup

Important notices
Before you add a new report, we ask you kindly to acknowledge the following:

[x] I have read the contributing guide lines at https://github.com/opnsense/core/blob/master/CONTRIBUTING.md
[x] I am convinced that my issue is new after having checked both open and closed issues at https://github.com/opnsense/core/issues?q=is%3Aissue

Is your feature request related to a problem? Please describe.
This optional validation dialog looks a little outdated. I don't like that it shows a "bug" as a button, even though it is not a bug, it is a failed validation.
https://github.com/opnsense/core/blob/c0167704c3547ff11e63d523d4805d9fca401c0b/src/opnsense/www/js/opnsense_ui.js#L76
Describe the solution you like
I would like if the popup dialog would be nicer and less alarming in some way, showing right away what the problem is in a more user friendly way.
Describe alternatives you considered
It's mostly a cosmetic issue, so leaving it as it is.
Additional context
I'm using this dialog in the os-caddy plugin, since it shows otherwise hidden validations when fields in other views are validated. When it happens (which is quite often with the amount of validation), it is quite unexpected and it looks like a bug to the user (in my opinion).

A bit more context in https://github.com/opnsense/core/issues/6898 and older tickets. Getting rid of the dialog at least for base components is alright but it may not be feasible in all use cases.

@fichtner I don't want to get rid of that dialog. I just want it to look nicer and less alarming.
I need that dialog, it is important.

Hmm, I don’t think it’s needed for the average use case. Browser network debug also is better in many cases. I guess it depends… for special cases special solutions can be much better and offer contained code that doesn’t break elsewhere or taints it with unused hooks… such as this dialog boolean enable that is very hard to remove from the respective JavaScript function. 😉

I don't understand, I just want to improve the UX here.
Here's an example where I made it more clear that its a warning, and not a bug. And that it can be clicked to be expanded (it also has a tooltip)

errorMessage.append('Please correct validation errors in form.
');
errorMessage.append('Click to toggle details: ');
errorMessage.append('

');

If something like this is acceptable, I make a PR. If not, I can close this issue.

I don't understand, I just want to improve the UX here.

I get it. I just want to get rid of it instead. ;)
The concept of an "input validation" popup that is not human readable is just for debugging INO. Improving it takes time. Improving it for just 2 use cases is questionable, but feel free to propose a small PR.
I just think it's worth investing the time getting rid of it everywhere which would be higher value, longer term goal.
Cheers,
Franco

If there is a better longer term goal I want to go there.
But, how can we get rid of it everywhere. For example here:
https://github.com/opnsense/plugins/blob/15c20bde5cd99fd094b85cf0fc13ad308743499c/www/caddy/src/opnsense/mvc/app/models/OPNsense/Caddy/Caddy.php#L221
The validations trigger on two pages, the general.volt and the reverse_proxy.volt, while the user only sees the general.volt view. And even when the user would go into the reverse_proxy.volt, they could not see any validation errors, since they would be hidden inside the forms of each item.
Now, if there would be no option for a popup dialog that also shows the validation error of "out of view scope" items, the form could never be saved and there would be no feedback.

The validations trigger on two pages

Ok, but how does the user know he/she should go to the other page? For tabs I added a click/focus to bring the validation error into user view. For Unbound and DNSmasq it also cross-checks ports just telling the user that the port us currently used by another service: "Unbound DNS is currently using this port." no popup but all relevant information.
Cheers,
Franco

Oh... I think I understand. It would be better to append the validation error to an item in the form the user sees at the moment, additionally.
Then there is no need for a popup and there can be clear instructions.
Maybe I thought too complicated here.

Yes. There are rare cases where none of the elements currently visible block a save, but that's more of a general data integrity issue then. Triggering the dialog in these cases might be feasible, but as said that's a different approach for it vs. how it's currently being used. it would require processing the list of validation errors and removing the ones that could be pinned to the page only showing the ones not on the page... but if you have one on the page and one elsewhere showing both is also a bit weird as you lose focus of the page one since the popup tells you about something else entirely.


chore: refactor on DBEventLogger to allow for context management

SUMMARY

Inspired the discussion in #13346 to allow us to log events with context.
with event_logger(action='foo'):
	do_something()

BEFORE/AFTER SCREENSHOTS OR ANIMATED GIF

TEST PLAN

ADDITIONAL INFORMATION

[ ] Has associated issue:
[ ] Changes UI
[ ] Requires DB Migration.
[ ] Confirm DB Migration upgrade and downgrade tested.
[ ] Introduces new feature or API
[ ] Removes existing feature or API

@etr2460 it won't be a breaking change we mostly just moved some of the logic to log_context which we are leveraging for context management


Rework the matching algorithm using stable marriages

Thanks! Merged in https://github.com/Ekleog/todiff/commit/0dd348b941edf4c3f019f520cf8cba6f39e06e83 :+1:


Use lowercase f in formatting function names

Your project looks really nice!
When reading the examples, I propose to streamline function names to correspond to the naming scheme of fmt, log  and testing: fmt.Printf(), log.Printf(), t.Errorf() are all using lowercase f, whereas your package uses WarningF() DebugF() with capital Fs.
Proposal: Use lowercase f in your package as well, e.g. Warningf()

We have them already. See https://github.com/apsdehal/go-logger/blob/master/logger.go#L356 and related functions. Closing for now as "already exists".


Desktop notifications

Describe the solution you'd like
An easy API to interact with whatever the current OS's desktop notifications system is.
Describe alternatives you've considered
Manually launching a new window disguised to look like a desktop notification (not worth the effort)

Would we want to "polyfill" the web notification api so that notifications work the same as in a browser?

We didn't have this on our roadmap, but I like @nklayman 's idea for polyfilling. Nice one.

Seems like this would be a good library to use for that (behind a feature flag of course):
https://docs.rs/notify/5.0.0-pre.1/notify/
I think the right approach would be to make a tauri API that hooks into this feature that can then be called from JS or from RS

here's the branch where this is happening:
https://github.com/tauri-apps/tauri/tree/feature/notification

And here's the PR
https://github.com/tauri-apps/tauri/pull/505

Closed by #505
The notifications API is going to be accessible with the Notification WEB API. Currently we'll support title, body and icon.
Example:
Notification.requestPermission()
  .then(response => {
    if (response === 'granted') {
      new Notification('title', { body: 'some text' })
    }
  })


Add README.md to generated plunkers

The plunkers generated from documentation source examples should have a README.md.
Implementation suggestion
We can have a stock plunker.README.md in the _examples folder. If the sample's plnkr.json doesn't provide a README.md, we add this default version.
Not sure what it should say. We could start with this:
### Angular 2 Documentation Example

{{description from the plnkr.json}}

I'll do tomorrow


Fix MDP class and add POMDP subclass and notebook

Work in progress. In order to add a POMDP class that can derive from the MDP class, we require the MDP class to be made more consistent. For instance, it should not accept arbitrary empty arguments, and should have some consistency check.
I fixed this by restricting the usage of the MDP class, and by streamlining calls to it from GridMDP and CustomMDP. Previously, these derived classes were calling MDP and then setting the values of the transition matrix and actions (et cetera) of MDP within their respective __init__()s. I streamlined this to have only one broad call to MDP, setting all variables. Customization, if required, can still be done by delving into the base MDP class. However, I believe it the purpose of __init__ as a one-stop setup should be respected.
TODO: MDP can now be used as a generic skeleton for a POMDP class.
Besides, I have added a POMDP notebook with detailed explanations following the book. Implementation of POMDPs and value iteration to follow. I'm trying to think of an intermediate example between the 2-state case discussed in the book, and the grid search used for MDP. Something that can take advantage of computing power and 3D graphs (or other representations), but still be approachable and intuitive. Any suggestions?
@norvig, @MrDupin Any and all comments are appreciated.

It seems that the tests here are somewhat problematic.
tests/test_mdp.py contains test_transition_model() which previously listed the transition matrix as a dict keyed by state, of dicts keyed by action, of tuples like (0.4, 'A').
But the convention explained in the comments is that the effects of action $a$ on state $s$ should be a list of tuples of the above form. I have changed this test.
tests/test_rl.py is failing on test_PassiveADPAgent(). I'm finding this a bit hard to debug as PassiveADPAgent() isn't explained in the notebooks, and has thus been implemented, tested, but never actually used for demonstration purposes.
I plan to get to the bottom of this over the next few days. Hopefully MDP comes out of this cleaner and easier to use.

I think you should have checked open issues first. I am already working on this :(
Have a look at #760

Whoop @ad71, looks that that was about a week ago. No worries, we can combine efforts. :)

Sure @bakerwho . But as @MrDupin suggested, we are better off making a new POMDP class instead of inheriting from MDP. Changing the MDP class will break many tests and the notebooks will have to be rewritten. We just need to write a new class. Your pomdp notebook is nice. We can use that, but I'd suggest closing this PR, update your working directory and start afresh with a new PR.

@ad71 I feel that as the basic structure of MDP (a set of states, a set of actions for each state, a transitional probability on states and actions) will be exactly the same as that of POMDP, and it is duplicating of effort, as well as allowing for inconsistency, if we rewrite that basic stuff for the POMDP class.
Besides, delving into the problems with MDP has helped me fix some a foundational bug in rl.py which is built on it. As you can see above, the class PassiveADPAgent which is built on MDP was failing to update the MDP states after making local copies of them. This caused the tests to fail.
Keeping MDP cleaner, and avoiding the duplicating of code - will help prevent such issues in the future. Can your advice on #760 be reconsidered, @MrDupin? @norvig, awaiting your comments.

@bakerwho you seem to have a better idea of what you're doing. Let's wait for @MrDupin and @norvig .

@norvig @MrDupin any comments or should I continue working on this?

I'll have to study more carefully to see what to do with MDP/POMDP in the long run, but for now, these changes look helpful.


Get Artifact System setup (Artifactory?) in MCP

Use existing SPS docker containers to fill the artifact repository, and update the deployment pipeline to pull from the new artifact repository
candidates: Github Containers?
Github Packages
AWS/MCP solution (ecr)
Artifactory

From talking to Jonathan, we think we might be leaning towards using Github Releases for this purpose, and may not actually need Artifactory??

For now, certain service areas are using GHCR, but U-CS will find a more long-term solution.


feat: adjust code editor font size

Description
New
Adds a setting to configure the code editor font size. Setting is applied to

Request body editor
Script editor
Tests editor
Docs (edit-mode)
GraphQL Query editor
GraphQL Variables editor

https://github.com/usebruno/bruno/assets/1665841/601dace9-d487-4414-ab1a-2e793948e674
Fix
Fixes font-family not being applied to GraphQL query editor.
Before
https://github.com/usebruno/bruno/assets/1665841/60294e21-1128-47dc-8404-77a23ea74e0c
After
https://github.com/usebruno/bruno/assets/1665841/c4792ca3-6af6-4caf-b428-a4baccaf9bba
Contribution Checklist:

[ ] The pull request only addresses one issue or adds one feature.
[x] The pull request does not introduce any breaking changes
[ ] I have added screenshots or gifs to help explain the change if applicable.
[x] I have read the contribution guidelines.
[ ] Create an issue and link to the pull request.

I've tested locally, that works.
Thanks for it @krummbar


Suspicious return type

ec_GFp_nistp_points_make_affine_internal(...) accepts a function pointer which has a suspicious type (ecp_nistputil.c):
int (*felem_is_zero) (const void *in)
The return type is "int", but one of the assumed values of the function pointer is felem_is_zero_int(...) from ecp_nistp224.c, which returns "limb" (uint64_t).
This shouldn't result in an accidental register clobber on the standard set of x86/ARM calling conventions (RAX, EAX/EDX, and r0-r4 are generally not preserved across function calls). This may be an issue if some other calling convention is in use.

I think this is a valid concern.

I wonder how come this is not caught by strict warnings... Ah! There is explicit cast to (int (*))...
It should be noted that while concern is formally grounded, suggested clobbering problem is not the reason. Note that there is explicit cast to int followed by implicit cast to limb. This formally guarantees that upper half of return limb is zeroed, i.e. not clobbered. But that's not the real problem. Real problem is that on big-endian[!] 32-bit[!] systems implicit cast to 64-bit value would place upper half of return value to register that would otherwise receive 32-bit integer return value. However! Module in question can't be compiled on 32-bit system. Nor can it be compiled on big-endian system. Well, "can" in latter sentence means rather that it won't produce correct result. In fact there are requirements formulated for this module. The target system has to be 64-bit little-endian one, and it has to be able to sustain unaligned load. In other words the problem never occurs in practice. But this doesn't mean that it would be inappropriate to resolve formally inappropriate cast :-)

Yes, the cast is definitely evil.
I think it is possible that int64_t can be returned in completely different registers than int.

In other words the problem never occurs in practice.

It came out a bit misleading in the context. Cast doesn't cause problem in practice, because it doesn't cause problem on systems that meet the requirement.

Yes, fortunately, there is no actual problem with any known target.
However, I believe that it was the author's intention to provide a wrapper function
around felem_is_zero that returns int here, therefore the name with suffix _int.
nistp256 and nistp521 do that correctly, this one looks like a simple oversight.

I think it is possible that int64_t can be returned in completely different registers than int.

I've never seen that... Well, I bet standard doesn't actually says that it can't be the case and surely declare it as implementation-specific. At least we know that floating point values are customarily returned in separate registers. And this kind of calls for following question. Wouldn't it be appropriate to get rid of (int (*)) cast in ec_GFp_nistp_points_make_affine_internal call? I mean that #4450 should not only change the return value, but even argument...

I know what you mean, but there are many more type-casts around in this module.
And I share your feeling about those....

this one looks like a simple oversight.

I don't argue against that, nor am I saying that we shouldn't fix it. What I'm saying is that maybe the fix should really aim for removal of (int (*)) cast in ec_GFp_nistp_points_make_affine_internal call. Maybe in all ecp_nistp modules ;-)

I can have a look, maybe it is more easy than it looks at first sight...

Sure it's easy. Since it's effectively a wrapper function, it can as well accept void * and [implicitly] cast it to felem.

All those type casts look somehow invalid:
                                             (void (*)(void *))felem_one,
                                             (int (*)(const void *))
                                             felem_is_zero_int,
                                             (void (*)(void *, const void *))
                                             felem_assign,
                                             (void (*)(void *, const void *))
                                             felem_square_reduce, (void (*)
                                                                   (void *,
                                                                    const void
                                                                    *,
                                                                    const void
                                                                    *))
                                             felem_mul_reduce,
                                             (void (*)(void *, const void *))
                                             felem_inv,
                                             (void (*)(void *, const void *))
                                             felem_contract);

On side note. If we go back to question about why wasn't it caught by strict warnings for a moment. Wouldn't it be meaningful is compiler warned about explicit[!] cast between pointers to functions that return incompatible types? Well, this is wrong forum to pose the question, but you, Bernd, might be right person to facilitate the answer ;-)

Yes!!!!

All those type casts look somehow invalid:

Well, I was thinking exclusively about is_zero. Of course if we widen the scope, it might get out of control. I suppose suggestion is to limit #4450 to is_zero and postpone the rest for another request...

Okay, agreed.

I think it is possible that int64_t can be returned in completely different registers than int.

I've never seen that...

In a sense I contradict myself. The way 64-bit values are returned on 32-bit big-endian systems can be viewed as "different registers". I suppose my mind got confused by "completely". I mean when I read "completely different registers" I thought "no, they are [always] same [integer] registers"... Sorry about possible confusion...

Andy, implementing a warning as suggested seems feasible.

implementing a warning as suggested seems feasible.

Cool! Thanks :-) But that would have to be another story, while this one can be closed. Well, there is suggestion to sanitize even more pointer-to-function casts, but I suppose it would be more efficient if we let them surface with new warning. I mean we can let computer help...


Command "php7cc" is not defined.

I followed the instructions as listed and added the $PATH information into my .bash-profile ... however, it doesn't run. I keep getting this error:
 [Symfony\Component\Console\Exception\CommandNotFoundException]
Command "php7cc" is not defined.

if I echo $PATH, this is what I get (assuming it's right)
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Applications/Server.app/Contents/ServerRoot/usr/bin:/Applications/Server.app/Contents/ServerRoot/usr/sbin:/Users/bmyers/.config/composer/vendor/bin

not sure what I'm doing wrong.
I'm on macOS Sierra running PHP 5.6. I even tried running it locally in my project (installing it there as well per the instructions) and I get the same error.

Okay ... so I found the issue ... saw this previously closed issue which helped: https://github.com/sstalle/php7cc/issues/103
however, what I found was that the instructions said to use
export PATH="$PATH:$HOME/.config/composer/vendor/bin"

but I needed was
export PATH="$PATH:$HOME/.composer/vendor/bin"

all is well and working now 👍


join: add support for full outer joins

Currently, join only allows one instance of -a or -v. GNU Coreutils allows using these multiple times, as well as mixing them, to do full outer joins. This matches that behavior. Gets two more of GNU's join tests to pass. Also makes -a and -v behave more similarly with invalid values.

Looks good! Thanks!


chore: go-qs1 to 0.0.3

chore: Promote go-qs1 to version 0.0.3

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

Needs approval from an approver in each of these files:

OWNERS

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