Problem with the aspirate() function

Hello,
I have a problem with the aspirate() command, when I try to use Pylabrobot for Opentrons.
But when I use PyLabRobot for Opentrons simulation, it works, I don't get any error message.
I use p20, and she is detected.
I have put the commands I used and the error message :
from pylabrobot.liquid_handling import LiquidHandler
from pylabrobot.liquid_handling.backends.opentrons_backend import OpentronsBackend
from pylabrobot.resources.opentrons import OTDeck

ot2 = OpentronsBackend(host=hostname, port= 31950)
lh = LiquidHandler(backend= ot2, deck=OTDeck())

await lh.setup()

from pylabrobot.resources.opentrons.tip_racks import opentrons_96_filtertiprack_20ul
from pylabrobot.resources.opentrons.plates import corning_96_wellplate_360ul_flat
tips = opentrons_96_filtertiprack_20ul(name="tip_rack")
plate = corning_96_wellplate_360ul_flat(name="plate")

lh.deck.assign_child_at_slot(tips, slot = 4)
lh.deck.assign_child_at_slot(plate, slot = 5)

plate.set_well_volumes([[20]*12]*8)

await lh.pick_up_tips(tips["A1"])

await lh.aspirate(plate["H6"], vols=5)

I got the following error message :
UnexpectedProtocolError: Cannot aspirate more than pipette max volume

Thanks for you help.

assign the issue would love to work on it..

Thanks! Let me know if I can be of any help!

could you check the vol for pylabrobots.. how it handles exceptions when pip exceeds vol

This error originated in the Opentrons; it's not a PyLabRobot error. (UnexpectedProtocolError is not a PyLabRobot error)
In another issue, you mentioned you are having trouble picking up tips. My guess is no tip was picked up, so Opentrons sees the channel as having a capacity of 0.
Could you see if the answer I wrote there works? If this does not work, could you post the error trace?

how it handles exceptions when pip exceeds vol

See this: https://github.com/rickwierenga/opentrons-python-api/blob/bfe0398237c7b7dc4f88d1f82cdadb1aa9ecaae2/ot_api/decorators.py#L35

After doing (git pull, pip install opentrons-http-api-client -- update).
I still get the same error message.
The P20 moves to the plate location and descends.
The full message :
---------------------------------------------------------------------------
UnexpectedProtocolError                   Traceback (most recent call last)
Cell In[16], line 1
----> 1 await lh.aspirate(plate["H6"], vols=5)

File ~/clone_pylab_robot/pylabrobot/pylabrobot/liquid_handling/liquid_handler.py:69, in need_setup_finished.<locals>.wrapper(self, *args, **kwargs)
     67 if not self.setup_finished:
     68   raise RuntimeError("The setup has not finished. See `LiquidHandler.setup`.")
---> 69 await func(self, *args, **kwargs)

File ~/clone_pylab_robot/pylabrobot/pylabrobot/liquid_handling/liquid_handler.py:650, in LiquidHandler.aspirate(self, resources, vols, use_channels, flow_rates, end_delay, offsets, liquid_height, **backend_kwargs)
    647   del backend_kwargs[extra]
    649 try:
--> 650   await self.backend.aspirate(ops=aspirations, use_channels=use_channels, **backend_kwargs)
    651 except:
    652   for op in aspirations:

File ~/clone_pylab_robot/pylabrobot/pylabrobot/liquid_handling/backends/opentrons_backend.py:406, in OpentronsBackend.aspirate(self, ops, use_channels)
    403 else:
    404   offset_x = offset_y = offset_z = 0
--> 406 ot_api.lh.aspirate(labware_id, well_name=op.resource.name, pipette_id=pipette_id,
    407   volume=volume, flow_rate=flow_rate, offset_x=offset_x, offset_y=offset_y, offset_z=offset_z)

File ~/miniconda3/envs/py_3_9/lib/python3.9/site-packages/ot_api/decorators.py:23, in request_with_run_id.<locals>.wrapper(*args, **kwargs)
     20   kwargs["run_id"] = run_id
...
---> 49   raise error_class(error_data["detail"])
     50 elif result["data"]["status"] in ["queued", "running"]:
     51   continue

UnexpectedProtocolError: Cannot aspirate more than pipette max volume

This error must come from the machine itself. Did it pick up the right tip?
You may also need to start a new session using lh.setup() (Opentrons has its own volume tracker, which can raise weird errors sometimes).

Yes, the robot pick up the tips.
I have done it several times (restart, restart + lh.setup(), lh.setup()), and I always get the same error message.

Hello,
I tried with the last update of Opentrons, and I always get the same error message.
Thanks for you help.

Are you able to discard the tips? The OT should throw an error if it did not register the pickup.
If that works, could you capture and share the HTTP data using something like mitmproxy? Use mitmproxy -p 5005 --mode reverse:http://<OT IP>:31950, and set the host and port to <IP_ADDRESS> and 5005 in PLR.

Hello,
This is what I get after sending the aspirate commande :
capture_ecran_HTTP_data.pdf

Could you press enter on the command that's being sent to show the JSON data? (the POST request)
Also, you can use -w <file> to write all output to a file.

data_http_1_03.zip
Thanks for you help.

Unfortunately mitmproxy can't open that file for me. I'm using mitmproxy==9.0.1.

Can you open the file with mitmproxy -r <path>?

With this file ?
data_20_03_2023.zip

👋 Hello from Opentrons!
I suspect this has to do with the tip rack's labware definition, which gets POSTed in request 80. It defines each "well" with this:
"totalLiquidVolume": 0.0

But per our labware definition schema, this should probably be 20, since the source loads an opentrons_96_filtertiprack_20ul.
The labware definition looks correct on our side. I'm not familiar with PyLabRobot's internals, but it looks like this is somehow getting lost in translation? @rickwierenga

