KeepaliveD On Startup Not Accepting Connections

When the keepalived-cip initial starts the master attempt to setup the routes, but for some reason it wont accept connections until a change in the targets, like a scaling of echoheaders, causes it to re-load the keepalived config...
I0904 18:29:22.083291       1 main.go:231] cleaning ipvs configuration
I0904 18:29:22.096630       1 main.go:185] Creating API server client for https://<IP_ADDRESS>:443
I0904 18:29:22.097312       1 main.go:133] starting LVS configuration
I0904 18:29:22.123116       1 main.go:372] No interface was provided, proceeding with the node's default: eth0
W0904 18:29:22.151516       1 main.go:90] requeuing default/kubernetes, err unexpected error searching configmap keepalived-vip/ops-keepalive-kube-keepalived-vip: configmap ops-keepalive-kube-keepalived-vip was not found
I0904 18:29:22.236407       1 main.go:304] starting keepalived to announce VIPs
Tue Sep  4 18:29:22 2018: Starting Keepalived v1.4.4 (unknown)
Tue Sep  4 18:29:22 2018: WARNING - keepalived was build for newer Linux 4.9.88, running on Linux 3.10.0-862.9.1.el7.x86_64 #1 SMP Mon Jul 16 16:29:36 UTC 2018
Tue Sep  4 18:29:22 2018: Opening file '/etc/keepalived/keepalived.conf'.
Tue Sep  4 18:29:22 2018: Starting Healthcheck child process, pid=20
Tue Sep  4 18:29:22 2018: Starting VRRP child process, pid=21
Tue Sep  4 18:29:22 2018: Opening file '/etc/keepalived/keepalived.conf'.
Tue Sep  4 18:29:22 2018: Registering Kernel netlink reflector
Tue Sep  4 18:29:22 2018: Registering Kernel netlink command channel
Tue Sep  4 18:29:22 2018: Registering gratuitous ARP shared channel
Tue Sep  4 18:29:22 2018: Opening file '/etc/keepalived/keepalived.conf'.
Tue Sep  4 18:29:22 2018: Using LinkWatch kernel netlink reflector...
I0904 18:29:24.154581       1 keepalived.go:168] reloading keepalived
Tue Sep  4 18:29:24 2018: Opening file '/etc/keepalived/keepalived.conf'.
Tue Sep  4 18:29:24 2018: Got SIGHUP, reloading checker configuration
Tue Sep  4 18:29:24 2018: Opening file '/etc/keepalived/keepalived.conf'.
Tue Sep  4 18:29:24 2018: Initializing ipvs
Tue Sep  4 18:29:24 2018: Gained quorum 1+0=1 <= 1 for VS [<IP_ADDRESS>]:tcp:80
Tue Sep  4 18:29:24 2018: Gained quorum 1+0=1 <= 1 for VS [<IP_ADDRESS>]:tcp:80
Tue Sep  4 18:29:24 2018: Gained quorum 1+0=1 <= 1 for VS [<IP_ADDRESS>]:tcp:443
Tue Sep  4 18:29:24 2018: Activating healthchecker for service [<IP_ADDRESS>]:tcp:8080 for VS [<IP_ADDRESS>]:tcp:80
Tue Sep  4 18:29:24 2018: Activating healthchecker for service [<IP_ADDRESS>]:tcp:80 for VS [<IP_ADDRESS>]:tcp:80
Tue Sep  4 18:29:24 2018: Activating healthchecker for service [<IP_ADDRESS>]:tcp:443 for VS [<IP_ADDRESS>]:tcp:443
Tue Sep  4 18:29:24 2018: Registering Kernel netlink reflector
Tue Sep  4 18:29:24 2018: Registering Kernel netlink command channel
Tue Sep  4 18:29:24 2018: Registering gratuitous ARP shared channel
Tue Sep  4 18:29:24 2018: Opening file '/etc/keepalived/keepalived.conf'.
Tue Sep  4 18:29:24 2018: Using LinkWatch kernel netlink reflector...
Tue Sep  4 18:29:24 2018: VRRP_Instance(vips) Entering BACKUP STATE
Tue Sep  4 18:29:24 2018: VRRP_Instance(vips) removing protocol VIPs.
Tue Sep  4 18:29:24 2018: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]
Tue Sep  4 18:29:27 2018: VRRP_Instance(vips) Transition to MASTER STATE
Tue Sep  4 18:29:28 2018: VRRP_Instance(vips) Entering MASTER STATE
Tue Sep  4 18:29:28 2018: VRRP_Instance(vips) using locally configured advertisement interval (1000 milli-sec)
Tue Sep  4 18:29:28 2018: VRRP_Instance(vips) setting protocol VIPs.
Tue Sep  4 18:29:28 2018: Sending gratuitous ARP on eth0 for <IP_ADDRESS>
Tue Sep  4 18:29:28 2018: VRRP_Instance(vips) Sending/queueing gratuitous ARPs on eth0 for <IP_ADDRESS>
Tue Sep  4 18:29:28 2018: Sending gratuitous ARP on eth0 for <IP_ADDRESS>
Tue Sep  4 18:29:28 2018: VRRP_Instance(vips) Sending/queueing gratuitous ARPs on eth0 for <IP_ADDRESS>
Tue Sep  4 18:29:28 2018: Sending gratuitous ARP on eth0 for <IP_ADDRESS>
Tue Sep  4 18:29:28 2018: Sending gratuitous ARP on eth0 for <IP_ADDRESS>
Tue Sep  4 18:29:28 2018: Sending gratuitous ARP on eth0 for <IP_ADDRESS>
Tue Sep  4 18:29:28 2018: Sending gratuitous ARP on eth0 for <IP_ADDRESS>
Tue Sep  4 18:29:28 2018: Sending gratuitous ARP on eth0 for <IP_ADDRESS>
Tue Sep  4 18:29:28 2018: Sending gratuitous ARP on eth0 for <IP_ADDRESS>
Tue Sep  4 18:29:28 2018: Sending gratuitous ARP on eth0 for <IP_ADDRESS>
Tue Sep  4 18:29:28 2018: Sending gratuitous ARP on eth0 for <IP_ADDRESS>
Tue Sep  4 18:29:33 2018: Sending gratuitous ARP on eth0 for <IP_ADDRESS>
Tue Sep  4 18:29:33 2018: VRRP_Instance(vips) Sending/queueing gratuitous ARPs on eth0 for <IP_ADDRESS>
Tue Sep  4 18:29:33 2018: Sending gratuitous ARP on eth0 for <IP_ADDRESS>
Tue Sep  4 18:29:33 2018: VRRP_Instance(vips) Sending/queueing gratuitous ARPs on eth0 for <IP_ADDRESS>
Tue Sep  4 18:29:33 2018: Sending gratuitous ARP on eth0 for <IP_ADDRESS>
Tue Sep  4 18:29:33 2018: Sending gratuitous ARP on eth0 for <IP_ADDRESS>
Tue Sep  4 18:29:33 2018: Sending gratuitous ARP on eth0 for <IP_ADDRESS>
Tue Sep  4 18:29:33 2018: Sending gratuitous ARP on eth0 for <IP_ADDRESS>
Tue Sep  4 18:29:33 2018: Sending gratuitous ARP on eth0 for <IP_ADDRESS>
Tue Sep  4 18:29:33 2018: Sending gratuitous ARP on eth0 for <IP_ADDRESS>
Tue Sep  4 18:29:33 2018: Sending gratuitous ARP on eth0 for <IP_ADDRESS>
Tue Sep  4 18:29:33 2018: Sending gratuitous ARP on eth0 for <IP_ADDRESS>
I0904 18:30:40.152106       1 keepalived.go:168] reloading keepalived
Tue Sep  4 18:30:40 2018: Opening file '/etc/keepalived/keepalived.conf'.
Tue Sep  4 18:30:40 2018: Got SIGHUP, reloading checker configuration
Tue Sep  4 18:30:40 2018: Opening file '/etc/keepalived/keepalived.conf'.
Tue Sep  4 18:30:40 2018: Initializing ipvs
Tue Sep  4 18:30:40 2018: Activating healthchecker for service [<IP_ADDRESS>]:tcp:8080 for VS [<IP_ADDRESS>]:tcp:80
Tue Sep  4 18:30:40 2018: Activating healthchecker for service [<IP_ADDRESS>]:tcp:8080 for VS [<IP_ADDRESS>]:tcp:80
Tue Sep  4 18:30:40 2018: Activating healthchecker for service [<IP_ADDRESS>]:tcp:80 for VS [<IP_ADDRESS>]:tcp:80
Tue Sep  4 18:30:40 2018: Activating healthchecker for service [<IP_ADDRESS>]:tcp:443 for VS [<IP_ADDRESS>]:tcp:443
Tue Sep  4 18:30:40 2018: Registering Kernel netlink reflector
Tue Sep  4 18:30:40 2018: Registering Kernel netlink command channel
Tue Sep  4 18:30:40 2018: Registering gratuitous ARP shared channel
Tue Sep  4 18:30:40 2018: Opening file '/etc/keepalived/keepalived.conf'.
Tue Sep  4 18:30:40 2018: VRRP_Instance(vips) setting protocol VIPs.
Tue Sep  4 18:30:40 2018: Using LinkWatch kernel netlink reflector...
Tue Sep  4 18:30:40 2018: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]

