[rubysrc2cpg] - Add support for the classed defined with Class.new

Is your feature request related to a problem? Please describe.
Add support for the following type of class definition.
MyClass = Class.new do
end

Describe the solution you'd like
Refer to this unit test - https://github.com/Privado-Inc/joern/blob/ruby-unit-tests/joern-cli/frontends/rubysrc2cpg/src/test/scala/io/joern/rubysrc2cpg/passes/ast/TypeDeclAstCreationPassTest.scala#L21-L30

If you search GitHub, it looks like there are repositories where this style of the class definition is being used.
https://github.com/search?q=Class.new+language%3ARuby&type=code

Status: We are unable to process this for now since some parser issues remain. For the above code, here is the parse tree:

The empty compoundStatement is causing issues in parsing. I will create a new issue and let @xavierpinho @karan-batavia look at it.

Status: We are unable to process this for now since some parser issues remain. For the above code, here is the parse tree:

The empty compoundStatement is causing issues in parsing. I will create a new issue and let @xavierpinho @karan-batavia look at it.

@tuxology That parsing tree is correct. What we need to do is treat Class.new differently in the AstCreator, i.e. it's a special case of a chainedInvocation. Here new really is a method on a constant named Class

Hmm, ok, this can be done this way as well. It means that while handling this in astForX, we check if method is new and compound statement in block is null, it is valid and we just safely ignore it? Sounds about right @xavierpinho ?

Hmm, ok, this can be done this way as well. It means that while handling this in astForX, we check if method is new and compound statement in block is null, it is valid and we just safely ignore it? Sounds about right @xavierpinho ?

Generally speaking, that's right -- since the do block is optional, we must take into account the cases where it's not given.
For this issue in particular, I think we could do even better and tackle anonymous classes here. For context, Class.new is Ruby's way for declaring anonymous classes. If the do block is omitted, it's just an empty class.
On a related note, we could be tempted (as the opening comment to this issue seems to suggest) to handle assignments to anonymous classes by creating named classes, as in: handling x = Class.new do ... end as if it were class x do ... end. But I reckon we should not, as we could end up with various distinct same-named classes.

On a related note, we could be tempted (as the opening comment to this issue seems to suggest) to handle assignments to anonymous classes by creating named classes, as in: handling x = Class.new do ... end as if it were class x do ... end. But I reckon we should not, as we could end up with various distinct same-named classes.

I guess we should keep it as is instead of creating named classes.

On a related note, we could be tempted (as the opening comment to this issue seems to suggest) to handle assignments to anonymous classes by creating named classes, as in: handling x = Class.new do ... end as if it were class x do ... end. But I reckon we should not, as we could end up with various distinct same-named classes.

@xavierpinho I am seeing in most cases in examples (https://github.com/joernio/joern/issues/3077#issuecomment-1628654542), assignments to anonymous classes effectively are used as class names only (though technically setting a class name to anonymous class is done by something like MyClass.name = NewClassName since everything is an object in ruby). So what do we propose? We keep them anonymous or we give the TypeDecl a name?
Another observation is that new as you said, is also a call with optional argument. That parameter can be a Class from with the new anonymous class is then derived. In this case, should we also create a call node for new? cc: @pandurangpatil

@xavierpinho I am seeing in most cases in examples (#3077 (comment)), assignments to anonymous classes effectively are used as class names only (though technically setting a class name to anonymous class is done by something like MyClass.name = NewClassName since everything is an object in ruby). So what do we propose? We keep them anonymous or we give the TypeDecl a name?

I lean more towards creating an "anonymous" TypeDecl for each such anonymous class instantiation, and refer to them in the assignments. That way we could handle re-definitions. For instance, in
x = Class.new(Y) ... end
x = Class.new ... end

we would create two TypeDecls, and replace these assignments' RHS with their instantiations. What do you think?

Another observation is that new as you said, is also a call with optional argument. That parameter can be a Class from with the new anonymous class is then derived. In this case, should we also create a call node for new? cc: @pandurangpatil

I think new in this case (i.e. Class.new) should be represented the same way we would represent new XXX in other languages, just because it's Did I get your question right?

I lean more towards creating an "anonymous" TypeDecl for each such anonymous class instantiation, and refer to them in the assignments. That way we could handle re-definitions. For instance, in

Technically I agree with what @xavierpinho is pointing at. However, I foresee type recovery challenges while handling this situation. So I think, we can try this approach of naming the Anonymous class with the variable name. We can change the approach if we encounter serious challenges with this approach while scanning the production repos.
cc: @tuxology

we would create two TypeDecls, and replace these assignments' RHS with their instantiations. What do you think?

I am inclined to just make these classes non-anonymous as @pandurangpatil suggests by assigning typedecl names based on what they are assigned to. However, we can skip the cases where these are just declared and not assigned to anything.  We can improve this if we start seeing issues. The only issues I anticipate are if a common name is used in 3 modules used in same app - for eg. Error = Class.new(StandardError). Suppose 3 modules do it and are used in same app.


Consul Adapter icon showing as NSM Adapter icon

Describe the issue
The Consul adapter shows the wrong icon. It shows an NSM icon, not a Consul icon.
To Fix
Insert a break; to close the Consul case statement -  https://github.com/layer5io/meshery/blob/d87db6398bc91445e037e254ca9e96e8e6fb598f/ui/components/MeshAdapterConfigComponent.js#L267.
And another break; to close the NSM case statement -
https://github.com/layer5io/meshery/blob/d87db6398bc91445e037e254ca9e96e8e6fb598f/ui/components/MeshAdapterConfigComponent.js#L270.

thanks, @subhamkrai. :)


Disable tags

I do not want users to be able to post images. Can I disable the desired tag in the options?

Alternatively, you could set "MarkupEscaped" to true to disable HTML and override the methods that handle the types that you want to disable to return null.


add guidance on merging changes with failing status checks

Added guidance on how to merge a PR with failing status checks

Unfortunately, if test do not pass on PR submission they are unlikely to pass once merge, blocking the release of the changes.

Any ideas on how we could resolve this? Some ideas:

The PR disables the failing status checks
The charm is updated manually on charmhub

Any ideas on how we could resolve this? Some ideas:

Could we have a "force release" command ? It could be a special keyword part of a commit message for example.

Any ideas on how we could resolve this? Some ideas:

Could we have a "force release" command ? It could be a special keyword part of a commit message for example.

That would not be easy to implement. The easiest thing is probably to do a manual release after running the charm tests locally in these cases


return []bytes from XML() instead of strings?

I wish the XML(), JSON(), etc formatters returned []byte slices instead of strings.
I need to convert the string to []byte for nearly everything I want to do: even for a simple ioutil.WriteFile.
You covert to string then i have to convert back to []byte !  Two costly operations, both in terms of time and memory usage, to do nothing.
If I need bytes I can easily use bytes() myself.
Very good package though. Love it despite the niggles.

I understand what you're saying, it is indeed a pain to have convert between string and []byte so often. I'll think about it tomorrow while on the train :)

This is what I implemented this morning:
Any of the JSON, CSV, XML and other export formats are now returning a (*Exportable, error) instead of (string, error). Only the Tabular and Markdown does return an *Exportable and no error because the gotabular library does not return any error.
This Exportable struct has four methods which are:

