Designed default app icons & appstore visuals

Problem

[x] change the "color dot" icons to deterministically show one of the designer's preset stock icons, on homepage and in appstore
[x] appstore download/install/launch buttons are now all different colors to better show change of state in ui
[x] appstore shows all apps on main page, paginated, and featured apps as chosen by Kinode
[x] remove "ratings" from app page until feature is done
[x] use the 🚫 mouse cursor for unclickable app icons

Testing

verify that system apps on homepage "all apps" have a designed icon and a 🚫 cursor if no web ui exists for it
verify that you can search for apps on the appstore
verify all listed apps show up in a scrollable view on the main appstore page
verify ratings aren't shown on app pages anymore
download an app with a ui. verify that the buttons for download, install, and launch are black/orange/white respectively

Notes
There are some superfluous @ts-ignore comments in an appstore ui file - I think my IDE is bugged because the exact same file isn't showing those errors in the homepage ui. It compiles and runs as expected all the same.

@dr-frmr lmk if there's a smarter way to do this


PermissionDefaults.yml is generating broken.

BKCommonLib dev 1034
LightCleaner dev 108
@bergerkiller PermissionDefaults.yml is generating broken.
[02:00:18] [Server thread/INFO]: [LightCleaner] Enabling LightCleaner v1.16.5-v1
[02:00:18] [Server thread/ERROR]: [BKCommonLib.Configuration] [BKCommonLib] [Configuration] An error occured while loading file 'plugins/LightCleaner/Localization.yml'
[02:00:18] [Server thread/ERROR]: [BKCommonLib.Configuration] [BKCommonLib] [Configuration] A backup of this (corrupted?) file named 'Localization.yml.old' can be found in case you wish to restore
org.yaml.snakeyaml.parser.ParserException: while parsing a block mapping
 in 'reader', line 6, column 3:
      cleanlight:
      ^
