Netty SSL Handler does not fail the SSL handshake even if the certificate is expired.

Expected behavior
SSL handshake should fail if the certificate is expired.
Actual behavior
SSL handshake does not fail even if the server sends an expired certificate to the client.
Steps to reproduce
I have a client which uses netty SSL handler. I have used this site to test my SSL client.
https://badssl.com/
I have imported the certificate of  https://expired.badssl.com/ into my trustStore.
Ideally, it should fail if I call https://expired.badssl.com/ from my client after giving the CertificateExpiredException. But the SSL handshake becomes successful.
Minimal yet complete reproducer code (or URL to code)
What I do in the code is, I create a java SSLContext after loading the trustStore. This trust stote contains the above mentioned expired certificate. Then using that SSLContext I create a sslEngine and pass it to netty SSL Handler.
public SSLEngine buildClientSSLEngine(SSLContext sslContext) {
        SSLEngine sslEngine = sslContext.createSSLEngine();
        engine.setUseClientMode(false);
        engine.setNeedClientAuth(false);
       return sslEngine;
}

How I add the created sslEngine to SSL Handler.
serverPipeline.addLast("ssl", new SslHandler(sslEngine));
Netty version
4.1.19.Final
JVM version (e.g. java -version)
1.8
OS version (e.g. uname -a)
Ubuntu

@Bhashinee I suspect your configuration of SSLContext is not correct. Netty itself just does what the SSLEngine tells it to do. So there is really nothing we can do here. For how to probably configure your SSLEngine please refer to the documentation on it

Why are you creating a client SSL engine with setUseClientMode(false)?
you might consider an approach like this
    private SslContext getSslContext() throws IOException, CertificateException {
        SslContextBuilder sslContextBuilder = SslContextBuilder.forClient().trustManager(getCertificateAuthority());
        if (OpenSsl.isAvailable()) {
            if (logger.isDebugEnabled()) {
                logger.debug("Running " + OpenSsl.versionString());
            }
            sslContextBuilder.sslProvider(SslProvider.OPENSSL);
        } else {
            if (logger.isDebugEnabled()) {
                logger.debug("OpenSsl not available", OpenSsl.unavailabilityCause());
            }
            sslContextBuilder.sslProvider(SslProvider.JDK);
        }
        return sslContextBuilder.build();
    }

Thank you very much for the responses. I tested it with the HttpSnoopClient which is given as an http example client.
SnoopClient class
public final class HttpSnoopClient {

    static final String URL = System.getProperty("url", "https://expired.badssl.com/");

    public static void main(String[] args) throws Exception {
        URI uri = new URI(URL);
        String scheme = uri.getScheme() == null? "http" : uri.getScheme();
        String host = uri.getHost() == null? "<IP_ADDRESS>" : uri.getHost();
        int port = uri.getPort();
        if (port == -1) {
            if ("http".equalsIgnoreCase(scheme)) {
                port = 80;
            } else if ("https".equalsIgnoreCase(scheme)) {
                port = 443;
            }
        }

        if (!"http".equalsIgnoreCase(scheme) && !"https".equalsIgnoreCase(scheme)) {
            System.err.println("Only HTTP(S) is supported.");
            return;
        }

        // Configure SSL context if necessary.
        final boolean ssl = "https".equalsIgnoreCase(scheme);
        final SslContext sslCtx;
        if (ssl) {
            // This is the certificate of the https://expired.badssl.com/.
            File certificate =  new File("/home/bhashinee/Documents/shit/expiredCert/_.badssl.com");
            sslCtx = SslContextBuilder.forClient().trustManager(certificate).build();
        } else {
            sslCtx = null;
        }

        // Configure the client.
        EventLoopGroup group = new NioEventLoopGroup();
        try {
            Bootstrap b = new Bootstrap();
            b.group(group)
             .channel(NioSocketChannel.class)
             .handler(new HttpSnoopClientInitializer(sslCtx));

            // Make the connection attempt.
            Channel ch = b.connect(host, port).sync().channel();

            // Prepare the HTTP request.
            HttpRequest request = new DefaultFullHttpRequest(
                    HttpVersion.HTTP_1_1, HttpMethod.GET, uri.getRawPath());
            request.headers().set(HttpHeaderNames.HOST, host);
            request.headers().set(HttpHeaderNames.CONNECTION, HttpHeaderValues.CLOSE);
            request.headers().set(HttpHeaderNames.ACCEPT_ENCODING, HttpHeaderValues.GZIP);

            // Set some example cookies.
            request.headers().set(
                    HttpHeaderNames.COOKIE,
                    ClientCookieEncoder.STRICT.encode(
                            new DefaultCookie("my-cookie", "foo"),
                            new DefaultCookie("another-cookie", "bar")));

            // Send the HTTP request.
            ch.writeAndFlush(request);

            // Wait for the server to close the connection.
            ch.closeFuture().sync();
        } finally {
            // Shut down executor threads to exit.
            group.shutdownGracefully();
        }
    }
}

I set the SNI parameters for the ssl engine in HttpSnoopClientInitializer.
HttpSnoopClientInitializer
public class HttpSnoopClientInitializer extends ChannelInitializer<SocketChannel> {

    private final SslContext sslCtx;

    public HttpSnoopClientInitializer(SslContext sslCtx) {
        this.sslCtx = sslCtx;
    }

    @Override
    public void initChannel(SocketChannel ch) {
        ChannelPipeline p = ch.pipeline();

        // Enable HTTPS if necessary.
        if (sslCtx != null) {
            SslHandler x = sslCtx.newHandler(ch.alloc());
            SSLEngine sslEngine = x.engine();
            setSNIServerNames(sslEngine, "expired.badssl.com");
            p.addLast("ssl", new SslHandler(sslEngine));
        }

        p.addLast(new HttpClientCodec());

        // Remove the following line if you don't want automatic content decompression.
        p.addLast(new HttpContentDecompressor());

        // Uncomment the following line if you don't want to handle HttpContents.
        //p.addLast(new HttpObjectAggregator(1048576));

        p.addLast(new HttpSnoopClientHandler());
    }

    public void setSNIServerNames(SSLEngine sslEngine, String peerHost) {
        SSLParameters sslParameters = new SSLParameters();
        List<SNIServerName> serverNames = new ArrayList<SNIServerName>();
        serverNames.add(new SNIHostName(peerHost));
        sslParameters.setServerNames(serverNames);
        sslEngine.setSSLParameters(sslParameters);
    }
}

This should fail the SSL handshake because the certificate is expired. But the SSL handshake does not fail.

for SNI better if you swap out SslHandler x = sslCtx.newHandler(ch.alloc()); with SslHandler x = sslCtx.newHandler(ch.alloc(), "expired.badssl.com", 443);

@johnou Thank you very much for that information. It is easier than what I did. :)
However, shouldn't this SSL handshake need to be failed as it is an expired certificate?

@Bhashinee Hi Bhanshinee, is there any workaround from you on this issue, as i was working on a product which I am facing similar issue. It would be helpful if u have any direction on this. Thanks, VC


wsl is freeze on installing packages by npm install

Windows Version
Microsoft Windows [Version 10.0.22631.3593]
WSL Version
<IP_ADDRESS>
Are you using WSL 1 or WSL 2?

[X] WSL 2
[ ] WSL 1

Kernel Version
<IP_ADDRESS>-2
Distro Version
Ubuntu 22.04.3 LTS
Other Software
NodeJS v20.14.0
Repro Steps

Open Ubuntu 22.04.3 LTS terminal
cd some_project_with_package.json
npm install

Expected Behavior
The terminal continuously displays the package installation process.
### Tasks
- [ ] Add a draft title or issue reference here

Actual Behavior
WSL terminal freezes.
The npm process won't exit by the Ctrl+C command.
$ rm -rf node_modules/
$ npm i
⠏^C^C

The npm process exists.
$ ps axl | grep npm
0  1000     658     375  20   0 3315272 2128964 x64_sy Sl+ pts/0    0:56 npm i

Diagnostic Logs
No response
### Tasks

WslLogs-2024-06-08_13-08-35.zip

Thank you @haw0k . Can you share an strace of the process that freezes ? (strace -f )

$ npm cache clean --force
$ rm -rf node_modules/ package-lock.json
$ npm i

