studio: cloud exps draft

Cloud experiments guide in Studio. Added a new PR to replace #4584 since I think it should be part of the existing guide for running experiments instead of a new page.
This means we need to update the link in https://github.com/iterative/studio/blob/6e7d2ca4b617387c6d839fa66f1bd264f3ab832f/frontend/src/utils/externalUrls.ts#LL56C3-L56C3 to point here instead.

Let's put a link indicating the current AMI used under the hood so users can debug issues:

Thanks @daavoo! Where can we link to that shows the current AMI? Can we show this in the form itself? I assume we will want to update our default AMI sometimes, so I assume we shouldn't hardcode it in the docs, right?
Why were you unable to debug without launching your own instance manually? I wonder if instead of prioritizing a troubleshooting section, we need to prioritize an issue to be able to ssh into a failed machine and debug. WDYT?

@tapadipti What do you need help with to get this merged?

Thanks @daavoo! Where can we link to that shows the current AMI?  I assume we will want to update our default AMI sometimes, so I assume we shouldn't hardcode it in the docs, right?

We could link to https://registry.terraform.io/providers/iterative/iterative/latest/docs/resources/task#generic-1 and try to keep that updated. In Studio we currently pass the nvidia alias.

Can we show this in the form itself?

We could.
No strong opinion, but I think I would prefer to just put a single link to the docs page with all the info and further links.
We already show a message for the check of credentials with the right permissions and I don't really like the direction of bloating the form with more info messages.

Why were you unable to debug without launching your own instance manually?

Maybe I am missing something but I couldn't find a way to connect to a terminated instance.
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-recover.html

I wonder if instead of prioritizing a troubleshooting section, we need to prioritize an issue to be able to ssh into a failed machine and debug. WDYT?

Makes sense, but we won't it done for the release

@tapadipti What do you need help with to get this merged?

I've made the remaining changes. Want to get a reply on a comment about the credentials section before merging. And add any changes if needed for the AMI troubleshooting conversation.

Let's put a link indicating the current AMI used under the hood so users can debug issues:

Thanks @daavoo! Where can we link to that shows the current AMI? Can we show this in the form itself? I assume we will want to update our default AMI sometimes, so I assume we shouldn't hardcode it in the docs, right?

I second adding this to the form for now. I think there are many more issues users can encounter, and a very incomplete troubleshooting section wouldn't be good.

@tapadipti Thanks for the updates! No blockers from me. Since I opened the PR, once you and/or @daavoo approve, feel free to merge tomorrow.


YOLOX Onnx configuration

💡 Your Question
I have noticed that while using the ONNX converting it's not supported by the YOLOX but when you pass the model the ONNX doesn't give an error but i cannot assign an IOU value resulting into not good results.
so my question is  is YOLOX is support to convert using ONNX version and if not when we can expect to have an ONNX version.
Thank you.
Versions
No response

Not sure why you are saying that ONNX conversion is not supported. If you take a look at the unit tests on .export() then you would see that YOLOX export to ONNX is supported: https://github.com/Deci-AI/super-gradients/blob/c5a7e051a5d4814ba0320a59f1428da0041d6d0a/tests/unit_tests/export_detection_model_test.py

@BloodAxe  Thanks for your response, My reason is that the ONNX Conversion of the YOLOX export results in a significant Difference compared to Model Prediction before the conversion after training.
and also if you look at the support Export according to your documentation it doesn't exist : https://docs.deci.ai/super-gradients/latest/documentation/source/models_export.html

@alihagrassy pardon for late reply.

My reason is that the ONNX Conversion of the YOLOX export results in a significant Difference compared to Model Prediction before the conversion after training.

This usually indicates that image preprocessing is not correct. By default we export model with image normalization included in the model graph (The preprocessing parameters is True by default).
This means you should not be doing image normalization externally and the image input should be RGB image.
Similarly if you exported model without preprocessing - you should be applying image normalization (/255) and also channel reordering (RGB -> BGR).
Most of the issues reported about accuracy issues of ONNX model were caused by this. I suggest to check low hanging fruits first and then re-open the ticket if problem persist.
Re: YoloX - I've checked the code - it should be supported. The docs is probably not re-uploaded to the website.


Support short DNS names

for the moment, Osiris only supports fully qualified DNS: name.namespace.svc.cluster.local
But services can also be accessed using a "short" DNS: name.namespace
This PR adds support for activating a deployment when a request comes with a "short" name

@vbehar, I vaguely recollect there being some reason we hadn't already done this, but it's escaping me right now... and it might just be my imagination that there was a reason. I wanted to just acknowledge this PR. Give me a couple days to think this over.

This should be ok. Thanks again for the contribution @vbehar!


Update modern-go/reflect2 and klog libraries

reflect2 was initializing structures in an init() function of which can be done in a lazy init function (see diff) which avoids the initialization of those objects into memory when a program starts.
klog update is just to keep up in sync with the same version used by kubernetes.

This change is

test-me-please

Coverage increased (+0.1%) to 42.173% when pulling a9d63d607b699f5b52142c7c328e57f168002f3a on pr/update-libraries into 688699b277b81450ea0e5d6107353f02deff940b on master.


Provide audit log access to UI

audit logs are created but not viewable from the UI, this would be very beneficial!
Definition of Done

create api endpoint to retrieve audit logs by rule view_audit
integrate ADMIN role into app but do not allow OrgRoles to work for Admins
integrate AUDITOR role into app but do not allow Org Roles to work for Auditors
setup basic frontend page to view audit logs
setup basic front end search index to search audit log lines
yay!

still need the audit logs to be searchable

#62 #61


haiku ucontext for x86_64

r? @JohnTitor
(rust-highfive has picked a reviewer for you, use r? to override)

Seems good, but I'd like to double-check as ucontext_t needed some tweaks in the past and we don't have CI for Haiku.
@nielx Could you check it if you have some time?

I will have a look!

I think there may be some issues. One thing that might be helpful is to run the automated tests yourself. In the root of the source, do a ./ci/run.sh --target=x86_64-unknown-haiku and you will get the feedback on whether it works or not.

Unfortunately I tried to run CI already but I run beta 3 version and the ctest2 crate compilation gets stuck

If you are running in a VM, you might want to give it more memory. My 2GB Haiku Beta3 VM can run the tests.

I set it from start with 4GB the overall VM does not get stuck just the crate compilation but I can use the system doing other things.

In that case I am not quite sure what is going on. In any case, the remarks I made are things that also trip up the tests.
Two other points:

What is the rationale for implementing this in x86_64 only (and not in x86?)
Are objects of these types always created by the system, or is the user expected to create them themselves? In the latter case, all members should be public, even the reserved data members. Otherwise they cannot be initialized by the user.

In that case I am not quite sure what is going on. In any case, the remarks I made are things that also trip up the tests.
Two other points:

What is the rationale for implementing this in x86_64 only (and not in x86?)
I thought about it but as a second PR once this one cleared up. also crates using it tend to focus on 64 bits (for now at least).
Are objects of these types always created by the system, or is the user expected to create them themselves? In the latter case, all members should be public, even the reserved data members. Otherwise they cannot be initialized by the user.
Mostly created from signal handlers/crash purpose thus users usually tend to look at frame pointer, program counters, generic registers etc ....


TotpUrlError now defined in a private module

Hi
I just tried upgrading to the 3.0.0 release, and the TotpUrlError enum seems to have moved to the url_error module and the reexport here is not public https://github.com/constantoine/totp-rs/blob/master/src/lib.rs#L55.
This gives me these kind of errors in my code:
error[E0603]: module `url_error` is private
  --> src/error.rs:27:27
   |
27 |     TotpUrlError(totp_rs::url_error::TotpUrlError),
   |                           ^^^^^^^^^ private module
   |
note: the module `url_error` is defined here
  --> /home/capitol/.cargo/registry/src/github.com-1ecc6299db9ec823/totp-rs-3.0.0/src/lib.rs:52:1
   |
52 | mod url_error;
   | ^^^^^^^^^^^^^^

or
error[E0603]: enum `TotpUrlError` is private
  --> src/error.rs:27:27
   |
27 |     TotpUrlError(totp_rs::TotpUrlError),
   |                           ^^^^^^^^^^^^ private enum
   |
note: the enum `TotpUrlError` is defined here
  --> /home/capitol/.cargo/registry/src/github.com-1ecc6299db9ec823/totp-rs-3.0.0/src/lib.rs:55:5
   |
55 | use url_error::TotpUrlError;
   |     ^^^^^^^^^^^^^^^^^^^^^^^

Am I missing something on how this is intended to be used?

Hi!
I'm most sorry, this is definetly a typo. I pub'ed use base32 instead of use url_error::TotpUrlError
I am fixing it and releasing it ASAP

This should be fixed with v3.0.1

Wow, thanks for the super fast response :)
3.0.1 worked without problems.


scale_range in postprocessing

@esgomezm  and me are debugging a zero cost model that has scale_range in postprocessing:
  - name: scale_range
    kwargs:
      mode: per_sample
      axes: xyzc
      min_percentile: 0
      max_percentile: 100

According to the spec this should be valid (i.e. reference_tensor is  not defined, so the tensor itself should be used).
However, when running the model the following error is thrown:
(bio-core-dev) pape@mokshi:~/Work/bioimageio/use-cases/zero-cost$ bioimageio test-model unet-no-thresh/model.yaml
Traceback (most recent call last):
  File "/home/pape/Work/software/conda/miniconda3/envs/bio-core-dev/bin/bioimageio", line 33, in <module>
    sys.exit(load_entry_point('bioimageio.core', 'console_scripts', 'bioimageio')())
  File "/home/pape/Work/software/conda/miniconda3/envs/bio-core-dev/lib/python3.7/site-packages/typer/main.py", line 214, in __call__
    return get_command(self)(*args, **kwargs)
  File "/home/pape/Work/software/conda/miniconda3/envs/bio-core-dev/lib/python3.7/site-packages/click/core.py", line 1137, in __call__
    return self.main(*args, **kwargs)
  File "/home/pape/Work/software/conda/miniconda3/envs/bio-core-dev/lib/python3.7/site-packages/click/core.py", line 1062, in main
    rv = self.invoke(ctx)
  File "/home/pape/Work/software/conda/miniconda3/envs/bio-core-dev/lib/python3.7/site-packages/click/core.py", line 1668, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/pape/Work/software/conda/miniconda3/envs/bio-core-dev/lib/python3.7/site-packages/click/core.py", line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/pape/Work/software/conda/miniconda3/envs/bio-core-dev/lib/python3.7/site-packages/click/core.py", line 763, in invoke
    return __callback(*args, **kwargs)
  File "/home/pape/Work/software/conda/miniconda3/envs/bio-core-dev/lib/python3.7/site-packages/typer/main.py", line 497, in wrapper
    return callback(**use_params)  # type: ignore
  File "/home/pape/Work/bioimageio/python-bioimage-io/bioimageio/core/__main__.py", line 55, in test_model
    test_passed = prediction.test_model(model_rdf, weight_format=weight_format, devices=devices, decimal=decimal)
  File "/home/pape/Work/bioimageio/python-bioimage-io/bioimageio/core/prediction.py", line 487, in test_model
    bioimageio_model=model, devices=devices, weight_format=weight_format
  File "/home/pape/Work/bioimageio/python-bioimage-io/bioimageio/core/prediction_pipeline/_prediction_pipeline.py", line 146, in create_prediction_pipeline
    processing = CombinedProcessing(bioimageio_model.inputs, bioimageio_model.outputs)
  File "/home/pape/Work/bioimageio/python-bioimage-io/bioimageio/core/prediction_pipeline/_combined_processing.py", line 76, in __init__
    raise NotImplementedError("computing statistics for output tensors not yet implemented")
