Feedback banner should scroll with the results, not sticky

The Feedback banner on the Bookmarks page should scroll with the Bookmarked items (like the Search Beta banner on the Search results page), not be sticky.
As seen here in Staging 1.62.0 it is sticky, but it should actually scroll along with the Bookmarked items

Acceptance Criteria

[x] Feedback banner on the Bookmarks page is not sticky/does not overlay the Bookmarked items

Steps for QA:

@cherrielam I turned the banner into a Header for the list so now it looks as follows. The beige divider between the banner and the first item of the list is gone, let me know if this is a big deal.

Scrolls for me now. Can we have the beige divider between the service card and top header moved so it's between the service card and banner? Right now the banner and card looks like one at a glance.

+1 on what @Melanie-PG suggested, moving the beige divider to below the banner (none above the banner)

@cherrielam to create a new issue for the last UX tweak request


Error running 'npm install' in Node.js command line

Hi!
I am getting some ERR! as I try to run the install. Is it supposed to look like this, or am I doing something wrong?
`

C:\Users\tgrim\Downloads\1\1>npm install
<EMAIL_ADDRESS>postinstall C:\Users\tgrim\Downloads\1\1
npm run install-boiler5
<EMAIL_ADDRESS>install-boiler5 C:\Users\tgrim\Downloads\1\1
npm install --prefix ./5\ -\ viewer+server+oss+derivatives
npm ERR! code EINVALIDTAGNAME
npm ERR! Invalid tag name "viewer+server+oss+derivatives": Tags may not have any characters that encodeURIComponent encodes.
npm ERR!      C:\Users\tgrim\AppData\Roaming\npm-cache_logs\2017-07-26T19_10_35_097Z-debug.log
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR<EMAIL_ADDRESS>install-boiler5: npm install --prefix ./5\ -\ viewer+server+oss+derivatives
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>install-boiler5 script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm WARN Local package.json exists, but node_modules missing, did you mean to install?
npm ERR!      C:\Users\tgrim\AppData\Roaming\npm-cache_logs\2017-07-26T19_10_35_341Z-debug.log
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR<EMAIL_ADDRESS>postinstall: npm run install-boiler5
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm WARN Local package.json exists, but node_modules missing, did you mean to install?
npm ERR!      C:\Users\tgrim\AppData\Roaming\npm-cache_logs\2017-07-26T19_10_35_604Z-debug.log`

I am running Terminal on Mac and I am getting this error:
`Emilies-MacBook-Pro-2:5 emiliegronsberg$ npm start

<EMAIL_ADDRESS>start /Users/emiliegronsberg/Downloads/forge-boilers.nodejs-master/5
node bin/start.js

Server listening on:
{ address: '::', family: 'IPv6', port: 3000 }
ENV: undefined
dist/ directory not found, starting compiler ...
Starting compiler NODE_ENV=undefined
Unhandled Rejection at: Promise  Promise {
 { Error: Cannot find module './undefined.webpack.config'
at Function.Module._resolveFilename (module.js:485:15)
at Function.Module._load (module.js:437:25)
at Module.require (module.js:513:17)
at require (internal/module.js:11:18)
at build (/Users/emiliegronsberg/Downloads/forge-boilers.nodejs-master/5/webpack/index.js:42:25)
at clean.then (/Users/emiliegronsberg/Downloads/forge-boilers.nodejs-master/5/webpack/index.js:61:3)
at  code: 'MODULE_NOT_FOUND' } }  reason:  { Error: Cannot find module './undefined.webpack.config'
at Function.Module._resolveFilename (module.js:485:15)
at Function.Module._load (module.js:437:25)
at Module.require (module.js:513:17)
at require (internal/module.js:11:18)
at build (/Users/emiliegronsberg/Downloads/forge-boilers.nodejs-master/5/webpack/index.js:42:25)
at clean.then (/Users/emiliegronsberg/Downloads/forge-boilers.nodejs-master/5/webpack/index.js:61:3)
at  code: 'MODULE_NOT_FOUND' }
Cleaning Dir: /Users/emiliegronsberg/Downloads/forge-boilers.nodejs-master/5/TMP
`

You need to define the required environment variables, NODE_ENV determines which config file will be used:
 > npm install     > set NODE_ENV=development     > set FORGE_DEV_CLIENT_ID=<<YOUR CLIENT ID FROM DEVELOPER PORTAL>     > set FORGE_DEV_CLIENT_SECRET=<<YOUR CLIENT SECRET>     > npm start


developer docs: Refer to 'zulipbot add' instead of 'zulipbot label'.

These changes are consistent with naming in zulip/zulipbot. See:

https://github.com/zulip/zulipbot/commit/e29e7eb
https://github.com/zulip/zulipbot/wiki/Commands#username-add-label-name

@synicalsyntax

We've added label/unlabel as aliases for add/remove commands in the zulipbot config, so both label and add are suitable commands for adding labels. So this PR can be merged or not merged, I'm fine with any decision either way :)

@synicalsyntax well I think the question is which version is canonical/recommended?  We should document that one.  I guess I like add/remove just because "unlabel" is pretty awkward, so I'd favor merging this.

Sounds reasonable, feel free to merge then 👍


Please fix broken build

I am wondering what is the point of having a broken build up on GitHub. Correct me if I'm wrong, isn't the point of open source to invite folks to learn and contribute? I find it discouraging when code bases are hostile towards newcomers. Any person off the street should be able to pick up the code and get up to speed with a clean build. Else, I don't see much point in this being open source.

Please send a pr

@beautifulcoder sorry you're seeing a broken build. Can you share more about what you're seeing? We've had some build breaks recently due to some big changes that affected multiple repos, but that should all be fixed now.

Yay! The build works you guys are the best. The only thing I'm seeing is a failing unit test:
info: Exec
info:   program: cmd
info:   commandline: /C dnx test
info:   workingdir: test\Microsoft.AspNet.Mvc.Core.Test
xUnit.net DNX Runner (32-bit DNX 4.5.1)
  Discovering: Microsoft.AspNet.Mvc.Core.Test
  Discovered:  Microsoft.AspNet.Mvc.Core.Test
  Starting:    Microsoft.AspNet.Mvc.Core.Test

 Microsoft.AspNet.Mvc.ContentResultTest.ContentResult_ExecuteResultAsync_SetContentTypeAndEncoding_OnResponse(contentType: null, content: "??σµε", responseContentType: null, expectedContentType: "text/plain; charset=utf-8", expectedContentData: [206, 186, 225, 189, 185, ...]) [FAIL]
      Assert.Equal() Failure
                 (pos 0)
      Expected: text/plain; charset=utf-8
      Actual:
                 (pos 0)
      Stack Trace:
        C:\Dev\Mvc\test\Microsoft.AspNet.Mvc.Core.Test\ContentResultTest.cs(208,0): at Microsoft.AspNet.Mvc.ContentResultTest.<ContentResult_ExecuteResultAsync_SetContentTypeAndEncoding_OnResponse>d__6.MoveNext()
        --- End of stack trace from previous location where exception was thrown ---
           at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
           at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
        --- End of stack trace from previous location where exception was thrown ---
           at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
           at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
        --- End of stack trace from previous location where exception was thrown ---
           at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
           at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
  Finished:    Microsoft.AspNet.Mvc.Core.Test

Ah, I think @rynowak and @Tratcher were maybe looking at this - if it's what I think it is, it's due to a recent change in another repo that we're fixing.

This was fixed on aspnetcidev this evening. However, I'm seeing a different error now:
Could not load file or assembly 'System.Private.DataContractSerialization,...

Awesome job guys. The build and unit tests seem to work! I'm still getting used to dnx test but will get a handle on it soon enough.


A problem was found in the comboBox.

If you scroll while the selection box list is exposed, the list is not fixed under the selection box.
The list box item moves along the scroll.

In addition, the same problem occurs in the Autocomplete - Results with an external trigger part.

This was actually fixed in v6.9.5 but the documentation site hasn't been updated yet. I'll bump it in a quick PR!


Chat sidebar in docked pinned view sometimes steals focus

Users report that even after clicking out of the sidebar typed characters still end up in Codeium Chat.

I run PHPStorm latest (2023.3.3) as of today.
I've this issue and it makes the chat absolutely unusable, due to the fact it reloads and loses content/chat history due to that, makes constantly toggling it a pain.
As of now I was unable to figure out if it is caused by any of my extensions, but will try to investigate further.


Add include_once statement.

Currently we cannot control if a file has already been included with the include statement.
I propose to add the include_once statement to only include a file once per module.
The full path of the included file is used to check if it was already included in the module.

Hmm, the barrier for adding a new keyword to the language is fairly high. In fact, we are trying to get away from special syntax, not add to it. What if users had a line like this in their code:
include_once = True
That seems a very reasonable piece of code, which would break with your proposed change.
Could you explain a bit more what your use case is? It's easier to understand what you want when you explain why you want it. An example would help.

We have multiple products that all share some common code base.
We want to deliver one and only one python module for each product.
Splitting a product module is not an option because of symbol resolution in our C code base.
Here is what our project looks like:
.
├── libs/
│   ├── lib_1/
│   │   └── lib_1.pxi
│   ├── lib_2/
│   │   └── lib_2.pxi
│   ├── lib_3/
│   │   └── lib_3.pxi
│   └── lib_common/
│       ├── lib_common.c
│       ├── lib_common.h
│       └── lib_common.pxi
├── product_a/
│   └── product_a.pyx
└── product_b/
    └── product_b.pyx

######## libs/lib_common/lib_common.c ########

int lib_common_super_func_in_c(int val)
{
    return ~val;
}

######## libs/lib_common/lib_common.h ########

#ifndef IS_LIB_COMMON_H
#define IS_LIB_COMMON_H

int lib_common_super_func_in_c(int);

#endif /* IS_LIB_COMMON_H */

######## libs/lib_common/lib_common.pxi ########

#cython: language_level=3

cdef extern from "lib_common.h":
    int lib_common_super_func_in_c(int)

cdef object lib_common_super_func(object val):
    return lib_common_super_func_in_c(val)

USED_LIBS = []

cdef void add_used_lib(str lib):
    USED_LIBS.append(lib)

cdef list get_used_libs():
    return USED_LIBS

add_used_lib('lib_common')

######## libs/lib_1/lib_1.pxi ########

#cython: language_level=3

include "../lib_common/lib_common.pxi"

cdef object lib_1_super_func(object val):
    return lib_common_super_func(val + 42)

add_used_lib('lib_1')

######## libs/lib_2/lib_2.pxi ########

#cython: language_level=3

include "../lib_common/lib_common.pxi"

cdef object lib_2_super_func(object val):
    return lib_common_super_func(val - 99)

add_used_lib('lib_2')

######## libs/lib_3/lib_3.pxi ########

#cython: language_level=3

include "../lib_common/lib_common.pxi"

cdef object lib_3_super_func(object val):
    return lib_common_super_func(val * 21)

add_used_lib('lib_3')

######## product_a/product_a.pyx ########

#cython: language_level=3

include "../libs/lib_1/lib_1.pxi"
include "../libs/lib_2/lib_2.pxi"

cdef object product_a_super_func():
    return lib_1_super_func(788) + lib_2_super_func(423)

