Provide a means to list all versions of a plugin

What this PR does / why we need it
This commit introduces a "--name" flag to "plugin search".  Using this flag it is possible to limit the search to plugins with a specific name.
This commit also adds a "--show-details" flag to "plugin search" (instead of the orignally intended "--list-versions").  Using the "--show-details" flag, it is possible to get more information about each plugin, including all versions that are available.
This commit also adds a "--target" flag to "plugin search".  Using this flag, it is possible to limit the search to plugins of the specified target.
Which issue(s) this PR fixes

Fixes #134
Describe testing done for PR
# Unchanged
$ tz plugin search
  NAME                DESCRIPTION                                                        TARGET           LATEST
  builder             Build Tanzu components                                             global           v0.90.0-alpha.0
  isolated-cluster    Prepopulating images/bundle for internet-restricted environments   global           v0.28.1
  pinniped-auth       Pinniped authentication operations (usually not directly invoked)  global           v0.28.1
  test                Test the CLI                                                       global           v0.90.0-alpha.0
  accelerator         Manage accelerators in a Kubernetes cluster                        kubernetes       v1.4.0
  apps                Applications on Kubernetes                                         kubernetes       v0.10.0
  cluster             Kubernetes cluster operations                                      kubernetes       v0.28.1
  feature             Operate on features and featuregates                               kubernetes       v0.28.1
  insight             Post & query image, package, source, and vulnerability data        kubernetes       v1.4.2
  kubernetes-release  Kubernetes release operations                                      kubernetes       v0.28.1
  management-cluster  Kubernetes management cluster operations                           kubernetes       v0.28.1
  package             Tanzu package management                                           kubernetes       v0.28.1
  secret              Tanzu secret management                                            kubernetes       v0.28.1
  services            Commands for working with service instances, classes and claims    kubernetes       v0.5.0
  telemetry           configure cluster-wide settings for vmware tanzu telemetry         kubernetes       v0.28.1
  account             Account for tmc resources                                          mission-control  v0.0.1
  apply               Create/Update a resource with a resource file                      mission-control  v0.0.1
[...]

# Unchanged
$ tz plugin search --local ~/.config/tanzu-plugins/
  NAME                DESCRIPTION                                                        TARGET      LATEST
  builder             Build Tanzu components                                                         v0.29.0-dev
  codegen             Tanzu code generation tool                                                     v0.29.0-dev
  isolated-cluster    Prepopulating images/bundle for internet-restricted environments               v0.29.0-dev
  login               Login to the platform                                                          v0.29.0-dev
  pinniped-auth       Pinniped authentication operations (usually not directly invoked)              v0.29.0-dev
  test                Test the CLI                                                                   v0.29.0-dev
  cluster             Kubernetes cluster operations                                      kubernetes  v0.29.0-dev
  feature             Operate on features and featuregates                               kubernetes  v0.29.0-dev
  kubernetes-release  Kubernetes release operations                                      kubernetes  v0.29.0-dev
  management-cluster  Kubernetes management cluster operations                           kubernetes  v0.29.0-dev
  package             Tanzu package management                                           kubernetes  v0.29.0-dev
  secret              Tanzu secret management                                            kubernetes  v0.29.0-dev
  telemetry           configure cluster-wide settings for vmware tanzu telemetry         kubernetes  v0.29.0-dev

# The new flags don't apply when using --local
$ tz plugin search --local ~/.config/tanzu-plugins/ --name a
[x] : if any flags in the group [local name] are set none of the others can be; [local name] were all set
$ tz plugin search --local ~/.config/tanzu-plugins/ --target tmc
[x] : if any flags in the group [local target] are set none of the others can be; [local target] were all set
$ tz plugin search --local ~/.config/tanzu-plugins/ --show-details
[x] : if any flags in the group [local show-details] are set none of the others can be; [local show-details] were all set

# Limit search to plugin name
$ tz plugin search --name cluster
  NAME     DESCRIPTION                    TARGET           LATEST
  cluster  Kubernetes cluster operations  kubernetes       v0.28.1
  cluster  cluster plugin                 mission-control  v0.0.1

$ tz plugin search --name cluster -o yaml
- description: Kubernetes cluster operations
  latest: v0.28.1
  name: cluster
  target: kubernetes
- description: cluster plugin
  latest: v0.0.1
  name: cluster
  target: mission-control

$ tz plugin search --name cluster --show-details
name: cluster
description: Kubernetes cluster operations
target: kubernetes
latest: v0.28.1
versions:
    - v0.25.0
    - v0.25.4
    - v0.28.0
    - v0.28.1

name: cluster
description: cluster plugin
target: mission-control
latest: v0.0.1
versions:
    - v0.0.1

$ tz plugin search --name cluster --show-details -o yaml
- name: cluster
  description: Kubernetes cluster operations
  target: kubernetes
  latest: v0.28.1
  versions:
    - v0.25.0
    - v0.25.4
    - v0.28.0
    - v0.28.1
- name: cluster
  description: cluster plugin
  target: mission-control
  latest: v0.0.1
  versions:
    - v0.0.1

# Limit search to a target
$ tz plugin search --target k8s
  NAME                DESCRIPTION                                                      TARGET      LATEST
  accelerator         Manage accelerators in a Kubernetes cluster                      kubernetes  v1.4.0
  apps                Applications on Kubernetes                                       kubernetes  v0.10.0
  cluster             Kubernetes cluster operations                                    kubernetes  v0.28.1
  feature             Operate on features and featuregates                             kubernetes  v0.28.1
  insight             Post & query image, package, source, and vulnerability data      kubernetes  v1.4.2
  kubernetes-release  Kubernetes release operations                                    kubernetes  v0.28.1
  management-cluster  Kubernetes management cluster operations                         kubernetes  v0.28.1
  package             Tanzu package management                                         kubernetes  v0.28.1
  secret              Tanzu secret management                                          kubernetes  v0.28.1
  services            Commands for working with service instances, classes and claims  kubernetes  v0.5.0
  telemetry           configure cluster-wide settings for vmware tanzu telemetry       kubernetes  v0.28.1

$ tz plugin search --name cluster --target tmc
  NAME     DESCRIPTION     TARGET           LATEST
  cluster  cluster plugin  mission-control  v0.0.1

$ tz plugin search --name cluster --target k8s --show-details
name: cluster
description: Kubernetes cluster operations
target: kubernetes
latest: v0.28.1
versions:
    - v0.25.0
    - v0.25.4
    - v0.28.0
    - v0.28.1

Release note

The "tanzu plugin search" command now accepts a "--name" flag to limit the breadth of the search.  That command also accepts a "--show-details" flag which allows to get details about available plugins, including the list of supported versions.

Additional information
Special notes for your reviewer
Please pay attention to the output formatting.  I used an objectWriter for details and used the yaml format which I felt was best for readability.  So, when showing details, we don't use a table, as was suggested in #134.
Some decisions I made that are up for discussion:

We support tanzu plugin search --show-details, which will show the long version for all plugins
For --local we don't support the new flags (--target, --name, --show-details), although I don't think it would be too hard to support, I wanted feedback first.  Searching a local discovery will normally yield a very small amount of plugins, and therefore limiting the search by name or target seemed unnecessary.  As for --show-details, I was thinking that a local discovery would normally only contain a single version, so there would be no point in showing details.  Of course this can all be changed in the future if appropriate use cases present themselves.

I'm leaving this as a draft for now until I get feedback on the UX

For --local we don't support the new flags (--target, --name, --show-details), although I don't think it would be too hard to support, I wanted feedback first.

I noticed that for local installation and search you are using the ~/.config/tanzu-plugins/ directory. However, to support the target  for local installation users should be using the new directory structure available at the artifacts/plugins/darwin/amd64 location. And when we use this with tanzu plugin search the target information is shown correctly as part of the search result.

Searching a local discovery will normally yield a very small amount of plugins, and therefore limiting the search by name or target seemed unnecessary. As for --show-details, I was thinking that a local discovery would normally only contain a single version, so there would be no point in showing details. Of course this can all be changed in the future if appropriate use cases present themselves.

Agree with the things mentioned here and +1 on going with the current implementation as part of this PR to start with.

For table output, we can do some future enhancements to improve the output like this to align with the normal table output format. But the current implementation should be sufficient for now.
$ tz plugin search --name cluster --show-details
NAME:         cluster
DESCRIPTION:  Kubernetes cluster operations
TARGET:       kubernetes
LATEST:       v0.28.1
VERSIONS:
    - v0.25.0
    - v0.25.4
    - v0.28.0
    - v0.28.1

should be using the new directory structure available at the artifacts/plugins/darwin/amd64 location

Thanks for pointing that out! I will be using that in my examples from now on.


nix-2.15.1 rebuilt although already in binary cache

nix why-depends --derivation .#nixOnDroidConfigurations.sams9.activationPackage --impure -- .#nixOnDroidConfigurations.sams9.pkgs.nixVersions.nix_2_15:
/nix/store/pjxvjr588jqg9732zqyyvhv56sxfwyq3-nix-on-droid-generation.drv
└───/nix/store/1h28ssjyxfbfzrxn77advhk1gdp9vc5f-nix-on-droid-path.drv
    └───/nix/store/jrwzz3dk6nia46728q275cjmbs8ygvdf-nix-2.15.1.drv

nix was built here and pushed to cache here.
Still on the next attempt to run my workflow, nix is built again instead of being taken from the cache as the other artifacts from previous workflow run.

Rather asking on matrix (here) as this doesn't look as a nix-on-droid issue directly.


Question:  How to do pipeline without containers?