@SyntaxColoring Thanks for the quick reply! That makes sense. I just pushed a commit to fix that. (https://github.com/PyLabRobot/pylabrobot/commit/811a4321dfc6cf3e62ab772bf853996628fc462c)
@noparis, could you see if pulling helps?

Great!
Thanks @noparis for reporting and @SyntaxColoring for the help!


add favicon

i have an svg called fa-paintbrush-fine.svg. please update the html to set that as the favicon

🤖
To set the fa-paintbrush-fine.svg as the favicon, you need to update the  section of your HTML file by adding the following  element:
<head>
    <!-- Your existing head content -->
    <link rel="icon" type="image/svg+xml" href="fa-paintbrush-fine.svg">
</head>

This line of code sets the fa-paintbrush-fine.svg file as the favicon for your website. Make sure the file is placed in the same directory as your HTML file or update the href attribute to point to the correct location.


[FEAT.] Add a Pull Request template

Is your feature request related to a problem? Please describe.
This project is missing a Pull Request template.
Describe the solution you'd like
I want to work on this issue and create a PR template.
Describe alternatives you've considered
N/A
Additional context
N/A

can i work on that?

can i work on that?

Sorry, this task is already assigned. 😅
You can check for other unassigned tasks. I hope you will get some good issues to work on! 👍


How to change the ip address?

Hi, I reviewed your plugin. It looks awesome but unfortunately I could not get it working for me.
I have a websocket opened on a remote web server so I want to use a remote ip address instead of  <IP_ADDRESS>:2000
I could not find any option to change ip address. Can you please tell that how can we perform this?
Thanks

'<IP_ADDRESS>' means the server listens for incoming connections on all the network interfaces of your device.
You can't choose one interface in particular. This is the default with this plugin for now.
But most likely you only have one Wifi interface and one Bluetooth interface anyway.
If one of your network interface subnet is 192.168.0.x for instance then the server is accessible at 192.168.0.x:2000
Does that answer your question?

Thank you so much for quick response.
Actually I made a chat system by opening web socket on my remote web hosting. So my hosting is listening for a port. So I have to connect my mobile device with that remote socket from my web server.

If I follow you (I'm not sure I do), you just need a websocket client on your device to connect to your remote websocket server? No need for this cordova plugin.
Don't you know the IP or your hosting service?

I made a capacitor(ionic) plugin that can support websocket remote connection, welcome to try it.


feat: context module support inline loader

Summary

Test Plan

Require Documentation?

[ ] No
[ ] Yes, the corresponding rspack-website PR is __

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.1 out of 2 committers have signed the CLA.:white_check_mark: faga295:x: liuzhaochenliuzhaochen seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.You have signed the CLA already but the status is still pending? Let us recheck it.


Containerize Dogehouse

About the Problem
Installing dependencies for the backend (Elxir API / Voice/WSS server) and frontend (React webapp / Puppeteer shenanigans AKA UI Tests and Lighthouse checks) is a mess and may cause dependency hell if left unmanged, and running them one-by-one can be also an distater.
Solution and To-Dos

[ ] Make an docker-compose.yml file in the root directory that includes each subdirectiry's Dockerfiles required for running the instance + database backend.
[ ] Create an Dockerfile on each folder in the Dogehouse monorepo.

For scaling, use Kubernetes, but the problem is Docker support in Kubernetes will be removed by version 1.22. So, this may requires making own Helm charts without Docker.

So Far this is my docker-compose

[ ] need to run DB migrations?
[ ] need to communicate with voice server

version: "3"
services:
  database:
    image: postgres
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRE_DB=postgres
  voice_server:
    build: ./shawarma
    depends_on:
      - backend

  backend:
    build: ./kousa
    depends_on:
      - database
    environment:
      -<EMAIL_ADDRESS>      - BEN_GITHUB_ID={username}
      - RABBITMQ_URL=amqp://<IP_ADDRESS>:3000 # Not sure about this
      - SENTRY_DNS=NO_IDEA_WHAT_THIS_IS
      - GITHUB_CLIENT_ID=5d5xxxxxxab70
      - GITHUB_CLIENT_SECRET=48xxxxxxxxxxxxd1cd5
      - ACCESS_TOKEN_SECRET=8f51exxxxxx7211dd
      - REFRESH_TOKEN_SECRET=dbb85xxxxxx9ebde
    networks:
      - frontend
    ports:
      - 4001:4001

  frontend:
    build: ./kofta
    networks:
      - db
    ports:
      - 3000:3000

networks:
  db:
  frontend:

So Far this is my docker-compose

[ ]  need to run DB migrations?
[ ]  need to communicate with voice server

version: "3"
services:
  database:
    image: postgres
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRE_DB=postgres
  voice_server:
    build: ./shawarma
    depends_on:
      - backend

  backend:
    build: ./kousa
    depends_on:
      - database
    environment:
      -<EMAIL_ADDRESS>      - BEN_GITHUB_ID={username}
      - RABBITMQ_URL=amqp://<IP_ADDRESS>:3000 # Not sure about this
      - SENTRY_DNS=NO_IDEA_WHAT_THIS_IS
      - GITHUB_CLIENT_ID=5d5xxxxxxab70
      - GITHUB_CLIENT_SECRET=48xxxxxxxxxxxxd1cd5
      - ACCESS_TOKEN_SECRET=8f51exxxxxx7211dd
      - REFRESH_TOKEN_SECRET=dbb85xxxxxx9ebde
    networks:
      - frontend
    ports:
      - 4001:4001

  frontend:
    build: ./kofta
    networks:
      - db
    ports:
      - 3000:3000

networks:
  db:
  frontend:

@Salman2301 It's not needed to expose the port for the PostgresDB server port. The only thing we need to expose is the frontend UI and the backend API/voice server. Also, we need volumes for the database to ensure no data is lost after shutting down the server.
Speaking of the DB migrations, because there's no documentation yet, I may look over the codebase later. As for communicating with the voice server, yes, we need to have an way to communicate with the websocket server.

As both the backend API and the websocket server has its own Dockerfiles, and since the frontend is deployed through Netlify, we don't need the Dockerfile for the frontend. @Salman2301

I just keep Dockerfile for frontend
so, we can start and stop all the containers during local dev.
I think there is some DB migrations stuff in kousa/priv/repo/migrations/*.exs
That we run in Dockerfile for kousa
IDK what's the SentryDNS
do we needed for local environments?

IDK what's the SentryDNS
do we needed for local environments?

This seems to be a typo, should be DSN (Data Source Name).
Basically tells sentry where to send your events.
It's used in releases.exs so it doesn't get used in development and you can probably just remove it from the docker-compose environment variables.

@ianjaku  If i remove it, it throws the error
Cause the Dockerfile in kousa set the env as a production and we can create a new docker file for developement
to avoid it may be?

Could be interesting to also add add adminer to the docker-compose file, It's extremely light weight and can be useful for testing.
Would be:
  adminer:
    image: adminer
    restart: "no"
    ports:
      - 5051:8080
    depends_on:
      - database

Data for postgres is located at /var/lib/postgresql/data so to add a volume we would need to add:
# In the database section
volumes:
  - dbdata:/var/lib/postgresql/data

# At the bottom of the file
volumes:
  dbdata:

Guys, I'm currently writing the Compose file in Gitpod. Will push it into my fork for review later.

@Salman2301

@ianjaku If i remove it, it throws the error
Cause the Dockerfile in kousa set the env as a production and we can create a new docker file for developement
to avoid it may be?

Ah ye my bad, the Dockerfile is building a release so it will always run the releases.exs file.
The underlying issue is that you can't use the current Dockerfile in dev (even when removing ENV MIX_ENV=prod) because the settings in releases.exs will overlap with the settings in dev.exs.
Creating a separate Dockerfile that doesn't build a release and instead just calls mix run would be a decent temporary solution for now I think.

@Salman2301 @ianjaku I committed the file into my fork based on your feedback. Here's it: https://github.com/MadeByThePinsHub/dogehouse/blob/andreijirohhalilidev2006/containerize-101/docker-compose.example.yml
Also, the proposed README that I wrote states that you should duplicate the example file as docker-compose.yml as there are environment variables for GitHub OAuth app ID and secret that will be dangerous to be committed in the source code version control.


How to train on unlabeled data?

How can we train on unlabeled custom data? Your instructions mentioned that we have to convert the dataset to COCO annotations, but I don't have track ID labels for my task; I have the bounding boxes from Yolo.
Please let me know. Thanks.

Sorry for the late reply. Just set your ID labels to -1, and our code will ignore the IDs and generate the pseudo-labels automatically.


Remove erroneous environ commands

In #1559, @RajdeepRao pointed out that these code blocks were in many tests here.
environ.update() mutates a list in place and returns None, so all of these blocks with os.environ.copy().update(...) are creating an ephemeral copy of the environment dictionary, updating it, and then it's deleted since nothing holds a reference to it.
Since these were no-ops anyway, I've removed them. I believe the env fixture defined in this file should be used instead.
Pull Request Checklist

[ ] News fragment added in changelog.d. See documentation for details

Hm, I guess there's setuptools.tests.environment.
It's a bit confusing how the env fixture is named in this case, we may want to rename that.
Also, presumably this was intended to do a specific thing. Maybe we should be setting env['HOME'] in setuptools.tests.environment? I don't really know what problem this was originally intended to solve.

Actually, I think I can actually just easily make this work as intended, though it's disturbing that this has been broken for 4 years (and that everyone's just been cargo-culting this the whole time - almost all the instances of this are from blind copy-pasting).
Not sure how to test that the fixed version actually works, though. Probably seeing if some configuration in my home directory doesn't get picked up after it's fixed?

Interestingly, the tests actually fail if env is set up "correctly".

I think I can fix it by looking for all the egg-info files relative to env.paths['egg-base'], but did you want them to be in the local directory deliberately, even when HOME is set to be somewhere else?

I did not have any particular expectations about the tests. I do agree that it's perhaps surprising and undesirable to be generating files in the cwd unless that directory was explicitly set to some temporary directory for the duration of the test. Since the egg_info command does normally generate files in the current directory, I would sort-of expect for tests to use that pattern (except for tests that specifically override where egg-info is generated).
I don't understand the meaning/purpose of HOME. I would expect HOME only to affect the reading of ~/.pydistutils.cfg... and not the location of a generated egg-info.

I think I can fix it by looking for all the egg-info files relative to env.paths['egg-base'].

Perhaps that's the right thing to do, but it feels like a workaround for earlier bad behavior. I'm not seeing the problem clearly, though. Feel free to do whatever you think is right.


clangd got crashed when using c++ raw string literal

Hi
i am facing an issue that  clangd got crashed when using c++ R string, like this :

vscode log has nothing useful, but there is some stack may be helpful in system crash reports.

i try this by replacing clangd version  with clangd 11.0,  clangd 12 , both not work.
device:
MacOS Catalina 10.15.7 .
thanks.

clangd_2021-04-09-173951_C02F900HN5RN.crash.zip

The stack trace looks to be related to template instantiation.
Could you provide a complete code example which reproduces the problem please?

the class (NetworkTrafficAnnotationTag DefineNetworkTrafficAnnotation) is from the chromium source

i was trying to use  DefineNetworkTrafficAnnotation to construct a http request.
you are right, this is really a template instantiation. when i changed the code like this
#define CHAR char

CHAR arg[] = R"(Test)";
net:: NetworkingTrafficAnnotationTag traffic_annotation = net::DefineNetworkTrafficAnnotation("Test", arg);

it continous crashed too.

Does this crash if you don't use a raw string for the second argument?
"\n      Test\n"

If it does then the issue is likely in the template instantiations and nothing to do with raw strings. Obviously the reason the std::string didn't crash is due to it calling a different function.

Does this crash if you don't use a raw string for the second argument?
"\n      Test\n"

If it does then the issue is likely in the template instantiations and nothing to do with raw strings. Obviously the reason the std::string didn't crash is due to it calling a different function.

it crashed too  😣

it seems like it is not related raw string

is there a comment annotation to tell clangd  that ignoring the code between the tag pair?
maybe look ike this :
// clangd-disabled-start
// clangd-disabled-start

You can use macros to do that along with the compile flags in config
CompileFlags:
  Add: [ -D__CLANGD__ ] # Define the macro __CLANGD__

Then wrap the code in
#ifndef __CLANGD__
// clangd will ignore this code
#endif

However expect further errors to be propagated from the traffic_annotation symbol not being defined.


[IMPROVEMENT] backup backing image should store the secret and secret namespace if it is encrypted

Is your improvement request related to a feature? Please describe (👍 if you like this request)
If users backup an encrypted backing image
The secret/secretnamespace information is not stored in the backupstore backup backing image config
So the BackupBackingImage CR won't have the information
If users want to restore it back, we still need to add the secret/secretnamespace to the restored BackingImage CR
Thus, in the v1.7.0, we allow users to fill in the secret/secretnamespace when restoring the backing image
Describe the solution you'd like
However,
we should store the information in the backup store
so we can sync the information back and stored in BackupBackingImage CR
When users want to restore the backing image, the information will be in the BackingImage CR automatically.
Describe alternatives you've considered
.
Additional context
cc @derekbit @a110605

PRs:

longhron-type: https://github.com/longhorn/types/pull/22

Verification passed on master-head (longhorn-manager 4d77907) following the test steps.
Created an encrypted backing image following the steps in https://longhorn.io/docs/1.7.1/advanced-resources/backing-image/backing-image-encryption/. After Backing up the encrypted backing image, checked the corresponding fields of the encrypted backing image backup, confirmed that secret and secretNamespace were present as expected.
$ kubectl get backupbackingimages.longhorn.io -n longhorn-system parrot-cloned-encrypted -oyaml
apiVersion: longhorn.io/v1beta2
kind: BackupBackingImage
metadata:
  creationTimestamp: "2024-09-30T06:50:50Z"
  finalizers:
  - longhorn.io
  generation: 1
  name: parrot-cloned-encrypted
  namespace: longhorn-system
  resourceVersion: "20711"
  uid: 052742d6-6677-47c9-848c-1e678e0358ff
spec:
  syncRequestedAt: null
  userCreated: true
status:
  backingImage: parrot-cloned-encrypted
  backupCreatedAt: "2024-09-30T06:50:53Z"
  checksum: 4d0eee6c81f1282988ffd86e08366bef368b423b3919ad8256f8891c4a18645ab7d2af4a55c540df6938046d5ad2a08d316ae0fe6711ac8be0ad015fd26149dc
  compressionMethod: lz4
  labels: null
  lastSyncedAt: "2024-09-30T06:50:54Z"
  managerAddress: ""
  messages: null
  ownerID: ip-10-0-1-18
  progress: 100
  secret: longhorn-crypto
  secretNamespace: longhorn-system
  size: 50331648
  state: Completed
  url: s3://backupbucket@us-east-1/backupstore?backingImage=parrot-cloned-encrypted

$ curl -s http://<IP_ADDRESS>:30000/v1/backupbackingimages | jq .
{
  "data": [
    {
      "actions": {
        "backupBackingImageRestore": "http://<IP_ADDRESS>:30000/v1/backupbackingimages/parrot-cloned-encrypted?action=backupBackingImageRestore"
      },
      "compressionMethod": "lz4",
      "created": "2024-09-30T06:50:53Z",
      "error": "",
      "id": "parrot-cloned-encrypted",
      "labels": null,
      "links": {
        "self": "http://<IP_ADDRESS>:30000/v1/backupbackingimages/parrot-cloned-encrypted"
      },
      "messages": null,
      "name": "parrot-cloned-encrypted",
      "progress": 100,
      "secret": "longhorn-crypto",
      "secretNamespace": "longhorn-system",
      "size": 50331648,
      "state": "Completed",
      "type": "backupBackingImage",
      "url": "s3://backupbucket@us-east-1/backupstore?backingImage=parrot-cloned-encrypted"
    }
  ],
  "links": {
    "self": "http://<IP_ADDRESS>:30000/v1/backupbackingimages"
  },
  "resourceType": "backupBackingImage",
  "type": "collection"
}


$10k project idea #10 - Sitewide Accessibility Reviews & aXe-core

Websites need an easy way to evaluate their sites for site-wide accessibility problems. There are commercial tools that do this, but it would be more powerful, secure and customizable if there were an open source tool that could easily be leveraged.
There are tools like pa11y & aXe-core which can be used, but more work is needed to document this and ensure that it is easier for people developing sites in the government to set up. Perhaps there is a means to bundle it into a docker solution that can be more easily distributed.

From Medium post: https://medium.com/@mgifford/i-would-definitely-update-it-with-or-without-covid-19-e326e1882603
Update on issue from May 2020
#10 — Site-wide Accessibility Reviews, GDS and CDS are both looking at this. We’re developing our own framework for it too. A lot of additional work is needed though. From our preliminary work it is clear that government sites have lot more work they need to do to achieve WCAG 2.0 AA requirements.

This is the GDS project https://github.com/alphagov/accessibility-monitoring
I think CDS is working on some axe based initiatives too, but this is one using Google's Lighthouse https://github.com/cds-snc/lighthouse-scan-monitor


[Plan] Goblet plan command

Ability to see what is current deployed and what would be changed.
goblet plan -p PROJECT
which would return
function exists...
scheduled job will be deployed....
pubsub topic job will be updated....

Could be similar to how terraform plan outputs to json and has a readable version that can be printed to console.
https://developer.hashicorp.com/terraform/internals/json-format


Ability to Override parse Method

It ried to find if it's currently possible in docs and on the web, but to no avail. Apologies if I'm missing something.
If it's not implemented already, can we have the possibility to customize the parsing logic. My use case is to implement NonBlankString (similar to NonEmptyStr but before validation, strips the string value first).
Thanks.

@akefirad This is just a matter of overriding the parse method in a subclass, but I see your point this could be explicitly documented. Let's keep this issue open to track that.


I'm new to bootstrap and I want to use tooltip to give the name of the current button which are in the navbar. It works properly only after a one hover in the buttons but not in the first time.

Before opening an issue:

Search for duplicate or closed issues
Validate and lint any HTML to avoid common problems
Prepare a reduced test case for any bugs
Read the contributing guidelines

When asking general "how to" questions:

Please do not open an issue here
Instead, ask for help on StackOverflow, IRC, or Slack

When reporting a bug, include:

Operating system and version (Windows, Mac OS X, Android, iOS, Win10 Mobile)
Browser and version (Chrome, Firefox, Safari, IE, MS Edge, Opera 15+, Android Browser)
Reduced test cases and potential fixes using JS Bin

When suggesting a feature, include:

As much detail as possible for what we should add and why it's important to Bootstrap
Relevant links to prior art, screenshots, or live demos whenever possible

I'm new to bootstrap and I want to use tooltip to give the name of the current button which are in the navbar. It works properly only after a one hover in the buttons but not in the first time.

When asking general "how to" questions:
Please do not open an issue here
Instead, ask for help on StackOverflow, IRC, or Slack


Hide read only embedded entities

Description
From now on Composer won't display embedded entities with modifier set to "r"
on recording allocated entity is "r"
https://github.com/user-attachments/assets/24086e48-887f-47ba-9b41-01c06fbafeba
closes #6034
Self Check:
Strike through any lines that are not applicable (~~line~~) then check the box

[ ] Attached issue to pull request
[ ] Changelog entry
[ ] Code is clear and sufficiently documented
[ ] Sufficient test cases (reproduces the bug/tests the requested feature)
[ ] Correct, in line with design
[ ] End user documentation is included or an issue is created for end-user documentation (add ref to issue here: )

Processing this pull request

Merged into branches master in 0d5641a25030261681db677b2c3fafbbf1669ec1


Updated 'locks' api location

Updated 'locks' api location fixes the issue of not being able to get the list of locks.

@andrewmattie I don't have locks, therefore I can't test this. If you tell me it works I'll take your word for it.


Calling getUserSubadminGroups with OC10 backend gives 401 Unauthorised

Similar to the comment here https://github.com/owncloud/owncloud-sdk/blob/cabb393f699620bfe4dd828029797e5d652a7d53/src/userManagement.js#L293
When performing this API call in the phoenix frontend, for a user who is a member of the admin group the API call is successful (whether or not they are subadmins of any groups or not) and the correct data payload is returned.  If, however the user is not a member of the specific admin group (we call this a global admin and is only given to a few people in our instance) we receive a 401 unauthorised response.
We have no current workaround and are unable to use the subadmin feature for users who we want to give some control over managing groups in Owncloud until this is fixed.
Here is the data payload returned from this failure case:
<ocs>
<meta>
<status>failure</status>
<statuscode>997</statuscode>
<message>Unauthorised</message>
</meta>
<data/>
</ocs>

Below is a sample screenshot, the call is triggered after login is successful.  It is easy to reproduce by adding the user to the admin group (success) then removing the user from the admin group (failure).

Perhaps related, even if I am a member and/or subadministrator of a group, x, unless I am part of the special group admin I am unable, via the owncloud-sdk to add any user to that group x as a member, the following result is returned:
<ocs>
<meta>
<status>failure</status>
<statuscode>104</statuscode>
</meta>
<data/>
</ocs>

However, if I, as the same non-admin user, go to the OC10 UI Users list, I am able to add the user to that group, this doesn't use the same API though.  Seems odd that you can achieve it via the OC10 UI freely, but the owncloud-sdk blocks the same behaviour.  Please let me know if I am missing anything in my assumptions here, but we want to utilise groups and subadmins of groups to delegate access.

Perhaps related, even if I am a member and/or subadministrator of a group, x, unless I am part of the special group admin I am unable, via the owncloud-sdk to add any user to that group x as a member, the following result is returned:
<ocs>
<meta>
<status>failure</status>
<statuscode>104</statuscode>
</meta>
<data/>
</ocs>

However, if I, as the same non-admin user, go to the OC10 UI Users list, I am able to add the user to that group, this doesn't use the same API though.  Seems odd that you can achieve it via the OC10 UI freely, but the owncloud-sdk blocks the same behaviour.  Please let me know if I am missing anything in my assumptions here, but we want to utilise groups and subadmins of groups to delegate access.


[Question] ENV NUMBER_OF_SHARDS and ENV NUMBER_OF_REPLICAS

Hi
env NUMBER_OF_SHARDS and ENV NUMBER_OF_REPLICAS are defined in Dockerfile, are they available? I'm asking because I didn't see them in elasticsearch.yml. Thanks.

Good catch. I removed it as it doesn't seem to be available any more, right? Feel free to open a PR to remove that from the Dockerfile.


Title is shown in TOC, do we want that?

I guess Abstract is enough to show as an entry.

Currently it looks like @oliver---- wanted that. However not sure why, is that scroll to top thing?

I just thought the TOC should be consistent with the sections in the body.

And scroll-top was about two things:

scroll to the section label
always scroll, not only if not visible


Design Dashboard template for Azure monitor

Deisgn dashboard templates for Azure monitor

[ ] : export dashboard

@tcnghia - can you look at this issue?

Should be added to https://docs.dapr.io/operations/monitoring/metrics/azure-monitor/

it looks like this has been documented - if not, feel free to reopen or open a new issue.


Error when using DAQ on CPP project

Firstly, Thank about this poject. I tried both two projects: C_Demo and CPP_Demo with mesurement and calibartion at DAQ mode and polling mode
C_Demo is fine with both DAQ and polling mode. But, CPP_Demo happens "Segment fault" when using DAQ mode.
I tried them on beaglebone black board.
I hope that Could your team check this problem ?
Originally posted by @Wechs24 in https://github.com/vectorgrp/XCPlite/discussions/17

Probably a problem with variable addresses.
Check that you are using the A2L file generated by your application or enable linker map update.
Reduce your measurement configuration to a single signal which causes the problem.
Please check that the address look plausible (right click on signal -> signal properties).
A2L/XCP addresses of member variables should have address extension 1 to turn on relative addressing.
The address should be the event number (instance id) in high word and the offset to 'this' in the low word.
Something like: signal: sigGen1.value -> address: 1:00010050.
0x50 is the offset I get for '.value' when using VS compiler on Windows.


CapitalPDangit: ignore misspellings in constant declarations

Just like in array declarations, when wordpress is spelled incorrectly in constant declarations, this will be a false positive in 90% of the cases, so just ignore it.
Fixes #1698

@peterwilsoncc Just checking: will you have a chance to look at this to see if this covers your issue sufficiently ?

@jrfnl, Just got around to it, this fixes the issue I've been having with the tests config file.
Thanks.

@peterwilsoncc Thanks for testing!


[WIP] Fix TestUpdaterRollback

Attempts to fix a bug in TestUpdaterRollback which is causing the test to fail in CI consistently.
This PR is marked WIP as the failure only seems to occur in CI.

@dperny btw I did same change already on #2762 which is merged so this one can be closed.

This increases the timeout for all tests. I don't think that's a good idea.

@anshulpundir yes it increased timeout for all tests but as root cause looks to be resource issue on CircleCI servers it is IMO correct way to fix these (I was able to prove that issue happens always if I set too tight CPU limit to docker run command).

closing because https://github.com/docker/swarmkit/pull/2762 was merged; looks like it's sometimes still flaky though: https://github.com/docker/swarmkit/pull/2848


Cache Corruption

Continuation from : https://github.com/mafintosh/electron-prebuilt/issues/25
The problem is assuming the download completes, here:
20   if (pathExists.sync(cachedZip)) {
21      return cb(null, cachedZip)
22    }

If the download doesn't complete, then the cache is corrupted. the solution suggested by @mafintosh was creating a tmp directory initially, but this is the repo to make that PR now

This is the error message for reference:
><EMAIL_ADDRESS>install /Users/rnbwd/Projects/forks/electron-prebuilt
> node install.js

/Users/rnbwd/Projects/forks/electron-prebuilt/install.js:15
  throw err
        ^
Error: end of central directory record signature not found
    at /Users/rnbwd/Projects/forks/electron-prebuilt/node_modules/extract-zip/node_modules/yauzl/index.js:98:14
    at /Users/rnbwd/Projects/forks/electron-prebuilt/node_modules/extract-zip/node_modules/yauzl/index.js:342:5
    at /Users/rnbwd/Projects/forks/electron-prebuilt/node_modules/extract-zip/node_modules/yauzl/node_modules/fd-slicer/index.js:32:7
    at FSReqWrap.wrapper [as oncomplete] (fs.js:527:17)

$ ls  ~/.electron
electron-v0.25.3-darwin-x64.zip

It's an incomplete download, I'm not sure if OP that started the other issue realized what was happening

@RnbWd yes we should just impl the tmp file strategy here

oh yea this is an easy fix


Correction for raw affiliation National Drug Research Institute, Curtin University, Shenton Park, Perth, WA, Australia; Centre for Addictions Research of British Columbia, University of Victoria, Victoria, BC V8W 2Y2, Canada

Correction needed for raw affiliation National Drug Research Institute, Curtin University, Shenton Park, Perth, WA, Australia; Centre for Addictions Research of British Columbia, University of Victoria, Victoria, BC V8W 2Y2, Canada
raw_affiliation_name: National Drug Research Institute, Curtin University, Shenton Park, Perth, WA, Australia; Centre for Addictions Research of British Columbia, University of Victoria, Victoria, BC V8W 2Y2, Canada
new_rors: 03rmrcq20;04s5mat29
previous_rors: 03rmrcq20
works_examples: W1965484807
contact: b0b28887f60d019fbde2ea49d7914ad9:d8e5a754 @ ourresearch.org

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


Custom Json response in Socketio channel is not working as expected

Rasa version: 2.2.5
Rasa SDK version (if used & relevant): 2.4.1
Rasa X version (if used & relevant): None
Python version: 3.7.9
Operating system (windows, osx, ...): Linux (Ubuntu)
Issue:

Connecting to Rasa Server using Socket channel doesn't return payloads (custom json) in response.

Note: Payloads are working normally when using REST channel

Error (including full traceback):

Command or request that led to error:
- Using **dispatcher.utter_message(json_message=request)**  within a custom action in the **Rasa Action Server.**

- I am expecting that the action server will respond with the **request*, however, this is not happening.

- Things works fine using the **REST** channel

Content of configuration file (config.yml) (if relevant):

Content of domain file (domain.yml) (if relevant):

Upon debugging Socketio.py class in Rasa source code

As in

https://github.com/RasaHQ/rasa/blob/ab3199ab7389833836805bbaf11e9bbe5720ad06/rasa/core/channels/socketio.py#L101-L108

Removing the unpacking in the method return fixes the issue!

After modification ---> await self.sio.emit(self.bot_message_evt, json_message)

So would you please check this?

Thanks for raising this issue, @alopez will get back to you about it soon✨
Please also check out the docs and the forum in case your issue was raised there too 🤗

@OmarFarag95 This might have been fixed in Rasa Open Source 2.5. Can you verify?


[WIP] crates refactor

Refactors iroh into three crates

iroh

main binary
provide loop, now called Node to prepare for being more generic of different protocols
rpc logic

iroh-bytes

The current iroh protocol, collections, database, provide & get

iroh-net

derper binary
Holepunching & connectiong mgmt
tls

Things needed for merge

[ ] update crate names
[ ] update READMEs
[ ] update Cargo.tomls
[x] update CI to include all feature & create combinations
[ ] green CI
[ ] make metrics modula

Misc

Does not use workspace.dependencies on purpose. I am trying to limit shared dependencies, and it is much easier to actually read/consume when looking at individual crates, at the expense of updates.
There are some things like the runtime and various utilities that could be their own crates. For now I would like to keep them like this to not create too many crates, and only split them out if there is an actual need.

If we do this refactoring it would make sense to have iroh-io - that I am currently working on - live in this workspace as well.

sounds good 👍

Just looked at the docs - highly recommended to get an overview. For the iroh-net crate I think it would be useful to move a few more things to top level. Currently it seems more like "a bag of stuff" without a clear purpose and entry point.

Iroh-bytes is a bit too big, it is almost "basically iroh without the cli". Also it contains stuff that I would have expected to be relevant also for other iroh subsystems, such as the PeerId.


Loss is nan

I'm trying to fine tuning the fasterrcnn_resnet50_fpn model using the scripts in vision/references/detection/.
As sanity check first of all i have trained the model with train.py script with all default parameters on COCO2017, except for --pretrained -b 1 -j 4 and --device cuda (on Gtx 1070).
Getting the follow error:
{'loss_classifier': tensor(nan, device='cuda:0', grad_fn=<NllLossBackward>), 'loss_box_reg': tensor(nan, device='cuda:0', grad_fn=<DivBackward0>), 'loss_objectness': tensor(nan, device='cuda:0', grad_fn=<BinaryCrossEntropyWithLogitsBackward>), 'loss_rpn_box_reg': tensor(inf, device='cuda:0', grad_fn=<DivBackward0>)}
Another test was done reducing the learning rate to 0.0001 but the same error was raised, only after more time. To find the cause of problem i have done the same test without shuffle sample on training, and surprising there isn't a specific sample with wrong bbox (the dataset used is the original COCO2017, the scripts automatically exclude wrong samples).
Configuration: CUDA 9.1 adn Cudnn 7 on ubuntu 18.04 lts

This looks a lot like duplicate from https://github.com/pytorch/vision/issues/1128 https://github.com/pytorch/vision/issues/1120 and https://github.com/pytorch/vision/issues/997
Could you try seeing if the solutions in those issues apply to your problem? I.e., seeing if you don't have a box with a zero width / height somewhere?

Closing due to inactivity and because there is nothing actionable we can do


Grafana dashboard

This is very cool and useful rather than running many agent to check the usage
Do we have any grafana dashboard which are already designed to view these metrics?

hi @saiharshitachava :)
I'll make our dashboards public in grafana.com/dashboards and soon will paste here the link :)

Thanks @gkope Please tag me when u paste the link here :)

@gkope we dont have all these metrics as part of this exporter right?
kube_pod_container_status_restarts_total
kube_pod_container_resource_requests
kube_pod_container_resource_limits
and other metrics used..we cont have these as part of this exporter

you are right @saiharshitachava
You need to configure kube-state-metrics and metrics-server + metrics-server-exporter so that the dashboard can be fully functional.
As said on the PR, the dashboards was tested by a few and it's working.


New version: Audacity.Audacity version 3.6.4

Checklist for Pull Requests

[ ] Have you signed the Contributor License Agreement?
[ ] Is there a linked Issue?

Manifests

[ ] Have you checked that there aren't other open pull requests for the same manifest update/change?
[ ] This PR only modifies one (1) manifest
[ ] Have you validated your manifest locally with winget validate --manifest <path>?
[ ] Have you tested your manifest locally with winget install --manifest <path>?
[ ] Does your manifest conform to the 1.6 schema?

Note: <path> is the directory's name containing the manifest you're submitting.

Microsoft Reviewers: Open in CodeFlow

Duplicate of #174308

Close with reason: Duplicate of #174308;


Change scaling example to state 'invalid input'

This is a more suitable code.

Merging without approval


consider this

https://code.google.com/p/simplefilewatcher/

https://github.com/DanielGibson/Snippets

https://cristianadam.eu/20160410/c-plus-plus-i-slash-o-benchmark/
(TL;DR fastest way: posix)


Able to pass arg to group route callback

will let us have ability to pass args to callback of group route :
$app->group('/:foo/bar', function($foo) use($app)
{
    echo $foo;
    $app->get('/whatever', ....
});

I'd really appreciate this feature.
It's a must when using language prefix as a segment routes.

Assigned this to @gmanricks. He'll review and pull in when appropriate.

Hi @piotr-cz , if you want to use with language prefix, here is a idea of middleware implementation that  no longer need to include language prefix param in any routes.
app;
            $paths = explode('/', $app->request()->getResourceUri());
            $locale = $paths[1];
            $currentUrl = '/'.join(array_slice($paths, 2), '/');
            $localeFile = $app->config('localePath') .'/'. $locale .'.yml';

            if(!file_exists($localeFile)) {

                if($locale != '') {

                    try{
                        $app->notFound();
                    } catch(Exception $e) {}

                    return;
                }

                $preLocale = $app->getCookie('locale');
                $locale = $preLocale ? $preLocale : $app->config('defaultLocale');

                try{
                    $app->redirect('/'.$locale);
                } catch(Exception $e) {}

                return;
            }

            $app->setCookie('locale', $locale, mktime().time() + 60*60*24*100);
            $this->next->call();
        }
    }

Thanks @garyyeap, but besides pages with language prefix, I've create an API that's language agnostic. That's why I'd prefer to use groups, it's the cleanest solution.

I wonder if this could go into 2.x release since here's the code and test are passing

I think this will not happen for Slim2 since there is no new features added to slim2

Depends on the point of view. For me it's a bugfix ;)

Re-assigning to @akrabat for review.

Is the work against the master or against develop branch?

Under the pull request descriptions it says slimphp:develop

Yes, but the diff is against a class that's only in master …

I'd say that the context of develop branch has changed since this PR. It was more like minor version develop (2.x) and now it's like major future version develop (3.x)

Is this getting merged? if does, I will send another PR for 3.x on this weekend

@codeguy do you want this for Slim 2 or 3?

Slim 2 is done. If we're going to pull this in, it'll be for 3 only.

If Slim 3 will use nikic/fast-route, similar PR won't be necessary as it's already built in there.
However Slim 2 (ATM only stable release) IMHO deserves having this fixed. But I won't bug anymore


Fix to add empty marker to empty group

[x] Bugfix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)

Proposed changes

Empty marker is shown in outliner when last node is removed from it.
However it is not shown when copy and pasting an empty group or loading
a flow containing it.
This PR try to fix the issue.

Checklist

[x] I have read the contribution guidelines
[ ] For non-bugfix PRs, I have discussed this change on the forum/slack team.
[x] I have run grunt to verify the unit tests pass
[ ] I have added suitable unit tests to cover the new/changed functionality

Coverage: 68.554%. Remained the same when pulling 929f0e90accffa720978087fbca4bef05a028ec3 on node-red-hitachi:fix-empty-group-on-outliner into adfc5b3e98ea98e5c6c5da0660becbc6bc67fec3 on node-red:master.


optimizations

I'd like to propose some optimizations that I would also be happy to implement after pr #67 is resolved.
In particular, I think if path caching, lazy-caching and getters/setters are implemented throughout the code it would result in pretty noticeable performance improvements. Just as importantly we can do so without complicating the code (it might even make the code cleaner).
Why?

lazy-caching: will result in faster initialization and application loading (potentially dramatically faster)
getters/setters: will result in better performance with path calculations and building up the config/env objects after initialization.
caching: will result in faster lookups in cases where the same information is requested more than once

Also, I implemented similar optimizations in verb and assemble and it reduced init time from 500-800 ms, to 150-200 ms. This makes the experience a lot nicer, and since init is faster it opens up the door for more interesting things (that might typically bog down the experience too much).
lazy-caching
Since liftoff is a command line application, it's a perfect use case for lazily evaluating requires. This way only libraries that are actually needed with be loaded upon invocation.
(fwiw, I've seen some developers have philosophical issues with this, but we use lazy-caching quite extensively and after 30+ million downloads of lazy-cache, we've had only one real issue related to webpack. And that was resolved months ago. Being a command line app, this would never be an issue here anyway)
Getters/setters
Anywhere an object is built up and paths are process, we have an opportunity to use getters/setters to evaluate and set the paths - similar to vinyl.
This way as the config/env is built up, whenever possible we would delay any path processing until it's needed.
Caching
This one probably wouldn't have much impact unless liftoff was used throughout the application lifecycle.
We would keep a cache of directories and files, and then whenever possible reuse the cached information instead of hitting the file system again.

Huge :+1: to all of this @jonschlinkert. I look forward to discussing these updates in the future!

I think this is a good idea.  However, it would need to be a breaking release and we need to heavily test it against gulp use cases.  As we found out with a different module of @jonschlinkert's (I think it was some globbing module), people are bundling gulp up with webpack which didn't take kindly to the lazy caching.

I agree, it would be a breaking release.

people are bundling gulp up with webpack which didn't take kindly to the lazy caching.

Lol yeah, that's the one issue I mentioned. lazy-cache was used in micromatch. Right after micromatch was merged into glob-stream an issue was created on glob-stream because of a bug in webpack (related to getters) - which surfaced because of lazy-cache's use of getters. "perception is reality", so it looked like a micromatch and/or lazy-cache bug (and it was a regression in glob-stream either way), so we removed lazy-cache just to get rid of the regression and perception. Within 24-48 hrs we also found a couple of different solutions to the webpack bug to prevent future issues (webpack still has the bug, but lazy-cache is no longer effected by it).
anyway I don't want to make lazy-cache a center point of this. I can just break this into in a few different prs so we can exclude the lazy-caching if you want. That part will take less than 5 minutes to add or remove, so we shouldn't lose sleep over it. I can just do it and we can compare before/after and discuss - or just not do it.


Text To Speech Doesn't Work

Describe the bug
When sending a text to speech to an alexa device it responds with "Sorry text to speech can only be called with the notify.alexa_media service."
To Reproduce
Try to send text to speech to an alexa device
Expected behavior
Text to speech plays on the alexa device

Use the Notify service.


Failed install: egg_info failed

Hello all,
I tried to install TileMapBase to my machine (both via pip and directly via GitHub), but I got these messages:

manos@xxx:~$ pip install tilemapbase
Collecting tilemapbase
Could not find a version that satisfies the requirement tilemapbase (from versions: )
No matching distribution found for tilemapbase
You are using pip version 10.0.1, however version 18.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
manos@xxx:~$
manos@xxx:~$
manos@xxx:~$
manos@xxx:~$ pip install https://github.com/MatthewDaws/TileMapBase/zipball/master
Collecting https://github.com/MatthewDaws/TileMapBase/zipball/master
Downloading https://github.com/MatthewDaws/TileMapBase/zipball/master
- 13.1MB 56.1MB/s
Complete output from command python setup.py egg_info:
NOT REFRESHING README.rst
Traceback (most recent call last):
File "", line 1, in
File "/tmp/pip-req-build-AgObC0/setup.py", line 22, in
with open('README.rst', encoding='utf-8') as f:
TypeError: 'encoding' is an invalid keyword argument for this function

----------------------------------------

Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-req-build-AgObC0/
You are using pip version 10.0.1, however version 18.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

What version of Python are you on?  The exception is being thrown from this line of setup.py:

with open('README.rst', encoding='utf-8') as f:

with a complaint that the interpreter doesn't understand the keyword encoding.  It definitely is a keyword in version 3.5 onwards!
What does the following give you:

python
import sys
sys.version

I see 3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:32:41) [MSC v.1900 64 bit (AMD64)]

What version of Python are you on? The exception is being thrown from this line of setup.py:

I use Python 2.7.15 Anaconda Custom
Many thanks for the instant reply!

Yes, Python 3 only, I'm afraid.


Codecov

Codecov Report

:exclamation: No coverage uploaded for pull request base (docs@ea02cb0). Click here to learn what that means.
Patch has no changes to coverable lines.

Additional details and impacted files
@@           Coverage Diff           @@
##             docs       #1   +/-   ##
=======================================
  Coverage        ?   55.36%
=======================================
  Files           ?        7
  Lines           ?      233
  Branches        ?       38
=======================================
  Hits            ?      129
  Misses          ?       89
  Partials        ?       15

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

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


Missing lodash dependency in package.json.

This project should specify it's lodash dependency in package.json.  The project I am using this on is using an older version of lodash, so the get() function call was failing (project is using lodash 2.4.2).  In order to get around this, had to shrinkwrap the project and override the dependencies for wdio-junit-reporter to add in lodash ~ 4.0 as a requirement.  This got around the issue, but it would be simpler if wdio-junit-reporter had the lodash dependency specified :).

Fix release in 0.4.3


using external buffer possible?

Currently I am copying my own rgba into the buffer of the softbuffer-surface.
I was wondering if that could be faster. And if it would be possible that the softbuffer uses this external buffer as source.
I saw that in Windows the drawing is done with BitBlt (which I believe is hardware-accelerated) and also was wondering if StretchDIBits would be an option. The last one does not need a source-handle, but don't know if StretchDIBits is as optimized.

Could your program be refactored to write into the softbuffer::Buffer instead of a separate buffer?
At least on some backends, that should perform better than any possible implementation that presents from just a &[u8] or &[u32]. Not sure about the performance of StretchDIBits, BitBlt, and such. (Other than that SDL uses BitBlt with a comment that when implemented it ended up being faster than trying to use DirectX.)

Yes BitBlt is fast.
I was thinking about your suggestion as well.
I could probably rewrite my home-made Bitmap (with all kinds of draw functions) to write to a 'backend' instead of its own Vec<Rgba. Lot of work but doable.
It saves a copy of some megabytes each frame....

Many drawing interfaces have a way to render to a mutable byte slice. For instance in my own code I use tiny-skia::PixmapMut around the softbuffer buffer in order to render in software to the  window.

Yes I think for certain backends it will not be possible or handy. No clue about other systems.
On windows we have a u32 array which happily has exactly the same layout as my inner bitmap on which i perform all my (cpu) drawing logic buffer scaling and rendering.

Maybe some platform-specific extensions would be more appropriate then.

If you want to write something specifically for Windows and have some very specific requirements, you can also always just do that directly with windows-rs instead of using Softbuffer.
I guess it's an open design question in softbuffer to decide when to offer platform extensions vs suggest using platform APIs directly.

I guess it's an open design question in softbuffer to decide when to offer platform extensions vs suggest using platform APIs directly.

I would say this is definitely a case where platform extensions should not be used. The changes required for some platforms to use direct buffers would effectively require re-architecting the entire crate.

A little update on this: I managed to refactor my drawing. Enabling a 'borrowed bitmap', borrowing the softbuffer pixels.
The result are quite ok! On a WIndows PC fullscreen (3840 x 2160) I get around 500 frames per second (including all game logic).
I scale my inner game bitmap (320x200) up to the softbuffer pixels (3200x2000) and then call the 'present' function. Great!


06 Test strategy

Sutff done:

[x] Organize test folders
[x] Test logic
[x] Test repositories

PR merged!
Things to debate in person:

Semantics for methods modeling mock responses and not only call assertions:

repositoryShouldSave(video) OK
repositoryShouldSearchAll(videos) -> repositoryShouldFind(videos)?

should be vs shouldBe


Add releases to Github

It would be nice if releases were tagged on github instead of having to go download from sourceforge.

Thanks for the contribution!
rationale
It likely is a hassle to go to a separate site (or perhaps two if you went to our website too), but one of the reasons we haven't put a download here is because SourceForge does a very good job tracking them.
question
Currently the repositories on both sites are linked [1], but I'm unsure:

if SourceForge counts downloads from GitHub, or
how to manage and count GitHub downloads separately

resources
[1] SourceForge Screenshot with 'GitHub' tab.

[2] git-scm basic tagging guide

I could embed the download link in the README.md description.
Would that help?

I had recently finished, in the Development branch, the automated build script and automated uploading of the zip file from travis-ci.org to GitHub when a commit is tagged.  Sourceforge is also configured to automatically mirror releases from GitHub  whenever a release is posted.  We are able to track how many times a specific file is downloaded from GitHub using the GitHub API ([JBioFramework Releases] (https://api.github.com/repos/RITJBF/JBioFramework/releases)).


Generating migrations based on schema diff

I took a quick look to docs but I could not find how to do schema diff. If I want to integrate this to already existing dbs do I need to write everything again or am I missing something?

Please open dedicated issues for each separate issue you have, so I can better prioritize them and they don't get lost.

You should adjust the title to e.g. Generating initial TypeScript migration file based on existing schema.
However, I think this will be a really huge task if not even impossible (because of hundreds of edge-cases)
But feel free to try a PR 🤷


what does the items resource look like in a register with multiple hashing algorithms available?

Only one hashing algorithm should be allowed in a register, similar to what git, ipfs or rfc6962. If a register needs to migrate from one hashing algorithm to another it should be studied in the future.

For future reference: https://multiformats.io/multihash/


enhancement Retry when loading stats

Proposed changes
Retry at most to load stats when nereids enabled
Further comments
If this is a relatively large or complex change, kick off the discussion at<EMAIL_ADDRESS>by explaining why you chose the solution you did and what alternatives you considered, etc...

run buildall

(From new machine)TeamCity pipeline, clickbench performance test result:
the sum of best hot time: 52 seconds
stream load tsv:          507 seconds loaded<PHONE_NUMBER>9 Bytes, about 140 MB/s
stream load json:         32 seconds loaded<PHONE_NUMBER> Bytes, about 70 MB/s
stream load orc:          67 seconds loaded<PHONE_NUMBER> Bytes, about 15 MB/s
stream load parquet:          31 seconds loaded 861443392 Bytes, about 26 MB/s
insert into select:          28.4 seconds inserted 10000000 Rows, about 352K ops/s
storage size:<PHONE_NUMBER>5 Bytes

run buildall

run buildall

(From new machine)TeamCity pipeline, clickbench performance test result:
the sum of best hot time: 50.2 seconds
stream load tsv:          507 seconds loaded<PHONE_NUMBER>9 Bytes, about 140 MB/s
stream load json:         19 seconds loaded<PHONE_NUMBER> Bytes, about 118 MB/s
stream load orc:          65 seconds loaded<PHONE_NUMBER> Bytes, about 16 MB/s
stream load parquet:          39 seconds loaded 861443392 Bytes, about 21 MB/s
insert into select:          30.1 seconds inserted 10000000 Rows, about 332K ops/s
storage size:<PHONE_NUMBER>1 Bytes

(From new machine)TeamCity pipeline, clickbench performance test result:
the sum of best hot time: 53.61 seconds
stream load tsv:          540 seconds loaded<PHONE_NUMBER>9 Bytes, about 132 MB/s
stream load json:         19 seconds loaded<PHONE_NUMBER> Bytes, about 118 MB/s
stream load orc:          64 seconds loaded<PHONE_NUMBER> Bytes, about 16 MB/s
stream load parquet:          31 seconds loaded 861443392 Bytes, about 26 MB/s
insert into select:          29.8 seconds inserted 10000000 Rows, about 335K ops/s
storage size:<PHONE_NUMBER>1 Bytes

run buildall

(From new machine)TeamCity pipeline, clickbench performance test result:
the sum of best hot time: 53.87 seconds
stream load tsv:          506 seconds loaded<PHONE_NUMBER>9 Bytes, about 140 MB/s
stream load json:         19 seconds loaded<PHONE_NUMBER> Bytes, about 118 MB/s
stream load orc:          64 seconds loaded<PHONE_NUMBER> Bytes, about 16 MB/s
stream load parquet:          31 seconds loaded 861443392 Bytes, about 26 MB/s
insert into select:          28.7 seconds inserted 10000000 Rows, about 348K ops/s
storage size:<PHONE_NUMBER>3 Bytes

run buildall

(From new machine)TeamCity pipeline, clickbench performance test result:
the sum of best hot time: 45.21 seconds
stream load tsv:          511 seconds loaded<PHONE_NUMBER>9 Bytes, about 139 MB/s
stream load json:         20 seconds loaded<PHONE_NUMBER> Bytes, about 112 MB/s
stream load orc:          65 seconds loaded<PHONE_NUMBER> Bytes, about 16 MB/s
stream load parquet:          31 seconds loaded 861443392 Bytes, about 26 MB/s
insert into select:          29.1 seconds inserted 10000000 Rows, about 343K ops/s
storage size:<PHONE_NUMBER>2 Bytes

run buildall

(From new machine)TeamCity pipeline, clickbench performance test result:
the sum of best hot time: 45.6 seconds
stream load tsv:          504 seconds loaded<PHONE_NUMBER>9 Bytes, about 141 MB/s
stream load json:         20 seconds loaded<PHONE_NUMBER> Bytes, about 112 MB/s
stream load orc:          64 seconds loaded<PHONE_NUMBER> Bytes, about 16 MB/s
stream load parquet:          31 seconds loaded 861443392 Bytes, about 26 MB/s
insert into select:          29.3 seconds inserted 10000000 Rows, about 341K ops/s
storage size:<PHONE_NUMBER>0 Bytes

run buildall

(From new machine)TeamCity pipeline, clickbench performance test result:
the sum of best hot time: 47.14 seconds
stream load tsv:          505 seconds loaded<PHONE_NUMBER>9 Bytes, about 141 MB/s
stream load json:         20 seconds loaded<PHONE_NUMBER> Bytes, about 112 MB/s
stream load orc:          64 seconds loaded<PHONE_NUMBER> Bytes, about 16 MB/s
stream load parquet:          30 seconds loaded 861443392 Bytes, about 27 MB/s
insert into select:          29.4 seconds inserted 10000000 Rows, about 340K ops/s
storage size:<PHONE_NUMBER>4 Bytes


fix(ui): change git initialization commit message placeholder text

What kind of change does this PR introduce? (check at least one)

[ ] Bugfix
[ ] Feature
[ ] Code style update
[ ] Refactor
[ ] Docs
[ ] Underlying tools
[X] Other, please describe:

This will change the git initialization commit message placeholder text on the project creation form when using vue ui. See https://github.com/vuejs/vue-cli/issues/5280 and https://github.com/vuejs/vue-cli/issues/5280#issuecomment-605369470.

Does this PR introduce a breaking change? (check one)

[ ] Yes
[X] No

@sodatea what do you think?

Thanks @sodatea @kerolloz! 🍕


New API: getAdSettings()

The advertising ID is a unique but user-resettable string identifier that lets ad networks and other apps anonymously identify a user.
See:
API from Google for Android:
http://developer.android.com/google/play-services/id.html
API from Apple for iOS:
https://developer.apple.com/library/ios/documentation/AdSupport/Reference/ASIdentifierManager_Ref/#//apple_ref/occ/clm/ASIdentifierManager/sharedManager

Feature implemented, call getAdSettings() to get advertising Id.
AdMob.getAdSettings(function(inf){
  // inf.adId;  // a UUID string
  // inf.adTrackingEnabled; // boolean
});

Thank you very much for this feature.
It works on Android and iOS.
It looks like there is a semantic/logic issue in Android. the function returns the not() of the value.
Steps to reproduce (on a google Nexus X5 marshmallow):
Settings->Google->Ads-> set OptOut button to 'off' -> got to the cordova app and get inf.adTrackingEnabled: false.
I am currently using a !(not) on the result and it totally works.
Thanks again.

The value returned is result of this API:
public boolean isLimitAdTrackingEnabled(), Retrieves whether the user has limit ad tracking enabled or not.
How to understand this?

The way i understand it:
if isLimitAdTrackingEnabled() is false then inf.adTrackingEnabled should be true.
as the user did not ask to limit Ad Tracking and therefore atTracking Enabled should be true.
Makes sense or am i wrong?
Tom

Yes, it does make sense. Will fix it soon.

It's fixed, please update the dependent plugin cordova-plugin-extension.

please examples codes for interstitial ads "Events",
Ex. closing the app, Back to home,
thanks,


luci-mod-network: LAN interface setting

With latest commit 9ff45c938faf148e99a5c683fe89615a46313769
After at least changing the settings of LAN interface once, LuCI always does this uci del network.lan.type to /etc/config/network if you click save on the LAN interface setting page.

Please provide your complete /etc/config/network and steps to reproduce it. I am unable to trigger that issue in an x86/64 Qemu image.

My apology.
I did more testing and it's because of IGMP snooping
R7800 swconfig kernel 5.4 master branch
Fresh install and before enabling IGMP snooping
root@OpenWrt:~# cat /etc/config/network

config interface 'loopback'
        option ifname 'lo'
        option proto 'static'
        option ipaddr '<IP_ADDRESS>'
        option netmask '<IP_ADDRESS>'

config globals 'globals'
        option ula_prefix 'fdae:1a50:bdda::/48'

config interface 'lan'
        option type 'bridge'
        option ifname 'eth1.1'
        option proto 'static'
        option ipaddr '<IP_ADDRESS>'
        option netmask '<IP_ADDRESS>'
        option ip6assign '60'

config interface 'wan'
        option ifname 'eth0.2'
        option proto 'dhcp'

config interface 'wan6'
        option ifname 'eth0.2'
        option proto 'dhcpv6'

config switch
        option name 'switch0'
        option reset '1'
        option enable_vlan '1'

config switch_vlan
        option device 'switch0'
        option vlan '1'
        option ports '1 2 3 4 6t'

config switch_vlan
        option device 'switch0'
        option vlan '2'
        option ports '5 0t'

After enabling IGMP snooping
root@OpenWrt:~# cat /etc/config/network

config interface 'loopback'
        option ifname 'lo'
        option proto 'static'
        option ipaddr '<IP_ADDRESS>'
        option netmask '<IP_ADDRESS>'

config globals 'globals'
        option ula_prefix 'fdae:1a50:bdda::/48'

config interface 'lan'
        option type 'bridge'
        option ifname 'eth1.1'
        option proto 'static'
        option ipaddr '<IP_ADDRESS>'
        option netmask '<IP_ADDRESS>'
        option ip6assign '60'

config interface 'wan'
        option ifname 'eth0.2'
        option proto 'dhcp'

config interface 'wan6'
        option ifname 'eth0.2'
        option proto 'dhcpv6'

config switch
        option name 'switch0'
        option reset '1'
        option enable_vlan '1'

config switch_vlan
        option device 'switch0'
        option vlan '1'
        option ports '1 2 3 4 6t'

config switch_vlan
        option device 'switch0'
        option vlan '2'
        option ports '5 0t'

config device
        option name 'br-lan'
        option igmp_snooping '1'
        option multicast_querier '0'

After IGMP snooping enabled, changing LAN interface settings will have this behavior

I won't be able to reach the router if I click Save&Apply

Thanks @castiel652 - that was helpful.

I have the same issue. After upgrading luci-mod-network to git-21.140.43486-398982f, it says:

The existing network configuration needs to be changed for LuCi to function properly. Upon pressing “Continue”, bridges configuration will be moved from “interface” sections to “device” sections the network will be restarted to apply the updated configuration.

After the change my bridged interfaces are no accessible. I can restore fuctionality if I add option type 'bridge' back to config interface 'lan' section, and add my bridged ports lan1, lan2, lan3, and lan4 with brctl addif br-lan lan1 command (and same for the other ports). But this is not compatible with LuCi network configuration page.


[skip-ci] dev whats-new

:tada: Release is done. I'm almost completely through the HOW_TO_RELEASE.md. The only thing left are announcements. I did not announce so far and would appreciate any help here.

@pydata/xarray Need to drop off now. Please merge at your earliest convenience to unlock PR merges to main. Thanks!

Thanks for your work with the release @kmuehlbauer!

The only thing left are announcements. I did not announce so far and would appreciate any help here.

We don't really do this anymore except for really major ones.


Underline your links and fix that blurry bold highlight

Title says it all. Add underline to links and replace the dodgy blurry bolding when you highlight the links. Maybe just change the colour or something.

Fixed


Revise device yml files

updates device yml to (a) make them reflect the differences between devices, and (b) replace the use of **kwargs to provide the device arguments with the pydantic models created from the yml.
Will delete the mocks and the code they use in another PR

I think I've addressed all the review comments, except for the refactoring of the DeviceArgs classes into their corresponding device classes

I still don't understand. EyelinkDeviceArgs() is a device class-specific
argument parser for the Eyelink device. Other parsers like it should be
able to be 'dropped in' since the module is fully specified in the yaml.
On Thu, Mar 21, 2024 at 1:03 PM Brandon Oubre @.***>
wrote:

@.**** commented on this pull request.
In examples/configs/devices/Eyelink_1.yml
https://github.com/neurobooth/neurobooth-os/pull/388#discussion_r1534300490
:

@@ -8,4 +8,4 @@ device_model: 'EYELINK CL 6.50  '
device_firmware: None
sensor_ids:

Eyelink_sens_1
-arg_parser: iout.stim_param_reader.py::DeviceArgs()
+arg_parser: iout.stim_param_reader.py::EyelinkDeviceArgs()

My point is that part of the design goal is to be able to easily drop in a
new device or new task without having to edit the existing code base. I.e.,
we can break up the device code into multiple files, but it is ideally a
"bundle" where you just drop the .py files and yaml files into the correct
locations and it just works.
So parsing being it's own module makes sense, but anything beyond
"default" parameters should specified by the device. (We could support a
few useful variants of "default".) Maybe devices can have a submodule that
handle specialized parsing for that device if necessary.
—
Reply to this email directly, view it on GitHub
https://github.com/neurobooth/neurobooth-os/pull/388#discussion_r1534300490,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AA2FPAUSXVUQX756ECBZFITYZMHF7AVCNFSM6AAAAABEYC7QPCVHI2DSMVQWIX3LMV43YUDVNRWFEZLROVSXG5CSMV3GSZLXHMYTSNJSHA2DIOBWGA
.
You are receiving this because you authored the thread.Message ID:
@.***>


Updated validations.py python script.

Closes: #1
Fixed the behavior of validate_user function in validations.py.
Fixes #<issue_number_goes_here>

It's a good idea to open an issue first for discussion.

[ ] Tests pass
[ ] Appropriate changes to README are included in PR

Hello Google bot,
@googlebot I signed it!
Regards,
Wee Ho

From: google-cla[bot]<EMAIL_ADDRESS>Sent: Saturday, January 30, 2021 3:50 PM
To: google/it-cert-automation-practice<EMAIL_ADDRESS>Cc: kingkongwh<EMAIL_ADDRESS>Author<EMAIL_ADDRESS>Subject: Re: [google/it-cert-automation-practice] Updated validations.py python script. (#11570)
Thanks for your pull request. It looks like this may be your first contribution to a Google open source project (if not, look below for help). Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).
📝 Please visit https://cla.developers.google.com/ to sign.
Once you've signed (or fixed any issues), please reply here with @googlebot I signed it! and we'll verify it.

What to do if you already signed the CLA
Individual signers

It's possible we don't have your GitHub username or you're using a different email address on your commit. Check your existing CLA datahttps://cla.developers.google.com/clas and verify that your email is set on your git commitshttps://help.github.com/articles/setting-your-email-in-git/.

Corporate signers

Your company has a Point of Contact who decides which employees are authorized to participate. Ask your POC to be added to the group of authorized contributors. If you don't know who your Point of Contact is, direct the Google project maintainer to go/cla#troubleshoothttp://go/cla#troubleshoot (Public versionhttps://opensource.google/docs/cla/#troubleshoot).
The email used to register you as an authorized contributor must be the email used for the Git commit. Check your existing CLA datahttps://cla.developers.google.com/clas and verify that your email is set on your git commitshttps://help.github.com/articles/setting-your-email-in-git/.
The email used to register you as an authorized contributor must also be attached to your GitHub accounthttps://github.com/settings/emails.

ℹ Googlers: Go herehttps://goto.google.com/prinfo/https%3A%2F%2Fgithub.com%2Fgoogle%2Fit-cert-automation-practice%2Fpull%2F11570 for more info.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHubhttps://github.com/google/it-cert-automation-practice/pull/11570#issuecomment-770173634, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AH46NVFX2B5UZADEO5ZPLY3S4O23HANCNFSM4W2CFJ2Q.

Hello Google bot,
@googlebot I signed it!
Regards,
Wee Ho

From: google-cla[bot]<EMAIL_ADDRESS>Sent: Saturday, January 30, 2021 3:50 PM
To: google/it-cert-automation-practice<EMAIL_ADDRESS>Cc: kingkongwh<EMAIL_ADDRESS>Author<EMAIL_ADDRESS>Subject: Re: [google/it-cert-automation-practice] Updated validations.py python script. (#11570)
Thanks for your pull request. It looks like this may be your first contribution to a Google open source project (if not, look below for help). Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).
📝 Please visit https://cla.developers.google.com/ to sign.
Once you've signed (or fixed any issues), please reply here with @googlebot I signed it! and we'll verify it.

What to do if you already signed the CLA
Individual signers

It's possible we don't have your GitHub username or you're using a different email address on your commit. Check your existing CLA datahttps://cla.developers.google.com/clas and verify that your email is set on your git commitshttps://help.github.com/articles/setting-your-email-in-git/.

Corporate signers

Your company has a Point of Contact who decides which employees are authorized to participate. Ask your POC to be added to the group of authorized contributors. If you don't know who your Point of Contact is, direct the Google project maintainer to go/cla#troubleshoothttp://go/cla#troubleshoot (Public versionhttps://opensource.google/docs/cla/#troubleshoot).
The email used to register you as an authorized contributor must be the email used for the Git commit. Check your existing CLA datahttps://cla.developers.google.com/clas and verify that your email is set on your git commitshttps://help.github.com/articles/setting-your-email-in-git/.
The email used to register you as an authorized contributor must also be attached to your GitHub accounthttps://github.com/settings/emails.

ℹ Googlers: Go herehttps://goto.google.com/prinfo/https%3A%2F%2Fgithub.com%2Fgoogle%2Fit-cert-automation-practice%2Fpull%2F11570 for more info.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHubhttps://github.com/google/it-cert-automation-practice/pull/11570#issuecomment-770173634, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AH46NVFX2B5UZADEO5ZPLY3S4O23HANCNFSM4W2CFJ2Q.


Could we get a new release with the lodash change please?

Hi, I was the dev that updated the lodash syntax, is it possible to get a release for this please?
Thank you EVER so much for accepting the PR.

Released as v2.0.4

Many thanks


Circular dependency when loading GitHub app private keys from Google Secret Manager

TL;DR
We want to be able to keep all our secrets in Google Secret Manager, not GitHub Workflow secrets. This includes private keys to GitHub apps that we want to use to check out and push code. We have Workload Identity Federation set up properly.
I'd expect to be able to do these steps:

google-github-actions/auth to authenticate with WIF
google-github-actions/get-secretmanager-secrets to fetch the GH App private key
actions/create-github-app-token to turn this into a token
actions/checkout to clone the repository using the token

However, because google-github-actions/auth wants to come after actions/checkout, this doesn't work.
Expected behavior
For there to be a reasonable way to load a GitHub App private key from GSM and use it to clone the repository.
Observed behavior
The series of steps above (as indicated in the google-github-actions/auth docs) leads to the inability to use GCP APIs later.
Action YAML
name: Update Config
on:
  workflow_dispatch:

jobs:
  update-everything:
    runs-on: ubuntu-latest
    permissions:
      id-token: write

    steps:
      - uses: 'google-github-actions/auth@v2'
        with:
          workload_identity_provider: 'projects/PROJECTNUM/locations/global/workloadIdentityPools/github-d8bck/providers/github-d8bck'
          service_account<EMAIL_ADDRESS>          project_id: PROJECTNAME

      - id: gsm-secrets
        uses: 'google-github-actions/get-secretmanager-secrets@v2'
        with:
          secrets: |-
            automation-app-private-key:PROJECT/SECRET

      - uses: actions/create-github-app-token@v1
        id: automation-app-token
        with:
          app-id: APPNUM
          private-key: ${{ steps.gsm-secrets.outputs.automation-app-private-key }}
          owner: ${{ github.repository_owner }}

      - uses: actions/checkout@v4
        with:
          token: ${{ steps.automation-app-token.outputs.token }}

      - uses: A-CUSTOM-ACTION-THAT-USES-GCP-APIS

Log output
Error: The file at /home/runner/work/apollo-argo/apollo-argo/gha-creds-ca140d7f4adcce01.json does not exist, or it is not a file. ENOENT: no such file or directory, lstat '/home/runner/work/apollo-argo/apollo-argo/gha-creds-ca140d7f4adcce01.json'

Additional information
If I understand correctly, the only reason checkout needs to come first is that otherwise it will overwrite the credentials file. So we are trying to work around this by adding a step that reads the credentials file before we run checkout and another one that writes it back again afterwards. This is aided by the fact that this action has the credentials filename as an output, though it would be nice if the contents were also an output so we wouldn't have to read it back (if that's OK from a secret perspective)?  At the very least there could be some documentation about approaches to take if you have a real need to run this before checkout? (Also, you need to do something silly like write a dummy file to the workspace if you want to avoid the empty-workspace warning.)

By the way I do recognize that there are many issues about people wanting to put the credentials somewhere other than the workspace, and I respect that you're not going to change that. I would just like there to be some non-hacky way to do what seems to be a reasonable thing to do (check out the repository using a token derived from a GSM secret).  Even being able to do something like run auth again in a mode that just regenerates the credentials file without redoing the work would be nice... though actually I can't figure out a nice way to implement that.
Is the actual best answer here to just run auth a second time after checkout?

Checkout twice, using a different path for the second checkout:
- uses: 'actions/checkout@v4'
- uses: 'google-github-actions/auth@v2'
- uses: 'google-github-actions/get-secretmanager-secrets@v2'
- uses: 'actions/checkout@v4'
  with:
    path: 'subdir'

You might also try setting clean: false on the second checkout and seeing if it stops the clobbering.
Finally, the empty workspace warning is just a warning. It can be ignored if you know you don't need to persist credentials.

Thanks for the advice. This does seem like it would be a fair amount slower than my hacky workaround, though I'll try to profile before making assumptions. Am I understanding correctly that the main thing the action uses the checkout for is a location to store the credentials file, or are there other problems I'd run into?
(And I understand that it's just a warning, which is why I feel comfortable suppressing it — I don't want all my colleagues to have to worry that it's something they need to pay attention to!)


Plugin not showing error message when user tries to create a new blob container of existing name

Environment: Windows/IntelliJ14
Steps:
Sign in Subscription.
Click Azure.
Click storage.
Expand a Storage Account.
Right click on 'Blobs'.
Select 'Create Blob Container'.
Give existing blob container name.
Click 'OK'.
It is not showing any error message.
PFB the screen shot.

This issue is fixed and functionality is working as expected in the latest build.


The http_client_sync_ssl example doesn't seem to work with Python's basic HTTPS server

Beast version: 353
Compiler:  GCC 11.4
Steps to reproduce:

First generate key/cert files:
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365

Then make server.py:
from http.server import HTTPServer, BaseHTTPRequestHandler
import ssl

class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.end_headers()
        self.wfile.write(b'Hello')

httpd = HTTPServer(('<IP_ADDRESS>', 51733), SimpleHTTPRequestHandler)

httpd.socket = ssl.wrap_socket (httpd.socket,
        keyfile="key.pem",
        certfile='cert.pem', server_side=True)

httpd.serve_forever()

Run it with python3 server.py, and verify with a browser that opening https://localhost:51733 works and shows Hello.

Now take Beast's http_client_sync_ssl.cpp example, change ssl::verify_peer to ssl::verify_none, compile it, and run:
./a.out localhost 51733 /ding

The result I get is:
Error: stream truncated [asio.ssl.stream:1]

This error happens during the call to http::read. In the output of server.py, I do see that the request for /ding was received.
I don't know whether the bug is in Python's http.server module or in Boost.Beast, but I figure the intent is for the two to work together, so might be worth investigating.

This is a known issue with some of the web servers in the wild; they don't perform a proper SSL shutdown procedure and close the TCP socket unexpectedly. For example, if you try connecting to google.com, you would get that error, but not when connecting to github.com.
By the way, because this error happens exactly when you want to close the SSL stream, you can safely ignore this error (as all internet browsers do):
beast::error_code ec;
stream.shutdown(ec);
if (ec == net::error::eof || ec == net::ssl::error::stream_truncated)
    ec = {};

@ashtum we should document this, where the Table of Contents entry for the paragraph says "stream_truncated error" so people can find it easily

Thanks for the help!
I'm still struggling to figure out how to modify the example code to get it to print the "Hello" response from the server:
In the client I tried replacing:
http::read(stream, buffer, res);

with:
boost::beast::error_code myec;
http::read(stream, buffer, res, myec);
if(myec && myec != ssl::error::stream_truncated)
    throw beast::system_error{myec};

but this doesn't seem to do the trick. I still only get to see the HTTP/1.1 200 OK part, not the Hello
ee@vp:~/sand/beasttest % g++ main.cpp -lssl -lcrypto && ./a.out localhost 51733 /
HTTP/1.1 200 OK

Error: stream truncated
ee@vp:~/sand/beasttest % wget --no-check-certificate -q -O - https://localhost:51733
Hello

@EelisVP In client mode, http::read(stream, buffer, res, myec) should complete successfully. The net::ssl::error::stream_truncated error only occurs during the call to stream.shutdown(ec).
What type of response body are you using? Could you please provide a minimal reproducible example of your issue?
I recommend first trying the http_client_sync_ssl.cpp example without any modifications to see what it prints.

@ashtum As described in the opening post, the issue can be reproduced by taking http_client_sync_ssl.cpp and only changing ssl::verify_peer to ssl::verify_none (because the server's certificate was self-signed). With only this modification, I get this result:
ee@vp:~/sand/beasttest % g++ -I /home/eelis/apps/sources/boost_1_85_0 main.cpp -lssl -lcrypto && ./a.out localhost 51733 /
Error: stream truncated [asio.ssl.stream:1]

It seems you successfully get a response from the server, but it is just empty. Note that the target in the wget --no-check-certificate -q -O - https://localhost:51733 command is empty, while in ./a.out localhost 51733 /, the target is "/".
What happens if you try ./a.out localhost 51733 ""?

Note that the target in the wget --no-check-certificate -q -O - https://localhost:51733 command is empty, while in ./a.out localhost 51733 /, the target is "/".

Nah, wget asks for / automatically if you don't provide a target. So wgetting https://localhost:51733 is the same as wgetting https://localhost:51733.

What happens if you try ./a.out localhost 51733 ""?

Same result (because the server doesn't look at the target at all).

Does http::read(stream, buffer, res, myec) complete without any errors, or are you getting net::ssl::error::stream_truncated on that line?

If I use:
boost::beast::error_code myec;
http::read(stream, buffer, res, myec);
if(myec) std::cout << "oh there was an error: " << myec << std::endl;

then I do see oh there was an error: asio.ssl.stream:1 at runtime, so it's really the read that's reporting the error.

Could you try setting req.keep_alive(true);?

Sure. No effect.

It seems we need to manually set the end of stream when parser completes with ssl::error::stream_truncated error, this should work:
http::response_parser<http::dynamic_body> p;
beast::error_code ec;
http::read(stream, buffer, p, ec);
p.put_eof(ec);

std::cout << p.get() << std::endl;

OK, the reason the Beast parser needs a manual EOF is that your Python server doesn't set the Content-Length header nor does it perform a proper SSL shutdown procedure to indicate the EOF.
If you change the Python code for the server to the following, it should work fine:
class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        message = b'hello'
        self.send_response(200)
        self.send_header("Content-type", "text/plain")
        self.send_header('Content-Length', str(len(message)))
        self.end_headers()
        self.wfile.write(message)

Right, that makes sense. But suppose I don't control the server, and want my client to be able to retrieve the "hello" response in the same way that Firefox and wget are able to. Is that possible with Beast, or would it simply not be possible to implement something like Firefox or wget with Beast?

@ashtum Ah fantastic, with that change in the client, I do indeed get the hello! Thanks!

Yes, the only way to get it to work in Beast is to manually set the EOF on the parser.
The reason this is not the default behavior is that it poses a security risk. Without a Content-Length header, the body length is determined by EOF, which allows an attacker to close the connection and truncate the body contents. Therefore, an HTTPS server should either perform a proper TLS shutdown or avoid relying on EOF by setting the Content-Length header.
If you try using curl on your server, you will see it also completes with an error.


extra logging

Description
Log some extra data to sentry when files fail to load (the corruption issue)
Link to Asana task (or indicate if this is a release)
na
Tests to be performed - pre-merge or post-merge
Testing performed:
Tried to access a drawing locally, and confirmed it got logged to sentry: https://sparkwise.sentry.io/issues/5014423071/?project=6567524&query=is%3Aunresolved&referrer=issue-stream&statsPeriod=30d&stream_index=0&utc=true
Type of change

Code refactor

Testing Checklist

[x] All tests under "Tests" performed prior to merging.
[x] Security issues identified during the review process have been remediated.

@rwalek668 I see that this PR is set to merge to main branch. Is that by design? I also see that it doesn't use our PR template. For changes like this one, I'd prefer that we continue using the standard template but just remove sections that aren't relevant (e.g. Asana task URL, etc.)

Done. Yes, its by design as this is the excalidraw project.