How to use it in azure function?

I read the documentation and it says that i can use this outside ASP.NET. I am trying to implement it in azure functions, but the usage of 'HttpContext.RequestServices' looks a bit strange to me and i dont know how to get around it. Is it possible to use this with isolated out of process azure functions? Also maybe AddGraphQLSchema shouldnt be in AspNet part of the library? Because its very useful for dependency injection and has nothing to do with ASP.NET itself, no?

https://entitygraphql.github.io/docs/getting-started#custom-controller--manual-execution this shows how to do it with a ASP.NET controller but you should be able to adapt that to something else.

yes thats the example i tried to adapt for azure functions
var results = await _schemaProvider.ExecuteRequestAsync(query, _dbContext, HttpContext.RequestServices, null);
i see that theres a separate method ExecuteRequestWithContextAsync, the documentation is not up to date, but thats fine.
the main issue is that i dont have IServiceProvider. I also dont see a reason for this library to require authService or webHostEnvironment  when the only purpose of this method should be to fetch graphql data from db.
i played around with asp.net implementation, works perfectly, i wish i could add it as another function next to my other functions.

There's an old example in the repo here - https://github.com/EntityGraphQL/EntityGraphQL/tree/master/src/examples/AzureFunctionApp
It's fairly easy to update to dotnet-isolated if needed though.

it worked! thanks! i swear i tried the same thing, but i guess i missed some small part. thanks a lot for quick help!

i have an additional small question, not sure if i should create a separate issue.
would it be possible to enable paging, filtering and sorting for all tables on schema level? is it an additional feature request, maybe its planned already or the decision is already made not to have it?

Today, you would need to add
[UseFilter]
[UseSort]
[UseConnectionPaging]
// or, use only 1 [UseOffsetPaging]

on all the list fields you want it on in your DbContext.
Feel free to add a request to have the an option in SchemaBuilder

SchemaBuilder has OnFieldCreated event that might allow you to do it? Maybe it's new?
   // Add Sort to all list fields
   OnFieldCreated = (field) =>
    {
        if (field.ReturnType.IsList && field.ReturnType.SchemaType.GqlType == GqlTypes.QueryObject && !field.FromType.IsInterface)
        {
            field.UseSort();
        }
    }

Ahh yes, that is even in the docs :) That is another way too. Thanks

it is not that straightforward, i need more help if you dont mind.
should filter and paging work with same configuration?
if (field.ReturnType.IsList && field.ReturnType.SchemaType.GqlType == GqlTypes.QueryObject && !field.FromType.IsInterface)
{
    field.UseFilter();
    field.UseSort();
    field.UseOffsetPaging();
}

UseConnectionPaging() doesnt work for me
{
    "errors": [
        {
            "message": "Field 'documents' - No generic method 'Select' on type 'System.Linq.Enumerable' is compatible with the supplied type arguments and arguments. No type arguments should be provided if the method is non-generic. "
        }
    ]
}

UseOffsetPaging() partly works but for child properties it is very very slow. much slower than without paging.
GraphQL no longer uses JOIN operation
{
  documents(take: 5, skip: 5){
    items{
        id
        attachments{
            totalItems
        }
    }
  }
}

this query fetches all attachment data
SELECT [a].[Id], [a].[AttachmentType], [a].[CreatedAt],....
FROM [Attachments] AS [a]
and if i try to add any items under attachments i get an error:
"Field 'documents' - Could not find arguments for field attachments in compile context."
also is the schema provider different for ASP.NET DI? for example in documentation i see method 'ReplaceField' but its not evailable on my schema. Also sometimes variable is called schemaProvider sometimes schema, but the class is (same?) SchemaProvider.
I tried looking through tests, but sadly i cannot install ANTLR on my machine.

i got it to work with LEFT JOIN, but the configuration is not for all tables/fields:
schema.Query().ReplaceField("documents",
      db => db.Documents.OrderBy(e => e.Id),
      "Get a page of movies"
    )
    .UseConnectionPaging();

it would be nice to have one method on options or schema level: like schemaBuilderOptions.UseOffsetPaging() and it would properly use paging everywhere where possible.

Sorry, reading it again, there is more

and if i try to add any items under attachments i get an error:
"Field 'documents' - Could not find arguments for field attachments in compile context."

This is a bug as well, it should produce a valid expression

also is the schema provider different for ASP.NET DI? for example in documentation i see method 'ReplaceField' but its not evailable on my schema. Also sometimes variable is called schemaProvider sometimes schema, but the class is (same?) SchemaProvider.

SchemaProvider is the same. ReplaceField is on a ISchemaType or SchemaType<T>. SchemaProvider is the full schema. root fields exist on the schema type Query so you can schema.Query().ReplaceField().
SchemaProvider provides 3 helpers to 3 main types defined in the GraphQL spec .Query(), .Mutation() and .Subscription(). You can access all other types like schema.Type<Document>().ReplaceField()

i have indexes, foreign keys setup properly. i think the problem is when the structure is 3 layers deep, then with paging it adds either items or edges + node to each layer and then it cannot translate properly back to original structure.
if i explicitly setup paging with ReplaceField i do it for top layer only and that works.
So to reproduce it you could create 3 layer deep structure and use recursive paging setup. I get different errors with both UseOffsetPaging and UseConnectionPaging
if (field.ReturnType.IsList && field.ReturnType.SchemaType.GqlType == GqlTypes.QueryObject && !field.FromType.IsInterface)
{
    field.UseFilter();
    field.UseSort();
    field.UseOffsetPaging();
}

Ahh, right, yes that is adding paging to every field. Which you may not want.
If you only want it on the root fields (fields on the root GraphQL query type) you could check the FromType
if (field.FromType.TypeDotnet == field.Schema.QueryContextType && field.ReturnType.IsList && field.ReturnType.SchemaType.GqlType == GqlTypes.QueryObject && !field.FromType.IsInterface)
{
    field.UseFilter();
    field.UseSort();
    field.UseOffsetPaging();
}

A helper method for knowing if the field is a root field might help. But that should work today.

Thanks a lot for the help, i appreciate it. I want all the functionality to work, i would probably use filter+sort+paging on all properties if available and if the queries were well optimized. But yeah paging on top level is most important. I got started with GraphQL recently on a completely different architecture project and i would like to do the same with .net. There we use postgraphile, it has its own drawbacks but layered queries with all settings seems to work better. It also has a nice feature 'queryCost', it calculates query's cost and its also possible to set a limit on it.

The query should already be fairly optimized based on how the library works, it would be useful if you could do some sql profiling to show what it is executing or create a small reproduction of the issue in a sample project.

i created a project for reproduction: https://github.com/taipignas/EntityGraphQLLayers
couple queries to try out
{
   projects{
    totalItems
    items{
        id
        documents{
            totalItems
        }
    }
   }
}

{
   projects{
    totalItems
    items{
        id
        documents{
            items{
                id
            }
        }
    }
   }
}

ok, so if I disable the pagination and run this query
{
   projects{
	id
        documents{
            id
        }
   }
}

then i get 3 queries
SELECT CASE
    WHEN EXISTS (
        SELECT 1
        FROM [Projects] AS [p]) THEN CAST(1 AS bit)
    ELSE CAST(0 AS bit)
END

SELECT [p].[Id], [d].[Id]
FROM [Projects] AS [p]
LEFT JOIN [Documents] AS [d] ON [p].[Id] = [d].[ProjectId]
ORDER BY [p].[Id]

SELECT CASE
    WHEN EXISTS (
        SELECT 1
        FROM [Projects] AS [p]) THEN CAST(1 AS bit)
    ELSE CAST(0 AS bit)
END

not sure what the select case is for, but can see the nice left join in the middle query.
enabling pagination and running the following modified query (need to do it with an equiv once the first bug is fixed)
{
   projects{
    totalItems
    items{
        id
        documents{
            totalItems
        }
    }
   }
}

I get 5 queries
SELECT CASE
    WHEN EXISTS (
        SELECT 1
        FROM [Projects] AS [p]) THEN CAST(1 AS bit)
    ELSE CAST(0 AS bit)
END

SELECT COUNT(*)
FROM [Projects] AS [p]

SELECT [d].[Id], [d].[DocumentType], [d].[ProjectId]
FROM [Documents] AS [d]

SELECT [p].[Id]
FROM [Projects] AS [p]

SELECT CASE
    WHEN EXISTS (
        SELECT 1
        FROM [Projects] AS [p]) THEN CAST(1 AS bit)
    ELSE CAST(0 AS bit)
END

2 of those select case statements
1 to grab the total count
then separate ones for Documents and Projects (not joined) and weirdly pulling back all projects even though we only wanted the count.
Yeah there's definitely a bug here, should probably be split off into a new issue.