Trying to wrap my head around your new (to me) pipeline behaviors after being out of Mediatr for over 18 months.
Inherited a monolith MVC app (100+ projects spanning a dozen solutions) with no DI containers defined - and the request to not use containers for fear of breaking this monolith.
Trying to do some Proof of Concepts on cross cutting concerns without using PostSharp to handle AOP weaving at build time.  We have a ton of Controller Actions that contain 100+ lines of "business" code.  Currently, logging is "just another business class".  I would like to add the Mediatr Pipeline to a couple of moderately expensive Action calls, wrap up Logging, Validation, Notification and possibly a few other cross domain actions.
Is there a way to create a Controller Pipeline object without using containers?

It shouldn't be any different than handlers, since it's really just the Mediator class using the factory delegates. If your factory delegates can instantiate pipeline steps, they're good to go.

Sorry @jbogard - I am drawing a blank.  I think I have too many things on my mind right now.
I know I can do this:
namespace Pipeline.Controllers
{
	public class HomeController : Controller
	{
		public ActionResult Index()
		{
			var inner = new HomeControllerIndex.Mediator();
			var indexPipeline = new MediatorPipeline<HomeControllerIndex.Request, HomeControllerIndex.Response>(inner
				, HomeControllerIndex.Validators
				, HomeControllerIndex.PreProcessors
				, HomeControllerIndex.PostProcessors
				, HomeControllerIndex.ResponseProcessors);

			HomeControllerIndex.Response response = indexPipeline.Handle(null);

			return View();
		}

Then define a singular pipeline something like (following your older blogs):
namespace Pipeline.Core
{
	public class MediatorPipeline<TRequest, TResponse> : IRequestHandler<TRequest, TResponse> where TRequest : IRequest<TResponse>
	{
		private readonly IRequestHandler<TRequest, TResponse> _inner;
		private readonly IEnumerable<IMessageValidator<TRequest>> _validators;
		private readonly IEnumerable<IPreRequestProcessor<TRequest>> _preProcessors;
		private readonly IEnumerable<IPostRequestProcessor<TRequest, TResponse>> _postProcessors;
		private readonly IEnumerable<IResponseProcessor<TResponse>> _responseProcessors;

		public MediatorPipeline(IRequestHandler<TRequest, TResponse> inner,
			IEnumerable<IMessageValidator<TRequest>> validators = null,
			IEnumerable<IPreRequestProcessor<TRequest>> preProcessors = null,
			IEnumerable<IPostRequestProcessor<TRequest, TResponse>> postProcessors = null,
			IEnumerable<IResponseProcessor<TResponse>> responseProcessors = null)
		{
			if(inner == null) throw new ArgumentNullException(nameof(inner));

			_inner = inner;

			if (validators != null) _validators = validators;
			if (preProcessors != null) _preProcessors = preProcessors;
			if (postProcessors != null) _postProcessors = postProcessors;
			if (responseProcessors != null) _responseProcessors = responseProcessors;
		}

		public TResponse Handle(TRequest request)
		{
			if (request == null)
				throw new ArgumentNullException(nameof(request));

			var stopwatch = new Stopwatch();
			stopwatch.Start();
			var sourceContext = GetType();
			var method = MethodBase.GetCurrentMethod();
			using (LogContext.PushProperty("SourceContext", sourceContext.FullName))
			using (LogContext.PushProperty("Method", method.Name))
			using (LogContext.PushProperty("MediatorRequestType", typeof(TRequest).FullName))
			using (LogContext.PushProperty("Request", request))
			{
				Log.Logger.Verbose("Handling {TRequestName}", typeof(TRequest).Name);

				// Handle all pre-processing...
				foreach (var preProcessor in _preProcessors)
				{
					preProcessor.Handle(request);
				}
				Log.Logger.Verbose("Pre-processing for {TRequestName} took {ElapsedMilliseconds}ms", typeof(TRequest).Name, stopwatch.ElapsedMilliseconds);

				List<string> failureList = new List<string>();
				IEnumerable<IEnumerable<ValidationFailure>> validationFailuresAll = _validators.Select(v => v.Validate(request));
				foreach (IEnumerable<ValidationFailure> validationFailures in validationFailuresAll)
				{
					foreach (ValidationFailure failure in validationFailures)
					{
						string errorMessage = failure.ErrorMessage;
						if (!failureList.Contains(errorMessage))
						{
							failureList.Add(errorMessage);
						}
					}
				}
				if (failureList.Any())
				{
					var ex = new ValidationException("Validation Errors!");
					using (LogContext.PushProperty("FailureList", failureList))
					{
						Log.Logger.Error(ex, "Class {SourceContextName}.{MethodName} failed.  Throwing an error!", sourceContext.FullName, method.Name);
					}
					throw ex;
				}

				// Handle the actual business domain...
				var response = _inner.Handle(request);
				Log.Logger.Verbose("Processing for {TRequestName} took {ElapsedMilliseconds}ms", typeof(TRequest).Name, stopwatch.ElapsedMilliseconds);

				// Handle all post-processing...
				foreach (var postProcessor in _postProcessors)
				{
					postProcessor.Handle(request, response);
				}
				Log.Logger.Verbose("Post-processing for {TRequestName} took {ElapsedMilliseconds}ms", typeof(TRequest).Name, stopwatch.ElapsedMilliseconds);

				foreach (var responseProcessor in _responseProcessors)
				{
					responseProcessor.Handle(response);
				}
				Log.Logger.Verbose("Response-processing for {TRequestName} took {ElapsedMilliseconds}ms", typeof(TRequest).Name, stopwatch.ElapsedMilliseconds);

				using (LogContext.PushProperty("Response", response))
				{
					Log.Logger.Information("Class {SourceContextName}.{MethodName} successfully completed.", sourceContext.FullName, method.Name);
				}
				return response;
			}
		}
	}
}

The implementation underneath the covers looks like:
https://github.com/jbogard/MediatR/blob/master/src/MediatR/Internal/RequestHandler.cs#L130
So you just need to have a way to instantiate the IPipelineBehavior (the request pre/post processors are just a built-in template, but aren't actually hooked up explicitly).


Implement Array#sort

I use Golang's sort package for the sorting, so the change is for exposing the required interface

I have a question: how do you want to organize the methods for sorting in the future?

Current Array#sort is very simple and takes no arguments including a block.
Currently we don't have <=> operator and Enumerable module and Enumerator class like Ruby.
Instead we have ArrayEnumerator, LazyEnumerator, RangeEnumerator classes as well as Hash#sort and Hash#sorted_key methods

Regards,

I understood! I expect the discussions for the better design around this 😋


Fix the error of calling small_cnn

Caused by uncommitted definition of  small_cnn()

@D0048 ,I have fixed it yet.

What's your graphic memory usage during run? My 2g graphic memory is definitely not enough now...

@D0048, since the model has been changed, it will take much less graphic memory.
The information like this:
2017-11-16 19:34:48.963928: W tensorflow/core/common_runtime/bfc_allocator.cc:217] Allocator (GPU_0_bfc) ran out of memory trying to allocate 3.81GiB. The caller indicates that this is not a failure, but may mean that there could be performance gains if more memory is available.
doesn't important, you can ignore it.

Since I am getting OOMs like this:

2017-11-16 21:05:31.914727: I tensorflow/core/common_runtime/bfc_allocator.cc:685] Stats:
Limit:<PHONE_NUMBER>
InUse:<PHONE_NUMBER>
MaxInUse:<PHONE_NUMBER>
NumAllocs:                     104
MaxAllocSize:            472514560

2017-11-16 21:05:31.914737: W tensorflow/core/common_runtime/bfc_allocator.cc:277] ********************xxxxxxxxx****************xxxxxxxxx*********************************xxxxxxxxxxxxx
2017-11-16 21:05:31.914750: W tensorflow/core/framework/op_kernel.cc:1192] Resource exhausted: OOM when allocating tensor with shape[5000,64,16,16]

I am pretty sure this version takes considerably more graphic memory than the last one. Could you maybe run nvidia-smi during training and check if my assertion holds?

@D0048
You can change the code as follows:
                # Print the accuracy
                train_accuracy = 0
                for index in range(500): #<==============make this number bigger
                    accuracy_batch = mnist.test.next_batch(20)#<==============and reduce this
                    train_accuracy += accuracy.eval(feed_dict={
                        x: accuracy_batch[0],
                            y_: accuracy_batch[1], keep_prob: 1.0})
                print(
                    '%g, %g, %g' %
                    (i / 1000, train_accuracy / 500, (time.clock() - t0)))#<==============It is also needed to be changed here

That will work.
It is maybe caused by the bigger size of the input ofsmall_cnn().

Already tried batch_size 1 earlier yesterday. The OOM still occurred. Kinda wondering what's the minimum requirement.


refactor: create separate files for various functions

Per @scolladon's suggestion, refactor the code to move functions to separate files.
@scolladon - Can you review this request when you have a moment please?
This is testing SAT right now. I think the src/service/xml2jsParser.ts function probably can be broken up more, but I think we can tackle that after this is merged into beta.
The build job @AllanOricil added is passing as well which runs the current tests (thank you Alan!).

@mcarvin8 what if you make the xml composer/decomposer its own package? I think it could become a tool in the future, not only for sf developers that work with metadata files. With this core package created, you then create the "salesforce metada composer/decomposer package", and finally you use its API in the plugin code.