This is deployed with the helm chart.

Not sure what you mean. It looks to me like it starts at 18:29:22.083291 and then two seconds later at 18:29:24.154581 it reloads the keepalived configuration and begins sending gratuitous ARP for the new VIPs. The two second gap is because it starts keepalived with an empty configuration until it can retrieve the keepalived configmap and service endpoints to populate it with the actual configuration. Are you saying this 2 second gap is an issue?

The keepalived does not accept connections until I manually triggered an update in the config..

Please try with latest version.


⚠ SceneTime has degraded performance

In 4363cdf, SceneTime ($ST) experienced degraded performance:

HTTP code: 200
Response time: 10755 ms

Resolved: SceneTime performance has improved in e2466aa after 5 minutes.


Add course reload button and automatic quiz display (visible)

Checklist

[ ] I tested all changes and all related features with different users (student, tutor, instructor, admin) on the test server https://artemistest.ase.in.tum.de.

Motivation and Context
This is a performance improvement. Some students tend reload the whole Artemis application if they do not see certain exercises or lectures. However, this can lead to performance problems, especially when > 1000 students reload the browser in lectures at the same time.
Description
This PR adds a for dashboard REST call for a single course and adds a reload button that triggers this call. This should reduce the performance impact on the server significantly compared to a browser reload. In addition, quizzes should be displayed automatically (using web sockets), when they are set to visible

[x] A quiz which is visible, but not yet started (without start time), should be displayed at the top of the exercise list

Steps for Testing

Log in to Artemis
Navigate to Course Overview. Double check that everything is shown correctly (and nothing is missing)
Navigate into one course
Click the reload button (student) --> nothing should change
Add a new exercises or lecture in a separate browser window / tab (instructor)
Click on the reload button: the exercise or lecture should be shown now (student)
Set a quiz without start time to visible (instructor)
The quiz should appear and be shown at the top (student)

Even though i am in WaldhauserSCourse it shows an exercise of testCourse

Even though i am in WaldhauserSCourse it shows an exercise of testCourse

I just tried this as well, it seems that if you are on a different course than the one the quiz is created for, the quiz will be displayed to you when it is created; but if you refresh with the "Refresh" button or full page refresh it is not displayed anymore

Everytime I reload the page the quiz shows up

For me only when it was created

Thanks for finding this bug. I just fixed it, so that the quiz exercise is only sent on the course channel

The Reload button is now gone?

Same, gone for me as well

Some part of the UI load with a delay and the quiz shows up again

please note that test server 3 is also used for some automated testing (with automatic deployment). I suggest you use test server 1 for testing this feature

Loading Lecture and Exercise with Reload Button works
Quiz shows up immediately when I set it to visible

I think I fixed it, please try again (when the build is finished)

I also fixed the order so that active quizzes are prioritizes before visible quizzes

I have a quiz currently ongoing

but on the course overview dashboard it still shows not exercise with the next due date.

My understanding is that on the course overview dashboard it should display the same question as in course exercise dashboard.

worked for me. Step 7 / 8 (I had to click the refreseh button, so that the quiz pops up, but I am pretty certain that was intended)

Is it normal that I see the TestReloadButtonQuiz, twice in the overview?

Yes, the row is always shown twice (also in production). I don't like this, but if at all this should be changed at a later stage.
Steps 7/8 should also work without clicking the refresh button. You need to have 2 browser windows open and ideally two different accounts.

I have a quiz currently ongoing

but on the course overview dashboard it still shows not exercise with the next due date.

My understanding is that on the course overview dashboard it should display the same question as in course exercise dashboard.
Other then that it works good for me.