NotImplementedError: computing statistics for output tensors not yet implemented

looks like the default "self" is not implemented yet. I will fix that...


SimpleNodeListProvider obtains node list from System properties instead of ConfigurationManager... again

Hi.
Several months ago I've created an issue #28 with the same problem. My PR was approved and merged by @smadappa.
Now I want to upgrade to EvCache 4.75.0, but see that you've reverted my fix in https://github.com/Netflix/EVCache/commit/ec41e79d1b0599d578a28901677ac177151ca906#commitcomment-21150671 (version https://github.com/Netflix/EVCache/releases/tag/v4.49.0)
What is the reason? Did it break anything?
Thanks in advance!

What we found was ConfigurationManager.getConfigInstance().getString(...) was a blocking call and all Threads would get blocked. This increased the startup times for some of our Apps. I have changed this to DynamicProperty which is also non-blocking but will use Archaius.

I have released 4.76.0 with the above changes.

thanks a lot!


Update index.xml

Hello, would it be possible to replace the (unfortunate) message with the link to slides please?

@mblue9 - We update the site through CI/CD and once we add slide locations to the master sheet it will update automatically.  I'll start this process today.  Apologies for the stock site message.

Ok great, thanks! I'll close this so.


Example code does not error on opening v0 dataset model

Ingest SEG-Y to MDIO using stable v0 Python command.
$ ./real_data_example --print_dataset --dataset_path="ingested_mdio"
No output to terminal.

The expected output should be an error message regarding failure to parse schema.
Need to investigate whether this is an issue in the API skipping some step or the example code needing to be updated.

The behavior is from the example not printing the error status on failure. The returned error for opening v0 is very opaque and should be improved.
Error: NOT_FOUND: Error opening "zarr" driver: Metadata at test.mdio/data/.zarray does not exist
This error is due to the v0 data being further broken down into transpose chunked volumes.


Fixing a few more issues that I ran into regarding documents vs arrays (and function non-autoloading)

I might have a few more commits on this one - talk to me before merging.

Missed this earlier. Your commits have been cherry-picked into https://github.com/10gen-labs/mongo-php-library-prototype/pull/21.


Source-Map is picking random files

[x] bug report

Here are my versions:
Webpack: 1.12.14
Windows 7
Browsers:
Fails in:
Chrome: 51.0.2704.84
Works in:
IE 11,
Chrome 53.0.2767.0 canary (64-bit)
Language:
TypeScript
Bug:
When I select a file in the chrome debugger, the file that actually opens is a random file from my project.
For example, I have the following file: /src/views/configuration/configuration-vm.ts.
When I open this file in the chrome debugger, a random file is loaded from my project instead.  The random file is sometimes a .ts or a .html file.  (However, the CSS files seem unaffected.)
NOTE: The WEBPACK FOOTER clearly says what the file name is along with its module ID.
The odd thing is that I have not updated WebPack for over a month.
I tried this on Chrome Canary and it works fine. (Version 53.0.2767.0 canary (64-bit))  It also seems to work fine in Internet Explorer 11.
Just Chrome Stable seems to have this bug.

+1 have same issue in Chrome v51, will try canary now. thanks!

Been seeing this in Webpack 2 as well for the past couple weeks. I have a feeling it might be Babel related

@mmmeff - I do not use Babel at all.  Just TypeScript to JavaScript.

Weird. Maybe this is a chrome bug then? I'm clueless.
Been seeing the sourcemap entirely failing to load in console messages lately too.

@mmmeff if its bothering you just use Chrome canary for now. I did, very happy!

@egucciar Is this a known chrome bug then? Link?

@mmmeff The OP mentions the source map works in Chrome canary so I tried that. Maybe someone should file this as a Chrome bug instead?

For me it works when I use eval-source-map or cheap-eval-source-map, but not without eval.

I have started to see this as well with Chrome 51.0.2704.103/webpack 3.5.3/Windows 10. Don't know exactly when it started since I don't do JS debugging every day. eveal works here too but since I'm using Babel and ES6 it's not optimal.

Closing as this has been fixed in upstream (Chrome).


Config file resolution fails on Windows