print('super funcs: {}'.format(product_a_super_func()))
print('used libs: {}'.format(get_used_libs()))

######## product_b/product_b.pyx ########

#cython: language_level=3

include "../libs/lib_1/lib_1.pxi"
include "../libs/lib_3/lib_3.pxi"

cdef object product_b_super_func():
    return lib_1_super_func(54) - lib_3_super_func(4988)

print('super funcs: {}'.format(product_b_super_func()))
print('used libs: {}'.format(get_used_libs()))

The issue is that lib_1.pxi, lib_2.pxi and lib_3.pxi all include lib_common.pxi.
So when cythonizing and compiling product_a.pyx and product_b.pyx, I get some duplicate function definitions and USED_LIBS is initialized multiple times.
I can make it work by removing include "../lib_common/lib_common.pxi" in lib_1.pxi, lib_2.pxi and lib_3.pxi and add it in product_a.pyx and product_b.pyx, but we loose the dependency logic and we have to make sure that lib_common.pxi will never be included in one of the library files. It also messes up the syntax checker for the library files.
Another solution would be to use a header guard with a compile variable:
######## libs/lib_common/lib_common.hdr.pxi ########

#cython: language_level=3

IF not IS_LIB_COMMON_HDR_PXI:
    DEF IS_LIB_COMMON_HDR_PXI = True
    include "lib_common.pxi"

And to replace include "../lib_common/lib_common.pxi" by include "../lib_common/lib_common.hdr.pxi".
The issue with this solution is that we need IS_LIB_COMMON_HDR_PXI to be defined before including lib_common.hdr.pxi.
To solve this issue we need to find a way to detect if IS_LIB_COMMON_HDR_PXI is defined or not.
It is also a nice feature to have by the way.
I see two solutions:

Add a is_defined function to the selection of builtin functions available at compile-time:

IF not is_defined('IS_LIB_COMMON_HDR_PXI'):
    DEF IS_LIB_COMMON_HDR_PXI = True
    include "lib_common.pxi"

Add IFDEF and IFNDEF statements:

IFNDEF IS_LIB_COMMON_HDR_PXI:
    DEF IS_LIB_COMMON_HDR_PXI = True
    include "lib_common.pxi"

The issue with this solution is that we need IS_LIB_COMMON_HDR_PXI to be defined before including lib_common.hdr.pxi.

True. OTOH, Cython will give you a compile time error if you test the value and it's not defined, so these cases are safe and easy to detect. I would suggest defining the variable at the top of your main module file. I think I would also lean towards testing it inside of the included file rather than in all files that include it.


Flexvolumes not working (missing mount path)