oh interesting, it's because project.documents is an ICollection and therefore not treated as a IQueryable  (changing the property to IQueryable makes it a SQL count - although no idea what else that then breaks)
(eg it's using the IEnumerable Count instead of the IQueryable Count and therefore pulls back the full table).
That's rather interesting as

It's the recommended type to use efcore (at least the documentation always uses ICollection)
It's smart enough to merge them together into one query against the documents table, but not smart enough to realise it's IQueryable

Interesting. Thanks @bzbetty and @taipignas.
The expression also look wrong as it is using the db context for documents? p_DocumentDbContext.Documents.Count() should be p_Project.Documents.Count().
It seems the way the paging expressions work, is it builds expressions assuming they are a top level property.

oh nice catch! yeah looking at the json response it's totally putting the total counts as the table count and not the related files

@taipignas I couldn't get that project you shared running, something about The gRPC channel URI 'http://:' could not be parsed.. I haven't dug into it.
I think it may be related to and fixed by the changes for #358 where it could reuse other paging expressions. I added a test but that passes and it passed with 5.2 as well.
Any help reproducing this would be great, or confirming that the fix in master does resolve your issues. Thanks.

I'm closing this as I cannot currently reproduce. I believe #358 fixed the issue with the reuse of the expression. Please open a new issue if you find a reproduction.


Rescale color map

One issue that crops up fairly often with lockin measurements (though other measurements probably suffer from similar issues) is that a transient completely ruins the color scale and leaves 99% of the data at one end of the color bar.  It would be nice to be able to set the range of the color bar manually in the GUI and have the color scale in the plot change accordingly.

@wpfff has this been solved by our current colorbar adjustment in the pyqtgraph backend?


Clean up prompt handling

Raw cells and markdown cells should not have a prompt.
Fixes #185.

Great, thank you! Need this for https://github.com/jupyter/jupyter-js-notebook/issues/170


support for ECDSA TLS certificates

Describe the bug
I have created a new TLS certificate (via Let's Encrypt) and the default type is ECDSA.  This works with modern web browsers, but I think the library supporting the TLS options for the API-SSL method isn't handling a certificate of this type.
To Reproduce
Steps to reproduce the behavior:

Create a mikrotik node with the configuration for API-SSL appropriate host, port, username and password - also SSL chosen as API-SSL.  I was using a System resources action in the node.

Create a injector node.

Connect the two nodes.

The node-red server errors out with:
14 Jul 17:38:59 - [error] RosException
    at Connector.onError (/data/node_modules/node-routeros/dist/connector/Connector.js:176:15)
    at TLSSocket.emit (node:events:527:28)
    at emitErrorNT (node:internal/streams/destroy:157:8)
    at emitErrorCloseNT (node:internal/streams/destroy:122:3)
    at processTicksAndRejections (node:internal/process/task_queues:83:21)

Expected behavior
The command executed and the response is received by node-red.
Screenshots
n/a
Version (please complete the following information):

OS: [e.g. iOS] - MacOS (node-red running in a docker container on an Ubuntu host)
Browser: [e.g. chrome, safari] - Chrome
Node-Red: [e.g. 1.x] - v3.0.2
node-red-contrib-mikrotik - v0.7.0

Additional context
I adjusted the settings to use a non SSL/TLS API call and it works, so the RouterOS version on the Mikrotik router is fine.
I am wondering is an underlying library in Typescript and/or Javascript needs updating?

the issue is the underlaying library is not maintained any more. If you find a new library that could work, just reopen that issue and sent it to me.


How do you deal with saves that have timestamps in the name?

What's your question?
First off want to say excellent program, this is exactly what i needed to deal with syncing saves across all my devices.
I have a bit of an issue with the classic Resident Evil, the save files have timestamps in the name, i want to only keep two saves across my systems, if i keep back them up on one system, and then restore on the other, they end up accumulating:

i had this exact same issue with my own home brew bash script that made use of rsync, it was tedious dealing with these edge cases, im wondering if im doing something incorrectly

Yeah, that's tricky. Ludusavi doesn't handle this right now, but I can look into it. There was a somewhat similar issue here: https://github.com/mtkennerly/ludusavi/issues/253

First off want to say excellent program, this is exactly what i needed to deal with syncing saves across all my devices.

Thank you :D


Nvidia GPU actual brightness

Hi, with my NVIDIA GeForce RTX 3070 Mobile / Max-Q GPU the values in /sys/class/backlight/nvidia_0/actual_brightness are always in 0..10 range, however values in /.../nvidia_0/brightness are from 0 to 100, and /.../nvidia_0/max_brightness/ is 100. So, waybar always shows something between 0%-10% instead of 0%-100%.
What is even worse, brightness settings are weird. To be specific, 0-10 and 11-100 are two different scales, meaning that both 10 and 100 correspond to actual brightness 10, while brightness 11 corresponds to actual brightness 0 and brightness 90 corresponds to actual brightness 7.
Is there anything that could be done to fix it?

Have the same problem (nvidia gtx1650). By looking at the code, the backlight module is reading from actual_brightness, so it makes sense why the values shown in the bar are always 0-10. I guess there is a reason for reading from actual_brightness instead of brightness, and changing that might show the wrong values to other ppl. So maybe it's better to add the ability to select what should the module follow - brightness or actual_brightness. Or maybe having two modules: backlight and backlight-actual.

same issue

Same issue for me


Game crashes when trying load custom scd index

I was having crashes trying to use an edited scd. I changed multiple indexes. To troubleshoot, I only changed se_ttriad.scd/8 which is the sound that plays when displaying the rules.

The .wav is shorter duration than the sound that was in there. I've attached the changed scd and .wav file I used.
dalamud-vfxeditorissue.zip

after doing some testing, yeah it seems like having a shorter duration .scd does mess it up. I wonder if it's because there's something which is instructing the game to play the sound for x amount of seconds, which it can't. I'll keep digging into it, though. for now I guess you can use audacity or something to add silence to end of the sound clip, which seemed to work for me


forcing network resolutions

Hi, really sorry if this is not the place for questions, I did not find any guideline how to ask, so I ask here.
Is there a way of intercepting DNS resolutions and forcing to use a specific IP for a specific hostname using code?

I'm not ware of such a way. Is it okay to do it with the system's hosts file?

Haha, I thought about it but it does not scale that well if it was possible it would be a matter of compiling and deploying everywhere and being more flexible, editing hosts file is not what I would have preferred, thanks for your response anyway.

Hi, i am also interested in this. I tried to change the /etc/hosts file to point to my local server for a given domain but chrome does not seems to respect that (running headless) and goes to the original one. I also tried some arguments/flags that should have been working (puppeteer):
https://bugs.chromium.org/p/chromium/issues/detail?id=798793
chromedp.Flag("host-resolver-rules","MAP domain.se XXXXXX"),
chromedp.Flag("host-rules","MAP domain.se XXXXX"),
To no avail. Chrome seems to use some other dns resolving mechanism ?
I am just trying to navigate to the url and capture the html string
var h string
        if err := chromedp.Run(chromedepCtx,
        chromedp.Navigate(url),
        chromedp.InnerHTML("/html/body", &h),
        ); err != nil {
                panic(err)
        }
        fmt.Printf("Description HTML... :\n%v", h)

Running this version of chrome:
Installed Packages
Name        : google-chrome-stable
Arch        : x86_64
Version     : 97.0.4692.71
Release     : 1
Size        : 271 M
Repo        : installed
From repo   : google-chrome

Some updates, it seems that edit hosts are actually working, with logging i see that the reponse "remoteIPAddress" header is from my IP, i forgot to add www to the domain...
But now chrome stops at
panic: page load error net::ERR_SSL_PROTOCOL_ERROR
even if i add alot of arguments like.
//chromedp.Flag("ignoreHTTPSErrors",true),
chromedp.Flag("ignore-certificate-errors", true),
chromedp.Flag("allow-insecure-localhost","1"),
chromedp.Flag("ignore-certificate-errors","1"),

Thanks @lundin! I have tried the host-resolver-rules and host-rules options. And both of them work for "forcing network resolutions".

Hi @ZekeLu Great! It was my misstake, i was running caddy (a reverse proxy) on the server which now resolved the dns. Caddy tried to redirect any http to https so i added a new rule for the http://domain.com and then it worked. So all in all great stuff :)


Nagging Native Bits - ImageLoader

I have seen a few posts on the forum about sage crashing out unexpectedly - seemingly tied to image management in some way (screensaver seems to be the common cause).  What is sage gaining from doing imageloading, and especially scaling, in native code?  This seems to needlessly complicate the issue, and I think we'd end up quite a bit more stable if we could roll this stuff into java.  I think I'd take a slight performance hit over a unrecovered crash - though I wonder if newer java api's have made the need to go native for this obsolete.
A forum search for "native imageloader" presents a list of 'random crash' events stretching back about a decade.

Go into detailed setup, advanced and disable the optimized image loader,
then I'm pretty sure it won't use native code. Using native code for it is
a major optimization and it was also needed for the extenders (for the
local UI, not extender mode).
Most of those crashes are in direct3d, which you have to use regardless of
native vs. Java image loading. I'm not aware of any current crashes in the
actual native image loader we use and haven't seen a report pointing to
that in awhile.
Jeff Kardatzke
Sent from my Android
On Jun 15, 2017 1:54 AM, "Christopher Piper"<EMAIL_ADDRESS>wrote:

I have seen a few posts on the forum about sage crashing out unexpectedly

seemingly tied to image management in some way (screensaver seems to be
the common cause). What is sage gaining from doing imageloading, and
especially scaling, in native code? This seems to needlessly complicate the
issue, and I think we'd end up quite a bit more stable if we could roll
this stuff into java. I think I'd take a slight performance hit over a
unrecovered crash - though I wonder if newer java api's have made the need
to go native for this obsolete.

A forum search for "native imageloader" presents a list of 'random crash'
events stretching back about a decade.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/google/sagetv/issues/304, or mute the thread
https://github.com/notifications/unsubscribe-auth/ANEIDJOlQmTMvcwpxs5CHFArPRGjRooPks5sEPFfgaJpZM4N66rf
.

I could consistently cause SageTV to crash when loading .tiff files that were from a scanner.  The crash would happen if the image happened to come up in the ScreenSaver or if you browsed to the folder containing the image (which would cause a thumbnail to load) in the Photos options from the main menu.  I was able to reproduce this and try it on several severs, although I don't know that I still have the problematic file(s).  And this happened on V9 Linux, V9 Windows and V7 Windows.  See this thread https://forums.sagetv.com/forums/showthread.php?t=64299

I recall fixing some TIFF issue a little while back, but if there is still
one in there I would just need an example of it to fix it. ☺
Jeff Kardatzke
Sent from my Android
On Jun 15, 2017 10:20 AM, "wayner9"<EMAIL_ADDRESS>wrote:

I could consistently cause SageTV to crash when loading .tiff files that
were from a scanner. The crash would happen if the image happened to come
up in the ScreenSaver or if you browsed to the folder containing the image
(which would cause a thumbnail to load) in the Photos options from the main
menu. I was able to reproduce this and try it on several severs, although I
don't know that I still have the problematic file(s). And this happened on
V9 Linux, V9 Windows and V7 Windows. See this thread
https://forums.sagetv.com/forums/showthread.php?t=64299
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/google/sagetv/issues/304#issuecomment-308810819, or mute
the thread
https://github.com/notifications/unsubscribe-auth/ANEIDHMspe3HBGMGHKEkcvvuceaQK760ks5sEWfCgaJpZM4N66rf
.


uninstall-extension should remove both local and remote extension

Fixes #114542

Made the changes as discussed

Made the changes as discussed


Create Failure Definition Reports

Please create savable and printable reports for the Failure Definitions.  These reports should include, at minimum:
1. Excel (*.xls[x])
2. LibreOffice/OpenOffice (*.ods)
3. XML
4. Text
5. Delimited text (*.csv)

.xml format will not be supported.  See #1086 for *.ods support.


implementation of Protobuf for Swift Encodable / Decodable

At the moment, the centrifuge-swift only support Protobuf protocol, I have an old Swift codebase with JSON protocol that uses Encodable/Decodable and Because it's too much work for me to change that, is it possible to encode/decode Protobuf with Encodable? Is there any library that implements Encodable and Decodable on Protobuf protocol?
Any suggestions would be helpful.

@hnazari1990 hello, you can still send JSON with this library - since JSON payload can be easily transferred inside Protobuf frames. You don't need to encode your application data to Protobuf.

Closing as no response from op


Blazor app - lock on AssignIdentity when inserting

Hi!
Currently I'm developing Blazor Server Side app using Marten as document database and event store (awesome tool!).
I'am facing problem with lock when I'm trying to insert document with Id of type 'int'. If I am correct - this problem occures only on Blazor apps.
Way to reproduce:
1: Create new Blazor Server Side app
2. Add Marten
3. Execute some read query using Marten
4. Try to execute insert
Result should be lock on invoking session.Insert(object)
I have debugged Marten internals and I found out that lock happens in MartenDatabase.cs on method resetSequences (generateOrUpdateFeature).
It looks like Lazy initialization of _sequences on Blazor apps couses problems. When I have been debugging I tried to remove lazy initialization and it solved the problem for me, but I don't know if that is acceptable solution since (if I am correct) _sequences are needed only for HiLoIdGeneration and IdentityKeyGeneration.
Also I found workaround for this problem. If first operation you invoke using Marten is session.Insert(object) - then _sequences are initialized and lock doesn't occur anymore in blazor apps.
It looks like generally on Blazor apps, method generateOrUpdateFeature couses some problems with locks - similar issue:
https://github.com/JasperFx/marten/issues/2030

You can somewhat easily work around this w/ the new 5.0 release using the ApplyAllChangesOnStartup(). See maybe this blog post?
https://jeremydmiller.com/2022/03/30/improving-the-development-and-production-time-experience-with-marten-v5/

Thanks! :) This work around with ApplyAllChangesOnStartup() solved my problem with no need to do some dirty hacks :D


Setting HRTF on panner node will freeze for 800 milliseconds

Trying out 0.34, there's another oddity with the Panner Nodes (you'll be getting a lot of in a game testing from me!)  Again, thank you for this lib, and I'll try my best to shake out bugs for you.
If you do this:
panner.set_panning_model(PanningModelType::HRTF);
You get a pause (on my AMD/windows home, haven't tested it on my mac yet) or about 800 milliseconds.  My physics thread was complaining a lot about this :)
If you use ::EqualPower, it works fine.  BTW, no crashing on panner nodes anymore, so that issue has been fixed.

Thanks for the report!
A small audio glitch is expected when the panning model is changed for an active panner, because HRTF for example might delay the sound signal for the left ear if the sound is coming from the right. PanningModel equalpower assumes both ears are at the same physical locations so no delays are present.
However, 800ms is an eternity and this is not expected.
When I run cargo run --release --example spatial and press <Enter> a few times, I notice a 300ms delay on the control thread. Not the render thread by the way - audio playback is fine.
300 ms is quite a lot of time to load the HRTF data, but since this happens on the control thread it should not really be an issue either. I will have a look if is any speedup possible, but perhaps you should review your application and make sure that any interaction with our library is not happening on a thread with realtime constraints.

So this one I might not be explaining properly.  I went back to chrome (I'll use this as reference form now on, as I should have) and did this:
console.info('start='+performance.now()); let panner = ctx.createPanner(); panner.panningModel='HRTF'; panner.distanceModel='linear'; panner.refDistance=100.0; panner.maxDistance=1100.0; panner.rolloffFactor=1.0; panner.coneInnerAngle=360.0; panner.coneOuterAngle=0.0; panner.coneOuterGain=0.0; panner.positionX.value=0.0; panner.positionY.value=0.0; panner.positionZ.value=0.0; panner.orientationX.value=1.0; panner.orientationY.value=0.0; panner.orientationZ.value=0.0; console.info('end='+performance.now());
In the console:
start=1658.9000000357628
test.html:52 end=1659.199999988079
Note this is on the main javascript thread (man that is one of the worst parts about javascript!), next to no time has passed to start a panner node, or to set the panning model.  If there is a delay in the actual sound being played from your threads, that's fine, but in my case, setting HRTF freezes the thread creating the panner -- it doesn't return for 800 ms.
I suspect in most games people are going to be spawning panner nodes all over the places as sounds play in their game and any thread is going to be time sensitive.  Nodes are going to have to be created as fast as possible.

Hey,
I just recreated your example logging some time elapsed here and there and, while this is a bit long, it's two order of magnitude under what your are reporting, that's really strange
use std::time::{Instant};
use web_audio_api::context::{AudioContext, BaseAudioContext};
use web_audio_api::node::{PanningModelType, DistanceModelType};

fn main() {
  let context = AudioContext::default();

  let start = Instant::now();

  let mut panner = context.create_panner();
  panner.set_panning_model(PanningModelType::HRTF);
  panner.set_distance_model(DistanceModelType::Linear);
  panner.set_ref_distance(100.);
  panner.set_max_distance(1100.);
  panner.set_rolloff_factor(1.);
  panner.set_cone_inner_angle(360.);
  panner.set_cone_outer_angle(0.);
  panner.set_cone_outer_gain(0.);
  panner.position_x().set_value(0.);
  panner.position_y().set_value(0.);
  panner.position_z().set_value(0.);
  panner.orientation_x().set_value(1.);
  panner.orientation_y().set_value(0.);
  panner.orientation_z().set_value(0.);

  let duration = start.elapsed();
  println!("Time elapsed: {:?}", duration);
}

I put some log in the set_panner_mode (with > prefix) method as well, and what I got is:
> include bytes 24ns
> create hrir sphere: 2.750661ms
> create hrir state: 5.737993ms
> send msg: 1.472µs
Time elapsed: 8.577523ms

@otto I tested in the spatial.rs example too, and I found around 7ms too (no noticeable glitch in audio neither), how did you got this 300ms value?

If this will help, here is my testing code.  Note 2 things (1) I wrapped everything inside a window/event loop as that is how my game runs and (2) I'm in debug mode.  In this example, on my machine, the elapsed time is > 5 seconds (!!!)
This code is an absolute mess as I'm testing a bunch of stuff at once but it does show the problem, at least for me.  This is an AMD windows machine, BTW.
use winit::{event::*, event_loop::{ControlFlow, EventLoop}, window::{Window, WindowBuilder}};
use web_audio_api::{context::{BaseAudioContext, AudioContext}, node::{AudioNode, AudioScheduledSourceNode, PanningModelType, DistanceModelType}};
use std::f32::consts::PI;
use std::time::Instant;
pub async fn run() {
env_logger::init();
let event_loop = EventLoop::new();
let window =
    WindowBuilder::new()
        .with_title("atom")
        .with_inner_size(winit::dpi::LogicalSize::new(1024.0, 768.0))
        .with_resizable(false)
        .build(&event_loop).unwrap();

// the audio context
let ctx = AudioContext::default();

// run the window loop
event_loop.run(move |event, _, control_flow| {
    match event {
        Event::WindowEvent {
            ref event,
            window_id,
        } if window_id == window.id() => {
            match event {
                WindowEvent::MouseInput {
                    button,
                    state,
                    ..
                } => {
                    if *state==ElementState::Pressed {
                        println!("sound");

                        ctx.listener().position_x().set_value(0.0);
                        ctx.listener().position_y().set_value(0.0);
                        ctx.listener().position_z().set_value(0.0);

                        ctx.listener().forward_x().set_value(0.0);
                        ctx.listener().forward_y().set_value(0.0);
                        ctx.listener().forward_z().set_value(1.0);

                        ctx.listener().up_x().set_value(0.0);
                        ctx.listener().up_y().set_value(1.0);
                        ctx.listener().up_z().set_value(0.0);

                        let length = ctx.sample_rate() as usize;
                        let sample_rate = ctx.sample_rate();
                        let mut src = ctx.create_buffer_source();
                        let flat_wave = vec![1.0; length];
                        let mut buffer = ctx.create_buffer(1, length, sample_rate);
                        buffer.copy_to_channel(&flat_wave, 0);

                        src.set_buffer(buffer.clone());
                        src.set_loop(true);

                        let mut analyser = ctx.create_analyser();
                        let mut bins = vec![0.; analyser.frequency_bin_count()];

                        let now = Instant::now();
                        let mut panner = ctx.create_panner();
                        panner.set_panning_model(PanningModelType::HRTF);
                        panner.set_distance_model(DistanceModelType::Linear);
                        panner.set_ref_distance(100.0);
                        panner.set_max_distance(1100.0);
                        panner.set_rolloff_factor(1.0);
                        panner.set_cone_inner_angle(360.0);
                        panner.set_cone_outer_angle(0.0);
                        panner.set_cone_outer_gain(0.0);
                        panner.position_x().set_value(0.0);
                        panner.position_y().set_value(0.0);
                        panner.position_z().set_value(0.0);
                        panner.orientation_x().set_value(1.0);
                        panner.orientation_y().set_value(0.0);
                        panner.orientation_z().set_value(0.0);
                        println!("panner ms={:?}", now.elapsed());

                        src.connect(&panner);
                        panner.connect(&analyser);
                        src.start();

                        for i in 0..30 {
                            let d = i * 50;
                            panner.position_z().set_value(d as f32);

                            std::thread::sleep(std::time::Duration::from_millis(100));
                            analyser.get_float_time_domain_data(&mut bins);
                            println!("{}>{}", d, bins[0]);
                        }

                    }
                },
                WindowEvent::CloseRequested => *control_flow = ControlFlow::Exit,
                _ => {}
            }
        }
        Event::RedrawRequested(window_id) if window_id == window.id() => {
        }
        Event::RedrawEventsCleared => {
            window.request_redraw();
        }
        _ => {}
    }
});

}
One other thing to point out is I did this in chrome on the same machine:
            console.info('start='+performance.now());
            let panner = ctx.createPanner();
            panner.panningModel='HRTF';
            panner.distanceModel='linear';
            panner.refDistance=100.0;
            panner.maxDistance=1100.0;
            panner.rolloffFactor=1.0;
            panner.coneInnerAngle=360.0;
            panner.coneOuterAngle=0.0;
            panner.coneOuterGain=0.0;
            panner.positionX.value=0.0;
            panner.positionY.value=0.0;
            panner.positionZ.value=0.0;
            panner.orientationX.value=1.0;
            panner.orientationY.value=0.0;
            panner.orientationZ.value=0.0;
            console.info('end='+performance.now());

And that happened in < 1 millisecond.

Tried a release build; must faster but still slow at a little under 1 second.

@otto I tested in the spatial.rs example too, and I found around 7ms too (no noticeable glitch in audio neither), how did you got this 300ms value?

Thanks for chiming in. I will have to check again (later today)
The big question is what do we think is acceptable on the control thread? I agree with the sentiment of @ggadwa that large delays (a few ms+ ?) will be disruptive for any kind of application

My measurements are also in --release mode. I did the following:
diff --git a/examples/spatial.rs b/examples/spatial.rs
index 317c027..03e60c4 100644
--- a/examples/spatial.rs
+++ b/examples/spatial.rs
@@ -16,7 +16,7 @@ use web_audio_api::node::{
 //
 // `WEB_AUDIO_LATENCY=playback cargo run --release --example spatial`
 fn main() {
-    env_logger::init();
+    env_logger::Builder::from_default_env().format_timestamp_millis().init();

     let latency_hint = match std::env::var("WEB_AUDIO_LATENCY").as_deref() {
         Ok("playback") => AudioContextLatencyCategory::Playback,
@@ -91,7 +91,8 @@ fn main() {
         } else {
             PanningModelType::EqualPower
         };
+        log::info!("press");
         panner.set_panning_model(p);
-        println!("PanningMode: {:?}", panner.panning_model());
+        log::info!("PanningMode: {:?}", panner.panning_model());
     });
 }
diff --git a/src/node/panner.rs b/src/node/panner.rs
index da12398..30c2f37 100644
--- a/src/node/panner.rs
+++ b/src/node/panner.rs
@@ -551,12 +551,15 @@ impl PannerNode {
             PanningModelType::HRTF => {
                 let resource = include_bytes!("../../resources/IRC_1003_C.bin");
                 let sample_rate = self.context().sample_rate() as u32;
+                log::info!("load sphere");
                 let hrir_sphere = HrirSphere::new(&resource[..], sample_rate).unwrap();
+                log::info!("setup state");
                 Some(HrtfState::new(hrir_sphere))
             }
         };

         self.panning_model = value;
+        log::info!("send msg");
         self.registration
             .post_message(ControlMessage::PanningModel(Box::new(hrtf_option)));
     }

and then measurements are like
RUST_LOG=info cargo run --release --example spatial
....
HRTF enabled, press <Enter> to toggle

[2023-10-16T12:30:42.553Z INFO  spatial] press
[2023-10-16T12:30:42.553Z INFO  web_audio_api::node::panner] send msg
[2023-10-16T12:30:42.553Z INFO  spatial] PanningMode: EqualPower

[2023-10-16T12:30:43.710Z INFO  spatial] press
[2023-10-16T12:30:43.710Z INFO  web_audio_api::node::panner] load sphere
[2023-10-16T12:30:44.015Z INFO  web_audio_api::node::panner] setup state
[2023-10-16T12:30:44.020Z INFO  web_audio_api::node::panner] send msg
[2023-10-16T12:30:44.020Z INFO  spatial] PanningMode: HRTF

[2023-10-16T12:30:45.360Z INFO  spatial] press
[2023-10-16T12:30:45.360Z INFO  web_audio_api::node::panner] send msg
[2023-10-16T12:30:45.361Z INFO  spatial] PanningMode: EqualPower

[2023-10-16T12:30:46.236Z INFO  spatial] press
[2023-10-16T12:30:46.236Z INFO  web_audio_api::node::panner] load sphere
[2023-10-16T12:30:46.543Z INFO  web_audio_api::node::panner] setup state
[2023-10-16T12:30:46.548Z INFO  web_audio_api::node::panner] send msg
[2023-10-16T12:30:46.548Z INFO  spatial] PanningMode: HRTF

so 310 ms to load the sphere and 5ms to setup the state. Interesting...

Looking at the source code of our HRTF library, it may be the case that the entire sphere needs to be resampled before it can be used.
My audio context runs at  SampleRate(48000), what's yours @b-ma ? We may need to include pre-resampled versions of the database..

Yeah, it's the resampling that takes a lot of time.
I get down to 14ms when the sample rate matches the included HRTF-db (44100 Hertz).
I will try to see if we can resample only on the first load, and then reuse that for subsequent panner node creations.

@otto I tested in the spatial.rs example too, and I found around 7ms too (no noticeable glitch in audio neither), how did you got this 300ms value?

Thanks for chiming in. I will have to check again (later today)
The big question is what do we think is acceptable on the control thread? I agree with the sentiment of @ggadwa that large delays (a few ms+ ?) will be disruptive for any kind of application

I can only talk for myself, but I've made a few game engines (if you look at my github you can see wsjs which is a complete in javascript 3d game engine, there's a "shooter" demo for it too) and that uses webaudio, and the pattern is when a sound is made, the nodes are created at that moment and if it's a non-looping sound, just forgotten and cleaned up by the GC.  I'd assume any other game would have the same pattern, so anything over a couple ms would be very disruptive, for sure.

