Option to restore last open terminal tabs

I'm on Windows 10 running Terminus alpha 62 and everytime I close Terminus, all tabs are closed and not restored when running Terminus again.
"Auto-open a terminal on app start" opens a brand new terminal, and is not what I want.
Is this possible? This is the killer feature in Cmder that I love and cannot be without.

ConEmu offers this too, very useful if you work in a lot of repos/environments. Just starting the shells with their last known directory would be a tremendous help!

I just tried 1.0.66 and it didn't work. I opened 3 tabs, went to specific directories and then closed Terminus manually. Then I opened Terminus again and it just opened a single tab with the default directory.
Any idea @Eugeny ?

Please reopen, this is not fixed.

Could you please retest it with the latest nightly?

Still not working in 1.0.72. 😞

It restores the tabs and panes in a different order, and defaults to the user directory.


Update mattermost blob automatically via CI

@it33 @lindy65 I'm looking to automatically bump the mattermost version whenever they are cut upstream. Currently I can only find the releases via https://about.mattermost.com/download/ but I don't have a great way to automatically detect new ones via Concourse. https://releases.mattermost.com/ shows an AWS S3 error page; so I'm hopeful that behind the URL is an S3 bucket that I can watch with https://github.com/concourse/s3-resource
If there is no public access to the S3 bucket, perhaps Mattermost can create a new IAM user with read permissions for the bucket so CI can poll for new releases.
Shiny new CI https://ci.starkandwayne.com/teams/main/pipelines/mattermost-boshrelease

Thanks @drnic, I've opened a ticket to discuss: https://gitlab.com/mattermost/proposals/issues/10
I think the trick is handling the possibility of breaking changes across a major version release, e.g. 4.x to 5.x perhaps something changes and we don't want all the downstream automated updaters to break.
Would need to figure out a protocol to auto-update on minor releases, and maybe dot releases, but have a check on major releases.
3.x to 4.x was largely uneventful, but 2.x to 3.x there were manual changes required.
We'd like 4.x to 5.x to be smooth, but we also don't want to limit options for the project, or break automated updaters...
PS: From your profile it looks like you're in Palo Alto. If so, want to hang out some time, maybe catch up a Stanford Mall one afternoon or evening?

We'll have CI run automatically after new releases so we will have an
attempt to discover breaks. Automatically updating the new release blob
will not mean we automatically ship this off to end users; it will just
lower the effort, plus will trigger notifications in the
#mattermost-boshrelease slack channel (in slack.cloudfoundry.org).

@it33 sadly I moved away from Palo Alto last year; but I do visit a few
times a year. I'll ping you when I come over next!

Cool, will wait to see what Chris and Corey say on the new thread: https://gitlab.com/mattermost/proposals/issues/10
Yes, please let me know if you'll be back in Palo Alto, you can reach me at it33 at mattermost.com

This is done now via http://ci.starkandwayne.com/teams/main/pipelines/mattermost-releases


Add missing plugin descriptions

@eko3alpha thanks for your contribution! I'll review this shortly once the build passes (which it should now that #1413 is in.

@simon04 -
@eko3alpha added some more descriptions here and I tightened things up a bit and did some formatting. Once we fix up our markdown process and allow reference links again, this table (along with a few others) can be tightened up even further -- let me know your thoughts, I did remove some of the examples, esp filenames from the descriptions, as I don't think they were all that necessary. Short, tight descriptions here should be fine imo.


Random error while updating web page

Hi @Edzelf
Sometimes happens that when you update the web page this does not reload the sp-radio page and sends the following code to the web page
After this does not reload the page, until you press the reset button
     }
    }
    xhr.open ( "GET", theUrl, false ) ;
    xhr.send() ;
   }

   function handlepreset ( presctrl )
   {
    if ( presctrl.value >= 0 )
    {
      httpGet ( "preset=" + presctrl.value ) ;
    }
   }

   function handletone ( tonectrl )
   {
     var theUrl = "/?tone" + tonectrl.id + "=" + tonectrl.value +
                  "&version=" + Math.random() ;
     var xhr = new XMLHttpRequest() ;
     xhr.onreadystatechange = function() {
       if ( xhr.readyState == XMLHttpRequest.DONE )
       {
         resultstr.value = xhr.responseText ;
       }
     }
     xhr.open ( "GET", theUrl, false ) ;
     xhr.send() ;
   }

   function setstat()
   {
     var theUrl = "/?station=" + station.value + "&version=" + Math.random() ;
     var xhr = new XMLHttpRequest() ;
     xhr.onreadystatechange = function() {
       if ( xhr.readyState == XMLHttpRequest.DONE )
       {
         resultstr.value = xhr.responseText ;
       }
     }
     xhr.open ( "GET", theUrl, false ) ;
     xhr.send() ;
   }
   // Fill preset list initially
   //
   var i, select, opt, stations ;
   select = document.getElementById("selpres") ;
   var theUrl = "/?list=0" + "&version=" + Math.random() ;
   var xhr = new XMLHttpRequest() ;
   xhr.onreadystatechange = function() {
     if ( xhr.readyState == XMLHttpRequest.DONE )
     {
       stations = xhr.responseText.split ( "|" ) ;
       for ( i = 0 ; i < ( stations.length - 1 ) ; i++ )
       {
         opt = document.createElement( "OPTION" ) ;
         opt.value = stations[i].substring ( 0, 2 ) ;
         opt.text = stations[i].substring ( 2 ) ;
         select.add( opt ) ;
       }
     }
   }
   xhr.open ( "GET", theUrl, false ) ;
   xhr.send() ;
  </script>
  <script type="text/javascript">
    var stylesheet = document.createElement('link') ;
    stylesheet.href = 'radio.css' ;
    stylesheet.rel = 'stylesheet' ;
    stylesheet.type = 'text/css' ;
    document.getElementsByTagName('head')[0].appendChild(stylesheet) ;
  </script>
 </body>
</html>
<noscript>
  <link rel="stylesheet" href="radio.css">
  Sorry, ESP-radio does not work without JavaScript!