If you have multiple active (or visible) quizzes in multiple courses, then it shows the first one which is found. If there is really only one active (or visible), then it should be the same

I tried again, the quiz does not appear when not using the refresh button, see screenshot. I used different users one instructor, one student

after clicking the button it appeared:

I fixed a small typo with a space in the WS topic subscription, now the quiz should automatically appear for the student when the instructor sets it visible.
The only missing TODO is that the ordering should be retriggered in course-overview.component.ts:91 so that the visible quiz automatically appears at the top

I fixed a small typo with a space in the WS topic subscription, now the quiz should automatically appear for the student when the instructor sets it visible.
The only missing TODO is that the ordering should be retriggered in course-overview.component.ts:91 so that the visible quiz automatically appears at the top

Ok, I was wrong, this already works as expected. I had 2 visible quizzes, therefore the order did not change. If there are no visible quizzes (i.e. no exercise in the top row) in the exercise overview and the instructor sets one quiz to visible, it should now appear automatically at the top.
Please wait for the latest build on Bamboo, deploy to test server 1 and try it out again.


Hard Coded Store

CryptoNetUtils.GetCertificateFromStore has the store location hard coded, the ability to specify the store location and name would be good.

@66656c6c6f7574  thank you for the I am working on a newer version and will take this with me.

@66656c6c6f7574 this feature now is implemented in breaking change release 2.1.0, try it and let me know, other wise you are welcome to create a new feature request. :)


Unable to install extensions with code --install-extension in bash.

Does this issue occur when all extensions are disabled?: No

This issue is exactly related to the installation of extensions. Certainly, we may install an extension when no extensions are installed.

Environment

VS Code Version: 1.66.2
OS Version: Ubuntu 20.04 (focal)

The same issue can be reproduced with ubuntu:bionic (18.04) and ubuntu:xenial (16.04). I have not tested it with ubuntu:impish or ubuntu:jammy.

Bug description :bookmark_tabs:
When writing Dockerfiles, I may need to install code extensions by bash commands like this:
code --install-extension hookyqr.beautify --extensions-dir "/root/.vscode/extensions" --user-data-dir "/root/.vscode/settings"

where hookyqr.beautify can be the ID of any extension.
Until 4/17/2022, this command can work well. However, since 4/18/2022, the command may cause the following issues:

Installing an extenstion take a lot of time, i.e. longer than expect.
For any random extension, the installation may meet a failure with Server returned 503. However, if run the same command again, the extension may be successfully installed. A similar problem is mentioned in the issue #57867.
For any random extension, the installation may meet a failure with Corrupt ZIP: end of central directory record signature not found. However, if run the same command again, the extension may be successfully installed. A similar problem is mentioned in the issue #117169.

Bug report :scroll:
Currently, when installing the extensions, we may meet such bugs:
Installing extensions...
Installing extension 'hookyqr.beautify'...
(node:374) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
(Use `code --trace-deprecation ...` to show where the warning was created)
Extension 'hookyqr.beautify' v1.5.0 was successfully installed.
Installing extensions...
Installing extension 'esbenp.prettier-vscode'...
(node:392) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
(Use `code --trace-deprecation ...` to show where the warning was created)
Extension 'esbenp.prettier-vscode' v9.5.0 was successfully installed.
Installing extensions...
Server returned 503

Installing extensions...
Installing extension 'hookyqr.beautify'...
(node:374) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
(Use `code --trace-deprecation ...` to show where the warning was created)
Extension 'hookyqr.beautify' v1.5.0 was successfully installed.
Installing extensions...
Installing extension 'esbenp.prettier-vscode'...
Corrupt ZIP: end of central directory record signature not found
Failed Installing Extensions: esbenp.prettier-vscode

Both of the two bugs happen randomly. It means that if we use the same command to install an extension, these bugs may happen or not happen. This problem is very annoying, because when we want to install a lot of extensions, it seems to have an inevitable failure with a non-specific extension.
My suspicion :thinking:
I have tried to download the extension file .vsix from the market website. For example,
https://marketplace.visualstudio.com/search?term=hookyqr.beautify&target=VSCode&category=All categories&sortBy=Relevance
I can find that the market website is not very stable now. But I can still download the extension if I refresh the page for several times.
After that, I can install the extension like this:
code --install-extension ./HookyQR.beautify-1.5.0.vsix --extensions-dir "/root/.vscode/extensions" --user-data-dir "/root/.vscode/settings"

This time, I can find the following phenomena:

It seems that there would be no Server 503 Error if the downloaded package is not an extension pack.
However, it is still possible for meeting a Corrput ZIP error, although the possibility is significantly reduced compared to use the online installation method. If I repeat the same command after a failure, it may be successfully installed.
The installation for the package may still stuck for a long time, although after a long wait, the package can be installed. The long-time-stuck happens randomly. It means that if I repeat the same command for installing the same downloaded extension, it may be installed instantly or take a long time.

So I guess that both code 1.66.2 and the market website have abnormal behaviors, please help me verify the problem. No proxy is used with my device. It can get access to any website without any problem.
How to reproduce :wrench:
Actually, I have written an example Dockerfile for reproducing this bug:
https://gist.github.com/cainmagi/fdf835fcc03b68749f4b0f473dae157a#file-install-vscode-readme-md
Use the following command to build the testing image:
git clone https://gist.github.com/cainmagi/fdf835fcc03b68749f4b0f473dae157a dockertest-vscode
docker build -t vscode:test --build-arg BASE_IMAGE=ubuntu:focal dockertest-vscode

If the users like, they could replace the base image with other Ubuntu releases, like ubuntu:bionic.
It should fail when installing the extensions at Step 11/14 now.

I am unable to install most extensions at this time as well.  Just turned on settings sync on a new machine and almost all extensions report:
[2022-04-19 10:12:14.723] [renderer1] [error] ["Invalid: Corrupt ZIP: end of central directory record signature not found","    at D.downloadInstallableExtension (vscode-file://vscode-app/c:/Program%20Files/Microsoft%20VS%20Code/resources/app/out/vs/code/electron-browser/sharedProcess/sharedProcessMain.js:76:222768)","    at async D.doRun (vscode-file://vscode-app/c:/Program%20Files/Microsoft%20VS%20Code/resources/app/out/vs/code/electron-browser/sharedProcess/sharedProcessMain.js:76:221147)"]
[2022-04-19 10:12:14.742] [renderer1] [error] Corrupt ZIP: end of central directory record signature not found: Invalid: Corrupt ZIP: end of central directory record signature not found