String() to get the exported content as a `string``
Bytes() to get the exported content as a []byte
WriteTo(io.Writer) to write the exported content to an io.Writer
WriteFile(string, os.FileMode) which delegates to ioutil.WriteFile(string, []byte, os.FileMode)

The Exportable struct does hold an underlying bytes.Buffer which has been filled by the library during the execution of the various export methods. This way you have a []byte directly by calling Bytes() (bytes.Buffer is just slicing the underlying byte array to the current buffer length), and handy methods to write the content to a io.writer or a file.
The String() method will be called automatically when trying to print the exported Dataset/Databook which is OK for debugging, and can be called directly if the caller really wants a string.

excellent thank you! and an incredibly fast response!


Add more MMU tests

We have a few, but add more MMU tests to really make sure our little methods work with the
endianness.

Closed by ec784e7ad05e195ec9a0070b1f98d916cf38a1c4


fix cross compilation

it's slow but it works (used for release v0.5.1)

but what problem does it solve? What this does not verify that it actually works with Go library on each platform. The release container runs a sample program with each artifact to confirm they are valid (had problems with compatibility before).


Allow peers to gossip news of a new config

This describes an algorithm for allowing peers in a cluster to share news of a new configuration, rather than hammering a configuration store with repeated requests.
A 2.x Refinery can load configurations remotely (via a url) but because of that, it can no longer listen for changes to the config -- it has to actively poll.
In a fleet of refineries, we want to allow them to take turns randomly checking for a changed config, and then when one is seen, report that information.
The refineries are configured to check config every T seconds. They actually create two timers:

A repeating ticker that fires every T seconds
A one-shot random timer in the range [TN/2, TN*2] where N is the number of nodes in the cluster.

Whenever a config is loaded (on startup or because of a hash disagreement)

It reads the config from the source location and calculates a hash, which it stores in its own state as the calculated hash
It loads the current hash from redis (or central service)  (if there is none, it uses 0)
If the calculated hash is not equal to the current hash, it writes the value to redis as the current hash

Whenever the one-shot timeout occurs:

It loads the config as above
It sets a new one-shot timeout within the specified range

Whenever the repeating timeout occurs:

It reads the current hash from redis
It compares to the calculated hash
If it's different, it loads the config (see above)

The result is that on average, the config is reloaded only once every T seconds from the source no matter how many nodes there are, but all the nodes are notified of changes

If someone wanted to manually change config for testing in a single pod would we then have a flag for only referencing the local store?

There are circumstances where every node needs a different config, and unless we also decide to support some form of layered config (load a common base and then apply local diffs) then we'd also have to have a flag that says "this is not shared".
One note -- this was the original intention in v2 and was dropped for lack of time - but it's documented in the metadata that it works this way. We need to either support it or fix the documentation.

Kicking this out of 2.1; it's too complex and risky in a world where no one is yet using URLs for config. Will revisit as we look at other config options.


Add ImageMap Checker

What to check in imageMaps:
1.) is every map referenced by at least one image?
2.) is every map-name referenced in an image present in the page?
3.) is every map-name unique?
4.) is at least one area-tag defined for every map?
5.) has every area-tag one non-empty href attribute?
6.) has every href a valid target (broken-links check)

closed with commit d2d918...


Position is not adjusted for remaining gallery images when a gallery image is deleted.

Position is not adjusted for remaining gallery images when a gallery image is deleted.

Working on it.

Update:
This is not needed for now.


[artifactory-ha] recreation for 5327 for conflicts with other PR

postgressql->postgresql

/assign @unguiculus

/retest

/retest

/lgtm

/hold remove


Remix server is crashing randomly when rebuilding

What version of Remix are you using?
1.8.1
Are all your remix dependencies & dev-dependencies using the same version?

[X] Yes

Steps to Reproduce
Have the server running edit some code, and randomly it crashes. It doesn't happen all the time

GET / 200 - - 570.251 ms
 info  rebuilding... (~ app/components/Nav.tsx)
 info  rebuilt (170ms)

/Users/thitemple/src/templecoding-site/node_modules/.pnpm/@remix-run+dev@1.18.1_@remix-run+serve@1.18.1/node_modules/@remix-run/dev/dist/devServer_unstable/proc.js:29
    throw new Error(`Failed to kill process ${pid}: ${error}`);
          ^

Error: Failed to kill process 17433: Error: Command failed with exit code 1: kill -9 17433
kill: 17433: No such process
    at kill (/Users/thitemple/src/templecoding-site/node_modules/.pnpm/@remix-run+dev@1.18.1_@remix-run+serve@1.18.1/node_modules/@remix-run/dev/dist/devServer_unstable/proc.js:29:11)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async Promise.all (index 1)
    at async Object.killtree (/Users/thitemple/src/templecoding-site/node_modules/.pnpm/@remix-run+dev@1.18.1_@remix-run+serve@1.18.1/node_modules/@remix-run/dev/dist/devServer_unstable/proc.js:43:3)
    at async onBuildFinish (/Users/thitemple/src/templecoding-site/node_modules/.pnpm/@remix-run+dev@1.18.1_@remix-run+serve@1.18.1/node_modules/@remix-run/dev/dist/devServer_unstable/index.js:236:13)

Node.js v18.16.0

It seams to be happening only when using v2_dev: true
Expected Behavior
To no crash and reload.
Actual Behavior
It is crashing enough times to be disruptive

I have the same issue on my Windows pc (node v18.16.0) but not on my Mac laptop (node v18.12.1)

Just tested the nightly build and get following error now:
Express server listening on port 3000
 info  rebuilding... (~ src\app\routes\users.$userNumber.freg.tsx)
 info  building...

 info  rebuilt (343ms)

Waiting for the debugger to disconnect...
C:\dev\temasoft\tt-admin-portal\node_modules\execa\lib\error.js:60
                error = new Error(message);
                        ^

Error: Command failed with exit code 1: taskkill /F /PID 14524
ERROR: The process with PID 14524 could not be terminated.
Reason: There is no running instance of the task.
    at makeError (C:\dev\temasoft\tt-admin-portal\node_modules\execa\lib\error.js:60:11)
    at handlePromise (C:\dev\temasoft\tt-admin-portal\node_modules\execa\index.js:118:26)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async kill (C:\dev\temasoft\tt-admin-portal\node_modules\@remix-run\dev\dist\devServer_unstable\proc.js:26:5)
    at async Promise.all (index 2)
    at async Object.killtree (C:\dev\temasoft\tt-admin-portal\node_modules\@remix-run\dev\dist\devServer_unstable\proc.js:48:3)
    at async onBuildFinish (C:\dev\temasoft\tt-admin-portal\node_modules\@remix-run\dev\dist\devServer_unstable\index.js:232:13) {
  shortMessage: 'Command failed with exit code 1: taskkill /F /PID 14524',
  command: 'taskkill /F /PID 14524',
  escapedCommand: 'taskkill "/F" "/PID" 14524',
  exitCode: 1,
  signal: undefined,
  signalDescription: undefined,
  stdout: '',
  stderr: 'ERROR: The process with PID 14524 could not be terminated.\r\n' +
    'Reason: There is no running instance of the task.\r',
  failed: true,
  timedOut: false,
  isCanceled: false,
  killed: false
}

Node.js v18.16.0
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
Waiting for the debugger to disconnect...
PS C:\dev\temasoft\tt-admin-portal>

Same problem in 1.19.1. When will this be resolved?

@hanayashiki could you share the error you are seeing in your terminal as well as what OS you are using?

@hanayashiki could you share the error you are seeing in your terminal as well as what OS you are using?

It seems if my editing leads to immediate crashing of the server, the watcher crashes too.
/Users/chenyuwang/pawpawmall/packages/store/src/root.tsx:83
const RemixDevTools = process.env.NODE_ENV === 'development' ? lazy(() => import("remix-development-tools")) : null;
                                                               ^
ReferenceError: lazy is not defined
    at Object.<anonymous> (/Users/chenyuwang/pawpawmall/packages/store/src/root.tsx:83:64)
    at Module._compile (node:internal/modules/cjs/loader:1256:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1310:10)
    at Object.require.extensions.<computed> [as .js] (/Users/chenyuwang/pawpawmall/node_modules/.pnpm/ts-node@10.9.1_@swc+core@1.3.78_@types+node@20.5.3_typescript@5.1.6/node_modules/ts-node/src/index.ts:1608:43)
    at Module.load (node:internal/modules/cjs/loader:1119:32)
    at Function.Module._load (node:internal/modules/cjs/loader:960:12)
    at Module.require (node:internal/modules/cjs/loader:1143:19)
    at require (node:internal/modules/cjs/helpers:110:18)
    at Object.<anonymous> (/Users/chenyuwang/pawpawmall/packages/store/server.ts:14:15)
    at Module._compile (node:internal/modules/cjs/loader:1256:14)
 ELIFECYCLE  Command failed with exit code 1.
 info  rebuilding... (~ src/root.tsx)

 info  rebuilt (484ms)

/Users/chenyuwang/pawpawmall/node_modules/.pnpm/pidtree@0.6.0/node_modules/pidtree/lib/pidtree.js:61
      callback(new Error('No matching pid found'));
               ^

Error: No matching pid found
    at /Users/chenyuwang/pawpawmall/node_modules/.pnpm/pidtree@0.6.0/node_modules/pidtree/lib/pidtree.js:61:16
    at /Users/chenyuwang/pawpawmall/node_modules/.pnpm/pidtree@0.6.0/node_modules/pidtree/lib/ps.js:40:7
    at ChildProcess.<anonymous> (/Users/chenyuwang/pawpawmall/node_modules/.pnpm/pidtree@0.6.0/node_modules/pidtree/lib/bin.js:57:5)

On the dev and v2 branch (release-next), this is already fixed.
You can try it out with the latest pre-release (npx upgrade-remix 2.0.0-pre.8). Fix will land in v2.


How many times can we use jhipster-uml in the same project?

Can we use jhipster-uml incrementally in the same project, or we have only one shot to get all the entities right from the beginning? I cannot start another entity generator that has association with existing entity, jhipster-uml gets stuck and never recovers.

There seems to be an issue with your setup, or a InquirerJS introduced a regression. What is your OS, version of Node, version of JHipster UML?

Hi Mathieu,
OS: Windows 10 running Git Bash 2.7.1 64 bit
node version: 5.4.0
JHipster-UML version: 1.6.1

As it is related to your other post, I'm closing this one (I will still try to reproduce this issue later today).


No python code

Hi,
I was just searching for something and came across your repo. You should not name your project something....something...python.. when there's no python code/file in it.
I came here looking for python code to interface it but just found C++ code

Hi @mridah ,
Sorry about my repository name.
This repo is POC to use Boost.Python to wrap moxa c++ libs, and not finish yet.
I suggest you follow this link Wrap C++ with Boost.Python and Makefile is this repo.


remove HadoopCheckpointStore

The HDFS support is not functional so remove it for now and there will be no hadoop dependencies in core lib. I will add it back to external-hdfs module once I get the hdfs storage working.

fixed in #1187


Drag and drop

Fixes #55
@kimroen passing this on to you for design review.
Things to tweak:

There is now a DropZoneView in the project list in IB. It is an IBDesignable, so go wild.
overlay alpha - this is two places because of the split view

The project list manages the left one https://github.com/EmberTown/ember-hearth/blob/6936d065ae06b81261d53d80ddf6ce2ca6def486/Ember Hearth/ProjectListController.swift#L62
The main splitViewController manages the right one (to cover both its subviews) https://github.com/EmberTown/ember-hearth/blob/6936d065ae06b81261d53d80ddf6ce2ca6def486/Ember Hearth/MainSplitViewController.swift#L40

It's alright now, I think. The animations could use some work, but the basic idea is there.

2am is not the time to try to figure out Core Animation.


Hemibrain CX paper - Hulse2020

Mentioned in Scheffer et al. (2020):
"A complete synaptic resolution connectome of the Drosophila melanogaster central complex" by Jayaraman et al.
[edit] Looks like it is probably this one from Jayaraman lab in bioRXiv
Hulse et al. (2020) A connectome of the Drosophila central complex reveals network motifs suitable for flexible navigation and context-dependent action selection
doi:10.1101/2<IP_ADDRESS>3955

May want to refer back to Appendix 1 Table 5 in Scheffer2020

variability for vdelta and hdelta neurons seems high even for individuals of the same type in the same organism - probably best not to add types for these until verified in another organism.


Dynamic import pragma configuration

Dynamic imports are transpiled to _import calls, which webpack doesn't recognize.
Similar to how a custom JSX pragma can be specified, a custom dynamic import pragma should be able to be specified, including a no-op pragma which leaves the import() syntax intact.

You have to specify target: "es2015" in your swcrc file


Import quick fix/code action includes<EMAIL_ADDRESS>

I have react-redux and @types/react-redux installed. If I try to get a quick fix for importing connect, then I end up with
import { connect } from "@types/react-redux";

Related: when I have an ../foo/index.ts and the like, TypeScript should not give an import for ../foo/index, it should give me an import for ../foo


Landon/not json 3

Added Basic Server functionality in C language, allowing for a client to send/receive a message to a server, and receive a response.

Is this already in the helloplus directory?

Different to the helloplus assignment, although I had initially pushed this code to my hello fork earlier. that was a bare-bones server that uses Window's WinSock headers to open open a port. I created a new set of programs, Client/ServerTest.c, along with a Server header and Server.c that allows for transmission of messages between the server and the Client as a skeleton for future use in creating server calls

Sure, but what I moved was your helloplus assignment. We can duplicate the server into another directory, I just wanted to make sure your helloplus was in the correct spot. I'd say we can place your code under the directory server/c
If you move that whole directory on your branch and then we merge my changes we shouldn't run into any conflicts


[Testing] Unsinged commit

Type of change

[x] Refactor
[ ] New feature
[ ] Bug fix
[ ] Optimization
[ ] Documentation Update

Description
Just a Test

/test ?

/test e2e-cluster-density-v2-single-node


ng update shows rc 7 version of the cli

Bug Report or Feature Request (mark with an x)
- [x ] bug report -> please search issues before submitting
- [ ] feature request

Command (mark with an x)
- [ ] new
- [ ] build
- [ ] serve
- [ ] test
- [ ] e2e
- [ ] generate
- [ ] add
- [x ] update
- [ ] lint
- [ ] xi18n
- [ ] run
- [ ] config
- [ ] help
- [ ] version
- [ ] doc

Repro steps

ng update on a project
Desired functionality

should show the latest version of the cli and not the rc7 version

Looks like the rc was mistakenly tagged as latest

Tags should be fixed now.

$ for p in $(jq --raw-output '.packages | keys | .[]' <.monorepo.json); do echo $p; npm dist-tag list $p; done
@angular-devkit/architect
latest: 0.8.4
next: 0.9.0-rc.1
@angular-devkit/architect-cli
latest: 0.8.4
next: 0.9.0-rc.1
@angular-devkit/build-angular
latest: 0.8.4
next: 0.9.0-rc.1
@angular-devkit/build-ng-packagr
latest: 0.8.4
next: 0.9.0-rc.1
@angular-devkit/build-optimizer
latest: 0.8.4
next: 0.9.0-rc.1
@angular-devkit/build-webpack
latest: 0.8.4
next: 0.9.0-rc.1
@angular-devkit/core
latest: 0.8.4
next: 7.0.0-rc.1
@angular-devkit/schematics
latest: 0.8.4
next: 7.0.0-rc.1
@angular-devkit/schematics-cli
latest: 0.8.4
next: 0.9.0-rc.1
@angular/cli
latest: 6.2.4
next: 7.0.0-rc.1
@angular/pwa
latest: 0.8.4
next: 0.9.0-rc.1
@ngtools/webpack
latest: 6.2.4
next: 7.0.0-rc.1
@schematics/angular
latest: 0.8.4
next: 7.0.0-rc.1
@schematics/schematics
latest: 0.8.4
next: 0.9.0-rc.1
@schematics/update
latest: 0.8.4
next: 0.9.0-rc.1


Allow "toString" to be disabled/bypassed in the Debug Console for JavaScript

If you evaluate ({toString: () => 'a'}) in the Debug Console (against nodejs), it will return a with a dropdown.
In other environments/runtimes, it's clearer that what is being returned is an Object which includes the toString property.
e.g. In the node debugger:
debug> ({toString: () => 'a'})
{ toString: [Function: toString] }

I have noticed in some other languages (e.g. Dart, Java), there is an option to toggle this behavior on & off.
I am currently using a library that has overridden toString in a way that this behavior is undesirable in the debugger.

(the bar will not be a full 20 upvotes for this, but interested to see how much support there is here)

This feature request is now a candidate for our backlog. The community has 60 days to upvote the issue. If it receives 20 upvotes we will move it to our backlog. If not, we will close it. To learn more about how we handle feature requests, please see our documentation.
Happy Coding!

:slightly_frowning_face: In the last 60 days, this feature request has received less than 20 community upvotes and we closed it. Still a big Thank You to you for taking the time to create this issue! To learn more about how we handle feature requests, please see our documentation.
Happy Coding!


npm warnings

Node versions tried: v6.2.2
npm versions tried: 3.9.5
OS: Microsoft Windows [version 6.1.7601]
npm WARN optional Skipping failed optional dependency /chokidar/fsevents:
npm WARN notsup Not compatible with your operating system or architecture<EMAIL_ADDRESS>

That's why it's optional.

Skipping failed optional dependency


Setup should do a full install

Continuing my testing. I don't have a Web server set up for my test so I just copied the setup EXE across. 1.0.1 is installed, but this is a newer version, 1.0.2, but it brings up a screen that says it is already installed suggesting that I repair the application install.  If it is a later version could it please just automatically install the application?
I often have scenarios where I get people to reinstall the whole setup if it's failing to update to newer or I need to force a major update

When I tried repair I get this, application not running at the time:

I think that may have been because I had the folder open in Windows Explorer

Hi there, the new setup logic is:
If the setup folder exists and is not empty, you'll get the "cancel/repair" dialog. If you hit repair, it will try and remove the old folder by closing any processes running inside it, renaming it, installing the new version, and then deleting the old folder. If there are any issues with the installation, it will roll back to the previous installation. If it can't rename the folder (eg. files are locked by a cmd.exe window or explorer) then it will fail.

That's going to be very confusing to our customers who don't have that kind of concept of repairing something when we are specifically asking them to install a new version - will end up with a lot of support calls.  Our customers are not very computer literate in that the idea of repairing rather than installing is going to cause a lot of confusion.  I'll check with management but I don't think I'll be allowed to use this if it displays that message for a new version upgrade. I'll try see if I can go back to your 3.0 version.  I think I may be able to use this for one of our applications that is internal but not anything that external customers are going to see sadly.

There is a fundamental difference between what the installer does and what an updater does. The installer wipes out and replaces the application directory entirely, while updates just replace the application files. This does often result in users running a new installer and accidentally deleting settings files and so forth.
If you would like to suggest some improved wording for that dialog - if you think the current "Repair?" is confusing, I would consider changing that?

+1 on this. I really need the Setup.exe to "just work" without any prompts. My customers are not going to know what to do if they get a dialog box. I am completely serious.
If this is something that can be addressed, and if there's a concern about wiping out config files living in the install directory (which my app does not do), I am thinking you could add some switch set at packaging time when building the setup.exe that says, yes, you can proceed with the repair without asking. Or there could be a metadata file in the installation directory that says "yes I do write to the install folder," and the repair process can act accordingly.

I have changed the dialog behavior to the following:
If the application is installed, but is an older version than what is currently being installed:

If the application is installed, but is a newer version than what is currently being installed:

If the application is the same version, or the version can not be determined:

I'm closing this issue for now, however if either of you feel unsatisfied with this solution please let me know and I'll consider re-opening!

That looks great. Will test that. Thanks!

I've changed my mind on the dialog and I think it's a good thing to have. In my previous comment I was still in the mindset that I would have to regularly ask my customers to re-run the Setup.exe to repair their installs, as was the case with Squirrel.Windows.
However I would like to ask if we can be provided an option to change the subtext of the action buttons. "Backup or save your work first" does not make sense for my application because it persists user data after repair and uninstall by design. Likewise I would like to modify the Repair subtext to additionally read "Your work will not be deleted."

Tested this with version 0.0.556. It works when updating from velopack-install to velopack-install. Squirrel install overwrites always show the default repair dialog:
[setup:23136] [09:38:26] [INFO] Reading bundle header...
[setup:23136] [09:38:26] [INFO] Bundle offset = 2531328, length = 128567120
[setup:23136] [09:38:26] [INFO] Loading bundle from embedded zip...
[setup:23136] [09:38:26] [INFO] Bundle loaded successfully.
[setup:23136] [09:38:26] [INFO] Reading package manifest...
[setup:23136] [09:38:26] [INFO] Package manifest loaded successfully.
[setup:23136] [09:38:26] [INFO]     Package ID: ProductName
[setup:23136] [09:38:26] [INFO]     Package Version: 24.3.1
[setup:23136] [09:38:26] [INFO]     Package Title: CompanyName ProductName
[setup:23136] [09:38:26] [INFO]     Package Authors: CompanyName
[setup:23136] [09:38:26] [INFO]     Package Description: CompanyName ProductName
[setup:23136] [09:38:26] [INFO]     Package Machine Architecture:
[setup:23136] [09:38:26] [INFO]     Package Runtime Dependencies:
[setup:23136] [09:38:26] [INFO] Attempting to open global system mutex: 'velopack-ProductName'
[setup:23136] [09:38:26] [INFO] Checking application pre-requisites...
[setup:23136] [09:38:26] [INFO] Determining install directory...
[setup:23136] [09:38:26] [INFO] Installation Directory: "C:\Users\User\AppData\Local\ProductName"
[setup:23136] [09:38:26] [INFO] There is 676.27 Gbit free space available at destination, this package requires 495.04 Mbit.
[setup:23136] [09:38:26] [WARN] Unable to find current manifest, checking for latest full package. (LEGACY MODE)
[setup:23136] [09:38:26] [DEBUG] (1) velopack::shared::util_windows: Scanning for packages in "C:\Users\User\AppData\Local\ProductName\packages"
[setup:23136] [09:38:26] [DEBUG] (1) velopack::shared::util_windows: Found package: C:\Users\User\AppData\Local\ProductName\packages\ProductName-23.4.1-full.nupkg
[setup:23136] [09:38:26] [DEBUG] (1) velopack::shared::bundle: Loading bundle from file 'C:\Users\User\AppData\Local\ProductName\packages\ProductName-23.4.1-full.nupkg'...

I'm going to be working on #60 and #68 soon, and I'm going to try and see if we can allow developer-provided translation overrides. In which case you can customise the dialog text to your heart's content. Therefore I am closing this issue


Add suggestion to import error messages

@xavijam
cc @saleiva in case i'm assigning incorrectly
Can we enhance import error messages to give fix suggestions?
Context
If user gets message like 'too many rows' error on import, Support can remind them of their account's row limit number & give them work-around:
‘either reduce rows to <500,000 or import your data as multiple files and merge them after import using sql'
Is there a way to put this info into the error message so they don't have to go through the extra step of emailing us?
Current result

I'd remove tje contact sales part as well
On Dec 31, 2015 8:56 PM, "Andrew W. Hill"<EMAIL_ADDRESS>wrote:

maybe @brittanymicek https://github.com/brittanymicek could whip up
another iteration of the sentence
—
Reply to this email directly or view it on GitHub
https://github.com/CartoDB/cartodb/issues/6343#issuecomment-168239247.

I'd remove tje contact sales part as well
On Dec 31, 2015 8:56 PM, "Andrew W. Hill"<EMAIL_ADDRESS>wrote:

maybe @brittanymicek https://github.com/brittanymicek could whip up
another iteration of the sentence
—
Reply to this email directly or view it on GitHub
https://github.com/CartoDB/cartodb/issues/6343#issuecomment-168239247.

Hey, what do we do here? I'm a bit concerned about these error messages because we're adding a lot of SaaS related-things which are not suitable for Open Source, but well, that's another issue.
This error can also appear for different row limits, not just 500K, and the way that these error messages are specified is quite "static" right now. Do you think that a link to the Terms of Service where this is specified could work?

It would be great if it could pull individual account limits...only thing about linking to Terms page is that some accounts don't follow that exactly. ie: some Basics getting 1,500,000 rows.

There has been no activity on this issue for more several months. We are closing it. If you think this still needs to be addressed please open a new issue.


Implement manual ordering for forums

Similar to method for execs? Maybe find a way to do it on site? jQuery UI?

decided to leave out any fancy graphical method and (at least for the time being) use the same as exec list: just input a number


s/RedisLabs/Redis/ in select places

Codecov Report

Merging #72 (563076d) into master (023ca5c) will not change coverage.
The diff coverage is 100.00%.

@@           Coverage Diff           @@
##           master      #72   +/-   ##
=======================================
  Coverage   83.00%   83.00%
=======================================
  Files          11       11
  Lines         600      600
=======================================
  Hits          498      498
  Misses        102      102

Impacted Files
Coverage Δ

test.py
94.20% <100.00%> (ø)

Continue to review full report at Codecov.

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


TypeError: Cannot read properties of undefined (reading 'url')

Hi! After the fix of #1 in version 1.0.1, I get another error while building. I think it is unrelated, and I cannot figure out if it is my problem or a bug in the plugin. In any case, could you help me in troubleshooting this, @photogabble?
Website repository
npm start

><EMAIL_ADDRESS>start
> ELEVENTY_ENV=development eleventy --serve --watch --incremental

[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [missing-digital-tools], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [importing-workflow], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [impromptu], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [cubbit-feature-requests], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [linuxplosion-cheat-sheet], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [vim-cheat-sheet], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [pandoc-cheat-sheet], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [exiftool-cheat-sheet], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [ffmpeg-cheat-sheet], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [git-cheat-sheet], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [server-setup-nextcloud-cheat-sheet], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [la-morte-di-ivan-ilic-compartimentalizzazione], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [typography], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [colors], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [la-morte-di-ivan-ilic-il-faut-que-jeunesse-se-passe], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [quit-and-switch], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [road-to-internet-freedom], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [knowledge-management], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [vim-resources], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [javascript-resources], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [python-resources], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [bash-resources], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [latex-resources], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [openstreetmap-resources], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [git-resources], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [images-resources], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [design-resources], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [data-sources], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [reading-is-enough], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [happiness], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [apps-linuxplosion], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [thoughts-representation], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [missing], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [music-learning], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [rent-everything-is-rent], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [academic-writing-with-pandoc], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [rise-of-the-runelords], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [universal-html], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [politics-ideas], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [delete-an-account], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [relationship-with-technology], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [rent-it-was-before-i-met-you], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [personal-storage-management-notes], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [backup-checklist], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [la-morte-di-ivan-ilic-straniamento], doesn't exist.
[@photogabble/wikilinks] ERROR WikiLink Embed found pointing to non-existent [a-rainy-day-in-new-york], doesn't exist.
[11ty] Problem writing Eleventy templates: (more in DEBUG output)
[11ty] 1. Having trouble rendering liquid template ./content/notes/public/tommi.space.md (via TemplateContentRenderError)
[11ty] 2. Cannot read properties of undefined (reading 'url'), file:./content/notes/public/tommi.space.md, line:136, col:11 (via RenderError)
[11ty] 3. Cannot read properties of undefined (reading 'url') (via TypeError)
[11ty]
[11ty] Original error stack trace: TypeError: Cannot read properties of undefined (reading 'url')
[11ty]     at Object.inline_wikilink (/home/tommi/tommi.space/node_modules/@photogabble/eleventy-plugin-interlinker/src/markdown-ext.js:84:29)
[11ty]     at Renderer.renderInline (/home/tommi/tommi.space/node_modules/markdown-it/lib/renderer.js:275:28)
[11ty]     at Renderer.render (/home/tommi/tommi.space/node_modules/markdown-it/lib/renderer.js:330:22)
[11ty]     at MarkdownIt.renderInline (/home/tommi/tommi.space/node_modules/markdown-it/lib/index.js:578:24)
[11ty]     at Object.<anonymous> (/home/tommi/tommi.space/.eleventy.js:169:13)
[11ty]     at Object.<anonymous> (/home/tommi/tommi.space/node_modules/@11ty/eleventy/src/BenchmarkGroup.js:32:26)
[11ty]     at Object.<anonymous> (/home/tommi/tommi.space/node_modules/@11ty/eleventy/src/Engines/Liquid.js:63:17)
[11ty]     at Filter.render (/home/tommi/tommi.space/node_modules/liquidjs/dist/liquid.node.cjs.js:1984:29)
[11ty]     at render.next (<anonymous>)
[11ty]     at toPromise (/home/tommi/tommi.space/node_modules/liquidjs/dist/liquid.node.cjs.js:451:32)
[11ty] Benchmark   2765ms  60% 14779× (Configuration) "slugify" JavaScript Function
[11ty] Copied 20 files / Wrote 0 files in 4.14 seconds (v2.0.1)

Full build log

Hi @carbontwelve! I was wondering if you had any chance to take a look to this, and if I can help you debug this in any way.
Thanks a lot!

@xplosionmind howdy, wow I should have got this fixed a long time ago! Apollogies for the delay. I will make time over the next week or so to get this solved.

I have pulled down your repository and re-installed this plugin and uncommented the lines in your 11ty config to use it. The project builds successfully (without the submodule installed) for me; it looks like in the months since you first had this issue its "fixed itself."
From the stack trace you posted I can see that it fell over trying to discover the url for./content/notes/public/tommi.space.md, which you have since moved elsewhere. I'll pull down an earlier version of your repository from April this year to ultimatly find out what caused it to fail in the first place.

As an aside, when I install the scripts submodule for your repository and try to build the project I get the following:
[11ty] require() of ES Module<EMAIL_ADDRESS>from /Users/simon/Code/tinkering/tommi.space/scripts/scripts.11tydata.js not supported.
[11ty] Instead change the require of index.js in /Users/simon/Code/tinkering/tommi.space/scripts/scripts.11tydata.js to a dynamic import() which is available in all CommonJS modules. (via Error)

Thanks so much for your time and your efforts, @carbontwelve!
I am sorry my repository is a mess… in the weekend I plan to get to that and assist you in the troubleshooting.
Forget about the scripts submodule… I haven’t properly maintained it in a while…

Hi! I am not having any issues of this king by running the plugin, now, so I am closing this issue.


Query about Loudness and pulse rate

I think every bat should have its own pulse rate and loudness. Here only one loudness and pulse rate is there.
And that loudness should change Anew = αAold and r = r[1 - exp(-γt)]

This BA implementation is based on original publication. Anyway, you can propose your new variant.
You can also use more robust framework: https://github.com/NiaOrg/NiaPy

Can you explain what def init_bat does actually? I don't seem to see this one tally according to the original pseudo-code. Also for  def simplebounds where does val comes from? What is val? Its not fitness value right? I hope you can enlighten me on this matter. Thanks!

hi, can you explain what the final output is about? what does it denote. I am not able to understand what the final print statement is outputting. Is it minimizing the given function?


[membehavior] Fix base memory behavior/releasing of Load/Store for ownership

load, store in ossa can have side-effects and stores can release. Specifically:
Memory Behavior

Load: unqualified, trivial, take have a read side-effect, but copy retains so
has side-effects.

Store: unqualified, trivial, init may write but assign releases so it may have
side-effects.

Release Behavior

Load: No changes.

Store: May release if store has assign as an ownership qualifier.

@swift-ci test

I think there maybe more that we need to do here. Specifically:
This suggests we may want load [take] to be RW if we do not separate the notion of initialization from memory read/write:
https://github.com/apple/swift/blob/5983960f8cb5ec8bae2050ce7160bbc7aba0d11a/lib/SILOptimizer/Analysis/MemoryBehavior.cpp#L246
It is unclear to me if we want this to be may have side effects if we have release.
https://github.com/apple/swift/blob/5983960f8cb5ec8bae2050ce7160bbc7aba0d11a/lib/SILOptimizer/Analysis/MemoryBehavior.cpp#L268
@eeckstein would love your thoughts.

The code in side effect analysis is also inconsistent here where load is not updated to handle load [take] correctly:
https://github.com/apple/swift/blob/5983960f8cb5ec8bae2050ce7160bbc7aba0d11a/lib/SILOptimizer/Analysis/SideEffectAnalysis.cpp#L545
assuming that we want it to be RW.

Also load/store need update for load [copy]/store [assign] to be treated as retain/releasing.

Build failed
Swift Test Linux Platform
Git Sha - 520b061ead1512917231b037865d6bca16c0d5fa

This suggests we may want load [take] to be RW if we do not separate the notion of initialization from memory read/write:

AFAICT, MemoryBehaviorVisitor::visitLoadInst is correct.

It is unclear to me if we want this to be may have side effects if we have release.

Yes, in case of store [assign], it should be MayHaveSideEffects. Also this is wrong in case of store [assign]:
  if (!mayAlias(SI->getDest()))
    return MemBehavior::None;

because even if the V does not alias the destination address, the destructor of the re-assigned object might write to V.

@eeckstein did another round. Put in your suggestions. Any thoughts on how to test this?

@swift-ci test

Build failed
Swift Test OS X Platform
Git Sha - fcf15851e24f36793c83e62a68ce989043db0c77

@eeckstein I fixed your suggestion.

@swift-ci smoke test

@gottesmm It is very important to run the benchmarks for such changes

@swift-ci benchmark

Sorry, I should have clarified a few things.
There are 2 APIs:
bool SILInstruction::mayReadFromMemory()
bool SILInstruction::mayWriteToMemory()
bool SILInstruction::mayReadOrWriteMemory()
bool SILInstruction::mayHaveSideEffects()

and
bool AliasAnalysis::mayReadFromMemory(SILInstruction *Inst, SILValue V)
bool AliasAnalysis::mayWriteToMemory(SILInstruction *Inst, SILValue V)
bool AliasAnalysis::mayReadOrWriteMemory(SILInstruction *Inst, SILValue V)

The first API is implemented in SILInstruction::getMemoryBehavior() and for most instructions - including retain instructions - it uses the value from SILNodes.def. It is more conservative than the AliasAnalysis API and it treats retain instructions as general reading/writing/sideeffect instructions.
The AliasAnalysis API is more precise, because it returns the memory effect in respect to a given address V: does the instruction read or write from/to that address? This API is implemented with the MemoryBehaviorVisitor.
It returns false for retain instructions (https://github.com/apple/swift/blob/f677d1971cb636ad8d53295ad6e561ae763b5d4a/lib/SILOptimizer/Analysis/MemoryBehavior.cpp#L224). And that makes sense because there cannot be an address V which points to the reference count field of an object.
We could add SILInstruction::mayRetain(), but so far it was not needed.
It does not make sense to handle retain behavior in the AliasAnalysis API, because what does that even mean: mayRetain in respect to a given address V? In fact, we had something like this which I removed recently, because it was confusing and not used anyway (https://github.com/apple/swift/pull/34252/commits/aced5c74df5804b7c567a1ae9cf68b7e9cb336ee).

@eeckstein I'll revert this in a PR and look at the perf.

Sorry, I should have clarified a few things.
There are 2 APIs:
bool SILInstruction::mayReadFromMemory()
bool SILInstruction::mayWriteToMemory()
bool SILInstruction::mayReadOrWriteMemory()
bool SILInstruction::mayHaveSideEffects()

and
bool AliasAnalysis::mayReadFromMemory(SILInstruction *Inst, SILValue V)
bool AliasAnalysis::mayWriteToMemory(SILInstruction *Inst, SILValue V)
bool AliasAnalysis::mayReadOrWriteMemory(SILInstruction *Inst, SILValue V)

The first API is implemented in SILInstruction::getMemoryBehavior() and for most instructions - including retain instructions - it uses the value from SILNodes.def. It is more conservative than the AliasAnalysis API and it treats retain instructions as general reading/writing/sideeffect instructions.
The AliasAnalysis API is more precise, because it returns the memory effect in respect to a given address V: does the instruction read or write from/to that address? This API is implemented with the MemoryBehaviorVisitor.
It returns false for retain instructions (
https://github.com/apple/swift/blob/f677d1971cb636ad8d53295ad6e561ae763b5d4a/lib/SILOptimizer/Analysis/MemoryBehavior.cpp#L224
). And that makes sense because there cannot be an address V which points to the reference count field of an object.
We could add SILInstruction::mayRetain(), but so far it was not needed.
It does not make sense to handle retain behavior in the AliasAnalysis API, because what does that even mean: mayRetain in respect to a given address V? In fact, we had something like this which I removed recently, because it was confusing and not used anyway (aced5c7).

@eeckstein @gottesmm this is a good explanation, but none of this is specified in MemBehavior's definition:
https://github.com/apple/swift/blob/67608e044bca00275bf4a12216a6f8f2951826b1/include/swift/SIL/SILInstruction.h#L374
Nor is it specified on the relevant top level APIs:
bool SILInstruction::mayXXX()
bool AliasAnalysis::mayXXX()

@atrick I don't see anything substantial missing in the documentation of these APIs. Of course, it still can be improved (e.g. mention how the SILInstruction API handles retain instructions), but that could be said about all of our code base. In my previous comment I mainly clarified how these APIs are implemented.
But anyone is welcome to improve the documentation.


Gridstack slow rendering in Internet Explorer.

First of all congratulations and thanks for the authors of GridStack plugin, its awesome!!
I am using nested grids to make a form and I noticed quiet slow performance in IE ( I am using Ver. 11).
I have added the  jsFiddle.
The page loads relatively fast in FireFox and Chrome as compared to IE.

IMHO we should not put much effort in improving performance on absolutely outdated browsers. Even MS discontinued it. It works but for full performance go to Chrome, Firefox or Edge.

@kamran924 In the upcoming version 1, there will be better performance when dragging widgets. However, we have some limitations. For now, the full widget, including its contents, is rendered when dragging. If you have many widgets or nests, that can put a strain on the browser. Even on a great laptop running Chrome, you'll likely experience slowness in those situations.
I'd recommend breaking up the form into more sections and only display some sections at one time. As much as I hate to say this, @ZoolWay is right - I'll work on overall efficiencies, but it's difficult to apply performance boosts to get IE's rendering up to snuff with the rest of the gang.


LessIOSecurityManager is depending on Log4J

I just started using LessIOSecurityManager for jmxtrans. The concept seems promising and I hope to improve our unit tests (our unit tests really need some love). Only issue is the dependency on log4j, which generate a log of crap in the build logs as it conflicts with our use of slf4j / logback.
I'm tempted to copy the code of LessIOSecurityManager directly in our project, but that seems like an ugly solution. Or for the project and reduce it to a minimal subset of features / dependencies, but that does not seem much better.
Is there any chance that you would extract a minimal artifact that could be more easily reused in other projects?

You can redirect the log4j output to slf4j/logback by replacing the log4j jar with log4j-over-slf4j, as described on this page: http://www.slf4j.org/legacy.html

You're right, I forgot about that. Still, do you think there is any chance to get a version of kawala-testing with a more minimal view in term of packaging and dependencies? I would still be interested...

I agree that Commons Logging and a direct dependency on Log4J isn't the optimal choice for a library these days, but it's fairly common in projects that have been around for a while, and we use it heavily internally. TBH it's unlikely to change in the near future.
This problem comes up so often that SLF4J made it a priority to provide a painless workaround that has almost no performance impact.

Not many chance of a standalone version of LesIOSecurityManager in the near future, good workarounds existing, as the OP, I'll close this for the moment...


More reasonable estimate for wavelength range

Fixes #29

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Comparison is base (9662e94) 65.48% compared to head (74d8cc4) 66.11%.

Additional details and impacted files
@@            Coverage Diff             @@
##             main      #30      +/-   ##
==========================================
+ Coverage   65.48%   66.11%   +0.62%
==========================================
  Files          14       14
  Lines         649      661      +12
==========================================
+ Hits          425      437      +12
  Misses        224      224

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


What's the difference between PFCN and SOLOv2 on dynamic conv?

From what we can saw from code, the thingsGenerator and stuffGenerator actually doesn't need Dynamic conv (correct me if am wrong).

As u can see, the conv acutally doesn't need a dynamic weights, but normalized when init:
self.embed_extractor = Conv2d(input_channels, conv_dims, kernel_size=1)
        for layer in [self.embed_extractor]:
            nn.init.normal_(layer.weight, mean=0, std=0.01)
            if layer.bias is not None:
                nn.init.constant_(layer.bias, 0)

I think this is different then SOLOV2's dynamic conv, they wil output kernel_weights and construct a new conv, in code it like this:
kernel_preds = kernel_preds.view(N, I, 1, 1)
        seg_preds = F.conv2d(seg_preds, kernel_preds,
                             stride=1).squeeze(0).sigmoid()

I want ask, why this is different? which is more advanced?

Actually, they perform so-called dynamic conv in different manners. You can assume that we use torch.matmul to replace the traditional F.con2d for faster inference. Of course, you can use F.con2d(x, meta_weight, stride=1) to get a same result.

@yanwei-li You are right, actually solov2's F.conv2d can replaced with torch.matmul since their pad and stride and kernel size are 1.
In yours the differences is the weights learned not predicted.
Does there a better one between them in terms of final accuracy? Also, did u guys compare AP with SOLOv2 in terms of instances part only? I not saw such comparsion in paper.

Hi, I'm not sure the meaning of "the weights learned not predicted". And we also use the convolution (self.embed_extractor in the screen caption) to predict parameters. For the reason that the aim of this paper is to further unify the representation of thing and stuff, rather than aim to solve a single one of them. So, we did not compare with SOLO on each single task.

@yanwei-li You don't predict the weights of conv, does u? Instead, you just learned the params which different than SOLO, I just want to know what's the impact in terms of final accuracy?

Hi, the weight of conv is actually meta_weight here.

@yanwei-li OK, i get it, you just using matmul replaced F.conv2d.


getWorkoutRouteSamples fails to retrieve complete route for activities with intervals

Describe the bug
Apple introduced WorkoutKit (https://developer.apple.com/documentation/workoutkit) in iOS 17 to allow users to have pre-programmed workouts (e.g. intervals for running) on their Apple Watch Fitness app. Since this is released, we see that activities using intervals fail to be transmitted completely to our app using react-native-health. The workout route is either not available or only in parts. After some investigation and debugging, we found the attached (screenshot) error:
Illegal callback invocation from native module. This callback type only permits a single invocation from native code.

[...]

__64-[RCTAppleHealthKit(Methods_Workout) workout_getRoute:callback:]_block_invoke_2

__82-[RCTAppleHealthKit(Queries) fetchWorkoutRoute:predicate:anchor:limit:completion:]_block_invoke_2

[...]

To Reproduce
Steps to reproduce the behavior:

Record a running activity with intervals (Outdoor Run > Custom)
Sync data from HealthKit using getAnchoredWorkouts and getWorkoutRouteSamples in Debug Mode
Error occurs and/or route data returned is not complete

Expected behavior
This behavior does not occur for workouts not using any pre-programmed intervals (e.g. Outdoor Run, Open Goal). It is expected that the intervals do not change how the route data is received
Screenshots

Smartphone:

Device: iPhone 11 & Apple Watch Series 7
OS: iOS 18.1 & WatchOS 11
Version 1.18.0

Additional context
The workout shows complete data when looking at it in the iOS Fitness app.

I have a similar issue where I get gaps in workoutRoute data. This only happens when it is a structured workout.


Feature/display footer

Close #980 . Display a disclaimer, logos and privacy statement, cf. Toontjehoger. The styling may still need to be adjusted, but leaving this for later.

Thanks for the style improvements!


Switch to float features before it's too late

@lintool @LuchenTan
Most LTR features are floats anyway, so we should switch to just returning an array of floats, rather than ints.  Let's do it now, rather than mess around later.

Fixed commit b5ab1cb735e78c1b5709a80958eda292d8f788d4


Rename Job and Daemonset to Scope: Node or Cluster

Is this a BUG REPORT or FEATURE REQUEST?:
Feature Request
What happened:
Currently Sonobuoy plugins describe themselves as DaemonSet or Job. This unnecessarily exposes implementation details to users, while also obscuring the actual function of that
What you expected to happen:
Instead of specifying a Driver like we do now, it would make more sense for the use to declare where they want their tests to run. We're looking at replacing the underlying Daemonset implementation already ( #255 ), so this would make that less confusing.
How to reproduce it (as minimally and precisely as possible):
I propose
Scope: Node or Scope: Cluster for jobs that want to run on every node (systemd logs) or just once per cluster (e2e). Future scopes could include Namespace or by taint or something.

💯

For now I think we are going to leave this naming as-is. I don't think this exposes an implementation detail that is unclear or secret in any way; the user is wanting to test a k8s cluster and we are just using k8s nomenclature (which presents a clear world-view to the user and they can predict what will happen when they run a job/daemonset plugin)


order of coordinates in posList

I have tried to set up a spatial query for a CSW server, once with a gml:Point (<gml:pos srsDimension='2'>48.1537 16.2825 </gml:pos>) and once with a gml:Polygon (e.g., <gml:posList srsDimension='2'>48.1537 16.2825 48.1537 16.3759  48.2201 16.3759 48.2201 16.2825 48.1537 16.2825</gml:posList>) geometry. I have assigned the same spatial reference system to both (EPSG:4326), which prescribes the order of the points to be latitude first, longitude second. However, the returned results differ completely in space, where the point query was right, but the polygon query was wrong.
Having a look at the code, which parses GML in pyCSW it turns out that gml:Point/gml:pos are differently parsed than gml:Polygons/gml:posList. The following lines seem wrong to me:
https://github.com/geopython/pycsw/blob/b5a657e1e0bc7fbfb327d5635d4bdfc9d15c6f5d/pycsw/ogc/gml/gml3.py#L50-L51.
Assuming axisorder='xy' points are parsed latitude first, longitude second, which is okay. But in the two lines above xlist are the longitudes and ylist the latitudes, which is wrong. The following should solve the problem:
xlist = tmp[::2]
ylist = tmp[1::2]

No matter what geometry parsing is modified, at least they should be consistent. I hope I did not oversee something or got this wrong, thanks!

Thanks for the report.  Are you able to provide a test case so I can reproduce?  The below examples are some tests against your snippet above.
>>> from pycsw.ogc.gml.gml3 import _poslist2wkt
>>> _poslist2wkt('48.1537 16.2825 48.1537 16.3759 48.2201 16.3759 48.2201 16.2825 48.1537 16.2825', 'xy')
'16.2825 48.1537, 16.3759 48.1537, 16.3759 48.2201, 16.2825 48.2201, 16.2825 48.1537'
>>> _poslist2wkt('48.1537 16.2825 48.1537 16.3759 48.2201 16.3759 48.2201 16.2825 48.1537 16.2825', 'yx')
'48.1537 16.2825, 48.1537 16.3759, 48.2201 16.3759, 48.2201 16.2825, 48.1537 16.2825'

I hope I got you right in setting up a test case.
I am sure there is a better way how to set this up. The print commands yield the following result:
query_spatial(test,'POINT(16.2825 48.1537)','intersects','false')
query_spatial(test,'POLYGON((48.1537 16.2825))','intersects','false')

This shows that the coordinates get swapped in case for the point (which are the coordinates I want in Lon/Lat), but not for the polygon.
Please let me know if you need further information.

query_spatial(test,'POLYGON((48.1537 16.2825))','intersects','false')

Is this a valid polygon?  We could probably add a test in the code to ensure the minimum number of tuples (2 for line, 5 for polygon)?

I did not even think about the validity of the polygon in this case, since I wanted to demonstrate what happens when specifying the same input, i.e. 2 coordinates. The polygon is not valid, because it must contain at least 4 tuples (triangle +  first point) to be valid according to GML standards, I think. I am pretty sure that PostGIS (if used) will raise an error anyway later on. But I agree, a test at this place would be suitable to check if the points follow a specific standard.

Further testing, a valid GetRecords request would be:
<csw:GetRecords
	xmlns:csw="http://www.opengis.net/cat/csw/2.0.2"
	xmlns:gml="http://www.opengis.net/gml"
	xmlns:ogc="http://www.opengis.net/ogc"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:ows="http://www.opengis.net/ows" outputSchema="http://www.opengis.net/cat/csw/2.0.2"
                  outputFormat="application/xml" version="2.0.2" service="CSW" resultType="results" maxRecords="1000"
                  xsi:schemaLocation="http://www.opengis.net/cat/csw/2.0.2 http://schemas.opengis.net/csw/2.0.2/CSW-discovery.xsd">
	<csw:Query typeNames="csw:Record">
		<csw:ElementSetName>full</csw:ElementSetName>
		<csw:Constraint version="1.1.0">
			<ogc:Filter>
				<ogc:Intersects>
					<ogc:PropertyName>ows:BoundingBox</ogc:PropertyName>
					<gml:Polygon srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
						<gml:exterior>
							<gml:LinearRing>
								<gml:posList srsDimension="2">48.1537 16.2825</gml:posList>
							</gml:LinearRing>
						</gml:exterior>
					</gml:Polygon>
				</ogc:Intersects>
			</ogc:Filter>
		</csw:Constraint>
	</csw:Query>
</csw:GetRecords>

which returns accordingly.  I'll add a check as discussed.

@tomkralidis : Many thanks!

Fixed in master and 2.4 branch.


Inline validation-rules object causes constant invalidation of previous rules.

Reproduction
https://formkit.link/b326aedb461d5c97e891973cf84f0340
Describe the bug
I'm trying to create a form that contains an input with custom validation. I used the example code from here:
https://formkit.com/essentials/validation#debounce-milli#debounce-milli
The submit button should be disabled until the form is valid. I used the example code from her:
https://formkit.com/inputs/form#validity-state#validity-state
When I open the Chrome Dev tools I get the repeating error
"Uncaught TypeError: Cannot perform 'get' on a proxy that has been revoked at index.mjs:169:18"
Is it my fault or a bug?
Thank you in advance and Merry Christmas to you all!
Environment
• OS: Windows 10 Pro
• Browser chrome
• Version 108

Great question — it does look like there was a regression in beta 12 — we added support for dynamic validation rules via the validation-rules prop — unfortunately, when you define objects "inline" (:prop="{ someValue }") Vue sees these as "new" prop values on every iteration (since {} !== {} in JavaScript). This means whenever you type and a re-render is performed FormKit is invalidating the previous rules. Doh!
The workaround is easy enough — you just define your rules object in your setup block: https://formkit.link/478716df589caa9a1622f9b91eb295ed
However, I'm going to mark this as a bug so we can make sure this stumbling block doesn't occur in the future.

Thank you, Justin! It works 💪
That was a very nice experience for my first answered Github issue ever 😄

Great! I'll leave this open so we’ll remember to work on making this better.

This is fixed in release/beta.13 — will be published in the next release.


DB Rollback action needs to be updated

Description
The db tag rollback doesn't seems like it works anymore, only the rollback using a specific number works
what doesn't work:
./gradlew liquibaseUpdateToTag -PliquibaseCommandValue=add-specimen_type_id-to-test_event
what works:
./gradlew liquibaseRollbackCount -PliquibaseCommandValue=2 I am assuming this issue affects our ability to rollback azure infrastructure since our github action uses the tag system
Steps to reproduce
If applicable, add screenshots to help explain your problem.

try to rollback your local db by running the commands mentioned above
notice that command using the tag "succeeds" but it doesn't roll back the DB (check the databasechangelog table)
notice that command using the count succeeds but it does roll back the DB (check the databasechangelog table)

Expected behavior
the command using the tag should work
Additional context
Slack convo

PR convo

Update; there are two fixes required here.

Update the readme to say the correct command (rollbackDB instead of updateToTag)
Fix Docker rollback to run with correct user permissions

Real fix here is to properly run the Dockerfile with the correct permissions for the action - that's what this ticket tracks.


Use WebAssembly.compileStreaming for WebAssembly modules

I was reading the docs, and I noticed this example as a wasm import: https://esm.sh/@dqbd/tiktoken@1.0.3/tiktoken_bg.wasm?module
That code first fetches the wasm code, and then it compiles it. This can be done more efficiently, by compiling the wasm code while it is being downloaded:
export default await WebAssembly.compileStreaming(fetch("https://esm.sh/@dqbd/tiktoken@1.0.3/tiktoken_bg.wasm"));

@nicolo-ribaudo good to know! would you like to create a PR? or i will do it later, thanks

@nicolo-ribaudo good to know! would you like to create a PR? or i will do it later, thanks


replace annotation reference in template

Kevin remarked that there is a reference to annotations in quickstart. This needs to be replaced with reference to the geneses pipeline.

#405 not fixes this


Add new events for DO full access

Story details: https://app.clubhouse.io/cartoteam/story/151531

But before merging this you should add the new events to criterion

I know, on it... :)
thanks for the prompt review! expect me to bother you  with the criterion part pretty soon


python312Packages.tencentcloud-sdk-python: 3.0.1150 -> 3.0.1151

Diff: https://github.com/TencentCloud/tencentcloud-sdk-python/compare/refs/tags/3.0.1150...3.0.1151
Changelog: https://github.com/TencentCloud/tencentcloud-sdk-python/blob/3.0.1151/CHANGELOG.md
Description of changes

Things done

Built on platform(s)

[ ] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)

[ ] sandbox = relaxed
[ ] sandbox = true

[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
24.05 Release Notes (or backporting 23.05 and 23.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[ ] Fits CONTRIBUTING.md.

Add a :+1: reaction to pull requests you find important.

Result of nixpkgs-review pr 313323 run on x86_64-linux 1

4 packages built:

python311Packages.tencentcloud-sdk-python
python311Packages.tencentcloud-sdk-python.dist
python312Packages.tencentcloud-sdk-python
python312Packages.tencentcloud-sdk-python.dist


[Feature] Auto Daily Ahead

Is your feature request related to a problem? Please describe.
The user loses dailies if bot goes down
Describe the solution you'd like
Basically the idea would be to use the DB scheduler and update a single JSON file or have a value in a table that gets updated. Then when the bot comes back online it checks that value, and depending on that value it will forward everyone's daily or leave it be.
Describe alternatives you've considered
Manually update the DB each time via the eval/DB kits commands.
Additional context
N/A

This is clever idea. Love it.
We'll put this in the roadmap!


First Community Call

We will be starting biweekly community calls for all projects and developers interested in using CosmWasm somehow, or just people who are curious what we are up to. They are inspired by the IBC and Regen biweekly calls and will be 30-60 minutes in length (depending on community input)
The first call with be Tuesday, March 10th at 10am CET (9am UTC), with the intention to be an accessible time from England to Japan. Zoom link: https://zoom.us/j/181563627?pwd=MHFCWlVxSzhnQW5sTEo1OWloeXBMUT09
Here is an initial agenda. If you have other topics you would like to discuss, or present how your project will be using CosmWasm, please add a comment below and we will integrate them into the agenda.

[ ] The Vision of CosmWasm
[ ] Recent Milestones, Updates
[ ] Present Tentative Roadmap

0.8 milestone (cross-contract queries and db iterators)
IBC integration
AssemblyScript (and Go?) contract support
More sample contracts
Advance the Frontend (Dev)UX

[ ] Upcoming Events

Exciting! I won't make it--will the call be recorded and/or will there be notes published afterwards?

Yes, I will push out a video on vimeo, may a short written summary.

For all those who missed the community call, we made a recording. Please check it out
https://vimeo.com/396655847

Next call will be at Tue Mar 24th at 1700 UTC (6pm CET, 1pm EDT, 10am PDT - double check with daylight savings time, UTC is correct). We will aim to include more projects from the US this time, and switch between these two times, so projects in both the US and Asia can easily attend every other call.


Freeze Frame Interpretation missing for <IP_ADDRESS>.c

<IP_ADDRESS>.c requires interpretation of the FF content.
This could not be provided as FF length was mismatched.
FAIL: <IP_ADDRESS>.c - Received data (164) does not match expected number of bytes (134) based on DM24 supported SPN list for Engine #1 (0)
<IP_ADDRESS> Actions
a. DS DM25 [(send Request (PGNPG 59904) for PGNPG 64951 (SPNSPs 3300, 1214-1215)]) to each OBD ECU.
b. If no response [(transport protocol RTS or NACK(Busy) in 220 ms]), then retry DS DM25 request to the OBD ECU. ([Do not attempt retry for NACKS that indicate not supported.)]
c. Translate and print in log file all received freeze frame data with data labels assuming data received in order expected by DM24 response for visual check by test log reviewer.

The displayed content is:
Start Test 3.13 - DM25: Expanded freeze frame
10:37:33.5970 Destination Specific DM25 Request to Engine #1 (0)
10:37:33.6049 18EA00F9 [3] B7 FD 00 (TX)
10:37:33.6160 18FDB700 [169] A8 83 10 07 01 01 01 C8 1C 07 4E 00 00 00 03 00 03 01 00 00 C6 2C 02 62 83 03 00 78 CB 26 43 01 1B 01 1A C6 11 6C 00 00 00 00 6B 24 0C 22 2B 8B 2A E8 28 00 00 31 90 E7 06 C7 1E 0F 58 03 24 00 F9 00 83 83 9E 09 A9 BE B5 D8 D7 10 3B 00 19 40 1F E0 2E 00 00 00 00 50 00 1E 27 CC 7B 0F 00 44 EA 06 4D AE 5B 2F 60 2F 60 2F 60 2F 60 2F 60 2F 60 FA 6C 45 01 00 00 04 00 0F 07 A0 0F A0 0F C1 00 00 79 28 46 29 36 25 00 26 00 00 FF 5A 8E 51 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3A 00 00 3A 00 00 00 00 00
DM25 from Engine #1 (0):
Freeze Frames: [
Freeze Frame: {
DTC 4227:7 - Engine Crankcase Breather Oil Separator, Mechanical System Not Responding Or Out Of Adjustment - 1 times
SPN Data: 01 01 C8 1C 07 4E 00 00 00 03 00 03 01 00 00 C6 2C 02 62 83 03 00 78 CB 26 43 01 1B 01 1A C6 11 6C 00 00 00 00 6B 24 0C 22 2B 8B 2A E8 28 00 00 31 90 E7 06 C7 1E 0F 58 03 24 00 F9 00 83 83 9E 09 A9 BE B5 D8 D7 10 3B 00 19 40 1F E0 2E 00 00 00 00 50 00 1E 27 CC 7B 0F 00 44 EA 06 4D AE 5B 2F 60 2F 60 2F 60 2F 60 2F 60 2F 60 FA 6C 45 01 00 00 04 00 0F 07 A0 0F A0 0F C1 00 00 79 28 46 29 36 25 00 26 00 00 FF 5A 8E 51 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3A 00 00 3A 00 00 00 00 00
}
]
10:37:35.0606 Destination Specific DM25 Request to DPF Controller (85)
10:37:35.0725 18EA55F9 [3] B7 FD 00 (TX)
10:37:35.0733 18FDB755 [8] 00 00 00 00 00 FF FF FF
DM25 from DPF Controller (85):
Freeze Frames: [
No Freeze Frames
]
<IP_ADDRESS>.c - Received from Engine #1 (0):
Freeze Frame: {
DTC 4227:7 - Engine Crankcase Breather Oil Separator, Mechanical System Not Responding Or Out Of Adjustment - 1 times
SPN Data: 01 01 C8 1C 07 4E 00 00 00 03 00 03 01 00 00 C6 2C 02 62 83 03 00 78 CB 26 43 01 1B 01 1A C6 11 6C 00 00 00 00 6B 24 0C 22 2B 8B 2A E8 28 00 00 31 90 E7 06 C7 1E 0F 58 03 24 00 F9 00 83 83 9E 09 A9 BE B5 D8 D7 10 3B 00 19 40 1F E0 2E 00 00 00 00 50 00 1E 27 CC 7B 0F 00 44 EA 06 4D AE 5B 2F 60 2F 60 2F 60 2F 60 2F 60 2F 60 FA 6C 45 01 00 00 04 00 0F 07 A0 0F A0 0F C1 00 00 79 28 46 29 36 25 00 26 00 00 FF 5A 8E 51 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3A 00 00 3A 00 00 00 00 00
}
Unable to confirm engine speed
FAIL: <IP_ADDRESS>.c - Received data (164) does not match expected number of bytes (134) based on DM24 supported SPN list for Engine #1 (0)
End Test 3.13 - DM25: Expanded freeze frame

PGN 61444 with Supported SPNs 190, 512, 513
10:34:59.3111 0CF00400 [8] F0 7D 80 C4 12 00 F3 80
Found: Engine Speed from Engine #1 (0):
SPN   899, Engine Torque Mode: 0000
SPN  4154, Actual Engine - Percent Torque (Fractional): 1.875000 %
SPN   512, Driver's Demand Engine - Percent Torque: 0.000000 %
SPN   513, Actual Engine - Percent Torque: 3.000000 %
SPN   190, Engine Speed: 600.500000 rpm
SPN  1483, Source Address of Controlling Device for Engine Control: 0.000000 source address
SPN  1675, Engine Starter Mode: 0011
SPN  2432, Engine Demand - Percent Torque: 3.000000 %

Let’s improve
Unable to confirm engine speed
to
Unable to confirm engine speed In freeze frame data

#825 was created to improve the engine speed message.  We're going to make it a warning.  Should we add that to the specification?

<IP_ADDRESS>.e. Fail/warn per Section A.2, Criteria for Freeze Frame Evaluation.
Table A.2 Says [Warn If] SP 190 is not supported in DM24
Add Or, if Engine Speed cannot be observed in FF data. behind quoted entry.


Several questions regarding code and integrating existing solution with bolt-python.

Hi,
I have created this issue in order to clarify some issues and questions I have regarding the code and the Slack integration approach. I have read official Slack integration document available here: https://api.slack.com/start/building/bolt-python, but there is very little explanation in regards to the internal implementation.
I'm trying to implement Slack integration for the Django-based software that handles multiple user accounts. Each account can request installation of the app to individual Slack workspace (using OAuth), and I have based my current implementation on examples available here: https://github.com/slackapi/bolt-python/tree/main/examples/django/oauth_app

What is the difference between SlackBot and SlackInstallation objects?
This is a very basic question but I just can figure out the differences/relation between those two models. When should the installation, and when the bot should be used? Could you point me to some document describing the differences? I see that those two database models share a lot of fields, could this be streamlined, e.g. installation having multiple bots, etc.?

Why store client_id value in SlackBot database object?
From what I understand the client_id is a sensitive value. It looks like (looking at the example datastore implementation) it is actually never used after saving it in the database (https://github.com/slackapi/bolt-python/blob/main/examples/django/oauth_app/slack_datastores.py#L100). Could this field be omitted, and not stored within a database?

Why store multiple instances of bot and installation objects in the database?
I don't understand the idea behind saving new instances of what is essentially the same SlackBot. Would a following code work better, or is there some specific reason multiple instances are required? There could be a unique constraint on (enterprise_id and team_id) pair in the database.

        installation_data = installation.to_dict()
        if is_naive(installation_data["installed_at"]):
            installation_data["installed_at"] = make_aware(installation_data["installed_at"])
        if SlackInstallation.objects.filter(
            team_id=installation.team_id, enterprise_id=installation.enterprise_id,
        ).exists():
            SlackInstallation.objects.filter(
                team_id=installation.team_id, enterprise_id=installation.enterprise_id,
            ).update(**installation_data)
        else:
            SlackInstallation.objects.create(**installation_data)

Is it possible to link SlackBot/SlackInstallation object with an internal user account that initiated the app installation?
I would like to know which of my users installed bot. I'd like to add foreign key pointing to User model in the SlackBot, and have it filled in during installation process (taking user from django request object). From what I see, the example OAuthFlow object has handle_callback method, but is called with slack request instead of django request object.

Is it possible to request removal of the installed Slack app?
If the point 4. of this question is not possible, and the user would have to "connect/link" bot from the Slack workspace (e.g. by issuing some command asking for authorization), would it be possible to remove bots that have not been linked after certain period and expire their tokens? I'd like to do this for safety reasons.
Imagine the following situation:

a) User installs the app in the Slack workspace
b) User invites the bot the channel, but does not authorize it in my app (I have SlackBot with no User object connected in my database)
c) Malicious actions steal bot details
d) I delete bot details after certain time during which the bot has not been linked to the User account in my system (user forgot or was unable to authorize bot in my app)
c) Having the `token` and bot details mailicious code could (potentially) send messages to the channel the bot has been invited to, creating a situation in which user is presented with messages not coming from my system

I would like to ensure that the bot token is invalidated during its removal from my database.

Hi @Waszker, thanks for asking these questions here!
I hope the following answers are helpful to you (and someone who visited this page in the future).

What is the difference between SlackBot and SlackInstallation objects?
This is a very basic question but I just can figure out the differences/relation between those two models. When should the installation, and when the bot should be used? Could you point me to some document describing the differences?

Reading https://api.slack.com/authentication/oauth-v2 should be helpful to understand the basics of the Slack OAuth in general.
A Slack app installation can provide two types of OAuth access tokens to your app. They are 1) bot token (xoxb- prefixed) per workspace, and 2) user token (xoxp- prefixed) per user in the installed workspace.
In most cases, Slack apps tend to use only bot token scopes. All the end-users in your Slack workspace can use the shared bot's permissions. For instance, using slash commands, shortcuts, modals, message events in channels the bot user is in, and so on can function only with bot token. In other words, bot token scopes can cover most use cases.
On the other hand, if your app requests to grant user token scopes (=granting your app to do something on behalf of a user), your app will receive user tokens in addition to a bot token. From an end-user's perspective, the user allows the app to post messages as the user, access private channels, etc by giving a user token.
SlackInstallation and Bolt's interface Installation represent the oauth.v2.access data your app receives here: https://api.slack.com/authentication/oauth-v2#exchanging This means that the data model can have both bot token and user token, plus each row is associated with the user who installed the app.
Th reason why the example app has SlackBot is that, even when all the user tokens are revoked, the bot token in the workspace should still be alive. Likewise, even after the bot token revocation, your app still needs user tokens in some use cases. Refer to the built-in revocation handlers to learn what should be done when revocation/uninstallation events happen.

https://github.com/slackapi/bolt-python/releases/tag/v1.5.0
https://github.com/slackapi/bolt-python/pull/289
https://github.com/slackapi/python-slack-sdk/pull/995

I see that those two database models share a lot of fields, could this be streamlined, e.g. installation having multiple bots, etc.?

For the above reason, we have two types of database tables to cover the mentioned use cases adequately. But if your app does not need to have both, having a single database table for simplicity is also good to go. As recommendations from this project, we don't hesitate having duplicated properties in those two tables. It makes easier to delete data in either of the tables than having relationships in the revocation scenario.

e.g. installation having multiple bots, etc.?

As I mentioned above, you can have only one bot per workspace in installations. This means that, even if 100 users in the workspace installed the same app with bot token scopes, only one bot and its token will be available.

Why store client_id value in SlackBot database object?

Having the column in a database enables developers to share the same database tables for multiple Slack apps. If that's not your use case, you can remove the column safely.

It looks like (looking at the example datastore implementation) it is actually never used after saving it in the database

No, it saves the property this way: https://github.com/slackapi/bolt-python/blob/7920f3923a39b1d489c95d0ac34bd088e3081996/examples/django/oauth_app/slack_datastores.py#L40
As you mentioned, indeed, the database model does not set the value to Installation/Bot in the finder methods. This is because Bolt's App instance is available per client_id (Slack App ID, in other words).

Why store multiple instances of bot and installation objects in the database? I don't understand the idea behind saving new instances of what is essentially the same SlackBot.

As the default way, we recommend saving all the installation history data with timestamps. Having all-time data can make your troubleshooting / technical investigations in production system operations.
For instance, your app may need more scopes in the future (say, You app starts with only chat:write, and then need others like files:write). In this scenario, reinstalling the app can be required to use the app's new functionalities. This means that there can be multiple versions of the app installations. Having only the latest data may be also acceptable to properly manage this specific pattern, but more complex situations may need complete historical data to figure out what's happening.

Would a following code work better, or is there some specific reason multiple instances are required? There could be a unique constraint on (enterprise_id and team_id) pair in the database.

If you prefer updating a single database row, that's also the option. It would be a valid choice particularly if you want simplicity in design or have to manage millions/billions of installation events.

Is it possible to link SlackBot/SlackInstallation object with an internal user account that initiated the app installation?
I would like to know which of my users installed bot. I'd like to add foreign key pointing to User model in the SlackBot, and have it filled in during installation process (taking user from django request object).

I would recommend connecting to SlackInstallation in this case. A bot is associated with the workspace, not a user. After an installation, who installed the bot into the workspace does not matter.

From what I see, the example OAuthFlow object has handle_callback method, but is called with slack request instead of django request object.

If you are talking abou the callback_options, the callbacks are supposed to be called at the end of the OAuth flow. Refer to "Customizing OAuth defaults" in the document (it needs a click to display the part) https://slack.dev/bolt-python/concepts#authenticating-oauth The callbacks should be useful for this purpose.

Is it possible to request removal of the installed Slack app?

You can use the following APIs as necessary:

https://api.slack.com/methods/apps.uninstall
https://api.slack.com/methods/auth.revoke

Let us know if you have some follow-ups here 👋
If you may have many more questions in development and you are happy to join the Slack Community workspace, I can help you there more easily. Joining channels like #tool-bolt, #lang-python, and #slack-api would be recommended.

👋 Hi @Waszker, let us know if you have anything further to ask/discuss here. We'll close this issue after waiting for your response for a few more days.

@seratch ooops sorry about lack of response from me - I didn't notice the mention. Your answers were really detailed and sufficient for me - thank you very much for taking your time and answering them. :pray:


ESM issue with EmberJS

Not sure which side is the problematic one (Ember / Embroider / statelyai/inspect / ?), but to document this:
// package.json
    ...
  "devDependencies": {
    "ember-statechart-component": "^7.1.0",
    "@statelyai/inspect": "^0.4.0",
    "xstate": "^5.19.0"
  }
    ...

// machine.ts

import { setup } from 'xstate';
import { createBrowserInspector } from '@statelyai/inspect';

const { inspect } = createBrowserInspector();

const machine = setup({ ... }).createMachine({ ... });

Produces following errors:
router.js:1323 Error while processing route: add-a-building ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ../../.pnpm/@statelyai+inspect@0.4.0_ws@8.18.0_xstate<EMAIL_ADDRESS>Error: ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ../../.pnpm/@statelyai+inspect@0.4.0_ws@8.18.0_xstate<EMAIL_ADDRESS>
and
Uncaught Error: ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ../../.pnpm/@statelyai+inspect@0.4.0_ws@8.18.0_xstate<EMAIL_ADDRESS>    at Object.set [as exports]

Environment:
pnpm exec ember version
ember-cli: 6.0.1
node: 20.18.0
os: darwin arm64

We're talking embroider enabled build based on webpack. I suspect that might play a role:
    "@embroider/compat": "^3.7.0",
    "@embroider/core": "^3.4.19",
    "@embroider/webpack": "^4.0.8",

Kickstarted a conversation on EmberJS discord

To me, it looks like the package is built incorrectly.

Module isn't a thing in esm, so it would errors ... Or it requires special webpack or vite configuration to polyfill module.
Ember won't polyfill this sort of stuff because it perpetuate bad patterns.
It's probably just an oversight. This sort of compilation was common in the old days.
But the inspect package needs to use package.json#exports and provide per-format compilation

@MichalBryxi i'd rename this issue to 'not compatible with modern tooling without polyfilling nodeisms' (webpack 5, vite)

If you know of a potential fix, I'd appreciate a PR for it 🙏


Merge latest changes in main branch to 1.0 branch

Description
Merge latest changes in main branch to 1.0 branch
Issues Resolved
N/A
Check List

[ ] New functionality includes testing.

[ ] All tests pass, including unit test, integration test and doctest

[ ] New functionality has been documented.

[ ] New functionality has javadoc added
[ ] New functionality has user manual doc added

[x] Commits are signed per the DCO using --signoff

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
For more information on following Developer Certificate of Origin and signing off your commits, please check here.

Codecov Report

:exclamation: No coverage uploaded for pull request base (1.0@6b651c1). Click here to learn what that means.
The diff coverage is n/a.

@@          Coverage Diff           @@
##             1.0     #158   +/-   ##
======================================
  Coverage       ?   99.89%
  Complexity     ?     2471
======================================
  Files          ?      245
  Lines          ?     5748
  Branches       ?      333
======================================
  Hits           ?     5742
  Misses         ?        5
  Partials       ?        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 6b651c1...27e8b3c. Read the comment docs.


Upgrades epel repository to version 7.9

This Url is no longer available (404) https://download.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm
This Url works: https://download.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-9.noarch.rpm

The Travis-CI build failed on the Centos 5 Image because Centos 5 has reached it's EOL, and can no longer be obtained via http://mirrors.kernel.org/centos/5.11/isos/x86_64/CentOS-5.11-x86_64-netinstall.iso
You could alter the Build, so it used the Vault, instead... but I would just drop the Centos 5 Image.
Vault URL: http://vault.centos.org/5.11/isos/x86_64/CentOS-5.11-x86_64-netinstall.iso
This does not affect the change in this commit though, the Centos 7 Image builds just fine.

Thank you for the fix!


[pxc.percona.com] Add Percona XtraDB CLuster Operator Schemas

Added Percona XtraDB Cluster Operator Schemas.
Group: pxc.percona.com.
A list of CRDs:

PerconaXtraDBClusterBackup - v1
PerconaXtraDBClusterRestore - v1
PerconaXtraDBCluster

v1
v1-2-0
v1-3-0
v1-4-0
v1-5-0
v1-6-0
v1-7-0
v1-8-0
v1-9-0
v1-10-0
v1-11-0

Here is the commands I used to generate them:
python openapi2jsonschema.py https://raw.githubusercontent.com/percona/percona-xtradb-cluster-operator/main/deploy/bundle.yaml

Reference: https://raw.githubusercontent.com/percona/percona-xtradb-cluster-operator/main/deploy/bundle.yaml
Source: https://github.com/percona/percona-xtradb-cluster-operator

@zhekazuev, the vx-x-x apiVersion (PerconaXtraDBCluster) version convention is not according to the CRDs standard, so I'm not sure it will be parsed correctly.
Did you check this against your branch to verify it's working as expected?

@zhekazuev, the vx-x-x apiVersion (PerconaXtraDBCluster) version convention is not according to the CRDs standard, so I'm not sure it will be parsed correctly. Did you check this against your branch to verify it's working as expected?

Hi, yeah I know it is not looks correctly, but this is how it looks like in the CRDs, f.e.: https://github.com/percona/percona-xtradb-cluster-operator/blob/main/deploy/bundle.yaml#L482
P.S.
Ok I see that for all uncorrect versions:

deprecationWarning: pxc.percona.com/v1-2-0 PerconaXtraDBCluster is deprecated and will be removed in v1.16.0; see v1.12.0 release notes for instructions to migrate to pxc.percona.com/v1

How do you think, should I delete these versions?

the following schemas are pretty useless because they don't validate anything 😅

v1-2-0
v1-3-0
v1-4-0
v1-5-0
v1-6-0
v1-7-0
v1-8-0
v1-9-0
v1-10-0
v1-11-0

just delete them and we will be alright

@eyarz
Holy... 😅, Ok.