</noscript>

Yes,  this is probably the case when there is no buffer space left for the TCP data.  I have the idea that it happens more when listening to mp3-files.  mp3 streams works better.  I will try to find a solution, but its not so easy.

Adding spi dram will help?

There is plenty of RAM in the ESP8266 for this project.  It's the lack of TCP-buffers in the the "BIOS" that has problem with multiple TCP connections.

When making a change directly in the CONFIG page, such as removing or increasing a radio station and saving the changes, with the SAVE and RESTART buttons, upon restarting the ESP-12E module can not be connected again until the file " Radio.ini "again via arduino IDE.
If more than 20 radio stations are added, the INDEX page is not displayed in the PRESET drop-down list and displays incorrect information on the "config" web page.

The size of the radio.ini file is limited to about 3292 bytes, due to limited free memory space .  If you want more, you have to lower the size of the RINGBUF.
You can check the size of radio.ini by entering "testfile=radio.ini" in the serial monitor.
You may also uses TABs instead of multiple spaces in radio.ini and remove commentlines in order to preserve space.  This way I managed to have a list of 30 presets in my radio.ini (RINGUFSIZE=20000), 80 presets with RINGBUFSIZE=10000.
Tip: use STOP before changing the configuration.

Hi @Edzelf
I have seen in some projects that use FS, they upload compressed files in ".gz", to gain space in memory.
Is there any possibility of doing the same with the file radio.ini, to be able to obtain a greater number of stations?

radio.ini must be in a form readable bij the sketch.  For .gz file you need software to unzip the file in the ESP8266.

Decreasing the size of the .ini file helped in my case. And thanks for your job!


Fix failing doc build because of Airflow 2.5.1 changes

The docs were refactored in Airflow 2.5.1

Merged it without approval as this fixes main branch and this is doc-only change


Warning at kernel startup

Hello,
Some small fixes for kernel startup.
1 - Modification of the /etc/fstab file to eliminate the "failed to start remount root and kernel file systems" message
PARTUUID=cafd14b5-02 / ext4   defaults    0 1
2 - Error message "at-fs not properly umounted". To be checked when creating the image. Solved after installing dosfstools package and doing fsck.vfat /dev/sda1
3 - avahi asks for the nss-mdns package to be installed. Install the package?
4 - A line is missing in the service file x0vncserver.service so that it starts after the network.
After=network-online.target
A great day.
Stephane.

will modify the fstab and have a look at what I have done with my vfat partition.
3 - nss-mdns is an optional dependency, it shouldn't be needed for any normal mDNS case, we should be good without it
4 - I removed the line on purpose, people may take the Pi in the wild and there will be no internet connection, that way the VNC server will start after 90s I believe as it is the timeout for waiting, I don't think we should wait till the network has reached the online status before starting VNC, unless this may cause troubles where VNC cannot start because the network is not online

Ok for 3
For point 4, I make this remark in order to have a clean start in the logs because indeed vnc does not like the fact that the network is mounted before it. This doesn't cause a problem, just vnc crashes and the Restart=on-failure line restarts the service.
Besides, this restart is what happened when X11 crashed because of 3D acceleration in 99-v3d.conf.

these have been fixed in 1.8


Get clean API response when an exception occurs

After having created my first SDK for a Laravel API, I have encountered the following problem using AlwaysThrowOnErrors trait.
class MySDKService extends Connector
{
    use AlwaysThrowOnErrors;

    public function users(): UserResource
    {
        return new UserResource($this);
    }
}

class UserResource extends Resource
{
    public function list(array $queryParams = null): object
    {
        return $this->connector->send(
            new GetRequest(
                path: '/users',
                queryParams: $queryParams,
            )
        )->object();
    }
}

Now, in the case that, for example, Laravel responds with a validation exception (422), I can't get the validation errors from the response since Saloon constructs the exception message in the following way:
// Saloon\Exceptions\Request\RequestException.php
$message = sprintf('%s (%s) Response: %s', $statusCodeMessage, $status, $exceptionBodyMessage);

Am I doing something wrong? Should I do it in another way?
Thank you very much!

Hi!
A few things I think would help make it easier to help:

Which version of Saloon are you using?
What content type is the response body in? (JSON, XML, plain text, etc)
Could you check exactly which exceptions are thrown?
Just to ensure all of them are based on the RequestException.
Clarification on what you mean with 'can't get validation errors'.
The logic you mention formats the response message, but the line right above it also cuts off the message after 200 characters.
So it'd help knowing more exactly what the experienced issue is. 🙂

I'm not quite sure what the issue could be here. The logic/formatter you mention is only run if the RequestException (or its children calling RequestException::__construct()) isn't passed an error message.
I'm not sure how often that happens or when, but could very well be the reason.
A possible solution in Saloon itself could be to check the response content type, and not set a custom message unless content type is text/plain.
I.e., if you get a JSON response with the error messages, don't embed in the custom message as it's gonna be harder to deal with.
Although, this would require additional work to handle errors in different formats (JSON, XML, etc), rather than giving null as the message, or the raw body string.
In the meantime, you could use RequestException::getResponse()->body() to retrieve the raw body.
Or, in the case of JSON, RequestException::getResponse()->json().
Another option would be to create your own exceptions that extends the relevant ones.
Like InvalidUserQueryParams, that extends UnprocessableEntityException, and stores the errors in an property.
It's untested, but maybe something like
class InvalidUserQueryParams extends UnprocessableEntityException
{
    /**
     * @var array<string, string> field-message pair.
     */
    protected array $errors;

    public function __construct(Response $response, ?string $message = null, int $code = 0, ?Throwable $previous = null)
    {
        parent::__construct($response, $message, $code, $previous);

        $errors = $response->json();
    }

    /**
     * @return array<string, string> field-message pair.
     */
    public function errors(): array
    {
        return $this->errors;
    }
}

I've edited this message more times than I can count on both hands and feet. 🙈
But I hope it makes sense.