When downloading a .vsix from the marketplace I receive a similar error, I attempted that with Remote - SSH.
Repeatedly attempting to install the same extension will eventually succeed though, seems the marketplace is having serious issues.

I'm having the same issues. I reinstalled windows 11 and tried with a clean install of vscode but still got the same results.

LMAO, yesterday atom also starts to have a server 500 error when installing plugins. I am wondering whether there is a large hacker team who is attempting to attack all popular code editors...
https://github.com/atom/apm/issues/946#issuecomment-1102844679

Have confirmed that my script can successfully get finished now.
git clone https://gist.github.com/cainmagi/fdf835fcc03b68749f4b0f473dae157a dockertest-vscode
docker build -t vscode:test --build-arg BASE_IMAGE=ubuntu:focal dockertest-vscode

Since I have not modified the script. I think Microsoft has fixed the Server issue. It should be caused by the temporarily low performance of the server.


Weird image errors in the simulator log

[tid:com.facebook.react.RCTExceptionsManagerQueue] Unhandled JS Exception: TransformError /Users/Shared/java/project/node_modules/react-native-action-button/example/Basic/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: Unexpected character '�' (1:0)

I don't think, this is a real issue. Rebuilding and restarting your app should do the trick.


Correction for raw affiliation School of Kinesiology and Leisure, Faculty of Health Sciences and Community Services, Université de Moncton, Moncton, New-Brunswick, Canada.

Correction needed for raw affiliation School of Kinesiology and Leisure, Faculty of Health Sciences and Community Services, Université de Moncton, Moncton, New-Brunswick, Canada.
raw_affiliation_name: School of Kinesiology and Leisure, Faculty of Health Sciences and Community Services, Université de Moncton, Moncton, New-Brunswick, Canada.
new_rors: 029tnqt29
previous_rors: 00jmfr291
works_examples: W647514735
contact: c4486727347a26966eacc642e0b05908:e8852dad @ ourresearch.org

This issue was accepted and ingested by the OpenAlex team on 2024-10-09. The new affiliations should be visible within the next 7 days.


Allow Page or elements of page to be exported as image

Great wrapper especially the support for monocle is neat!
I would really like to have the ability to get images from the dom, i.e. page.getDocument().getBody().getAsImage(Type.JPEG);
This would be very cool for serversided SVG renderings and serving them as jpeg to mobile devices.

Thanks for the suggestion.
I am able to capture the screen but i should find a suitable way to capture single DOM element.
package com.ui4j.sample;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javafx.animation.AnimationTimer;
import javafx.application.Platform;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.SnapshotParameters;
import javafx.scene.image.WritableImage;
import javafx.scene.web.WebView;

import javax.imageio.ImageIO;

import com.ui4j.api.browser.BrowserFactory;
import com.ui4j.api.browser.Page;
import com.ui4j.api.util.Ui4jException;

public class HackerNews {

	public static void main(String[] args) throws IOException {
		Page page = BrowserFactory.getWebKit().navigate("https://news.ycombinator.com");

		page.show();

		// https://javafx-jira.kenai.com/browse/RT-23265
		Platform.runLater(new Runnable() {

			@Override
			public void run() {

				final AnimationTimer timer = new AnimationTimer() {

					private int pulseCounter;

					@Override
					public void handle(long now) {
						pulseCounter += 1;
						if (pulseCounter > 2) {
							stop();
							WebView view = (WebView) page.getView();
							WritableImage snapshot = view.snapshot(new SnapshotParameters(), null);
							BufferedImage image = SwingFXUtils.fromFXImage(snapshot, null);
							try {
								ImageIO.write(image, "png", new File("capture.png"));
							} catch (IOException e) {
								throw new Ui4jException(e);
							}
						}
					}
				};

				timer.start();
			}
		});
	}
}

Thanks for considering this feature request! What you have is for sure a got start and could be implemented this way anyway. For the specific dom element, maybe as a workaround you can just hide all other elements in the dom using css?

Improve the Page.captureScreen based on this implementation.


Group settings UI tweaks + use pill UI for can_mention_group

Fixes: #32007 + converts can_mention_group to use pills.
Also changes the cursor to not allowed on checkmark icon on the group left sidebar when the user cannot leave this group.

Screenshots and screen captures:
General:

Cannot join this group:

Cannot leave this group:

Self-review checklist

[ ] Self-reviewed the changes for clarity and maintainability
(variable names, code reuse, readability, etc.).

Communicate decisions, questions, and potential concerns.

[ ] Explains differences from previous plans (e.g., issue description).
[ ] Highlights technical choices and bugs encountered.
[ ] Calls out remaining decisions and concerns.
[ ] Automated tests verify logic where appropriate.

Individual commits are ready for review (see commit discipline).

[ ] Each commit is a coherent idea.
[ ] Commit message(s) explain reasoning and motivation for changes.

Completed manual review and testing of the following:

[ ] Visual appearance of the changes.
[ ] Responsiveness and internationalization.
[ ] Strings and tooltips.
[ ] End-to-end functionality of buttons, interactions and flows.
[ ] Corner cases, error conditions, and easily imagined bugs.

@sahil839 Your review would be helpful here if you get time, thanks!

One another improvement we should do is that we should not allow removing pills when user is not allowed to edit the setting. We can just hide the "x" on the pill.

Agreed, I'll work on this either later tonight or tmr morning and push a commit on top of this.

Let's put periods on those tooltips, like we generally do for a full sentence.

Added those periods and merged, thanks @shubham-padia!


Master

Fixed DSP stuff for internal mic. Added pinconfig. External mic mask as
LineIn, still no headset support.
Added software DSP for internal speakers.

Oh, you even included my KP fix :) How kind of you.
Thanks


Make preset more useful

re #54
As it stands now preset isn't very useful as it only has the jquery style. Seeing as the config is fairly verbose it would be nice to have some ways to reuse it.
Would be useful if preset could have a searchpath in this order:

Check it with fs.exists if it's a valid path to a preset file
Try to require a node module with that name. Super useful for being able to distribute presets. Since "main" in package.json can be a .json file it could be the preset and requiring the module, would give you the preset config object.
the built-in preset.

Want to back this issue? Place a bounty on it! We accept bounties via Bountysource.

Can we get this done in 1.12? /cc @mdevils @zxqfox seems we just need to do the original suggestion and can defer the question of loading multiple presets together to a different issue at a different time.
I'll assign @zxqfox for now just so someone owns this.