BUG REPORT:
What happened:
When using kubernetes flex volume plugins (ex. Rook, DigitalOcean Block Storage) they fail to be mounted by the kubelet because the flexvolume path is not set and mounted.
What you expected to happen:
Flexvolumes should just work as they are a GA feature as of Kubernetes 1.8 (https://github.com/kubernetes/community/blob/master/contributors/devel/flexvolume.md#flexvolume). The required configuration does not seem to have any negative effects and could easily be made optional/opt-in or could be disabled with a flag.
How to reproduce it (as minimally and precisely as possible):

Setup a k8s cluster with any provider (ingress and storage are not required)
Deploy a flexvolume plugin (for example rook)
Create a Volume
Attempt to create a pod which uses the volume
Mount fails, kubectl describe pod xxxxxx returns mount failed/timeout.

What has to be done:

Add a volume-plugin-dir argument to kubelet for example via ansible/playbooks/group_vars/all.yaml:

...
kubelet_defaults:
  ...
  "volume-plugin-dir": "/usr/libexec/kubernetes/kubelet-plugins/volume/exec/"
...

Add a hostPath mount to kube-controller-manager in ansible/playbooks/roles/kube-controller-manager/templates/kube-controller-manager.yaml:

...
volumeMounts:
    ...
    - mountPath: /usr/libexec/kubernetes/kubelet-plugins/volume/exec/
      name: flexvolume-mount
    ...
volumes:
    ...
    - hostPath:
          path: /usr/libexec/kubernetes/kubelet-plugins/volume/exec/
      name: flexvolume-mount
    ...

Environment:

Kismatic version (use kismatic version): 1.9.0
Plan file Gist (remove sensitive information if any): n/a
Cloud provider or hardware configuration: irrelevant
OS (e.g. from /etc/os-release): debian, but should apply to all
Kernel (e.g. uname -a): irrelevant

@dkoshkin If you are interested in a pull request I can submit my working configuration (tested with Rook & DigitalOcean Block Storage).

@davidhiendl that would actually be great, please do so.

@dkoshkin Any progress on this or any specific reason why this is not moving forward? I've been running several clusters with this fix without problems.


Make README instructions more usable

While an example project is available at (Example-LlamaEdge-RAG), the README for this specific project doesn't highlight the crucial step of having qdrant running, and neither does wasmedge at execution time when it doesn't find a qdrant instance active.
This PR aims to make this information more obvious, and adds a final example usage section with a barebones example.
Relevant issue

You can also add
The command above starts the API server on the default socket address. Besides, there are also some other options specified in the command:

- The `--dir .:.` option specifies the current directory as the root directory of the WASI file system.

- The `--nn-preload default:GGML:AUTO:llama-2-7b-chat.Q5_K_M.gguf` option specifies the Llama model to be used by the API server. The pattern of the argument is `<name>:<encoding>:<target>:<model path>`. Here, the model used is `llama-2-7b-chat.Q5_K_M.gguf`; and we give it an alias `default` as its name in the runtime environment. You can change the model name here if you're not using llama2-7b-chat
- The `--prompt-template llama-2-chat` is the prompt template for the model.
- The `--model-name llama-2-7b-chat` specifies the model name. It is used in the chat request.

as an explanation of the command to things a bit more clear.

Also this :
Please guarantee that the port is not occupied by other processes. If the port specified is available on your machine and the command is successful, you should see the following output in the terminal:

```console
[INFO] LlamaEdge HTTP listening on 8080

as a note in the Execute section

You can also add :
The command above starts the API server on the default socket address. Besides, there are also some other options specified in the command:

- The `--dir .:.` option specifies the current directory as the root directory of the WASI file system.

- The `--nn-preload default:GGML:AUTO:llama-2-7b-chat.Q5_K_M.gguf` option specifies the Llama model to be used by the API server. The pattern of the argument is `<name>:<encoding>:<target>:<model path>`. Here, the model used is `llama-2-7b-chat.Q5_K_M.gguf`; and we give it an alias `default` as its name in the runtime environment. You can change the model name here if you're not using llama2-7b-chat
- The `--prompt-template llama-2-chat` is the prompt template for the model.
- The `--model-name llama-2-7b-chat` specifies the model name. It is used in the chat request.

as an explanation of the command to things a bit more clear.

Noted! Will add this to another commit in a bit.


"Create DAX Calculations in Power BI Desktop, Part 1" lab - Markdown issue

Block is marked as code in Markdown, whereas it should be just a normal list. Reference https://microsoftlearning.github.io/PL-300-Microsoft-Power-BI-Data-Analyst/Instructions/04-create-dax-calculations-in-power-bi-desktop.html

Fixed.


0.15 release

[x] update changelog
[x] tag release
[x] attach artifacts once ci run completes
[x] update changelog in master

i attached artifacts but I currently dont have an x86 machine to test with so if anyone could double check it would be great :)

Checked, all seems to be working as expected.
The only thing that I found is that tools/bitesize.bt is broken on my kernel. I have a fix ready (#2236), not sure how we want to proceed with it.

Checked, all seems to be working as expected.
The only thing that I found is that tools/bitesize.bt is broken on my kernel. I have a fix ready (#2236), not sure how we want to proceed with it.


dev(#756): squash on submit

Current dependencies on/for this PR:

main

PR #757   👈

This stack of pull requests is managed by Graphite.


Add Download for Folder (As ZIP)

Is it possible to add the Download Button for Folder? So far it's only aviable for Files and i have to manually zip the files and download them. Thanks

Have a look at my customization, it auto zips workspace directory and uploads it to your Google drive (you need to set it up first), refer readme for more info.


Accessibility Issue: unable to create accessible PDF forms with tagged fields

Requirement - I need to add name, value, role and state for form fields to enable accessibility as per this document https://www.w3.org/WAI/WCAG22/Techniques/pdf/PDF12
Issue I am facing - I have added name, value, role and state for form fields using below code but Adobe Acrobat is not passing the accessibility check for forms generated using PDFKit. How can I create accessible PDF forms with tagged fields?
Code I tried -
    const myForm1 = doc.struct('P');
    doc.addStructure(myForm1);
    const myInput1 = doc.struct('Form');
    myForm1.add(myInput1);
    const myInputContent1 = doc.markStructureContent('Form');
    myInput1.add(myInputContent1);
   doc.text("Document Number", x, y);
   doc.formText("Document Number", x+95 , y, 160, 20, {
                    value: documentNumber,
                    defaultValue: '',
                    multiline: true,
                    readOnly: true
  });
 myInput1.end();

Hi all,
looks like an old ticket that has been created and based on no reply I suppose there's been no progress on that. I got exactly the same issue and no idea how to fix it, does anyone have some useful tip to help me out on this one?
Thanks in advance


add deprecated marker to TableConnector.Close()

What problem does this PR solve?
fix #1446
What is changed and how does it work?
Checklist
Tests

Unit test
Integration test
Manual test (add detailed scripts or steps below)
No code

Code changes

Has exported function/method change
Has exported variable/fields change
Has interface methods change
Has persistent data change

Side effects

Possible performance regression
Increased code complexity
Breaking backward compatibility

Related changes

Need to cherry-pick to the release branch
Need to update the documentation
Need to be included in the release note

This pr is also related to #1385 , normally, when replica server is restarted , client should update config and build connect with another server ip.
I suspect that the reason config is not updated successful is that TableConnector.Close() is called  and loopForAutoUpdate() is interrupted.

Codecov Report

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

@@            Coverage Diff            @@
##             master    #1448   +/-   ##
=========================================
  Coverage          ?   53.38%
=========================================
  Files             ?       27
  Lines             ?     2527
  Branches          ?        0
=========================================
  Hits              ?     1349
  Misses            ?     1132
  Partials          ?       46

:mega: We’re building smart automated test selection to slash your CI/CD build times. Learn more


Sign up + sign in + forgot password functionality

What
The platform needs to have a complete email+password authentication system in place. Also, it should be thought through really well for future scaling. A lot of it has already been implemented, but it's not finished, and some parts are missing. This task is all about finishing it and implementing what's left. Refer to Acceptance Criteria to know what will be tested to consider this task complete and done.
Note: The next task will be to create an auth with a magic link and oAuth providers like Apple, Google, Facebook, Github, etc., so keep that in mind when designing the whole auth core.
Why
Well, probably all SaaS projects have a sign-up and sign-in and password reset. Without authentication, it would be quite complicated to get anything done. That's why we implement this core element of any SaaS project.

In addition, default organization for every new user
Every new user gets an organization silently created by default also. If developers need this functionality, it will be easily extendable. If it's unnecessary - they don't need to do anything about it - it will sit in the background.
For reference

For one email there should be one user entity.
Users can be in one (by default) or invited to many organizations.
The user has a separate profile per organization. That profile would hold a name, avatar, and other things that are related to that tied organization.
This way, user authentication data is kept in one place, but identity per org is kept separate.
Since this is a universal starter project, we can just guess how this can be used, but with this approach, we can be sure we can implement something like Jira, Trello, Hubspot, and DigitalOcean has, but also we will be able to keep it super simple, or even hide organization, and completely ignore it in the project if that's not needed.
Here's DigitalOcean example of multiple teams (here it's actually separate organizations with different owners, billing details and companies 😉)

🔥 Acceptance Criteria

Implementation like hooks and hook forms should be reusable (now it will be for React project, but after this is done, we will add React Native to support exactly the same functionality, so keep that in mind)
On libs/impl, there should be no UI-related method calls - use callback functions and implement it on the app side (in this case, toast needs to be moved out)
User can sign-up / register
User can't sign-up with invalid details, and API will not accept invalid sign-up details (validation on frontend and backend using same DTO (that was the whole point to have DTOs in libs 😉 ))
User can request a password change and receive an email with the link to reset it (with email template)
Users request to change password is valid only for 15 min
User can sign in to the account
When the user signs in, the user will see the first name and last name printed
When the user reloads the page, the user will see a protected dashboard instead of the login form (automatic check)
If the user is not logged in, the user will not be able to access protected routes
JWT is used for storing user ID and for authentication checks and is passed via request headers
There's an access token and a refresh token - when the access token expires and the refresh token is set, it should refresh the access token
User access token lifetime is 15 min (then it should be refreshed)
Refresh token lifetime is 8 hours, and the lifetime is extended every time it refreshes the access token (so if a user is using the platform, it  won't log out, but if the user is not using it, after a longer period of time, it will get logged out completely)
All configuration variables should be stored in configs dir
User can manually log out, which will clear access-token and refresh-token from local storage and from the database
On the frontend, it's just simple inputs without additional visual styling, tho groups should be properly wrapped
When a user creates an account, an organization also is created; the organization will not have any details but will only be tied to the user via many-to-many relationships, and the user role is set to "owner". I'd add roles in the many-to-many middle table. (Users can own many organizations also can be invited to other organizations with different access levels; that's why it's many-to-many).
Every method created has to be covered with tests where it is meaningful (.spec.ts)
Every API call has to have e2e test (https://nx.dev/nx-api/cypress)
Every frontend page has to have e2e test to check proper rendering
Unit and e2e test are running on every commit to PR

Every new user gets an organization silently created by default also. If devs will need this functionality, it fill we easily extendable. If it's not needed - don't really need to do anything about it - it will sit in the background.

So you need a backend developer to solve this issue ?

So you need a backend developer to solve this issue ?

Technically it's a full stack. 🤷♂

Sir, Do you want to add authentication and authorization feature via Google, Github, or Facebook signIn/up,
Please correct me If I am wrong
Basically you want to add Role Base Authentication

user signup, user attached to some default organization with details as null initially
1.1) user can add other organization
user signIn to different Organization for which they belongs to.
Forget Password via email verification.

and rest features you mentioned above

Sir, Do you want to add authentication and authorization feature via Google, Github, or Facebook signIn/up, Please correct me If I am wrong Basically you want to add Role Base Authentication

user signup, user attached to some default organization with details as null initially
1.1) user can add other organization
user signIn to different Organization for which they belongs to.
Forget Password via email verification.

and rest features you mentioned above

No. Please read again carefully. All the details are in there. I've provided also a lot of details for context so it would be easier to understand the large picture of the task and the overall goal we want to reach.

@suneox well, it's merged into one, because sign up works, sign in also works, forgot password - sends email with code, sets in db. Practically it's more work on tokens, refresh, making sure it's all nice. It also has tests coverage, quite extensive.

https://github.com/cortip/isomera/tree/main/apps/api/src/auth

If You can provide more context on the e2e tests, and an example of the front end work required for this task
I am ready to join

Dropping e2e from this tasks. A bit of an overkill :)

When the access token expires, the API will return a status code of 401. When the client receives this status code, it will call the API to renew both the access token and the refresh token. All pending requests will be added to the queue. Once the access token is refreshed, the client will automatically execute these pending requests.
After a successful login, the API will return the default organization and the user profile within this organization. The client will save the organization to a cookie or local storage. Subsequently, every API call made by the client will include the organization id as a parameter. @vygandas

@PhamAnhHoang, yeah, it makes sense. Of course, you would need to handle when 401 means actually logged out user, not to get into a loop of refresh attempts. And not forget everything else on the acceptance criteria 😉

I saw your post on upwork. Can I contribute to this issue? @vygandas

You can tell me your desired deadline and I will try my best to do it @vygandas

@PhamAnhHoang , well, it's not a very small task and I don't know how much time you will spend daily, that's why you're the best who can tell me when you think you'd be done with it.

I think it will take around 40 hours, so I can complete this task on Monday,

@PhamAnhHoang please apply on upwork so I could send an offer

This is my Upwork profile: https://www.upwork.com/freelancers/~017c46c5e110925052. I can’t see your post anymore. Can you message me?

@PhamAnhHoang invitation sent ✅


Raster coverage

This is a fix for raster coverage calculation.

@hyi and @dtarb Can you review this?

+1

Qualified +1 from me.  I would like to see a test deployment.  The logic changes and box coverage comparison changes look good to me, but the other code changes are not within my skill set to comment on.

@dtarb This work has been deployed on playground. I wait until you are done with testing to merge this PR.

Tested.  +1.


JSPWIKI-1194 - Fix CI build by ensuring test-jar is built and deploying with JDK 17

Update Jenkinsfile to Include Java 21 and Resolve CI Issues
This PR addresses the CI build failure by updating the Jenkinsfile. The changes include:

Adding support for Java 21 in the build stages.
Ensuring the SonarQube analysis and deployment steps are correctly executed.
Building and deploying test-jar dependencies to resolve missing artifact issues.

These updates aim to maintain the stability of the CI pipeline and ensure all necessary artifacts are properly built and deployed.

Hi,
couple of notes,

the test-jar issue could be solved just by placing <skip>false</skip>just below/inside the pom generating the test-jar. That config defaults to ${maven.test.skip} and that's why on a clean environment the build fails (the artifact is not built)

-DskipTests skips test execution, whereas -Dmaven.test.skip skips tests execution and compilation, so it's a bit faster. At the deploy stage test had already passed so that flag was added to speed the deploy a bit. Unsure how applying both flags solves the issue on a clean env (no 2.12.3-SNAPSHOT on local repository and -o passed to the build)

non sonar builds are skipping tests; they shouldn't they help us ensure there are no problems with other JDKs

as for switching to jdk-17

this would force everyone consuming the snapshot artifacts to forcibly use JDK-17. I'd rather do that at the same time of moving from javax to jakarta, preferably on another PR
when we move to jdk-17, as the sonar scanner requires also at least jdk-17, the stage of the jenkinsfile could be simplified by undoing thie commit

cheers,
juan pablo

Hi,
couple of notes,
* the test-jar issue could be solved just by placing `<skip>false</skip>`just below/inside the [pom generating the test-jar](https://github.com/apache/jspwiki/blob/master/jspwiki-210-test-adaptees/pom.xml#L93). That config defaults to `${maven.test.skip}` and that's why on a clean environment the build fails (the artifact is not built)

  * `-DskipTests` skips test execution, whereas `-Dmaven.test.skip` skips tests execution _and_ compilation, so it's a bit faster. At the deploy stage test had already passed so that flag was added to speed the deploy a bit. Unsure how applying both flags solves the issue on a clean env (no 2.12.3-SNAPSHOT on local repository and `-o` passed to the build)

* non sonar builds are skipping tests; they shouldn't they help us ensure there are no problems with other JDKs

* as for switching to jdk-17

  * this would force everyone consuming the snapshot artifacts to forcibly use JDK-17. I'd rather do that at the same time of moving from javax to jakarta, preferably on another PR
  * when we move to jdk-17, as the sonar scanner requires also at least jdk-17, the stage of the jenkinsfile could be simplified by undoing thie [commit](https://github.com/apache/jspwiki/commit/8c0d55e344d3f48ca7747e05fa2306a32b72800c)

cheers, juan pablo

Hi @juanpablo-santos ,
Thanks for your feedback.
Test-Jar Issue:
    I added <skip>false</skip> to the maven-jar-plugin configuration in the jspwiki-210-test-adaptee module to ensure the test-jar is always built.

Test Execution:
    I will ensure that non-Sonar builds do not skip tests to maintain coverage and catch issues across different JDKs.

JDK-17 Integration:
    I agree that switching to JDK-17 and moving from javax to jakarta should be handled in a separate PR to ensure a smooth transition. Once we switch to JDK-17, we can simplify the Jenkinsfile accordingly.

Cheers,


MacOS Ollama  v.0.1.41 App Won't Install The Command Line

What is the issue?
Hi community,
I have a MacOS Sonoma 14.4.1 and my Ollama version is 0.1.41. I moved the app to the Applications folder then run the app, click the Next button, then click the Install button to install the command line but nothing happens. I tried running as an admin but still faced the same problem.
The temporary solution:
sudo cp /Applications/Ollama.app/Contents/Resources/ollama /usr/local/bin/
sudo chmod +x /usr/local/bin/ollama
ollama --version
OS
macOS
GPU
AMD
CPU
Intel, AMD
Ollama version
0.1.41

I had the same issue and this worked perfectly.

ollama version is 0.3.13

Hardware Overview:

      Model Name: MacBook Pro
      Model Identifier: MacBookPro18,3
      Model Number: MKGQ3LL/A
      Chip: Apple M1 Pro
      Total Number of Cores: 10 (8 performance and 2 efficiency)
      Memory: 16 GB
      System Firmware Version: 10151.140.19
      OS Loader Version: 10151.140.19

macOS version

 System Version:	macOS 14.6.1 (23G93)
  Kernel Version:	Darwin 23.6.0
  Boot Volume:	Macintosh HD
  Boot Mode:	Normal
  Secure Virtual Memory:	Enabled
  System Integrity Protection:	Enabled

@saimgulay are you still having trouble getting Ollama installed?  Please give the latest version a try and let us know.

Yes, the issue still persists.
I am trying to install Ollama version is 0.5.1 on macOS version 13.0.1. I moved the app to the Applications folder then run the app, click the Next button, then click the Install button to install the command line but nothing happens.


Responsive preview Looks off on YouTube

The preview image that appears seems slightly skewed on responsive settings. Once you click the giant play button it looks fine, but even with preview turned off it loads this skewed pane.

Sorry, wrong plugin.


simple lifetime check using nullptr

when a mut::Morphology is deleted, and it resets the mut::Section::_morphology
to null.
added getter to mut::Section to retrieve owning morphology that will
throw if the above pointer is null
attempt to fix https://github.com/BlueBrain/MorphIO/issues/161
This passes all the tests that were added for #234

I think this is really close to benoit's initial proposal except you only raise in the morpho scoped functions. I remember you were a bit shaky with the possible use of a raw pointer in the code (no one is forced to use the getOwningMorphologyOrThrow to access the morpho) and that s why we explored the weak pointer solution.
I must say there are pros and cons for both.
I prefer the simplicity and readability of this one and I prefer the robustness and formalism of the weak pointers.
Actually it depends also on who will create PR and do the reviews for morphio. The use of getOwningMorphologyOrThrow is some kind of external knowledge that should be propagated to the morphio developers/reviewers.

we discarded it because it's quite unsafe as nothing prevents the developper to use the raw morphology pointer

I don't know what you mean; it's a private field, so no one should use it without being quite clear on what it does.
Thanks for the old diff, it shows we need to test the iteration, and add the checks there, probably.

@asanin-epfl maybe you can provide some meaningful insights also on this one (and you will probably involved in morphio at some point).
Compared to :
https://github.com/BlueBrain/MorphIO/pull/234

robustness and formalism of the weak pointers.

Doesn't it have the danger of having to call _getMorphology() (https://github.com/BlueBrain/MorphIO/pull/234/files#diff-949ff3317c6653de6f8484f52baa7c652e49b0f89d47041bfd16315df8703f51R111)
The added complexity of having mut::Morphology having to be reference-able through a weak_ptr complicates things quite a bit, and the init() stuff seems like non-idiomatic C++, but, again, I haven't written much in quite some time.

Doesn't it have the danger of having to call _getMorphology() (https://github.com/BlueBrain/MorphIO/pull/234/files#diff-949ff3317c6653de6f8484f52baa7c652e49b0f89d47041bfd16315df8703f51R111)

This is indeed quite similar but with a small difference:
you cannot call _morphology and use it right away. You must "shared_ptr" it via a lock(). Which is imao a reminder of : there is something tricky here. Plus, when you do this the reflex is to test if the shared pointer exists or not.
If I understood correctly, one of the purpose of the weak pointers is to solve the problem of the double shared pointer ownership (class A possesses class B and B possesses A).

init stuff seems like non-idiomatic C++

Unfortunately, I have not seen many "reference" C++ codes for quite some time and I cannot tell if this is really a bad C++ practice or not. I think this is used when the design imposes it but it is usually avoided because you can have uninitialized objects.
As I said I am fine with your solution also and I think this is kinda easier to follow the life time of the object.

@asanin-epfl maybe you can provide some meaningful insights

Sorry, no insights from me.

you cannot call _morphology and use it right away. You must "shared_ptr" it via a lock().

Good point.
My current read on the situation is that this is a worthwhile check, but it comes at the cost of the consumers of the API having to use mut::Morphology in a certain way (ie: the no stack).
I think it's safer and more likely that the internal API devs will remember to getOwningMorphologyOrThrow, than the consumers remembering what is required to use a mut::Morphology.


Remove classification gyb

First step for removing the dependency on gyb files

Don’t you also need to delete Classification.swift.gyb?

🤦♂

Will o


Performance issue when trigger inserts into stream with active continuous view

If a trigger is configured to insert into a stream, and that stream has an active continuous view, then performance of inserts drops considerably (2ms to 10s for 100 rows inserted).
drop table if exists events cascade;
drop foreign table events_stream cascade;
drop function events_insert_func cascade;

create table events (
    id serial,
    timestamp_tz timestamptz,
    event_id int,
    state int
);

create foreign table events_stream ( id serial, timestamp_tz timestamptz, event_id int, state int ) server pipelinedb;

create or replace function events_insert_func() returns trigger as
$body$
begin
    insert into events_stream(id, timestamp_tz, event_id, state)
    values (new.id, new.timestamp_tz, new.event_id, new.state);
    return new;
end;
$body$
    language plpgsql;

create trigger events_insert_trigger after insert on events for each row execute procedure events_insert_func();

insert into events (timestamp_tz, event_id, state)
select now(), s.*, 0
from generate_series(1, 100) s;

testdb1=# \timing
Timing is on.
testdb1=# insert into events (timestamp_tz, event_id, state)
testdb1-# select now(), s.*, 0
testdb1-# from generate_series(1, 100) s;

INSERT 0 100
Time: 2.077 ms

create view events_cv1 with ( action = materialize) as
select max(id) as max_id
from events_stream;

insert into events (timestamp_tz, event_id, state)
select now(), s.*, 0
from generate_series(1, 100) s;

testdb1=# \timing
Timing is on.
testdb1=# insert into events (timestamp_tz, event_id, state)
testdb1-# select now(), s.*, 0
testdb1-# from generate_series(1, 100) s;

INSERT 0 100
Time: 10282.493 ms (00:10.282)

@andrew-blake we're taking a look at this now to see if we can repro. Stream insertion ack strength (pipelinedb.stream_insert_level) may be getting defaulted to something unexpected here...

@andrew-blake I can confirm we can easily reproduce this, thank you so much for the writeup. Something is most definitely wrong here, we'll have a fix out shortly.

@andrew-blake we can only repro this when pipelinedb.stream_insert_level=sync_commit. What is your pipelinedb.stream_insert_level set to?
It's meant to be set at sync_receive, with sync_commit only really being useful for testing purposes due to increased write latency.

Yes, it is set to sync_commit.  Apologies if that's only a development setting. If it is, perhaps that could be mentioned in the docs.
I can't recall why that value is a none default value. I can only assume I'd copied from: https://github.com/pipelinedb/pipelinedb/blob/master/bin/run-dev
Would you expect the performance to be a slow as I'd seen with sync_commit ? 10s to insert 100 rows seems too slow even for testing.

Would you expect the performance to be a slow as I'd seen with sync_commit ? 10s to insert 100 rows seems too slow even for testing.

@andrew-blake when called within the context of a trigger function, yes. What's happening is that each worker and combiner process is only reading a single event per execution, and on top of that the stream insert is blocking until the combiner commits the updated result to disk.
You'd see better throughput if you scaled up workers and combiners, but it would still be far from the performance of sync_receive, which is the setting the system is optimized for.
We will make a note of that in the docs, since it isn't a very useful setting for production workloads.

@andrew-blake docs have been updated--thank you for the suggestion and our apologies for the confusion.

Using the sync_receive setting, I see a much better performance - the query can now complete with inserting 100 rows.
Increasing this to 1000 rows, still shows poor performance. 6.794 ms compared to 1821.335 ms.
testdb1=# insert into events (timestamp_tz, event_id, state) select now(), s.*, 0 from generate_series(1, 1000) s;
INSERT 0 1000
Time: 6.794 ms
testdb1=#
testdb1=# create view events_cv1 with ( action = materialize) as select max(id) as max_id from events_stream;
CREATE VIEW
Time: 6.709 ms
testdb1=#
testdb1=# insert into events (timestamp_tz, event_id, state) select now(), s.*, 0 from generate_series(1, 1000) s;
INSERT 0 1000
Time: 1821.335 ms (00:01.821)
testdb1=#

These are my pipelinedb settings. Any ideas ?
select name, setting from pg_settings where name like 'pipeline%' order by 1;
                 name                  |   setting
---------------------------------------+--------------
 pipelinedb.anonymous_update_checks    | on
 pipelinedb.batch_mem                  | 262144
 pipelinedb.batch_size                 | 10000
 pipelinedb.combiner_work_mem          | 262144
 pipelinedb.commit_interval            | 50
 pipelinedb.continuous_queries_enabled | on
 pipelinedb.fillfactor                 | 50
 pipelinedb.ipc_hwm                    | 10
 pipelinedb.matrels_writable           | off
 pipelinedb.max_wait                   | 50
 pipelinedb.num_combiners              | 1
 pipelinedb.num_queues                 | 1
 pipelinedb.num_reapers                | 1
 pipelinedb.num_workers                | 1
 pipelinedb.queue_mem                  | 262144
 pipelinedb.sliding_window_step_factor | 5
 pipelinedb.stream_insert_level        | sync_receive
 pipelinedb.stream_targets             |
 pipelinedb.ttl_expiration_batch_size  | 10000
 pipelinedb.ttl_expiration_threshold   | 5
(20 rows)

@andrew-blake we can take a look at this but fundamentally there hasn't yet been any optimizations around inserting individual events from trigger functions. Currently continuous queries are optimized to be executed on batches of events, but what's most likely happening here is that you're getting one CQ plan execution per individual event, which incurs quite a lot of overhead as you can see. PipelineDB is optimized for throughput and not individual write latency.
You may want to increase pipelinedb.max_wait to cause workers to wait longer for more events to process.
For these very reasons, we're currently in the early stages of figuring out an integration with TSDB that makes sense and is performant. I don't think that trigger semantics are going to be the solution here, as there is a lot of overhead unnecessary overhead being incurred to execute an entire trigger function for each individual stream event.
We can take a closer look at this specific case to see if there's anything we can do here, but the right solution to this issue will be proper integration with TSDB.

Thanks for the explanation. It sounds like we should separately insert data into the stream and event table - which does work quickly.
I was hoping that the trigger would save effort, but no problem if that's not the use case you've optimised for.


upgrade: add the possibility to upgrade even when HEALTH_WARN

3a100cfa5265b3a5327ef6a8d382a8059391b903 introduced an early check to
fail if cluster isn't HEALTH_OK, this might be seen as a too agressive
check. Passing accept_health_warn=True as an extra var make it
possible to override this behavior.
Signed-off-by: Guillaume Abrioux<EMAIL_ADDRESS>

not sure whether it wouldn't be better to simply always allow HEALTH_OK and HEALTH_WARN?
@leseb @dsavineau thoughts?

mergify failure, I'm merging anyway


letsEncrypt not working with etcd

When I try to configure Traefik in combination with 'etcd' as a backend store, i can't get LetsEncrypt working.
traefik.toml (imported with storeconfig)
[web]
address = ":8080"
defaultEntryPoints = ["https"]
[entryPoints]
  [entryPoints.http]
  address = ":80"
    [entryPoints.http.redirect]
    entryPoint = "https"
  [entryPoints.https]
  address = ":443"
    [entryPoints.https.tls]
[acme]
email =<EMAIL_ADDRESS>storage= "/traefik/acme/account"
entryPoint = "https"
onDemand = false
OnHostRule = true
caServer = "https://acme-staging.api.letsencrypt.org/directory"
[[acme.domains]]
   main = "domain.tld"
   sans = ["www.domain.tld", "ww2.domain.tld"]
[etcd]
endpoint = "<IP_ADDRESS>:4001"
watch = true
prefix = "/traefik"

Output in the logs
Dec 02 09:23:18 core-01 rkt[21448]: [131075.886503] traefik[5]: time="2016-12-02T10:23:18+01:00" level=info msg="Skipping same configuration for provider etcd"
Dec 02 09:23:22 core-01 rkt[21448]: [131079.650257] traefik[5]: time="2016-12-02T10:23:22+01:00" level=debug msg="Challenge GetCertificate www.mydomain.tld"
Dec 02 09:23:22 core-01 rkt[21448]: [131079.650881] traefik[5]: time="2016-12-02T10:23:22+01:00" level=debug msg="Loading ACME certificates [www.mydomain.tld]..."
Dec 02 09:23:22 core-01 rkt[21448]: [131079.661423] traefik[5]: time="2016-12-02T10:23:22+01:00" level=debug msg="Challenge GetCertificate www.mydomain.tld"
Dec 02 09:23:22 core-01 rkt[21448]: [131079.662657] traefik[5]: time="2016-12-02T10:23:22+01:00" level=debug msg="Loading ACME certificates [www.mydomain.tld]..."
Dec 02 09:23:22 core-01 rkt[21448]: [131080.212813] traefik[5]: time="2016-12-02T10:23:22+01:00" level=debug msg="Challenge Present www.mydomain.tld"
Dec 02 09:23:22 core-01 rkt[21448]: [131080.238591] traefik[5]: time="2016-12-02T10:23:22+01:00" level=debug msg="Challenge Present www.mydomain.tld"

From the output in the logs I can't really find out what is exactly going on. I had a look at the source code to see where it might go wrong, but my Go knowledge is no-exiting atm.
Slack reference : https://traefik.slack.com/archives/support/p1480674299005971

+1

+1. I seem to have the same general issue
Slack reference: https://traefik.slack.com/archives/support/p1482885115000714

I can confirm that problem is regarding the usage of etcd and acme.
I tried with a single replica with no etcd usage for KV store, and it works perfectly.
Is someone working on this ?

Sadly, it seems that https://github.com/docker/libkv is not managing etcd locks and consul locks in the same way :'( More tests have to be done to confirm this but this is what I suspect...

Any news about this ?

This issue in libkv tracks this: https://github.com/docker/libkv/issues/106

Just want to add that this appears to be happening on zookeeper as well:
ERRO[2017-03-15T00:31:49Z] Datastore sync error: Object lock value: expected c6ff697f-3880-422d-9e06-2e44bb8ce18a, got , retrying in 588.410415ms
ERRO[2017-03-15T00:31:50Z] Datastore sync error: Object lock value: expected c6ff697f-3880-422d-9e06-2e44bb8ce18a, got , retrying in 738.289049ms
ERRO[2017-03-15T00:31:51Z] Datastore sync error: Object lock value: expected c6ff697f-3880-422d-9e06-2e44bb8ce18a, got , retrying in 1.151435232s
ERRO[2017-03-15T00:31:52Z] Datastore sync error: Object lock value: expected c6ff697f-3880-422d-9e06-2e44bb8ce18a, got , retrying in 1.965909627s
ERRO[2017-03-15T00:31:54Z] Datastore sync error: Object lock value: expected c6ff697f-3880-422d-9e06-2e44bb8ce18a, got , retrying in 2.138171143s
ERRO[2017-03-15T00:31:56Z] Datastore sync error: Object lock value: expected c6ff697f-3880-422d-9e06-2e44bb8ce18a, got , retrying in 5.3727141s

@andrew-t-l that's an unrelated problem IMO, I would suggest to open a new issue, I made a PR to libkv that will fix this, but I don't think it will change anything that it has to do with zookeeper

I may experience the same issue. I'll check when I get to my computer, but from memory, the account JSON is properly generated, but no certificate is ever requested from LE (from what I can gather from the debug logs).
Will post my etcd config and logfiles.

Full trace:
2017-04-18T03:11:45.562113969Z time="2017-04-18T03:11:45Z" level=debug msg="Transaction a751858a-c444-4675-acdf-c057f65efa5d begins"
2017-04-18T03:11:45.939267691Z time="2017-04-18T03:11:45Z" level=debug msg="Challenge GetCertificate grafana.kube.[redacted].org"
2017-04-18T03:11:45.939292422Z time="2017-04-18T03:11:45Z" level=debug msg="Loading ACME certificates [grafana.kube.[redacted].org]..."
2017-04-18T03:11:45.939295958Z legolog: 2017/04/18 03:11:45 [INFO][grafana.kube.[redacted].org] acme: Obtaining bundled SAN certificate
2017-04-18T03:11:46.255160863Z legolog: 2017/04/18 03:11:46 [INFO][grafana.kube.[redacted].org] AuthURL: https://acme-v01.api.letsencrypt.org/acme/authz/[redacted]
2017-04-18T03:11:46.255181716Z legolog: 2017/04/18 03:11:46 [INFO][grafana.kube.[redacted].org] acme: Could not find solver for: dns-01
2017-04-18T03:11:46.255184646Z legolog: 2017/04/18 03:11:46 [INFO][grafana.kube.[redacted].org] acme: Trying to solve TLS-SNI-01
2017-04-18T03:11:46.255187033Z time="2017-04-18T03:11:46Z" level=debug msg="Challenge Present grafana.kube.[redacted].org"

I looked through the code, it seems like it gets stuck in the acme code after here, which calls this traefik function.
At that point we might get stuck in either the KV transaction, the Golang lock or if none of that happens, execution jumps back to here , which might loop forever if the request is permanently pending. Because after validate() has completed the defer hook for CleanUp() is run (which would log a message), we know that validate() never terminates.
When I get more time I might insert some print statements to see exactly where it gets stuck.

Narrowed it down to the etcd transaction, adding further debug output

My logs are a lot less verbose than yours (or fail before yours):
level=debug msg="Building ACME client..."
level=info msg="Starting ACME renew job..."
level=debug msg="Challenge GetCertificate redacted.com"
level=debug msg="ACME got nothing redacted.com"

Is there anything I could do to get more verbose logs?

You can enable debug logs in etcd for both traefik and acme. Set /traefik/loglevel to DEBUG and /traefik/acme/acmelogging to true.

Both are already set, /traefik/debug and /traefik/acme/acmelogging are true, and /traefik/loglevel is set to DEBUG.

You might need to also set the debug flag in the configuration file and not just etcd. The above log output was produced by a stock traefik with these flags.

Yeah, that doesn't change anything, even with debug and log options set on the command line. The only log line I see regarding ACME is the Challenge GetCertificate one.
For reference, I got traefik running in k8s pods, on GCE, with the following ACME config in etcd:
/ # etcdctl get /traefik/acme/email
<EMAIL_ADDRESS>/ # etcdctl get /traefik/acme/ondemand
true
/ # etcdctl get /traefik/acme/onhostrule
true
/ # etcdctl get /traefik/acme/storage
traefik/acme/account
/ # etcdctl get /traefik/acme/entrypoint
https
/ # etcdctl get /traefik/acme/domains/0/main
redacted.com

Everything was working fine when configuring through the config file and storing LE certificates in a plain file. So I guess this might be related to etcd as well.

I deployed a freshly built binary of traefik (through make build) and here the logs show up. It seems to be stuck at the exact same point as @lorenz (Challenge Present redacted.com).

Well I debugged the whole thing, it essentially boils down to the mentioned docker/libkv#106 issue. I started the etcdv3 upgrade for libkv to actually have proper locking, but the libkv interface maps badly onto etcdv3 concurrency primitives. I'll see what I'm going to do, maybe I'm also going to rewrite cluster.Store, since the original interface abstraction would make a ridiculous number of etcdv3 calls for an essentially simple operation.

Ran into this issue today. Might be worth noting the issued with etcd in the docs somewhere

+1 on this. Is there a good workaround?

@trusch, the only workaround I've found is to just use Consul instead. It seems to be the only key/value provider that works correctly with ACME.
Here's a rough proof of concept that will get Consul up and running in Rancher.

I'm catching up on this issue, trying to slowly get the libkv repository back on track. In the meantime I'll start working on the etcd v3 backend which should hopefully fix the problem (I see it has a proper Mutex API now which was not the case when I originally opened docker/libkv#103 and docker/libkv#106).
As @lorenz mentioned above, the interface probably maps badly with the new lock implementation but I'll be aiming for something that works at first. We can later discuss about a possible interface change to better map with new primitives.
I'll update as soon as I have some results.

Update: I got the Lock working with the v3 client (using the same model as for zookeeper: a side-key for the lock). It works as intended and it's pretty clean now compared to v2, just a few lines of code.
What's left:

Finish, Polish and Test the v3 backend: I'm missing calls like Watch/WatchTree and List/DeleteTree.
I realized I can also probably fix the v2 custom lock feature using the same method with a side-key (Yay!)

Will update again as soon as I drop a PR.

Initial PR for etcd V3 is up: https://github.com/abronan/libkv/pull/4
Would appreciate some help on testing in real usage (and with traefik maybe?). Will wait for feedback and also (re)-reviewing myself before merging.

@kelchm @abronan I'm not having any joys as consul and seeing the same bug as you guys are in etcd

everything is merged into abronan/libkv! I hope this fixes will be integrated in near future :)

Let me know if everything works out fine or if there are still remaining issues and I'll take a look. Feel free to open an issue on the fork as well. I may create a new repository as some have issues with import paths and the fact that it still points to the docker/libkv repository (some package managers support aliasing, some not). But we'll migrate issues if we go forward with that approach.

This seems to still be an issue. Tried with traefik 1.7.4 and an etcd-3.3.9.


a possible error in the image of the paper

The text recognition part of the figure2. GT and Prediction may be reversed.

Thanks. The v2 version will be updated this week.


Automatically resend failed data when connection is re-established

migrated from https://github.com/snowplow/snowplow/issues/3918

Closing because it has been with no activity for a long time.
Please, feel free to reopen or comment this issue, whether it's of your interest or you want to contribute on this.
The automatic resending will be improved in the next versions adopting a common pattern for many of the trackers.


Pointers

@satra or @dbkeator , could you point me to the PyNIDM search tool that queries scicrunch interactively?

@adswa It's the "map_vars_to_terms" function in  Utils.py.
To see how I use it look at CSV2NIDM


Show correct Web UI metrics y-axis type for each graph

fixes #12989

@LuQQiu ptal, thanks

LGTM, thanks for updating the web UI metrics!

alluxio-bot, merge this please

alluxio-bot, cherry-pick this to branch-2.5 please


Add generators and shrinkers for SelectionLimit and SelectionSkeleton.

Comments
This PR adds generators and shrinkers for SelectionLimit and SelectionSkeleton.
Issue Number
ADP-1118

Looks good to me :+1:

bors r+

bors retry


Is there anything i should be using for Anime upscale from "SIMILARITY" & "SCENE DETECT" ? (Question/Help)

Sorry if this are some shit questions, i am just trying to understand if anything would help me with this and possibly speed up the process. Thank you.
I am not familiar on how these work. Should i at least be using the one with no AI Detection ?
clip = core.misc.SCDetect(clip=clip, threshold=0.100)
Also anything to use from here that would help with anime ?
###############################################
# SIMILARITY
# Set properties in clip for it to be applied
# SSIM for deduplication in frame interpolation

# offs1 = core.std.BlankClip(clip, length=1) + clip[:-1]
# offs1 = core.std.CopyFrameProps(offs1, clip)
# 0 = PSNR, 1 = PSNR-HVS, 2 = SSIM, 3 = MS-SSIM, 4 = CIEDE2000
# clip = core.vmaf.Metric(clip, offs1, 2)

There are 2 kinds of dedup, vfi dedup/sc and upscale dedup. I guess I could write it more clearly in the readme, but everything is in the config file. https://github.com/styler00dollar/VSGAN-tensorrt-docker/blob/1254e8e51233f9e849d879f897f726464d6dd13a/inference_config.py#L92-L97

There are 2 kinds of dedup, vfi dedup/sc and upscale dedup. I guess I could write it more clearly in the readme, but everything is in the config file.
https://github.com/styler00dollar/VSGAN-tensorrt-docker/blob/1254e8e51233f9e849d879f897f726464d6dd13a/inference_config.py#L92-L97

In your opinion is it worth using, is the speed gain large or is it something that might mess up and take frames as dupes when they arent ?

It depends on your conent of course. Average speedup was around 30% on animated content.


startup fails with invalid config, missing the log message

What did you do?
i made a mistake in my prometheus configuration file. i wrote metric_path instead of metrics_path. After restarting prometheus, it kept crashing with no error logging and exit code 2. I was stuck on this longer than i would like to admit. When reverting my config (removed newly added entry) it did start. However when i readded the error and did a curl -X POST localhost:9090/-/reload i did get a nice error message stating what my error was:
failed to reload config: couldn't load configuration (--config.file="/config/prometheus.yml"): parsing YAML file /config/prometheus.yml: yaml: unmarshal errors:
  line 53: field metric_path not found in type config.ScrapeConfig

What did you expect to see?
i expect prometheus to log the same issue (cannot validate configuration) on startup
What did you see instead? Under which circumstances?
no error logging, just exit code 2 in my docker container
Environment

System information:
insert output of uname -srm here
Linux 3.10.0-1160.2.1.el7.x86_64 x86_64

Prometheus version:
insert output of prometheus --version here
  prometheus, version 2.22.1 (branch: HEAD, revision: 00f16d1ac3a4c94561e5133b821d8e4d9ef78ec2)
  build user:       root@516b109b1732
  build date:       20201105-14:02:25
  go version:       go1.15.3
  platform:         linux/amd64

I cannot reproduce this, I get an error on stderr as expected.

Thanks for your fast reply.
thats good to know, than it might me my setup (docker stack within docker swarm) that doesn't properly sends out the error log on startup
Only seeing the exit code 2 when docker inspect-ing the container

That sounds like an issue with your setup rather than Prometheus. Can you reproduce outside of Docker?

i'll try, if this still is an issue, i'll reopen the ticket


Xml / xml api usage cleanup

workaround for JDK-8029437 if we ever use JDK xml parsers. Only change is to use xml 1.0 instead of 1.1.
and fix api usage to use standard api for obtaining parsers instead of impl specific one

Windows Build 2048 is now running using a merge of 44db44c8f0658d024139bc19d8ddee919f1baf2c

Linux with security manager Build 1872 is now running using a merge of 44db44c8f0658d024139bc19d8ddee919f1baf2c

Linux Build 6981 is now running using a merge of 44db44c8f0658d024139bc19d8ddee919f1baf2c

Linux with security manager Build 1872 outcome was SUCCESS using a merge of 44db44c8f0658d024139bc19d8ddee919f1baf2c
Summary: Tests passed: 871, ignored: 280 Build time: 0:06:33

Windows Build 2048 outcome was SUCCESS using a merge of 44db44c8f0658d024139bc19d8ddee919f1baf2c
Summary: Tests passed: 2915, ignored: 342 Build time: 0:49:42

Linux Build 6981 outcome was FAILURE using a merge of 44db44c8f0658d024139bc19d8ddee919f1baf2c
Summary: Tests failed: 1, passed: 2912, ignored: 342, muted: 2 Build time: 0:52:05
Build problems:
Failed tests detected
Failed tests
org.jboss.as.test.integration.ws.wsse.signencrypt.EJBSignEncryptTestCase.encryptedAndSignedRequest: <no details avaliable>

Linux with security manager Build 2106 is now running using a merge of 2acd55eb11cda71c2b2cb6501669a31abcc99dae

Windows Build 2290 is now running using a merge of 2acd55eb11cda71c2b2cb6501669a31abcc99dae

Linux Build 7237 is now running using a merge of 2acd55eb11cda71c2b2cb6501669a31abcc99dae

Linux with security manager Build 2106 outcome was SUCCESS using a merge of 2acd55eb11cda71c2b2cb6501669a31abcc99dae
Summary: Tests passed: 897, ignored: 285 Build time: 0:07:38

Windows Build 2290 outcome was SUCCESS using a merge of 2acd55eb11cda71c2b2cb6501669a31abcc99dae
Summary: Tests passed: 2981, ignored: 359, muted: 1 Build time: 0:48:38

Linux Build 7237 outcome was SUCCESS using a merge of 2acd55eb11cda71c2b2cb6501669a31abcc99dae
Summary: Tests passed: 2983, ignored: 358 Build time: 0:50:44


Some Bugs about Upscale and LoRa

Hello, sir, it's me again. Upscale part is not showing up in 'generate tab', in additionally the 'upscale 2x' part distorts the image badly. Also we still can't adjust the LoRa weights. I added the ss.

The LoRAs menu doesn't work for custom workflows, only the default workflow generator - also don't directly muck with it in the advanced tab, use the LoRAs menu if you're going to use the workflow generator.

The Load Upscale Model should show up if-and-only-if you have more than 1 upscale model available (ie there's anything to choose from).
If you use the Generate tab without custom workflows, there's upscaling options under the Refiner group


Chart color and register color out of sync

Hi,
After we keep the chart running for some time. The chart colors and the register colors will become out of sync. In our app, we update the chart periodically and we will push a new array into the chart if there is update to the array. After a while, the color will be out of sync.

We need to fix. Can be part of #9

fixed in 0.3.3


codes_get_message_offset and codes_get_message_size

When building file indexes you need the offset and length of messages. These are available from eccodes with:

codes_get_message_offset
codes_get_message_size

Is it possible to add this functionality, or is it already available in some way?

i discovered that I could get them like:
            let offset_f: f64 = msg.read_key("offset")?;             let offset: i64 = offset_f as i64;             let length: i64 = msg.read_key("totalLength")?;

Hi, sorry for a delayed response. Did you manage to solve your issue or is there some potential new feature that would be helpful to you?
I'm personally not familiar with codes_get_message_offset and codes_get_message_size and they don't appear in ecCodes documentation so I didn't know they could be needed.
I guess KeyedMessage could have methods offset() and size(), which would directly return the size and offset, but I don't know if that would be any better than just  read_key().
Also, if read_key() returns error for the offset key and i64, you can use read_key_unchecked() which should work just fine.


Allow Sending Rand Values to Rune

Current I cannot run the sine rune example with my own inputs. Also I can't see the input given
0.2
1.0
-2
1.2
4.2
0.0
➜  rune git:(master) ✗ RUST_LOG=info cargo run --bin rune --release -- run examples/sine/sine.rune --capability=rand:test.raw -r 10
    Finished release [optimized] target(s) in 0.19s
     Running `target/release/rune run examples/sine/sine.rune '--capability=rand:test.raw' -r 10`
[2021-05-09T18:57:01.423Z INFO  rune::run] Running rune: examples/sine/sine.rune
[2021-05-09T18:57:01.439Z INFO  runicos_base::image] Serial: {"type_name":"f32","channel":2,"elements":[4.8617184e-2],"dimensions":[1]}```

I believe this can be closed because you can accomplish it via the RAW capability. @kthakore, feel free to reopen it if you think there's more we can do from the rune side.


remove nest asyncio

;

Can we follow the defined development workflow to treat this as a development with its expected feature branch?


refactor(observables): set all account balances to local storage

fixes #1072

The FT balance changes randomly after a transaction:

and remains the same for all sub-accounts and the main account:

https://user-images.githubusercontent.com/69896204/122930536-bf0e8900-d374-11eb-98d5-563dbd383ce0.mov
and #1142 #1141 #1143
Wallet:
Balances - pass
Send ae - pass
Send ae via QR - pass
Receive ae- pass
Send FT - pass
Receive FT - pass, but not received yet
TX history - pass
Info about a transaction - pass
Send Tip - pass
Claim tip - pass
Create an invite link - pass
Top -up - pass
Claim back - pass
Register a name - pass (testnet)
Set as default - pass
Set name pointer - pass
Extend - pass
Settings - pass

The FT balance changes randomly after a transaction:

and remains the same for all sub-accounts and the main account:

2021-06-<IP_ADDRESS>.mov
and #1142 #1141 #1143
Wallet:
Balances - pass
Send ae - pass
Send ae via QR - pass
Receive ae- pass
Send FT - pass
Receive FT - pass, but not received yet
TX history - pass
Info about a transaction - pass
Send Tip - pass
Claim tip - pass
Create an invite link - pass
Top -up - pass
Claim back - pass
Register a name - pass (testnet)
Set as default - pass
Set name pointer - pass
Extend - pass
Settings - pass
This is fixed in https://github.com/aeternity/superhero-wallet/pull/1016

@Liubov-crypto
Issues with FT are fixed in #1016

Checked, LGTM.


meaning of qav loss

good job! and i can repeat the experiment and get convincing data, since i notice the vaq loss is really useful, and this verify the idea in paper.
however, i wanna know is there any meaning of qav loss? that is the task of restoring video from qa. because i notice the qav loss is not that useful for training better model, and sometimes training with qav loss even perform worse than not.

explanation in paper:

This formulation enables video prediction via a unified text-generation-based QA model
with minimum modification.


AttributeError: 'str' object has no attribute 'logout'

Description of the problem
After successfully sent message I'm getting an error:
Cannot invoke service for `fbchat'
Traceback (most recent call last):
File "/opt/mqttwarn/lib/python2.7/site-packages/mqttwarn/core.py", line 508, in processor
notified = timeout(module.plugin, (srv, st))
File "/opt/mqttwarn/lib/python2.7/site-packages/mqttwarn/util.py", line 133, in timeout
raise it.exception
AttributeError: 'str' object has no attribute 'logout'
Environment information

Python version: 2.7.18rc1
fbchat version - 1.9.7

Please fix in v1 project - fbchat 1.9.7 available through pip.


[BUG]: reference() vs foreign keys

What version of drizzle-orm are you using?
0.29.3
What version of drizzle-kit are you using?
0.20.14
Describe the Bug
When using .reference() on a field:
productId: int("product_id").references(() => products.id, { onDelete: "cascade" }),

I can't set a custom name for the foreign key. It will be auto-generated by drizzle:
ALTER TABLE `order_details` ADD CONSTRAINT `order_details_product_id_product_id_fk` FOREIGN KEY (`product_id`) REFERENCES `products`(`id`) ON DELETE cascade ON UPDATE no action;

When defining a foreign key on a table:
productId: foreignKey({
  name: "product_id_fk",
  columns: [table.productId],
  foreignColumns: [products.id],
})

I'm able to define a custom name for the foreign key, but I can't set onDelete: "cascade":
ALTER TABLE `order_details` ADD CONSTRAINT `product_id_fk` FOREIGN KEY (`product_id`) REFERENCES `products`(`id`) ON DELETE no action ON UPDATE no action;

If I use both at the same time, I end up with multiple constraints:
ALTER TABLE `order_details` ADD CONSTRAINT `order_details_product_id_product_id_fk` FOREIGN KEY (`product_id`) REFERENCES `products`(`id`) ON DELETE cascade ON UPDATE no action;
ALTER TABLE `order_details` ADD CONSTRAINT `product_id_fk` FOREIGN KEY (`product_id`) REFERENCES `products`(`id`) ON DELETE no action ON UPDATE no action;

Expected behavior
I would like to set a custom name with onDelete: "cascade" on my foreign keys without having multiple constraints.
Environment & setup
macOS 14.3.1
node v20.11.0

https://github.com/drizzle-team/drizzle-orm/pull/1636 will let you use the action (onDelete) on the foreignKey declaration - so that you can have a custom name and a cascade deletion. I would have loved a nameparameter on the reference declaration but the foreingKey PR will do the job nicely.

Actually I found out it's already possible to add your on delete cascade to a custom named foreignkey. Cf https://discord.com/channels/1043890932593987624/1173301063642787880

Thank you very much @olup! I haven't seen that PR 😢
I would agree that having a name field in the reference itself makes it even simpler but I'm okay just being able to set a custom name using the foreignKey declaration at least.
Also, thanks for providing the alternative solution! 🤯  I'm going to try it right now.


Activity: Process payments via Stripe

Process payment via Stripe.
Acceptance Criteria:

Payment can be processed via Stripe

Tasks:

[x] Setup Stripe account
[x] #31
[x] Add card payment functionality to application

Estimate (XS, S, M, L, XL): L

Complete 6194554


Adding packagejson updates

This is where I've stopped > How are these tests working and comparing things again?

Just a heads up, you can review notebook changes like this using GitNotebooks.
e.g. this pull request https://gitnotebooks.com/cytoscape/ipycytoscape/pull/349
It's free for public repos, so might be helpful for y'all.


Querying all the posts of all users (via a limit and offset)

Hey there!
I actually have a question now that I tinkered with agdb a bit. Please bear with me, I am mostly used to "classic" relational databases.
I have customers and addresses. Each customer can have multiple addresses and an address could, theoretically, be used by multiple customers.
Now I want to query the customers with all their addresses. So how would I "join" the query? Or is it fine to first query all the customers (works super fine), then iterate over all of them and query their addresses?
Super simple example:

        #[derive(Debug, UserValue)]
        pub struct AddressInDb {
            pub db_id: Option<DbId>,
            pub street: String,
            pub house_number: String,
            pub post_code: String,
            pub city_name: String,
        }

        #[derive(Debug, UserValue)]
        pub struct CustomerInDb {
            pub db_id: Option<DbId>,
            pub name: String,
        }

pub async fn get_customers(
    offset: u64,
    limit: u64,
) -> Result<Vec<CustomerOverWire>, ServerFnError> {
    use agdb::{CountComparison, DbKeyOrder, QueryBuilder, QueryError, QueryResult};
    let mut db = db().await?;
    let customers: Vec<CustomerInDb> = db
        .exec(
            &QueryBuilder::select()
                .values(CustomerInDb::db_keys())
                .ids(
                    QueryBuilder::search()
                        .from("customers")
                        .order_by(vec![DbKeyOrder::Asc("name".into())])
                        .offset(offset)
                        .limit(limit)
                        .where_()
                        .distance(CountComparison::Equal(2))
                        .query(),
                )
                .query(),
        )?
        .try_into()?;
    println!(
        "customers in db at offset: {offset} and limit: {limit}: {:?}",
        customers
    );

    let customers = customers
        .into_iter()
        .map(|customer| {
            let addresses: Vec<AddressInDb> = db
                .exec(
                    &QueryBuilder::search()
                        .from(customer.id)
                        .where_()
                        .distance(CountComparison::Equal(2))
                        .and()
                        .beyond()
                        .where_()
                        .keys(vec!["belongs_to".into()])
                        .values(AddressInDb::db_keys())
                        .or()
                        .node()
                        .query(),
                )
                .try_into()?;
            println!(
                "Addresses for customer {customer.name} in db: {:?}",
                addresses
            );
            CustomerOverWire::from(customer)
        })
        .collect();

    /*
    let customers: Vec<CustomerOverWire> = customers
        .into_iter()
        .map(|c| CustomerOverWire::from(c))
        .collect();
    */
    Ok(customers)
}

#[server(AddCustomer, "/api")]
pub async fn add_customer(
    name: String,
    street: String,
    house_number: String,
    post_code: String,
    city_name: String,
) -> Result<i64, ServerFnError> {
    use agdb::{QueryError, QueryId, QueryResult};
    let mut db = db().await?;
    // FIXME transaction is needed here
    //db.transaction_mut(|t| -> Result<DbId, QueryError> {
    let customer = CustomerInDb { db_id: None, name };
    let customer: QueryResult =
        db.exec_mut(&QueryBuilder::insert().nodes().values(&customer).query())?;

    db.exec_mut(
        &QueryBuilder::insert()
            .edges()
            .from("customers")
            .to(&customer)
            .query(),
    )?;
    // Address
    let address = AddressInDb {
        db_id: None,
        street,
        house_number,
        post_code,
        city_name,
    };
    let address = db.exec_mut(&QueryBuilder::insert().nodes().values(&address).query())?;
    let customer = customer.elements.first().expect("there to be a customer");
    db.exec_mut(
        &QueryBuilder::insert()
            .edges()
            .from(vec![QueryId::from("addresses"), QueryId::from(customer.id)])
            .to(&address)
            .values(vec![vec![], vec![("belongs_to", 1_u64).into()]])
            .query(),
    )?;
    //    Ok(customer.id)
    //});
    Ok(customer.id.0)
}

I am stuck at the QueryBuilder::search() part right now. Maybe it's fine to issue 3 queries, as that seems how it's done in "Efficient agdb" as well.

Hi, there are no joins as in relational databases at the moment*. The joins need to be performed by the client application according to its needs. I believe you have two options here:

Change your schema so customer includes addresses (as addresses: Vec<AddressInDb>). This would be simplest but obviously it has costs like duplicity of data or inability to easily query customers by partial addresses (still possible for full though). I will assume you cannot do this but for completeness I wanted to mention it.

You are on the right track with your idea. Since you want to use limit, offset and the addresses can be duplicated between customers you cannot easily lift it off the graph in a single query (elements are not duplicated in the result and you cannot apply limit/offset only partially, i.e. to customers but not addresses). So with a little modification the two query version. Notice I have modified your address condition slightly with comments:

use agdb::{Db, DbError, DbId, DbUserValue, QueryError};
use agdb_derive::UserValue;

#[derive(Debug, UserValue)]
pub struct AddressInDb {
    pub db_id: Option<DbId>,
    pub street: String,
    pub house_number: String,
    pub post_code: String,
    pub city_name: String,
}

#[derive(Debug, UserValue)]
pub struct CustomerInDb {
    pub db_id: Option<DbId>,
    pub name: String,
}

pub struct CustomerOverWire {
    pub db_id: Option<DbId>,
    pub name: String,
    pub addresses: Vec<AddressInDb>,
}

pub async fn db() -> Result<Db, DbError> {
    Ok(Db::new("db")?)
}

pub async fn get_customers(offset: u64, limit: u64) -> Result<Vec<CustomerOverWire>, QueryError> {
    use agdb::{CountComparison, DbKeyOrder, QueryBuilder};
    let db = db().await?;
    let customers: Vec<CustomerInDb> = db
        .exec(
            &QueryBuilder::select()
                .values(CustomerInDb::db_keys())
                .ids(
                    QueryBuilder::search()
                        .from("customers")
                        .order_by(vec![DbKeyOrder::Asc("name".into())])
                        .offset(offset)
                        .limit(limit)
                        .where_()
                        .distance(CountComparison::Equal(2))
                        .query(),
                )
                .query(),
        )?
        .try_into()?;
    println!(
        "customers in db at offset: {offset} and limit: {limit}: {:?}",
        customers
    );

    let customers_over_wire = customers
        .into_iter()
        .map(|customer| {
            let addresses: Vec<AddressInDb> = db
                .exec(
                    &QueryBuilder::select()
                        .values(AddressInDb::db_keys())
                        .ids(
                            QueryBuilder::search()
                                .from(customer.db_id.unwrap_or_default())
                                .where_()
                                .distance(CountComparison::Equal(2)) //selects only adjacent edges == addresses
                                .and()
                                .beyond() //continues search only if...
                                .ids(vec![customer.db_id.unwrap_or_default()]) //starting node
                                .or()
                                .keys(vec!["belongs_to".into()]) //element with "belongs_to" key == edge leading to address
                                .query(),
                        )
                        .query(),
                )?
                .try_into()?;
            println!(
                "Addresses for customer {} in db: {:?}",
                customer.name, addresses
            );
            Ok(CustomerOverWire { //combine customer and addresses effectively achieving JOIN
                db_id: customer.db_id,
                name: customer.name,
                addresses,
            })
        })
        .collect::<Result<Vec<CustomerOverWire>, QueryError>>()?; //this is to allow fallible map: https://www.reddit.com/r/rust/comments/omsukl/falliable_iterators_why_no_try_map_for_iterator/

    Ok(customers_over_wire)
}

Hope it helps. :-) I would be happy to assist further if you need anything else.
*As for why no JOINs. A relational database join basically means that there is a discrepancy between data representation in the database and the data representation the application wants to consume. Regardless of where it is eventually normalized (in the db or in an app as in the above) it incurs a computational cost. The reasons FOR the joins is that it makes it easier for slow languages (TS, Python etc.) to effectively use databases and to get the data "ready-made". This makes little sense for C, C++ or Rust. Your specialized normalization will alwayss be faster than whatever generic joining algorithm on the database level. But prehaps more importantly it leads to complicated queries with unclear behaviour and even less clear performance that are hard to reason about or debug. I have seen thousands+ lines SQL query (no joke, singular - query) full of joins that essentially did such data normalization and processing from however many tables, views etc. Splitting it to steps would have been so much easier to maintain. You can see that already withthis relatively simple use case the agdb query is not exactly trivial and with joins it would be even worse.
But that being said I will consider adding such a capability if I would see that it adds notable benefits. Your very use case is compelling actually as the combination of limit, offset and "distributed object" might be exactly that. So thank you for this!

Thank you so much for this very detailed response!
I am not so sure that we need "joins" then. Even if it could make a few things more ergonomic for the end-user a graph db is not a classical RDBMS and I see very, very much appeal to keep the implementation as simple as possible.
Also the historical take about "in database functions/query engines with emphasize on joins because of slow client languages" makes so much sense, but I never thought about it this way, because I figured SQL is so old and even in 1992 it was more common to program in faster languages as PHP and Python et al were not a thing or not widespread at least.
Still, it makes total sense!
Anyway, I am currently stuck again, because I get:

Server Error: error running server function: Not enough keys (at src/customers/customers_backend.rs:14:25)
caused by
Not enough keys (at src/customers/customers_backend.rs:14:25)

I can share the whole thing of course... it will be open source anyway and it's nothing special, just note that it's using leptos :)
    use super::customers_protocol::{AddressOverWire, CustomerOverWire};
    use cfg_if::cfg_if;
    use leptos::*;

    cfg_if! {
        if #[cfg(feature = "ssr")] {
            use agdb::{Db, DbId, QueryBuilder, UserValue, DbUserValue, Comparison::Equal};

            pub async fn db() -> Result<Db, ServerFnError> {
                // FIXME/TODO can this even be safe at all? In a multi user environment that is
                Db::new("test.graph.db").map_err(|e| ServerFnError::ServerError(e.to_string()))
            }

            #[derive(Debug, UserValue)]
            pub struct AddressInDb {
                pub db_id: Option<DbId>,
                pub street: String,
                pub house_number: String,
                pub post_code: String,
                pub city_name: String,
            }

            #[derive(Debug, UserValue)]
            pub struct CustomerInDb {
                pub db_id: Option<DbId>,
                pub name: String,
            }

            impl From<AddressInDb> for AddressOverWire {
                fn from(db: AddressInDb) -> Self {
                    let id = db.db_id.map(|id| id.0);
                    Self {
                        id,
                        street: db.street,
                        house_number: db.house_number,
                        post_code: db.post_code,
                        city_name: db.city_name,
                    }
                }

            }
        }
    }

    #[server(GetCustomers, "/api", "Url", "customers")]
    pub async fn get_customers(
        offset: u64,
        limit: u64,
    ) -> Result<Vec<CustomerOverWire>, ServerFnError> {
        use agdb::{CountComparison, DbKeyOrder, QueryBuilder, QueryError, QueryResult};
        let mut db = db().await?;

        db.transaction_mut(|t| -> Result<Vec<CustomerOverWire>, ServerFnError> {
            let customers: Vec<CustomerInDb> = t
                .exec(
                    &QueryBuilder::select()
                        .values(CustomerInDb::db_keys())
                        .ids(
                            QueryBuilder::search()
                                .from("customers")
                                .order_by(vec![DbKeyOrder::Asc("name".into())])
                                .offset(offset)
                                .limit(limit)
                                .where_()
                                .distance(CountComparison::Equal(2))
                                .query(),
                        )
                        .query(),
                )?
                .try_into()?;
            println!(
                "customers in db at offset: {offset} and limit: {limit}: {:?}",
                customers
            );
            let customers = customers
                .into_iter()
                .map(|customer| {
                    let addresses: Vec<AddressInDb> = t
                        .exec(
                            &QueryBuilder::select()
                                .values(AddressInDb::db_keys())
                                .ids(
                                    QueryBuilder::search()
                                        .from(customer.db_id.unwrap_or_default())
                                        .where_()
                                        .distance(CountComparison::Equal(2)) //selects only adjacent edges == addresses
                                        .and()
                                        .beyond() //continues search only if...
                                        .ids(vec![customer.db_id.unwrap_or_default()]) //starting node
                                        .or()
                                        .keys(vec!["belongs_to".into()]) //element with "belongs_to" key == edge leading to address
                                        .query(),
                                )
                                .query(),
                        )?
                        .try_into()?;
                    println!(
                        "Addresses for customer {} in db: {:?}",
                        customer.name, addresses
                    );
                    /*
                    let addresses: Vec<AddressOverWire> =
                        addresses.into_iter().map(|db| db.into()).collect();
                        */

                    Ok(CustomerOverWire {
                        //combine customer and addresses effectively achieving JOIN
                        id: customer.db_id.map(|id| id.0),
                        name: customer.name,
                        addresses: vec![],
                    })
                })
                .collect::<Result<Vec<CustomerOverWire>, QueryError>>()?;
            Ok(customers)
        })
    }

    #[server(AddCustomer, "/api")]
    pub async fn add_customer(
        name: String,
        street: String,
        house_number: String,
        post_code: String,
        city_name: String,
    ) -> Result<i64, ServerFnError> {
        use agdb::{QueryError, QueryId, QueryResult};
        let mut db = db().await?;
        let customer = CustomerInDb { db_id: None, name };
        let address = AddressInDb {
            db_id: None,
            street: street.clone(),
            house_number: house_number.clone(),
            post_code: post_code.clone(),
            city_name: city_name.clone(),
        };
        db.transaction_mut(|t| -> Result<i64, ServerFnError> {
            let customer: QueryResult =
                t.exec_mut(&QueryBuilder::insert().nodes().values(&customer).query())?;
            t.exec_mut(
                &QueryBuilder::insert()
                    .edges()
                    .from("customers")
                    .to(&customer)
                    .query(),
            )?;

            let address = t.exec_mut(&QueryBuilder::insert().nodes().values(&address).query())?;
            let customer = customer.elements.first().expect("there to be a customer");
            t.exec_mut(
                &QueryBuilder::insert()
                    .edges()
                    .from(vec![QueryId::from("addresses"), QueryId::from(customer.id)])
                    .to(&address)
                    .values(vec![vec![], vec![("belongs_to", 1_u64).into()]])
                    .query(),
            )?;
            Ok(customer.id.0)
        })
    }

    #[server(DeleteCustomer, "/api")]
    pub async fn delete_customer(id: i64) -> Result<(), ServerFnError> {
        println!("Attempt to delete customer with id: {id}");
        let mut db = db().await?;
        db.exec_mut(&QueryBuilder::remove().ids(id).query())?;
        Ok(())
    }

Please don't feel obliged to help any further.  :)

Hi, no problem. The "not enough keys" is the symptom of selecting elements that do not have them. I believe it is because I have forgot to include the nested where_() after beyond() so the final ored condition actually caused the edges to be selected as well and they do not have all the keys addresses have. Should be just simply making the beyond() a nested condition:
QueryBuilder::search()
      .from(customer.db_id.unwrap_or_default())
      .where_()
      .distance(CountComparison::Equal(2)) //selects only adjacent edges == addresses
      .and()
      .beyond() //continues search only if...
      .where() //<-- forgot this
      .ids(vec![customer.db_id.unwrap_or_default()]) //starting node
      .or()
      .keys(vec!["belongs_to".into()]) //element with "belongs_to" key == edge leading to address
      .query()

Please let me know if it fixed it. :-)

Yes, with _where() (not the missing _) it works like a charm.
Thanks a lot!
And regarding the transaction: Yes, totally aware, that's why I mentioned it :D thanks a bunch and have a wonderful day!


[3.x] Initialize all variables in constructor to prevent undefined behavior

Issue description
3.x version of #43636
Due using unitialized variables, Godot may behave very strange and cause bugs like #52634.
To prevent such situations, all variables(except maybe buffers) should be initialized in constructor, because it is easy to forget to do it later.
So, initializing all variables in such class
class HashingContext : public Reference {
	void *ctx;
        int rar;
        bool q;
public:
	HashingContext() {
            ctx = memnew(something);
        }
	~HashingContext();
};

can be done in this way in 3.x branch
class HashingContext : public Reference {
	void *ctx;
        int rar;
        bool q;
public:
	HashingContext() {
            ctx = memnew(something);
            rar = 0;
            q = false;
        }
	~HashingContext();
};

Do not try to create PR which changes more than ~50-100 lines, because it will be hard to rebase after other users changes and also such small PR should be merged faster into 3.x branch.
Maybe cppcheck html report will be helpful to find such variables - report.zip

Remember to put here info that you work on e.g. core/ or servers/ folder

Hey @qarmin, Can you assign this issue to me.I would like to work on this

You need just write in what folder you are working in and no one else should bother you.
Remember to create a PR of max 50-100 lines and if you want to change more things, it is best to create another PR.

I'm going to look at /scene

Hello. I will take a look at /servers.

Hello, I'm going to look at /platform

Hello, I'm going to look at /drivers

Can I make break the work of a folder into more than one PR, since it's recommended to not change more than 50~100 lines per PR?

Can I break the work of a folder into more than one PR, since it's recommended to not change more than 50~100 lines per PR?

Yes, definitely 👍

Hi...I too  would like to work on this issue but I am having trouble knowing which folder is available to work. Can someone please help?
Cheers!

Hey everyone, I'll stat taking a look at /modules

Hello everyone, It seems like there's no pull request yet for /platform. I'll start working on it.

I'd like to apologize to first time contributors who tried to help with this refactoring effort, I should have flagged earlier that this wasn't that good a task for first time contributors, at least not with more guidance and making absolutely clear what a proper class member initialization should look like. Most PRs made for this effort ended up not being merged as they had issues, grew stale, and it's more work to update them for a seasoned contributor than to do the refactoring work from scratch.
Overall, Sep 2021 was already too late to start a major refactoring of the 3.x codebase I believe, at least without clear oversight from me or other core maintainers.
So I'll close this issue, let's keep such changes to actually solving cases where member variables are clearly not identified, and not refactoring all the initialization currently done in constructors. If static analysis tools can point at uninitialized members, we can fix those, without refactoring the whole codebase.


Pending ack persistent impl

to solve #7981
Motivation

we need to store pending ack state

implement

we use managedledger to store the state.
cumulative ack : we store the ack op with one postion and then commit or abort will delete it.
individual ack : we store the every ack op and commit or abort will delete the txn produce the postion

Verifying this change
Add the tests for it
Does this pull request potentially affect one of the following parts:
If yes was chosen, please highlight the changes
Dependencies (does it add or upgrade a dependency): (no)
The public API: (no)
The schema: (no)
The default values of configurations: (no)
The wire protocol: (yes)
The rest endpoints: (no)
The admin cli options: (no)
Anything that affects deployment: (no)

new implement in #8295


隐藏状态栏之后，导航栏上移

I will fix it in next version.

It seems a bug of iOS, and I can not found a solution of that.  :(
I create a simplest project which contains following item:

UINavigationController
ViewControllerA (rootViewController of navigationController)
ViewControllerB ( A push to B. B set preferredStatusBarHidden to true )

By adding following code to ViewControllerA may fix the movement of view. But it is so ugly.
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        // Force layout subviews
        let layoutContainerView = navigationController?.navigationBar.superview
        layoutContainerView?.setNeedsLayout()
        layoutContainerView?.layoutIfNeeded()
    }

I do not recommend you to hide status bar in a navigation stack(which will cause the inconsistency of layouts).
You can hide status bar in present view controller.

thx


The API CALL results in a 500 error */api/v1/property-group/{id}/translations

When writing a Shopware 6 Rest Client, the API CALL
GET */api/v1/property-group/{id}/translations
to a 500 mistake.
{
    "errors": [
        {
            "code": "0",
            "status": "500",
            "title": "Internal Server Error",
            "detail": "Argument 1 passed to Shopware\\Core\\Framework\\DataAbstractionLayer\\Cache\\EntityCacheKeyGenerator::getEntityContextCacheKey() must be of the type string, array given, called in /opt/bitnami/apps/shopware/htdocs/vendor/shopware/core/Framework/DataAbstractionLayer/Cache/CachedEntityReader.php on line 90"
        }
    ]
}

The test environment is based on the bitnami stack.
Shopware 6.1.1 is used.
Plugins: Demo data and PayPal were installed.

Hello,
thank you for creating this issue.
I have opened a ticket on our Issue Tracker for you. See the ticket link: https://issues.shopware.com/issues/NEXT-6860
Please use this ticket to track the state of your issue.

Duplicates #164

Duplicates #164


[FR] Request for changing the default mount address

Request for changing the default mount address.
The default mount address (which is "/tmp" in Linux) will be erased after the system reboot.
Can we change it to stable dir like the current user's home dir or somewhere?

solved by #79

solved by #79