@darkons Thanks!
I'm not sure what a possible solution could be in terms of formatting/not formatting the message.
Keep in mind that the exception message is what ends up in logging/errors tracking systems (usually as the title), and as the message in log files.
So using a JSON string might not be the best option.
I'm also a bit unsure how various common logging and error tracking systems would cope with JSON (and larger messages).
I'm aware that there are log/message processors, and some systems has them baked in, but still worth noting.
While I think it's doable in Saloon to handle different response content types, Saloon itself wouldn't know the specific APIs schema.
So it'd be trickier if we want to handle things like error message and field messages individually.
I guess Saloon could check if there's an element message at the root of the JSON/XML/etc, and use that.
So maybe use the plain/text body as message, or check message in the root.
If neither is found, then don't set a message at all.
Then, for accessing individual fields, use the response itself like I mentioned before:
$rawBodyString = RequestException::getResponse()->body();
$jsonBodyArray = RequestException::getResponse()->json();

But, since we know our SDKs/APIs best, using custom exceptions (at least for some of them, like UnprocessableEntityException) is probably the better solution in the end (at least in my mind).
Especially since we can add custom response exceptions in the request itself, keeping it simple to manage.
Looking at the JSON output, I'd probably do something like this with custom exceptions:
class InvalidUserQueryParamsException extends UnprocessableEntityException
{
    /**
     * @var array<string, list<string>> field-message pair.
     */
    protected array $errors;

    public function __construct(Response $response, ?string $message = null, int $code = 0, ?Throwable $previous = null)
    {
        // Note: Since we pass our own message, Saloon will not truncate-, nor create a message from the body.
        //       I.e., the message from the JSON payload is used as actual message.
        parent::__construct($response, $response->json('message'), $code, $previous);

        $this->errors = $response->json('errors');
    }

    /**
     * @return array<string, list<string>> field-message pair.
     */
    public function errors(): array
    {
        return $this->errors;
    }
}

class ListUsersRequest extends Request
{
    public function getRequestException(Response $response, ?Throwable $senderException): ?Throwable
    {
        return match (true) {
            $response->status() === 422 => new InvalidUserQueryParamsException($response, previous: $senderException),
            default => parent::getRequestException($response, $senderException),
        }
    }
}

// Usage

try {
    $result = $connector->send(new ListUsersRequest(...));
} catch (InvalidUserQueryParamsException $ex) {
    // 'name' => ['Invalid name', '...'],
    // 'email' => ['Invalid email', '...'],
    $ex->errors();
}

I guess you could also add an optional argument to InvalidUserQueryParamsException::errors() for which field(s) you'd like to return.
I also realised that the connector also use the ManagesExceptions trait; so you can actually move that method from my ListUsersRequest above into the connector.
Since errors like validation errors should be consistent across the same API/app, it might also be easier to manage.

class MyUnprocessableEntityException extends UnprocessableEntityException
{
    /**
     * @var array<string, list<string>> field-message pair.
     */
    protected array $errors;

    public function __construct(Response $response, ?string $message = null, int $code = 0, ?Throwable $previous = null)
    {
        // Note: Since we pass our own message, Saloon will not truncate-, nor create a message from the body.
        //       I.e., the message from the JSON payload is used as actual message.
        parent::__construct($response, $response->json('message'), $code, $previous);

        $this->errors = $response->json('errors');
    }

    /**
     * @param  string|list<string>|null  $fields
     *
     * @return ($fields is string ? list<string> : array<string, list<string>>) Messages for single field, otherwise field-message pair.
     */
    public function errors(string|array|null $fields = null): array
    {
        return match (true) {
            is_array($fields) => array_intersect_key($this->errors, array_flip($fields)),
            is_string($fields) => $this->errors[ $fields ] ?? null,
            default => $this->errors,
        };
    }
}

class MySDKService extends Connector
{
    use AlwaysThrowOnErrors;

    public function getRequestException(Response $response, ?Throwable $senderException): ?Throwable
    {
        return match (true) {
            $response->status() === 422 => new MyUnprocessableEntityException($response, previous: $senderException),
            default => parent::getRequestException($response, $senderException),
        }
    }
}

// Usage

try {
    $result = $connector->send(new ListUsersRequest(...));
} catch (MyUnprocessableEntityException $ex) {
    // 'name' => ['Invalid name', '...'],
    // 'email' => ['Invalid email', '...'],
    $ex->errors();

    // ['Invalid email', '...']
    $ex->errors('email');

    // 'name' => ['Invalid name', '...'],
    $ex->errors(['name', 'non-existent-field']);
}

After careful consideration, I believe that the best thing to do is to create my own exception and catch possible errors from my API there.
Thank you very much to both of you!

No worries! I’m going to close this issue for now - but if you need anything just reopen.


Directly support nested configuration files

[ ] Allow nested configuration files (ie., use a config to define a more complex predicate, which can be used in a subsequent config)

We aim to support nested configuration files for cohort querying, whereby the results of a particular extraction can be expressed as a predicate to inform the extraction of another cohort. This would allows users to extract cohorts for very complex and specific tasks.


Diagrams are not readable in dark mode

Great piece of information, very clear. Thank you for that. However the diagrams are not readable when the page is viewed in dark mode.

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: d014c45f-5c4a-2598-ae92-89f48ae6b207
Version Independent ID: e7d95537-e03b-230a-635b-7032ff101a6b
Content: Authentication scenarios for Microsoft identity platform
Content Source: articles/active-directory/develop/authentication-flows-app-scenarios.md
Service: active-directory
Sub-service: develop
GitHub Login: @jmprieur
Microsoft Alias: jmprieur

@FrankHu-MSFT : this is a duplicate. I belive this should be assigned to @CelesteDG who's acting on this already.

Don't see any problems in dark mode. Blue color font can be read in both modes.

This is a duplicate of #45787, which was fixed in https://github.com/MicrosoftDocs/azure-docs-pr/pull/102873 (merged 03 Feb 2020). The SVGs were updated such that the captions no longer display black-on-black:

Font color in diagrams should turn to white in dark mode.

Sorry, @suraneti, we don't currently have that level of control on the content authoring side, but I'll pass this suggestion on to the platform team. Closing as resolved. #please-close


Command 'scoop update' delete scoop if download fail.

When you run 'scoop update' it first uninstall scoop app, them it start a whole new install of scoop. If there is a problem in the download, like a proxy error, you get scoop scripts removed.
What do you think about download first, check hash, and them uninstall app?

Yes, that would be better. Would you like to submit a patch?

Sure, I will make a pull request.

Hey guys, I think I just ran into this issue. Any tips on how to recover in the meantime?

Think I got it. Took a look inside https://github.com/lukesampson/scoop/blob/master/bin/install.ps1 to see if I could emulate the install. I downloaded https://github.com/lukesampson/scoop/archive/master.zip, extracted, renamed to current, and placed under ~\AppData\Local\scoop\apps\scoop. Seems to be working...

You can also 'git clone' scoop repository and run the 'bin/refresh.ps1'.


400003: Bad Request Payload is either malformed or incomplete

Here's my code:
import tableauserverclient as TSC
import logging
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
                    filename="tsc.log", level="DEBUG")

tableau_auth = TSC.TableauAuth('xxx', 'xxx', site_id='xxx')
server = TSC.Server('https://prod-apnortheast-a.online.tableau.com')

server.auth.sign_in(tableau_auth)

# create new user
newU = TSC.UserItem('Mike', 'Viewer')
server.users.add(newU)

print(newU.name, newU.site_role)

I just tried to use the api to add a new user, but it returns this:
Traceback (most recent call last):
  File "D:\Application\Anaconda\envs\new_ticket_auto\lib\site-packages\tableauserverclient\server\endpoint\endpoint.py", line 88, in _check_status
    raise ServerResponseError.from_response(server_response.content, self.parent_srv.namespace)
tableauserverclient.server.endpoint.exceptions.ServerResponseError:

	400003: Bad Request
		Payload is either malformed or incomplete

and the tsc.log file return:
14:58:33,309 - urllib3.connectionpool - DEBUG - Starting new HTTPS connection (1): prod-apnortheast-a.online.tableau.com:443
2022-02-15 14:58:35,128 - urllib3.connectionpool - DEBUG - https://prod-apnortheast-a.online.tableau.com:443 "POST /api/3.14/auth/signin HTTP/1.1" 200 360
2022-02-15 14:58:35,135 - tableau.endpoint.auth - INFO - Signed into https://prod-apnortheast-a.online.tableau.com as user with id 10c3b3f3-9630-4f5e-ba82-xxxxxxxxx
2022-02-15 14:58:35,136 - tableau.endpoint - DEBUG - request post, url: https://prod-apnortheast-a.online.tableau.com/api/3.14/sites/a48e73ae-c557-4887-b07a-yyyyyyyy/users
2022-02-15 14:58:35,136 - tableau.endpoint - DEBUG - request content: b'<tsRequest><user name="Mike" siteRole="Viewer" /></tsRequest>'
2022-02-15 14:58:36,472 - urllib3.connectionpool - DEBUG - https://prod-apnortheast-a.online.tableau.com:443 "POST /api/3.14/sites/a48e73ae-c557-4887-b07a-yyyyyyyyy/users HTTP/1.1" 400 373

Can anyone help?

@jasonusaco I believe the problem here is in the Users documentation. The docs and examples imply that the first argument should be the user's name, but in reality what it's expecting is the email address. (At least that's the case for Tableau Online sites.)
In your example this should work instead:
newU =<EMAIL_ADDRESS>'Viewer')

Could you confirm whether that works for your case? If so I'll morph this issue into a docs bug so we can get that section clarified.

@jasonusaco I believe the problem here is in the Users documentation. The docs and examples imply that the first argument should be the user's name, but in reality what it's expecting is the email address. (At least that's the case for Tableau Online sites.)
In your example this should work instead:
newU =<EMAIL_ADDRESS>'Viewer')

Could you confirm whether that works for your case? If so I'll morph this issue into a docs bug so we can get that section clarified.

Yes, it works! Thank you

Thanks for confirming! I've created #993 as a follow-up task to clarify the docs and examples.


TypeError: stat: path should be string,

This is a great project! I'm getting this error right now. Any idea what might be the issue?

Thanks for trying it out and opening this issue. Could you please describe the steps you took to arrive there, and the uploaded file? Are you running it locally or the HuggingFace Space demo?

I tried both locally and via the huggingface demo and got the identical error. It might be an issue with the ebook. I can send it on to you if you give me an email address.

just sent it
On Mon, Dec 12, 2022 at 11:43 AM Matthew Kutarna @.***>
wrote:

I tried both locally and via the huggingface demo and got the identical
error. It might be an issue with the ebook. I can send it on to you if you
give me an email address.
Can you please send it to @.*** and I can look into
the error?
—
Reply to this email directly, view it on GitHub
https://github.com/mkutarna/audiobook_gen/issues/8#issuecomment-1347189507,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ABHDTFLVEP34QD57VR2J6X3WM5543ANCNFSM6AAAAAASYU3JCY
.
You are receiving this because you authored the thread.Message ID:
@.***>

Based on testing - it looks like this error is caused by a mismatch between how streamlit handles file uploads and how ebooklib handles reading epub files. st.file_uploader creates a file-like object, but read_epub expects a file path. I'm exploring workarounds based on temporary files.

Based on local testing - this workaround allows the epub files to generate audio. Next step is to push to HFS to test online.