I like the idea of creating a separate package for XML decomposing/composing that could be used by others outside of Salesforce devs, @AllanOricil.
For this Salesforce decomposer, I would like to push v1.0.0 soon just to establish this baseline. But I definitely am open to developing a standalone XML decomposer package and then bake it into the Salesforce decomposer once it's stable.
I think the main thing that I would need to figure out is how I would have the general XML decomposer package dynamically name decomposed files. In this Salesforce version, I name decomposed nested files using a specific field name key which is a unique and required value per the SFDX metadata API guide. That way, the file-names can be consistent in a Git repo. But this is currently hard-coded in the JSON data in metadata.ts.
For a general XML decomposer, I think I'll need to add some code which would compare XML nested elements with the same parent name (like  for all email alerts in a Salesforce workflow) and dynamically figure out a unique file-name for each decomposed file.
I can start a project tomorrow with the current functions in place because it shouldn't be too much effort to get a project made that will read a XML file/directory and at least print the decomposed elements to a terminal.

Yes, I agree that it is better to leave this out of v1.
An idea for unique file names is to use file's computed sha hash. And the decomposition could come from a spec file dev has to write. This config file tells the xml decomposer how a giving xml file matching a glob has to be decomposed.


Raw queries with count() selected return strange non integer values

Bug description
While trying to work around this bug https://github.com/prisma/prisma/issues/14539 I noticed strange behavior when selected count().
How to reproduce
The following query:
const tagsWithCount = await prisma.$queryRawUnsafe<any[]>(`
      SELECT
        t.id,
        t.name,
        t.path,
        COUNT(s.id) as _count
      FROM tags t
      LEFT JOIN posts_tags st on t.id = st.tag_id
      LEFT JOIN posts s ON st.post_id = s.id
      GROUP BY
        t.id,
        t.name,
        t.path
      ORDER BY
        _count DESC
`)

returns rows like this:
{
id: 1,
name: 'tag1',
path: 'tag1',
_count: 319n
}

You may see that the _count field is not really integer. It has a strange suffix - "n".
Expected behavior
The _count field in the resulting data set should only contain integer values.
Prisma information
model Post {
  id                      Int           @id @default(autoincrement()) @db.UnsignedInt

  postTags          PostTag[]

  @@map("posts")
}
model Tag {
  id                      Int             @id @default(autoincrement()) @db.UnsignedInt

  postTags           PostTag[]

  @@map("tags")
}

model PostTag {
  postId                 Int             @map("post_id") @db.UnsignedInt
  tagId                   Int             @map("tag_id") @db.UnsignedInt

  post                   Post           @relation(fields: [postId], references: [id], onDelete: Cascade)
  tag                     Tag             @relation(fields: [tagId], references: [id], onDelete: Cascade)

  @@id([postId, tagId])

  @@map("posts_tags")
}

Environment & setup

OS: Docker: node:16-alpine (Linux)
Database: Docker: mariadb:10.7
Node.js version: v16.14.2

Prisma Version
    "@prisma/client": "^4.1.1"
    "prisma": "^4.1.1"

This is because Prisma now "correctly" creates counts as bigint's (int64) which is what mariadb/mysql and postgres return them as by default.  BigInt is not fully supported, ex. I you try and serialize it nodejs's default JSON serializer will throw an error.
I just ran into this, my solution is to cast the count as a string.

Thank you very much @dariusj18 for sharing your discoveries!
I would wait for the official fix but would you mind of sharing your workaround code here for other people?

Is it documented which databases return a bigint on count()?
Is the difference to using Prisma client count documented for raw queries?
I think it is quite a stretch our users to expect this behavior (or to even understand it, when it occurs).

Mapping between DB and JS types is documented here. Maybe, "count() is a 64-bit integer" part is really missing, but at the same time, we generally do not document return values for specific raw sql functions — i'd personally would look for this information in DB docs, not ORM.  Maybe count() should be an exception here, not sure.

This is not a bug and expected behavior.

Thanks for explaining it @SevInf. Maybe this behavior it's expected by ORM developers but not end-users. As a user, I couldn't imagine that when I ask for a count number, I would receive a Bigint object. Especially if all my table fields are of the standard Integer type.
@janpio Yes, documentation is a solution but not ideal in my opinion because to read the particular section of the documentation you need to know when you need it and where to find it. What if Prisma hints it somehow and points out to the right doc section if a query contains a count() call? But in any case we need the docs.

I don't think that your table column types are relevant here @kkomelin. You are asking your database to return the result of COUNT() and that is indeed bigint for MariaDB: https://mariadb.com/kb/en/count/ In Javascript bigints can not be represented with normal Numbers, hence the Bigint as well on that side. Everything else would lead to potentially invalid data - and that is the one thing that is unacceptable for a ORM.
Prisma can not do better than to highlight specific thigns in the docs that might be unexpected (although technically correct and logical) to our users. In my discussion with @SevInf I basically tried to figure out if that is the case and worth the effort here. I could imagine a sentence "Note that if you use an aggregate function like COUNT() in SQL on some providers you might get a bigint value which initially might be not intuitive, but matches what the database returns." and then a link to maybe how to handle strange bigint numbers.

@janpio I see now. Thanks for clarifying it for me. Happy to learn new things.
I trust you guys to handle this issue the best possible way.

I understand that  prisma.$queryRawSELECT COUNT(*)  returns a bigint because of underlying db types. For the same reason, shouldn't prisma.user.count() also return a bigint? It is returning a number here on prisma 4.3.1.

BigInt.prototype.toJSON = function() {
  return Number(this)
}

This is working fine with browser js.
Of course if you want to do something in server, you also need to use Number(xxx._count) to convert BigInt to Number

Hi, just wanted to add to this that the typescript definitions for things like count() appear to be typed as returning a number when at runtime they return a bigint.

If this applied to the model methods like count() and they return a different type than what is in the type definition, please open a new issue. This one here is specifically about raw queries only. Thanks @sqwishy.

@janpio Oops, sorry if I was off-topic. Someone from slack pointed me in this direction so I just thought I'd leave a message to let folks know. Submitting bug report to this project looks pretty involved and, unfortunately, I don't really have the time do that right now. But maybe someone else can if they're up for it.

One solution that worked for me, when writing raw sql parse the value to integer within the sql itself.
(eg. SELECT COUNT(*)::integer FROM table)
One thing to keep in mind is that the default bigint is stored in 8 bytes, while integer is stored in 4 bytes. So there might be some incompatibilities if you are working with big numbers.

This is still the case per prisma v5.1.1 (although, ids are also now denoted with the "n" suffix):
datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}

model Post {
  id Int @id @default(autoincrement()) @db.UnsignedInt
}

// index.ts
import { PrismaClient } from "@prisma/client";

const prisma = new PrismaClient({
  log: ["query"],
});

const populate = async () => {
  await prisma.post.create({ data: {} });
};

const test = async () => {
  const a = await prisma.$queryRawUnsafe<any[]>(`
    SELECT
      p.id,
      COUNT(p.id) as _count
    FROM Post p
  `);
  console.log(a);
}

const main = async () => {
  for (let i = 0; i < 10; i++) {
    await populate();
  }
  // console.log(process.env.DATABASE_URL);
  return test();
}

main()
  .catch((e) => console.error(e))
  .finally(async () => {
    prisma.$disconnect;
  });

Not, although @Druue marked this issue as 2-confirmed this only means that the described behavior is reproducible - not that we will "fix" or change it.
As explained in https://github.com/prisma/prisma/issues/14613#issuecomment-1240515697 this is desired and intentional behavior though, as the returned number could be too big for a normal Number and hence is returned as a bigint instead - which is by default rendered with a n after the number, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt.

According to this type casting in the query itself should work.
but tried it like so:
SELECT count(*)::int as "totalItems" [...]

and the returned type is still bigint.
is there any proper solution other then casting manually the returned data?

It seems odd that JS's Number.MAX_SAFE_INTEGER goes up to 9,007,199,254,740,991 while Postgres int/int4 is more standard going up to: 2,147,483,647
I assumed that JS used a 4 byte integer, but it seems it does not, then again JS's "Number" is much more flexible re: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#number_type

The Number type is a double-precision 64-bit binary format IEEE 754 value. It is capable of storing positive floating-point numbers between 2-1074 (Number.MIN_VALUE) and 21024 (Number.MAX_VALUE) as well as negative floating-point numbers between -2-1074 and -21024, but it can only safely store integers in the range -(253 − 1) (Number.MIN_SAFE_INTEGER) to 253 − 1 (Number.MAX_SAFE_INTEGER). Outside this range, JavaScript can no longer safely represent integers; they will instead be represented by a double-precision floating point approximation. You can check if a number is within the range of safe integers using Number.isSafeInteger().

I had something like this to support the larger numbers:
import { Err, Ok, Result } from 'ts-results'

export function bigIntToNumber(value: bigint): Result<number, Error> {
	if (validInterger(value)) {
  		return Ok(Number(value))
	}

	return Err(new Error('Number is out of bounds to be a Number'))
}

function validInteger(value: bigint): boolean {
  return value <= Number.MAX_SAFE_INTEGER && value >= Number.MIN_SAFE_INTEGER
}

It's just annoying and unfortunate that Jest cannot handle BigInt easily without some oddities. Gah such a headache.

I faced the same issue, what i did was to CAST(SUM("inStock") AS INTEGER) cast my results from the sum funct, this is a postgres database and that is the full query:
const activeProductsCount =
await prisma.$queryRawSELECT CAST(SUM("inStock") AS INTEGER) as "totalProducts" FROM "Products" WHERE status='Active';

One solution that worked for me, when writing raw sql parse the value to integer within the sql itself. (eg. SELECT COUNT(*)::integer FROM table) One thing to keep in mind is that the default bigint is stored in 8 bytes, while integer is stored in 4 bytes. So there might be some incompatibilities if you are working with big numbers.

Worked for me. Thanks