expected <block end>, but found '<block mapping start>'
 in 'reader', line 15, column 5:
        noperm: §cYou don't have permiss ...
        ^

	at org.yaml.snakeyaml.parser.ParserImpl$ParseBlockMappingKey.produce(ParserImpl.java:617) ~[patched_1.16.5.jar:"]
	at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:165) ~[patched_1.16.5.jar:"]
	at org.yaml.snakeyaml.comments.CommentEventsCollector$1.peek(CommentEventsCollector.java:59) ~[patched_1.16.5.jar:"]
	at org.yaml.snakeyaml.comments.CommentEventsCollector$1.peek(CommentEventsCollector.java:45) ~[patched_1.16.5.jar:"]
	at org.yaml.snakeyaml.comments.CommentEventsCollector.collectEvents(CommentEventsCollector.java:140) ~[patched_1.16.5.jar:"]
	at org.yaml.snakeyaml.comments.CommentEventsCollector.collectEvents(CommentEventsCollector.java:119) ~[patched_1.16.5.jar:"]
	at org.yaml.snakeyaml.composer.Composer.composeScalarNode(Composer.java:221) ~[patched_1.16.5.jar:"]
	at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:191) ~[patched_1.16.5.jar:"]
	at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:313) ~[patched_1.16.5.jar:"]
	at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:304) ~[patched_1.16.5.jar:"]
	at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:288) ~[patched_1.16.5.jar:"]
	at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:195) ~[patched_1.16.5.jar:"]
	at org.yaml.snakeyaml.composer.Composer.composeValueNode(Composer.java:313) ~[patched_1.16.5.jar:"]
	at org.yaml.snakeyaml.composer.Composer.composeMappingChildren(Composer.java:304) ~[patched_1.16.5.jar:"]
	at org.yaml.snakeyaml.composer.Composer.composeMappingNode(Composer.java:288) ~[patched_1.16.5.jar:"]
	at org.yaml.snakeyaml.composer.Composer.composeNode(Composer.java:195) ~[patched_1.16.5.jar:"]
	at org.yaml.snakeyaml.composer.Composer.getNode(Composer.java:115) ~[patched_1.16.5.jar:"]
	at org.yaml.snakeyaml.composer.Composer.getSingleNode(Composer.java:146) ~[patched_1.16.5.jar:"]
	at org.yaml.snakeyaml.constructor.BaseConstructor.getSingleData(BaseConstructor.java:151) ~[patched_1.16.5.jar:"]
	at org.yaml.snakeyaml.Yaml.loadFromReader(Yaml.java:490) ~[patched_1.16.5.jar:"]
	at org.yaml.snakeyaml.Yaml.load(Yaml.java:442) ~[patched_1.16.5.jar:"]
	at com.bergerkiller.bukkit.common.config.yaml.YamlDeserializer.deserialize(YamlDeserializer.java:69) ~[?:?]
	at com.bergerkiller.bukkit.common.config.yaml.YamlNodeAbstract.loadFromReader(YamlNodeAbstract.java:793) ~[?:?]
	at com.bergerkiller.bukkit.common.config.yaml.YamlNodeAbstract.loadFromStream(YamlNodeAbstract.java:780) ~[?:?]
	at com.bergerkiller.bukkit.common.config.FileConfiguration.load(FileConfiguration.java:97) ~[?:?]
	at com.bergerkiller.bukkit.common.PluginBase.loadLocalization(PluginBase.java:937) ~[?:?]
	at com.bergerkiller.bukkit.common.PluginBase.onEnable(PluginBase.java:711) ~[?:?]
	at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:263) ~[patched_1.16.5.jar:"]
	at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:380) ~[patched_1.16.5.jar:"]
	at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:483) ~[patched_1.16.5.jar:"]
	at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugin(CraftServer.java:501) ~[patched_1.16.5.jar:"]
	at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugins(CraftServer.java:415) ~[patched_1.16.5.jar:"]
	at net.minecraft.server.v1_16_R3.MinecraftServer.loadWorld(MinecraftServer.java:582) ~[patched_1.16.5.jar:"]
	at net.minecraft.server.v1_16_R3.DedicatedServer.init(DedicatedServer.java:302) ~[patched_1.16.5.jar:"]
	at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1064) ~[patched_1.16.5.jar:"]
	at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:291) ~[patched_1.16.5.jar:"]
	at java.lang.Thread.run(Thread.java:834) [?:?]
[02:00:18] [Thread-18/INFO]: [BKCommonLib.Configuration] [BKCommonLib] [Configuration] File 'plugins/LightCleaner/PermissionDefaults.yml' has been generated
[02:00:18] [Server thread/INFO]: [LightCleaner] Added support for automatic light cleaning when FastAsyncWorldEdit operations are performed!
[02:00:18] [Server thread/INFO]: [LightCleaner] LightCleaner version 1.16.5-v1 (build: 108) enabled! (0.335s)

#> Below are the default permissions set for plugin 'LightCleaner'.
#> These permissions are ignored if the permission is set for a group or player.
#> Use the defaults as a base to keep the permissions file small
#> Need help with this file? Please visit:
#> https://dev.bukkit.org/projects/bkcommonlib/pages/general/permission-defaults
lightcleaner:
  clean:
    view:
      default: op

description: Allows a player to fix lighting issues in chunks around the player
        within view ra    any:
      default: op

    description: Allows a player to fix lighting issues in chunks around the player
        with any ra    radius:
      *:
        default: op

    description: 'Allows a player to only fix a specific radius of chunks (example
          perm: lightcleaner.clean.radi    world:
      default: op

      description: Allows a player to fix lighting issues in all the chunks of an
        entire w    at:
      default: op

    description: Allows a player to specify coordinates to c  status:
    default: op

    description: Allows a player to check the status of ongoing lighting operatio  abort:
    default: op

  description: Allows a player to abort all current lighting operatio  pause:
    default: op

  description: Allows a player to pause and resume lighting operatio  dirty:
    debug:
      default: false

  description: Allows a player to corrupt lighting instead of clean it (for debugging
        purpo  block:
    debug:
      default: op

    description: Allows a player to mark blocks that will make light cleaner log
        the light level gener

Can you upload the exact contents of Localization.yml to https://paste.traincarts.net ? The text is a bit messed up in the code block due to word wrap among other things.

PermissionsDefaults
https://paste.traincarts.net/qomewuxufi.shell
Localization
https://paste.traincarts.net/dagaqopojo.shell

Can you set forceSynchronousSaving to true in BKCommonLib's config.yml? Does that change anything? It seems like some sort of corruptions occurred when saving that I can't really explain by the yaml lib alone.


Add motion to go to next/previous bracket ( '[{' / ']}' )

I think, for anyone, who works with C style languages, this motion is really helpful.
Documentation: http://vimhelp.appspot.com/motion.txt.html#[(

Code: https://github.com/t9md/atom-vim-mode-plus/issues/315

As stated in the README, this package is no longer maintained and is deprecated. We recommend that people use the vim-mode-plus package instead. Because of this, we are archiving this repository and closing all issues and pull requests. Thanks very much for your support and contributions!


Add option to dropout during inference.

I would like to do inference with dropout because it gives you a measure of your model's uncertainty. See Yarin Gal and Zoubin Ghahramani's paper on dropout as Bayesian approximation or Yarin's awesome blog post.
Right now Model.get_outputs sets inference=True in layers.fprop, which has the effect of ignoring the dropout layer during inference so you get a point estimate. The quick and dirty solution is to add and inference argument to Model.get_outputs, e.g.,
def get_outputs(self, dataset, inference=True):

The problem with this (apart from being confusingly named) is that the inference affects the BatchNorm layers as well. I guess the solution is to add an allow_dropout argument to Model.get_outputs that propagates through fprop the same way that that inference does.
Another solution is to add a new method to Model that is specifically designed for giving uncertainty estimates instead of requiring users to make their own.
Thoughts? I'm happy to put a pull request through.

Originally dropout has been designed specifically for training right ?

Yep. Using it during training is supposed to reduce overfitting. To use it to get an estimate of the variance in the output, you provide a single input and then generate a bunch of outputs while leaving dropout on.

Sorry for the delay in response. It sounds interesting and we'd be very happy to get a PR from you.

Is this still open? I'd like to work on this! :)
@jennifermyers Could I make a PR if @BaxterEaves isn't working on it?

Hi @utkarshsimha - absolutely! :-)

@utkarshsimha Go for it. I won't be submitting a PR.


How change omniligths energy programmatically

Hi, my question are two, is posible change energy ligth in 3d worlds? if possible, how change omniligths energy programmatically using gdscript?

The issue tracker is used to report bugs or make suggestions for the engine.
Please use this webpage to ask questions http://www.godotengine.org/qa/

Please ask question at https://godotengine.org/qa (or some other community channel). GitHub is for bugs and feature requests only.
If it's not possible to do what you want or if it's not working as it should, then you can propose the feature or point out the bug here.

Ok, thanks.


Getting error in the first step regarding region

Hi
When I use the template, I get the following error in the first step. The template selects ukwest region and doesn't let me edit if when I try to select some other region. So I am unable to fix it myself.
The provided location 'ukwest' is not available for resource type 'Microsoft.Purview/accounts'. List of available regions for the resource type is 'eastus,westeurope,southeastasia,canadacentral,southcentralus,brazilsouth,centralindia,uksouth,francecentral,koreacentral,uaenorth,japaneast,switzerlandnorth,westus,southafricanorth,westus3,australiaeast,northeurope,westcentralus,westus2,eastus2'. (Code: LocationNotAvailableForResourceType)

UK West region is not available.
Please see and review https://azure.microsoft.com/en-us/explore/global-infrastructure/products-by-region/?products=purview


await for new line

This update break the data transfer and spam server console.

My bad I forgot I debug


Reduce lifetime requirements of serve.

Currently the NewService trait, and a lot of the other parameters for serve require a 'static lifetime.
I'm a bit of a Rust rookie, but wouldn't it be better to tie it to the server itself?
As it stands, there's no safe way to do something like:
(Where self is some managed state)
fn start(self, port: u16) {
	let addr = ([127, 0, 0, 1], port).into();

	let service_factory =
		|| service_fn(|req| handle_incoming(&self, req));

	let server = Server::bind(&addr)
		.serve(service_factory)
		.map_err(|e| eprintln!("Server error: {}", e));

	hyper::rt::run(server);
}

I can't take a reference to self, because the lifetime is static.
Even though, the server is started on the next line, and it blocks.
So, once it gets to the end of this method, the server would have already stopped.

Part of the requirement for 'static is because the future from the Service is going to be spawned on an executor which can potentially be a thread pool, so the future can't have any references since it might live on another thread.

I understand, but doesn't tokio::run block until the runtime itself is shutdown, meaning self won't be dropped until the end of the method?
Hm, is there a safe way to hand out a reference, because the application itself isn't dropped until after the runtime is killed?
Preferably, without a runtime cost...

Yea, I see what you mean. Maybe something could be done in tokio. The function hyper::rt::run just defers to tokio::run internally.

As far as I know the problem of tokio::run is the same as std::thread::spawn, so to support it some think like scoped threads are needed. But likely far more complex (to verify) as it needs to work with all the aspects of the tokio event loop/thread pool.
Through I think at last theoretically tokio::run and similar "block until future and futures spawned by future are done" operations could be non 'static it would require more unsafe code in tokio, so I'm not sure if there are any plans to support it.
Anyway I don't think this will be possible anytime soon.

Any update on this?
Isn't it really safe for service to live just as long as the server itself?
It's really unpleasant to create a server that passes requests to &dyn trait.

this is driving me crazy. is there a way to do this. I have a database client and I want to use it but this doesn't let me. I tried Box::leak, mem::transmute. Nothing is working.

I took a look at things tokio provides for handling non 'static futures so here is a small overview:
block_on
Appears in three places Runtime::block_on, Handle::block_on, LocalSet::block_on.
Doesn't require neither of 'static, Send and Sync.
Only returns from the function call once the future completed.
Must drive the future exclusively on the current thread. As neither Send nor Sync are required. Through for some reasons only LocalSet::block_on documents this and Runtime::block_on and Handle::block_on doesn't which has me a bit worried.
Drawbacks

This function can not be called in a asynchronous execution context.
No proper usage of the thread pool as futures are not Send.
Wrt. to LocalSet block_in_place can not be used in a future which is driven using block_on.  (Which might be surprising but LocalSet allows driving multiple futures on the current thread until completion which can lead to very surprising dead-locks for some usages of block_in_place.  I haven't tried out what happens if block_in_place is used in the other block_on functions. But it should be fine as the other block_on functions only run one future on the given thread (as they don't support spawn_local).

run_until
Only supported by LocalSet.
Doesn't require neither of 'static, Send and Sync.
Is similar to block_on but is a async fn. So it's a block_on for usage in a async context.
Only "continues" the calling async fn when the future completes.
Drawbacks

No proper usage of the thread pool as futures are not Send. But allows polling multiple futures on the current thread.
I don't know if block_in_place can be used. Probably not as it's sharing the local set with other futures spawned with spawn_local

Sadly there is no single method which allows non 'static Future with Send and which "properly" used the whole thread pool and in turn can properly support block_in_place. But this is also known to be a very hard problem. (From the removed scoped threads functionality).
It is possible to combine futures with Sync, work stealing and a thread pool with thread bound futures using LocalSet (similar to how actix does it). It wouldn't be exactly a solution for the problem mentioned here and it has a major problem. The futures most likely to call block_in_place, i.e. where it's most useful are also the which would run in a LocalSet where it doesn't work. :(
But as run_until has shown async fn's allow us new possibilities. So maybe we can find a way to have Send + non 'static + work stealing?


shut up spurious gcc warning

gcc 12.1.1 has a new warning:
In file included from src/secp256k1.c:846,
                 from src/tests_exhaustive.c:20:
src/modules/surjection/main_impl.h: In function ‘secp256k1_surjectionproof_generate’:
src/modules/surjection/main_impl.h:343:24: warning: ‘borromean_s’ may be used uninitialized [-Wmaybe-uninitialized]
  343 |     nonce = borromean_s[ring_input_index];
      |             ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~

The warning is spurious but add some code to shut it up anyway.

This is also fixed by  #199 (which is better I think).


Failed to shutdown the HTTP server for OAuth flow, when using sockets + customRoutes

Description
Using socketMode = true with customRoutes (simple health check from documentation in fact) results in [ERROR] Failed to shutdown the HTTP server for OAuth flow: undefined on app.stop()
The reason (in my opinion) is this code in SocketModeReceiver.js:
    stop() {
        if (this.httpServer !== undefined) {
            // This HTTP server is only for the OAuth flow support
            this.httpServer.close((error) => {
                this.logger.error(`Failed to shutdown the HTTP server for OAuth flow: ${error}`);
                ^^^^^
            });
        }

Here is no condition to check if error occured or not
The fix would be:
if (error) this.logger.error(`Failed to shutdown the HTTP server for OAuth flow: ${error}`);

What type of issue is this? (place an x in one of the [ ])

[X] bug
[ ] enhancement (feature request)
[ ] question
[ ] documentation related
[ ] example code related
[ ] testing related
[ ] discussion

Requirements (place an x in each of the [ ])

[X] I've read and understood the Contributing guidelines and have done my best effort to follow them.
[X] I've read and agree to the Code of Conduct.
[X] I've searched for any related issues and avoided creating a duplicate issue.

Bug Report
Filling out the following details about bugs will help us solve your issue sooner.
Reproducible in:
package version:
node version:
OS version(s):
Steps to reproduce:

Expected result:
What you expected to happen
Actual result:
What actually happened
Attachments:
Logs, screenshots, screencast, sample project, funny gif, etc.

@sbcgua - I agree that assuming that error will always be defined is incorrect, so your proposed changes make sense. I could repro the logger output simply by starting my app app.start() and stopping it app.stop(). I will follow up tomorrow AM PST to see if we can improve the test coverage before merging.
I'm curious though how using your customRoutes in your use case led to you seeing this logging output and identifying the missing logic. Could you elaborate?

Honestly speaking I didn't debug it through to explain the reason in detail but here is the code sample:
// imports ... and env validation

const app = new App({
    signingSecret: process.env.SLACK_SIGNING_SECRET,
    token: process.env.SLACK_BOT_TOKEN,
    socketMode: true,
    appToken: process.env.SLACK_APP_TOKEN,
    logLevel,
    // customRoutes: [{
    //     path: '/health-check',
    //     method: ['GET'],
    //     handler: (req, res) => {
    //         res.writeHead(200);
    //         res.end('OK');
    //     },
    // }],
});

app.message(async (payload) => {
  ...
});

async function shutdown() {
    const timeout = setTimeout(() => {
        console.error('Stop server timed out, force exit');
        process.exit(1);
    }, 3000);
    console.log('Stopping server ...');
    await app.stop();
    clearTimeout(timeout);
    process.exit(0);
}

process.on('SIGTERM', shutdown);
process.on('SIGINT', shutdown);
process.on('SIGBREAK', shutdown);
process.on('unhandledRejection', (reason) => {
    console.error('Unhandled rejection');
    console.error(reason);
    process.exit(1);
});

(async () => {
    try {
        await app.start(process.env.PORT || 3000);
        console.log('Bolt app is running!');
    } catch (error) {
        console.error('Bolt app start failed', error.message);
    }
})();

This code works fine. If I uncomment the customRoutes param, it outputs the mentioned message

Also if this helps:

node version 16
the issue occures both in win and linux environments
"@slack/bolt": "^3.10.0"


chore: update docs section on eas android server image requirement

 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.

Hi, thanks for the contribution. please can you sign the cla so it can be merged 🙏 😎

@helenaford done!


Marimo behind Jupyter / JupyterHub

Description
Hello,
Quite similar to #904
This may be really interesting to have Marimo available behind Jupyter / JupyterHub as Pluto.jl is doing in https://jupyter-docker-stacks.readthedocs.io/en/latest/using/selecting.html#jupyter-julia-notebook with jupyter-pluto-proxy

Kind regards
Suggested solution
Implements something similar to jupyter-pluto-proxy
Alternative
No response
Additional context
No response

In the short term, this will slow down our developer velocity since its another environment combination that will need to be test, supported, maintained.
Unless there is a neat solution to support this without sacrificing developer velocity, I not sure this would be supported (at least in core).
Taking a step back: why do you want to do this?

I understand perfectly that's an important task to achieve that and your team bandwidth is limited.
Such a solution will make it possible to edit python files on a VPS without the need to have Python running on your computer. Moreover it could possibly open the multi user features that some other users are requesting (this part will be even harder as you will have to provide isolated environment for each user)

My pleasure!
If you want to try this kind of solution quickly with Pluto... here is a docker-compose.yml file for that purpose
version: '3.3'
services:
  jupyter_scipy_notebook:
    image: quay.io/jupyter/scipy-notebook:2024-02-24
    ports:
      - 10000:8888
    volumes:
      - ./local_dir:/home/jovyan/work
      - ~/data:/home/jovyan/data
      - ./certs/private.key:/etc/ssl/notebook/notebook.key
      - ./certs/certificate.crt:/etc/ssl/notebook/notebook.crt
    command: "start-notebook.py \
      --ServerApp.keyfile=/etc/ssl/notebook/notebook.key \
      --ServerApp.certfile=/etc/ssl/notebook/notebook.crt"
    #restart: unless-stopped
    restart: always

and run it using docker compose up (you probably won't need keyfile and certfile as it's not for production (no SSL)

Love the project! Addresses many issues I have with Jupyter.
Another important use-case where having the backend running remotely is in cloud computing contexts where it make sense to keep the compute located close to the data. Both for efficiency and security reasons.
For example we run a JupyterHub setup in AWS that spawns per user pods on demand. Our users then access the Juptyer notebooks in their browser while accessing many Tb of data on S3 / EFS that would be slow and costly to process if the notebook was running locally.

All that jupyter-*-proxy packages are based on https://github.com/jupyterhub/jupyter-server-proxy project. For example, there are proxy packages for R Shiny, Theia IDE, RStudio, Pluto.jl... I think, creating jupyter-marimo-proxy will make sense later, when marimo will be able to edit more notebooks simultaneously. For now, I am using jupyterhub on remote VPS for editing helper python files. In jupyter terminal I can run marimo edit.. or marimo run..  commands.  We have options for specifying host and port already.

hey @jyio, i think we can support marimo edit at a base url. would you mind filing a separate ticket? I can get to it this week

Thank you very much for considering it, @mscolnick
Base URL might seem simple on the surface but could have far-reaching consequences across the entire app, so I definitely appreciate your expertise.

Since @mscolnick implemented marimo edit --base-url in record time (thank you!), let me share my minimal viable solution.
Try this Dockerfile if you just want to see it in action. It creates 3 demo users (demo, demo1, and demo2), and you could login to any of them with the same password Free4all! through the magic of DummyAuthenticator. Each user could start its own independent Marimo instance.
Here's what you'd need to configure an existing installation:

@mscolnick's latest patch that adds --base-url support to marimo edit. Because this is hot off the press, you must build Marimo yourself if you want to use it right now, or you could wait until it's pip-installable.
I did a thing that encapsulates the jupyter-server-proxy config, so you could simply pip install --no-cache-dir https://github.com/jyio/jupyter-marimo-proxy/archive/main.zip to make it work (it'd make its way to PyPI someday). All it does is tell the launcher how to launch marimo edit. Works just like jupyter-rsession-proxy and jupyter-pluto-proxy. This is optional... you could skip my package and configure jupyter-server-proxy directly in your jupyterhub_config.py if you want to DIY.
There is no #3.

Caveat emptor: This solution doesn't support the security token feature. Miscreants on a multi-user JupyterHub could potentially sniff out other users' Marimo ports and interfere with them. This could probably be solved by letting JupyterHub generate/maintain the tokens, but I don't know how to make jupyter-server-proxy rewrite the proxied URLs to include the tokens. You could use dockerspawner to isolate your users if this is a problem for you.
I'd be happy to transfer jupyter-marimo-proxy to marimo-team (so you could maintain quality control, trademarks, etc). I don't feel strongly either way :)

@mscolnick Could you please publish the VS Code extension to the Open VSX Registry, too?
So people using b-data's/my JupyterLab docker stacks are able to install with code-server.
ℹ See https://github.com/open-vsx/publish-extensions/blob/master/CONTRIBUTING.md
Thank you.

Now that this base URL update has been released, the minimal demo is almost trivial.

@jyio thanks the setup gist!
I am going to close this ticket now - please feel free to re-open with more specific requests about deployment.
(@benz0li still waiting on the Open VSX fix upstream)


pir: scroll element into view first

#944  👈
main

This stack of pull requests is managed by Graphite. Learn more about stacking.

Join @shakyShane and the rest of your teammates on  Graphite


how i can use multiple robot in a same project and non-interference each other?

how i can use multiple robot  in a same project  and non-interference each other?
i tried  like this
var wechat= new Wechaty() ;
but it's not working !  the last one will be active !
can you give me some help?

Currently, Wechaty can only have one instance, so you have to use the singleton method to initiate Wechaty:
const bot = Wechaty.instance()

The reason we only can have one instance is a little bit complicated. Hope we can get rid of this limitation in the future release.
If you need multiple Wechaty ChatBot, I suggest you to run multiple Node.js instance to do that.

Before you answer me  i tryied this solution  but there is new trouble  when i killed the child process the chrome window still there  how to close it ? by the way i read all the issues about "how to send image"  i still don't know  how to do it , can you show me the code ? thanks  The great author

When you send kill signal to Wechaty, Wechaty is possible to not close chromedriver as normal. If you could provide a piece of runnable code to reproduce this problem, I can have a look into it.
send image is planning to be supported in the next Milestone v0.9

`const {Wechaty,Contact} = require('wechaty')
var loginuser="";
var wechat= new Wechaty() ;
wechat.on('scan', (url, code) => {
console.log(url)
});
wechat.on('login',user => {
console.log(`User ${user} logined`);

loginuser=user;

});
wechat.on('message',  message => {
var room =message.room();

if(room){

    if(message=="10086"){
        console.log(message);

        room.say("自动回复:这是中国移动的电话号码")
    }

    if(message=="exit"){

        process.exit();
    }

}

console.log(`消息内容: ${message}`+
    "       发送者："+message.from()
);

});
wechat.init();
`
process.exit() is working chrome window still there

@songyu719 I guess you don't mind chrome window still there or not, what you care about is when you run multiple Node.js instances, all the instances start the same wechat account.
If I guess， then I suggest you could try the following code:
var wechat= new Wechaty({profile:'test1'})

You can set one instance's profile is test1 and another is test2, then when you run 2 instances, you can use multiple robots and they won't interfere with each other.

@songyu719 I think you can add a wechaty.quit() before process.exit(), this  could help you to close the chromedriver and chrome browser.
    if(message=="exit"){

        wechaty.quit().then(() => process.exit())
    }

@zixia
Error: current not match target
at StateMonitor.current (/Users/Terry/wechat/node_modules/wechaty/dist/src/state-monitor.js:52:27)
at Wechaty. (/Users/Terry/wechat/node_modules/wechaty/dist/src/wechaty.js:193:24)
at Generator.next ()
at /Users/Terry/wechat/node_modules/wechaty/dist/src/wechaty.js:7:71
at __awaiter (/Users/Terry/wechat/node_modules/wechaty/dist/src/wechaty.js:3:12)
at Wechaty.quit (/Users/Terry/wechat/node_modules/wechaty/dist/src/wechaty.js:191:16)
at Wechaty.wechat.on.message (/Users/Terry/wechat/myrobot.js:42:20)
at emitOne (events.js:96:13)
at Wechaty.emit (events.js:188:7)
at PuppetWeb.puppet.on (/Users/Terry/wechat/node_modules/wechaty/dist/src/wechaty.js:172:31)
still not working

@lijiarui
think you   i will try it   can you give me your other  contact information like QQ or wechat   i can tell you more details of my project 。 i  hope you can help me  please !

@songyu719 There might be a bug or misusing in the program. Please provide your full code and full log output for analyse, Thanks.

const {Wechaty,Contact} = require('wechaty')

var loginuser="";
var wechat=  Wechaty.instance() ;

wechat.on('scan', (url, code) => {

  console.log(url)
});

wechat.on('login',user => {

    console.log(`User ${user} logined`);

    loginuser=user;

});

wechat.on('message',  message => {

    var room =message.room();

    if(room){

        if(message=="10086"){
            console.log(message);

            room.say("自动回复:这是中国移动的电话号码")
        }

        if(message=="大100"){

            room.say(message.from()+"您已成功下注100块")
        }

        if(message=="exit"){
            wechat.quit().then(() => process.exit()).catch((e)=>{

                console.log(e)
            })

        }

    }

    console.log(`消息内容: ${message}`+
        "       发送者："+message.from()
    );

});
wechat.init();

this instance running by
 var workerProcess = child_process.fork('myrobot.js', [1]);

    workerProcess.on("message",(m)=>{

        console.log("this message from child process:"+m)

    })

    workerProcess.send("i'm your father")

    workerProcess.on('close', function (code) {
        console.log('子进程已退出，退出码 '+code);
    });

Console log
INFO Wechaty v0.7.17 initializing...
https://login.weixin.qq.com/qrcode/YdAJkJ-_OA==
https://login.weixin.qq.com/qrcode/YdAJkJ-_OA==
User 宋潇宇 logined
WARN StateMonitor Wechaty:current(standby,false) current is different with target. call state.target(standby) first.
消息内容: exit       发送者：宋潇宇
Error: current not match target
at StateMonitor.current (/Users/Terry/wechat/node_modules/wechaty/dist/src/state-monitor.js:52:27)
at Wechaty. (/Users/Terry/wechat/node_modules/wechaty/dist/src/wechaty.js:193:24)
at Generator.next ()
at /Users/Terry/wechat/node_modules/wechaty/dist/src/wechaty.js:7:71
at __awaiter (/Users/Terry/wechat/node_modules/wechaty/dist/src/wechaty.js:3:12)
at Wechaty.quit (/Users/Terry/wechat/node_modules/wechaty/dist/src/wechaty.js:191:16)
at Wechaty.wechat.on.message (/Users/Terry/wechat/myrobot.js:42:20)
at emitOne (events.js:96:13)
at Wechaty.emit (events.js:188:7)
at PuppetWeb.puppet.on (/Users/Terry/wechat/node_modules/wechaty/dist/src/wechaty.js:172:31)

Thanks for the details of the code & log.
Could you please try the latest master code of v0.7.34 ? I believe this version should fix this issue.

@zixia  cool it work !  when we can use the "send image" feature ?

Great to hear that!
As I mentioned earlier: "send image" is planning to be supported in the next Milestone v0.9.
Please let me know if you have any future questions/sugestions, Cheer!

ok !  to be honest  you are very great !  now you can close this issues

Thanks!
To be honest too, I'd like to hear you praise Wechaty instead of me! ;-)

@songyu719 Glad to help you.
My wechat is:  ruirui_0914
You also can join our wechat room Wecchaty Developer's Home by scan the qrcode in readme and sent 'wechaty' to the bot. You can talk with a lot of developers there.


performance and other fixes

the will fix #177.
also fix drag handle option being hard coded.
and i finally added some sort of limit to when the collision detection is fired when dragging a widget. now collision detection will only work when you move/drag the widget an amount equal to one unit.

Is there any way the fix for #177 can be separated from the rest of these changes?

@mgwidmann sorry but i dont have any time to seperate the changes into seperate commits (and i have actually forgoten the changes that have been made a month ago) i didnt get any feed back on this. so im rolling my own plugin now. as the devlopment pace here seems to be very slow.
any how to fix the performance all i had to do is correct one line which is
-            nn = {x: 0, y: node.y, width: this.width, height: node.height};
+            nn = {x: node.x, y: node.y, width: node.width, height: node.height};

so if you want the perfornace fix only you only have to replace _fix_collisions with the one from my fork :)

Unfortunately it doesn't work. Performance is much better, but if you create a lot of items and then drag a widget through the rest they change their positions even if you return the widget to its original position.

Why was this merged if it doesn't work? Am I reading your last comment wrong or is master broken? :confused:

It was accidentally. I had to rollback to revision before the merge.
Regards,
Pavel Reznikov
<EMAIL_ADDRESS>
On Sep 10, 2015, at 8:09 AM, Matt<EMAIL_ADDRESS>wrote:
Why was this merged if it doesn't work? Am I reading your last comment wrong or is master broken?
—
Reply to this email directly or view it on GitHub https://github.com/troolee/gridstack.js/pull/203#issuecomment-139275073.

:+1:

regradless the whole commit.
chaging only this:

       nn = {x: 0, y: node.y, width: this.width, height: node.height};

       nn = {x: node.x, y: node.y, width: node.width, height: node.height};

resolve the performance issues without any other problems. checked this with 210 widgets before and after.

orgilor's fix above has solved the freezing-on-drag issue for me


Windows  10.0.18362.1533 not supported

No description, no screenshot
Version supported. Look at rdpconf for the termsrv.dll version


BGE: Update User-selected Opportunities that have multiple written-off Payments

This change ensures that when a User selects "Update this Opportunity" in the BGE Donation Selector UI, the Opportunity will be updated, even if it has multiple written-off Payments.
Critical Changes
Changes
Issues Closed
New Metadata
Deleted Metadata

**lurch: attach W-034578

Tracking W-034578


Adopt scala-native-config-brew

https://github.com/armanbilge/scala-native-config-brew
It doesn't force anyone to use brew, but it will auto-configure everything if they have installed s2n-tls with brew.
Edit: also, this is not transitive. Only applies to our build.

Does anything pin the brew dependencies?  I am concerned about reproducibility, before and after this PR.

No, nothing pins the dependencies 😓  I don't think it's really possible to pin dependencies independently with brew.
I guess this is something Nix might be better at? Maybe time to learn that 😅

So I did some research on Nix. Ok, I'm sold. They had me at the hashing scheme for /nix/store.
Based on my newly-acquired (mis-)understanding:
Now, it would be one thing if we were running our entire CI inside of a Nix shell. Is this easily possible? Then we'd be reproducible all the way down.
If we can't do that ... is there a good way to use nix as a package manager without using the nix shell? Seems like it could be possible, but not nearly so nice as the shell.
The sad truth is that at the end of the day our CI is fundamentally not reproducible. GitHub is regularly updating their runner images, our JDK index is regularly swapping out JVM versions, etc. Although I guess within the JVM the story is much better.
What we can do is install s2n-tls from source in CI. Then we can pin to a specific version. Although it would still be using whatever OpenSSL, libc, LLVM toolchain, etc. that happen to be available.

Yes, a disciplined SBT build (e.g., no snapshots, no weird resolvers) and Nix offer many overlapping benefits, which is why I haven't pushed Nix as the Build Of Truth on Typelevel projects.  It's just a development convenience.  You correctly note several impurities.  We handwave around JVM patches in particular, but they've broken Blaze TLS tests in the past.
Full reproducibility can be achieved with a derivation, materialized with nix build.  At work, we use sbt-derivation on applications for a pure Git => Executable.  For libraries, one could imagine a pure Git => TargetDir.  "Publishing" could be pushing to a distributed cache like Cachix, or shrugging and making everyone materialize it.  But to be useful outside Nix, we need a TargetDir => IO[Unit] to publish to Sonatype, which is of course not pure.
We might instead focus a reproducible toolchain, so we pin SBT and the JVM and the native libraries and git and bash and what not in the flake, invoke SBT, and then pray that whatever we do with it atop that foundation is idempotent.  Invoking SBT from CI could then take a few forms:

nix develop -c 'sbt ...' (to use the SBT in the devShell using the devShell's environment hooks)
nix run .#sbt -- ... (if we wrap SBT with a script that sets its environment variables)
nix profile install .#sbt; sbt ... (imperative, disrecommended for long-lived workstations)

I suspect the third option would be the least disruptive in an sbt-typelevel-github-actions world.

https://github.com/http4s/http4s/pull/6724

After discussing with @TimWSpence I am reviving this PR.
The Nix devshell will continue to be used for CI and will be the recommended environment for development.
However, the brew plugin can provide a practical fallback for the not-yet-enlightened :)


DecoderException for map item on paper server

Describe the Bug
Any time I join a paper server where I have a map in my inventory or in an loaded item frame I immediately get disconnected with a io.netty.handler.codec.DecoderException. This also happens when I move a map item into my inventory while on the server.
Reproduction Steps

Join a Paper server
Get a map in your inventory OR load a map in an item frame
Get disconnected

Expected Result
Not get disconnected from server
Screenshots and Videos
No response
Crash Report or Log
https://pastebin.com/157pg2wS
Operating System
Windows 11
Mod Version
0.5.1f
Minecraft Version
1.20.1
Other Mods
fabric-api 0.91.0
fabricloader 0.15.7
Additional Context
The server I am joining is behind a velocity proxy, but neither the paper server or the proxy have anything in their logs other than the join and disconnect messages.

using Create on a server that doesn't have Create installed will not work and is not supported. this goes for every content mod.


How to download all the files and folders from my googledrive using powershell?

How to download all the files and folders from my googledrive using powershell?

I also can't figure that out...


TypeScript dist includes entire project

Problem
When building a project using typescript and bundling node_modules, the project contents are all curiously included in the dist directory.
Steps to reproduce

I cloned this project.
In the examples directory, cd into typescript.
npm install --save jovo-framework.
Make your index.ts look like this:

import chalk from "chalk";
import { Lambda } from 'jovo-framework';

function logSuccess(msg: string) {
  console.log(chalk.green(msg));
}

logSuccess("Hello World!");

export const handler = async (event, context, callback) => {
  console.log(`[AWS Lambda Handler]`);
  console.log(event, '\n\n', context);
  return new Lambda(event, context, callback);
};

NB: Above code doesn't actually do anything noteworthy!

Use the default tsconfig.json settings:

{
    "compilerOptions": {
      "target": "es2015",
      "moduleResolution": "node"
    }
}

Now drill into the default build dir, dist/
Notice that there's a directory called typescript, which contains all of the cwd.

Environment

ncc: ^0.18.1
node: v9.5.0
npm: 6.9.0
TypeScript: 3.4

@guybedford We need to release webpack-asset-relocator-loader and submit a PR to ncc before this issue can be closed. I'll open it for now.

Thanks @guybedford


Robustness of SynthSeg on MRIs having large lesions (stroke, tumor, etc)

How robust/precise is the SynthSeg on MRIs having large lesions (stroke, tumor, etc)? Could you tell bit more about it?

SynthSeg has been trained to segment lesions (MS, stroke, etc.) as the structure that is underneath. Essentially it means that SynthSeg has been trained to ignore lesions, since these are extremely complicated to robustly segment.
On the other hand, SynthSeg has not been trained to deal with large tumours, but it is still robust to small ones.
So globally, I'd say that if you wish to specifically segment lesions/tumours SynthSeg is not the tool you're looking for, but if you're interested in whole-brain segmentation with robustness to lesions/tumours then you should definitely give SynthSeg a try !


Environment variable set up by linking mongo container counterintuitive

I found this trying to run a named mongodb container (called mongodb) linked to a tomcat 8 & jre8 container. In my Spring webapp, there's a db.properties file which lays out a number of properties for the database:
mongodb.host=mongodb mongodb.port=27017 mongodb.database=mydatabase
etc. This supplies values to a MongoConfig class, which uses Spring to specify that the values should come from this file, and also to set various fields to the values given in the properties file.
So far, so good. However, when I fire up the webapp in the Tomcat container, with the mongo container linked as
--link mongodb:mongodb
it falls over. Somehow mongodb.port is being set to a String, "tcp://<IP_ADDRESS>:27017" & that's causing a problem.
Some investigation shows me that within the Tomcat container, by virtue of the --link, there's an environment variable MONGODB_PORT which is set to this string value. Spring is somehow picking up on this & overriding the properties file value.
"Why am I raising this here?", you're probably asking. Well, I have a workaround of course, which is to name my mongodb container differently, BUT the fact remains, there's an address in an environment variable labelled X_PORT. I'd like to suggest that if the variable needs to contain an address, then it should be called X_ADDRESS instead. This would save headaches, I think.
Is this something that can be changed at this level, or would it be something I need to contact the people who make mongo directly about?

That is part of the automatic variables that come from docker linking. Best documentation I've found is in the compose docs: https://docs.docker.com/compose/link-env-deprecated/.  The solution is to instead create a docker network (docker network create db-net) and then run each container in that network instead of using --link, docker run --network db-net ....  They'll be able to resolve other containers within the network by their container name using docker's built-in DNS automatically.


cupyx.ndimage.measurements: add center_of_mass, histogram, labeled_comprehension

This PR adds three functions to cupyx.scipy.ndimage.measurements

center_of_mass
labeled_comprehension  (applies an arbitrary function over each labeled region)
histogram (implemented via labeled_comprehension)

One difference in behavior was made to avoid the need for object arrays (in this case, an arrays where each element is an array). This is used for histogram which calls labeled_comprehension using dtype=object so that each element of the object array is the histogram over a particular label. For the CuPy implementation, a list of arrays is returned instead of an object array.
If the return value is a scalar in the scipy implementation, a 0-dimensional device array is returned instead here to avoid device->host transfers as much as possible.
I also suppressed all instances of cupy._util.PerformanceWarning occuring in the tests of this module that existed prior to this PR.

sorry to ask this, but could you please align the tests to those of https://github.com/cupy/cupy/pull/4307?
Thanks!

sorry to ask this, but could you please align the tests to those of #4307?

Sure. I will do it for the recent fourier_ellipsoid PR as well.

rebased to fix merge conflict. should be ready for testing

TODO: Add docs

Jenkins, test this please

TODO: Add docs

I have already added this one to the API docs.

Jenkins CI test (for commit 5b11e68fbb9f4ca21cb6a31a04633dfe5411acbd, target branch master) succeeded!


improve type

thanks @kotarella1110 v4 we will have nested errors object.

@bluebill1049 Sorry,  I committed a mistake!
I will fix soon.


Custom Atlases

Hi,
I've been trying to use a custom atlas in qsirecon, following the docs here; however, I can't seem to get it to work and I just want to see if you have any suggestions because I'm pretty new to atlas registration and orientation etc.
So we a want to use either the DiFuMo or Craddock atlases which we have acquired through the nilearn atlas fetcher. fslhd showed that the sform and orientation weren't in format required by qsirecon so I tried some things to correct that.
I registered the custom atlas to the MNI152NLin2009cAsym space which you provide here using flirt and then zeroed the sform using fslorient -setsform. This made the headers at least look a bit more like the required format; however, I did notice that the custom atlas still has four dimensions whereas all of the examples of qsirecon compatible atlases have three.
This is the output from fslhd for the Craddock atlas after the process described above:
filename        craddock_lps.nii.gz

sizeof_hdr      348
data_type       INT16
dim0            4
dim1            193
dim2            229
dim3            193
dim4            43
dim5            1
dim6            1
dim7            1
vox_units       mm
time_units      s
datatype        4
nbyper          2
bitpix          16
pixdim0         1.000000
pixdim1         1.000000
pixdim2         1.000000
pixdim3         1.000000
pixdim4         1.000000
pixdim5         0.000000
pixdim6         0.000000
pixdim7         0.000000
vox_offset      352
cal_max         0.000000
cal_min         0.000000
scl_slope       1.000000
scl_inter       0.000000
phase_dim       0
freq_dim        0
slice_dim       0
slice_name      Unknown
slice_code      0
slice_start     0
slice_end       0
slice_duration  0.000000
toffset         0.000000
intent          Unknown
intent_code     0
intent_name
intent_p1       0.000000
intent_p2       0.000000
intent_p3       0.000000
qform_name      MNI_152
qform_code      4
qto_xyz:1       -1.000000 0.000000 0.000000 96.000000
qto_xyz:2       0.000000 -1.000000 0.000000 96.000000
qto_xyz:3       0.000000 0.000000 1.000000 -78.000000
qto_xyz:4       0.000000 0.000000 0.000000 1.000000
qform_xorient   Right-to-Left
qform_yorient   Anterior-to-Posterior
qform_zorient   Inferior-to-Superior
sform_name      MNI_152
sform_code      4
sto_xyz:1       -1.000000 0.000000 0.000000 96.000000
sto_xyz:2       0.000000 -1.000000 0.000000 96.000000
sto_xyz:3       0.000000 0.000000 1.000000 -78.000000
sto_xyz:4       0.000000 0.000000 0.000000 1.000000
sform_xorient   Right-to-Left
sform_yorient   Anterior-to-Posterior
sform_zorient   Inferior-to-Superior
file_type       NIFTI-1+
file_code       1
descrip         6.0.4:ddd0a010
aux_file

Any help would be massively appreciated.
Thanks,
Rory

Ok, I've done a little more research and learned about the difference between a probablistic atlas (4D) and a labelled or "hard" atlas which is 3D. It seems like the nilearn atlases are in the probablistic format so I need to convert those somehow.


Add example of using a common result object with validation failures

This is to avoid the use of exceptions for validation exceptions.  The API exception filter make sense for exceptions that are truly exceptional but some are not like validation exceptions.  We could have a single response object e.g  HandlerResponse and it could contain a possible list of validation failures that can then be mapped in controllers to a common error response.  We could try using OneOf in this as well but I think this will break mediatr single contract interface for responses.


Item components

Describe the missing content
The item components can_place_on, can_destroy, item_lock, and keep_on_death aren't documented anywhere I can find, aside from some random references strewn about tutorials. We don't even know if there are more components than this that are just undocumented.

Hello!
It looks like we've made some progress on this. Since it's been a while, I'm going to close this issue, but if you have any additional feedback, please reach out to us!
Thanks!


docs(core): fix typo in link to docs

PR Checklist
Please check if your PR fulfills the following requirements:

[x] The pull request title follows the semantic commits guidelines: https://github.com/automock/automock/blob/master/CONTRIBUTING.md#commit-guidelines
[-] Tests for the changes have been added (for bug fixes / features)

PR Type
What kind of change does this PR introduce?

[ ] Bugfix
[ ] Feature
[ ] Code style update (formatting, local variables)
[ ] Refactoring (no functional changes, no api changes)
[ ] Build related changes
[ ] CI related changes
[x] Other... Please describe: Documentation/error-message fix

What is the current behavior?

The error-message(s) are referring to an incorrect URL for the documentation.
Issue Number: N/A
What is the new behavior?
The URL is changed to the correct documentation-website.
Does this PR introduce a breaking change?

[ ] Yes
[x] No

Other information
I don't know if there are any other requirements for a first-time contribution, so let me know if I missed something.

@elwinschmitz thank you for this :)
I think there is an issue with Github actions. I will trigger the action again soon 🚀


Add protocol to allow custom type matching rules

NOTE: I'm super open to renaming everything that is added here. Naming is hard.
What does this do on a high level?
This introduces a protocol to allow applications to define their own custom matching rules for specific data types.
How was this change made?
Adding a protocol and updating tests.
Why is this change necessary?
This makes the library more flexible, leading to fewer cases where skip_fields are needed.
How will this be verified?

[X] The PR includes new tests
[ ] Current test suite covers functionality
[ ] This has been tested locally
[ ] This has been tested in dev

Any additional information or special handling required on this PR?
nope
motivational imagery

@lmarlow thanks for the quick review!


Cursor interactivity is crippled when using tablet/stylus

🐛 Bug
When using a tablet+stylus to interact with the layers (other than pan-zoom), there is a huge input lag and a general "messiness" in the reaction of the canvas.
What's odd is that not only pan-zoom works seamlessly, but using the mouse in the same session works perfectly fine. Here a small video showcasing the problem: the first shape is made with the mouse, while the second is with the stylus. As you can see, when moving the lifted stylus, the shape is updating very slowly, and sometimes jumps around. At the end of the second shape it's not even registering a bunch of clicks properly.
https://user-images.githubusercontent.com/23482191/231112393-6b645c81-f1dc-467c-832b-b18b4b5acc3f.mp4
Note that however the pan zoom at the end works perfectly responsively with both inputs.
The tablet also perfectly on other programs (like gimp).

I realize it's hard for others to debug something like this, but I'd appreciate some pointers on where to even begin :P

I think @DragaDoncila has a wacom tablet? 😃 So maybe she can at least check whether she can reproduce?
I wonder whether the tablet produces many more events per second than the mouse (would make sense for a drawing tablet) and that is why napari is struggling?

My first assumption is that the Wacom tablet generates more events than the mouse. And we may need to speed up event processing or find a way to query the queue and omit part of events.
But this is the only an impression.

haha jinx! 😂

Hah! I didn't think of that... I'll see if I can check!

Hard to debug without device :(

Yes :( For now, I will try to use it on a different machine to see if the problem persists.

Welp... On a different machine it works just fine. The broken one is a kubuntu 22.04, and the one that works is my regular Arch Linux machine. I don't know what to think now xD

Maybe... other option: my machine has a more powerful CPU and I'm no longer bottlenecked by it.

I think @DragaDoncila has a wacom tablet? 😃 So maybe she can at least check whether she can reproduce?

Sorry folks, I could not reproduce on any machine in the house - Mac, Ubuntu, big strong PC Windows and weak terrible laptop Windows, so I can't help. It sounds like it's been confirmed to be the mouse events though.

I tried on Windows with a Wacom Intuos and drawing a big filled polygon with the pen and couldn't replicate the slowdown

@brisvag is this closed by #5710 ? Reading through, I think you were the only one affected.

It's reduced by #5710 (now usable, but still not a seamless experience). I didn't want to throttle too much for now, but depending on the power of their computer and complexity fo their layer, this may show up again. Maybe we can leave open for discoverability?
Also, related to this: the problem is still there when itneracting with qt widgets instead of the canvas (for example, dragging the dims slider is basically impossible with the stylus... will likely be less of an issue with async loading).


Fix SBGEMM unit test to start at 1 instead of 0

Fix SBGEMM unit test to start at 1 instead of 0 - since malloc zero bytes fails on some systems.

Fixes malloc(0) failing for AIX.

Hmm, that's annoying. M,N,K equal 0 might be a valid corner case to test, though not that important.

I agreed.  I say that we leave that corner case for another PR?

Fixed

GEMV returns an error for zero elements.
 ** On entry to SGEMV  parameter number  6 had an illegal value
 ** On entry to SBGEMV  parameter number  6 had an illegal value

I believe this PR is ready for merging.

Actually zero length GEMV will not work because of this.
if (lda < MAX(1, m))   info = 6;

If it is included, I get this
 ** On entry to SGEMV  parameter number  6 had an illegal value
 ** On entry to SBGEMV  parameter number  6 had an illegal value

Thank you (sorry for causing extra work with what was just a spontaneous thought before going on a long drive)


WIP: update test generators

This is a larger effort of step wise updating the testgenerators, similar to how it has already happened to two-fer and hello-world.

[X] all-your-base #393
[X] allergies #392
[X] anagram #394
[X] armstrong-numbers #395
[X] atbash-cipher #396
[x] bob #397
[X] bracket-push #398
[X] change (inline, shame on me)
[x] clock #399
[x] collatz-conjecture #402
[ ] complex-numbers
[ ] connect
[ ] crypto-square
[ ] custom-set
[ ] darts
[ ] diamond
[ ] difference-of-squares
[ ] dominoes
[ ] etl
[ ] forth
[ ] gigasecond
[ ] grade-school
[ ] grains
[ ] hamming
[X] hello-world #388
[ ] isbn-verifier
[ ] isogram
[ ] largest-series-product
[ ] leap
[ ] luhn
[ ] meetup
[ ] minesweeper
[ ] nucleotide-count
[ ] palindrome-products
[ ] pangram
[ ] pascals-triangle
[ ] perfect-numbers
[ ] poker
[ ] prime-factors
[ ] protein-translation
[ ] pythagorean-triplet
[ ] queen-attack
[ ] rail-fence-cipher
[ ] raindrops
[ ] rational-numbers
[ ] rna-transcription
[ ] robot-simulator
[ ] roman-numerals
[ ] rotational-cipher
[ ] run-length-encoding
[ ] scrabble-score
[ ] secret-handshake
[ ] series
[ ] sieve
[ ] space-age
[ ] spiral-matrix
[ ] sublist
[ ] sum-of-multiples
[ ] transpose
[ ] triangle
[X] two-fer #389
[x] word-count #401

As we are in the process of removing the test generator from this repository, we will continue over in the other repository.


etag propagation is not always synchronous

in some cases etags are not propagated synchronous, e.g. tests like apiWebdavEtagPropagation1/moveFileFolder.feature:184 or apiWebdavEtagPropagation2/copyFileFolder.feature:188 fail randomly in CI
@butonic could you please define cases where the etag propagation is allowed to be async, so that we can adjust the tests accordingly

A proper implementation on the client and server side would use the Prefer: respond-async header as defined in https://datatracker.ietf.org/doc/html/rfc7240#section-4.1 AFAICT that is not the case and the tests currently correctly test synchronous etag propagation.
@dragotin @felix-schwarz  IIRC the clients need the file id in the response of a PUT request, right? What about the etag?
We can add Prefer: respond-async, wait=5 to indicate that clients are willing to wait 5sec for a response. But these headers all only apply the the resource that was PUT.
I would argue that a Prefer: respond-async, wait=5 header would allow the server to respond synchronously with all the metadata that is available for the resource, eg fileid, mtime, size, etag ... while at the same time allowing async etag propagation up the tree. respond-async means that the client does not need any response, which is true if clients would generate uuid fileid they send along in a PUT request, TUS upload or MKCOL request.

As of now, the clients expect the ETag in response to the PUT (or the last action in the chunked uploads).
See https://github.com/owncloud/client/blob/master/src/libsync/propagateuploadng.cpp#L572 for the Desktop example, if the etag is empty, that results in an error.
We do not want to change that now.
That is also what we are aiming for with the asynchronous upload: The ETag is returned immediately with the last PUT, and the server takes care to set/change the ETag accordingly.
Note that theETag just needs to change, no further semantics, so it should be not so difficult for the server to even do that synchronous.

Note: we generally see this issue in tests that do a MOVE or COPY or some upload-overwrite, the response to the request has an eTag for the particular resource. But also the eTAG of parent folders up to the root is expected to change. The delay (async behavior) is observed when the test scenario "quickly" does API requests that check the eTag of the parent, grand-parent etc folders.
So, IMO, the current implementation is OK - clients will get an appropriate eTAG in the response for the resource that they just uploaded, copied, moved... Other clients are polling higher folders to "notice" an eTag change, and then discover and sync the changes from the server to their local storage. Those clients might not notice the higher-level eTag change for a few seconds. (Typically in practice we see that the higher-level eTags are updated within 1 second anyway). For clients that are polling at around 30 second intervals anyway, 1 or 2 seconds delay in the root eTag changing is not really going to be significant.

Ah, seems I overlooked that it is about the ETag change of the directories above the uploaded item, not the item itself.
I agree, that sounds ok if that does not happen immediately.

@butonic At the moment, the iOS client uses neither oc-fileid nor oc-etag. It instead does a subsequent PROPFIND on the expected destination path to fetch all metadata on the file in one go.
So the expectation from the iOS client is that when the server response to the upload request has been received:

a subsequent PROPFIND (Depth 0) on the expected destination path should work and not return an error
a subsequent PROPFIND (Depth 1) on the parent folder should include the file in its response

The iOS client should not run into any issues if the Etag updates to all parent folders is happening with delay / asynchronously. The only effect of that should be that updates on other devices that include the new file are delayed.
Regarding returning metadata in the upload response, as discussed in the past, I'd love to see a mechanism for clients to specify which properties of an uploaded file should be returned in the response through special request and response HTTP headers. F.ex. by tunneling a WebDAV request/response via oc-dav-request and oc-dav-response headers.

With regard to the latter, could you point me to an issue? I'd like to propose using the Prefer header here as well, eg. Prefer: include-annotations="display.subject" as described by https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part1-protocol.html#sec_Preferenceincludeannotationsodatainc However, I assume the annotations are not meant to solve that case.
Unfortunately, the IANA preference registry has no property we could use to tell the server which properties to return in the response.
Related: https://github.com/owncloud/ocis/issues/3782
But all this is not about the original question: when is async etag propagation allowed? Do clients expect the root etag to change synchronously?
Maybe a simple Prefer: return=representation or Prefer: return=minimal as described in https://datatracker.ietf.org/doc/html/rfc7240#section-4.2 is sufficient.

I think it can be summarized:

Async propagation of the ETag  up the dir tree is fine. Clients can deal with that. Testsuite needs to as well.
Clients make benefit if the last action (last move for example) returns the ETag, remote permissions and FileID metadata header. If one of them is missing that either causes an error (FileID) or additional subsequent PROPFINDs. Both is not optimal.

Thank you!!

well yes. I am kinda lost how that relates to the initial problem of this issue. I think @phil-davis has a reasonable answer, so I am closing this one. Feel free to re-open.


Qtum wallet launch error: Cannot parse configuration file: parse error on line 2, using # in rpcpassword can be ambiguous and should be avoided.

Downloaded the latest wallet version Mainnet Ignition v0.19.1 for Mac (qtum-0.19.1-osx-unsigned.dmg)
double click to open got error
Error: Cannot parse configuration file: parse error on line 2, using # in rpcpassword can be ambiguous and should be avoided.

Seems like a useful warning, # indicates a comment in the configuration file. Suggest you don't include # in a password.

Closing as this seems to be answered


Custom components for message

Hello thank you for sharing your work...
Coming to the issue/feature request, currently message seems to take only string, it would be nice to add custom components like image, video file attachments etc something like this https://chatui.io/components/file-card

Hello @startupgurukul thank you for your feedback.
We have this feature on our roadmap.
I'd like to hear from you, what approach would be better (and why)?

Dedicated component for each kind of message e.g. ,
One parametrized  component

Thank you for the reply.
Keeping message structure fixed with keys: type & payload based on type have rendering logic. Few message types like  image video and file can be handled by library still give an option to customise for users..
For example ,
type: image and payload: path to image
type: text and payload: message text
type: video, file and payload: path
This keeps message structure simple and based on type of message render components accordingly this enables users to extend it to any type of message they like
Here is how alibabas chat ui handles it
const initialMessages = [   {     type: 'text',     content: { text: 'message text' },     user: { avatar: '//gw.alicdn.com/tfs/TB1DYHLwMHqK1RjSZFEXXcGMXXa-56-62.svg' },   },   {     type: 'image',     content: {       picUrl: '//img.alicdn.com/tfs/TB1p_nirYr1gK0jSZR0XXbP8XXa-300-300.png',     },   }, ];
switch (type) {
  case 'text':
    return <Bubble content={content.text} />;
  case 'image':
    return (
      <Bubble type="image">
        <img src={content.picUrl} alt="" />
      </Bubble>
    );
  default:
    return null;
}

Source: https://chatui.io/components/chat

@startupgurukul Thank you for your explains.
I will add support for new kind of messages. This will be probably divided into few small update steps.
First the <Message /> component should be modified to allow to pass any content as children, or from model.content property  - for any custom content messages.
Note to myself: add <Message.Content /> Component.
For backward compatiblity current message type should have default set to "text" or "default" (or maybe "html" because now it uses dangerouslysetinnerhtml internally)
Maybe: new <Message.Content /> component should be typed instead of <Message />?
Next add predefined components for common types like image, video, etc

When are you releasing this feature @supersnager ?

@GhazanfarKhan Today/tommorow depending on your timezone ;)

32439f703361ac951522f8892a01982b8e16ccf8
https://github.com/chatscope/chat-ui-kit-react/releases/tag/v1.1.0
I will add some documentation later.

Awesome and thank you :)

Hi, Can you add documentation and few example for this new feature.

Awesome work.

Added some examples to Storybook:
https://chatscope.io/storybook/react/?path=/docs/components-message--html-content
https://chatscope.io/storybook/react/?path=/docs/components-message--text-content
https://chatscope.io/storybook/react/?path=/docs/components-message--image-content
https://chatscope.io/storybook/react/?path=/docs/components-message--custom-content

it would be perfect if there is an onclick listener for message (in this case image, video in future when added)

@startupgurukul I will add it.

@startupgurukul I will add it.


[FEATURE] Add a Goal section in the single habit statistics with total sum of minutes/hours/units by day/week/month/quarterly/year

Is your feature request related to a problem? Please describe.
It would be good to already see the total amount of hours/units you are aiming for in a certain time range, e.g. when I'm tracking some habits like studying or learning something new (and sticking to it). I think seeing this data in advance can boost and strenghten your habit.
Describe the solution you'd like
A Goal section in the single habit statistics page with a table showing the total amount of units by day, week, month, quarterly, year.
Describe alternatives you've considered
Nothing I can think of actually.
Additional context
Seeing in advance the final impact (e.g. 3k hours) of your small daily habit can be a real booster from the day one.

Thanks for your suggestion. In order to know your idea more clearly, I have a question here.
Do you mean you want a chart like the following picture which can summarize your time spent on maintaining a habit？

@Miaaaim I'm sorry but I don't fully understand your graph as I don't know what the X labels mean. But I was thinking to this kind of thing:

I set an habit as Studying with a (minimum) goal of 6 hours a day and that has e.g. a target of 365 days
I would like to see a Goal section with a forecast of total hours I'm aiming for, like this ⬇

Today: 6 (hours)
Week: 42 (hours)
Month: 180
Quarter: 546
Year: 2.2k
Also a graph showing (ongoing and future) cumulative amount of my effort would be good.
I hope I was more clear this time. :)

I understand your point. Thank you for your suggestion. We will consider it for future versions.

 Add a Goal section in the single habit statistics with total sum of units by time


Code Color lost in an Array with many Elements

versions: 1.21.0-beta2 (Windows) and 1.17.2x64 (Linux)
language: JavaScript
When i type:
let foo=[ "top","window","location","external","chrome","document","inlineCSS","target","width","height","canvas","data","DOMURL","img","svg","ctx","url","w","a","speechSynthesis","webkitNotifications","localStorage","sessionStorage","applicationCache","webkitStorageInfo","indexedDB","webkitIndexedDB","crypto","CSS","performance","console","devicePixelRatio","styleMedia","parent","opener","frames","self","defaultstatus","defaultStatus","status","name","length","closed","pageYOffset","pageXOffset","scrollY","scrollX"];
If i type: let foo=[ (without space) or let foo =[ (whitout space between assigment and square brackets), after the 24 element, atom lost the visual color code:

if i type: let foo = [ appears normal:

Thanks for taking the time to contribute!
We noticed that this is a duplicate of #1667. You may want to subscribe there for updates.
Because we treat our issues list as the Atom team's backlog, we close duplicates to focus our work and not have to touch the same chunk of code for the same reason multiple times. This is also why we may mark something as duplicate that isn't an exact duplicate but is closely related.
For information on how to use GitHub's search feature to find out if something is a duplicate before filing, see the How Can I Contribute? section of the Atom CONTRIBUTING guide.


[p50] dropbox shows "can't sync XXX" without detail

As per subject, certain files are not synching. Linux desktop tool doesn't seem to show more detail than that.
I've already tried but didn't work:

sudo chown %MY_ID%: -R XXX
Move XXX to somewhere else.
Restart Dropbox.
Restart OS.

After struggle, the following seems to have taken an effect:

On Dropbox, disable the selective sync for the folders where the problematic files reside in.
Let Dropbox complete sync.
Enable back in those folders.


Expose environment variable to helm chart value.

Is there an existing issue for this?

[X] I have searched the existing issues

What happened?
when deploy hubble-ui stand along on GKE. it's not working.
Cilium Version
cilium-cli: v0.13.2 compiled with go1.20.2 on linux/amd64
cilium image (default): v1.13.1
cilium image (stable): v1.14.3
cilium image (running): v1.12.10-gke.11
Kernel Version
Linux a015717 5.15.0-86-generic #96~20.04.1-Ubuntu SMP Thu Sep 21 13:23:37 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
Kubernetes Version
Client Version: version.Info{Major:"1", Minor:"26", GitVersion:"v1.26.3", GitCommit:"9e644106593f3f4aa98f8a84b23db5fa378900bd", GitTreeState:"clean", BuildDate:"2023-03-15T13:40:17Z", GoVersion:"go1.19.7", Compiler:"gc", Platform:"linux/amd64"}
Kustomize Version: v4.5.7
Server Version: version.Info{Major:"1", Minor:"27", GitVersion:"v1.27.3-gke.100", GitCommit:"6466b51b762a5c49ae3fb6c2c7233ffe1c96e48c", GitTreeState:"clean", BuildDate:"2023-06-23T09:27:28Z", GoVersion:"go1.20.5 X:boringcrypto", Compiler:"gc", Platform:"linux/amd64"}
Sysdump
N/A
Relevant log output
level=warning msg="Failed to create gRPC client" address="<IP_ADDRESS>:4244" error="connection error: desc = \"transport: error while dialing: dial tcp <IP_ADDRESS>:4244: connect: connection refused\"" hubble-tls=true next-try-in=10s peer=gke-phoenix-dev-cluster1-arm64-group1-4266fa47-gkv6 subsys=hubble-relay
level=warning msg="Failed to create gRPC client" address="<IP_ADDRESS>:4244" error="connection error: desc = \"transport: error while dialing: dial tcp <IP_ADDRESS>:4244: connect: connection refused\"" hubble-tls=true next-try-in=10s peer=gke-phoenix-dev-cluster1-arm64-group1-3b2f6dce-w3tk subsys=hubble-relay

Anything else?
https://github.com/cilium/cilium/blob/898a632e3c3b64eaa0f23ebde5a069e87373c59b/install/kubernetes/cilium/templates/hubble-ui/deployment.yaml#L99
    - name: FLOWS_API_ADDR
      value: "hubble-relay:443"
    - name: TLS_TO_RELAY_ENABLED
      value: "true"
    - name: TLS_RELAY_SERVER_NAME
      value: ui.hubble-relay.cilium.io

for gke it should be:
     - name: FLOWS_API_ADDR
      value: "hubble-relay.kube-system.svc:443"
    - name: TLS_TO_RELAY_ENABLED
      value: "true"
    - name: TLS_RELAY_SERVER_NAME
      value: relay.kube-system.svc.cluster.local

Code of Conduct

[X] I agree to follow this project's Code of Conduct

Oh, Sorry for paste the wrong logs.
If you check the GKE spec, you will understand.
https://cloud.google.com/kubernetes-engine/docs/how-to/configure-dpv2-observability#hubble-ui-standard

I believe this issue is a duplicate of https://github.com/cilium/cilium/issues/28708

Thank you!  I will use 1.15 once it's released.


Same reminders

Updated the definition of the same reminders.
Close #171

Codecov Report
Base: 59.10% // Head: 59.07% // Decreases project coverage by -0.03% :warning:

Coverage data is based on head (79af4d5) compared to base (57cb448).
Patch coverage: 25.00% of modified lines in pull request are covered.

Additional details and impacted files
@@             Coverage Diff              @@
##             master     #216      +/-   ##
============================================
- Coverage     59.10%   59.07%   -0.04%
  Complexity      804      804
============================================
  Files           158      158
  Lines          3255     3257       +2
  Branches        406      408       +2
============================================
  Hits           1924     1924
  Misses         1166     1166
- Partials        165      167       +2

Impacted Files
Coverage Δ

...du/address/model/datetime/DatetimeCommonUtils.java
94.28% <ø> (ø)

...edu/address/model/reminder/UniqueReminderList.java
48.21% <0.00%> (ø)

...in/java/seedu/address/model/reminder/Reminder.java
75.92% <33.33%> (-2.93%)
: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.


Local perf test

This is on my laptop (4 core, 8 GB). Go 1.8.
Using the just commited utils in the "local-perf" directory.
(pprof) top10
0.09s of 7.06s total ( 1.27%)
Dropped 108 nodes (cum <= 0.04s)
Showing top 10 nodes out of 165 (cum >= 1.53s)
      flat  flat%   sum%        cum   cum%
         0     0%     0%      5.24s 74.22%  runtime.goexit
         0     0%     0%      2.95s 41.78%  github.com/miekg/dns.(*Server).serve
         0     0%     0%      2.46s 34.84%  github.com/coredns/coredns/core/dnsserver.(*Server).ServePacket.func1
         0     0%     0%      2.46s 34.84%  github.com/miekg/dns.HandlerFunc.ServeDNS
     0.04s  0.57%  0.57%      2.45s 34.70%  github.com/coredns/coredns/core/dnsserver.(*Server).ServeDNS
         0     0%  0.57%      2.33s 33.00%  github.com/coredns/coredns/middleware/whoami.(*Whoami).ServeDNS
     0.04s  0.57%  1.13%      2.33s 33.00%  github.com/coredns/coredns/middleware/whoami.Whoami.ServeDNS
     0.01s  0.14%  1.27%      1.56s 22.10%  github.com/miekg/dns.(*response).WriteMsg
         0     0%  1.27%      1.53s 21.67%  github.com/coredns/coredns/core/dnsserver.(*Server).ServePacket
         0     0%  1.27%      1.53s 21.67%  github.com/mholt/caddy.startServers.func1

Corefile included in that repo. CoreDNS is running with:
./coredns -conf ~/git/coredns/perf-tests/local-perf/Corefile
profile attached.
pprof.coredns.localhost:6053.samples.cpu.001.pb.gz

/cc @chrisohaver
Don't see something really weird. Yes we should do more qps.

With cache enabled I don't see much difference.

Wouldn't expect to with whoami since it doesn't really do much. Would expect cache to make the difference with proxy.

Difference in the profile I meant.

Stuff that I'm seeing might be because everything is local. Pondering how I can test with an actual network.


Trovi 2.0: Implement store and retrieve endpoints

This patch introduces a new storage app as part of the API. The two endpoints currently exposed by the app are StoreContents and RetrieveContents, both located at the /contents path.
The StoreContents endpoint accepts a file upload and stores it in an appropriate storage backend.
When a file is ingested by StoreContents, it is handled by the standard FileUploadParser provided by Django Rest Framework. The upload parse delegates file streaming on ingress. If the file is smaller than a certain size (2 MB), the entire file is uploaded to Trovi and stored in a memory buffer, which is passed to a StorageRequestSerialized. If the file is larger than the limit, it is streamed to a StreamingFileUploadHandler, which then streams the file to the appropriate storage service.
Storage services are implemented via the StorageBackend interface, which is a file-like object which can read and write to a remote file. Currently, the only backend supported by default is OpenStack Swift, but more are in the works. Most of the methods for streaming I/O are implemented as abstract helper functions which are used in the base implementation of the interface's implementation of BufferedIOBase's operative methods. There are other methods which are relevant specifically to Trovi, such as to_urn and get_links. Each StorageBackend object represents a single remote file. To prevent against data corruption via concurrent writes/reads, there is a global lock table linked to the remote content's ID. As such, StorageBackends are context managers which give up their locks upon close. They should be used with with statements whenever possible.
If the StreamingFileUploadHandler is invoked, then StorageRequestSerializer will receive a pre-uploaded StorageBackend instead of a memory buffer. The serializer can use this object to return metadata back to the caller.
On RetrieveContents, an ArtifactVersion object is looked up via its contents_urn field. This means that content can only be retrieved if it is linked to an ArtifactVersion. From there, that ArtifactVersion is passed to a StorageRequestSerializer, where a StorageBackend object is created to retrieve metadata about the remote file.
The StorageBackend itself is responsible for synthesizing download links for the content. It does this via various link synthesis methods, which are implemented specifically to represent supported types of links. Right now, the only supported links are http and git. The metadata for these links are stored by ContentDownloadLink dataclasses.
Other changes:

✅ Add unit tests for storage system
👷 Update GitHub actions to propagate Chameleon Swift secrets
🚚 Move test data generation to a TestRunner in util, which makes it a lot less buggy
📇 Add new index to ArtifactVersion for content lookups

This index is unfortunately a no-op on MySQL databases

🏞 Clean up environment files
➕ Take dependency on keystoneauth1 for Swift adapter
➕ Add git modules to use as example artifacts for testing

 Trovi 2.0: Implement store and retrieve endpoints

I will be getting to the specific review comments in a moment, but given that there is concern, I figure I'd address that right away.

Locks for read/write

You're right. I had originally planned to have one backend object for each service. Since they now represent single Artifacts in storage, the locks are unnecessary (they were originally there to guarantee there would not be OOM errors). Regardless, I would like to remove it since it no longer serves the purpose it was originally intended for. However, OOM still becomes a concern if users attempt to upload many artifacts at the same time.

In-memory upload optimization

This was very easy to do, so I just added it in. It would be easy to remove as well.

Using Swift's large object support (DLO)

I found this from looking up how to stream objects to Swift. I did not know that this proxying solution was a possibility, as I'm not very familiar with file streaming in software. When I was doing my research, this was all I saw mentioned by other Swift users and the Swift documentation. In terms of complexity, it is actually not particularly complex. To a Swift user, DLO seems just like any other object. You download it by downloading GETing the path at the root of all the chunks, and it will send you back a single file. This works with temp URLs as well. You don't have to download the manifest and then the chunks. So for users, I think this should be fine. However, the proxying solution would definitely be way faster, so I agree that it would be good to revisit and fix. There are still looming OOM issues that come with the current solution on a 1 GB VM, but I think this could also be revisited when we swap to proxying, by simply limiting the number of concurrent streams with a semaphore.

I'm also not too excited about submodules

It's not perfect, but I do think the impact is not particularly huge. They're natively supported by GHA, and developers will not have to initialize them unless they are testing the storage system.

I think generating the test data in the test itself is a more maintainable and less fussy strategy

I agree 100%. I had initially tried generating test data, but getting python's tar module to work with memory buffers was so difficult (I could not get it to work), that I eventually went with submodules, because they seemed like a good way to package realistic test data without making developers have to download them to work on the project.

Cool, I think we're on the same page. Re: the tar generation, it would not be crazy (in my view) to also add a Make target or something (or possibly a tox setup step?) that generates the fixture tarballs via shell scripting.
I know how the Swift object segmentation works, it's more complicated on the upload side, and also if you want to actually inspect the state of the object store itself.


Use ruby under packages, instead of /var/vcap/bosh/bin/ruby

The /var/vcap/bosh/bin/ruby is a very old version, and BOSH team has plan to remove it from stemcell, after removing the ruby from stemcell, the packages in this PR failed to be compiled with error:
, Stderr: + cp -a common packaging pkg_utils services warden /var/vcap/packages/rabbit_node_ng

cd /var/vcap/packages/rabbit_node_ng/services/ng/rabbit
bundle_cmd=/var/vcap/packages/ruby/bin/bundle
/var/vcap/packages/ruby/bin/bundle config build.do_sqlite3 --with-sqlite3-dir=/var/vcap/packages/sqlite
/var/vcap/packages/ruby/bin/bundle install --local --deployment
cd /var/vcap/packages/rabbit_node_ng/warden
/var/vcap/packages/ruby/bin/bundle install --local --deployment --without=development test
/var/vcap/packages/ruby/bin/bundle exec rake setup:bin
/usr/bin/env: ruby: No such file or directory

LGTM, thanks @JimmyMa


bug: restrict level prop of title component

Currently our TitleProps accept all numbers for the level field. It should only take between 1 and 6 for HTML Header element (h1-h6).
So right now there is a check like below:
export type TitleProps = {
    level?: number;
    styles?: StyleTypes;
    children: React.ReactNode;
}

Then something like the following will work:
<Title level={100}>My Title</Title> { /* rendered: <h100>My Title</h100> */ }

We must limit this field. I can easily do it with TypeScript
like this:

type HTMLTitleLevel = 1 | 2 | 3 | 4 | 5 | 6;

export type TitleProps = {
    level?: HTMLTitleLevel;
    styles?: StyleTypes;
    children: React.ReactNode;
}

I can assign this issue to you

I thought you assigned it to me and I sent pr :(
still the problem is solved


Add git-label variable to terraform template for flux

As a: Developer
I want: to add a custom value for the git-sync-tag in the terraform template
So that: I can set a different value for it.
Describe the solution you'd like:
Acceptance Criteria:
Describe alternatives you've considered:
Additional context:
Does this require updates to documentation?: Yes

git-sync-tag is deprecated, use git_label now. More information here.

@edaena @samiyaakhtar should this be closed?

@andrebriggs yes, Edaena merged it today

@edaena in future let's start using the keyword Closing (such as Closing #813) so that issues will be automatically closed

@samiyaakhtar @edaena size?

@edaena is there an associated PR for this?

Closing @edaena


Speed Up server_test with DB magic

Description

Truncate the DB early to make things speedier when cloning
Remove DB Truncate when not needed from some test suites
Use RawQuery to drop the DB or create the DB instead of shelling out

Setup
make server_test

Code Review Verification Steps

[x] Request review from a member of a different team.

@jim - I believe this cuts a minute or so off the runtime for both regular tests and coverage tests. Not huge but every bit counts.


Increase chance of legacies, for singleplayer mostly

Rewrite now has a config.

Rewrite now has a config.


Does not produce a recording and not even the 'wurb_recordings' dir is created.

With a fresh install of latest development and latest release version (0.9.0) I cannot get a recording, although the web interface seems to run OK. There's not even the directory which is supposed to hold the recordings.
I imagined there may be a permission problem, but on the command line I can easily make a new directory in the /home/pi dir.
I doubt it has any relation to the issue, but during install (raspberry pi and RaspAP) I changed the usernames and device names to values different from what is recommended in the installation instructions.
Here's the latest entries in the wurb_rec_debug_log.txt, if it is any help.
2021-06-11 19:22:24,045 DEBUG    : API called: rpi-control:rpi_status.
2021-06-11 19:22:24,136 DEBUG    : Sound card: bcm2835 Headphones   Index: 0
2021-06-11 19:22:24,137 DEBUG    : Sound card: UltraMic384K 16bit r0   Index: 1
2021-06-11 19:22:24,137 DEBUG    : Sound cards capture: [1]
2021-06-11 19:22:24,137 DEBUG    : Sound cards playback: [0]
2021-06-11 19:22:24,142 INFO     : Connected microphone: UltraMic384K 16bit r0 Frequency: 384000 Hz.
2021-06-11 19:22:24,142 INFO     : Can't calculate solartime. Lat/long is missing.
2021-06-11 19:22:28,092 DEBUG    : API called: rpi-control:rpi_status.
2021-06-11 19:22:28,192 DEBUG    : Sound card: bcm2835 Headphones   Index: 0
2021-06-11 19:22:28,193 DEBUG    : Sound card: UltraMic384K 16bit r0   Index: 1
2021-06-11 19:22:28,193 DEBUG    : Sound cards capture: [1]
2021-06-11 19:22:28,193 DEBUG    : Sound cards playback: [0]
2021-06-11 19:22:28,198 INFO     : Connected microphone: UltraMic384K 16bit r0 Frequency: 384000 Hz.
2021-06-11 19:22:28,199 INFO     : Can't calculate solartime.  Lat/long is missing.
2021-06-11 19:24:10,325 DEBUG    : API called: rpi-control:rpi_status.
2021-06-11 19:24:10,425 DEBUG    : Sound card: bcm2835 Headphones   Index: 0
2021-06-11 19:24:10,426 DEBUG    : Sound card: UltraMic384K 16bit r0   Index: 1
2021-06-11 19:24:10,426 DEBUG    : Sound cards capture: [1]
2021-06-11 19:24:10,426 DEBUG    : Sound cards playback: [0]
2021-06-11 19:24:10,432 INFO     : Connected microphone: UltraMic384K 16bit r0 Frequency: 384000 Hz.
2021-06-11 19:24:10,432 INFO     : Can't calculate solartime.

Hi, and thank you for the report. It is good to have users that check the debug log, I like that :)
One basic problem is that I have to add more logging points in the code that makes it easier to follow whats happening inside the detector, for example when pressing the button for manually triggering as you did here. In this case there should either be a log row about the saved file, or an exception row describing why it fails.
The other part is to find out whats fails i your case.

The changed device name should not be a problem, I use different names of all of them, but the user name may be a problem.
The directory for recordings is only created when the first file is written to it. In this case somethings happens before that.
Can you try to attach an USB memory? The detector check there first, then for "/home/pi" and finally use the current directory when trying to create a "wurb_recordings" directory.

I don't understand exactly how the username was changed. Maybe you need to change "sudo -u pi bash..." in "/etc/rc.local" and "sudo -u pi devmon &" in "wurb_rec_start.sh".
Please report back, it is a good thing to replace the "pi" user if a detector is opened up for public use and I have to look into that myself.

Hi, thanks for your response. I like software that produces verbose logs, though in most cases they are not very helpful to me as a user. But they are useful to someone who knows the inner workings, so thumbs up for the good development practice.

Sorry, I was too vague about usernames and device name changes: I changed the RasAP admin user, but I did keep the pi user on the Raspberry. The Raspberry device name was also changed, but you mentioned that it is not a problem.
Good to know, that recordings directory is created on the first write. Maybe I don't have any data to write?
I did attach a 8GB NTFS-formated USB disk -> nothing. Maybe it has to be ext3/4 or other *nix file system?

Any ideas what else to try? I have a bad feeling about the web-interface: whenever I press "Show status" button, no matter what "mode" i selected before that, mode is switched to "microphone - off" and status shows the name of my mic for a second and then disappears.
Regarding the username changes on the raspberry pi, I've done it as recently as last month, while setting up my home NAS, but I can't find my notes and it makes me a bit nervous. The workflow is very well explained in the official Raspberry Pi documentation on security settings. I have a nagging feeling that my notes mentioned the difference of using adduser or useradd, and a few warnings about not to forget to add the new user to the sudoers group before deleting the pi user, but I won't know for sure until find my notes. Hope this helps.

NTFS is not installed by default. I think it is owned my Microsoft and can't be a part of the debian distribution. But you are allowed to install support for it yourself.
The jump to "microphone - off" indicates that the detector is not allowed to update the settings file. The name of the mic in the status field for a few seconds is a bug that will be fixed someday, it is mostly cosmetic, thanks for the hint.
Try to remove "cloudedbats_wurb_2020" and the directories starting with "wurb_", then repeat the installation from "CloudedBats software" in the installation guide.
Yesterday I found a really useful page: https://raspberrypi-guide.github.io/
Under "Other/Increasing security" both changing the default user and adding a firewall are included.
I have started to open up one detector for safe read-only access over SFTP and need that for that detector. The installation for that will be found in the guide for advanced users that can be found in the "docs" section. Maybe also useful to expose a home NAS?

Hi, it's me again :-).
I did delete dirs and reinstall the development version -> no change.
However, digging further leads me to believe the problems is with the settings passed to FastAPI.
After first killing the server, then manually restarting it and playing around in the web UI, here is what I get back at the Raspi console:
(venv) pi@edgedaq01:~/cloudedbats_wurb_2020 $ kill -9 $(ps -A | grep python3 | awk '{print $1}')
(venv) pi@edgedaq01:~/cloudedbats_wurb_2020 $ python3 wurb_rec_start.py
INFO:     Started server process [1226]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://<IP_ADDRESS>:8000 (Press CTRL+C to quit)
INFO:     ('<IP_ADDRESS>', 54245) - "WebSocket /ws" [accepted]
2021-06-14 04:12:18
Mon Jun 14 04:12:18 JST 2021
INFO:     <IP_ADDRESS>:54246 - "GET /set-time/?posixtime=1623611538424 HTTP/1.1" 200 OK
INFO:     <IP_ADDRESS>:54247 - "POST /save-settings/ HTTP/1.1" 422 Unprocessable Entity
INFO:     <IP_ADDRESS>:54247 - "GET /rec-manual-trigger/ HTTP/1.1" 200 OK
INFO:     <IP_ADDRESS>:54248 - "GET /rec-manual-trigger/ HTTP/1.1" 200 OK
INFO:     <IP_ADDRESS>:54249 - "POST /save-settings/ HTTP/1.1" 422 Unprocessable Entity
INFO:     <IP_ADDRESS>:54249 - "GET /rpi-control/?command=rpi_status HTTP/1.1" 200 OK

Hi, this is strange. Completely new to me, but if it happens to you it may happens to others as well. It seems like the 422 error is related to FastAPI and the format checking part. And people complains because it does not tell what is wrong.
I started it up in my development mode (Mac - Parallels - Ubuntu - vscode) and it works as expected. But this maybe happens before my code is executed, otherwise there should be an error log about it when you run it. Then I activated "Web developer - Web developer tools" in Firefox. Then "Network", clicked on the Save button in the detectors UI and then checked the respons in raw format. This is what I got when it works and the response code is 200 OK:
{"rec_mode":"mode-off","file_directory":"Station-1","file_directory_date_option":"date-post-before","filename_prefix":"wurb","detection_limit_khz":"17","detection_sensitivity_dbfs":"-50","detection_algorithm":"detection-simple","rec_length_s":"6","rec_type":"FS","feedback_on_off":"feedback-off","feedback_volume":"50","feedback_pitch":"30","feedback_filter_low_khz":"15","feedback_filter_high_khz":"150","startup_option":"","scheduler_start_event":"on-sunset","scheduler_start_adjust":"-15","scheduler_stop_event":"off-sunrise","scheduler_stop_adjust":"15","scheduler_post_action":"post-none","scheduler_post_action_delay":"5"}
Another thing that can happen is that html and javascript files are out of sync. I try to increase a version number for js-files in the html file to avoid that, but strange things may happen anyway. Have you tried from another browser or mobile phone?

Yes, you are right. It is related to the latest release of FastAPI. I upgraded to version FastAPI 0.65.2 and got the same error. It was release 5 days ago.
Try to downgrade to FastAPI 0.63.0:
pip uninstall fastapi
pip install "fastapi==0.63.0"
I hope it will work until I have fixed the code.

Fantastic!
I can confirm that after reverting to the older version of FastAPI, the recorder works as expected.
Just a reminder to anyone trying to do the downgrade, to activate the virtual environment before uninstall/re-install like this:
source venv/bin/activate
pip uninstall fastapi
pip install "fastapi==0.63.0"

Although this solves the problem for me, you indicated that you consider it a workaround until you fix the code. So I am leaving this issue open for now. I took the liberty to simplify the title and point to cause of the problem.
I am really happy to have worked with you through this and I am looking forward to giving you useful feedback in the future.
Just for comparison, I'd mention that at work I've had to deal with bugs in the toolboxes of a well-known software maker, where days go by before they acknowledge the (paid) support request, a week goes by to have it confirmed as a problem, and a promise that it will be fixed in a future version 1/2 years or 1 year later depending on the workload and priorities of the developers.
5 stars (*****)!

The code is corrected and checked in to the main branch.
FastAPI did a security upgrade and json is now only accepted in requests if content-type is set to application/json. It wasn't for POST requests, but they are now.
I also added a note in the readme file if someone want to run older versions of the wurb.
And a really big thank you to slowglow who found the bug and also pointed out the right direction where to look. It was a tricky one, but we managed it together :)

I am a happy user and closing this.