Can take this one if @zxqfox don't mind

@markelog Feel free! I wanted to have deep extension here if possible: https://github.com/jscs-dev/jscs-jsdoc/issues/83 . There were idea to split google (with closurecompiler specific tags), wiki (with other set), etc.

Yeah, sounds good to me too. Just trying to get old issues addressed.

I agree that we can solve original issue (according to current roadmap) and make another issue for future. Just need to know what we can solve here.

Ability to load a preset by use of require so that presets can be distributed via npm.

@mikesherov We already have plugins functionality and it's pretty simple to make it: https://github.com/zxqfox/jscs-bem/blob/master/lib/index.js
I can suggest defining "jscs" or "jscs-plugin" right in package.json with "presets" section if we need something more but it looks pretty complex.
{
  "jscs-plugin": {
    "presets": ["hey-ho", "lets-go"]
  }
}

We already have package.json usage: https://github.com/jscs-dev/node-jscs/blob/master/test/data/configs/mixedWithPkg/package.json

@zxqfox preset option might be simple alternative to the plugin interface, so it would be easy to share such configs without digging into the API.
But i agree, it looks like creating plugin is easy too.
@mikesherov thoughts?
@sindresorhus would love to hear your opinion about that too.

@markelog I'm not against some sugar for presets. Feels like it would be very helpful for preset makers.

I'm not against some sugar for presets

It might be, or it might be duplicative. Not sure

My opinion is the same as before, making a preset should be as simple as creating json file and publishing it to NPM.

So... Consumer's config (.jscsrc file or something) will be the same as before:
{
  "preset": "somepreset"
}

And "somepreset" will be searched on:

Installed node_modules list;
Registered presets list (by plugins or core).

Publisher should name his NPM-package with jscs-preset- (or jscs- and special flag in package.json, to differentiate with usual plugins), create JSON, and publish these 2 files (package.json, and his somepreset.json).
@markelog @mikesherov Please correct me if I wrong.
@markelog And feel free to take this ;-) I'll be back in a couple days.

I would think the publisher would name her package jscs-my-wonderful-preset and in .jscsrc put:
{
  preset: "jscs-my-wonderful-preset"
}

This way, there is no magic.
But I'm also fine if we want JSCS to assume jscs-preset- prepended to the name so that the publisher of package jscs-preset-behance could just put the following in .jscsrc:
{
  preset: "behance"
}

I'd modify Mike's example to avoid mentioning jscs all together, just to show that the prefix is unimportant:
{
  preset: "my-npm-module-name"
}

Where my-npm-module-name could be whatever you'd require the module as (ex: require('my-npm-module-name'). We'll try to register the custom preset and if it doesn't adhere to the code standard for custom presets, then it'll fail. Otherwise, it should pass without a problem.

@mrjoelkemp yes, that's what I meant in my first example.

@mrjoelkemp In that case we require some jscs-preset/-plugin field in NPM package.json file as well as main field for main js file. Also we can use some default file name value like jscs-preset.js (like index.js for main). I just don't want to have inconsistencies in package.json usage, but I think we'll fix them at review state.
Okay. I think need to make something to make this talk subjective.

@zxqfox i'd like to take over this one with https://github.com/jscs-dev/node-jscs/issues/1083.

@markelog Is this function implemented?
And available on latest release?