Yeah, it's the resampling that takes a lot of time. I get down to 14ms when the sample rate matches the included HRTF-db (44100 Hertz). I will try to see if we can resample only on the first load, and then reuse that for subsequent panner node creations.

So I'm taking chrome as my gold standard and I can tell from testing that there is never a pause (not even on the first panner creation.)  I have to wonder if it's not caching for some standard sample rates before any panners are called, possibly at audio context creation, but that's just guessing.  It's super efficient, for sure.
If it's a game, I think the first time having a pause is still going to be disruptive as I doubt you'd use a panner outside of the actual game loop, but I'm also not against just spawning one when the game boots if that's a decent workaround.

My audio context runs at SampleRate(48000), what's yours @b-ma ?

Yup right, it's 44100 by default on my side.

We may need to include pre-resampled versions of the database..

Probably having 44100 and 48000 could be nice yes
Also, I see in the hrtf lib that both HrirSphere and HrtfProcessor implement Clone, maybe using these instead of creating brand new instances would be more performant ? i.e. create the one instance of these per AudioContext and just retrieve clones to the panner nodes?

I get down to 14ms when the sample rate matches the included HRTF-db (44100 Hertz).

This is still a lot compared to my 2-3ms, really strange...
I wonder if it doesn't comes from the usage of log::info! rather than Instant, when does the time tag is retrieved? On my side I did this:
PanningModelType::HRTF => {
    use std::time::{Instant};

    let start = Instant::now();
    let resource = include_bytes!("../../resources/IRC_1003_C.bin");
    let duration = start.elapsed();
    println!("include_bytes!: {:?}", duration);

    let sample_rate = self.context().sample_rate() as u32;

    let start = Instant::now();
    let hrir_sphere = HrirSphere::new(&resource[..], sample_rate).unwrap();
    let duration = start.elapsed();
    println!("HrirSphere::new: {:?}", duration);

    let start = Instant::now();
    let sphere = Some(HrtfState::new(hrir_sphere));
    let duration = start.elapsed();
    println!("HrtfState::new: {:?}", duration);

    sphere
}