I'm storing my config in lws.config.js, in my project root.  Running npx lws results in a stackdump:
Error [ERR_UNSUPPORTED_ESM_URL_SCHEME]: Only file and data URLs are supported by the default ESM loader. On Windows, absolute paths must be valid file:// URLs. Received protocol 'c:'
    at Loader.defaultResolve [as _resolve] (internal/modules/esm/resolve.js:777:11)
    at Loader.resolve (internal/modules/esm/loader.js:88:40)
    at Loader.getModuleJob (internal/modules/esm/loader.js:241:28)
    at Loader.import (internal/modules/esm/loader.js:176:28)
    at importModuleDynamically (internal/modules/esm/translators.js:114:35)
    at exports.importModuleDynamicallyCallback (internal/process/esm_loader.js:30:14)
    at getStoredConfig (file:///C:/Workspace/my-project/node_modules/lws/lib/util.mjs:60:7)
    at LwsCli.getConfig (file:///C:/Workspace/my-project/node_modules/lws/lib/cli-app.mjs:137:32)
    at LwsCli.start (file:///C:/Workspace/my-project/node_modules/lws/lib/cli-app.mjs:26:33)
    at file:///C:/Workspace/my-project/node_modules/lws/bin/cli.mjs:5:5

The problem is that this dynamic import is getting the Windows-style literal path C:\Workspace\my-project\lws.config.js instead of a file URL.  Since you already require a pretty modern Node, I think you can safely use pathToFileURL which should work correctly on any platform.

Fixed by your PR #19. Thanks!

Since you already require a pretty modern Node

Node versions prior to v14 are no longer maintained..

Wow, that's fast turnaround 😄
Per the release schedule, Node 12 LTS is still in Maintenance and doesn't hit EOL until April of next year.  Node 14 is only a year old -- venerable in the fast-moving world of JS, but a relative baby in terms of corporate IT.  (I work with government, and a lot of the tech is, uh, not new.)

yeah, the big institutions are often the furthest behind.. I realise v12 is still maintained, the main reason i moved support to  minimum v14 was because the codebase is now ECMAScript with a package.json that uses the exports feature.. v12 supports ESM but behind a flag (until recently I believe - i think the flag requirement was removed in v12.20, will need to check).. I also had an issue with the CommonJs build of lws failing in v12 (the build produced by rollup didn't support dynamic loads, required by plugin-loading features like --view and --stack)..
If you have any general feedback in the future, feel free to post in the discussions tab..

Was a good point about the slow-moving institutions, so support extended back to v12.20


Handling Late Arriving Dimensions Using a Reconciliation Pattern /  McGraw Hill Education

URL:
https://databricks.com/blog/2020/12/15/handling-late-arriving-dimensions-using-a-reconciliation-pattern.html
Review (1-2 sentences):
Several approaches to how to handle late-arriving dimensions. Its problems and evolution from the first idea.
No soo is deep as would like but the core ideas are understandable.
Do not forget to add labels.

Published in the Digest #1


Loading no time but when the answering server

How can I make the button animation start when I click on it and end when you receive the response from the server ?
Thank you

You can call button.startLoadingAnimation() right before you make your request.
Once you receive the response from the server, you can then call
button.startFinishingAnimation(1) { // your completion code goes here }
One thing I had to be careful of was that if your server request is happening on a background thread, you'll have to jump to the main thread to call the finishing animation.
So, as an example:
func logIn() {
	button.startLoadingAnimation()

	async.background {

		let results = try! query.findObjects()
		if results.count == 0 {
			// insert alertView telling user that their details don't work
		}
		else {
			// return to main thread to complete login
			async.main {
				button.startFinishingAnimation(1) {
				let sb = UIStoryboard(name: "Main", bundle: nil)
	            		let vc = sb.instantiateViewController(withIdentifier: "MainVC")
				vc.transitioningDelegate = self
				UIView.animate(withDuration: 1, animations: {
					self.present(vc, animated: false, completion: nil)
				})
		}
}


Getting this error "ActionView::Template::Error: No route matches {}"

I am testing maktoub with delayed jobs. but I am having some issues. Could you please help.

rake maktoub:test['welcome']
...
2014-01-16T20:22:53-0800: [Worker(delayed_job host:ubuntu pid:4342)] Job Class#publish (id=24) RUNNING
Rendered maktoub/newsletters/welcome.erb within layouts/maktoub/newsletter_mailer (0.9ms)
Rendered layouts/maktoub/_styles.erb (0.4ms)
2014-01-16T20:22:53-0800: [Worker(delayed_job host:ubuntu pid:4342)] Job Class#publish (id=24) FAILED (0 prior attempts) with ActionView::Template::Error: No route matches {}
...

closing. Re-open if you're still having trouble.

Just encountered the same above issue. My setup is as followed:
  mount Maktoub::Engine => '/maktoub'

I have a template named: 'test_template' which is under maktoub/newsletter. Now when I visit /maktob/test_template I receive No route matches [GET] "/maktoub/test_template" ?
Using:  Ruby 2.1.2/ Rails 4.1.5

it would be under maktoub/newsletters/test_templates

@zawaideh got it. I think the readme needs slightly readjusting: https://github.com/Sandglaz/maktoub#view-in-browser I think it should read as:
To be able to view your newsletter in a browser add it to routes.rb.

mount the engine at a path of your choice.
Providing you set your engine route as: mount Maktoub::Engine => '/' you would access it as followed:

http://example.com/newsletter/my_awesome_newletter

updated. Thanks for the suggestion.


Scheduled size sampling

Thanks for this great command-line setup for CLIP+SIREN, very cool repository!
I've been playing with the original notebook and though I would bring my somewhat experimental code over in a PR. I can't prove it's an actual general improvement over the uniformly random sampling by Ryan/advadnoun, but seems to be helpful for my runs.
So, in my own experiments, especially ones going upto 10,000 steps, the random sampling performs quite poorly in the later iterations, and seems a bit wasteful. Three small patches that seemed to increase quality (only anecdotally for me, using 32 layers and >4000 steps):

sort the sizes for each step.
guarantee that each size range gets drawn on each step (instead of e.g. having steps heavily skewed to large or small windows)
i tweaked around and ended up with 6 "useful" windows, 0.38-0.48-0.58-0.68-0.78-0.88-0.98.
start with skew to smaller windows and dynamically increase the distribution to wider ones every 500 or so steps

Minor notes in the PR:

20 epochs seemed plenty to saturate reasonably by default, and having the epoch size divisible by 150 gets them self-contained
switch spaces to underscores in filenames

I'm also a bit baffled by the fixed initial seed, though it made it easy to cross-compare from the same initial point.
Here is a "red apples in a bowl" 4000 steps, 32 layers, from main:

And here is the same "red apples in a bowl" 4000 steps, 32 layers, from this PR:

Anecdotal, but the PR-generated image is 8% larger, and the size tends to increase along with saturating the model. Even if I'm completely off base, which is possible - maybe someone else has related observations in such longer+deeper training runs, or could find this useful to experiment a little and suggest something better. I was just trying to squeeze a little more out of the compute. Thanks again for the convenient CLI tool!

Since the main branch moved from making the PR, here's another generation of the input above (again 32 layers, 4000 steps) with the latest main. The image size halved, and training seemed to hit a roadblock a bit earlier than usual, but this is still anecdotal land - hard to make conclusions from one example run.

Since the main branch moved from making the PR, here's another generation of the input above (again 32 layers, 4000 steps) with the latest main. The image size halved, and training seemed to hit a roadblock a bit earlier than usual, but this is still anecdotal land - hard to make conclusions from one example run.

@dginev Amazing Deyan! Let me try out your regularizations later tonight and see if there is a difference
For now, I've increased the depth, because I notice a indisputable improvement just going from 16 to 32, as you are doing in your PR!

@dginev Amazing Deyan! Let me try out your regularizations later tonight and see if there is a difference
For now, I've increased the depth, because I notice a indisputable improvement just going from 16 to 32, as you are doing in your PR!

@dginev What are your thoughts on perhaps bringing in a discriminator from a well-trained GAN (ex. biggan) and bias the learning for realism as well? (even though the surreal outputs at the moment is already quite enjoyable)

@dginev What are your thoughts on perhaps bringing in a discriminator from a well-trained GAN (ex. biggan) and bias the learning for realism as well? (even though the surreal outputs at the moment is already quite enjoyable)

You mean similarly to adverb's recent attempts ? I'm a fan of the goal and hope it works, but am truly just learning the ropes in the visualization domain, coming from the NLP side of things.

You mean similarly to adverb's recent attempts ? I'm a fan of the goal and hope it works, but am truly just learning the ropes in the visualization domain, coming from the NLP side of things.

@dginev ahhh so it has been tried! I wonder if they can be combined..

@dginev ahhh so it has been tried! I wonder if they can be combined..

@dginev I guess my idea is different in that I'll be using both CLIP and a Discriminator on the output of the SIREN. The discriminator will be an extra critic on realism

@dginev I guess my idea is different in that I'll be using both CLIP and a Discriminator on the output of the SIREN. The discriminator will be an extra critic on realism

Oh I see, interesting - that I haven't seen or thought about. You would need the latent spaces to be "compatible" in some loose sense, so that the realism doesn't appear as OOD junk to CLIP. If the prompt is "a photo of a newspaper cartoon about Calvin and Hobbes", one has to wonder how the two models will align - since that is genuinely intersecting the realms.
The big issue currently bothering me is the released CLIP 224x224 aspect ratio. It's hard for me to estimate how much of the troubles in generation fidelity are actually related to scaling into/out of that form factor, both in the generation we're doing here, as well as in the training data given to CLIP in the first place. I'm also not sure if this will add extra artifacts if next to a BigGAN co-guide...
If everything was trained over the same data and resolution it would be a little saner. The comment I love giving is that "the NLP prompts are really addictive to play with", so one can definitely sink a lot of time experimenting...

Oh I see, interesting - that I haven't seen or thought about. You would need the latent spaces to be "compatible" in some loose sense, so that the realism doesn't appear as OOD junk to CLIP. If the prompt is "a photo of a newspaper cartoon about Calvin and Hobbes", one has to wonder how the two models will align - since that is genuinely intersecting the realms.
The big issue currently bothering me is the released CLIP 224x224 aspect ratio. It's hard for me to estimate how much of the troubles in generation fidelity are actually related to scaling into/out of that form factor, both in the generation we're doing here, as well as in the training data given to CLIP in the first place. I'm also not sure if this will add extra artifacts if next to a BigGAN co-guide...
If everything was trained over the same data and resolution it would be a little saner. The comment I love giving is that "the NLP prompts are really addictive to play with", so one can definitely sink a lot of time experimenting...


OpenCL 2.1 Package

Add Opencl 2.1 package, includes headers and ICD. Current package hosted in my repo, but will post a PR to hunter_packages/opencl when available.
Testing repo at: https://github.com/caseymcc/hunter/tree/pkg.opencl
Changes from template:
-Apple not supported (including iOs) (only OpenCl 1.2 seems to be supported by Apple)
-Android not supported
-Visual Studio 9-11 not supported (headers include const expressions)
-mingw (on Windows) not supported (links against native directX which has some Microsoft specific code that gcc does not understand).
Latest Test:
https://travis-ci.org/caseymcc/hunter/builds/176831259
https://ci.appveyor.com/project/caseymcc/hunter/build/1.0.29
Considering nVidia does not support OpenCL 2.1 I will go back a little later and add a 1.2 Version (hopefully get it working with Apple then)

but will post a PR to hunter_packages/opencl when available

Created https://github.com/caseymcc/OpenCL-ICD-Loader . You're invited (check your email). Read this: https://docs.hunter.sh/en/latest/creating-new/cmake-dependencies.html#maintenance

@headupinclouds +cc

-Apple not supported (including iOs) (only OpenCl 1.2 seems to be supported by Apple)
-Android not supported
-Visual Studio 9-11 not supported (headers include const expressions)
-mingw (on Windows) not supported (links against native directX which has some Microsoft specific code that gcc does not understand).

I will create pkg.opencl later and you can send the pull request with excluded toolchains and descriptions. I will start with the full set of toolchains.

-Android not supported

@caseymcc : Is there a fundamental blocking issue for Android, or is this just not needed?

It is not needed for Android, for Android you have to link against the NDK which should have both the header files and the lib.

@caseymcc ready to be tested?

Should be good to go.

Should be good to go

Great, testing now:

https://ci.appveyor.com/project/ingenue/hunter/build/1.0.1206
https://travis-ci.org/ingenue/hunter/builds/180306949

@caseymcc Some toolchains failed as expected (matches your list). Please send pull request to pkg.opencl branch which will exclude broken toolchains. Please add any useful info about status in comments.

New testing:

https://ci.appveyor.com/project/ingenue/hunter/build/1.0.1228
https://travis-ci.org/ingenue/hunter/builds/181623064

Uploading:

https://ci.appveyor.com/project/ingenue/hunter/build/1.0.1229
https://travis-ci.org/ingenue/hunter/builds/181653764

Released: https://github.com/ruslo/hunter/releases/tag/v0.17.3
@caseymcc feel free to add new wiki page


feat: added custom alert box

GSOC'22 Task Assignment
Replaced all alerts with the custom alert Dialog box
Describe the changes you have made in this PR -
Created a modal to show the messages see alertDialog.js file, it returns a function -> alertDialog() that takes message as an argument and opens a dialog whenever the condition triggered.
This can be done in 3 Major Steps

Creating a function that Opens the Alert dialog Box: alertDialog()
Calling the Function when an event occurred, opens the dialog box with an error message.
Adding event Listener on the ok button, clicking it will close Alert Modal.
Modals can be created using Jquery Dialogs.

Screenshots of the changes (If any) -

Work Flow

Wireframe - https://www.figma.com/proto/dlFf2rKctc695vOXcCrNg5/Untitled?node-id=1%3A2&scaling=min-zoom&page-id=0%3A1&starting-point-node-id=1%3A2

Coverage remained the same at 81.907% when pulling 6c5742a0fdf8b12a5371a4826b41129e824e24ba on pulkit-30:alertDialog into 55ddeacf50e5f43f103599869f08abb6059f0d16 on CircuitVerse:master.


Binary logging file size expectation

Steps to reproduce
The documentation for binary logging sells the technology as smaller, faster and more better than text logging. My experience is the binary logs grow into the hundreds of megabytes.
My build typically contains about 900+ projects. The project sequencing is controlled by my own graph build. This tool predates the MSBuild work in this area and I have a custom build cache/accelerator (predates the BuildXL, Bazel releases etc).
My question is should 900 projects emit a 538 MB binlog?
I notice these variables are present - I'm assuming these options are set internally when the binlog is enabled.
MSBUILDLOGIMPORTS = 1
MSBUILDTARGETOUTPUTLOGGING = true
Command line
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\MSBuild.exe /nologo /bl:C:\B\448\1\s\build.binlog /clp:FORCENOALIGN=true /flp:Verbosity=Normal /m:4  /target:BuildAndPackage C:\B\448\1\s\_BUILD_1110301\Src\Build\ComboBuild.targets

My problem is I cannot upload the binlog at the end of a build to the CI server (TFS) due to the large size at the number of builds per day.
The text log which is just the TFS build agent console slurp - not the MSBuild file logger is around 13 MB zipped - but obviously with less fidelity.
Environment data
Microsoft (R) Build Engine version 15.9.21+g9802d43bc3 for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.

<IP_ADDRESS>4

What you're seeing is currently expected. We're working on reducing binlog size and you can see a summary of this planned work here:
https://github.com/KirillOsenkov/MSBuildStructuredLog/wiki/BinLog-Perf
Binlog philosophy was always to log as much as possible to enable best possible diagnostics. The price for that is what you're seeing. There are a few knobs you can tweak to reduce the size and various associated tradeoffs.
538 MB for 900 projects is roughly what I would expect. If you "play back" the binlog into a text log using msbuild msbuild.binlog /flp:v=diag /noconlog it will probably expand to ~10-20 GB of raw text.

Fantastic info - thank you.


feat: add variables documentation to be use in customization

add variables documentation to be use by the customizer

Nice, I like it.
Thanks for the PR!


Extending grafitti schema

getSchema returns a GraphQLSchema object based on MongooseModels, how do I go about adding my own types to this schema?
Consider the use case:
I have a Post object with getLikedFriends method, which looks up all Post.likes references and queries Users collection to check if any of the User.friends references for the loggedIn user match with Post.likes
So instead of creating a new Mongoose model and re-implementing the logic inside my pre-existing getLikedFriends method, I'd like to just add this as a new type to the GraphQL schema and let the resolve function call Post.getLikedFriends(ctx.loggedInUser)
This is something I can easily do using vanilla GraphQL but not sure how to augment the schema returned by graffiti :/

In short I'm trying to figure out how to add types that resolve over arbitrary code over mongoose models, given the biggest selling point of GraphQL is the ability to query over arbitrary code, there should be a canonical way to do this with graffiti-mongoose

@zuhair-naqvi Do you have a preferred API for getSchema to add this feature?

I think producing the schema directly from models is too restrictive, instead the top-level item in the getSchema array could be a higher-order object that specifies the model and any arbitrary queries to be added to the model's field definition. Graffiti could then pass the instance of the model as the first parameter to the resolve method of each query, allowing for something like the following pseudo-code:
let Post = mongoose.model('Post');
let User = mongoose.model('User');

PostType = {
	model: Post,
	queries: {
	    getLikedFriends: {
	      type: new GraphQLList(UserType),
	      args: { id: { type: GraphQLID } },
	      resolve: (instance, args) => instance.getLikedFriends(agrs.id, ctx.loggedInUser)
	    },
	    customSearch: {
	      type: new GraphQLList(Post),
	      args: {
	      	keywords: { type: String },
	      	isByFriend: { type: Boolean }
	      },
	      resolve: (instance, args) => instance.performCustomSearch(args.keywords, args.isByFriend)
	    }
	}
}

UserType = {
	model: User,
	queries: {
		getPosts: {
			type: new GraphQLList(PostType),
			resolve: (instance) => instance.getRecentPosts()
		}
	}
}

const schema = getSchema([PostType, UserType]);

);

I'm quite new to GraphQL so let me know if this is making sense!

+1 for providing a way to extend the default set of queries (and hopefully mutations too).
I also like the idea to add a new config step so that not everything is exposed by default. This is the most common use case anyway: I believe most people would want to expose only a subset of their queries and mutations. I know that it's possible to hide fields or restrict access with hooks, but it's messier and more verbose. Having a dedicated step for that seems to be the cleanest approach.

Perhaps add a fields property to config which allows you to choose which default bindings you wish to expose so the resulting object might look like:
let User = mongoose.model('User')
UserType = {
model: User,
fields: [ ...User.schema.paths],
queries: {
  q1(_instance) => /** your code **/,
  q2(_instance) => /** your code **/,
}

This would be necessary for anyone with existing application code to be able to use graffiti-mongoose for real use cases.

Feels like we're re-inventing the wheel here. You're wrapping what looks suspiciously like the graffiti model around your mongoose model. Maybe we could just give the user the opportunity to pass in the graffiti model themselves and/or merge it with our generated model?

@burkhardr you're right. There needs to be a way to augment graffiti models, to pass in the array of exposed fields as well as attach callbacks to the graffiti model that receive the model instance, args and AST for querying - haven't given mutation much thought yet but this should generally work for both.
The other question this brings up is how you attach additional types say I want to fetch some data from mongo but other from a RESTful backend, which is again a key selling point of GraphQL.
The more I think about this the more it's becoming apparent that graffiti should delegate control of the underlying GraphQL schema / RootQuery to users rather than building the entire schema for them. This will allow users to gradually phase out the ORM as ORMs only really make sense in the legacy REST world.

Any further thoughts?

@zuhair-naqvi I am open to changes! First, we definitely need to split up this project into 2. Migrate out the non Mongoose specific parts into an independent library, that would make creating new adapters easier and we could take advantage of the graffiti model too. I will be really busy in the next few weeks though (finishing school), I am happy to see PRs and following suggestions!

I agree that we definitely need a way to extend the current schema, preferably with easy access to the existing schema.
I think there's two things we need to be able to do:

Add queries and mutators to existing mongoose.Schemas/mongoose.models
Add arbitrary extensions and resolves to the schema

For #1, we could add queries and mutators to the mongoose.Schema directly:
const PostSchema = new mongoose.Schema({
  name: String
  // ... etc
})
PostSchema.queries.getLikedFriends = ...
PostSchema.queries.customSearch = ...

For #2, we could insert another hook in RootQuery like this:
  const RootQuery = new GraphQLObjectType({
    name: 'RootQuery',
    fields: {
      viewer: viewerField,
      node: {
        name: 'node',
        description: 'Fetches an object given its ID',
        type: nodeInterface,
        args: {
          id: {
            type: new GraphQLNonNull(GraphQLID),
            description: 'The ID of an object'
          }
        },
        resolve: addHooks(getIdFetcher(graffitiModels), singular)
      },
      ...(addQueryHooks(queries)) // <-- here
    }
  });

... and similarly for RootMutation.

I've been looking more into this and I just wanted to leave a tip for anyone else trying to extend the graffiti-mongoose schema.
Just a word of warning, this uses private variables so it's a bit of a hack until an official way to extend the schema is available.
Basically the idea is that instead of using getSchema we'll use getFields and 1. extract the RootQuery 2. modify it 3. use your modified RootQuery to build the schema. The reason we're able to rebuild the RootQuery is because GraphQLObjectType stores the GraphQLObjectTypeConfig in the instance variable _typeConfig.
Here's the (hacky) solution:
const graffitiModels = getModels([Post, User]);
var graffitiFields = getFields(graffitiModels);

var testRootType = new GraphQLObjectType({
  name: 'testRoot',
  fields: {
    hello: {
      type: GraphQLString,
      resolve() {
        return 'world';
      }
    }
  }
});

var originalRootQuery = graffitiFields.query._typeConfig;
originalRootQuery.fields.test = {
  type: testRootType,
  resolve(obj) { return obj; }
}

var fields = {
  query: new GraphQLObjectType(originalRootQuery),
}

const schema = new GraphQLSchema(fields);

Adding customQueries and customMutations to getSchema:
https://github.com/wellth-app/graffiti-mongoose/commit/404395f4f801e069f855ee014ea969f2b6cba83c
@tothandras may review it and import

Is there any documentation for customMutations?
For example, how to use existing types generated/defined by graffiti-mongoose for say, the output fields of mutationWithClientMutationId

@zopf could you provide a simple example of customQuery and customMutations?

@sibeliusseraphini please see sample unit tests below taken from https://github.com/wellth-app/graffiti-mongoose/commit/b2b841e7a6d2ff44eb977b2fa1466799c587f037#diff-8b7cf0fa5fd81301d632e0a6f8fb2af6
and to @Secretmapper's point, I ended up working around that by creating a type cache (disabled by default) in the type module: https://github.com/wellth-app/graffiti-mongoose/commit/4f59703af1e929325fa7fa9d31cccebdb56caef5 and https://github.com/wellth-app/graffiti-mongoose/commit/4f59703af1e929325fa7fa9d31cccebdb56caef5
it('should return a GraphQL schema with custom queries', () => {
      const graphQLType = types.TestQuery;
      const customQueries = {
        testQuery: {
          type: graphQLType,
          args: {
            id: {
              type: new GraphQLNonNull(GraphQLID)
            }
          }
        }
      };
      const schema = getSchema({}, {customQueries});
      expect(schema).instanceOf(GraphQLSchema);
      expect(schema._queryType.name).to.be.equal('RootQuery');
      expect(schema._mutationType.name).to.be.equal('RootMutation');
      expect(schema._queryType._fields.testQuery.name).to.be.equal('testQuery');
      expect(schema._queryType._fields.testQuery.type._fields.fetchCount.resolve()).to.be.equal('42');
    });

    it('should return a GraphQL schema with custom mutations', () => {
      const graphQLType = types.TestQuery;
      const customMutations = {
        testQuery: {
          type: graphQLType,
          args: {
            id: {
              type: new GraphQLNonNull(GraphQLID)
            }
          }
        }
      };
      const schema = getSchema({}, {customMutations});
      expect(schema).instanceOf(GraphQLSchema);
      expect(schema._queryType.name).to.be.equal('RootQuery');
      expect(schema._mutationType.name).to.be.equal('RootMutation');
      expect(schema._mutationType._fields.testQuery.name).to.be.equal('testQuery');
      expect(schema._mutationType._fields.testQuery.type._fields.fetchCount.resolve()).to.be.equal('42');
    });

this custom query is only available on the root node? can i add a custom query inside a Model?

I only added it on the root node.  Haven't really thought about it inside of models...

Inside of models is like a virtual field in fact.
And it would fix some issues: https://github.com/RisingStack/graffiti-mongoose/issues/102, https://github.com/RisingStack/graffiti-mongoose/issues/64, https://github.com/RisingStack/graffiti-mongoose/issues/63, https://github.com/RisingStack/graffiti-mongoose/issues/25

Here's a proposal for these "virtual" fields:
Just add your own fields to the object returned by type.getTypes(models).YourModel.getFields().
Here's an example I just tested and seems to work on my fork.  Please note that I'm using my fork's rebuildCache=false param as I make the call to getSchema, which allows me to use the cached types generated by my first call to getTypes.
const UserSchema = new mongoose.Schema({
    nameFirst: String
});
const User = mongoose.model('User', UserSchema);
const models = [
  User
];
const graphQLTypes = getTypes(models);
const userFields = graphQLTypes.User.getFields();
userFields.myCustomField = {
  name: 'myCustomField',
  description: undefined,
  type: graphQLTypes.User,
  resolve: async function resolveCustomField(value, context, info) {
    // here's where you'd do some kind of fancy filtering or what have you
    return await User.findOne({ _id: value._id }).exec();
  },
  args: []
};
// proves that this custom field stays on the type after it has been set
console.log("graphQLTypes.User.getFields().myCustomField: ", graphQLTypes.User.getFields().myCustomField);
// my code builds a set of custom queries and mutations here...
const customQueries = {};
const customMutations = {};
// Overall Schema
return getSchema(
  models,
  {
    hooks,
    allowMongoIDMutation: true,
    rebuildCache: false, // use cached types from previous getTypes call
    customQueries,
    customMutations
  }
);

Booting up that code (in the context of some other stuff, admittedly) allows me to make the following query:
query justTesting {
  users {
    _id
    nameFirst
    myCustomField {
      _id
      nameFirst
    }
  }
}

... and receive the following result:
{
  "data": {
    "users": [
      {
        "_id": "56cf2e8f2c69da9a7293662f",
        "nameFirst": "Alec",
        "myCustomField": {
          "_id": "56cf2e8f2c69da9a7293662f",
          "nameFirst": "Alec"
        }
      }
    ]
  }
}

What do you think?  I can't tell if it's hacky or reasonable to be modifying the object returned from getFields()... but it certainly is giving us the internal object, not a clone.  And replacing it does seem to work.  Feedback from those more experienced than myself in GraphQL would be great 👍

thanks for the great example @zopf I will take a look tm

any updates on this issue?

@tothandras what solution should we use for now??
At the moment I'm implementing the hacky solution of @jashmenn

@sibelius I dont think that graffiti will work well together with relay if you want to customize every type of data.
I am setting up a specification for a ORM where you define the table, and graphql/relay data in once place. There may be other solutions but i think this is the best so far..
https://github.com/stoffern/graphorm-spec
Please come with ideas :wink:

@stoffern take a look on https://github.com/nodkz/graphql-compose
And it's examples (server) http://graphql-compose.herokuapp.com/
Relay live example (client) https://nodkz.github.io/relay-northwind/
Please come with ideas 😉

Sorry, is there any solution for that which will work on current version?

@lyxsus graphql-compose have everything 😉

Just adding my $0.02: Yes, I think that the library should be more extendable and flexible. I've just tried it and thought about integrating it in my new application, because the generated schema is simply awesome.
However... I was very disappointed to see that:

Mongoose hooks aren't called, and the alternative (root-level hooks) is not very sexy
I can't add validation easily
Can't manage permissions with enough granularity
Can't add my own mutations/queries or remove auto-generated ones
Etc

Y'all did an awesome work on this lib and I've never created an API so easily. But right now, it's unusable for general-purpose use in most real-life applications.

We built CreateGraphQL that generate code from mongoose models.
Code generation is the best way to be extensible and very customizable.
Check it out our post: https://medium.com/entria/announcing-create-graphql-17bdd81b9f96#.6ez6y751o
We would like to be very extensible and support multiples databases and templates https://github.com/lucasbento/create-graphql/issues/59

This was my solution:
const { GraphQLObjectType, GraphQLSchema } = require('graphql');
const { getModels } = require('@risingstack/graffiti-mongoose/lib/model');
const { getFields } = require('@risingstack/graffiti-mongoose/lib/schema');
const { contactMutation } = require('./mutations');
const { contactQuery } = require('./queries');
const models = require('../models');

const graffitiModels = getModels(models);
const graffitiFields = getFields(graffitiModels);

const rootQuery = graffitiFields.query._typeConfig;
const rootMutation = graffitiFields.mutation._typeConfig;

Object.assign(rootQuery.fields, {
  contact: contactQuery.user,
  contacts: contactQuery.users,
});

Object.assign(rootMutation.fields, {
  createContact: contactMutation.createContact,
});

module.exports = new GraphQLSchema({
  query: new GraphQLObjectType(rootQuery),
  mutation: new GraphQLObjectType(rootMutation),
});

I hope this can help you :).


Updated Command line Interface

Used Chalk : For synatx highlighting
Modified Initialization flow

The code for the various functions in the menu driven switch case is deleted which is causing the code to crash.


support data coercion to/from all data types for leaf and leaf-lists

example, in value.go -  InterfaceToIntlist converts from floats, but InterfaceToInt64list does not

solved.


[Zoom] Start meeting reports an error

Extension
https://www.raycast.com/raycast/zoom
Description
I'm on a mac m1, with raycast version 1.53.4

Error:
Could not load command

Steps To Reproduce
Try to launch a zoom meeting, either with the zoom app open or closed.
Current Behaviour
I get an error with minimal info.

Expected Behaviour
Zoom starts a meeting 😄

Are you consistently getting the same result when launching this command?

@thomaslombart yep - it's for any of the commands from the extension.
I just tried the "This Week's Meetings" command and got this error:
Reason: Code: 2 (Unhandled Extension Rejection)
Domain: commands
Time: 22:48:51.354

but everything else gives me the "something went wrong" screen.

@TaylorAMurphy We've improved error messages with version 1.54.0. Could you try it out one more time and let me know the error? Unfortunately, the error messages are generic and it's not actionable as it is 😕

@thomaslombart Updated and got the following OAuth error. I also went through the zoom app marketplace to see if there was anything I can do on my end to fix, but I didn't find anything. (Screenshot showing it's installed on my account appropriately.)

Error: Bad Request
ss:oauth.ts:71:10

68:
69:   if (!response.ok) {
70:     console.error("refresh tokens error:", await response.text());
71:     throw new Error(response.statusText);
72:   }
73:
74:   const tokenResponse = (await response.json()) as OAuth.TokenResponse;
async on:start-meeting.js:14:902
async Object.ia:start-meeting.js:14:2375

Just wanted to report I'm still getting this exact same error on 1.55.2

booo @raycastbot. I'm still experiencing this. Same error with a slightly different start-meeting.js line
Error: Bad Request

ss:oauth.ts:71:10

---
68:
69:   if (!response.ok) {
70:     console.error("refresh tokens error:", await response.text());
71:     throw new Error(response.statusText);
72:   }
73:
74:   const tokenResponse = (await response.json()) as OAuth.TokenResponse;
---

async on:start-meeting.js:14:902
async Object.ia:start-meeting.js:14:2357

@thomaslombart I logged out of Zoom from Raycast and then reauthenticated. It now works as expected. I'm guessing you can close unless you want to throw a more meaningful user action error in the event of this error.

All right, feel free to reopen the issue if you see something weird happening again.


Validation throws with async refinement

Description
I was validating some data for a Log In route, and decided to add the check to know if an email is present or not in the database directly in the Zod Schema by adding a '.refine' property to the schema.
But when the validation runs, it always throws with the error Async refinement encountered during synchronous parse operation. Use .parseAsync instead. By the text I assume that the actual method call to validate the schema is not asynchronous and that is why I'm having this error.
After reading trought SvelteKit Superforms documentation without finding a way of fixing this behaviour, I decided to report it here. Am I missing something like a property I have to pass to the validation function or I just founded a problem that need to be fixed? Thanks in advance for the help and the amazing work.
Reproduction of the error in SvelteLab
https://www.sveltelab.dev/0fomm1kdbyceva8

Are you using 1.0.0-rc.1? This will be fixed in the next RC, released very soon.

Yes, I am using 1.0.0-rc.1
In that case, I'll just wait for the next release for the fix.
Thanks a lot for the explanation!

RC 2 has just been released, try it out and see if it's fixed!


[$500] Chat - "Auth OpenReport returned an error" appears when refresh thread page from archived chat

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

Version Number: 1.4.45-0
Reproducible in staging?: Y
Reproducible in production?: Y
If this was caught during regression testing, add the test name, ID and link from TestRail: https://expensify.testrail.io/index.php?/tests/view/4350580
Email or phone of affected tester (no customers<EMAIL_ADDRESS>Logs: https://stackoverflow.com/c/expensify/questions/4856
Expensify/Expensify Issue URL:
Issue reported by: Applause - Internal Team
Slack conversation:
Action Performed:
Precondition:

As Admin create Workspace
Invite a member to Workspace
Send a message to the individual workspace chat
Delete the Workspace
Navigate to archived individual chat
Hover over send message and click Reply in thread
Refresh the page

Expected Result:
There should be no error message when refresh page
Actual Result:
"Auth OpenReport returned an error" system message appear when refresh thread page from archived individual workspace chat
Workaround:
Unknown
Platforms:

Which of our officially supported platforms is this issue occurring on?

[x] Android: Native
[x] Android: mWeb Chrome
[ ] iOS: Native
[ ] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[ ] MacOS: Desktop

Screenshots/Videos
Add any screenshot/video evidence

https://github.com/Expensify/App/assets/78819774/aca5eab2-0f9c-4ba7-8000-ea9e0de8dc5a
View all open jobs on GitHub
Upwork Automation - Do Not Edit

Upwork Job URL: https://www.upwork.com/jobs/~01b01e8b28bedc178c
Upwork Job ID:<PHONE_NUMBER>748841984
Last Price Increase: 2024-03-08

@garrettmknight  FYI I haven't added the External label as I wasn't 100% sure about this issue. Please take a look and add the label if you agree it's a bug and can be handled by external contributors

Agreed that this shouldn't be allowed.

@akinwale we already have a proposal above, heads up!

@akinwale can you review these proposals?

I will review later today.

@garrettmknight I have not been able to reproduce the error following the specified steps.

@akinwale Still able to reproduce on staging.

Ok, I was able to reproduce after deleting the workspace to arrive at this state. Reviewing the proposals now.

After reviewing, we can move forward to @gijoe0295's proposal since the solution follows the same idea as a previous implementation (delete thread).
🎀👀🎀 C+ reviewed.

@akinwale Checking !report?.childVisibleActionCount isn't correct for the case user reply in thread before we delete the workspace. you can see the video below, after we delete the workspace we still can go to the thread that has no comment because we created the thread before we delete the workspace.
That means !report?.childVisibleActionCount isn't correct for this case.

@dukenv0307 From my testing, the "Reply in thread" option does not show up if the thread is empty, and this is a very rare edge-case. Additionally, you can check if the report is archived in the shouldDisableThread method itself without having to add an extra parameter to the method.
We can leave the decision up to the internal engineer.

@akinwale what do you think about what I mentioned in my alternative solution:

@rayane-djouah This is also a valid approach. However, the selected proposal also works in this scenario, and was posted before your proposal, so I chose the first correct approach.

@akinwale I posted my proposal first in the earlier issue here #37603 (comment) that was closed in favor of this one

https://github.com/Expensify/App/issues/37551#issuecomment-1971762324 timestamp: Feb 29, 2024 7:52PM GMT+1
https://github.com/Expensify/App/issues/37603#issuecomment-1973457148 timestamp: Mar 1, 2024 5:06PM GMT+1

@roryabraham can you take a look at @dukenv0307 's proposal and assign if you think it's satisfactory?

@gijoe0295 your proposal looks good, but I'm going to require that we add unit tests to cover this function. Thanks!

@garrettmknight looks like the Upwork automation needs some help ☝🏼

@gijoe0295 @akinwale new offers out.

@gijoe0295 @akinwale new offers out.

Accepted. Thanks!

@akinwale can you complete the checklist?

BugZero Checklist: The PR fixing this issue has been merged! The following checklist (instructions) will need to be completed before the issue can be closed:

[x]  [@akinwale] The PR that introduced the bug has been identified. Link to the PR:
[x]  [@akinwale] The offending PR has been commented on, pointing out the bug it caused and why, so the author and reviewers can learn from the mistake. Link to comment:
[x]  [@akinwale] A discussion in #expensify-bugs has been started about whether any other steps should be taken (e.g. updating the PR review checklist) in order to catch this type of bug sooner. Link to discussion:

Not a regression. This specific case was not handled.

[x]  [@akinwale] Determine if we should create a regression test for this bug.
[x]  [@akinwale] If we decide to create a regression test for the bug, please propose the regression test steps to ensure the same bug will not reach production again.

Regression Test Steps

Launch Expensify.
Create a new workspace.
Send a message in the #announce room.
Send another message in the #announce room.
Create a thread from the message sent in 3 and send a reply in the thread.
Delete the workspace.
Navigate to the archived #announce room.
Move the mouse over the parent message sent in step 3.
Verify that the Reply in thread option is visible.
Click Reply in thread.
Verify that navigation occurs to the thread.
Move the mouse the other message in the archived #announce room.
Verify that the Reply in thread option is not visible.

Do we agree 👍 or 👎?

@garrettmknight Done.

Thanks!


chore(ci): Ignore openssl deps

We excluded the packages in #13731 but that just means they fell into the default logic, rather than being ignored (see #13835).  This at least made it easier to reject the change.
This should prevent the PR from being created.

@bors r+
Thanks!

:pushpin: Commit 89810b9688c874751218ab4dd753bfb9f936e79b has been approved by weihanglo
It is now in the queue for this repository.

:hourglass: Testing commit 89810b9688c874751218ab4dd753bfb9f936e79b with merge 57d324833596dfbb2f5dcf73775a97547600d62c...

:sunny: Test successful - checks-actions
Approved by: weihanglo
Pushing 57d324833596dfbb2f5dcf73775a97547600d62c to master...


Cannot set custom global role to user

What kind of request is this (question/bug/enhancement/feature request):
bug
Steps to reproduce (least amount of steps as possible):

enable Auth with Github
log in as Github user rancherdev in another session
as admin, go to Security -> Users to edit the user rancherdev
check some custom global roles
check some builtin global roles
save

Result:

an error message shows in the UI

There is no route named global-admin.accounts

after refreshing the page, the UI shows the builtin global roles are checked, but the custom global roles are not
log in as rancherdev, the permission form those custom global roles are NOT granted

Other details that may be helpful:

the error also shows up if clicking save without any changes

Environment information

Rancher version (rancher/rancher/rancher/server image tag or shown bottom left in the UI):
master-head 1304c55a2
UI (the default): https://releases.rancher.com/ui/latest2/index.html
Installation option (single install/HA):
single install

The bug fix is validated in master-head 5845c2d4a
The steps are the same as the issue provides
Results:

no error in UI
now the custom global role can be assigned to a user and take effects.


Additional Details & Logs

Kong version kong-ingress-controller:1.0,kong:2.2.0-alpine
Kong debug-level startup logs ($ kong start --vv)
Kong error logs (<KONG_PREFIX>/logs/error.log)
Kong configuration (the output of a GET request to Kong's Admin port - see
https://docs.konghq.com/latest/admin-api/#retrieve-node-information)
Operating system CentOS 7 Linux 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
K8S version v1.18.6
Helm version v3.4.2

We also found the same problem. After manually restarting node, Kong has been in the init state, and the error log is the same. We found that after the restart, the Kong container was not deleted and rebuilt, but the pod before the restart was used for init.
The final solution is to modify the shell of the init container command to:
command: ["/bin/sh", "-c", "rm -f /kong_prefix/pids/nginx.pid; until kong start; do echo'waiting for db'; sleep 10; done; kong stop"]

We also found the same problem. After manually restarting node, Kong has been in the init state, and the error log is the same. We found that after the restart, the Kong container was not deleted and rebuilt, but the pod before the restart was used for init.
The final solution is to modify the shell of the init container command to:
command: ["/bin/sh", "-c", "rm -f /kong_prefix/pids/nginx.pid; until kong start; do echo'waiting for db'; sleep 10; done; kong stop"]

In container PID are usually low, the stale PID may could happeds to be another none-kong process.

Handled in https://github.com/Kong/charts/issues/466

This one is fixed, closing it.


Add new translations

Automated message from Dropbox CLA bot
@borisyankov, it looks like you've already signed the Dropbox CLA. Thanks!


Storing trained net

Loving Brain.js - how do I store the trained nn and then re-use it in other scenarios?

After training, you can do: net.toFunction()
This gives you a zero dependency function of your trained net.  To further that thought, you can:
import fs from 'fs';
fs.writeFileSync('trained-net.js', `export default ${ net.toFunction().toString() };`);

Which gives you a 100% es6 file you can just import and run, like so:
Then later:
import trainedNet from './trained-net';
trainedNet(data);

Loving Brain.js

Wait till we land gpu support in v1, and tons of layers in v2!

You can also export and import via json: https://github.com/BrainJS/brain.js#json

You are a hero!!!!
Gonna try this now. Thank you so much!

Any ideas?
import trainedNet from logpath+'/trained-net.js';
^^^^^^
SyntaxError: Unexpected token import
at Object.exports.runInThisContext (vm.js:73:16)

Just try non-es6
var trainedNet = require('./trained-net');
trainedNet(data);

ah yes, thanks. Will the export approach in the stored nn work with node7.6?

I don't see any reason why it wouldn't work.

Thanks for your help so far Robert.
A few things I've found.

I'm on Node 7.6 and I've had to change the trained-net file to read like this:
module.exports = {

getnn: function (input
/**/) {
return {'do':1/(1+1/Math.exp(1.424093361048118+0.693914741575579*(1/(1+1/Math.exp(0.21477080727104217-0.13510833411671558*(input['price'])+0.002514424937632802*(input['rsi'])+0.12644871083363154*(input['ema20']))))+0.666723146370773*(1/(1+1/Math.exp(0.13917289595446591+0.10253334351161274*(input['price'])+0.020849410810439374*(input['rsi'])+0.12377127023405728*(input['ema20']))))+0.7305866887169579*(1/(1+1/Math.exp(0.11302968130848308-0.015291197107745113*(input['price'])+0.23504038301431582*(input['rsi'])-0.17232474989736501*(input['ema20']))))))}
}}
Which I think looks right.

Further to this, if I do a net.toJSON after a training event I see:
{ layers:
[ { price: {}, rsi: {}, ema20: {} },
{ '0': [Object], '1': [Object], '2': [Object] },
{ do: [Object] } ],
outputLookup: true,
inputLookup: true }
The other thing I don't understand is I assumed that if I do net.train multiple times, it will add each event to net...but rather if I train inside a loop:
for (var i = 0; i < this.buyposition.length-1; i++){
sellposition = this.sellposition[i];
net.train([{input: { price: pricehistory[i], rsi: rsihistory[i], ema20: ema20history[i] }, output: { do: 1 }}]);
}
net.getJSON returns this every iteration which doesn't look correct:
{ layers:
[ { price: {}, rsi: {}, ema20: {} },
{ '0': [Object], '1': [Object], '2': [Object] },
{ do: [Object] } ],
outputLookup: true,
inputLookup: true }
{ layers:
[ { price: {}, rsi: {}, ema20: {} },
{ '0': [Object], '1': [Object], '2': [Object] },
{ do: [Object] } ],
outputLookup: true,
inputLookup: true }
{ layers:
[ { price: {}, rsi: {}, ema20: {} },
{ '0': [Object], '1': [Object], '2': [Object] },
{ do: [Object] } ],
outputLookup: true,
inputLookup: true }
{ layers:
[ { price: {}, rsi: {}, ema20: {} },
{ '0': [Object], '1': [Object], '2': [Object] },
{ do: [Object] } ],
outputLookup: true,
inputLookup: true }

I ended up using the JSON method. Took some playing but the application is working, now trying to work out how to optimize to improve the training which is failing at the moment.
Thanks for your help.

I know I'm super late to this, but honestly, just wanted to say that brainjs is truly amazing! Thank you guys for this awesome library!

I'm having quite a bit of trouble with this, I'm training a somewhat sizeable nn with brain.js in node, offline, and it trains perfectly fine, but I can't seem to save it at all.
const json = net.toJSON()
net.fromJSON(json)

doesn't save the json file to my file directory?
and
import fs from 'fs';
fs.writeFileSync('trained-net.js', `export default ${ net.toFunction().toString() };);

var trainedNet = require('./trained-net');
trainedNet(data);

doesn't work either. The file is saved to my directory, but I can't actually run the model with it.
I get TypeError: trainedNet is not a function when I use this.
I just want to train and save this model offline, then load and use it for predictions later, online.

// get json data
const json = net.toJSON()
// write to file system
fs.writeFileSync('trained-net.json', json);

then you can read json later:
const json= JSON.parse(fs.readFileSync('trained-net.json'))
const net = new brain.NeuralNetwork()
net.fromJSON(json)
net.run(input)

I feel silly for forgetting to actually write it. This worked, I just also had to use JSON.stringify on the file when writing or it gave me [object Object].
However, when load the file with
net.fromJSON(json)
It gave me the error: Sizes must be set up before initializing.

That may actually be a bug.

Hey @robertleeplummerjr what a great library thank you for this. I seem to be running into the same issue.
If you need the stack trace please shout. I don't mind sharing.

If you trying to write json to file you need first convert it to string: :arrow_down:
const json = network.toJSON();

fs.writeFileSync(__dirname + '/data/trained-net.json', JSON.stringify(json), 'utf8');

Is toFunction() not supported anymore?

That exports as this:
export default {"type":"LSTM","options":{"inputSize":12,"inputRange":12,"hi....
I can't seem to get a normal json file out of it.

That exports as this:
export default {"type":"LSTM","options":{"inputSize":12,"inputRange":12,"hi....
I can't seem to get a normal json file out of it.

Can you share your full example?

Can you share your full example?

Hi all, complete noob here. Really loving the intuitive feel of brain.js, just having problems saving a trained neural network like the others. I tried the method listed above and got the same response "Sizes must be set before initializing." I have an index.js file, NN.js and a trained-net.json file in use, it loaded the data in the new JSON file but I can't seem to get it from my new NN.js file.
Is there any alternative solutions I could use? Thanks. Here's my code.
//index.js//
const fs = require('fs');
let brain = require("brain.js");
let net = new brain.recurrent.LSTM();
const trainingData = [
'Jane saw Doug.',
'Doug saw Jane',
];
net.train(trainingData, {
iterations: 500,
errorThresh: 0.011,
log: (data) => console.log(data)
});
const json = net.toJSON();
fs.writeFileSync('trained-net.json', JSON.stringify(json));
//NN.js [what I am trying to load it from] //
const fs = require('fs')
const brain = require('brain.js')
const json= JSON.parse(fs.readFileSync('trained-net.json'))
const net = new brain.NeuralNetwork()
net.fromJSON(json)
net.run("Jane")

Hi all, complete noob here. Really loving the intuitive feel of brain.js, just having problems saving a trained neural network like the others. I tried the method listed above and got the same response "Sizes must be set before initializing." I have an index.js file, NN.js and a trained-net.json file in use, it loaded the data in the new JSON file but I can't seem to get it from my new NN.js file.
Is there any alternative solutions I could use? Thanks. Here's my code.
//index.js//
const fs = require('fs');
let brain = require("brain.js");
let net = new brain.recurrent.LSTM();
const trainingData = [
'Jane saw Doug.',
'Doug saw Jane',
];
net.train(trainingData, {
iterations: 500,
errorThresh: 0.011,
log: (data) => console.log(data)
});
const json = net.toJSON();
fs.writeFileSync('trained-net.json', JSON.stringify(json));
//NN.js [what I am trying to load it from] //
const fs = require('fs')
const brain = require('brain.js')
const json= JSON.parse(fs.readFileSync('trained-net.json'))
const net = new brain.NeuralNetwork()
net.fromJSON(json)
net.run("Jane")

In the above example, you are using two different neural networks.  Stick to the LSTM network for strings.

In the above example, you are using two different neural networks.  Stick to the LSTM network for strings.

My issue was fixed. I had some small mistake and now everything's fine.

My issue was fixed. I had some small mistake and now everything's fine.

In the above example, you are using two different neural networks. Stick to the LSTM network for strings.

Thanks! It worked.
Someday when my programming skills advance I would like to contribute to this project.

In the above example, you are using two different neural networks. Stick to the LSTM network for strings.

Thanks! It worked.
Someday when my programming skills advance I would like to contribute to this project.

Thanks! It worked.
Someday when my programming skills advance I would like to contribute to this project.
Can you make a sophisticated chatbot with this? I assume you would have to use the LSTM-type NN right?

Thanks! It worked.
Someday when my programming skills advance I would like to contribute to this project.
Can you make a sophisticated chatbot with this? I assume you would have to use the LSTM-type NN right?

@dock-adams Please follow this thread for information regarding this topic: https://github.com/BrainJS/brain.js/issues/535

@dock-adams Please follow this thread for information regarding this topic: https://github.com/BrainJS/brain.js/issues/535


Disable CI Build

We're not actually ready for CI build, it was never on to begin with see #900.

LGTM


ListObjects(): fix parsing user metadata as per MinIO server

Signed-off-by: Bala.FA<EMAIL_ADDRESS>

Looks like a segfault on macOS @balamurugana
ListObjects()
/Users/runner/work/_temp/bbf9449c-e267-42b3-9eb9-8c04cb900415.sh: line 1: 64934 Segmentation fault: 11  SERVER_ENDPOINT=localhost:9000 ACCESS_KEY=minioadmin SECRET_KEY=minioadmin ./build/tests/tests
Error: Process completed with exit code 139


[Android][Native Styling] Support for native styling in Android

Platform

Android

Version of SDK
latest master
Details
Native styling in android is not supported as of this time. This must be fixed to get android on par with all the other platforms and to unblock customers.

@almedina-ms do you have links to the github issues/productboard feature requests for this ? Any other context esp around the related feature specs for this that can help shed light on what is the nature of the work/cost estimates etc?

is it not fixed yet?


Update to OpenGL 4.6

According to open gl the latest version is 4.6 your on 4.5
lwjgl version:
https://www.lwjgl.org/
opengl current version:
https://www.khronos.org/registry/OpenGL/index_gl.php

I guess what you are trying to say is that the lwjgl.org web page in the "Main Features" section unter OpenGL where it says "LWJGL supports all OpenGL versions (including the latest 4.5 specification)" does not advertize LWJGL supporting the latest OpenGL 4.6 version.
However, LWJGL has been supporting OpenGL 4.6 since mid-2017.
It's just that the web page does not properly advertize this.
You probably want to issue a PR to https://github.com/LWJGL/lwjgl3-www to correct this.

O well then it's a website issue please fix it


Slowness during manipulations with HTML/strings

Description
Hi, my company is trying to migrate from using webview on android to use React Native with Hermes engine. We had some limited success(start time, debugging tools etc), but same time some bottlenecks that we are trying to solve.
One think I noticed is a big regression when working with html (in our case we use cheerio lib which imitates usage of JQuery in webworker environment.
I added quite simple test in here with comparison to other envs that shows how slow processing of the function is:
RN With Hermes(Redmi note 9): 3500 ms
RN JSC(Redmi note 9): 1700 ms
Android Webview(Redmi note 9): 150-200 ms
iOS Webview(iphone XR): 90 ms
NodeJS(Mac mini 2018): 150 ms

What I tried so far - using outdated https://www.npmjs.com/package/react-native-cheerio lib, with it I could reduce the timings to:
RN With Hermes:    1700 ms
RN JSC:                      1200 ms
Yet it still at least 8-10 times slower than even Android Webview(which we trying to move away from due to it working on Android's UI thread).
Attaching here also the sampling profile for the operation.
Wanted to ask, what are my options in here? Obviously something is not optimized in here, but my project relies on lots of other cheerio/string/html manipulations for which we need high performance on.
Is it better to look for other libraries? Or maybe to try to  use some native GO modules via JSI?
Steps to reproduce
npm i
npm start
'a' to run android
React Native Version
0.73.3
Affected Platforms
Runtime - Android
Output of npx react-native info
System:
  OS: Linux 6.6 Fedora Linux 39 (KDE Plasma)
  CPU: (12) x64 Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz
  Memory: 17.62 GB / 31.28 GB
  Shell:
    version: 5.2.26
    path: /bin/bash
Binaries:
  Node:
    version: 20.10.0
    path: ~/.nvm/versions/node/v20.10.0/bin/node
  Yarn:
    version: 1.22.19
    path: /usr/bin/yarn
  npm:
    version: 10.2.3
    path: ~/.nvm/versions/node/v20.10.0/bin/npm
  Watchman: Not Found
SDKs:
  Android SDK: Not Found
IDEs:
  Android Studio: Not Found
Languages:
  Java:
    version: 17.0.9
    path: /usr/bin/javac
  Ruby: Not Found
npmPackages:
  "@react-native-community/cli": Not Found
  react:
    installed: 18.2.0
    wanted: 18.2.0
  react-native:
    installed: 0.73.3
    wanted: 0.73.3
npmGlobalPackages:
  "*react-native*": Not Found
Android:
  hermesEnabled: true
  newArchEnabled: false
iOS:
  hermesEnabled: Not found
  newArchEnabled: false

Stacktrace or Logs
LOG  Running "testRN" with {"rootTag":11}
 LOG  start
 LOG  cheerio.load done: 1185
 LOG  After append: 34
 LOG  After convert tables: 98
 LOG  After img processing: 11
 LOG  After video processing: 7
 LOG  After body processing: 2171
 LOG  After styles processing: 14
 LOG  After html generate: 21
 LOG  After html unescapeAmpersands: 6
 ERROR  ExecutionTime = 3549

Reproducer
https://github.com/maksimlya/TestRNPerf.git
Screenshots and Videos
sampling-profiler-trace4726458570050190420-converted.json

You should report this to the library author, and not to react-native core:
https://github.com/leon3110l/react-native-cheerio


Shape layers API

❓ Questions and Help
I've done some exploring of how to make polygons etc in vispy and have now found some highly performant approaches (drawing 10,000's very quickly and zooming / panning with no lag). The question is - how do we want to expose shapes to our users both those working from the notebook and those working in the gui?
Right now we have the add_image and add_markers function which adds layers of those types. During my initial exploration of this stuff I created add_rectangles and add_ellipses functions to add those layers too. While that was nice from working in the notebook, it became frustrating in the gui to be forced to have the different shapes in different layers and switch layers when wanting to interact with them. I raised the idea of instead having a generic shape layer and add_shapes instead at the meeting on thursday and people seemed to prefer this approach. Curious though if anyone disagrees.
If we have an add_shapes function on the viewer then what are it's inputs? If we want to support markers, rectangles, ellipses, line-segments, polygons, lines etc. how do we get this information in?
One option is to pass a list of dictionaries like the following
add_shapes([{'type': 'markers', 'data':[xxxx]}, {'type': 'polygons', 'data':[zzzz]}, {'type': 'markers', 'data':[yyyy]}])

or a single dictionary
add_shapes({'markers':[xxxx, yyyy], 'polygons':[zzzz]})

or just as keyword arguments
add_shapes(makers=[xxxx, yyyy], polygons=[zzzz], lines=None, ellipses=None)

As we added new shape types we would add support for new elements of the dictionary / keyword args.
I'd lean towards the third option - but one important question is how granular can the additional shape properties get - i.e. face_color, edge_color, edge_width, line_color, line_width, marker_edge_color, marker_face_color, marker_size, edge_width, marker_edge_width, marker_symbol.
How many of these properties are forced to be the same across classes - i.e. all rectangles vs all ellipses vs all lines?
And how many of these properties are allowed to vary within instances of the same class?
Some of them I know how to make different for each instance within the same class in a fast way, others I don't know how to do that yet (though it is ultimately possible somehow).
Given these considerations how does it look to set these properties from the notebook and how does it look to change them from dropdown menus in the gui. Right now most of these properties apply to all instances of all classes - that's the simplest way to have the dropdown menus work. But it is possible to be more like illustrator where you can select specific instances and then recolor say specific ones. It would probably suggest a different type of UI though where those color tools were now not tied to specific layers. In our system if you want to have red polygons and blue polygons you would create two different layers. I'm not really sure right now how to give people "rainbow colored" /  "randomly colored" shapes either.
Finally after you've created one of these shape layers and added some shapes to it, if you now want to add more data from the notebook what additional methods should be available to you?
layer.append_data(......)
layer.set_data(.....)

These could be two nice options that allow you to either add shapes to the existing ones using append_data or to replace all the data using set_data.

Just as an update - we've switched over to everything in the shapes layer being rendered as a triangle so some of the concerns mentioned above are out of data. Probably best to look over at #100 for the latest before commenting on the API

everything in the shapes layer being rendered as a triangle

Huh??

right now we just made one call to the vispy mesh class to set all the data for all the shapes and their edges. this is much more performant that making many calls. in addition we no longer use the vispy lines class - we instead render the lines as triangles, which leads to much better quality lines - see here for a javascript example of such behavior https://www.npmjs.com/package/extrude-polyline.
there is maybe one thing being done poorly right now which is our object picking - instead of using a modified version of the frame buffer we do a linear search through all our triangles. If we start seeing performance issues we can switch over to the alternate approach

So much trickiness! Another specific problem is that if you allow vertex editing, which is very cool, you can convert a rectangle to a polygon, and it's hard to imagine a simple data model that would allow that.
One thing that I would comment specifically above is that markers and shapes are fundamentally different things in my opinion and they should not both be considered shapes. Indeed, the way I would separate out the shapes API is by dimensionality: add points, add lines (can be curved, freeform, whatever), add areas, add volumes...
Incidentally, I just thought that for simple shapes, it might be doable to draw in 3D just by centering, ie "draw sphere", draws a circle in the current cut plane, but actually it's a sphere centered on that plane. I think this would make a lot of people very happy.

So, to clarify, my proposals:

add_area or add_2d is my proposed API
once a rectangle, always a rectangle, ie only turn on vertex editing for generic polygons
probably we need a class hierarchy for shape2d, because of what you said about creating them programmatically in the same layer. I don't think there is a cleaner way to do this than with classes/types. Having the layer contain a bunch of disjoint lists seems significantly worse to me.

Indeed these are some good points

if you allow vertex editing, which is very cool, you can convert a rectangle to a polygon

once a rectangle, always a rectangle, ie only turn on vertex editing for generic polygons

Right now I do allow that to happen and the object type converts from a rectangle to a polygon. I think this functionality could be nice, and we can handle that transition - Illustrator allows it for example.

separate out the shapes API is by dimensionality

add_area or add_2d is my proposed API

This is an interesting idea. I like having the separate Markers layer (which I would consider renaming to Points) as it naturally supports nD and it can probably scale to many many markers with little overhead.
The Vectors layer which @bryantChhun added could be our Lines layer type which we could also extend to nD through the projection system you mentioned. It is unclear to me if this would only support line segments (i.e. 2 vertices per line) or complex line paths with multiple vertices per path and closed paths. This later option is basically now the boundary of a polygon and could be made by having a polygon with no face color so it seems weird to me to have it in a fundamentally different layer type.

Having the layer contain a bunch of disjoint lists seems significantly worse to me.

Yes this is currently very ugly to me and the source of my concern around the current API (both for setting the shapes data and then for getting the shape data back again after it has been edited). It is also not really possible to do a full round trip right now where you pass some data in, do some editing, get it back, and are then able to pass it back in again. This is a major flaw.

we need a class hierarchy for shape2d

This could definitely be a step in the right direction. If we created a class for a single Shape class (which could be of any of our examples types of shape, rectangle etc.) and then had the shapes layer contain an object that was a ShapesList which had all the Shape objects in a list and some of the properties that needed information from across all the shapes (i.e. the mesh vertices from all the shapes that will actually get rendered) then this could be quite nice.
My major questions though are, given this internal representation of many Shape objects and a ShapesList object how does a user want to initially specify the shape data, and how does the user want to extract the shape data for use in down stream processing without being wedded to our classes?
For example I find it slightly undesirable that if a person has 40 rectangles (each specified by say 2 or 4 corner points, depending on if you support non-rotated or rotated rectangles) - that to get a 40x2x2 or 40x4x2 array of points they would have to wade through all our shape objects, but maybe that's ok if they are in that special case. Moreover if they have 40 polygons all with differing number of vertices there will never be a 40xNx2 array that nicely has all the points.

This has been addressed with merge of #100


Feature/iogt 2 styles cleanup

@peterp please review. I cleaned and arranged state files appropriately.


Add Userguide

Description
Added userguide and slightly updated the readme. Also added a new test case for the ETag header.
Checklist

[x] I have read the contributing guidelines.
[x] I wrote/updated tests for new/changed code
[x] I ran ./gradlew check without errors

Codecov Report

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

@@           Coverage Diff           @@
##           master       #9   +/-   ##
=======================================
  Coverage   80.41%   80.41%
=======================================
  Files           6        6
  Lines          97       97
  Branches        9        9
=======================================
  Hits           78       78
  Misses         18       18
  Partials        1        1

Continue to review full report at Codecov.

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


greedy_until only compatible with HF Evaluate metrics

The greedy_until output_type only works with metrics found in HF Evaluate. Need alternative cases where other metrics is possible.
https://github.com/EleutherAI/lm-evaluation-harness/blob/24e3e3fa9d9cb5180212d4818f0c9b9bf6ceacbe/lm_eval/api/task.py#L895-L898

This is a strange bug to have reported, as this function predates the HF Evaluate library. What happens when you try to call another metric?

Oh this particular few lines of implementation was written by me for the big-refactor. It's a lack of feature completeness actually, I only took to account HF Evaluate Library for evaluating greedy_until and left out the original metrics that were already implemented in lm-eval. This implementation also does not allow cases where a user might want to introduce their own metrics.
The issue is meant to keep track of things to do.

#648 closes this.


AAS GUI Feature Request:  Borderless / Embedded Visualization Display

We would like to display data from a specific submodel embedded in another web application. To realize this, we would like to embedd the AAS GUI Visualization functionality, since it already provides a simple and elegant way of visualizing the data.
It is really useful that it is already possible to directly open a specific submodel in the AAS GUI by properly setting the related aas and path URL search parameters.
What would really be even more helpful for our scenario would be an additional URL flag, such as ...&embed=true, which, if set, would cause all page elements to remain hidden, except for the "visualization" component (and maybe a copyright / imprint footer).
I suppose you have other features with higher prio on your roadmap, so I just want to bring it up as a suggestions for future development. Maybe it would not be too hard to implement and could be helpful also for other users or scenarios/showcases.

Dear @pjaydev,
I've created a PR regarding your feature request: https://github.com/eclipse-basyx/basyx-applications/pull/127
BR
Sebastian

The feature will be included in the release coming this week.

Awesome! Thank you very much.


Natural language state descriptions

Hi!
Does craftax currently provide natural language descriptions of the states? Or captions?
If so, how can these be accessed?
Thanks!
Edit: I was able to render the textual descriptions:
import jax
from craftax_classic.envs.craftax_symbolic_env import CraftaxClassicSymbolicEnv
from craftax.envs.craftax_symbolic_env import CraftaxSymbolicEnv
from environment_base.wrappers import LogWrapper
from craftax.renderer import render_craftax_text

rng = jax.random.PRNGKey(0)
rng, _rng = jax.random.split(rng)
rngs = jax.random.split(_rng, 3)

# Create environment
env = CraftaxSymbolicEnv()
env_params = env.default_params

# Get an initial state and observation
obs, state = env.reset(rngs[0], env_params)

# Pick random action
action = env.action_space(env_params).sample(rngs[1])

# Step environment
obs, state, reward, done, info = env.step(rngs[2], state, action, env_params)

# Get the text representation of the state
text_state = render_craftax_text(state)

but I am not sure this works if using batched environments and/or the LogWrapper. Could you please confirm?

Hi Roger,
The current render_craftax_state operates on EnvState.  If using the LogWrapper then you'll be passing around the LogEnvState which wraps EnvState.  To retrieve the wrapped EnvState call state.env_state.  I don't think there should be any issues with batched environments.
Let me know if this helps and if you're still having issues please post the steps to reproduce and I'll take a look.

Hi! Thanks for replying :)
This code works fine:
import jax
from environment_base.wrappers import BatchEnvWrapper
from craftax.envs.craftax_symbolic_env import CraftaxSymbolicEnv
from craftax.renderer import render_craftax_text

rng = jax.random.PRNGKey(0)
rng, _rng = jax.random.split(rng)
rngs = jax.random.split(_rng, 3)

env = CraftaxSymbolicEnv()
env_params = env.default_params

obs, state = env.reset(rngs[0], env_params)

print(
    render_craftax_text(state)
)

and this one doesn't:
import jax
from environment_base.wrappers import BatchEnvWrapper
from craftax.envs.craftax_symbolic_env import CraftaxSymbolicEnv
from craftax.renderer import render_craftax_text

rng = jax.random.PRNGKey(0)
rng, _rng = jax.random.split(rng)
rngs = jax.random.split(_rng, 3)

env = BatchEnvWrapper(
    CraftaxSymbolicEnv(),
    num_envs=32
)
env_params = env.default_params

obs, state = env.reset(rngs[0], env_params)

print(
    render_craftax_text(state)
)

since all the attributes of state have an additional dimension (e.g. state.player_position.shape is now (32,2) instead of (2,))
How can we get the text observation for each env in this case?
Ty!

Ah, I see the issue.  So if render_craftax was JITtable then it would be as simple as
text_representations = jax.vmap(render_craftax)(state)

However, this isn't the case right now (although it would be possible with a bit of wrangling).
So to extract an individual state for now we have to use tree map like so:
for i in range(32):
    state_i = jax.tree_map(
        lambda x: x[i], state
    )

    print(render_craftax_text(state_i))

Let me know if this fixes the problem.
P.S. Testing this code revealed a bug that I've now fixed on main, so you'll want to pull the latest commit otherwise this will error.

Ah ! so that is what tree_map() does! :)
This solved it, thank you!


4.x Is there short way for urlFor withRedirect ?

There is way to use short way for urlFor withRedirect ?
From
return $response->withRedirect(RouteContext::fromRequest($request)->getRouteParser()->urlFor('cart.index'));
Like
return $response->withRedirect(Router->urlFor('cart.index'));

Unfortunately there isn't. but why not split the code in 2 lines instead?
$url = RouteContext::fromRequest($request)->getRouteParser()->urlFor('cart.index');
return $response->withRedirect($url);


Tweak descriptor, run npm install, C++ not updated

When you tweak the descriptor and run npm install the generate scripts do not affect the C++.  If you run node generate first the code is updated.  Could you look into this @maxkorp?

Yeah, I need to find a way aroudn this. The point was to skip the step (and thereby not need to install/load modules) if installing from NPMs registry. I have an idea of how to rework this a bit more now, after talking through an issue on NPMs github a bit.

I believe this has been resolved as well.


How do you build this dataset? When will you fully release the data?

Nice job! This work really sheds light on the future of autonomous driving using the power of LLMs or LMMs!
May I ask how do you build this dataset? Besides, when can we get the full dataset?

we annotate them in two ways. one is auto-generated, the other is by manually labelled.
for the full dataset, it's expected to be released in November.


Add a free license

Your licensing is a little weird and as it is, and the legalese people would probably see it as proprietary.
Maybe you could release it under a license such as WTFPL?

Good suggestion! Yea, I will release it under WTFPL.


fix: logging of first octokit instance is not set

This should fix the logging in the default ocotkit instance from issue #1673

Ran into the same issue! below is my suggested patch which will re-utilize the approach to binding the logger already present
diff --git a/src/octokit/get-probot-octokit-with-defaults.ts b/src/octokit/get-probot-octokit-with-defaults.ts
index 08373bf..16d190b 100644
--- a/src/octokit/get-probot-octokit-with-defaults.ts
+++ b/src/octokit/get-probot-octokit-with-defaults.ts
@@ -3,7 +3,6 @@ import { ProbotOctokit } from "./probot-octokit";
 import Redis from "ioredis";

 import { getOctokitThrottleOptions } from "./get-octokit-throttle-options";
-import { aliasLog } from "../helpers/alias-log";

 import type { Logger } from "pino";

@@ -46,9 +45,6 @@ export function getProbotOctokitWithDefaults(options: Options) {

   let defaultOptions: any = {
     auth: authOptions,
-    log: options.log.child
-      ? aliasLog(options.log.child({ name: "octokit" }))
-      : options.log,
   };

   if (options.baseUrl) {

@kammerjaeger can you update your PR based on @markjm suggestion?

Thanks, I did not see the helper. I changed it to the proposed code.
The file get-authenticated-octokit.ts uses the same method that I used before to set the logger. Should that also be changed (in a different PR)?


[LLVMCPU] Properly pass split-transfers option to LLVMCPUVectorLowering.

Also renames the pass name (in cmd) to iree-llvmcpu-vector-lowering.
Fixes https://github.com/openxla/iree/issues/13004

This would put the performance of EfficientNetB7PT to the previous state, which regresses the performance for 17.52 %. This is expected, because it's having the same behavior before the switch.


go package: tenus vs netlink

consider replacing https://github.com/milosgajdos/tenus with https://github.com/vishvananda/netlink

with tenus I get
opi-evpn-bridge-opi-evpn-bridge-1  | 2023/05/17 21:47:25 server listening at [::]:50151
opi-evpn-bridge-opi-evpn-bridge-1  | 2023/05/17 21:47:35 CreateSubnet: Received from client: subnet:{spec:{id:{value:"ok"}}}
opi-evpn-bridge-opi-evpn-bridge-1  | Could not create new link mydummylink: operation not permitted
opi-evpn-bridge-opi-evpn-bridge-1  | panic: runtime error: invalid memory address or nil pointer dereference
opi-evpn-bridge-opi-evpn-bridge-1  | [signal SIGSEGV: segmentation violation code=0x1 addr=0x60 pc=0x8e2523]
opi-evpn-bridge-opi-evpn-bridge-1  |