It runs, but there appears to be an issue with streamlit file management on osx. Perhaps because /media doesn't exist?
2022-12-17 10:27:00.612 Uncaught exception GET /media/f234a8fec762cf8fd0cf31173c73b71e4a2daa58dddfad72eabf834f.zip?title=app%20%C2%B7%20Streamlit (<IP_ADDRESS>)
HTTPServerRequest(protocol='http', host='localhost:8501', method='GET', uri='/media/f234a8fec762cf8fd0cf31173c73b71e4a2daa58dddfad72eabf834f.zip?title=app%20%C2%B7%20Streamlit', version='HTTP/1.1', remote_ip='<IP_ADDRESS>')
Traceback (most recent call last):
  File ".../mambaforge/envs/audiobook_gen/lib/python3.9/site-packages/streamlit/runtime/memory_media_file_storage.py", line 140, in get_file
    return self._files_by_id[file_id]
KeyError: 'f234a8fec762cf8fd0cf31173c73b71e4a2daa58dddfad72eabf834f'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File ".../mambaforge/envs/audiobook_gen/lib/python3.9/site-packages/tornado/web.py", line 1713, in _execute
    result = await result
  File ".../mambaforge/envs/audiobook_gen/lib/python3.9/site-packages/tornado/web.py", line 2616, in get
    self.set_headers()
  File ".../mambaforge/envs/audiobook_gen/lib/python3.9/site-packages/tornado/web.py", line 2727, in set_headers
    self.set_extra_headers(self.path)
  File ".../mambaforge/envs/audiobook_gen/lib/python3.9/site-packages/streamlit/web/server/media_file_handler.py", line 59, in set_extra_headers
    media_file = self._storage.get_file(path)
  File ".../mambaforge/envs/audiobook_gen/lib/python3.9/site-packages/streamlit/runtime/memory_media_file_storage.py", line 142, in get_file
    raise MediaFileStorageError(
streamlit.runtime.media_file_storage.MediaFileStorageError: Bad filename 'f234a8fec762cf8fd0cf31173c73b71e4a2daa58dddfad72eabf834f.zip'. (No media file with id 'f234a8fec762cf8fd0cf31173c73b71e4a2daa58dddfad72eabf834f')
2022-12-17 10:27:00.614 500 GET /media/f234a8fec762cf8fd0cf31173c73b71e4a2daa58dddfad72eabf834f.zip?title=app%20%C2%B7%20Streamlit (<IP_ADDRESS>) 154.94ms


Restrict the gateway capabilities

The gateway only needs CAP_NET_ADMIN.
This patch also documents the privilege settings, without changing
them (yet), and adds some volumes which will ultimately help switch
the root file system read-only.
Fixes: #1239
Signed-off-by: Stephen Kitt<EMAIL_ADDRESS>

@SteveMattar FYI

@SteveMattar in practice this doesn’t change much because the pod is still privileged :frowning_face:

@skitt yes I saw


Refactoring nats wrapper to become a pypi package

https://pypi.org/project/opni-nats/<IP_ADDRESS>/

you would need isort in pre-commit-configure as well as the co-responding pyproject.toml file.


Update only specified dependency (cli argument for updates.allow?)

What
Could Scala Steward create pull-requests for only a specific dependency (across multiple downstream repositories)?
Why?
If a dependency (in our case, an internal private library) is updated, we'd like to get create pull requests for this library (and only that) in downstream consumers of this library.
What I've tried:
We use Scala Steward through the scala-steward-action, so it would be helpful to be able to pass this as a CLI argument.
Just setting updates.allow in .scala-steward.conf wouldn't help since Scala Steward checks out the repos itself, where I can't modify that file locally per runthrough.
Notes
I understand that changing this would be a bit of a shift in which purpose Scala Steward fulfills,
from:
update all dependencies in this/these repos (consumer-centric)
into:
update this dependency in all my consumers (producer/dependency-centric)
Curious to hear your thoughts on this.

@mzuehlke noted that #1483 could solve this issue and I agree with Marco that it looks like a nice solution for this request. What do you think, @MPV?

Looks great, thanks @mzuehlke & @fthomas!

Part of our use case for #1483 is pretty much the same, it'd be good perhaps to give it as motivation on the PR but I'll echo it here as also a testimonial ☺
We have a number of common libraries within the organization that are widely adopted. In order to help a small number of volunteer maintainers support them, Scala Steward keeps our little private ecosystem moving forward.
With downstream consumers that are application projects with large dependency graphs, though, the full firehose of Maven Central updates is too much churn and risk for most app teams to tolerate day-to-day. We're aiming to run an instance of Steward scoped to updating our blessed libraries, which is hopefully much easier to opt into and even mandate.
Steward can bring us a little closer to library upkeep benefits of a monorepo, without a monorepo.

Thanks for sharing your motivation for #1483, @ches, that's very helpful!


Does not work with Side menu and tab bar controllers??

need help .. error  occurs at Elongation Transition in root function and sometimes it does work if i open side menu first showing(Presenting view controllers on detached view controllers is discouraged ) but if i open and close side menu again it crashes.

@RFyre00 it was automatically closed because of my commit message. Please contact with me if you're facing any issue.


Define criteria for incubation stage 2

In this pull request we define the criteria for the incubation stage 2. They are currently drafted based on the CNCF criteria. This pull request is meant to clarify the meaning of the incubation stages, so that we have a clear view what kind of project is on each stage, and, based on that, define the criteria for stage 2.
Stage 3 will be done in a separate pull request.

I have reviewed the pull request and agree to merge it,


loading multiple files are not correctly overwriting env variables

Looks like passing in multiple env files to Dotenv.load(files, overwrite:true) is not correctly overwriting values. It seems to me that when overwrite is true, the input files' order is reversed AND also keys are overwritten, which negates the overwriting. I think NOT reversing the file order would fix it.
Steps to reproduce
I have this issue in my Ruby on Jets project, but it can be reproduced with a simple CLI example.
.env.development has
FOO=123

.env.development.local has
FOO=abc

Running this command: dotenv -f '.env.development,.env.development.local' ruby -e "puts ENV['FOO']"
Correctly prints 123
Running this command: dotenv -o -f '.env.development,.env.development.local' ruby -e "puts ENV['FOO']"
Incorrectly prints 123
Expected behavior
I expect that overwriting would take the last value (ie abc).
Actual behavior
The -o option is not working, it effectively takes the first value set.
System configuration
dotenv version: 3.1.0
Rails version: n/a
Ruby version: 3.2.2

@jmouka Unless I'm misunderstanding something, I think the current behavior is working as expected. You may just need to switch the order of the files.
Normally, dotenv's behavior is that the first file to set a varaible wins, so you would want to load the most specific files first, then shared or global files. For example:
$ dotenv -f .env.local,.env.global

With -o, you still pass the files in the same order, but the files will be evaluated in reverse order so the most specific file still wins.
$ dotenv -o -f .env.local,.env.global

Let me know if I'm missunderstandinng your question. See https://github.com/bkeepers/dotenv/pull/460 for when this was last visited.


ActionCable url is not set correctly when using v3 on rail 7.2

Describe the bug
url for websocket connection defaults to null when using v3 version of the package with vue 3 and rail 7.2. v2 of the package was working  with uid patch.
Temporary fix is to import ActionCable in js and initialize ActionCableVue with connectionUrl: ActionCable.getConfig("url")
To Reproduce
Steps to reproduce the behaviour:

Use rails 7.2, vue 3 and latest version of this lib
Try to subscribe to any channel
observe websocket url in dev console trying to connect to null

Expected behaviour
It should be using ws url from ActionCable
Plugin version (please complete the following information):
    "@rails/actioncable": "^7.2.100",
    "actioncable-vue": "^3.0.1",

@iuri-gg Can you please share the "setup" code that connects to your ActionCable server?

Sure, I am not using the composition API of vue 3 - still using the options API. I have the following code:
  mounted() {
    this.$cable.subscribe({ channel: "ChannelName", id: this.record.id });
  },

@iuri-gg Please share your app.use(ActionCableVue, { ... }) setup code as well. I just tested locally with my dev Vue 3 project and Rails API, and it connected successfully.

if I uncomment connectionUrl, then it works. I wonder if it is due to connectImmediately: true
  app.use(ActionCableVue, {
    debug: process.env.NODE_ENV === "development", // eslint-disable-line no-undef
    debugLevel: "info",
    connectImmediately: true,
    unsubscribeOnUnmount: true,
    // connectionUrl: ActionCable.getConfig("url"),
  });

@iuri-gg The library requires you to set a connectionUrl, especially if connectImmediately is set to true. I'm creating a patch that prevents connection unless the connectionUrl is provided.

is the readme out of date then? According to it connectImmediately defaults to true and is optional. Also, readme states that connectionUrl is optional and can be omitted for the default behavior. All of that worked with v2, but with v3 it changed and does not work.

@iuri-gg I just released 3.0.3. Please try that and let me know if the issue remains.

still the same issue on v3.0.4. I even tried not passing connectImmediately in app.use, but no difference

@iuri-gg Please share a screenshot of the websocket URL in the dev console.

URL of the page is http://lvh.me:3000/payout_batches/0191af19-35fa-7b9f-884d-5cc3c34847f6

@iuri-gg It looks like the URL is correct, but your batch ID isn't being set. Can you please share the code that creates that URL?

It looks like the URL is correct, but your batch ID isn't being set. Can you please share the code that creates that URL?

No, URL is not correct. action cable URL does not change on different pages - it is always the same WebSocket URL. In production it is usually /cable and in development it can be mounted on a different port. For me, it is lvh.me:8080/cable and I can see the value is present in meta tag on the page correctly:
<meta name="action-cable-url" content="ws://lvh.me:8080/cable">

As for the code. if I specify connectionUrl manually, it works correctly. If I don't specify it, then it gets the wrong URL. Default behavior was correct on v2, and with v3 it broke.
    connectionUrl: ActionCable.getConfig("url"),

I ran into a similar problem with Rails 7.1, so I don't think the problem is related to Rails 7.2.
What fixed it for me was to change the environment variable that contains the connection string (in my case import.meta.env.ACTIONCABLE_HOST) to include the VITE_ prefix (so import.meta.env.VITE_ACTIONCABLE_HOST).
Since this is a behavior of Vite and not Rails/ActionCable and there was a recent Vite commit that changed import.meta behavior (see https://github.com/vitejs/vite/pull/17648), I think that's where it might originate. (I updated to Vite 5.4.x not too long ago, probably slightly before or after ActionCableVue 3.0.)

For v3.x, I didn't change anything other than updating to the latest version of actioncable. The fix for this issue is manually specifying the connectionUrl when connecting.


Correct minimal example to create HiDPI renderer?

I'm trying to figure out the correct, cross-platform, render-backend-agnostic way of creating a renderer with HiDPI support. My main issue is that I don't know the pixel ratio of window size and backbuffer size. I can hardcode it as a test, and that works, but how to know it before you call bgfx::init()? Now I create my SDL window with given sizes, and then have to multiply it by 2 to create the renderer. SDL solves this neatly with: SDL_GL_GetDrawableSize(), but this is only for OpenGL I suppose. Is there a bgfx-way of knowing the size of actual backbuffer that gives us support for High-DPI?

You would have to obtain that from OS. You control backbuffer size outside of bgfx.

I don't know details yet, but wouldn't it make sense for this to be part of bgfx, as we have to provide it with the native window handle anyways. This handle is probably enough to determine the answer?

When you provide native window handle you provide also backbuffer resolution. bgfx has nothing to do with windowing, technically it can work in headless mode, where window is even not provided, rather you use some other mechanism to display into window.

See how bgfx deals with window resizing, to understand how back buffer resolution is set.

technically it can work in headless mode

I understand. So you would argue that I have to fetch this information from SDL or write some platform specific code to do this?

See how bgfx deals with window resizing, to understand how back buffer resolution is set.

I checked that. It seems that I simply do:
bgfx::reset(new_window_width * pixel_ratio,
            new_window_height * pixel_ratio,
            BGFX_RESET_VSYNC | BGFX_RESET_HIDPI);

Is this the way I should go about this? Such that here again, I would need a way to get the pixel ratio, provided by the OS in some way. (I now think either SDL or OpenGL automatically resizes the backbuffer upon a window resize, that might be partially why I'm confused about this. OpenGL is much tighter coupled to a window then Metal for example, I believe.)

Is this the way I should go about this?

Yes, that looks correct.

Okay, if you are convinced that the pixel ratio of screen and backbuffer should not be part of bgfx, then this can be closed.


mina 1.x support?

Hi @elskwid, @d4be4st,
I'm trying to move my project over to mina 1.x. I think I've finally gotten everything working except mina-hooks.
I was trying a lot of different ways to integrate mina-hooks with the new mina 1.x version, but I couldn't figure it out. I'm not very good at Ruby and dealing with the dense internals like this.
Do either of you have any tips about how to make this work? I've been able to include the same file from the current version of mina-hooks, but I haven't been able to make it properly inherit super from the run method in mina (and I'm not even sure if that's the right method!)
Do either of you have any tips? Thanks!

You can use run :local do instead of hooks

awesome this works for me. i'm posting another issue at mina-deploy/mina about run :local but sounds good!!


Format output when XmlAssertOptions.IgnoreDeclaration for XmlSerializerAssert.Equal

var roundtrip =
    XmlSerializerAssert.Equal(
        "<PlcStringAddress DataBlock=\"110\" StartIndex=\"2\" ContentMaxLength=\"1\" />",
        address,
        XmlAssertOptions.IgnoreDeclaration | XmlAssertOptions.IgnoreNameSpaces);

Outputs:
Gu.SerializationAsserts.AssertException :   Expected string length 72 but was 113.
  Strings differ at line 1 index 1.
  Expected: <PlcStringAddress DataBlock="110" StartIndex="2" ContentMaxLength="1" />
  But was:  <?xml version="1.0" encoding="utf-16"?>
  -----------^

Outputting line numbers in errors now:
  String lengths are both 77.
  Strings differ at line 2 index 1.
  Expected: 2| <Dummy>
  But was:  1| <Wrong>
  --------------^


Remove some unnecessary font features from our default feature list

Turns out, DWrite will automatically turn some features on even if they weren't included in the feature vector passed into it. Remove these features from our default list for easier readability.

@be5invis think this is okay?

LGTM.


Theme change not working on Firefox and Edge

I use Custom UI (local install with Customizer component) to change theme of sensors icons. It works perfectly on Chrome/Opera but on Firefox and Edge it’s completely ignored.
Checklist

[X] I'm running the latest version of CustomUI (Update guide) or using a specific release that is not marked as "Broken".
[X] I tried to force-refresh (Ctrl+Shift+R / Ctrl+F5) the browser
[X] (Optional, but recommended) I'm using Chrome or tried to reproduce the feature on Chrome.

Browser + Version: Firefox 60.0.1
CustomUI version: 20180521
Home Assistant release (hass --version): 0.69.1
Problem-relevant configuration.yaml entries:
homeassistant:
  customize_glob:
    'binary_sensor.*_status':
      device_class: connectivity
      custom_ui_state_card: state-card-custom-ui
      theme: 'grey'

frontend:
  javascript_version: auto
  themes:
    grey:
      paper-item-icon-color: '#969696'
      paper-item-icon-active-color: '#44739e'

customizer:
  custom_ui: local

Any errors from browser Javascript console: no errors

Does "regular" (i.e not per-entity) theming work for you in FF? i.e. if you select this "grey" theme - do all icons become grey?
I tried in FF52 on Linux with HA 0.70 and everything works fine.

Yes, when I change theme in frontend into 'gray' the icons of all entities with state 'off' change color to gray. I tried in FF60, FF52 and Edge and always the same issue.

Could you attach a screenshot from Chrome where it is working, so I better understand the setting?

Chrome - icons of entities with state 'off' are grey, with state 'on' - blue

Firefox - icons of entities with state 'off' are blue, with state 'on' - yellow

Thanks, I reproduced the issue, trying to debug now...

Fixed in release 20170528


Pull docker image

Summary

Before I write tests for this, wanted feedback on whether this is properly structured.
In particular, wondering if I should separate username + password as a separate DockerCredentials block, or dump within DockerSettings. Maybe I should rename DockerSettings to DockerHost?
TODO:

add tests
add example
add mkdocs entry
add docs/ md
changelog

Relevant Issue(s)

Checklist

[ ] Summarized PR's changes in CHANGELOG.md

I support changing DockerSettings to DockerHost. I think that makes the responsibility of the block clearer.
We'll need to give a lot of thought to how we implement Docker registry credentials in this collection since functionality for that already exists in the core library. We don't want to conflict with the DockerRegistry block in the core library, so I think we do what we can to work with the existing DockerRegistry block.
The interaction between DockerHost and DockerRegistry is key. Concretely, I think that DockerHost should be responsible for the creation of a Docker client, and DockerRegistry should be responsible for the the authentication of that client. If we allow a Docker client to be passed into either login or get_docker_client on the BaseDockerLogin ABC and authenticate that passed in client, then I think that would work.
Happy to discuss more! This interaction seems like it might be complex, so maybe we can spend some time designing synchronously.

To clarify, do you mean dropping DockerCredentials from this repo and update the core repo's BaseDockerLogin to accept DockerClient, then use it here?


Feature/cvsb 19156

Ticket title
Fix broken script locally
Checklist

[ ] Code has been tested manually
[ ] PR title includes the JIRA ticket number
[ ] Branch is rebased against the latest develop
[ ] Squashed commit contains the JIRA ticket number

closed and replaced by #6


Simulation No Started.   Error "Failed to seed default simulations "

Greetings, I have deployed the solution locally via documentation https://docs.microsoft.com/en-gb/azure/iot-accelerators/iot-accelerators-remote-monitoring-deploy-local-vscode
Ones I run All microservices in vs code i counter this issue.
[DEBUG][HttpClient:SendAsync] Sending request, {"httpMethod":{"Method":"GET"},"Uri":"http://localhost:9003/v1/simulations/1","Options":{"EnsureSuccess":false,"AllowInsecureSSLServer":false,"Timeout":30000}}
[ERROR][HttpClientWrapper:GetAsync] Request failed, {"uri":"http://localhost:9003/v1/simulations/1","StatusCode":500,"Content":""}
[ERROR][Seed:SeedSimulationAsync] Failed to seed default simulations, {"Message":"Unable to load Simulation 1"}
[DEBUG][HttpClient:SendAsync] Sending request, {"httpMethod":{"Method":"PUT"},"Uri":"http://localhost:9022/v1/collections/solution-settings/values/seedMutex","Options":{"EnsureSuccess":false,"AllowInsecureSSLServer":false,"Timeout":30000}}
[WARN][RecurringTasks:SetupSeedData] Seed data setup failed, will retry in few seconds, {"pauseSecs":8,"e":{"ExceptionFullName":"System.AggregateException","ExceptionMessage":"One or more errors occurred. (Unable to load Simulation 1)","StackTrace":"   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)\r\n   at Microsoft.Azure.IoTSolutions.UIConfig.WebService.RecurringTasks.SetupSeedData(Object context) in C:\azure-iot-pcs-remote-monitoring-dotnet\services\config\WebService\RecurringTasks.cs:line 51","Source":"System.Private.CoreLib","Data":{},"InnerExceptions":[{"ExceptionFullName":"Microsoft.Azure.IoTSolutions.UIConfig.Services.Exceptions.ExternalDependencyException","ExceptionMessage":"Unable to load Simulation 1","StackTrace":"   at Microsoft.Azure.IoTSolutions.UIConfig.Services.Helpers.HttpClientWrapper.GetAsync[T](String uri, String description, Boolean acceptNotFound) in C:\azure-iot-pcs-remote-monitoring-dotnet\services\config\Services\Helpers\HttpClientWrapper.cs:line 65\r\n   at Microsoft.Azure.IoTSolutions.UIConfig.Services.External.DeviceSimulationClient.GetDefaultSimulationAsync() in C:\azure-iot-pcs-remote-monitoring-dotnet\services\config\Services\External\DeviceSimulationClient.cs:line 31\r\n   at Microsoft.Azure.IoTSolutions.UIConfig.Services.Seed.SeedSimulationAsync() in C:\azure-iot-pcs-remote-monitoring-dotnet\services\config\Services\Seed.cs:line 176\r\n   at
Thanks for any Support

Greetings, I have deployed the solution locally via documentation https://docs.microsoft.com/en-gb/azure/iot-accelerators/iot-accelerators-remote-monitoring-deploy-local-vscode
Ones I run All microservices in vs code i counter this issue.
[DEBUG][HttpClient:SendAsync] Sending request, {"httpMethod":{"Method":"GET"},"Uri":"http://localhost:9003/v1/simulations/1","Options":{"EnsureSuccess":false,"AllowInsecureSSLServer":false,"Timeout":30000}}
[ERROR][HttpClientWrapper:GetAsync] Request failed, {"uri":"http://localhost:9003/v1/simulations/1","StatusCode":500,"Content":""}
[ERROR][Seed:SeedSimulationAsync] Failed to seed default simulations, {"Message":"Unable to load Simulation 1"}
[DEBUG][HttpClient:SendAsync] Sending request, {"httpMethod":{"Method":"PUT"},"Uri":"http://localhost:9022/v1/collections/solution-settings/values/seedMutex","Options":{"EnsureSuccess":false,"AllowInsecureSSLServer":false,"Timeout":30000}}
[WARN][RecurringTasks:SetupSeedData] Seed data setup failed, will retry in few seconds, {"pauseSecs":8,"e":{"ExceptionFullName":"System.AggregateException","ExceptionMessage":"One or more errors occurred. (Unable to load Simulation 1)","StackTrace":" at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)\r\n at Microsoft.Azure.IoTSolutions.UIConfig.WebService.RecurringTasks.SetupSeedData(Object context) in C:\azure-iot-pcs-remote-monitoring-dotnet\services\config\WebService\RecurringTasks.cs:line 51","Source":"System.Private.CoreLib","Data":{},"InnerExceptions":[{"ExceptionFullName":"Microsoft.Azure.IoTSolutions.UIConfig.Services.Exceptions.ExternalDependencyException","ExceptionMessage":"Unable to load Simulation 1","StackTrace":" at Microsoft.Azure.IoTSolutions.UIConfig.Services.Helpers.HttpClientWrapper.GetAsync[T](String uri, String description, Boolean acceptNotFound) in C:\azure-iot-pcs-remote-monitoring-dotnet\services\config\Services\Helpers\HttpClientWrapper.cs:line 65\r\n at Microsoft.Azure.IoTSolutions.UIConfig.Services.External.DeviceSimulationClient.GetDefaultSimulationAsync() in C:\azure-iot-pcs-remote-monitoring-dotnet\services\config\Services\External\DeviceSimulationClient.cs:line 31\r\n at Microsoft.Azure.IoTSolutions.UIConfig.Services.Seed.SeedSimulationAsync() in C:\azure-iot-pcs-remote-monitoring-dotnet\services\config\Services\Seed.cs:line 176\r\n at
Thanks for any Support

I am also facing the same issue, any one have any resolution for this???????

I am having the issue as well, any solution for this?
Thanks.

Note: As of December 10th 2020, Remote Monitoring solution accelerator is no longer supported. All supporting repositories have been archived.


Docs: point XRPK to https://utils.webaverse.com

We can build xrpk from directory at https://utils.webaverse.com now, so there is no need for the npm flow.
The only requirement is that the user places a compatible asset file somewhere in the directory. manifest.json is supported but if no manifest.json exists we will automatically generate it.

Updated xrpk pages with relevant information, will get bundled into the V2 release of the docs: https://github.com/webaverse/app/issues/1308


fix: update neynar frame validation type

What changed? Why?
updated NeynarFrameValidationInternalModel type, for type safe handling of state and input in a validated message

Niiice, thank you for this!