When casting be careful that you may end up truncating the number if it's above the maximum. The DB implementation explicitly chose to support a larger number when using count. If you expect you'll never run into the maximum for an integer you'll be fine until the day comes that you are not; it's going to be a foot gun laying around ready to be stepped on :P


Gracefully deprecate View.propTypes

React native 0.44 deprecated View.propTypes in favor of ViewPropTypes.
This PR gracefully deprecates View.propTypes by using

ViewPropTypes on<EMAIL_ADDRESS>View.propTypes on react-native < @.44

@iRoachie Awesome, thanks for the contribution!


WebStyleSymbol: Need to update the styles for the 4.30 release

I need to update the WebStyleSymbols.  More symbols are available in the 4.30 release.

This has been implemented


PLAT-129114: Update "Hello, Enact" source code

Enact-DCO-1.0-Signed-off-by: Yunho Lee<EMAIL_ADDRESS>Change theme from moonstone to sandstone.

@YunhoLee0 Would you please rebase this to feature/kittenbrowser-migration?


feat: new Code API support, disabled feedback form [ROAD-311]

new Code API support with legacy json format
disabled feedback form while it's broken anyway

You are welcome. Can you please merge it and do the release on the Marketplace?

@Arvi3d sure, I'll ping you on Slack as soon as we release it.


perf: improve job selection performance in case of potential ambiguity that is resolved by comprehensive ruleorder statements.

QC

[x] The PR contains a test case for the changes or the changes are already covered by an existing test case.
[x] The documentation (docs/) is updated to reflect the changes or this is not necessary (e.g. if the change does neither modify the language nor the behavior or functionalities of Snakemake).

@dkuzminov you probably want to have a look at this?

Overall this improvement is incorrect. Assume there is a job primary that dominates all other jobs. Next, imagine that this rule is disregarded later because of missing input. We would get an incorrect is_strictly_ordered value because we know nothing about the ordering of the rest of the jobs. We would select the first producer (other than primary) even if it is ambiguous.

Right, I missed that case indeed. I have worked a bit on it. Still not 100% validated in my mind, but I think this is more correct (although it is 20pm here now, so I might miss something again ;-).

I think it is fine.


[FEAT] Contact Us API Endpoint

Description

This PR introduces an API endpoint to handle user inquiries from the "Contact Us" form. The endpoint validates input data and sends the inquiry to a specified email address using the configured email service.
Related Issue (Link to Github issue)

Issue #4
Motivation and Context

This change is required to provide a backend service to handle user inquiries from the "Contact Us" form, ensuring data is validated and inquiries are sent to the appropriate email address.
How Has This Been Tested?

Setting Up the Environment
Prerequisites:

Ensure you have XAMPP installed on your system.
Locate your htdocs or www folder in your XAMPP/WAMP installation directory.

Cloning the Repository

Clone the repository:git clone https://github.com/Goldengide/hng_boilerplate_php_laravel

Change into the project directory:cd hng_boilerplate_php_laravel

Checkout the main branch:git checkout main

Running the Project

Install the dependencies:composer install

Generate the application key:php artisan key:generate

Copy the example environment file:cp .env.example .env

Update the following variables in the .env file with your email service credentials:MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
<EMAIL_ADDRESS>MAIL_PASSWORD=your_password
MAIL_ENCRYPTION=tls
<EMAIL_ADDRESS>MAIL_FROM_NAME="${APP_NAME}"

Unit Testing

Run the unit tests:php artisan test

Testing the API

Use POSTMAN to send a POST request to /api/v1/contact with the following JSON body:{
    "name": "Gideon Amowogbaje",
    "email"<EMAIL_ADDRESS>    "message": "This is a test message."
}

Types of changes

[x] New feature (non-breaking change which adds functionality)

Checklist:

[x] My code follows the code style of this project.
[x] My change requires a change to the documentation.
[x] I have updated the documentation accordingly.
[x] I have read the CONTRIBUTING document.
[x] I have added tests to cover my changes.
[x] All new and existing tests passed.

Fix merge conflicts

Fix merge conflicts

I have fixed merge conflicts @Ruthiejayjay

Goldengide fix the reviews

Ok fixed

You're almost there, but all checks are failing. fix that

finally @Ruthiejayjay


One of the EBI accepted instrument_model terms raises non-UTF-8 character error

454 GS FLX+ raises error

After further review it seems like the issue is not 454 GS FLX+ but the format of the file, will close for now.


fix bug in Conditional example

Exchange two instructions in order to make the example correct.

Thanks, this fixes the example.  Another correct fix would be to keep the current order of instructions but write the vsetvli result to x0 instead.


Cannot Control H6072