56172 pts/0    Sl+    0:00 npm i5.$ strace -f -p 56172 -o strace.log```
Best environment for reproducing: The nextj
strace.zip
s empty project created by npx create-next-app@latest

Did any of you manage to fix this? I'm getting this now, and it only happens if there is no package-lock.json already, so it freezes for all new projects.

Newest versions, same buggy behavior.
> wsl --version
WSL version: <IP_ADDRESS>
Kernel version: <IP_ADDRESS>-2
WSLg version: 1.0.65
MSRDC version: 1.2.5620
Direct3D version: 1.611.1-81528511
DXCore version: 10.0.26100.1-240331-1435.ge-release
Windows version: 10.0.22631.4317

Today it worked again. Updated to latest wsl by manually downloading from releases, and installed node and npm with volta. No idea what fixed it, seems a little random.
> node --version
v22.11.0

> npm --version
10.9.0

> wsl --version
WSL version: <IP_ADDRESS>
Kernel version: <IP_ADDRESS>-2
WSLg version: 1.0.65
MSRDC version: 1.2.5620
Direct3D version: 1.611.1-81528511
DXCore version: 10.0.26100.1-240331-1435.ge-release
Windows version: 10.0.22631.4317


Add default handler registration to DSL module

This is useful for modules that perform processing only on some events.
E.g., the default action could be forwarding to another module.

This may go well with this change I was thinking about but didn't add to the main branch yet: https://github.com/xosmig/mir/pull/2

Right now, the semantics of "not matching an event" is somewhat ambiguous because, in practice, we have a hierarchy of event types in Mir, but the core of DSL is only aware of the top level.


Failed to save rviz config

Describe your issue here and explain how to reproduce it.
When I change my rviz config, then click file > save config as > h2.rviz
    Failed to open /opt/ros/melodic/share/rviz/h2.rviz for writing.

I've tried reinstalling RViz using sudo apt-get install --reinstall ros-melodic-rviz but the issue still remains.
Your environment

OS Version: Ubuntu 18.04
ROS Distro: Melodic
RViz, Qt, OGRE, OpenGl version as printed by rviz:

[ INFO] [1591762597.218020280]: rviz version 1.13.12
[ INFO] [1591762597.218085425]: compiled against Qt version 5.9.5
[ INFO] [1591762597.218093680]: compiled against OGRE version 1.9.0 (Ghadamon)
[ INFO] [1591762597.221079106]: Forcing OpenGl version 0.
[ INFO] [1591762597.678897836]: Stereo is NOT SUPPORTED
[ INFO] [1591762597.678943111]: OpenGl version: 4.6 (GLSL 4.6).

Obviously, you don't have permission to write in /opt/ros/melodic!

hi,you can try to change folder to your work space,such as catkin_ws/

Such a monumentally helpful answer @rhaschke. Having encountered the same issue myself and now seeing your descriptive answer I know exactly how to proceed from here! Great!

hi,you can try to change folder to your work space,such as catkin_ws/

Thanks. It works.


Create a Navbar

A navbar is an important aspect of design this site is currently lacking a navbar. Please allow me to add a navbar to the site.

go ahead

@PriyanshuRj any update ?

Working on it.

#28 Please review this PR


Bk/finish show

Updates show page styling, adds seeds to database, and refactors models

Merging as per our pair programming.


DO NOT MERGE branch contains rhtap

Related to https://github.com/stackrox/scanner/pull/1387

This triggered Konflux CI, as expected.


fix(graphql): include introspection fields in error

include __schema and __type part of the result when there is an indexing error and the error policy is deny.
Fixes #2443

There is another issue I found (could just be how tests are setup) but I wasn't really able to fix. In the example below if there is an indexing error this will return null but I would imagine that we return partial result i.e. __schema is returned in the data
query { musician(id: "m1") { id } __schema { queryType { name } } }

LGTM but I'd rather @lutter also reviews

@saihaj Can you rebase once more? CI is now actually stable and we should then be able to merge this finally


Swift 2.0

Will leave this PR open until Swift 2.0 launches and it can track changes to make SnapKit compatible.

Now that the GM is released will we be able to merge this PR soon?

Yup! Will be doing it soon :+1:

Does that means that 14.0 support swift 2.0 ?


add verbs tab to shortcut menus

Add a tab to the React shortcut menus showing the currently available verbs. Selecting a verb should erase the existing line (or replace the verb component), it cannot be appended since verbs usually lead.

The verb script lookup returns untranslated names (the keys), which will need to be translated along with the menu tabs.


How to insert a line break?

Hi, I can't seem to find any way to insert a line break (either a
 or a \n).
The only option I can think of is to use the string formatting with:
test: 'some very very long string.{0}I want to break it on multiple lines',

[...]

strings.formatString(strings.test,
)

But it's not a great solution since I will need to remember to use this syntax every time I want to use that string.
May you help me please?

Can you show me an example of your use case?

I have a long sentence and I want to specify some line breaks to make the reading easier.
I think it’s a reasonable request

@FezVrasta you're not limited to strings and you can include HTML fragments and React components.
Your file will need to be a .jsx (or tsx) and you'll be able to define things such as:
test: <Fragment>some very very long string.
I want to break it on multiple lines</Fragment>

Thanks, I don't think this is mentioned anywhere in the documentation right?

That's not in the documentation but it's mentioned in issue (#115), however, doing more tests it seems to be working fine with Chrome but not with Firefox where is raises the following error:

or, in plain text:
Uncaught TypeError: "key" is read-only
    _fallbackValues LocalizedStrings.js:191
    _fallbackValues LocalizedStrings.js:189
    _fallbackValues LocalizedStrings.js:197
    _fallbackValues LocalizedStrings.js:189
    setLanguage LocalizedStrings.js:173
    setContent LocalizedStrings.js:99
    LocalizedStrings LocalizedStrings.js:69

LocalizedStrings.js:191 is
          strings[key] = defaultStrings[key]; // eslint-disable-line no-param-reassign

Interestingly, eslint has been disabled on the line which raises the error in Firefox !

In fact that doesn't work with Chrome either (the only reason it didn't raise the error was because it was set with th edefault language while Firefox was not).
The issue is that when building the fallback values, the library recursively copies properties in objects (probably to support using plain JS objects to give some structure to the localization objects), it doesn't differentiate JS object literals from more complex objects such as React components and recursively copying these object properties just doesn't work.
I guess a fix would be to add a test to differentiate "simple" from "complex" objects.

There doesn't seem to be a way to differentiate between simple and complex objects in JavaScript, however, React components have a $$typeof property which will likely not appear on "simple" objects.
A quick and dirty way to fix the problem is to apply this patch:
diff --git a/node_modules/localized-strings/lib/LocalizedStrings.js b/node_modules/localized-strings/lib/LocalizedStrings.js
index eefa6c8..e0a3cae 100644
--- a/node_modules/localized-strings/lib/LocalizedStrings.js
+++ b/node_modules/localized-strings/lib/LocalizedStrings.js
@@ -192,8 +192,8 @@ var LocalizedStrings = function () {
           if (_this4._opts.logsEnabled) {
             console.log("\uD83D\uDEA7 \uD83D\uDC77 key '" + key + "' not found in localizedStrings for language " + _this4._language + " \uD83D\uDEA7");
           }
-        } else if (typeof strings[key] !== "string") {
-          // It's an object
+        } else if (typeof strings[key] !== "string" && defaultStrings[key].$$typeof === undefined) {
+          // It's an object (and it's not a React component)
           _this4._fallbackValues(defaultStrings[key], strings[key]);
         }
       });

However, this patch is on the LocalizedStrings which aims to be generic and will perhaps not be interested by a fix which is React specific!

I have open an issue in localized-strings.


Allow "ticked" variables at any type

(Work in progress, posting for discussion.)
This PR extends the meaning of 'a variables from Type variables, useful e.g. in
val id : 'a -> 'a
let f x = x

to any type, so one can write things like:
val concat_lseq : lseq 'a 'l1 -> lseq 'a 'l2 -> lseq 'a ('l1 + 'l2)
let concat_lseq s1 s2 = append s1 s2

Without needing to explicitly bind the 'l1 and 'l2. There's an example file with a handful of examples.
The change to remove the Type restriction is easy enough and did not trigger any regression across everest (though it could, there's an example in the file, though one that's unlikely anyone would write.)
What I'm concerned about is that I don't know the precise semantics of these variables, e.g. where they are allowed to appear. One cannot explicitly bind them it seems. #681 is related, where the discussions seems to conclude in that mixing these variables with regular implicits is an anti-pattern.
@A-Manning recently asked about this in Zulip.

Note for instance this weirdness:
let f 'a = 1 + 'a

This is currently allowed, without restricting to Type. But using it in a val apparently does restrict to Type.

I've updated this, and fixed a bug that was causing a test to fail (the bugfix is unrelated and coming to master). I'm still puzzled about whether
f 'x = ...

is allowed. Shouldn't we forbid these variables in binding position, at least in surface code?


added php 7.2 && nightly in travis

added php 7.2 && nightly in travis
removed hhvm in travis

LGTM 👍

Let's do the following:

Allow 7.2 to pass
Remove nightly (we can re-enable when either an alpha or beta is first released for 7.3)

nightly was already removed with https://github.com/zendframework/zend-view/pull/135/commits/94e9ecccf084f0060a8684024c379a4f53caa79b


cmake platform autodetect

There is somewhat confusing construction of configuration in CMakeLists.txt that will automatically run 64-bit configuration on 32-bit system.
Initial BUILD_X64=ON
Initial CMAKE_BUILD_TYPE=
rdopng build type: Release
Building 64-bit
-- Configuring done

Even if someone makes that effort co cross compile to x64 on x86 they will not run it anyway. Opposite situation - cross compiling and running 32-bit program on 64-bit system - is absolutely possible. It would be better to set 32-bit build false by default and auto detect platform.
# on 32-bit system
Initial BUILD_X32=OFF
(...)
Building 32-bit

# on 64-bit system
Initial BUILD_X32=OFF
(...)
Building 64-bit

If one wanted to force 32-bit compilation they can do that with $ cmake -DBUILD_X32 ..
# on 64-bit system
Initial BUILD_X32=TRUE
(...)
Building 32-bit

Thanks!  Will test this and integrate the next time I spend a few days working on this project.


Chat-History of with Build Chatbot with the Gemini API extension firebase

[READ] Step 1: Are you in the right place?
Regarding: Build Chatbot with the Gemini API Extension Firebase
Issues filed here should be about bugs for a specific extension in this repository.
If you have a general question, need help debugging, or fall into some
other category use one of these other channels:

For general technical questions, post a question on StackOverflow
with the firebase tag.
For general Firebase discussion, use the firebase-talk
google group.
To file a bug against the Firebase Extensions platform, or for an issue affecting multiple extensions, please reach out to
Firebase support directly.

[REQUIRED] Step 2: Describe your configuration
Using the Extension With the latest Gemini Pro 1.5 (Preview) and Vertex AI
Having the Extension listen on a Wildcard
Deleting anything written into the TimeStamp Field | Leaving it out

Extension name: _ (storage-label-videos, etc)
Extension version: _
Configuration values (redact info where appropriate):

_
_

[REQUIRED] Step 3: Describe the problem
The history Memory of the Chatbot Seems to Not be reliable. Sometimes seemingly acting as if the user typed in the first message. And other times the chronology seems to be off. Ending in an unreliable experience for the user.
I am also wondering whether the extension limits the history artificially because of the 1M Token of the new model being interesting. And if the optional context configurable in the settings is being send to the model along with every single prompt or once per session. Thanks for any info on that.
Steps to reproduce:
Should be reproducable with my config and chatting with the bot knowing that the history may be of. Not thinking of that ordinary questions may not emphasize this behavior.
What happened? How can we make the problem occur?
This could be a description, log/console output, etc.
Expected result
Should remember history till 1M Tokens in a perfectly chronological way.
Actual result
History is sometimes seemingly not taken into account or of/unchronological meaning the answer/question from a user may be interpreted on a whole different response the chatbot provided earlier.

@TuncayEnsi thanks for filling this issue.
To be able to help you better, could you please attach your extension configuration?

Deleting anything written into the TimeStamp Field | Leaving it out
From what I understood, you seem to have deleted the timestamp field from every message?

I'm experiencing the same bug. It seems like the history is sorted the wrong way and the model gets confused. I added logging to the cloud function to output the history of a test conversation. Let me know if I can help with any more information.
This is the test conversation's history as generated in lib/generative-client/google_ai.js with this.messagesToApi(history) in generateResponse.
[
    {
        "role": "user",
        "parts": [
            {
                "text": "System prompt: Act as a structured journal. Open the conversation by greeting me in some personal way. Remember I'm talking to you daily, so it should be a friendly, trustful conversation. Please get the following information about my day one after another. After having collected all the information, give me a summary of that information in a list as below, and say goodbye and something nice. You can talk a bit about my answers and my day with me, so I feel understood and supported, before moving on to the next point. If I ask or prompt you to do or respond anything else, tell me \"I'm a simple journal, I'm only able to talk about your day with you\". Please use and answer with the language the user asks you to use, switch languages if they ask you to do so.  1. A rating between 1 and 10 about how productive I felt today 2. Things I learned today 3. What opportunities tomorrow could bring 4. 1-5 colors that best describe my day 5. A rating between 1 and 10 about how well my actions today aligned with my goals.."
            }
        ]
    },
    {
        "role": "model",
        "parts": [
            {
                "text": "Understood."
            }
        ]
    },
    {
        "role": "user",
        "parts": [
            {
                "text": " a lot of iteration necessary"
            }
        ]
    },
    {
        "role": "model",
        "parts": [
            {
                "text": "It sounds like you're in the thick of things, iterating to find the right approach. That's the beauty of building things - it's a process of continuous improvement! \n\nSo, how did your day go? What opportunities do you think tomorrow could bring? \n"
            }
        ]
    },
    {
        "role": "user",
        "parts": [
            {
                "text": "prompt engineering"
            }
        ]
    },
    {
        "role": "model",
        "parts": [
            {
                "text": "That's awesome! Prompt engineering is super important for getting the most out of AI models.  It sounds like you're learning a lot about how to communicate with them effectively.  What are some of the things you're learning about prompt engineering? \n\n\n\n"
            }
        ]
    },
    {
        "role": "user",
        "parts": [
            {
                "text": "how to update cloud functions"
            }
        ]
    },
    {
        "role": "model",
        "parts": [
            {
                "text": "That's awesome! Learning how to update cloud functions is a super valuable skill. It means you're getting more and more comfortable working with them!  Do you have any specific plans for using that knowledge? \n\nNow, tell me, what opportunities do you think tomorrow could bring?  \n\n\n"
            }
        ]
    },
    {
        "role": "user",
        "parts": [
            {
                "text": "10"
            }
        ]
    },
    {
        "role": "model",
        "parts": [
            {
                "text": "Amazing! A solid 10! You must have had a really productive day! Now, tell me, what did you learn today?  What exciting new things did you discover? \n\n\n"
            }
        ]
    },
    {
        "role": "user",
        "parts": [
            {
                "text": "how to update cloud functions"
            }
        ]
    },
    {
        "role": "model",
        "parts": [
            {
                "text": "That's great! It's important to keep your Cloud Functions up-to-date.  Learning about how to do that is a valuable skill.  I bet you're excited to put those skills to use! \n\nSo, on a scale of 1 to 10, how productive did you feel today? \n\n\n"
            }
        ]
    },
    {
        "role": "user",
        "parts": [
            {
                "text": "that setting the context for an ai is hard"
            }
        ]
    },
    {
        "role": "model",
        "parts": [
            {
                "text": "It definitely can be! There's a lot of fine-tuning involved in getting an AI to understand what you want it to do.  But,  it sounds like you're making progress! That's amazing!\n\n  So,  let's get back to your day.  What did you learn today? Tell me all about it! \n"
            }
        ]
    },
    {
        "role": "user",
        "parts": [
            {
                "text": "not much"
            }
        ]
    },
    {
        "role": "model",
        "parts": [
            {
                "text": "Oh, I understand. Not much feels like you might not have been super productive, but that's okay! Sometimes things just happen that way. It's important to be kind to yourself.  \n\nSo, what did you learn today?  Anything new and exciting?  Even if it feels like it wasn't a super productive day,  there's always something to learn.  \n\n"
            }
        ]
    },
    {
        "role": "user",
        "parts": [
            {
                "text": "10"
            }
        ]
    },
    {
        "role": "model",
        "parts": [
            {
                "text": "A 10!  That's fantastic!  You must have been really on top of your game today. What did you learn today? Tell me all about it! \n"
            }
        ]
    },
    {
        "role": "user",
        "parts": [
            {
                "text": "Im trying to build a jornaling app that leverages AI and tomorrow I will adjust the prompt context"
            }
        ]
    },
    {
        "role": "model",
        "parts": [
            {
                "text": "That's awesome! Building a journaling app with AI sounds like a really cool project.  I'm excited to see how you integrate those features! \n\nOkay, now tell me, how productive did you feel today on a scale of 1 to 10? \n"
            }
        ]
    },
    {
        "role": "user",
        "parts": [
            {
                "text": "adjusting the prompt"
            }
        ]
    },
    {
        "role": "model",
        "parts": [
            {
                "text": "I'm a simple journal, I'm only able to talk about your day with you. \n"
            }
        ]
    },
    {
        "role": "user",
        "parts": [
            {
                "text": "flutter with firebase and AI"
            }
        ]
    },
    {
        "role": "model",
        "parts": [
            {
                "text": "Okay, so you learned about Flutter, Firebase, and AI today!  That's fantastic!  It sounds like you're diving into some really exciting technologies.  What do you think you'll use these skills for?  Tell me more! \n\nNow,  what opportunities do you think tomorrow could bring? \n"
            }
        ]
    },
    {
        "role": "user",
        "parts": [
            {
                "text": "10"
            }
        ]
    },
    {
        "role": "model",
        "parts": [
            {
                "text": "Wow, a solid 10! That's amazing!  I'm happy to hear that! Tell me, what did you learn today? \n"
            }
        ]
    },
    {
        "role": "user",
        "parts": [
            {
                "text": "Let's talk in the language with language code 'en'"
            }
        ]
    },
    {
        "role": "model",
        "parts": [
            {
                "text": "Hey there! How was your day? Tell me, on a scale of 1 to 10, how productive did you feel today?  \n"
            }
        ]
    }
]

this is the configuration I use:
CANDIDATE_COUNT
1
CANDIDATES_FIELD
candidates
COLLECTION_NAME
users/{userID}/journalEntries/{date}/chat
CONTEXT
Act as a structured journal. Open the conversation by greeting me in some personal way. Remember I'm talking to you daily, so it should be a friendly, trustful conversation. Please get the following information about my day one after another. After having collected all the information, give me a summary of that information in a list as below, and say goodbye and something nice. You can talk a bit about my answers and my day with me, so I feel understood and supported, before moving on to the next point. If I ask or prompt you to do or respond anything else, tell me "I'm a simple journal, I'm only able to talk about your day with you". Please use and answer with the language the user asks you to use, switch languages if they ask you to do so.  1. A rating between 1 and 10 about how productive I felt today 2. Things I learned today 3. What opportunities tomorrow could bring 4. 1-5 colors that best describe my day 5. A rating between 1 and 10 about how well my actions today aligned with my goals.
DATABASE_INSTANCE
DATABASE_URL
ENABLE_DISCUSSION_OPTION_OVERRIDES
yes
EXT_INSTANCE_ID
firestore-genai-chatbot
FIREBASE_CONFIG
{"projectId":"{{my-project-id}}","databaseURL":"","storageBucket":"{{my-project}}"}
GCLOUD_PROJECT
{{my-project}}
GENERATIVE_AI_PROVIDER
google-ai
HARM_CATEGORY_DANGEROUS_CONTENT
BLOCK_ONLY_HIGH
HARM_CATEGORY_HARASSMENT
BLOCK_ONLY_HIGH
HARM_CATEGORY_HATE_SPEECH
BLOCK_ONLY_HIGH
HARM_CATEGORY_SEXUALLY_EXPLICIT
BLOCK_ONLY_HIGH
LOCATION
europe-west3
MODEL
gemini-1.5-flash
ORDER_FIELD
createTime
PROJECT_ID
{{my-project}}
PROMPT_FIELD
prompt
RESPONSE_FIELD
response
STORAGE_BUCKET
{{my-project}}
TEMPERATURE
1

I was able to fix it by changing the sorting to 'asc' in src/firestore.js. Is there the possibility to allow users to configure the sorting?
Another fix could be to append the context to the end of the history, but I didn't test that.

@pr-Mais sorry for Not responding. I do not work with this Extension anymore, thus I do not have detailed information about the context of the bug. I would refere to my initial post .Please excuse me for opening this up and not cooperating after that.

I am having the same issue. Every new messages is like a new conversation. Did anyone find a solution?

@ftaibi you can manually change the sorting to 'asc' in src/firestore.js in the deployed function.
To make it more automated, I created a fork and made the change there. To deploy the forked extension with the fix, I added this to my firebase.json:
"extensions": {
  "firestore-genai-chatbot": "../firebase-extensions/firestore-genai-chatbot"
}

And cloned the fork to ../ relative to that firebase.json.
The directory structure should then look like this:
├─ firebase_project
 │      └── firebase.json
└─ your_fork_of_firebase_extensions
Then you should be able to deploy with
firebase deploy --only extensions

Filing a PR for this


Cannot subscribe to topic 'frigate/events'

[REQUIRED] Card diagnostic information:

card_version: 6.0.0
browser: >-
  Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like
  Gecko) Chrome/<IP_ADDRESS> Safari/537.36
date: 2024-12-09T19:06:18.664Z
lang: en_GB
timezone: *****
git:
  hash: '4590558'
  build_date: Mon, 09 Dec 2024 00:16:17 GMT
  commit_date: Sun, 8 Dec 2024 16:05:13 -0800
ha_version: 2024.12.0
integrations:
  reolink:
    detected: true
  frigate:
    detected: true
    version: 5.5.1
    devices:
      *********: 5.5.1/0.14.1-f4f3cfa
  hass_web_proxy:
    detected: false
  motioneye:
    detected: true
config:
  type: custom:frigate-card
  cameras:
    - camera_entity: camera.cam5

[REQUIRED] Description of problem:

After updating to the latest version, I encounter the following error. Each time I refresh the page, the error appears for a different camera. I’ve tried clearing the cache, but it didn’t help. Additionally, I’m seeing errors in Frigate itself. When I revert to version 5.2.0, everything works perfectly without making any changes to the configuration.
Is there something specific that needs to be updated or adjusted for this version?

[OPTIONAL] Last working release (if known):
5.2.0
[OPTIONAL] Javascript errors shown in the web inspector:
[Cannot subscribe to topic 'frigate/events](card-7cd05290.js:75 Cannot subscribe to topic 'frigate/events', make sure MQTT is set up correctly)

You can safely ignore the "Onvif is not setup" errors. Just asking Frigate about whether a camera supports PTZ, appears to cause it to produce those errors. I believe that has already been fixed if you update your Frigate version.

[Cannot subscribe to topic 'frigate/events](card-7cd05290.js:75 Cannot subscribe to topic 'frigate/events', make sure MQTT is set up correctly)

This is a real problem though ... all Frigate cameras will attempt to subscribe to the events stream. Is there anything in your Home Assistant logs at the same time?

Logger: homeassistant.components.websocket_api.http.connection
Source: components/websocket_api/connection.py:315
integration: Home Assistant WebSocket API (documentation, issues)
First occurred: 6 December 2024 at 20:48:16 (27 occurrences)
Last logged: 22:05:23
[139935193883280] Error handling message: Cannot subscribe to topic 'frigate/events', make sure MQTT is set up correctly (home_assistant_error) sam from <IP_ADDRESS> (Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36)
[139934937645408] Error handling message: Cannot subscribe to topic 'frigate/events', make sure MQTT is set up correctly (home_assistant_error) sam from <IP_ADDRESS> (Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36)
[139934937657792] Error handling message: Cannot subscribe to topic 'frigate/events', make sure MQTT is set up correctly (home_assistant_error) sam from <IP_ADDRESS> (Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36)
[139934901582240] Error handling message: Cannot subscribe to topic 'frigate/events', make sure MQTT is set up correctly (home_assistant_error) sam from <IP_ADDRESS> (Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36)
[139934911186112] Error handling message: Cannot subscribe to topic 'frigate/events', make sure MQTT is set up correctly (home_assistant_error) sam from <IP_ADDRESS> (Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36)

I tried the beta version a few days ago, and it had the same issue. I initially thought it was due to being a beta release, which is why it's reporting the first occurrence as version 6.
It's strange because it seems to work normally on Firefox and mobile. Also, should I have MQTT enabled in Frigate? I currently have it disabled.

File "/usr/local/lib/python3.13/site-packages/homeassistant/components/mqtt/client.py", line 220, in async_subscribe_internal
mqtt_data = hass.data[DATA_MQTT]
~~~~~~~~~^^^^^^^^^^^
KeyError: 'mqtt'

Hmm. This suggests the error is on the right track: Do you have the mqtt integration installed? You're not going to get far with Frigate without it :-) The Frigate integration for home assistant depends on MQTT.

What do you mean by MQTT integration? If you’re referring to Home Assistant (HA), no, I don’t have any MQTT integration set up. As I mentioned, I also have MQTT disabled in the Frigate configuration.
That said, I didn’t change anything after upgrading, and the error wasn’t present before. I couldn’t find any mention of a dependency between MQTT and the Frigate integration in the documentation. Apologies if I missed something—could you please point me in the right direction?

Once again, I was not aware that MQTT was required for the integration to function properly because it appeared to work with just a minimal setup. I’ve only been using it that way, and I couldn’t find any clear mention in the documentation stating that MQTT must be enabled.
I enabled MQTT in Frigate to test if it resolved the issue, but it didn’t help. Could you please clarify exactly what steps I need to take to get this working properly? Thank you!

Once again, I was not aware that MQTT was required for the integration to function properly because it appeared to work with just a minimal setup. I’ve only been using it that way, and I couldn’t find any clear mention in the documentation stating that MQTT must be enabled.

It is quite literally the first line in the installation documentation for the integration :-) Providing exact step-by-step instructions here is not really in the scope of support available. My suggestion is to try the above installation instructions for the integration -- I am happy to help if you get stuck as you work through those steps. Good luck.

Thank you, that’s exactly the direction I needed! I realize now that I was looking at the card documentation instead of the Frigate integration itself. An embarrassing oversight on my part, especially since my minimal setup seemed to work fine. I really appreciate you pointing me in the right direction. Thanks again for your patience and help, and sorry for any inconvenience caused!


Develop

Refer to issue 54.

Any questions, comments or concerns regarding this pull request?

@JeremyButts Sorry about the major delay in getting back to you!
We're looking at bringing this in for the next release, can you remove the NCrunch file? (src/Splunk.Client/nCrunchTemp_927b2bcf-1091-4b97-a65b-a51cfe2ec2ff)

@JeremyButts we've released v2.2.5 which addresses this issue. Please give it a try


Casting either string or constant requires space after rparenthesis

Describe the bug
Casting something that is not a variable requires a space, where casting a variable doesn't (but it is allowed to have a space)
Erroneous code
(int16_t *)"AA"
(int16_t *)25

Additional info

OS: macos 10.14
python --version: 3.9.1
norminette -v: 3.2.1

Additional context
Can get "around" it by either adding a space or brackets:
(int16_t *) "AA"
(int16_t *)("AA")

The first one, without space, generates this:
<TAB> <IF> <SPACE> <LPARENTHESIS> <LPARENTHESIS> <IDENTIFIER=int16_t> <SPACE> <MULT> <RPARENTHESIS> <STRING="AA"> <RPARENTHESIS> <NEWLINE>
                                                                                ^-----------^

If this is not a "string" or "constant" but "identifier" it works without a space (or brackets).

Hello,
I think I've incidentally fixed it while working on #86 and #87, as far as I can test it.
Please let me know if the issue persists when I do the next release. Thanks!

@N0ich
It sounds very related, but sadly...
I've just updated to 3.2.2 and get exactly the same
SPC_AFTER_PAR        (line:  64, col:  32):	Missing space after parenthesis (brace/bracket)
The actual line of code from the project (just for reference, snippets above do the same)
if (((int16_t *)line)[0] == ((int16_t *)"NO")[0] && is_space)

It btw seems to be inconsistent with wanting a space between type and *
Maybe this is a separate issue... but seems related to https://github.com/42School/norminette/issues/87
this is fine:
(int16_t*)varname

but this complains that it needs a space:
(short*)varname

SPACE_AFTER_KW       (line:  64, col:  23):	Missing space after keyword

Thank you, i will investigate this further.
This will probably stand for a few days waiting for the next release.


[Primitive][Slot] Fix slot event composition for custom handlers

Description
Right now SlotClone components replace child handlers (props starting with 'on') with a composed event with child handler and slot handler.
If the child handler is a custom handler that should receive more than 1 argument, it will receive only the first argument because the composeEventHandlers only pass the first argument to the handlers.
With this change it will pass all received arguments to the handlers.

I added a check on type of event param to prevent errors if it is not an object


new notification sound is extremely annoying

I'm getting the client via the Play Store. There was an update this week (don't remember which day exactly), and when I talked to someone using Riot today, I noticed that there is a new notification sound which is not the standard one. The sound is high-pitched and really annoying. Everytime it plays, I twitch involuntarily and this has already cost me a few lives in the game I was playing. I looked through the Settings menu and could not see an option to change the sound. Please add such an option, or just get rid of the sound (the default one is good enough).

@majewsky
The notification sound is the same than the webclient.
You could also disable the notification (it is only available on the webclient settings).

Disabling the notification is not an option. I want to be notified when a message comes in, but I don't want it to happen with this annoying sound.

The notification sound is the same than the webclient.

So it's the old question of "should we be consistent with the platform, or with ourselves on other platforms?". My money is always on "the platform" or "let the user decide". (For example, I hate WhatsApp's custom notification sound just as much. At least they only do it when the app is open, though.)
I'm trying to say this in the politest way possible, but I want to be clear at the same time: If the decision is to stay with this sound and not offer an option to reset the sound to system defaults, I will uninstall Riot (and, consequently, probably also Synapse). It's that annoying a sound.

Thanks! Very much appreciated.


BCSAR files incompatible with a 3DS

The BCSAR files created using the VGAudio library work fine when decoded on a computer, but fail to play on a 3DS, specifically when applied as a background theme in the HOME menu. I've tried comparing the file information of two BCSAR files, which had everything in common but the library that was used to encode the file. The results can be seen below:

Original
Sample count: 2051072 (94,0083 seconds)
Sample rate: 21818 Hz
Channel count: 2
Encoding format: GameCube "DSP" 4-bit ADPCM
Loop start: 157696 samples (7,2278 seconds)
Loop end: 2051072 samples (94,0083 seconds)

Interleave Count: 144
Interleave Size: 0x2000
Samples per interleave: 14336
Last interleave size without padding: 0x250
Last interleave size: 0x260
Samples in last interleave block: 1024
Sample count from data size: 2051084

Samples per seek table entry: 14336

Track 0
-------------------------
Channel Count: 2
Left channel ID: 0
Right channel ID: 1
Volume: 0x7F
Panning: 0x40

Channel 0
----------------------------------------
Coefficients:
[0]: 0x0390, 0xFE4F
[1]: 0x0A1C, 0xFB2E
[2]: 0x0606, 0xFF7D
[3]: 0x0989, 0xFDC3
[4]: 0x0746, 0xFC4A
[5]: 0x0BA7, 0xFB2E
[6]: 0x071F, 0xFFD3

Gain: 0x0000
Pred/Scale: 0x0000
History sample 1 (n-1): 0x0000
History sample 2 (n-2): 0x0000

Loop Pred/Scale: 0x0000
Loop History sample 1: 0x0069
Loop History sample 2: 0x0069

Channel 1
----------------------------------------
Coefficients:
[0]: 0x0179, 0xFF5C
[1]: 0x08C5, 0xFBC8
[2]: 0x045A, 0x0160
[3]: 0x0991, 0xFD7E
[4]: 0x054B, 0xFE04
[5]: 0x0AFB, 0xFB56
[6]: 0x0672, 0x00B3

Gain: 0x0000
Pred/Scale: 0x0000
History sample 1 (n-1): 0x0000
History sample 2 (n-2): 0x0000

Loop Pred/Scale: 0x0000
Loop History sample 1: 0x003A
Loop History sample 2: 0x003A

Re-encoded (VGAudio)
Sample count: 2051072 (94,0083 seconds)
Sample rate: 21818 Hz
Channel count: 2
Encoding format: GameCube "DSP" 4-bit ADPCM
Loop start: 157696 samples (7,2278 seconds)
Loop end: 2051072 samples (94,0083 seconds)

Interleave Count: 144
Interleave Size: 0x2000
Samples per interleave: 14336
Last interleave size without padding: 0x24A
Last interleave size: 0x260
Samples in last interleave block: 1024
Sample count from data size: 2051072

Samples per seek table entry: 14336

Track 0
-------------------------
Channel Count: 2
Left channel ID: 0
Right channel ID: 1
Volume: 0x7F
Panning: 0x40

Channel 0
----------------------------------------
Coefficients:
[0]: 0x0388, 0xFE58
[1]: 0x0A1C, 0xFB2F
[2]: 0x060C, 0xFF72
[3]: 0x097F, 0xFDCC
[4]: 0x0745, 0xFC45
[5]: 0x0BA2, 0xFB35
[6]: 0x0713, 0xFFDC

Gain: 0x0000
Pred/Scale: 0x0000
History sample 1 (n-1): 0x0000
History sample 2 (n-2): 0x0000

Loop Pred/Scale: 0x0069
Loop History sample 1: 0xF0EF
Loop History sample 2: 0xF0EF

Channel 1
----------------------------------------
Coefficients:
[0]: 0x0177, 0xFF5F
[1]: 0x08C2, 0xFBCB
[2]: 0x045C, 0x015B
[3]: 0x0987, 0xFD87
[4]: 0x054C, 0xFE00
[5]: 0x0AF9, 0xFB5C
[6]: 0x066C, 0x00B8

Gain: 0x0000
Pred/Scale: 0x0000
History sample 1 (n-1): 0x0000
History sample 2 (n-2): 0x0000

Loop Pred/Scale: 0x003A
Loop History sample 1: 0xF2DE
Loop History sample 2: 0xF2DE

There seems to be a difference in offsets for the following:

Last interleave size without padding (0x250 vs 0x24A)
Sample count from data size (2051084 vs 2051072)
All coefficients of both channels
Complete loop information (Loop Pred/Scale, Loop History sample 1, Loop History sample 2) of both channels

Other than that, the files seem to be identical.
May I ask if a fix is possible? I can provide more information or samples if needed.
Also, thank you for the previous fix you've made!
Many thanks in advance.

I'm sorry for making a mistake, the file in question is BCSTM, not BCSAR (I'll fix the comments as well as the title).
I've tried the following:

Reencoding BCSTM to another BCSTM
Converting BCSTM to HCA and back to BCSTM
Converting BCSTM to BRSTM and back to BCSTM
Converting BCSTM to WAV (through VGAudio) and back to BCSTM
Converting BCSTM to WAV (through FFmpeg) and back to BCSTM

The results

Note: All of the files were converted from the original BCSTM

BCSTM (original)
BCSTM (original)

Sample count: 2051072 (94,0083 seconds)
Sample rate: 21818 Hz
Channel count: 2
Encoding format: GameCube "DSP" 4-bit ADPCM
Loop start: 157696 samples (7,2278 seconds)
Loop end: 2051072 samples (94,0083 seconds)

Interleave Count: 144
Interleave Size: 0x2000
Samples per interleave: 14336
Last interleave size without padding: 0x250
Last interleave size: 0x260
Samples in last interleave block: 1024
Sample count from data size: 2051084

Samples per seek table entry: 14336

Track 0
-------------------------
Channel Count: 2
Left channel ID: 0
Right channel ID: 1
Volume: 0x7F
Panning: 0x40

Channel 0
----------------------------------------
Coefficients:
[0]: 0x0390, 0xFE4F
[1]: 0x0A1C, 0xFB2E
[2]: 0x0606, 0xFF7D
[3]: 0x0989, 0xFDC3
[4]: 0x0746, 0xFC4A
[5]: 0x0BA7, 0xFB2E
[6]: 0x071F, 0xFFD3

Gain: 0x0000
Pred/Scale: 0x0000
History sample 1 (n-1): 0x0000
History sample 2 (n-2): 0x0000

Loop Pred/Scale: 0x0000
Loop History sample 1: 0x0069
Loop History sample 2: 0x0069

Channel 1
----------------------------------------
Coefficients:
[0]: 0x0179, 0xFF5C
[1]: 0x08C5, 0xFBC8
[2]: 0x045A, 0x0160
[3]: 0x0991, 0xFD7E
[4]: 0x054B, 0xFE04
[5]: 0x0AFB, 0xFB56
[6]: 0x0672, 0x00B3

Gain: 0x0000
Pred/Scale: 0x0000
History sample 1 (n-1): 0x0000
History sample 2 (n-2): 0x0000

Loop Pred/Scale: 0x0000
Loop History sample 1: 0x003A
Loop History sample 2: 0x003A

BCSTM to BCSTM
BCSTM to BCSTM

Sample count: 2051072 (94,0083 seconds)
Sample rate: 21818 Hz
Channel count: 2
Encoding format: GameCube "DSP" 4-bit ADPCM
Loop start: 157696 samples (7,2278 seconds)
Loop end: 2051072 samples (94,0083 seconds)

Interleave Count: 144
Interleave Size: 0x2000
Samples per interleave: 14336
Last interleave size without padding: 0x24A
Last interleave size: 0x260
Samples in last interleave block: 1024
Sample count from data size: 2051072

Samples per seek table entry: 14336

Track 0
-------------------------
Channel Count: 2
Left channel ID: 0
Right channel ID: 1
Volume: 0x7F
Panning: 0x40

Channel 0
----------------------------------------
Coefficients:
[0]: 0x0390, 0xFE4F
[1]: 0x0A1C, 0xFB2E
[2]: 0x0606, 0xFF7D
[3]: 0x0989, 0xFDC3
[4]: 0x0746, 0xFC4A
[5]: 0x0BA7, 0xFB2E
[6]: 0x071F, 0xFFD3

Gain: 0x0000
Pred/Scale: 0x0000
History sample 1 (n-1): 0x0000
History sample 2 (n-2): 0x0000

Loop Pred/Scale: 0x0069
Loop History sample 1: 0xF0CC
Loop History sample 2: 0xF0CC

Channel 1
----------------------------------------
Coefficients:
[0]: 0x0179, 0xFF5C
[1]: 0x08C5, 0xFBC8
[2]: 0x045A, 0x0160
[3]: 0x0991, 0xFD7E
[4]: 0x054B, 0xFE04
[5]: 0x0AFB, 0xFB56
[6]: 0x0672, 0x00B3

Gain: 0x0000
Pred/Scale: 0x0000
History sample 1 (n-1): 0x0000
History sample 2 (n-2): 0x0000

Loop Pred/Scale: 0x003A
Loop History sample 1: 0xF2CC
Loop History sample 2: 0xF2CC

BCSTM to HCA to BCSTM
BCSTM to HCA to BCSTM

Sample count: 2051072 (94,0083 seconds)
Sample rate: 21818 Hz
Channel count: 2
Encoding format: GameCube "DSP" 4-bit ADPCM
Loop start: 157696 samples (7,2278 seconds)
Loop end: 2051072 samples (94,0083 seconds)

Interleave Count: 144
Interleave Size: 0x2000
Samples per interleave: 14336
Last interleave size without padding: 0x24A
Last interleave size: 0x260
Samples in last interleave block: 1024
Sample count from data size: 2051072

Samples per seek table entry: 14336

Track 0
-------------------------
Channel Count: 2
Left channel ID: 0
Right channel ID: 1
Volume: 0x7F
Panning: 0x40

Channel 0
----------------------------------------
Coefficients:
[0]: 0x03E2, 0xFE31
[1]: 0x0A67, 0xFB03
[2]: 0x0671, 0xFF17
[3]: 0x09B6, 0xFD9F
[4]: 0x07A6, 0xFBFE
[5]: 0x0BD2, 0xFB12
[6]: 0x0747, 0xFFAA

Gain: 0x0000
Pred/Scale: 0x0000
History sample 1 (n-1): 0x0000
History sample 2 (n-2): 0x0000

Loop Pred/Scale: 0x0039
Loop History sample 1: 0xF320
Loop History sample 2: 0xF320

Channel 1
----------------------------------------
Coefficients:
[0]: 0x0199, 0xFF56
[1]: 0x08F6, 0xFBA5
[2]: 0x0486, 0x013C
[3]: 0x09DA, 0xFD3C
[4]: 0x0578, 0xFDE0
[5]: 0x0B1A, 0xFB3E
[6]: 0x069C, 0x008D

Gain: 0x0000
Pred/Scale: 0x0000
History sample 1 (n-1): 0x0000
History sample 2 (n-2): 0x0000

Loop Pred/Scale: 0x0079
Loop History sample 1: 0xF1C7
Loop History sample 2: 0xF1C7

BCSTM to BRSTM to BCSTM
BCSTM to BRSTM to BCSTM

Sample count: 2051072 (94,0083 seconds)
Sample rate: 21818 Hz
Channel count: 2
Encoding format: GameCube "DSP" 4-bit ADPCM
Loop start: 157696 samples (7,2278 seconds)
Loop end: 2051072 samples (94,0083 seconds)

Interleave Count: 144
Interleave Size: 0x2000
Samples per interleave: 14336
Last interleave size without padding: 0x24A
Last interleave size: 0x260
Samples in last interleave block: 1024
Sample count from data size: 2051072

Samples per seek table entry: 14336

Track 0
-------------------------
Channel Count: 2
Left channel ID: 0
Right channel ID: 1
Volume: 0x7F
Panning: 0x40

Channel 0
----------------------------------------
Coefficients:
[0]: 0x0390, 0xFE4F
[1]: 0x0A1C, 0xFB2E
[2]: 0x0606, 0xFF7D
[3]: 0x0989, 0xFDC3
[4]: 0x0746, 0xFC4A
[5]: 0x0BA7, 0xFB2E
[6]: 0x071F, 0xFFD3

Gain: 0x0000
Pred/Scale: 0x0000
History sample 1 (n-1): 0x0000
History sample 2 (n-2): 0x0000

Loop Pred/Scale: 0x0069
Loop History sample 1: 0xF0CC
Loop History sample 2: 0xF0CC

Channel 1
----------------------------------------
Coefficients:
[0]: 0x0179, 0xFF5C
[1]: 0x08C5, 0xFBC8
[2]: 0x045A, 0x0160
[3]: 0x0991, 0xFD7E
[4]: 0x054B, 0xFE04
[5]: 0x0AFB, 0xFB56
[6]: 0x0672, 0x00B3

Gain: 0x0000
Pred/Scale: 0x0000
History sample 1 (n-1): 0x0000
History sample 2 (n-2): 0x0000

Loop Pred/Scale: 0x003A
Loop History sample 1: 0xF2CC
Loop History sample 2: 0xF2CC

BCSTM to WAV (VGAudio) to BCSTM
BCSTM to WAV (VGAudio) to BCSTM

Sample count: 2051072 (94,0083 seconds)
Sample rate: 21818 Hz
Channel count: 2
Encoding format: GameCube "DSP" 4-bit ADPCM
Loop start: 157696 samples (7,2278 seconds)
Loop end: 2051072 samples (94,0083 seconds)

Interleave Count: 144
Interleave Size: 0x2000
Samples per interleave: 14336
Last interleave size without padding: 0x24A
Last interleave size: 0x260
Samples in last interleave block: 1024
Sample count from data size: 2051072

Samples per seek table entry: 14336

Track 0
-------------------------
Channel Count: 2
Left channel ID: 0
Right channel ID: 1
Volume: 0x7F
Panning: 0x40

Channel 0
----------------------------------------
Coefficients:
[0]: 0x0388, 0xFE58
[1]: 0x0A1C, 0xFB2F
[2]: 0x060C, 0xFF72
[3]: 0x097F, 0xFDCC
[4]: 0x0745, 0xFC45
[5]: 0x0BA2, 0xFB35
[6]: 0x0713, 0xFFDC

Gain: 0x0000
Pred/Scale: 0x0000
History sample 1 (n-1): 0x0000
History sample 2 (n-2): 0x0000

Loop Pred/Scale: 0x0069
Loop History sample 1: 0xF0EF
Loop History sample 2: 0xF0EF

Channel 1
----------------------------------------
Coefficients:
[0]: 0x0177, 0xFF5F
[1]: 0x08C2, 0xFBCB
[2]: 0x045C, 0x015B
[3]: 0x0987, 0xFD87
[4]: 0x054C, 0xFE00
[5]: 0x0AF9, 0xFB5C
[6]: 0x066C, 0x00B8

Gain: 0x0000
Pred/Scale: 0x0000
History sample 1 (n-1): 0x0000
History sample 2 (n-2): 0x0000

Loop Pred/Scale: 0x003A
Loop History sample 1: 0xF2DE
Loop History sample 2: 0xF2DE

BCSTM to WAV (FFmpeg) to BCSTM
BCSTM to WAV (FFmpeg) to BCSTM

Sample count: 2051072 (94,0083 seconds)
Sample rate: 21818 Hz
Channel count: 2
Encoding format: GameCube "DSP" 4-bit ADPCM
Loop start: 157696 samples (7,2278 seconds)
Loop end: 2051072 samples (94,0083 seconds)

Interleave Count: 144
Interleave Size: 0x2000
Samples per interleave: 14336
Last interleave size without padding: 0x24A
Last interleave size: 0x260
Samples in last interleave block: 1024
Sample count from data size: 2051072

Samples per seek table entry: 14336

Track 0
-------------------------
Channel Count: 2
Left channel ID: 0
Right channel ID: 1
Volume: 0x7F
Panning: 0x40

Channel 0
----------------------------------------
Coefficients:
[0]: 0x038A, 0xFE58
[1]: 0x0A1C, 0xFB30
[2]: 0x060D, 0xFF71
[3]: 0x0980, 0xFDCC
[4]: 0x0744, 0xFC45
[5]: 0x0BA2, 0xFB35
[6]: 0x0713, 0xFFDD

Gain: 0x0000
Pred/Scale: 0x0000
History sample 1 (n-1): 0x0000
History sample 2 (n-2): 0x0000

Loop Pred/Scale: 0x0069
Loop History sample 1: 0xF0EA
Loop History sample 2: 0xF0EA

Channel 1
----------------------------------------
Coefficients:
[0]: 0x0178, 0xFF60
[1]: 0x08C2, 0xFBCC
[2]: 0x045C, 0x015C
[3]: 0x0987, 0xFD88
[4]: 0x054C, 0xFDFF
[5]: 0x0AF9, 0xFB5C
[6]: 0x066C, 0x00B8

Gain: 0x0000
Pred/Scale: 0x0000
History sample 1 (n-1): 0x0000
History sample 2 (n-2): 0x0000

Loop Pred/Scale: 0x003A
Loop History sample 1: 0xF2D8
Loop History sample 2: 0xF2D8

After testing all the files, the only one that plays is the original one. More than half of the files' information that differs seems to be unique, but they have two parameters that match for those files that don't work:

Last interleave size without padding (original: 0x250, all the other reencoded ones: 0x24A)
Sample count from data size (original: 2051084, all the other reencoded ones: 2051072)

Also, the sample count from data size in those reencoded files match the file's sample count as well as the loop end (the loop ends at the very end of the file).
The original file:

Sample count: 2051072 (94,0083 seconds)
Loop end: 2051072 samples (94,0083 seconds)
Sample count from data size: 2051084
Last interleave size without padding: 0x250

All the other reencoded files:

Sample count: 2051072 (94,0083 seconds)
Loop end: 2051072 samples (94,0083 seconds)
Sample count from data size: 2051072
Last interleave size without padding: 0x24A

So I've decided to recreate both working and non-working scenarios so that you could reproduce them as well to see the difference. To avoid any copyright infringement, I'll be using a royalty-free audio file.
These are the exact steps to creating both files:

I used this audio file (direct download link)
Then I used FFmpeg to modify the file:

ffmpeg -i "The Cannery.mp3" -ar 22050 "cannery.mp3" <-- Set the sample rate to 22050 Hz
ffmpeg -i "cannery.mp3" -af atrim=start_sample=118262:end_sample=361122 "cannery2.mp3" <-- Shorten the file

After that, I used Looping Audio Converter 1.3 (the one known to work in the 3DS' Home Menu):

All I did here was importing the file, setting the output format to BCSTM and hitting Start.
The produced file worked in the 3DS' Home Menu

Once the file was generated, I run the following command:

VGAudioCli.exe -i "cannery2.bcstm" -o "cannery2_vg.bcstm" --no-loop
The produced file didn't work in the 3DS' Home Menu

More details are available below (both files were exported without the loop - it's not a problem):

Looping Audio Converter 1.3 variant (works)
Sample count: 244224 (11,0759 seconds)
Sample rate: 22050 Hz
Channel count: 2
Encoding format: GameCube "DSP" 4-bit ADPCM

Interleave Count: 18
Interleave Size: 0x2000
Samples per interleave: 14336
Last interleave size without padding: 0x128
Last interleave size: 0x140
Samples in last interleave block: 512
Sample count from data size: 244230

Samples per seek table entry: 14336

Track 0
-------------------------
Channel Count: 2
Left channel ID: 0
Right channel ID: 1
Volume: 0x7F
Panning: 0x40

Channel 0
----------------------------------------
Coefficients:
[0]: 0x03D6, 0xFDE4
[1]: 0x0921, 0xFBDB
[2]: 0x000A, 0x07F5
[3]: 0x0C6E, 0xFA7F
[4]: 0x05BC, 0x0001
[5]: 0x08A2, 0xFE79
[6]: 0x0109, 0x06EA

Gain: 0x0000
Pred/Scale: 0x0050
History sample 1 (n-1): 0x0000
History sample 2 (n-2): 0x0000

Loop Pred/Scale: 0x0000
Loop History sample 1: 0x0000
Loop History sample 2: 0x0000

Channel 1
----------------------------------------
Coefficients:
[0]: 0x0348, 0xFE18
[1]: 0x0921, 0xFBBB
[2]: 0x028E, 0x04CA
[3]: 0x0C7C, 0xFA69
[4]: 0x0595, 0xFFFB
[5]: 0x08B9, 0xFE45
[6]: 0x0001, 0x07FF

Gain: 0x0000
Pred/Scale: 0x0050
History sample 1 (n-1): 0x0000
History sample 2 (n-2): 0x0000

Loop Pred/Scale: 0x0000
Loop History sample 1: 0x0000
Loop History sample 2: 0x0000

VGAudio variant (doesn't work)
Sample count: 244224 (11,0759 seconds)
Sample rate: 22050 Hz
Channel count: 2
Encoding format: GameCube "DSP" 4-bit ADPCM

Interleave Count: 18
Interleave Size: 0x2000
Samples per interleave: 14336
Last interleave size without padding: 0x125
Last interleave size: 0x140
Samples in last interleave block: 512
Sample count from data size: 244224

Samples per seek table entry: 14336

Track 0
-------------------------
Channel Count: 2
Left channel ID: 0
Right channel ID: 1
Volume: 0x7F
Panning: 0x40

Channel 0
----------------------------------------
Coefficients:
[0]: 0x03D6, 0xFDE4
[1]: 0x0921, 0xFBDB
[2]: 0x000A, 0x07F5
[3]: 0x0C6E, 0xFA7F
[4]: 0x05BC, 0x0001
[5]: 0x08A2, 0xFE79
[6]: 0x0109, 0x06EA

Gain: 0x0000
Pred/Scale: 0x0050
History sample 1 (n-1): 0x0000
History sample 2 (n-2): 0x0000

Loop Pred/Scale: 0x0050
Loop History sample 1: 0x0000
Loop History sample 2: 0x0000

Channel 1
----------------------------------------
Coefficients:
[0]: 0x0348, 0xFE18
[1]: 0x0921, 0xFBBB
[2]: 0x028E, 0x04CA
[3]: 0x0C7C, 0xFA69
[4]: 0x0595, 0xFFFB
[5]: 0x08B9, 0xFE45
[6]: 0x0001, 0x07FF

Gain: 0x0000
Pred/Scale: 0x0050
History sample 1 (n-1): 0x0000
History sample 2 (n-2): 0x0000

Loop Pred/Scale: 0x0050
Loop History sample 1: 0x0000
Loop History sample 2: 0x0000

The difference (working vs. not working)

Last interleave size without padding: 0x128 vs. 0x125
Sample count from data size: 244230 vs. 244224
Channel 0 Loop Pred/Scale: 0x0000 vs. 0x0050
Channel 1 Loop Pred/Scale: 0x0000 vs. 0x0050

I would be glad if this helped you with solving the problem.


Spirv - Improve half support for GLSL

So my understanding is that long ago, HLSL mapped half to float, but the dxc compile flag and SM6.5 added --enable-16-bit-types flag to undo this mapping.  HLSL also has a type "min16Float" that must be used to be explicit about what is half and what is not.
GLSL has an equivalent in float16_t, fp16vec2/3/4.  But these types are only defined when GL_EXT_shader_explicit_arithmetic_types_float16 is present off the VK_KHR_shader_float16_int8 extension.
On Android, the float16_t extension is only enabled on Android 10/11 on Mali devices.  I don't see this extension on any Adreno chips, or on some consoles either.  It may be supported on Android PowerVR chips.  Then combine this with Android8/9 drivers that are frozen, or that Adreno completely left half out of their Vulkan driver.
It's especially hard to write fp16 shaders given the minefield of storage16 flags (four of them).  Nvidia doesn't support storage16.inputOutput16, and AMD doesn't support storage16.pushConstants16.  Mali supports all of these, Adreno none of the shader or storage extensions.   I don't have an Android PowerVR device.
Contrast this with MSL, where half is a part of the language.  It can be used everywhere, and has full support across inputOutput16 and other stages.  It supports passing half out of the vertex shader, which is especially important on TBDR architectures since that varying data must be stored in system memory.
So this leaves falling back to the vague mediump designator.  lowp is moot at this point, since it often is just remapped to mediump precision.  However, a precision modifier like lowp/mediump/highp isn't quite the same construct, since it isn't a type.  It can't be used in casts, which are numerous since every float must be cast to half or the compile fails.
What I would like to propose is that GL_EXT_shader_explicit_arithmetic_types_float16 : enable still supply float16_t but switch that to relaxed precision off a compile flag.  Callers would then pick one compiled shader over another to get explicit float16_t support.  The following code would then work for type definitions and casts.   Although it would be nice if spirv supported 1.0h instead of the uglier half(1.0) on all constants.
        #extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable

	#extension GL_AMD_gpu_shader_half_float : enable
	#extension GL_AMD_gpu_shader_half_float_fetch : enable

        precision mediump int;
        precision highp float;

#if USE_HALF
        // these are well defined types
        #define half float16_t

	#define half2 f16vec2
	#define half3 f16vec3
	#define half4 f16vec4

	#define half2x2 f16mat2
	#define half3x3 f16mat3
	#define half4x4 f16mat4
#else
       #define half float
       ....
#endif

This doesn't work
#define half mediump float
#define half2 mediump vec2

half one;                   // works -> mediump float one;
half one = half(1.0); // fails -> mediump float one = mediump float(1.0);

This maybe works but is ugly, and it's unclear what the passthrough tohalf calls really work.  Splits the casts off from the type definition.

#define half mediump float
#define half2 mediump vec2

#define tohalf(x) x
#define tohalf2(x) x

half one;                       // works -> mediump float one;
half one = tohalf(1.0); // works -> mediump float one = 1.0;

This approach fails on constructs like the following:
half3(1.0,2.0,3.0)
half4(rgbA, texColor.a)

These must be changed to the following, which is even more ugly and more unclear what the type is, since the tohalf macros are just passthrough.

tohalf(vec3(1.0,2.0,3.0))
tohalf(vec4(rgbA, texColor.a))

Note that this affects the MSL codegen out of spriv-cross.  If we don't set float16_t support, then generated MSL transpiles to fp32 ops since %v2/3/4half is not used in any of the operation.   On the SPV side it's unclear what the device shader compiler does with getting with "Relaxed Precision" tagged on variables, but it's clear the spv ops are full fp32.
Trying to use the ops LunarG to map Relaxed Precision from spirv-opt was a nightmare where a single use of a "Relaxed Precision" varaible caused entire expressions to use fp16 even if it was a mix of fp32 and fp16, where fp32 should have been the correct choice.

Also don't forget to compile to vulkan1.1 or even with the extension defined, only OpLoad/OpConvert/Store is generated.  With 1.1 set, I actually see math and other ops.  The load/stores seemed pointless and repeated using vulkan 1.0 target.

This seems like it should be filed against Glslang ?


Allow use of ICakeContext in WithCriteria (#512)

This PR allows use of the ICakeContext in the WithCriteria extension method. As discussed in #512, the existing Func<bool> criteria still work, albeit now via an extension method.

@ErikSchierboom Sorry for not getting back sooner to you. You have a couple of pull request lined up so I thought I should mention that we haven't been neglecting anything on purpose. All of us have just been really busy the last couple of weeks.
Left some comments for you about this PR, but other than that I think it's ready to be merged :+1:

@patriksvensson No problem at all. I already suspected you were all busy. I have fixed the issue and did a rebase.

Merged! Thanks for this! :+1:


Clicking on a file link doesn't open it

Clicking on a link in the usages section or in the definition section doesn't open the file. In this example the file is available in the 'whitelisted' folder on the left.

Isn't there a dog.py tab at the top? So the file is already open, right?

@abe33
In the example the file was already open, I think.
I also tried with all tabs closed except for the sidebar.
There doesn't seem to be any reaction to the click on the link.

So, it seems to be a recent change with VSCode APIs, now you have to explicitely show a text document after having created it...


[CT-134] Allow unique_id to take a list

This PR (dbt-labs/dbt-core#4618) added the ability to pass a list for unique ID. We would like to have have that same functionality for Spark along with integration tests

resolved by #291


Plugin does not support ACME v2

When I tried to run the command below:
java -Dserver.port=80 -Dacme.enabled=true -Dacme.domain-name=localhost -Dacme.accept-terms-of-service=true -jar myapplication.jar
I got this error:
Caused by: org.shredzone.acme4j.exception.AcmeUnauthorizedException: Account creation on ACMEv1 is disabled. Please upgrade your ACME client to a version that supports ACMEv2 / RFC 8555. See https://community.letsencrypt.org/t/end-of-life-plan-for-acmev1/88430 for details.         at org.shredzone.acme4j.connector.DefaultConnection.createAcmeException(DefaultConnection.java:397)         at org.shredzone.acme4j.connector.DefaultConnection.accept(DefaultConnection.java:207)         at org.shredzone.acme4j.RegistrationBuilder.create(RegistrationBuilder.java:88)         at com.creactiviti.spring.boot.starter.acme.CertGenerator.getOrCreateAccount(CertGenerator.java:158)         at com.creactiviti.spring.boot.starter.acme.CertGenerator.generate(CertGenerator.java:72)         at com.creactiviti.spring.boot.starter.acme.AcmeEncryptRunner.run(AcmeEncryptRunner.java:40)         at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:813)         ... 13 common frames omitted

Dear, I believe that in "localhost" it will not work, for the ACME challenge to work, you have to find the machine on the world network, for that, a public IP is needed, and a correct DNS authoritative note, example
site1.domain.com.br,
site1 IN 200.x.x.x
2804::x


[MM-8497] Ability to set Do Not Disturb for a specified period of time

Client side changes for mattermost/mattermost-server#15640
Server side changes at mattermost/mattermost-server#16067

Hello @darkLord19,
Thanks for your pull request! A Core Committer will review your pull request soon. For code contributions, you can learn more about the review process here.

Thanks, @darkLord19! Let us know when this PR is ready for a full review and we'll add reviewers!

Adding @jespino to help with the issue you described https://community-daily.mattermost.com/core/pl/5j3ty1zjspydibp7ccew86j38y

@darkLord19 how's this going? Can we help at all?

@jespino now it's almost ready but only one issue, on time picker menu item click, page is getting refreshed, not seeing any errors in console.

This PR has been automatically labelled "stale" because it hasn't had recent activity.
A core team member will check in on the status of the PR to help with questions.
Thank you for your contribution!
/cc @jasonblais @jfrerich @emilyacook

This PR has been automatically labelled "stale" because it hasn't had recent activity.
A core team member will check in on the status of the PR to help with questions.
Thank you for your contribution!
/cc @jasonblais @jfrerich @emilyacook

@darkLord19 the problem can be solved stopping the propagation at the menu wrapper level. for that you can add to the MenuWrapper node the stopPropagationOnToggle={true} attribute.

@darkLord19 the problem can be solved stopping the propagation at the menu wrapper level. for that you can add to the MenuWrapper node the stopPropagationOnToggle={true} attribute.

@darkLord19 let us know how else we can help. Apologies for the delay over the holidays!

@darkLord19 let us know how else we can help. Apologies for the delay over the holidays!

@darkLord19 let us know how else we can help. Apologies for the delay over the holidays! If we can get your PRs merged by Jan 19th we can likely ship them in our Jan 26th cloud release and following February 16th self-hosted release.

Oh cool. thanks for the heads up. Only one minor issue is remaining so I will try to get it done before the weekend if possible so there is some time for proper review and testing.

@darkLord19 let us know how else we can help. Apologies for the delay over the holidays! If we can get your PRs merged by Jan 19th we can likely ship them in our Jan 26th cloud release and following February 16th self-hosted release.

Oh cool. thanks for the heads up. Only one minor issue is remaining so I will try to get it done before the weekend if possible so there is some time for proper review and testing.

@jespino i have binded setStatus to props.actions in dnd_custom_time_picker_modal but i keep getting this error " Uncaught TypeError: this.props.actions is undefined". Not sure what is the issue here.

@jespino i have binded setStatus to props.actions in dnd_custom_time_picker_modal but i keep getting this error " Uncaught TypeError: this.props.actions is undefined". Not sure what is the issue here.

@darkLord19 found the problem with the setStatus, added a comment in the code :)

@darkLord19 found the problem with the setStatus, added a comment in the code :)

This PR has been automatically labelled "stale" because it hasn't had recent activity.
A core team member will check in on the status of the PR to help with questions.
Thank you for your contribution!
/cc @jasonblais @jfrerich @emilyacook

This PR has been automatically labelled "stale" because it hasn't had recent activity.
A core team member will check in on the status of the PR to help with questions.
Thank you for your contribution!
/cc @jasonblais @jfrerich @emilyacook

@darkLord19 hope you're well! Anything else we can help with?

@darkLord19 hope you're well! Anything else we can help with?

@darkLord19 hope you're well! Anything else we can help with?

Hey @esethna this is all done but blocked by the server tests failures now.

@darkLord19 hope you're well! Anything else we can help with?

Hey @esethna this is all done but blocked by the server tests failures now.

This PR has been automatically labelled "stale" because it hasn't had recent activity.
A core team member will check in on the status of the PR to help with questions.
Thank you for your contribution!
/cc @jasonblais @jfrerich @emilyacook

@asaadmahmood hey! can you go through review comments about scss things and see if you can help out! I'd probably mess up even more so pinging you!

@darkLord19 I might be able to look at this next week. A bit tied with some other stuff right now.

@asaadmahmood no worries! I will try to address them in the meanwhile and you can help out with the remaining things if any when you are free.

Sounds good.

@darkLord19 I have fixed some css issues highlighted above. The app doesn't work for me locally, probably because of an old codebase. Do a rebase and get the app in the running state, I can then look at the other css issues.

@asaadmahmood it should be working now

Pushed my changes @darkLord19.
Tried to keep some of the changes in separate component files, but the menu items are actually broken to some extent, the float right on the submenu icon for example would not work well because the spacing from the top varies and its not vertically centered programatically.
Our menu items are also different in height if they are a submenu compared to if they are not, which should not be the case.
I ideally want to fix them as a whole, so we can open up a separate ticket for that. I'll talk amongst the design team about that.

This PR has been automatically labelled "stale" because it hasn't had recent activity.
A core team member will check in on the status of the PR to help with questions.
Thank you for your contribution!
/cc @jasonblais @jfrerich @emilyacook

Is this still a work in progress? I can add the review labels if not

@hmhealey it's waiting server PR approval afaik

This PR has been automatically labelled "stale" because it hasn't had recent activity.
A core team member will check in on the status of the PR to help with questions.
Thank you for your contribution!
/cc @jasonblais @jfrerich @emilyacook

This PR has been automatically labelled "stale" because it hasn't had recent activity.
A core team member will check in on the status of the PR to help with questions.
Thank you for your contribution!
/cc @jasonblais @jfrerich @emilyacook

@asaadmahmood there is some gap between menus and if we hover mouse over the gap then the time selection menu is hidden. Can you please have a look at it?

@jespino after clicking on disable notifications button in dnd custom time modal, modal still remains open. Can you point me in the direction on how to fix it?

Sure @darkLord19 I'll have a look at it.

@esethna it seems done to me except small css issue which Asad is looking into so can you remove Work in Progress label and move this further in dev and test review

@jespino please help review when possible

Trying to run the branches, but getting an error locally, will touch base wiht @darkLord19

Fix pushed @darkLord19

@hmhealey Yup, that makes sense, we can remove that @darkLord19

Done @hmhealey

@jespino Were you still wanting to give this a review or are we good to go to QA review?

Adding @jgilliam17 for QA review (note that test server wont work given the server PR dependency^)

/update-branch

Thanks @darkLord19 Can you pull both PRs into a test server for me?

@jgilliam17 I'm not sure how. I don't have access to any server.

No worries @darkLord19, my mistake.  🙂
I've asked @hmhealey for help and will try on the test server he created here.

This one didn't pick up the correct version of the server unfortunately. I'll try opening one on the server PR to see if it can pick up the web app correctly.

Thanks @hmhealey for giving server creation here a try.
@saturninoabril and @DHaussermann are going to set up a test server for me tomorrow.
@darkLord19 I'll post test results here, hopefully by Monday eod.

Fixed 1, 2, 3, 8 and 10.
About 6, this issue is impacting generic modal component for which I have raised issue here https://github.com/mattermost/mattermost-server/issues/17467
@asaadmahmood can you help with the 7 and 9?
@jgilliam17 can you elaborate on 5th point? I am not seeing it in my machine and didn't quite understood what you meant above.

One more thing - @darkLord19 can you please clarify today and tomorrow submenu options. Is DND expiring at midnight today and also midnight the next day respectively or at some other preset time e.g. 5pm or similar? Thanks

It's expiring at today midnight and next day midnight respectively

/update-branch

Here are steps for 5.  Let me know if this works, otherwise I can record a short video on Monday.
Steps

Change system date to 4/30/2021
2)Open custom dnd modal
Open Date selector
Observe that current date 4/30/2021 is highlighted
Switch to next month
Observe that one blank spot is highlighted- where April 30th would be shown on the monthly May calendar, top week, right before May 1st

@darkLord19 For some reason I can see the comment that lists down the issues so can't see 7 and 9.

@asaadmahmood

Date and Time input fields incorrectly styled in dark themes, including the calendar dropdown. Time dropdown respects the theme.
Time input field is missing active border state.

@darkLord19 Thanks, will have a look at it.

4. Also, for the time picker, if I choose today's date, we should only show the times left in the day. For example, if the time is 10:00 AM and I choose today's date, all the times from 00:00 - 10:00 should be omitted from the dropdown.

@matthewbirtch  It was like that only but @jgilliam17 brought up a point that by doing this user has to select date first if they want to select some other time so, I populated menu with all times. I am find either way so which behavior do we want to keep finally?

One other note:
I find it a little confusing that the menu says 'Disable Notifications Until" and "Today" is a menu option. What does this mean? What happens when I choose "Today" from this menu? "Until today" seems confusing.

There is some weirdness happening with the data picker. When I choose a date it seems to visually select the day before my selection for some reason.

That's strange. I am not seeing this issue on my local machine or test server created. Did you see this issue with latest changes? Can you reproduce it on this link https://mattermost-webapp-pr-7037.test.mattermost.cloud/pr7037/channels/town-square?

Yes, I just reproduced it with the link provided here

For the format of the times displayed in the time picker, I think we should make it follow the user's preference for 12-hour or 24-hour clock. Currently, it always seems to display times in 24-hour clock format.

I will keep it in backlog currently. Let other functional issues get resolved first and then if time permits then can do this before 5.36. This could be taken up as a separate small PR also after this is merged.

Ok, that's fine. As you know, we have a follow up ticket underway for some UX enhancements, so we can roll it in to that if it can't make it in here.

Also, for the time picker, if I choose today's date, we should only show the times left in the day. For example, if the time is 10:00 AM and I choose today's date, all the times from 00:00 - 10:00 should be omitted from the dropdown.

@matthewbirtch  It was like that only but @jgilliam17 brought up a point that by doing this user has to select date first if they want to select some other time.

Time selector should loop, show all available times. Currently only shows times that come after current system time through midnight when setting custom DND Date and Time on first modal open. Related to 8. as it will reset and let user have all time options if you first change the time then date.
-- @jgilliam17

So, I populated menu with all times. I am fine either way so which behavior do we want to keep finally?

Ya, I was a little confused by the comment, but I see now that these are conflicting directions. Sorry about that. Ultimately, I think it's reasonable to expect users to select the day first and we have a default set for 'today'. I think it causes more confusion if I'm able to select a time for today that has already passed. Can we move forward with that? This will help prevent errors for the user as well. Currently, I can select a time for today that is in the past and there is no feedback that this time is an error - just a button that doesn't work. So, if we remove the times in the past, we prevent the modal from being in an error state at all.

Thanks @darkLord19
Apologies if my comment on 10.  above wasn't clear. What I was seeing (this should be fixed now, based on your convo with @matthewbirtch ) - after opening custom modal and selecting date that is different from today, time options were limited to times left today,  instead of all 24h as the date in the future was selected.
Question about DND warning when user starts a new session or reloads browser in current session.
What is expected when selecting keep DND?

a) Keep current, user custom set time for DND and expire accordingly
b) Display DND until user changes the setting manually, overrides custom user setting (currently on the test server)
Few other issues

Time dropdown is sometimes missing for Today. Noticed with my newly added user, few plugin 401 errors and one if you click on the button to set with missing time

Help text wording is not updated on the modal, still shows till

Unable to custom set any time in the next 24 h

https://user-images.githubusercontent.com/52937121/116933673-de6d1d80-ac31-11eb-855b-ef454bb46d33.mov

@jgilliam17 @matthewbirtch so we show time in multiple of 30 minutes so what to do if such slot is not available for today? and if current time is less than Xhours:20 minutes then we don't show Xhours:30 minutes option in dropdown and directly show for X+1 hours:00. Any suggestions to improve this?

@darkLord19 I've looked at the styling on dark themes, and increased the width based on the 5th point.
Regarding the time input active state, its a button, so we may need to add a class on it when the menu is open and remove it when the menu is closed to get the desired effect.
Probably do it with onToggle in the menuWrapper.

@asaadmahmood  thanks, i will have a look at it.
@jgilliam17 there seems to be some issue with test server created. I have updated dnd modal header text but on server it is still showing old text and also @matthewbirtch was facing some date picker related issue which is not seen in local environment a I've already fixed it but Matthew was able to reproduce on server. Now that most of the issues pointed out are fixed, can we like get a fresh webapp running from the tip of this branch and then list issues still happening.
So, current remaining issues known to me are,

time dropdown active state is missing
day outside of current month is highlighted in day picker
empty time dropdown after current time is > 23:20(need @matthewbirtch 's suggestion on what should be done from ux perspective)

Please add any issues I might have missed and also give another review to current latest webapp changes and list any other issues found so I will work on them and ping you once all are taken care of.
Few UX enhancements also(less priority),

have 12hr or 24hr format in time dropdown based on user's preference
if dnd is set by user then show expiration tim under DND item in status dropdown

@darkLord19 I will create another PR for the menu wrapper thing to have a class on the wrapper, which we can then reuse here, so ignore that change for now.

Question about DND warning when user starts a new session or reloads browser in current session.
What is expected when selecting keep DND?

To answer your question, if you select "No, Keep status as DND" then nothing will happen as dnd status is already set. I mean to say that there won't be any call to server to change/upate status. Webapp will call server only if you select "Yes set my status to online" to update status to online

@jgilliam17 now only one issue is remaining in my knowledge that is,  "empty time dropdown after current time is > 23:20"

time dropdown active state is missing >> @asaadmahmood will be handling it via separate pr
day outside of current month is highlighted in day picker >> fixed

@jgilliam17 @matthewbirtch so we show time in multiple of 30 minutes so what to do if such slot is not available for today? and if current time is less than Xhours:20 minutes then we don't show Xhours:30 minutes option in dropdown and directly show for X+1 hours:00. Any suggestions to improve this?

@darkLord19 I'm not sure if I follow the question, but here's how I'm interpreting. The time dropdown is displaying empty if the current day is selected in the date input and there is < 30 minutes left in the current day. Is that the problem?
If my interpretation above is correct, we could the following:

if there are <30 minutes left in the day, set the default date when the modal opens to tomorrow's date then all times will show for the next day
don't allow users to choose the current day

Thoughts?

I find it a little confusing that the menu says 'Disable Notifications Until" and "Today" is a menu option. What does this mean? What happens when I choose "Today" from this menu? "Until today" seems confusing.

@darkLord19 any thoughts on the above?

@darkLord19 Added the open class for the menu wrapper.
https://github.com/mattermost/mattermost-webapp/pull/8058

@darkLord19 I'm not sure if I follow the question, but here's how I'm interpreting. The time dropdown is displaying empty if the current day is selected in the date input and there is < 30 minutes left in the current day. Is that the problem?
If my interpretation above is correct, we could the following:
* if there are <30 minutes left in the day, set the default date when the modal opens to tomorrow's date then all times will show for the next day

* don't allow users to choose the current day

Thoughts?
Yes I was thinking something like that only. That makes sense. I have implemented it.

I find it a little confusing that the menu says 'Disable Notifications Until" and "Today" is a menu option. What does this mean? What happens when I choose "Today" from this menu? "Until today" seems confusing.

@darkLord19 any thoughts on the above?

When user selects Today option, dnd is set till midnight today. It may be a bit confusing but I am not sure what wording could be used to make it more clear.

@darkLord19 Added the open class for the menu wrapper.
#8058

Awesome. I will merge master to this branch and checkout the time menu.

/update-branch

@matthewbirtch We can update the text, I guess that's in reference to the spec.
We can change it to:
"Disable notifications for"
Or something.

@matthewbirtch We can update the text, I guess that's in reference to the spec.
We can change it to:
"Disable notifications for"
Or something.

"Disable notifications for" will only work for today. for other options it will be confusing. Like "Disable notifications for"  Tomorrow so then does it mean disable notification only for tomorrow?
Another option is that Today option itself could be removed. Menu will have 30 mins, 1 hour, 2 hours, Tomorrow, Custom

@matthewbirtch We can update the text, I guess that's in reference to the spec.
We can change it to:
"Disable notifications for"
Or something.

"Disable notifications for" will only work for today. for other options it will be confusing. Like "Disable notifications for" Tomorrow so then does it mean disable notification only for tomorrow?
Another option is that Today option itself could be removed. Menu will have 30 mins, 1 hour, 2 hours, Tomorrow, Custom

Ya, I'm thinking we can just remove 'Today'. I think there are enough options for users if we exclude 'Today'.

Removed today option from options

@jgilliam17 friendly ping here to help prioritize this feature in your testing queue. There is another feature blocked on this one that we have a contributor team eager to start on. So the faster we can merge this and the related server PR the less conflicts may arise: https://community-daily.mattermost.com/core/pl/k71686aiwjfc9jf54tojuqbngr

asked for indication to the user when their current DND timer is set to expire. Are we adding here or in a follow up PR?
That is done via issue Eric mentioned

@michelengelen  Can you please help merge? Thanks 🙂

@jgilliam17 Done! Thanks @darkLord19!


About station_list.json

Thanks a lot for your model!
There is no stationListFromMseed in hdf5_maker as the documation says in the detection examples.
Maybe it should be the code as you say in  https://eqtransformer.readthedocs.io/en/latest/tutorial.html#downloading-continuous-data  from EQTransformer.utils.downloader import makeStationList ?

stationListFromMseed currently is only available when you install the EQTransformer from Github source.
One thing you can do now is to take the EQTransformer/utils/downloader from Github and replace it with the downloader.py in your root (where you have installed EQT) or reinstall the whole package directly from Github.
I'll add this module to the pip and anaconda version in a few weeks.


Franz status?! (yes, another thread about this)

So today I've discovered that:

Franz official website meetfranz.com is down
Franz Slack organization has been deleted

This happened without notice.
Franz is notorious for lack of communication from developers. They've been making new releases and very rarely replying to bug reports, but otherwise it has been impossible to contact them and receive answers from them.
So what is it now? Is Franz finally abandoned for good?
Or is it just going the way it's always been: developers disappearing without any notice for months? Should we expect a new release out of the blue somewhere in the end of the year, like nothing happened?

There have been pretty consistent beta updates (most recent one was today), but I do wish there was some more communication, especially with some of the bugs that are still present (notification badges not showing for some apps, for example).

OK, Franz website is back online.
It no longer mentions the Slack community which does not exist anymore.
Why, just why?

Ok, I've just learned that Franz website is inaccessible through my VPN server located in Finland. So it probably never went down.
But the Slack community of Franz has been taken down, that's a fact. The website has been updated so that it does not mention the Slack community.
What happened? Do we, faithful Franz users, deserve an answer?

The links to the slack channel are still on the GitHub page, though.  A little disconcerting that the slack channel just disappeared one day.


Unresolvable dependency resolving [Parameter #0 [  $auth_key ]] in class Pusher\Pusher

Laravel Version: 5.3.31
PHP Version: 7.0.33
Database Driver & Version: MySQL

Description:
Upgrading the Laravel version from 5.2 to 5.3.
[Illuminate\Contracts\Container\BindingResolutionException]
Unresolvable dependency resolving [Parameter #0 [  $auth_key ]] in class Pusher\Pusher
Steps To Reproduce:
[2022-02-09 14:57:08] production.ERROR: Illuminate\Contracts\Container\BindingResolutionException: Unresolvable dependency resolving [Parameter #0 [  $auth_key ]] in class Pusher\Pusher in /var/www/api/vendor/laravel/framework/src/Illuminate/Container/Container.php:850
Stack trace:
#0 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/Container.php(817): Illuminate\Container\Container->resolveNonClass(Object(ReflectionParameter))
#1 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/Container.php(789): Illuminate\Container\Container->getDependencies(Array, Array)
#2 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/Container.php(644): Illuminate\Container\Container->build('Pusher\Pusher', Array)
#3 /var/www/api/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(709): Illuminate\Container\Container->make('Pusher\Pusher', Array)
#4 /var/www/api/vendor/laravel/framework/src/Illuminate/Container/Container.php(864): Illuminate\Foundation\Application->make('Pusher\Pusher')

Hey there,
Unfortunately we don't support this version anymore. Please check out our support policy on which versions we are currently supporting. Can you please try to upgrade to the latest version and see if your problem persists? If so, please open up a new issue and we'll help you out.
Thanks!