Nope, proposed pull for it, considered as not back-compat, so only in 2.0 :-(

@markelog OK, thanks.
Then we can get this feature on next major release.


Adding erpc_setup_tcp.cpp

Adding TCP init function to be consistent with other transports

hello mentaal,
i can't find your commit in the official Download of eRPC. On which OS have you tested your Code? I want to implement RPC on an embedded Device with Ethernet-Interface running an FreeRtOS.
Best regards,
Kolja

Hi Jolja,
Indeed, I have it here as a pull request - it hasn't been merged yet. This is only a tiny convenience addition to provide a tcp transport initialization function conforming to the other transports. I have not tried running eRPC on FreeRtOS.

Closed, will be solved within #90


Add private ip address validity check

Updates:

Add isValidPrivateUrl function on rule-util and common-util
Add test case

Related issues:

https://github.com/ainblockchain/ain-blockchain/issues/699

PTAL. Sorry for poor dev for this. I must've been too tired. Updated regex and isValidJsonRpcUrl function!

PTAL!

Sorry for the tiny mistake. PTAL!

Thanks! Merging now!


[4653] Added translation for password change.

Related Issues
#4653
closes #4653
Short Description and Why It's Useful
Added i18n wrapper.
Upgrade Notes and Changelog

[x] No upgrade steps required (100% backward compatibility and no breaking changes)

[ ] I've updated the Upgrade notes and Changelog on how to port existing Vue Storefront sites with this new feature

[x] I read and followed contribution rules

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.You have signed the CLA already but the status is still pending? Let us recheck it.


Add more resources

Just a few more links that I had.

Approved. You probably need to resolve conflicts. Can you fix my links too? I think my markups are wrong... Thanks!


VEGA-1239 frontend changes to create document form

Make changes to create document form following design changes
Design: https://www.figma.com/file/2G9pvk1ET4KHlYN8LWbBrg/Sirius-LPA-2022-Create-doc-%26-edit-draft-widget?node-id=1%3A48&t=OknGqCPPTZeo6BLI-0
#minor

Codecov Report
Base: 73.40% // Head: 72.92% // Decreases project coverage by -0.47% :warning:

Coverage data is based on head (c03c189) compared to base (ff5f922).
Patch coverage: 52.30% of modified lines in pull request are covered.

:exclamation: Current head c03c189 differs from pull request most recent head 30247e0. Consider uploading reports for the commit 30247e0 to get more accurate results

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #240      +/-   ##
==========================================
- Coverage   73.40%   72.92%   -0.48%
==========================================
  Files          83       83
  Lines        3012     3066      +54
==========================================
+ Hits         2211     2236      +25
- Misses        576      601      +25
- Partials      225      229       +4

Impacted Files
Coverage Δ

internal/server/create_document.go
73.54% <52.30%> (-7.25%)
:arrow_down:

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

:umbrella: View full report at Codecov.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.


Request an example of a contact_sensor in the examples folder (CON-784)

Is your feature request related to a problem? Please describe.
Using the given examples, I cannot figure out how to build the app_main or app_driver for a contact_sensor using the GPIO pins of an ESP32
Describe the solution you'd like
Just a simple example added to the examples folder that illustrates how to utilize the contact_sensor device type
Describe alternatives you've considered
I considered the button type, however it seems to be a client, where I need the contact_sensor to be a server
Additional context
None

For contact sensor device type, you need to implement a Boolean State cluster. You can then implement a driver implementation around the Boolean State cluster's StateValue attribute, using the following convention:
FALSE = open or no contact
TRUE = closed or contact

This means that your app_driver_attribute_update_callback will change the state of your sensor device whenever the StateValue is updated. And, some callback say for example app_driver_sensor_state_change_cb which will change the state whenever there is a change in contact

Example:
// app_driver_attribute_update callback
esp_err_t app_driver_attribute_update(app_driver_handle_t driver_handle, uint16_t endpoint_id, uint32_t cluster_id,
                   uint32_t attribute_id, esp_matter_attr_val_t *val)
{
  esp_err_t err = ESP_OK;
  if (endpoint_id == contact_sensor_endpoint_id) {
      // Implement your own handle
      contact_sensor_driver_handle_t handle= (contact_sensor_driver_handle_t )driver_handle;
    if (cluster_id == BooleanState::Id) {
      if (attribute_id == BooleanState::Attributes::StateValue::Id) {
        err = sensor_device_set_state(handle, val);
  return err;
}

// app_driver_sensor_state_change_cb callback

static void app_driver_sensor_state_change_cb(void *arg, void *data)
{
    ESP_LOGI(TAG, "Toggle button pressed");
    uint16_t endpoint_id = light_endpoint_id;
    uint32_t cluster_id = BooleanState::Id;
    uint32_t attribute_id = BooleanState::Attributes::StateValue::Id;

    node_t *node = node::get();
    endpoint_t *endpoint = endpoint::get(node, endpoint_id);
    cluster_t *cluster = cluster::get(endpoint, cluster_id);
    attribute_t *attribute = attribute::get(cluster, attribute_id);

    esp_matter_attr_val_t val = esp_matter_invalid(NULL);
    attribute::get_val(attribute, &val);
    val.val.b = !val.val.b;
    attribute::update(endpoint_id, cluster_id, attribute_id, &val);
}

To implement app_main for a contact sensor device, you can do the following:

Initialize the contact sensor driver. Register app_driver_sensor_state_change_cb during initialisation under app_driver_contact_sensor_init(). The contact_sensor_state_change_cb callback is called whenever the contact sensor state changes.
Create a Matter node and add the mandatory Root Node device type on endpoint 0.
Create a contact sensor device type and configure it with the desired initial state and contact sensor state change callback.
Create an endpoint for the contact sensor device type and register it with the Matter node.
Here is an example:

app_driver_handle_t contact_sensor_handle = app_driver_contact_sensor_init();

/* Create a Matter node and add the mandatory Root Node device type on endpoint 0 */
node::config_t node_config;
node_t *node = node::create(&node_config, app_attribute_update_cb, NULL);

contact_sensor::config_t contact_sensor_config;
contact_sensor_config.state = CONTACT_SENSOR_STATE_OPEN;

endpoint_t *endpoint = contact_sensor::create(node, &contact_sensor_config, ENDPOINT_FLAG_NONE, contact_sensor_handle);

@PSONALl  I must have missed something in the documentation or something .. I can't figure out how these examples are built .. (short of looking at idf.py code) .. what causes the contact_sensor types / includes to be added to the projects?  I have no idea how to build the "app_driver_contact_sensor_init()" function ...

@Steven23456  Please provide more information about your contact sensor device.
Please provide an image of the device, this will help us to understand the device's physical layout and connections.

Just a simple contact wired to an ESP32 (GPIO 2 in this example) where that state of the contact (open/closed) is sent back to the matter hub when its state changes..

You can initialize the driver by setting the GPIO input pin to 2 in app_driver_contact_sensor_init
and whenever the state changes send the callback to the application when the state changes

You can implement a simple boolean contact sensor and register positive edge interrupt handler for the same like below
// Initialize the contact sensor driver
#define CONTACT_SENSOR_GPIO 2
app_driver_handle_t app_driver_contact_sensor_init() {
    gpio_config_t io_conf;
    io_conf.intr_type = GPIO_INTR_POSEDGE; // Positive edge-triggered interrupt
    io_conf.pin_bit_mask = (1 << CONTACT_SENSOR_GPIO);
    io_conf.mode = GPIO_MODE_INPUT;
    io_conf.pull_up_en = GPIO_PULLUP_DISABLE;
    io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;
    gpio_config(&io_conf);

    // Register the positive edge-triggered interrupt callback
    gpio_isr_handler_add(CONTACT_SENSOR_GPIO, app_driver_contact_sensor_state_change, (void*)CONTACT_SENSOR_GPIO);
}

you can refer this example in esp-idf for more details: https://github.com/espressif/esp-idf/tree/master/examples/peripherals/gpio/generic_gpio

Closing this as the reference is provided.

@Steven23456 Have you managed to get the contact sensor running? I am struggeling with the same issue and don't get it running, even with the provided help of @PSONALl

@Steven23456 Have you managed to get the contact sensor running? I am struggeling with the same issue and don't get it running, even with the provided help of @PSONALl

I've not had time.


Deletion of EOSIO contract tables

If you delete the teleport entries with delteles() you have to delete the entries of the cancel table, too. Otherwise new entries in the teleport table can use primary keys which are already taken by the cancel table. This leads to the situation that these entries of teleport table cannot be canceled.

Deleting old teleports in the teleport and cancel table without violating consensus is now enabled in my pull request #21


LUCENE-9854: Clean up utilities to download and extract test/ benchmark data sets.

Just a cleanup of existing tasks.

you can move it back to benchmarks if it's used only from there.

I didn't see them where I expected them to be

Btw. you should use 'gradlew -p lucene/benchmark tasks' for such queries - then the location of task definitions are less important? If you shuffle things around the build and in the gradle/ folder then things will get messy again, I think. In this particular case - sure, fine, I don't mind at all.

  More than anything, I wanted to get your perspective.

In this particular case I don't think there's much of a difference - you could place it inside the project's build file as well. I still think the 'tasks' list should be the place to look at when you're trying to locate a task name - the fact you can configure tasks from different places is one of the greatest and most annoying features at the same time... I understand you're puzzled because this has happened to me in the past as well. In my opinion (expressed previously), I think the task-based layout of gradle files (or classes, or plugins) is still superior to fragments of configuration scattered across build files. It lets you rip out/ modify things across the entire codebase from a single place (most of the time).
I've been actually thinking of moving some of those scripts to java/ precompiled code so that the bootstrap is faster - the scripts have been stable enough and there's been fewer changes to them so perhaps it's time....


jitterentropy: 3.5.0 -> 3.6.0

Automatic update generated by nixpkgs-update tools. This update was made based on information from https://github.com/smuellerDD/jitterentropy-library/releases.
meta.description for jitterentropy is: Provides a noise source using the CPU execution timing jitter
meta.homepage for jitterentropy is: https://github.com/smuellerDD/jitterentropy-library
meta.changelog for jitterentropy is: https://github.com/smuellerDD/jitterentropy-library/raw/v3.6.0/CHANGES.md
Updates performed

Version update

To inspect upstream changes

Release on GitHub

Compare changes on GitHub

Impact
Checks done

built on NixOS
The tests defined in passthru.tests, if any, passed
found 3.6.0 in filename of file in /nix/store/lwljifzvlrnw88aiy04kgmk9alv4ksgw-jitterentropy-3.6.0

Rebuild report (if merged into master) (click to expand)

4 total rebuild path(s)

4 package rebuild(s)

First fifty rebuilds by attrpath

esdm
jitterentropy
rng-tools

Instructions to test this update (click to expand)

Either download from Cachix:
nix-store -r /nix/store/lwljifzvlrnw88aiy04kgmk9alv4ksgw-jitterentropy-3.6.0 \
  --option binary-caches 'https://cache.nixos.org/ https://nix-community.cachix.org/' \
  --option trusted-public-keys '
  nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=
  cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
  '

(The Cachix cache is only trusted for this store-path realization.)
For the Cachix download to work, your user must be in the trusted-users list or you can use sudo since root is effectively trusted.
Or, build yourself:
nix-build -A jitterentropy https://github.com/r-ryantm/nixpkgs/archive/166330d2b1819fe808d176dd749db54762b481eb.tar.gz

Or:
nix build github:r-ryantm/nixpkgs/166330d2b1819fe808d176dd749db54762b481eb#jitterentropy

After you've downloaded or built it, look at the files and if there are any, run the binaries:
ls -la /nix/store/lwljifzvlrnw88aiy04kgmk9alv4ksgw-jitterentropy-3.6.0
ls -la /nix/store/lwljifzvlrnw88aiy04kgmk9alv4ksgw-jitterentropy-3.6.0/bin

Pre-merge build results
We have automatically built all packages that will get rebuilt due to
this change.
This gives evidence on whether the upgrade will break dependent packages.
Note sometimes packages show up as failed to build independent of the
change, simply because they are already broken on the target branch.
Result of nixpkgs-review run on x86_64-linux 1

1 package failed to build:

rng-tools

3 packages built:

esdm
jitterentropy
jitterentropy.dev

Maintainer pings
cc @JohnAZoidberg @c0bw3b for testing.

[!TIP]
As a maintainer, if your package is located under pkgs/by-name/*, you can comment @NixOS/nixpkgs-merge-bot merge to automatically merge this update using the nixpkgs-merge-bot.

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

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

4 packages built:

esdm
jitterentropy
jitterentropy.dev
rng-tools


Export RBAC

1.0.8 tested with CC
Can we remove roleBindings from export when there is no information?
Topic:
JSON: "roleBindings": null
YAML:  roleBindings: []

great!


HTPC Steam Deck-Gaming Mode: Force native Resolution possible?

Describe the bug
It is possible to force the native Resolution for the Gaming Mode without to Change each Game Settings?
It would be a very cool feature that ChimeraOS also uses in their gamescope plus.
What did you expect to happen?
Same as above
Output of rpm-ostree status
Unknown

Hardware
No response
Extra information or context
No response

This patch is already implemented and working for me, what issues are you having?

This patch is already implemented and working for me, what issues are you having?

When I connect my Steam Deck to the TV (gaming mode), I have to set the properties and resolution of each game from default to native.  otherwise it does not allow a resolution higher than 720/800p

This patch is already implemented and working for me, what issues are you having?

When I connect my Steam Deck to the TV (gaming mode), I have to set the properties and resolution of each game from default to native.  otherwise it does not allow a resolution higher than 720/800p

Can you rpm-ostree status for me?

Oh hold on, Steam Deck.
This is stock Valve behavior. Let me see if there's a way to override that and use the Chimera behavior.

Oh hold on, Steam Deck. This is stock Valve behavior. Let me see if there's a way to override that and use the Chimera behavior.

That´s the status.
deck@fedora:~$ rpm-ostree status
State: idle
Deployments:
● ostree-image-signed:docker://ghcr.io/ublue-os/bazzite-deck:stable
Digest: sha256:a0c8b3c6d8db35c53617209b90559099d7d11b91281171e7bae89ad9cc65ecdd
Version: 39.20240312.0 (2024-03-12T16:59:25Z)
Initramfs: '"-I /etc/crypttab /etc/modprobe.d/amdgpu.conf /etc/modprobe.d/deck-blacklist.conf"'
ostree-image-signed:docker://ghcr.io/ublue-os/bazzite-deck:stable
Digest: sha256:0a2204f5a96e9eb14affec41d09cf6035777626d190bfaabb9de48c954aca0f5
Version: 39.20240311.0 (2024-03-12T08:05:37Z)
Initramfs: '"-I /etc/crypttab /etc/modprobe.d/amdgpu.conf /etc/modprobe.d/deck-blacklist.conf"'

Oh hold on, Steam Deck. This is stock Valve behavior. Let me see if there's a way to override that and use the Chimera behavior.

That would be awesome, If you can Override this👍

I'm using environment to set up my device output resolution.
$ mkdir -p ~/.config/environment.d/
$ vim ~/.config/environment.d/resolution.conf
export RESOLUTION=" -W 1280 -H 720 "

Maybe it could try to export RESOLUTION environment to change the native resolution.
e.g. game resolution with -w & -h, and
output resolution with -W & -H parameters ?
$ vim ~/.config/environment.d/resolution.conf
export RESOLUTION=" -w 1920 -h 1080 -W 1920 -H 1080 "

Sorry for the long wait on this, was busy at a conference
Add: GAMESCOPE_ENABLE_720P_RESTRICT=0 to your /etc/environment file

Sorry for the long wait on this, was busy at a conference
Add: GAMESCOPE_ENABLE_720P_RESTRICT=0 to your /etc/environment file

Yes that worked. Thank you. Do you plan to add this in future Updates?

This is such so that the Deck can match stock Valve behavior, and other devices can use whatever their native is. We'll just want to document this better.
On Mar 18, 2024, 11:48 AM -0700, lm209 @.***>, wrote:

Sorry for the long wait on this, was busy at a conference
Add: GAMESCOPE_ENABLE_720P_RESTRICT=0 to your /etc/environment file
Yes that worked. Thank you. Do you plan to add this in future Updates?
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you commented.Message ID: @.***>


Update parcel.

Updating to parcel v2 b/c v1 (1) is deprecated and (2) was the source of a couple of vulnerabilities pointed out by dependabot.
I am following this helpful migration guide.

I think you need to get rid of "engines" in package.json otherwise it will imply the target execution environment for your js bundle is node: https://parceljs.org/getting-started/migration#--target


Epic: Error Messages

[x] https://github.com/quantified-uncertainty/squiggle/issues/302

Note: if we wait till at least alpha-v0.2, there will be a custom parser, making this much easier.

This is a pretty bad error message, btw; could be one thing to refactor.

#346 and #763 continue this and are more specific.


Remove daemonization

Encourage http://12factor.net/processes

:-1: I disagree. I like 12 factor, and we should support it, but daemonization is too important to drop.  It's a very common deployment target, and not everyone is on board with 12-factor, especially in the telephony world.

Can you name a single deployment of Adhearsion that requires daemonisation that we care about?

I can, but I can't here.  Will send you privately.

So as it turns out, neither of the two deployments which @bklang named privately actually use our daemonisation, instead relying on start-stop-daemon and similar, which are in effect implementations of the 12factor recommendation.
The remaining concern is that, by removing what is a traditionally understood feature from Adhearsion, the burden of documenting our recommendation for an improved way is on us. As such, we need to include on adhearsion.com a full tutorial on deployment to traditional environments. It is my belief that this should be based around pkgr, as it is sysadmin-friendly. If this gets merged, then such documentation would block the Adhearsion 3.0 release.

:+1:

@bklang Do the changes at https://github.com/adhearsion/adhearsion-website/pull/35 fully satisfy your documentation concerns?


Importing Blocks

When you import blocks (via JSON) any blocks that were collapsed come in collapsed but child 'blocks' appear where they would be as if they were not.

Blocks were being collapsed before their children were added.


Lift the alloc requirement from most of the traits

Currently, a lot of traits do require alloc. However and at a closer inspection, often this requirement is just for convenience features, like Cow (mqtt client traits), or usage of String (wifi trait configuration) which can be avoided either by using heapless (as the strings have an upper limit) or better yet - lifetimed &str.
Given that it might be very possible to provide completely alloc-free implementations of these traits (or at least of their asyncified versions), we should remove the alloc requirements from these traits.

Also important given that support for Embassy on the esp32* chips is picking up steam.

Done:

All errors demoted to either Error: Debug, or to the error from the embedded-io traits, which is now a hard dependency. Note that this WILL result in harder to use traits especially for folks who are used to into()-ing errors into anyhow::Error and then propagating up the call stack chain without any error inspection. This used to be possible before when all traits used to return an error trait which was Send + Sync + 'static so it was into()-able to anyhow::Error, but this is no longer the case
Module io now re-exports the sync and async traits from embedded-io
All String, Vec and Cow usages are replaced either with simple slices and &str references, or with heapless::String & heapless::Vec, depending on the context and the ease of use. heapless is now a hard dependency as well, but is used in a handful of structures
The experimental http::server traits are significantly simplified. They no longer have the old style APIs which returned a Response, as this pattern cannot be implemented without alloc
All asyncs modules renamed to asynch, to match the same naming convention in embedded-io

What is kind of important now is to validate the no-alloc async traits specifically (the various asynch modules). We should probably start with the HTTP client traits and (to some extent) the MQTT client, followed by the OTA traits.


Syncs that fail consistently are not "surfaced" very well

If there's a repo sync that's always failing, but also frequently re-queued, it will more often appear as "Queued" in the /repos page (and not Error - even tho it's consistently erroring). This makes sense given how we currently implement the status experience, however it's not a great UX because this is a sync that we want to bubble to the user as erroring frequently.
Can we consider an experience for surfacing these types of consistently failing syncs to the user more clearly? Maybe some kind of alert or banner that appears if a sync has failed consistently over N times?

Addressed in the latest updates to the /repos experience as we show errors on the last run of a sync.


adding protostar test action.

Hey,
This should solve issue #13
G.

Hey,
It should be fixed now, hopefully it is fine!
Have a nice day!
G.


Feature request - shelves and more details

Describe the solution you'd like
I'd like Steam shelves to be added in the grid-view. Additionally, I'd also like to see little details on the bottom of each game depending on what we've sorted in grid-view (see screenshots).
Screenshots

Closing as the requested features are not possible to be made via themes.

On second thought, the second feature is possible. It needs to be seen if it's feasible if there's a performance hit.

I'd love this, would be even better if it could be done as a tab within the list view just like steam does. It seems you can put anything in that box, people rearrange things In all sorts of ways for different themes.


Generate and release js types

For now, I'm just integrating this into the existing release flow (ie, doing it how we do the frameworks), so the types end up as downloadable from github releases and and downloaded into an npm-installed go-mobile module.

Ok after some flailing around testing that the js types build works, this is now g2g.


Build(deps-dev): Bump @typescript-eslint/eslint-plugin from 5.59.7 to 6.2.0 (#5000)

Pull request opened by the merge tool on behalf of #5000

Merged in bad461e91b5124ab31ba351ccb891d5c46badffe


Add case-insensitive validation in UniqueValidator and ExistValidator (for PostgreSQL)

Currently there seems to be no way to validate case-insensitive unique text values using UniqueValidator when working with PostgreSQL. This is particularly important in cases like detecting duplicate user names and emails during user registration. It would be good to provide a caseSensitive option as in as in Yii 1.0 to accommodate both case-sensitive and insensitive situations.

There is a not so simple way to do it already.
Lets say you have a User model with an username attribute.
public function getUsernameLowercase()
{
    return strtolower($this->username);
}

public function rules()
{
    return ['username', 'unique', 'targetAttribute' => ['usernameLowercase' => 'lower(username)']];
}

Thank you for the tip @Faryshta. ExistValidator has the same behavior too so I'll add it to the issue title.

I don't think it makes sense to abstract it.