Govee Device SKU
H6072
Govee2MQTT Version
2024.07.13-82ddc6e9
Describe the issue
I have the following Govee Devices: H6008, H7172, H6003, H6063, H6072
In the addon web UI only the H6072 shows source as the AWS IoT API. The others show either Lan or Platform API.
The H6072 is the only device that I cannot successfully control. I see the Power State request in the logs, but no response.
Startup Diagnostics
s6-rc: info: service legacy-services: stopping
s6-rc: info: service legacy-services successfully stopped
s6-rc: info: service legacy-cont-init: stopping
s6-rc: info: service legacy-cont-init successfully stopped
s6-rc: info: service fix-attrs: stopping
s6-rc: info: service fix-attrs successfully stopped
s6-rc: info: service s6rc-oneshot-runner: stopping
s6-rc: info: service s6rc-oneshot-runner successfully stopped
s6-rc: info: service s6rc-oneshot-runner: starting
s6-rc: info: service s6rc-oneshot-runner successfully started
s6-rc: info: service fix-attrs: starting
s6-rc: info: service fix-attrs successfully started
s6-rc: info: service legacy-cont-init: starting
s6-rc: info: service legacy-cont-init successfully started
s6-rc: info: service legacy-services: starting
s6-rc: info: service legacy-services successfully started
GOVEE_API_KEY=REDACTED
GOVEE_MQTT_HOST=core-mosquitto
GOVEE_TEMPERATURE_SCALE=F
GOVEE_EMAIL=REDACTED
GOVEE_PASSWORD=REDACTED
GOVEE_MQTT_PASSWORD=REDACTED
GOVEE_MQTT_USER=addons
GOVEE_MQTT_PORT=1883
++ cd /app
++ exec /app/govee serve
[2024-11-29T11:01:20 INFO  govee::commands::serve] Starting service. version 2024.07.13-82ddc6e9
[2024-11-29T11:01:20 INFO  govee::commands::serve] Querying platform API for device list
[2024-11-29T11:01:23 INFO  govee::commands::serve] Querying undocumented API for device + room list
[2024-11-29T11:01:25 INFO  govee::service::iot] Connected to IoT: CONNACK code 0: Connection Accepted.
[2024-11-29T11:01:25 INFO  govee::commands::serve] Starting LAN discovery
[2024-11-29T11:01:25 INFO  govee::service::iot] IoT (re)connected with status CONNACK code 0: Connection Accepted.
[2024-11-29T11:01:25 INFO  govee::commands::serve] Waiting 10 seconds for LAN API discovery
[2024-11-29T11:01:35 INFO  govee::commands::serve] Devices returned from Govee's APIs
[2024-11-29T11:01:35 INFO  govee::commands::serve] Star Lamp (63:62:60:74:F4:05:AF:E2 H6008)
[2024-11-29T11:01:35 INFO  govee::commands::serve]   Platform API: devices.types.light. supports_rgb=true supports_brightness=true
[2024-11-29T11:01:35 INFO  govee::commands::serve]                 color_temp=Some((2000, 9000)) segment_rgb=None
[2024-11-29T11:01:35 INFO  govee::commands::serve]   Undoc: room=Some("Gearls Bedroom") supports_iot=true ble_only=false
[2024-11-29T11:01:35 INFO  govee::commands::serve]
[2024-11-29T11:01:35 INFO  govee::commands::serve] Desk left (33:6D:CA:B1:14:6A:AC:4C H6063)
[2024-11-29T11:01:35 INFO  govee::commands::serve]   LAN API: ip=<IP_ADDRESS>
[2024-11-29T11:01:35 INFO  govee::commands::serve]   Platform API: devices.types.light. supports_rgb=true supports_brightness=true
[2024-11-29T11:01:35 INFO  govee::commands::serve]                 color_temp=Some((2000, 9000)) segment_rgb=None
[2024-11-29T11:01:35 INFO  govee::commands::serve]   Undoc: room=Some("Gearls Bedroom") supports_iot=true ble_only=false
[2024-11-29T11:01:35 INFO  govee::commands::serve]   Quirk { sku: "H6063", icon: "mdi:light-bulb", supports_rgb: true, supports_brightness: true, color_temp_range: Some((2000, 9000)), avoid_platform_api: false, ble_only: false, lan_api_capable: true, device_type: Light, platform_temperature_sensor_units: None, platform_humidity_sensor_units: None, iot_api_supported: true, show_as_preset_buttons: None }
[2024-11-29T11:01:35 INFO  govee::commands::serve]
[2024-11-29T11:01:35 INFO  govee::commands::serve] Smart Ice Maker (26:A7:60:74:F4:0D:29:54 H7172)
[2024-11-29T11:01:35 INFO  govee::commands::serve]   Platform API: devices.types.ice_maker. supports_rgb=false supports_brightness=false
[2024-11-29T11:01:35 INFO  govee::commands::serve]                 color_temp=None segment_rgb=None
[2024-11-29T11:01:35 INFO  govee::commands::serve]   Undoc: room=Some("Bar") supports_iot=true ble_only=false
[2024-11-29T11:01:35 INFO  govee::commands::serve]
[2024-11-29T11:01:35 INFO  govee::commands::serve] Tower Lamp (30:5B:3E:4B:18:66:53:D6 H6072)
[2024-11-29T11:01:35 INFO  govee::commands::serve]   Platform API: devices.types.light. supports_rgb=true supports_brightness=true
[2024-11-29T11:01:35 INFO  govee::commands::serve]                 color_temp=Some((2000, 9000)) segment_rgb=Some(0..8)
[2024-11-29T11:01:35 INFO  govee::commands::serve]   Undoc: room=Some("Gearls Bedroom") supports_iot=true ble_only=false
[2024-11-29T11:01:35 INFO  govee::commands::serve]   Quirk { sku: "H6072", icon: "mdi:floor-lamp", supports_rgb: true, supports_brightness: true, color_temp_range: Some((2000, 9000)), avoid_platform_api: false, ble_only: false, lan_api_capable: true, device_type: Light, platform_temperature_sensor_units: None, platform_humidity_sensor_units: None, iot_api_supported: true, show_as_preset_buttons: None }
[2024-11-29T11:01:35 WARN  govee::commands::serve]   This device should be available via the LAN API, but didn't respond to probing yet. Possible causes:
[2024-11-29T11:01:35 WARN  govee::commands::serve]   1) LAN API needs to be enabled in the Govee Home App.
[2024-11-29T11:01:35 WARN  govee::commands::serve]   2) The device is offline.
[2024-11-29T11:01:35 WARN  govee::commands::serve]   3) A network configuration issue is preventing communication.
[2024-11-29T11:01:35 WARN  govee::commands::serve]   4) The device needs a firmware update before it can enable LAN API.
[2024-11-29T11:01:35 WARN  govee::commands::serve]   5) The hardware version of the device is too old to enable the LAN API.
[2024-11-29T11:01:35 INFO  govee::commands::serve]
[2024-11-29T11:01:35 INFO  govee::commands::serve] Side Table Lamp (ee:7e:7c:a6:b0:17:82:ad H6003)
[2024-11-29T11:01:35 INFO  govee::commands::serve]   Platform API: devices.types.light. supports_rgb=true supports_brightness=true
[2024-11-29T11:01:35 INFO  govee::commands::serve]                 color_temp=Some((2000, 9000)) segment_rgb=None
[2024-11-29T11:01:35 INFO  govee::commands::serve]   Undoc: room=Some("Casita Bedroom") supports_iot=true ble_only=false
[2024-11-29T11:01:35 INFO  govee::commands::serve]
[2024-11-29T11:01:35 INFO  govee::commands::serve] Alex Desk (8F:35:60:74:F4:04:B9:4A H6008)
[2024-11-29T11:01:35 INFO  govee::commands::serve]   Platform API: devices.types.light. supports_rgb=true supports_brightness=true
[2024-11-29T11:01:35 INFO  govee::commands::serve]                 color_temp=Some((2000, 9000)) segment_rgb=None
[2024-11-29T11:01:35 INFO  govee::commands::serve]   Undoc: room=Some("Alex Bedroom") supports_iot=true ble_only=false
[2024-11-29T11:01:35 INFO  govee::commands::serve]
[2024-11-29T11:01:35 INFO  govee::commands::serve] Desk right (34:F1:E6:EE:6C:D1:3B:0C H6063)
[2024-11-29T11:01:35 INFO  govee::commands::serve]   LAN API: ip=<IP_ADDRESS>
[2024-11-29T11:01:35 INFO  govee::commands::serve]   Platform API: devices.types.light. supports_rgb=true supports_brightness=true
[2024-11-29T11:01:35 INFO  govee::commands::serve]                 color_temp=Some((2000, 9000)) segment_rgb=None
[2024-11-29T11:01:35 INFO  govee::commands::serve]   Undoc: room=Some("Gearls Bedroom") supports_iot=true ble_only=false
[2024-11-29T11:01:35 INFO  govee::commands::serve]   Quirk { sku: "H6063", icon: "mdi:light-bulb", supports_rgb: true, supports_brightness: true, color_temp_range: Some((2000, 9000)), avoid_platform_api: false, ble_only: false, lan_api_capable: true, device_type: Light, platform_temperature_sensor_units: None, platform_humidity_sensor_units: None, iot_api_supported: true, show_as_preset_buttons: None }
[2024-11-29T11:01:35 INFO  govee::commands::serve]
[2024-11-29T11:01:35 INFO  govee::service::http] http server addr is <IP_ADDRESS>:8056
[2024-11-29T11:01:55 INFO  govee::service::state] requesting update via Platform API Star Lamp (63:62:60:74:F4:05:AF:E2 H6008) None
[2024-11-29T11:01:55 ERROR govee::hass_mqtt::light] Unable to list scenes for Side Table Lamp (ee:7e:7c:a6:b0:17:82:ad H6003): list_scene_names: get_scene_caps: request https://openapi.api.govee.com/router/api/v1/device/scenes status 200: OK: parsing https://openapi.api.govee.com/router/api/v1/device/scenes response: Failed with status 400 Bad Request Bad Request: Request to https://openapi.api.govee.com/router/api/v1/device/scenes failed with code 400 Bad Request devices not support this instance. Full response: {"requestId":"uuid","msg":"devices not support this instance","code":400,"payload":{"sku":"H6003","device":"ee:7e:7c:a6:b0:17:82:ad"}}
[2024-11-29T11:01:55 INFO  govee::service::state] requesting update via Platform API Smart Ice Maker (26:A7:60:74:F4:0D:29:54 H7172) None
[2024-11-29T11:01:55 INFO  govee::service::state] requesting update via IoT MQTT Tower Lamp (30:5B:3E:4B:18:66:53:D6 H6072) None
[2024-11-29T11:01:55 INFO  govee::service::state] requesting update via Platform API Side Table Lamp (ee:7e:7c:a6:b0:17:82:ad H6003) None
[2024-11-29T11:01:56 ERROR govee::hass_mqtt::light] Unable to list scenes for Side Table Lamp (ee:7e:7c:a6:b0:17:82:ad H6003): list_scene_names: get_scene_caps: request https://openapi.api.govee.com/router/api/v1/device/scenes status 200: OK: parsing https://openapi.api.govee.com/router/api/v1/device/scenes response: Failed with status 400 Bad Request Bad Request: Request to https://openapi.api.govee.com/router/api/v1/device/scenes failed with code 400 Bad Request devices not support this instance. Full response: {"requestId":"uuid","msg":"devices not support this instance","code":400,"payload":{"sku":"H6003","device":"ee:7e:7c:a6:b0:17:82:ad"}}
[2024-11-29T11:01:56 INFO  govee::service::state] requesting update via Platform API Alex Desk (8F:35:60:74:F4:04:B9:4A H6008) None
[2024-11-29T11:02:00 INFO  govee::service::hass] Wait 450ms for hass to settle on 45 entity configs
[2024-11-29T11:02:01 INFO  govee::service::hass] MQTT connected with status=CONNACK code 0: Connection Accepted.
Additional Logs
[2024-11-29T10:37:12 INFO  govee::service::hass] powerSwitch for 305B3E4B186653D6: ON
[2024-11-29T10:37:12 INFO  govee::service::state] Using IoT API to set Tower Lamp (30:5B:3E:4B:18:66:53:D6 H6072) power state
Home Assistant Logs
N/A
Anything else?
As seen in the logs, it's worth noting that my H6072 has the older hardware version, and therefore cannot enable the LAN API.

Just out of curiosity, I recently bought the H6072. Did you purchase it a long time ago or recently?
I am not sure what hardware version to expect. The description mentions H6072381DE, but who knows what the actual hardware version is.

Just out of curiosity, I recently bought the H6072. Did you purchase it a long time ago or recently? I am not sure what hardware version to expect. The description mentions H6072381DE, but who knows what the actual hardware version is.

I've had it for 2-3 years
Hardware Version: 1.00.01/1.00.12
Firmware Version: 1.03.05

FWIW, I have several H6072 devices that work successfully here, I have both the older taller ones and the newer shorter ones.
The logs show that the IoT API was used to issue the command. I'd suggest power cycling the lamp to see if that helps.  Alternatively, since LAN API works with these devices, you might consider clearing out the govee email and password from the config so that only the platform API and LAN API (not the undocumented IoT API) will be used and see if that behaves any better.

Just few additional info about my H6072. The Govee team apparently cleared old stock during Black Friday via Amazon, and unfortunately, the lamp I received had 2-year-old hardware. There was no LAN control available. I contacted Govee support, and they confirmed that the hardware was too outdated to support this feature.
As a result, I had to open the lamp and modify it by replacing the Govee control system with an ESP32 running WLED. Now, I control it with Home Assistant using the WLED integration for RGB colors. However, for white light (warm or cool tint), I can still control it through the Govee app, the Home Assistant Govee integration, or the included remote though I rarely use these options.
So far, everything is working fine.


Samples from Rosetta Code project

This pull request adds more than 11,000 sample files from the Rosetta Code project. I wrote a small Python script to copy the samples from RosettaCodeData.
It also adds new extensions:

.ats for ATS
.idl for IDL
.pascal for Pascal
.psh for PowerShell

and new interpreters:

dart for Dart
racket for Racket
io for Io
factor for Factor
ocaml for OCaml
rune for E
csi for Scheme
runhaskell for Haskell
instantfpc for Pascal
gosh for Scheme
r6rs for Scheme

When the new samples had extensions or interpreters that were not widely used I changed them or removed the files.