With the following result:
sampleRate 44100.0
include_bytes!: 23ns
HrirSphere::new: 2.608541ms
HrtfState::new: 4.920023ms
Time elapsed: 7.581619ms

Here, the HrtfState::new is the biggest issue (and maybe not the most simple to solve, I don't know...).

I'd assume any other game would have the same pattern, so anything over a couple ms would be very disruptive, for sure.

Yup for sure, at 60fps you have ~16.6ms of budget, but generally lots of physics and rendering to do...

Sorry if my last post was maybe a bit harsh (or "rusty" :) But I really don't understand how we can go from 7ms (which is  nonetheless and factually too much) to few hundreds of milliseconds, there is something really weird going on here...

Sorry if my last post was maybe a bit harsh (or "rusty" :) But I really don't understand how we can go from 7ms (which is nonetheless and factually too much) to few hundreds of milliseconds, there is something really weird going on here...

I have a piece of code (it's above somewhere) that always takes about 5 seconds in debug; nobody else is seeing something that bad, so yeah, there's certainly something weird going on, but I think if you guys take a crack at what you are seeing, I can certainly retest a patch (I am new to rust so how to pull from a local repository is something I'll have to figure out, or maybe a test branch.)  I can give you a test on both my PC and M2 mac, both on a simple test app and the game itself.
I also have no problem running through one with a ton of println! is you want to do some more timing.

I am new to rust so how to pull from a local repository is something I'll have to figure out, or maybe a test branch.

Importing a lib locally is quite simple actually, you just have to change your Cargo.toml to give a relative path to the lib, e.g.:
# web-audio-api = "0.34"
web-audio-api = { path = "../web-audio-api-rs" }

I have further improved the caching in #375 to also cache the HRTF-processor. Creation time is now 1ms for subsequent panner nodes. I hope this suffices for now, but I will have a quick look in the upstream hrtf library if we can improve clone times by optimizing the memory layout.
Now for the initial load (which is thus 300ms on my machine), we have a few options:

take the hit on the first panner creation - not ideal because this is very unexpected for the application. This is the current implementation
take the hit on audio context creation. This will increase the AudioContext creation time from 100ms to 300ms and will increase memory consumption a bit for applications that don't need HRTF panning
include more HRIR spheres for common sample rates (44100, 48000, 96000?). This reduces the initial load time to 15ms on my machine, but it does bloat the binary with a few MBs. This provides no adequate solution for applications running in exotic sample rates

Tangentially, I will have a look in the upstream library if loading can be made more efficient.
@b-ma I'm not sure why our machines have unexpected performances, but I think the general picture still stands

I would say that in term of usage solution 2. is the best one, as the AudioContext is generally created at application startup

https://github.com/mrDIMAS/hrtf/pull/8

Nice catch!

I would say that in term of usage solution 2. is the best one, as the AudioContext is generally created at application startup

I'd second that.  My audio context creation is spun up at the same time I'm spinning up my web gpu context, that's all expected time loss at the beginning of any application.  300 ms once really isn't that bad; it's just bad when you have to do it 10,000 times and only have a couple ms to spare every time.
And, again: Thanks for all the work!  I picked rust to learn specifically because of the wgpu and this library; I want to be as cross platform as possible and I want my interfaces to things like lower level sound and graphics to be as long lived as possible and being a web standard gives me that option.

Alright thanks for the feedback. I will update #375 with

preloading the HRTF data at the first online AudioContext creation
update the upstream hrtf lib with improved performance
a benchmark to track performance over time

I have released v0.35.0 with the improvements


use PackageKitBrowserPlugin install button

See
https://fedoraproject.org/wiki/Features/PackageKitBrowserPlugin
and
http://cgit.freedesktop.org/packagekit/plain/contrib/browser-plugin/README

It'd be cool to be able to do that, but most browsers are dropping NPAPI support. I'm not sure what that means for features like this.

It might be interesting to fork apturl and adjust it to use with packagekit and rpm packages
https://launchpad.net/ubuntu/+source/apturl


Add Orthogonal Procrustes Distance + similarity->distance

#10

this ready?

@moskomule
here is the code :)
def orthogonal_procrustes_distance(x1: Tensor, x2: Tensor, normalize_for_range_0_to_1: bool = False) -> Tensor:
    """
    Computes the orthoginal procrustes distance.
    If normalized then the answer is divided by 2 so that it's in the interval [0, 1].
    Outputs a single number with no dimensionality.

    Expected input:
        - two matrices e.g.
            - two weight matrices of size [num_weights1, num_weights2]
            - or two matrices of activations [batch_size, dim_of_layer] (used by paper [1])

    d_proc(A*, B) = ||A||^2_F + ||B||^2_F - 2||A^T B||_*
    || . ||_* = nuclear norm = sum of singular values sum_i sig(A)_i = ||A||_*

    Note: - this only works for matrices. So it's works as a metric for FC and transformers (or at least previous work
    only used it for transformer [1] which have FC and no convolutions.
    - note,

    ref:
    - [1] https://arxiv.org/abs/2108.01661
    - [2] https://discuss.pytorch.org/t/is-there-an-orthogonal-procrustes-for-pytorch/131365
    - [3] https://ee227c.github.io/code/lecture5.html#nuclear-norm

    sample output (see test) - so it outputs a number inside a tensor obj:
    [('fc0', tensor(5.7326, grad_fn=<RsubBackward1>)),
     ('ReLU0', tensor(2.6101, grad_fn=<RsubBackward1>)),
     ('fc1', tensor(3.8898, grad_fn=<RsubBackward1>)),
     ('ReLU2', tensor(1.3644, grad_fn=<RsubBackward1>)),
     ('fc3', tensor(1.5007, grad_fn=<RsubBackward1>))]

    :param x1:
    :param x2:
    :return:
    """
    from torch.linalg import norm
    x1, x2 = normalize_matrix_for_similarity(x1, dim=1), normalize_matrix_for_similarity(x2, dim=1)
    x1x2 = x1.t() @ x2
    d: Tensor = norm(x1, 'fro') + norm(x2, 'fro') - 2 * norm(x1x2, 'nuc')
    d: Tensor = d / 2.0 if normalize_for_range_0_to_1 else d
    return d


Migration window does not properly check (and upgrade) dependencies

Describe the bug
Bug (or missing feature) on upgrading the following scenario:

Create a prefab with a component that will soon be deprecated (eg BoundingBox)
Set up some values in the prefab
Create new scene
Add instance of that prefab
Modify values on the instance.
Try upgrading the scene / the prefab / the project.

In all scenarios the data / gameobject will be migrated but the result is going to be not as expected.
Scenario 1: Upgrading just the scene:

bounding box on gameobject instance will be removed and new bounds control will be added
all values will be ported over and nothing will be inherited from the prefab as this version of bounds control is only local to this instance

Expected result: we should after upgrading still conserve the original intend of having the component inherited from the prefab and only some values overridden.
Scenario 2: Upgrading just the prefab:

bounding box on prefab will be migrated and new bounds control will be added
prefab result is as expected
instance in scene will only have the values from the newly added bounds control in the prefab but will have lost all it's overrides from the previous bounding box.

Expected result: On prefab upgrades the tool should automatically show all dependencies in all scenes and inform the user / give them a choice to upgrade the instances in those scenes as well so they're not loosing any data.
The obsolete / deprecated component in the prefab can only be removed after successful upgrade/migration of all the instances/dependent game objects.
Note: consider several prefab hierarchies for this as well!
Scenario 3: Upgrading the whole project:
Can result in scenario 1 or 2 randomly depending on which file was found first by the tool.

Throwing some code snippet here that might be useful for discovering the hierarchy of an instance that needs upgrading:
var boundingBox = gameObject.GetComponent<BoundingBox>();

            // we are based on one or more prefabs so we have to upgrade them first before upgrading our current gameobject
            Boo.Lang.List<PrefabInfo> prefabPaths = new Boo.Lang.List<PrefabInfo>();
            var rootPrefabInstance = boundingBox;
            while (HasPrefab(rootPrefabInstance))
            {
                BoundingBox prefabBox = PrefabUtility.GetCorrespondingObjectFromSource(rootPrefabInstance);
                string prefabPath = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(prefabBox);
                prefabPaths.Add(new PrefabInfo(prefabPath, prefabBox));
                rootPrefabInstance = prefabBox;
            }

            // update prefab hierarchy
            for (int i = prefabPaths.Count - 1; i >= 0; ++i)
            {
                GameObject prefabRoot = PrefabUtility.LoadPrefabContents(prefabPaths[i].path);
                MigrateStage(prefabPaths[i].box);
                UnityEditor.PrefabUtility.SaveAsPrefabAsset(prefabRoot, prefabPaths[i].path);
                PrefabUtility.UnloadPrefabContents(prefabRoot);
            }

            // update actual instance
            MigrateStage(boundingBox);

            // remove bounding box
            if (rootPrefabInstance != boundingBox && prefabPaths.Count != 0)
            {
                int rootIndex = prefabPaths.Count - 1;
                GameObject prefabRoot = PrefabUtility.LoadPrefabContents(prefabPaths[rootIndex].path);
                prefabPaths[rootIndex].box.enabled = false;
                UnityEditor.PrefabUtility.SaveAsPrefabAsset(prefabRoot, prefabPaths[rootIndex].path);
                PrefabUtility.UnloadPrefabContents(prefabRoot);
            }
            else
            {
                Object.DestroyImmediate(boundingBox);
            }

We appreciate your feedback and thank you for reporting this issue.
Microsoft Mixed Reality Toolkit version 2 (MRTK2) is currently in limited support. This means that Microsoft is only fixing high priority security issues. Unfortunately, this issue does not meet the necessary priority and will be closed. If you strongly feel that this issue deserves more attention, please open a new issue and explain why it is important.
Microsoft recommends that all new HoloLens 2 Unity applications use MRTK3 instead of MRTK2.
Please note that MRTK3 was released in August 2023. It features an all new architecture for developing rich mixed reality experiences and has a minimum requirement of Unity 2021.3 LTS. For more information about MRTK3, please visithttps://www.mixedrealitytoolkit.org.
Thank you for your continued support of the Mixed Reality Toolkit!


Resolve issue #77 (allow Felix hostname to be explicitly set)

Includes a fix for a bug introduced with the fix to #75 (which broke Windows unit tests).
This is not complete in itself, though it is logically consistent.

Calico-chef sample config files need updating.
Something somewhere needs to actually set the value correctly in the install.

LGTM. :cake:


Migrate documentation to MkDocs

For #24 . This is a big WiP prototype
Closes:

Closes #24
Closes #28
Closes https://github.com/wiremock/wiremock.org/issues/169

Other key features

Search
Better Mobile navigation

Preview
https://oleg-nenashev.github.io/wiremock.org/

TODOs

[x] Initial MkDocs setup
[x] Split and relocate images
[x] Move code tabs to the native engine
[x] Setup CI
[x] Setup staging site
[x] Fix redirects within docs
[x] Fix images
[x] Ensure section links and breadcrumbs work fine
[x] Fix sitemap generation for docs
[x] Fix Docs Landing page rendering or move it back to the Jekyll site
[x] Fix Header and Footer
[x] Add OpenGraph rendering
[x] Fix OpenAPI specification rendering and source it from the repo
[x] Fix version number rendering/propagation to MkDocs
[x] Move events pages to the new engine
[x] Move external resources to the new engine
[x] Configure Google Analytics
[ ] Configure MS Clarity (Custom script needed)
[x] Align the header with the old website
[x] Move Support pages to the documentation engine
[x] Fix the docs site header on mobile screens

Production deployment TODO

[ ] Update deployment pipelines to follow staging
[ ] Update Google Analytics and Clarity tags

Submitter checklist

[x] The PR request is well described and justified, including the body and the references
[x] The PR title represents the desired changelog entry
[x] If the change against WireMock 2 functionality (incompatible with WireMock 3),
it is submitted against the 2.x branch
[x] The repository's code style is followed (see the contributing guide)

Details: Contributor Guide

Closing this as it's been merged and superseded via branching

It was not merged BTW, an alternative implementation was done instead.
It's your decision tho

We'll get there at some point in the next couple of months I think. Just hasn't been the bandwidth to get it over the line yet.

Ack, thanks for the clarification! I remain available to help if any small
changes are needed. I will probably take some parts of the implementation
for the Gradle community subsite that basically has a similar Jekyll+MkDocs
structure. So I will keep improving templates and layouts
On Thu, May 2, 2024, 18:53 Tom Akehurst @.***> wrote:

We'll get there at some point in the next couple of months I think. Just
hasn't been the bandwidth to get it over the line yet.
—
Reply to this email directly, view it on GitHub
https://github.com/wiremock/wiremock.org/pull/228#issuecomment-2091052013,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAW4RIA2MGOHBEV5M5WTKKLZAJVO3AVCNFSM6AAAAAA7TRMNNSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDAOJRGA2TEMBRGM
.
You are receiving this because you were assigned.Message ID:
@.***>

We've actually dropped Jekyll completely from it now on our branch. That was one of the reasons for delaying the switch i.e. the vestiges of Jekyll were still a pain to live with.

I totally support that move. Thumbs up! :)
In my case, it might have to live for some time, but hopefully not for long
On Thu, May 2, 2024 at 7:26 PM Tom Akehurst @.***>
wrote:

We've actually dropped Jekyll completely from it now on our branch. That
was one of the reasons for delaying the switch i.e. the vestiges of Jekyll
were still a pain to live with.
—
Reply to this email directly, view it on GitHub
https://github.com/wiremock/wiremock.org/pull/228#issuecomment-2091120047,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAW4RIDCPBAACES6LJTL2VLZAJZMZAVCNFSM6AAAAAA7TRMNNSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDAOJRGEZDAMBUG4
.
You are receiving this because you were assigned.Message ID:
@.***>


Logger API: unable to post HTML message from python

html=true option works only from robot side but not from python
I have some piece of code, a library, which performs some operations and in case of NON Critical Error it should post a screen snap, but it doesn't, the message in output.xml just being appended to a current message node and simply ignores that
heres a sample used code inside library:
part of logger class
from robot.api import logger
from robot.output import librarylogger
.
.
.
   @staticmethod
    def write_robot(entry, html=False):
        """
        performs console output when runtime is robot framework
        :return: None
        """
        log_entry="{1} {2}".format(entry['time'], entry['message'])
        logger.write(log_entry, Log.ROBOT_LEVELS[entry['level']], html)
        if entry['extended']:
          logger.write(entry['extended'], Log.ROBOT_LEVELS[entry['level']], html)

debug lib:
import Log

class DebugLib:

    def print_message_set(self, set_no=0):
        image_base64 = '<base64 should be here>'
        Log.info('info message 1 from set No {0}'.format(set_no))
        Log.info('info message 2 from set No {0} with escaped HTML'.format(set_no),
                 'some bold text')
        Log.info('info message 3 from set No {0}  with HTML'.format(set_no),
                 '
Some Image description</>'.format(image_base64),
                 html='yes')
        Log.info('info message 4 from set No {0}'.format(set_no))

robot code:
*** Settings ***
Library             DebugLib

*** Test Cases ***

HTML Logger test1
    print message set    1

HTML Logger test3
    Log   some crap
    Log   some strong text
    Log   <img src="<base64 should be here>">
Some Image description</>    html=True
    Log   another crap

actual result:
http://prntscr.com/d86g4o
http://prntscr.com/d86gdv
expected result:
HTML Logger test1 should escape html only in places which should be
additional info:
I've tried to modify my code in a way which would simulate keyword execution like it can be seen in pure robot example on screen snap, but it also didn't worked
        log_entry="{1} {2}".format(entry['time'],
                                   entry['message'])
        if html:
            LOGGER.start_keyword('HTML LOG BLOCK')
        logger.write(log_entry, Log.ROBOT_LEVELS[entry['level']], html)
        if entry['extended']:
            logger.write(entry['extended'], Log.ROBOT_LEVELS[entry['level']], html)
        if html:
            LOGGER.end_keyword('HTML LOG BLOCK')

Your example is fairly complicated and doesn't even seem to show all the actual code. Could you first test can you simply use logger.write('test', html=True)? If that works, then the bug is very likely on your code.
If you are convinced that the problem is on Robot side, please provide a simple example demonstrating the problem that others can also run on their machines. Notice also that you shouldn't need to use anything else than robot.api.logger in your code for logging purposes. For example, robot.output is internal API and subject to change in future versions.

Closing due to lack of new information.


Setting string variable

Description of issue
Using "SetVariables" method to set string variable throws exception:
System.AccessViolationException: 'Attempted to read or write protected memory. This is often an indication that other memory is corrupt.'

Steps to reproduce issue

Compile vbai-dotnet x64

Add this fragment to example:
VariableValue[] var = new VariableValue[1];
var[0].name = "StringVar";
var[0].type = VariableDataType.StringVariableType;
 var[0].strValue = "test";
 engine.SetVariables(VariableUpdateMode.UpdateImmediately, var);

Create inspection with string variable named "StringVar"

Run example.

Visual Studio 2019
Vision Builder 2020 x64

From the README (emphasis my own): "...the Vision Builder AI .NET API is available as an open source and intends to help users build the 32-bit .NET binary NationalInstruments.VBAI.2015.dll"
Near when they added this to Github, I had asked for x64 support but hadn't gotten any response as to 'when'. Until they advertise x64 support here, I don't know that this will get responded to.
As to the issue in itself, I would guess it has to do with dependencies not being built for x86/x64 interoperability but I'm throwing darts in a dark room at that point.

From the README (emphasis my own): "...the Vision Builder AI .NET API is available as an open source and intends to help users build the 32-bit .NET binary NationalInstruments.VBAI.2015.dll"
Near when they added this to Github, I had asked for x64 support but hadn't gotten any response as to 'when'. Until they advertise x64 support here, I don't know that this will get responded to.
As to the issue in itself, I would guess it has to do with dependencies not being built for x86/x64 interoperability but I'm throwing darts in a dark room at that point.

The thing is that it almost works.
Running inspection, getting image, setting boolean, numeric, numeric array etc. works well.
I even managed (using dirty fix, by guessing...) to be able to get variables.
It looks like it's very easy to make that code working with x64, probably just few function prototypes are not compatible.
If i only knew how it looks on VBAIInterfaceC.dll side...

The thing is that it almost works.
Running inspection, getting image, setting boolean, numeric, numeric array etc. works well.
I even managed (using dirty fix, by guessing...) to be able to get variables.
It looks like it's very easy to make that code working with x64, probably just few function prototypes are not compatible.
If i only knew how it looks on VBAIInterfaceC.dll side...


What do you mean by that? What logs are you looking for? Spline has many components.  Spline agent logs are where Spark logs are (it writes to Spark logs).

So where can i find why  i cannot see data on UI
on Aranngo dB- can see the data

https://github.com/AbsaOSS/spline-spark-agent/discussions/394


Add ANMB to university list

please provide the link to the page, describing long-term educational programs, that the organization provides

Hi,
This is the information you requested:
Our website is http://www.anmb.ro/eng/files/pstudy/index.html
And we are also audited and rated by the Universities Multirank:
http://www.u-multirank.eu/#!/explore?trackType=explore&sightMode=undefined&detailUniversity=932&section=exploreUniversityDetail
Best regards,
Andrei
On Tue, Jul 21, 2015 at 9:03 PM, Elena Ganenkova<EMAIL_ADDRESS>wrote:

please provide the link to the page, describing long-term educational
programs, that the organization provides
—
Reply to this email directly or view it on GitHub
https://github.com/JetBrains/swot/pull/1185#issuecomment-123417173.

@abautu  thank you, i'm adding the domain


Add Fortran support

Could fftw be configured without Fortran support or would this better be a separate feedstock?

@conda-forge/fftw Any thoughts on this?

not easy on win32

fftw is not built for win32 according to meta.yaml. Are you planning on adding this?

There is discussion about adding Windows support, yes. However I disagree that this blocks adding Fortran support. Just because we add Fortran support for Unix OSes doesn't mean we need to extend that support to Windows. HDF5 is built with Fortran support. It is also built on Windows. However it doesn't support Fortran on Windows. IMHO it is ok if a similar situation occurs here.
If you are interested in making this happen @kynan , I'd take a close look at PR ( https://github.com/conda-forge/hdf5-feedstock/pull/28 ) and implement a similar PR here.

I'd also be interested in this. It's a requirement for SHTOOLS and we'd love to have a conda package for that.
Is anyone tacking this at the moment? If not, I'd like to take a shot.

Hey folks, we've been working hard to resolve the windows fortran nightmare. In a few hours, you'll be able to add flang to your build dependencies and compile normally, with no issues (in theory). Let me know if you have any questions.

@xoviat thanks for the update and all the work! Please share some more info when you can.

The project was literally just added. In ~15 minutes:
conda install flang

(assuming conda-forge channel has been added).

So there are a few issues:

cmake HEAD supports flang (just within the last few hours), but obviously not yet released.
What does "enabling fortran" actually do? Does it compile additional object files or add fortran files the include directory?

I dont see additional libs, only headers

@jschueller Can you ls the headers, and then we can just cp them?

Before we start using this flang compiler everywhere, I think we still need to resolve a larger discussion about how we can go about doing that without breaking compatibility with defaults. Given yours ( @xoviat's  ) and @isuruf's work on flang, it would be great to have you involved in this discussion and, if possible, come to the planned compiler meeting. Discussion and details can be found in issue ( https://github.com/conda-forge/conda-forge.github.io/issues/460 ). Other interested parties are of course welcome as well.

@leouieda I have built shtools with flang. It will be Python 3 only of course on Windows.
https://ci.appveyor.com/project/MarkWieczorek/build-shtools/build/1.0.35

It seems like the current default Fortran compiler on Conda is now gfortran on Linux and macOS, which can be installed by adding to meta.yaml:
requirements:
  build:
    - {{ compiler('fortran') }}

Would it be possible to move forward in this direction for now? The discussion on flang could, of course, be continued in parallel. I can do a PR for adding (default) Fortran compiler support.

The above reference from Amuse is the reason I need this now. There is no real rush, it's not a critical dependency, but since this is the last day of our sprint, it would be cool if we could have this merged today so all our tests will pass ;)

Is there any progress in this issue? I need to build a Fortran program with fftw.

I will make a new PR, the old one is outdated.

New PR: #49

Thanks for the quick merge @jschueller! Fortran support should now be available.


Update FAQ with link to crossfeed public announcement

This way, we also keep<EMAIL_ADDRESS>solely for technical issues / request verification and direct people to the CISA website announcement for any further questions.

I'm fine with the FAQ as is, since people reading that will likely be contacting with technical questions anyways.


default Param "gatewayType": "VPN" should be "gatewayType": "Vpn",

I'm sorry. I didn't figure out, where the parameter files generate their default values from. But there is a wrong value in config\custom-parameters\hubNetworking.parameters.all.json.
The gatewayType is generated all uppercase:
    "parVpnGatewayConfig": {
      "value": {
        "name": "alz-Vpn-Gateway",
        "gatewayType": "VPN", /* uppercase */
        "sku": "VpnGw1AZ",

But as we see here, the comparison is done like the following and is case sensitive:
gateway.gatewayType == 'Vpn'
This is causing issues when deploying a Vpn Gateway with "sku": "VpnGw1AZ" and providing AZs like:
    "parAzVpnGatewayAvailabilityZones": {
      "value": ["1", "2"]
    },

Because the comparison gateway.gatewayType == 'Vpn' is false, the parameter parAzVpnGatewayAvailabilityZones is not populated.
Expected Behavior
Default value beeing:
"gatewayType": "Vpn"
Current Behavior
Default value is:
"gatewayType": "VPN"
Reproduce
Run command with default values:
New-ALZEnvironment -o alz -IaC "bicep" -cicd "github"

Ill move this issue to the ALZ-Bicep repo, would you be interested in contributing a PR to fix this?

Alright. I tried...
https://github.com/Azure/ALZ-Bicep/pull/659


Make the header sticky when scrolling

The header AskDev does not need to disappear when scrolling if I'm not mistaken.

No it's intended behaviour Philips. Thanks for checking.

Oh okay


Using ResourceOverride as a tampermonkey script

I am wondering if there is a way I can override web resources as you have done here with a tampermonkey script. I want to be able to inject a custom script without the need for users to have this extension. Any ideas?

I don't know the inner workings of tampermonkey. There might be special functions you can call to set up overrides... but I'm guessing not. As far as I know, tampermoney's primary use case is for injecting userscripts on pages, not intercepting traffic and redirecting or supplying different content.


Rebase on upstream

rebase on origin to see what we are missing out on

Our own garbage collect is not needed anymore. See test unary_garbage_collect_streams


Comment with REM

A Line that starts with spaces and tabs then follows word "REM" should be shown as comment.
fix #11

Hey @stepanhakobyan thanks for the PR :pray:
So, can I get a bit of clarity on the issue?
Just for my own piece of mind, code that starts with rem or Rem is a comment, so what your change going to do?
Because code that starts with rem or Rem is a VBA Comment, this was a thing I was aware of but never used in favour of ' comments.
So I guess I'd like to know how code starting with rem is being used??
Thanks again :+1:

Hi @spences10,
I don't use REM for the comments either.
I had this problem

in the example above the commenting started in the middle of a variable.
After the changes you can see not only that corrected, but the cases where line ends with colon and a comment starts.

Awesome!
I'll get it published in the morning, thanks so much for helping improve it 🙏

That's published now @stepanhakobyan let me know if there's any issues.
Thanks again :pray:

🤝 Thanks @spences10


Update not- variants to support dynamic group/ and peer/ variants

I updated @MichaelAllenWarner's not- variant impl top support Tailwind's dynamic group/ and peer/ variants, introduced in Tailwind v3.2.
The main PR by @MichaelAllenWarner can be found here: https://github.com/tailwindlabs/tailwindcss/pull/7976

@MichaelAllenWarner @RobinMalfait When I run the test suites using npm run build && npm test, I see the following failure(s):
Cannot find module '@tailwindcss/oxide' from 'src/lib/expandTailwindAtRules.js'

...

Test Suites: 64 failed, 23 passed, 87 total
Tests:       324 passed, 324 total
Snapshots:   0 total
Time:        3.502 s
Ran all test suites.

Is there another process I need to run for that Rust process to be analyzed?

Screenshot

@brandonmcconnell
Thanks for this. I'm quite busy at the moment; not sure when I'll have a chance to take a closer look.

@brandonmcconnell
I was able to get past the oxide-related errors by first installing Rust, following the instructions here, and then doing npm run build:oxide before trying npm run test again.

Thanks @MichaelAllenWarner. That helped a ton.
I was able to diagnose the cause of the test failures. It as simply the order of the selectors.
Previously, the order was this:

🔴 not-hover
🔵 group-not-hover
🟠 peer-not-hover
🔴 hover
🔵 group-hover
🟠 peer-hover

But with my recent changes, it is now this:

🔴 not-hover
🔴 hover
🔵 group-not-hover
🔵 group-hover
🟠 peer-not-hover
🟠 peer-hover

This should still suffice for the same lower specificity for the not- counterparts of each of the three, and may even be arguably easier to manage.
All tests now pass — resolved in commit ea22565

I added support for the following in commit 977505e:

Non-not variants
not variants (new)

supports-
not-supports-

aria-

not-aria-
group-not-aria-
peer-not-aria-

data-

not-data-
group-not-data-
peer-not-data-

dark
light**explanation/rationale below

print
screen**explanation/rationale below

I've also added tests for all of these new variants (and those missing, e.g. aria-, data-) via commit 314f566.
@RobinMalfait If you could also check these tests, that would be a great help. Thank you.
cc @adamwathan @MichaelAllenWarner

@brandonmcconnell
Wow, thanks for all the work here!
I suspect that some of this will still require some discussion (assuming that the Tailwind team is indeed interested in adding this feature):

Which of the core variants should get the not- treatment? (IMO you've chosen well.)
Are the variants registered in the "right" order? Let's suppose that the order we were leaning toward in https://github.com/tailwindlabs/tailwindcss/pull/7976 is correct. In that case, it looks to me like this PR has the right ordering within each "section" (i.e., the pseudo-class variants are in the right order, the aria-variants are in the right order, etc.)—but would that suffice, or would we need the ordering to apply across all sections? What I mean is: do we need to register all the not- variants before registering their non-not- counterparts (and perhaps even before all other variants)? If so, there'd be need for some rather significant refactoring.

Small bug I noticed: you're using group-aria-not- and peer-aria-not- instead of group-not-aria- and peer-not-aria- in your tests.

@MichaelAllenWarner Sure thing. Thanks for all the feedback and testing and so quickly.
I'll fix that x-aria-not vs. x-not-aria typo asap.
Giving it some more thought, I can fathom some decent reasoning for registering all the not variants first.
It may not matter at all, but maybe, in this case it would…
not-hover ➞ hover ➞ not-focus ➞ focus
In stacking contexts, what would happen if someone used hover:not-focus:_? I think that would still be lower specificity than hover:focus:_ so it would override as expected. Are there cases where it might not? We might be fine leaving this as is, but I'm trying to think of a scenario where the ordering might cause a mixup in intended specificity. Do you know of any?
One more question— should we also adjust the addVariant and matchVariant functions so that they automatically add a not- counterpart for any custom variants added, or should that always be manual and up to the user? I'm inclined to let the user handle that manually, especially as catching such a thing automatically would require several checks such as whether the custom variant being added needs a not added to a query statement (e.g. @media not) or wrapped in a :not pseudo (e.g. :not(&)).

@brandonmcconnell
Oh, right: you've actually deviated from the ordering that was discussed in https://github.com/tailwindlabs/tailwindcss/pull/7976. If you read the conversation there, you'll see that we came to the tentative conclusion that not- variants should be registered before non-not- variants, so that the non-not- utilities come later in the CSS and therefore win specificity-battles over not- utilities when there's a tie.
So I think it's best if you undo your re-ordering of tests/variants.test.css and instead refactor src/corePlugins.js to preserve the registration-order that I was using:

🔴 not-hover
🔵 group-not-hover
🟣 peer-not-hover
🔴 hover
🔵 group-hover
🟣 peer-hover

In stacking contexts, what would happen if someone used hover:not-focus:_? I think that would still be lower specificity than hover:focus:_ so it would override as expected.

I believe this would actually be one of those specificity ties I mentioned above, and the "winner" would be whichever class is declared later in the CSS (which I think would be the hover:focus:_ class if the not-focus: variant is registered before the focus: variant).
What I was getting at in my previous comment was: would it be enough to use this not-first ordering within each "section" (i.e., among the pseudo-class variants, and among the aria-variants, etc.)? or would all not- variants need to be declared first (so that, say, not-aria-hidden: is registered before focus:)?

One more question— should we also adjust the addVariant and matchVariant functions so that they automatically add a not- counterpart for any custom variants added, or should that always be manual and up to the user? I'm inclined to let the user handle that manually, especially as catching such a thing automatically would require several checks such as whether the custom variant being added needs a not added to a query statement (e.g. @media not) or wrapped in a :not pseudo (e.g. :not(&)).

That's an interesting idea, but I'd save it for another PR down the road (if the basic not- variants gets added).

@MichaelAllenWarner Thanks for clarifying! Re this comment:

What I was getting at in my previous comment was: would it be enough to use this not-first ordering within each "section" (i.e., among the pseudo-class variants, and among the aria-variants, etc.)? or would all not- variants need to be declared first (so that, say, not-aria-hidden: is registered before focus:)?

That was my thinking in how I did my reordering. Technically, all the not pseudos appear before their non-not counterparts, so I think the end result would be the same, but I am not 100% sure. If that is indeed the case, I think this would still uphold the agreed-upon ordering from your PR https://github.com/tailwindlabs/tailwindcss/pull/7976 and the non-not variants would still always trump the not variants.
With all of that in mind, I'll investigate to see if there's a simple way to achieve putting all the not variants first.

@brandonmcconnell

That was my thinking in how I did my reordering. Technically, all the not pseudos appear before their non-not counterparts, so I think the end result would be the same, but I am not 100% sure.

Well, I think it's not just about a non-not- variant trumping its direct not- counterpart (e.g., hover: trumping not-hover:). It's also about hover: trumping not-focus:, and maybe(?) even aria-hidden: and data-[foo]: trumping not-focus:, etc. (Sorry if I'm over-explaining at this point; just want to make sure that we're on the same page.)

With all of that in mind, I'll investigate to see if there's a simple way to achieve putting all the not variants first.

Definitely feel free, although you might want to wait for the input of Adam or Robin.
Regardless, I don't have much time right now to work on this stuff, and I appreciate what you've been doing here.

@MichaelAllenWarner Thanks again for clarifying. That makes perfect sense.
I'm totally down to adjust my implementation to account for that new sort-order. I think I'll wait to hear back from @adamwathan or @RobinMalfait, only because—as I see it—we have two options to achieve that:

I can manually change the order and simply add all the not variants first.
Easy, but it doesn't allow users to add their own not variants in the same way.

We add a new CSS/tailwind layer exclusively for not variants so that users can take full advantage of this feature.
I could use a bit more background on how the @tailwind layers are setup/config'd so that I can add a custom one for this. I think this would likely require with its own dedicated addNotVariant and matchNotVariant helper functions, or something to that effect.
For any added directly to the CSS via @layer variants, I'm thinking we could use either ref a new layer notVariants which is probably the simplest way to go, or we can use a nested layer within the existing variants layer called not which could then be ref'd as @layer variants.not. I've gone back-and-forth on which impl I like better personally, and I'm totally indifferent now. Either one would work great imo and allow the user to add their one not variants and use them effectively.

@adamwathan & @RobinMalfait any thoughts here?

@brandonmcconnell Closing this, since the main PR was closed also. Thanks again for working on this, though.

@MichaelAllenWarner It was a pleasure. Until next time 🙂


:bug: Backport mac policy to release 1.1

/test-ubuntu-integration-release-1-1

/test-ubuntu-e2e-feature-release-1-1
/test-centos-e2e-feature-release-1-1

/approve


Creating customer with multiple addresses

Customers Version: 0.5.0
What were you trying to do?
add customer with multiple addresses
What did you expect to see?
customer added successfully
What did you see?
Error customer already has an address with type 'primary'
How can we reproduce the problem?
So, my question is about this function
func validateAddresses(addrs []address) error {
	hasPrimaryAddr := false
	for _, addr := range addrs {
		if hasPrimaryAddr {
			return ErrAddressTypeDuplicate
		}

		if err := addr.validate(); err != nil {
			return fmt.Errorf("validating address: %v", err)
		}

		if addr.Type == "primary" {
			hasPrimaryAddr = true
		}
	}

	return nil
}

in case we pass multiple addresses while creating customer, for example:
[secondary, secondary, primary] - customer will be created successfully
[primary, secondary, secondary] - this will fail with error customer already has an address with type 'primary'
function will not check if second and third addresses in array is secondary
My guess, for this function, it should look like this
func validateAddresses(addrs []address) error {
	hasPrimaryAddr := false
	for _, addr := range addrs {
		if hasPrimaryAddr && addr.Type == "primary" {
			return ErrAddressTypeDuplicate
		}

		if err := addr.validate(); err != nil {
			return fmt.Errorf("validating address: %v", err)
		}

		if addr.Type == "primary" {
			hasPrimaryAddr = true
		}
	}

	return nil
}

But maybe i'm getting a wrong vibes on what to expect from this function/functionality

Yep. That's totally a bug. I'll release v0.5.1 with a fix.

https://github.com/moov-io/customers/releases/tag/v0.5.1 has been released. Can you verify @mind-rot? Please re-open or reply here if you run into issues.
Thanks for the report!


[README.md] bold styling not applied to text

Notes for Reviewers
This PR fixes #9053

Thank you, @xiangpingjiang 👍

@xiangpingjiang the lint erro is fixed, will you just update your branch with latest changes so we can merge this pr

@xiangpingjiang the lint error is fixed, will you just update your branch with latest changes so we can merge this pr

I will do it soon

@xiangpingjiang the lint error is fixed, will you just update your branch with latest changes so we can merge this pr

I will do it soon

Just take a pull from the upstream master and merge with your local branch and push

Yay 🎈


Null when try get time .DeviseTime

Description
Something wrong with DeviseTime(); in 4.2.1
Environment
.net 472; Appium server 1.17.1, Appium client 4.2.1; Android on real device and emulator; Selenium 3.141
Details
it works ok on 4.1.1
var actualDeviceTimeRaw = Driver.DeviceTime;
string parsedDeviceTime = DateTime.Parse(actualDeviceTimeRaw).ToString("h:mm tt");

But
in  4.2.1 get null ref exeption
Exception stacktraces
gist

@grishukov Do you recall which driver you were using?

@grishukov Do you recall which driver type you were using?

it was Android UIAutomator2 and still reproduce on 4.3.0

@grishukov Do you recall which driver type you were using?

it was Android UIAutomator2 and still reproduce on 4.3.0

Thanks @grishukov I'll get a pr out for it today

Thanks @grishukov I'll get a pr out for it today

On its way out

On its way out


Decide on an actual release strategy

Prezto has traditionally been a framework where you run from master directly and have your own patches added on top, but I think it may be time to add a stable branch and start tagging releases. This way we can start releasing potentially backwards incompatible changes and have a clear way to migrate between releases.
This also relates to #1329
I'm imagining a system like this:

Any PRs will be merged into master. This will be the default branch.
A stable branch will be added where releases will be tagged and merged to.
Release versions should use signed tags and merges into stable should (potentially) be signed
Versioning should probably follow semver, though I'm not sure how we should handle breaking changes of modules themselves because I don't want the version number to skyrocket.

Optional things:

The updater would be amended to handle updating from releases (or running from the stable branch), somehow

Does anyone else have opinions or ideas on this?

BTW you can also easily sign the source code archives created by GitHub independently to the git tag/commits: https://github.com/rugk/gittools/blob/master/signrelease.sh

While I think this is a good idea, I'm hesitant about it as well. While it allows more control, it also adds complexity to both the collaborators and the git log graph. While it's not a huge deal for us, the log graph does take a large hit by moving to this method. If you look at the log graph, by and large, it stays pretty much on one lane from 2011 up until all of us were added. Some things before that appear to be in the style that was popularized by nvie back in the day. Now I've said log graph a lot of times, but here's why I'm calling it out specifically:

My preferred merge method is to rebase or cherry-pick since this kind of project tends to create a hell of a log graph. It requires advanced Git knowledge compared to pressing a green button on GitHub. link

I agree that having tags and releases would be beneficial especially if it continues to garner interest (and judging by what I can see, it has continued to do so) and that having a stable and development branch would be the way to get there. I just don't want to explicitly go against what has already been brought up. I would have benefited from a stable branch when I finally was able to come back as everything broke on me, which became a time consuming process of unwinding things, but I think that also comes down to thorough testing of anything that's getting merged. To keep this on-topic though, I think that if we're going to change the way that branches and releases happen, that @sorin-ionescu needs to sign off on whatever that change is going to be.
All that being said, if we are going to change the branching strategy, I need more information on how release management is going to be handled before I can comment. Is this a traditional "agile" workflow with sprints? Are features being cherry picked for merge or is this a lump sum dump from one branch to the next? If it's a lump sum dump, is there a "code freeze"?

@indrajitr @jeffwidman @facastagnini - Thoughts anyone?

I agree with doing our best to keep a clean log graph. Would it be acceptable to aim for a clean graph on one branch (potentially develop) and have the master branch pull in features deemed stable from there? It would unfortunately mean merging most patches twice, but it may be a worthwhile tradeoff.
Alternatively, we can take snapshots of the develop branch, but that would probably require a feature freeze period and I'd like to avoid that if possible.
If we manage to reach an agreement (and that means everyone who weighs in needs to agree with the plan, and isn't making any concessions) between most of the other contributors before we get a response from Sorin (it's been more than 3 months since he's been around) I would feel alright implementing it. But, aside from that or Sorin making a decision, I would not feel comfortable moving to a different way of managing this project.


Release v0.3.0

@JuliaRegistrator register

Registration pull request created: JuliaRegistries/General/60834
After the above pull request is merged, it is recommended that a tag is created on this repository for the registered package version.
This will be done automatically if the Julia TagBot GitHub Action is installed, or can be done manually through the github interface, or via:
git tag -a v0.3.0 -m "<description of version>" 47f4a794c1fcd912b03f9f92d5c2ab52719ba776
git push origin v0.3.0


Changes for throwing BLUETOOTH_SOCKET_UNAVAILABLE exception when No SDP ...

Fixed #61 with commit 654a3f70e1b918ce711673583b28de45c05598ef

Wow, this try/catch logic is really messy and complicated.  It should probably be broken up into multiple functions to be more readable.
"SYNC" should be changed to "SDL" before we can merge this.

"SYNC" changed to "SDL"


HIL testing

bors try

bors try

Closing this for now since I don't have a good way to actually deploy the GHA runner reliably.


[zh] Update reference\glossary (8)

Update about reference/glossary,this chapter is often used, so make adjustments,and ensure all these files were still in sync with English upstream now.
the following
content/zh-cn/docs/reference/glossary/cloud-provider.md
content/zh-cn/docs/reference/glossary/control-plane.md
content/zh-cn/docs/reference/glossary/contributor.md
content/zh-cn/docs/reference/glossary/controller.md
content/zh-cn/docs/reference/glossary/cri-o.md

Signed-off-by: ydFu<EMAIL_ADDRESS>

/approve

/lgtm


[bug] 1.13.0 has bug,if dragable container within continer when drag,it will lost in some times

if dragable container within continer when drag,it will sort unexpectable lost draging element in some times
1.10.2 works fine

1.13.0

reproduction:

put a sortable main container on root sortable container
put 3 sub  sortable container in sortable main container,use Array.slice()(beacuse it was a carousel) to just show one of sub sortable container
drag sortable main container sort with sibling elements,it will lost or flashing

Please create a JSBin reproducing this so I can debug it

Please create a JSBin reproducing this so I can debug it

this case hard to reproducing cause lot of works,

Please create a JSBin reproducing this so I can debug it

i'm afraid can't put it on jsbin beacause it contain a heavy code.but i was found different behavior between 1.10.2 and 1.13.0.
when i regist a sortable group Root and regist sortable group A in Root, when add sub group in A , if i drag sub-A to Root ,the 1.13.0 seems create a new event/element and replace old event.
this action like "Nested Sortables Example " in http://sortablejs.github.io/,but all action will transfrom to a data strcture like this:
{
    node: 'root',
    child: [
        {
            name: 'A',
            child: [
                { name: 'sub-A' }
            ]
        }
    ]
}

and listen sortablejs event to modify data structe,and re-render all view.
registInnerDrag(parentInstanceKey, dragParentElement) {
    // parentInstanceKey expect Root
    const sortableOption = {
        animation: 200,
        group: {
            name: 'A',
            pull: true,
            put: true,
        },
        onStart: (e) => {

        },
        onAdd: (e) => {
            // parentInstanceKey will log A in 1.13.0,in 1.10.2 log Root
            console.log(parentInstanceKey)
        },
        onUpdate: (e) => {

        },
        onRemove: (e) => {

        },
        onEnd: (e) => {

        },
    };
    Sortable.create(dragParentElement, sortableOption);

}

all


Is IntentsUI implementation required for background handling to work?

I am trying to implement Siri Shortcuts in my project based on this page, but I was wondering if the implementation of the IntentsUI part is required to get background handling to work? In my case, invoking the shortcut doesn't call the IntentHandler class but opens the application.

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

ID: 3da39de6-3748-ba7c-2d15-3a9ad9df4f65
Version Independent ID: ea596609-f465-8d5e-cda8-8369374f55b5
Content: Siri Shortcuts in Xamarin.iOS - Xamarin
Content Source: docs/ios/platform/introduction-to-ios12/siri-shortcuts.md
Product: xamarin
Technology: xamarin-ios
GitHub Login: @conceptdev
Microsoft Alias: crdun

Thanks for submitting an issue and we apologize for the delayed response. The requested updates haven't been made since the creation of the issue, and the timeline for resolution may vary based on resourcing, so the issue is being moved to an internal repo to better track it.


Route parameter and nested JSON parameters.

Is there a way to annotate route parameter similar to bodyParam or queryParam?
Also I'm unable to add nested JSON params. This is my example request:
{
    "personal_details":{
        "age":"35",
        "weight":"220",
        "height_ft":"5",
        "height_in":"9",
        "gender":"Male"
    },
    "lifestyle":{
        "lifestyle":"Sedentary"
    },
    "diet":{
        "vegetables":2,
        "fruit":3,
        "protein":2,
        "grains":3,
        "dairy":3,
        "oils":3,
        "calories":1991
    },
    "sleep":{
        "sleep_hr":7
    }
}

I've tried something like:
@bodyParam personal_details object required The personal details of the user.
...
@bodyParam personal_details.gender string required The gender of the user. Example: Male
...
But when I run php artisan apidoc:generate I get the following error:
ErrorException  : htmlspecialchars() expects parameter 1 to be string, array given...
Is this a bug or is it something that is not possible at the moment?

Both of these should be possible in version 4 (unreleased). Check out the 4.x-dev release on Packagist. You might want to see the migration guide too.

Version 4 is out now.


memory-leak: upgrades rimraf to latest and moves to devDependencies

fixes #261

Upgraded dependencies in 0.10.3.


Update classes

Discord updated quite a few classes, breaking some parts of this theme. This PR switches the old classes for the new classes in place using ClassUpdate.

With Discord now having expiring image links, the preview image for the theme no longer loads. This PR also updates the image link to the raw image from this repo.


Submit diagnostics JSON to GCS

In a perfect world, we'd have a constant MQTT connection to GCP, but as a first step, I propose that we start submitting the diagnostics JSON to GCS. We can then consume these from the dashboard and enrich the data (as well as ensuring the onboarding key and data in the dashboard is correct).

Now works. Turns out it was a configuration issue.


[Chip] Invalid prop variant of value CUSTOM_VARIANT_VALUE

[x] The issue is present in the latest alpha release.
[x] I have searched the issues of this repository and believe that this is not a duplicate.

Current Behavior 😯
When a custom Chip variant is defined and tried to be used, a console.error is thrown. I can verify that this does not happen for custom Button variants.
Expected Behavior 🤔
A PropType validation error should not be happening.
Steps to Reproduce 🕹
Create a new MuiChip variant. E.g.
    MuiChip: {
      variants: [
        {
          props: { variant: "light" },
          style: {
            // some styling
          },
        },
        {
          props: { variant: "light", color: "primary" },
          style: {
            // some styling
          },
        },
        {
          props: { variant: "light", color: "secondary" },
          style: {
            // some styling
          },
        },
      ],
    }

And try to use the new variant as <Chip variant="light" color="primary" label="Some Label" />.
Context 🔦
I am trying to create a custom variant for the Chip component, yet am getting a PropTypes validation error. This causes our Jest tests to fail atm (Since we force the tests to fail on any console error).
Your Environment 🌎
"<EMAIL_ADDRESS>  version "5.0.0-alpha.9"
  resolved<EMAIL_ADDRESS>  integrity sha512-pNYMQYMS0d0VJoCLK95il+6Bws0Vepf3OiinME5ySMh87mXlmApffu9GMX21mHgxIuDGV4U0jJDyRk6HC2rUkw==
  dependencies:
    "@babel/runtime" "^7.4.4"
    "@material-ui/styles" "^5.0.0-alpha.8"
    "@material-ui/system" "^5.0.0-alpha.6"
    "@material-ui/types" "^5.1.0"
    "@material-ui/utils" "^5.0.0-alpha.8"
    "@types/react-transition-group" "^4.2.0"
    clsx "^1.0.4"
    hoist-non-react-statics "^3.3.2"
    popper.js "1.16.1-lts"
    prop-types "^15.7.2"
    react-is "^16.8.0"
    react-transition-group "^4.4.0"

"<EMAIL_ADDRESS>  version "5.0.0-alpha.7"
  resolved<EMAIL_ADDRESS>  integrity sha512-zl5iEYZieZRQ9i3mSIxFpzPneMjXjXCp6gw/JsvosZycL/LKMyBpsLnJyiiRBZzvKWo9YavRaFahZtmPyjm3jA==
  dependencies:
    "@babel/runtime" "^7.4.4"

"<EMAIL_ADDRESS>  version "5.0.0-alpha.9"
  resolved<EMAIL_ADDRESS>  integrity sha512-OPdl5cZoZ884nE8Dt5wyDy17t+99/h6aZF3dfSMLk9YjCKMJoQ48oMbcl+FW0zdGsFRCbNCcZxH0BEK4LrbXmQ==
  dependencies:
    "@babel/runtime" "^7.4.4"
    "@material-ui/utils" "^5.0.0-alpha.8"
    clsx "^1.0.4"
    prop-types "^15.7.2"
    react-is "^16.8.0"

<EMAIL_ADDRESS>  version "16.13.1"
  resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e"
  integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==
  dependencies:
    loose-envify "^1.1.0"
    object-assign "^4.1.1"
    prop-types "^15.6.2"

cc: @mnajdova I think you are leading custom variants. So cc'ing you in. Thank you!

Hey @cansin thanks for reporting! Looks like the propTypes were never updated. We need this change:
diff --git a/packages/material-ui/src/Chip/Chip.js b/packages/material-ui/src/Chip/Chip.js
index 2e51fb63c..1caaa011d 100644
--- a/packages/material-ui/src/Chip/Chip.js
+++ b/packages/material-ui/src/Chip/Chip.js
@@ -530,7 +530,10 @@ Chip.propTypes = {
    * The variant to use.
    * @default 'default'
    */
-  variant: PropTypes.oneOf(['default', 'outlined']),
+  variant: PropTypes /* @typescript-to-proptypes-ignore */.oneOfType([
+    PropTypes.oneOf(['default', 'outlined']),
+    PropTypes.string,
+  ]),
 };

 export default withStyles(styles, { name: 'MuiChip' })(Chip);

Would you be interested in creating a PR? :)

@mnajdova sure, let me fork and send a PR your way. Thanks for the quick response!

Do we not have some conformance tests for custom variants? These should catch these issues in the future.

I'm having the exact same issue but with the latest version of MUI and MuiMenu.
 MuiMenu: {             variants: [                 {                     props: { variant: "nestedfilter" },                     style: ...
And getting error:
Warning: Failed prop type: Invalid propvariantof valuenestedfiltersupplied toForwardRef(Menu), expected one of ["menu","selectedMenu"].