Brilliant! I love the idea of using known samples like this.
I think I remember a conversation that our system team had concerning the memory usage of the linguist classifier (since it loads samples.json into memory when linguist is required). In a quick test on my machine, a fresh ruby process that has only required linguist takes up ~52MB in master and ~68MB with this branch.
@vmg @dbussink Is this a concern?
Since the classifier always runs against a known set of languages, we could store the sample data in separate files per language and lazily load it. Repositories typically have a lot of the same type of data, so we could use some kind of LRU cache to avoid churn.
The other option would be to implement (or find an existing implementation of) a classifier in C, keeping memory management out of Ruby land.
/cc #1572

How is this PR going?

The other option would be to implement (or find an existing implementation of) a classifier in C, keeping memory management out of Ruby land.

I think one possible solution is using the well-known liblinear / libsvm. The reasons:
(0) As mentioned, it's a good practice to generate features in advance and save the features into separate files. And using libsvm / liblinear can help with this: we can save the features into libsvm format, which is really useful for sparse data (e.g., bag-of-word). The loading and saving efforts will be reduced.
(1) liblinear / libsvm separates the training and predicting stages. That is, we can pre-train a SVM (or Logistic Regression) classifier and save its model file as we save the features in (0). Unless the user want to train their model for their own, they can just use our pre-trained classifier. The model file of libsvm / liblinear is very small (only saving information such as support vectors).
(2) The predicting stage of SVM or LogReg is very simple, which means we can even predict by ourself without using libsvm / liblinear as long as we have model file in (1). This implies that we can avoid extra external dependencies if the user is satisfied with our pre-trained classifier.
How do you think?

I guess the Forth heuristics doesn't match all of the samples?

@larsbrinkhoff Yes, that is why I reduced the scope in 7d6650a.

@arfon Is the memory usage of Linguist still an issue? If it is, maybe we could open an issue to start discussing possible solutions to overcome it...?

@arfon Is the memory usage of Linguist still an issue? If it is, maybe we could open an issue to start discussing possible solutions to overcome it...?

I'll defer to @vmg on this one. @vmg - this PR is attractive as it adds a large, reliable source of samples data...but by doing this we're likely to increase the memory usage of Linguist (see @bkeepers comment above).
I know that we had significant memory pressure in the past which made this a no-go but is this still the case?

@pchaigno I don't know about adding zillions of samples, but this PR has so many other goodies.  Please don't forget about it.

I'd love to know the size difference of converting spaces to tabs (the way nature intended).
/optionated prick.

Since the classifier always runs against a known set of languages, we could store the sample data in separate files per language and lazily load it.

This sounds like a really sensible approach to me. @pchaigno what do you think about re-working this effort to lazy load in separate language files?


Upgrade tooling for 9.0x

Update dependencies from .NET 9 Eng channel
Update nuget.config to use dotnet9 nuget feed instead of nuget8
Update tests to run with 8.0 runtime
Resolve new xunit analyzer warnings

All the projects still target net8.0.
Future TODO:

add 9.0 templates, and tests

Fixes https://github.com/dotnet/aspire/issues/5446 .
Microsoft Reviewers: Open in CodeFlow

/azp run

TODO:

[ ] check that code coverage report is unaffected
[ ] Number of tests is the same as a main run

Read commit by commit to review this. The first commit is the biggest and is the update of the dependencies, mostly from arcade.

/azp run

Issue to track follow up work - https://github.com/dotnet/aspire/issues/5676

Internal build for validation - https://dev.azure.com/dnceng/internal/_build/results?buildId=2535499


Fixed use-of-uninitialized-value related to init of struct stat

This potential issue was found by MemorySanitizer (msan). Whether the actual problem occurs depends on the compiler, OS, and other factors.
msan output related to this fix:
$ ./tsp
==432620==WARNING: MemorySanitizer: use-of-uninitialized-value
    #0 0x7fcfde24e8ac in ts::TSFile::seekCheck(ts::Report&) libtsduck/dtv/transport/tsTSFile.cpp:411:18
    #1 0x7fcfde24a9c6 in ts::TSFile::openInternal(bool, ts::Report&) libtsduck/dtv/transport/tsTSFile.cpp:366:10
    #2 0x7fcfde24d542 in ts::TSFile::openRead(std::__1::__fs::filesystem::path const&, unsigned long, unsigned long, ts::Report&, ts::TSPacketFormat) libtsduck/dtv/transport/tsTSFile.cpp:151:12
    #3 0x7fcfde25980d in ts::TSFileInputArgs::openFile(unsigned long, unsigned long, ts::Report&) libtsduck/dtv/transport/tsTSFileInputArgs.cpp:149:31
    #4 0x7fcfde259fbd in ts::TSFileInputArgs::open(ts::Report&) libtsduck/dtv/transport/tsTSFileInputArgs.cpp:187:14
    #5 0x7fcfdd91fc44 in ts::FileInputPlugin::start() libtsduck/plugins/plugins/tsFileInputPlugin.cpp:37:18
    #6 0x7fcfde2b3bd2 in ts::TSProcessor::start(ts::TSProcessorArgs const&) libtsduck/plugins/apps/tsTSProcessor.cpp:179:30
    #7 0x555c0ab44103 in MainCode(int, char**) tstools/tsp.cpp:147:17
    #8 0x7fcfddc45a52 in MainWrapper(int (*)(int, char**), int, char**) libtsduck/base/app/tsMain.cpp:35:16
    #9 0x555c0ab4282d in main tstools/tsp.cpp:22:1
    ...

  Uninitialized value was stored to memory at
    #0 0x7fcfde24c6cb in ts::TSFile::openInternal(bool, ts::Report&) libtsduck/dtv/transport/tsTSFile.cpp:363:14
    #1 0x7fcfde24d542 in ts::TSFile::openRead(std::__1::__fs::filesystem::path const&, unsigned long, unsigned long, ts::Report&, ts::TSPacketFormat) libtsduck/dtv/transport/tsTSFile.cpp:151:12
    #2 0x7fcfde25980d in ts::TSFileInputArgs::openFile(unsigned long, unsigned long, ts::Report&) libtsduck/dtv/transport/tsTSFileInputArgs.cpp:149:31
    #3 0x7fcfde259fbd in ts::TSFileInputArgs::open(ts::Report&) libtsduck/dtv/transport/tsTSFileInputArgs.cpp:187:14
    #4 0x7fcfdd91fc44 in ts::FileInputPlugin::start() libtsduck/plugins/plugins/tsFileInputPlugin.cpp:37:18
    #5 0x7fcfde2b3bd2 in ts::TSProcessor::start(ts::TSProcessorArgs const&) libtsduck/plugins/apps/tsTSProcessor.cpp:179:30
    #6 0x555c0ab44103 in MainCode(int, char**) tstools/tsp.cpp:147:17
    ...

  Uninitialized value was created by an allocation of 'st' in the stack frame of function '_ZN2ts6TSFile12openInternalEbRNS_6ReportE'
    #0 0x7fcfde24a0b0 in ts::TSFile::openInternal(bool, ts::Report&) libtsduck/dtv/transport/tsTSFile.cpp:196

SUMMARY: MemorySanitizer: use-of-uninitialized-value libtsduck/dtv/transport/tsTSFile.cpp:411:18 in ts::TSFile::seekCheck(ts::Report&)

Related issue (if any):
no related issue
Affected components:
TSDuck library
Brief description of the proposed changes:
This patch properly inits st (stat) structure

Hi @svlobanov
Thanks for the PR. It is always good to have all variable initialized, even when their initial value is (supposedly) never read and immediately overwritten. I consider this as good software engineering practices.
However, in that specific case, this is a false positive or, more precisely, the symptom of a bug in the libc. The struct stat parameter in the stat() and fstat() functions is an output parameter. It is supposed to be written by stat(), not read and certainly not read before being assigned by this function. Anyway, thanks, I will merge this one.

The struct stat parameter in the stat() and fstat() functions is an output parameter. It is supposed to be written by stat(), not read

My analysis was incorrect here. I carefully looked at the source line as reported by the sanitizer:
    struct stat st;
    if (::fstat(_fd, &st) < 0) {
        // error processing...
        return false;
    }
    _regular = S_ISREG(st.st_mode);  <== "uninitialized" error here

This is not an attempt of fstat() to read the structure before writing to it. This is the normal use of the returned value by the application.
I think we hit here a limitation of the memory sanitizer tool. Because, if it was true that st.st_mode was uninitialized, then it would be a huge bug in the libc and the kernel. This kind of thing would have been discovered a long time ago.
So, my hypothesis is the following: fstat() is a libc function (user mode) which calls the syscall stat() (kernel mode). The struct stat is written by stat() from kernel mode only. It is pretty obvious that the memory sanitizer cannot track kernel code. It can only track memory access from user mode. Therefore, it is unable to determine that st.st_mode was indeed initialized, but outside its control.
This is an interesting example because it demonstrates that the address sanitizer cannot, by design, track all memory accesses. This is not a bug which can be fixed in the tool. This is an intrinsic limitation. In that specific case, it can be hidden by pre-initializing the variable, as you did in the PR (and this is good engineering practice anyway). However, there may be other corner cases where the address sanitizer cannot detect valid memory accesses.
Therefore, I will remove the asan test from the continuous integration workflow. This workflow is binary, pass of fail. A failure there shall indicate a real error. We cannot risk to reject a push or PR because of a false positive in the sanitizer. This test is more a qualitative test which needs a human interpretation. I will create a separate workflow with manual trigger, just like the code coverage workflow you previously submitted.

Hi @lelegard. This particular PR was found by msan (memory sanitizer), but PR https://github.com/tsduck/tsduck/pull/1414 is about asan (address sanitizer). They are very different, use different methods to detect issues so let's separate this one and asan PR.
I will double check this issue regarding fstat(), maybe I use msan incorrectly (it requires many changes in build process to use msan).

@lelegard I have checked msan and fstat() with a very simple code. msan normally works with fstat() so I will continue investigate why msan generates an use-of-uninitialized-value in tsduck code (most probably because of incorrect compilation/linker flags)
My example (fstat_test2.cpp, fstat() is called only if argc>2):
#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
    struct stat st;
    int fd = ::open(argv[1], O_RDONLY);
    if(fd<0)
        return -1;

    if(argc>2)
        ::fstat(fd, &st);

    if(S_ISREG(st.st_mode))
        printf("File is a regular file\n");

    else
        printf("File is a something else\n");

    ::close(fd);

    return 0;
}

build: clang++ -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer -O0 -g3 fstat_test2.cpp
$ ./a.out a.out 1
File is a regular file

$ ./a.out a.out
==447677==WARNING: MemorySanitizer: use-of-uninitialized-value
    #0 0x5617d14349af in main /home/sergey/b/fstat/fstat_test2.cpp:16:8
    #1 0x7f4ec68461c9 in __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16
    #2 0x7f4ec6846284 in __libc_start_main csu/../csu/libc-start.c:360:3
    #3 0x5617d13ac2c0 in _start (/home/sergey/b/fstat/a.out+0x222c0) (BuildId: 44c27ce1e92f8a545e37904c0b1d75dc70407261)

  Uninitialized value was created by an allocation of 'st' in the stack frame of function 'main'
    #0 0x5617d14343c0 in main /home/sergey/b/fstat/fstat_test2.cpp:7

SUMMARY: MemorySanitizer: use-of-uninitialized-value /home/sergey/b/fstat/fstat_test2.cpp:16:8 in main
Exiting

So your example demonstrates that msan does not work with fstat() because your if(S_ISREG(st.st_mode)) is flagged as "use of uninitialized value" while it has been obviously initialized from kernel mode by the stat() syscall.
I do not think that this is a problem of compilation flags or a bug in msan. This is a very logical limitation of a userland tool. We just have to accept it.
This also mean that, while msan is a useful tool to track memory issues, just like asan or valgrind (my favorite), it is not fully deterministic and its success rate cannot be 100%, meaning that false positive are inevitable.
And there is no really efficient solution.
On one hand, pre-initializing all variables (as in this PR) ensures that all variables are preset in a deterministic state. This mutes the msan error.
However, on the other hand, pre-initializing all variables also partly kills the usefulness of msan. Let me explain this. In TSDuck or your code, we call a function which updates an output variable. Then we use that value. Let's assume that we have a bug and the function is not called in some cases but we still use the value. Without pre-initializing the variable (and assuming the function is not a syscall), msan will detect the uninitialized value. This is why it is useful. When we pre-initialize the variable, msan will never find the error.
So, there is no perfect solution, both have issues. However, I do prefer the pre-initialization because it has a deterministic behaviour. If it fails once, we detect and fix the bug. If it "works by accident" once, it will always "work by accident".
Concerning GitHub workflows, I consider the "continuous integration" one as a validation step. So, it must be reliable and produce a pass/fail status. No false positive is acceptable. Quality tests such as code coverage and memory analyzer, which produce a non-binary status (x% coverage) or which many produce false positive from time to time, shall not be in the CI critical path. They must be ready to be run when necessary, not all the time.

So your example demonstrates that msan does not work with fstat() because your if(S_ISREG(st.st_mode)) is flagged as "use of uninitialized value" while it has been obviously initialized from kernel mode by the stat() syscall.

It works, please check both outputs. When I run "./a.out a.out 1" argc=3, fstat() is executed and there is no msan error.
msan error happens when I run "./a.out a.out", in this case argc=2 and fstat() is not executed.
Also I've checked msan source code, they intercept fstat() that's why I continue investigating msan error in tsduck code

When I run "./a.out a.out 1" argc=3, fstat() is executed and there is no msan error.

Agreed. Sorry, I looked too quickly over this one.
I wonder how msan can trace memory access from kernel code. fstat() is a userland libc function but stat() is a syscall.

I wonder how msan can trace memory access from kernel code.

They use interceptor for this, it looks hacky but in real life it works (google needs it because they worry of chrome security).
https://github.com/llvm/llvm-project/blob/f02b7770bb04b88455804b371dba1f44a86b90da/compiler-rt/lib/msan/msan_interceptors.cpp#L755-L767

Concerning GitHub workflows, I consider the "continuous integration" one as a validation step. So, it must be reliable and produce a pass/fail status. No false positive is acceptable.

Regarding to gcc/llvm asan and llvm msan - both are bit accuracy so in ideal conditions there should be no false positive results, but in practice I can see two ways:

asan - issues in external libraries (asan reports in test-130 if use some versions of openssl so I had to disable it when run tests on asan build)
msan - calls like fstat() if llvm (google) guys not implemented interceptor. I still think that false positive report provided in this PR happens because I incorrectly use msan for tsduck.

I understand that you don't want to fight with potential false-positive sanitizers reports and implement workarounds/suppressions as a part of CI-process so I propose to use sanitizers during "fuzzing compaings" (when the fuzzing tests are implemented). Also it might be useful to run *san pipeline (even without fuzzing) from time to time (e.g. before "official" release)
As a reference, Wireshark project runs fuzz+asan (https://gitlab.com/wireshark/wireshark/-/blob/490d0514d97f0a24185a58d8bf8558290b4b5528/.gitlab-ci.yml ) by schedule: https://gitlab.com/wireshark/wireshark/-/pipeline_schedules


Reference constant

reference to constant is better

This change is

/lgtm

merging. coveral 504 error

@caiyixiang thanks!

Coverage increased (+0.05%) to 43.082% when pulling 3b152e6aa7a8c1153059e697a589ffde7d2db471 on caiyixiang:Reference_constant into 041f269770f08662c4dd45a22169ae4b6d458734 on kubernetes:master.


Add check-vertical-extents from nototools

Add "test-vertical-extents" (now called "check...") from nototools
Add vharfbuzz dependency

You need to feed it some text.


"Undo" functionality

Sending a message by mistake can be a pretty big goof since we enforce turn order and message limits, so we should let people undo.
In theory you might want a time limit on this or something, but we're working with trusted debaters so I wouldn't worry about abuse. It should be pretty easy to add an undo button which is only active when yours was the last turn.

Will attempt to do this, but may stop if it's taking me too long to get up-to-speed on scala and js

Okay I think it'll take me too much time to get up to speed with scala and general web development for this to feel worth it.

Working on this

@julianmichael Should the undo button populate the textarea with the last message that was sent?

@julianmichael should we make a separate todo for an optional timeout on how long people can press this button?

and should it be different for official and practice debates?

perhaps we want to allow arbitrary undos (by the moderator?)

Agree on populating with the message that got undone and having the timers. Official and practice debate distinction is more for record-keeping purposes and I think debate operations should be the same.


Support endpoints that needs to get before set

Implement getExisting on endpoint. This will reference the endpoint to get from, and will be handled by source.send.

Instead of building special support for this, more generic hooks are implemented instead. See #55.


Update meeting-policies-in-teams-general.md

Meeting reactions can be configured through the Teams admin center. It is not a PowerShell-only configuration parameter (anymore).

Docs Build status updates of commit 0fc3b68:
:x: Validation status: errors
Please follow instructions here which may help to resolve issue.

File
Status
Preview URL
Details

:x:Error

Details

[Error: RuningBuildFailed] Some unexpected errors happened when running build, please open a ticket in https://aka.ms/SiteHelp and include the error report for our team to troubleshoot

For more details, please refer to the build report.
If you see build warnings/errors with permission issues, it might be due to single sign-on (SSO) enabled on Microsoft's GitHub organizations. Please follow instructions here to re-authorize your GitHub account to Docs Build.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
Note: Your PR may contain errors or warnings or suggestions unrelated to the files you changed. This happens when external dependencies like GitHub alias, Microsoft alias, cross repo links are updated. Please use these instructions to resolve them.
For any questions, please:Try searching the docs.microsoft.com contributor guidesPost your question in the Docs support channel

Docs Build status updates of commit 0fc3b68:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

Teams/meeting-policies-in-teams-general.md
:white_check_mark:Succeeded

For more details, please refer to the build report.
Note: Broken links written as relative paths are included in the above build report. For broken links written as absolute paths or external URLs, see the broken link report.
For any questions, please:Try searching the docs.microsoft.com contributor guidesPost your question in the Docs support channel

@mkbond007 PR has been copyedited and is ready for final review, could you please check and merge? Thanks!


Objects are not stored by id and so not rendered by id

Just noticed objects are not stored by id and so not rendered by id. When I edit it back end, it get's deleted even from database.
This is how the items are stored in rails_admin backend and so rendered as listed here. However, rails instruction is to be rendered by id i.e. by Entity # such as Entity #394, Entity #395, Entity #396, ...

not sure if I'm missing something or this is a bug?

For the record label(e.g. Entity #397), see object_label_method.
For records being deleted, you'd better check behavior of ActiveRecord's dependent: destroy, which might not be what you're thinking of.

Sorry don't understand

If you need a support, use StackOverflow.


VersionedManyToManyField fields between different apps

When creating a VersionedManyToManyField between two versioned models of different Django apps, you might run into an error like
$ python manage.py check
CommandError: System check identified some issues:

ERRORS:
appa.modela_modelb: (fields.E336) The model is used as an intermediate model by 'appa.modela.modelb', but it does not have a foreign key to 'ModelA' or 'ModelB'.

In my special case, this is a ManyToMany relation from a model ModelA of app appa to a model ModelB of appb, but with the complication that the ManyToMany relation is specified not in ModelA, but in ModelA's abstract base class, which lives in appb.
The error occurs because your conversion of the to property to a string is ignorant of the app label. This pull request does fix this issue for me.

Hey Raphael, thanks for pointing this out.
I'll release a new version as soon as I find some time.


Updating containerd to the latest release

Containerd had a security release. This incorporates that
fixed version for the v1 branch

I wrote this because #90 from the bot doesn't work.


Annotated CLEAR output

Quant.txt needs to be annotated using the lookup table.

annotate_clear_output rule added!


The results of the 3dpw data set are different from  your paper

Thanks for your great work for removing jitter，but  some of the results in the paper confuse me.
The results of the first three lines of the 3dpw 3D format in the paper are as follows:

But when I tested, the input results were indeed the same as here on the homepage. I don’t know if the data set used for testing is different.

By the way, the 3dpw’s GT you provided also seems to have jitters and mutations. Is this normal?

Hi @jihg88 ,

The differences come from the different versions of code implementation. We encourage you to use the results from this repo, and you can develop better algorithms with fair comparisons.
For 3dpw GT, we did not process the original data. The jitter and mutations may be from the original IMU and monocular capture, which will not be perfect.

Thank you so much！


Token details

How could I find out how much the owner holds? For example I want to see if a specific mint owner holds 100% or 50% etc.

Need to grab all the token holders and determine the amount they hold relative to the total token supply.  SimpleHash API can do this for Shyft API

I also have this problem. I run it in the Chrome browser, and there are always some WebSocket connection errors: chunk-KCB7GPR7.js?v=ff63d6b4:8850 WebSocket connection to 'wss://go.getblock.io/*****' failed:


Rasterization with single value for all polygons

This flattens the config (so only one feature is created in a run) and adds the option to specify a value which is used for all polygons. Also removed hardcoded MASK_TIMELESS to allow rasterization of DATA_TIMELESS features.

Overall, I'm not sure if this PR is a step into the right direction. It seems that we might lose more by not being to rasterize the same data in multiple ways than gain by another "simplification" of the pipeline.

I agree, in our discussion beforehand this seemed like a good option, but now that the code is here it seems lackluster. I'll close this pull request and make a new one with the other option.


Elcomsoft.SQLPassword version 1.15.2215.6839

[ ] Have you signed the Contributor License Agreement?
[ ] Have you checked that there aren't other open pull requests for the same manifest update/change?
[ ] This PR only modifies one (1) manifest
[ ] Have you validated your manifest locally with winget validate --manifest <path>?
[ ] Have you tested your manifest locally with winget install --manifest <path>?
[ ] Does your manifest conform to the 1.4 schema?

Note: <path> is the name of the directory containing the manifest you're submitting.

Microsoft Reviewers: Open in CodeFlow

This application uses the wrong application name in its UAC prompt:

This application uses the wrong application name in its UAC prompt:

There are many installers with the name “password recovery” and this installs the SQL one.


java.lang.AbstractMethodError: io.github.spark_redshift_community.spark.redshift.RedshiftFileFormat.shouldPrefetchData(Lorg/apache/spark/sql/SparkSession;Lorg/apache/spark/sql/types/StructType;Lorg/apache/spark/sql/types/StructType;)Z

Hello,
I'm using EMR 5.28.0 with Spark 2.4.4 and Scala 2.11.12 and I get this error when I try to read a Redshift table. Does anyone know how to fix it please?
java.lang.AbstractMethodError: io.github.spark_redshift_community.spark.redshift.RedshiftFileFormat.shouldPrefetchData(Lorg/apache/spark/sql/SparkSession;Lorg/apache/spark/sql/types/StructType;Lorg/apache/spark/sql/types/StructType;)Z
I do the following:
spark-shell --jars RedshiftJDBC42-no-awssdk-<IP_ADDRESS>1.jar --packages io.github.spark-redshift-community:spark-redshift_2.11:4.0.0
sql("""CREATE temporary view users_rs (id INT, name STRING)
USING io.github.spark_redshift_community.spark.redshift
OPTIONS (
tempdir 's3a://mybucket/users/',
url 'jdbc:redshift://host:5439/database?user=&password=',
forward_spark_s3_credentials 'true',
serialization.format '1',
dbtable 'schema.users'
)
""")
sql("SELECT * FROM users_rs where id = 10000").show()
FYI I had found about this fork there: https://github.com/databricks/spark-redshift/issues/417 but unfortunately I get the same error.

I also tried launching Spark like that but get the same error:
spark-shell --jars RedshiftJDBC42-n-community:spark-redshift_2.11:4.0.0,org.apache.spark:spark-avro_2.11:2.4.4

Just ran into that as well but couldn't quite trace it all the way through to the root cause. I "fixed" this by adding a shouldPrefetchData method to RedshiftFileFormat.scala
def shouldPrefetchData(sparkSession: SparkSession,s1: StructType,s2: StructType): Boolean = false

Can't comment on possible side effects of this though. Need to find some time to see where  shouldPrefetchData comes from as I can't find it in spark sql sources

FYI this bug was fixed in EMR from 5.28.1 version.


PR: Change variableexplorer viewer collections name to iterables

See: https://github.com/spyder-ide/spyder/pull/5206#issuecomment-329018836
In #4557 collectionseditor.py was changed to collections.py (and that interferes with collections built-in)
This have to be rebased after #5206

Hello @rlaverde! Thanks for submitting the PR.

In the file spyder/plugins/variableexplorer/tests/test_collectioneditor.py, following are the PEP8 issues :

Line 34:80: E501 line too long (100 > 79 characters)
Line 89:80: E501 line too long (100 > 79 characters)

In the file spyder/plugins/variableexplorer/widgets/viewers/iterables.py, following are the PEP8 issues :

Line 456:9: E265 block comment should start with '# '
Line 528:9: E265 block comment should start with '# '
Line 1162:33: E127 continuation line over-indented for visual indent

Please rebase this one. Also, please rename test_collectionseditor.py to test_iterablesviewer.py

Also array.py interferes, I'm not sure if also dataframe.py object.py  or text.py intereferes too

Maybe we should add a prefix letter or something to each object?
sobject, sarray, sdataframe, scollection ? (for spyder?) or something similar

yes, or maybe v for viewer, or e for editor

Sure, lets use something like that and get rid of these problems for good. Maybe with underscore  to make it clearer?
ve_object
ve_array
ve_collections
ve = variable explorer ?
etc...
@ccordoba12 ?

Then we should remove the viewers module and leave things as they were before, i.e. collectionseditor.py, dataframeeditor.py, etc.

Closing in favor of #5263


Attribute leveling is glitchy

When i open attribute GUI first time in a game session (or after dimension travel) it shows that i have basic level for all attributes, even if i have leveled it up. And when i'm starting to max attributes again, it falsely spending levels that rolls back when XP bar is getting updated. It happens until i reach my actual attribute level, then it works well. It happens on my own WIP modpack.

By the way, please add config option to disable WISDOM "skill". Looks like it empowers all other skills, but it breaks gameplay if i want, for example, impossibly max BOXING skill with some One-Punch-Manual earned with NBT edit.

For that matter, can you make /commands for attribute and skill manipulation?

And please update wiki because it doesn't contain newer features.

Wasn't able to reproduce. Could be other mod interaction.
Use commands /setattribute <name_of_attribute> <value>

Manual editing of skills will not affect parent skills.

So where i can find list of all attributes? I failed to set medical aid level. I tried "medicalaid", "medical_aid", "aid" and much more.

They are here:
https://github.com/Foghrye4/Iblis/blob/2e03e329ff102f989fd90ec2634e93f9fed91ed7/src/main/java/iblis/player/SharedIblisAttributes.java#L46
For example for medical aid it is iblis.medical_aid.

Issue may be caused by JustEnoughIDs, VanillaFix or AttributeFix. Most likely JEIDs, which totally changes save system. But i'm not sure.


Support building UBI9 base container image

This adds support for UBI9 (Red Hat Universal Base Image 9). Tested registry.access.redhat.com/ubi9/ubi-minimal:9.5.

@ashwinb Let me know what you think. This is a temporary hack to get things going on our end. We can probably follow-up later to have a better approach.


Notification

[Enter feedback here]
How can we get a notification when this page is updated?
Specifically, when a security update has been released for Edge.

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

ID: 85b3847f-f5e0-539e-6d00-81887b0a0be8
Version Independent ID: 061f97c4-56ec-4064-9f70-7e3c1f789ac6
Content: Release notes for Microsoft Edge Security Updates
Content Source: edgeenterprise/microsoft-edge-relnotes-security.md
Product: microsoft-edge
GitHub Login: @dan-wesley
Microsoft Alias: leahtu

@bjohnrini Thank you for your feedback.  Currently, we do not have anything on our short-term roadmap regarding new features to notify users about documentation updates but I have passed your suggestions on to the team.


Runtime Summary Card Description Text Overflows Card

In the "Confirm Application and Summary Setup" section, the Runtime card does not truncate the description. As a result, the text flows outside of the card.

@catrobson @mindreeper2420 @dgutride
Any UX design we have for this scenario ? Please help me to find out here in this invision link
https://redhat.invisionapp.com/share/VGF1RF15J#/screens/286900865

@jyasveer For now, the text should just truncate so that it does not overflow beyond the constraints of the card.
My suggestion would be to utilize the 'More' functionality as in the Mission/Runtime cards, but I will verify with Brian.

@jyasveer please take a look at the finalized text content doc here. The shortened runtime descriptions are on page 6.

thanks @bdellasc

closing