news item, community curation paper

anyone want to have a stab?
Suggest
@Antonialock
@mah11

A paper describing the PomBase community curation effort has been published in Database (https://academic.oup.com/database/article/doi/10.1093/database/baaa028/5827230?searchresult=1). We share our strategy, progress, and the insights we have gained from the project.

How about
Our paper describing the PomBase community curation project is now published in Database (https://academic.oup.com/database/article/doi/10.1093/database/baaa028/5827230?searchresult=1). We share our progress,  and identify the benefits of community curation. An unexpected gain is the improvement in annotation quality of both professional curators and community curators from the curation-and-review cycle.
I'm thinking that this could provide a hook for people who have not curated yet.  ...and it   might remove some of the barrier if people are worried about doing it wrong,  as it makes it clear there is some dialogue and a checking process?

Sounds good!

Nice revision @mah11 !

xD yes thanks


Fix ds3_connection_pool queue behavior

Separate the ds3_connection* list from the queue of available connections.
Also add a timestamp with millisecond precision to the test_log() method.

Thumbs up.


Allow baseUrl and defaultHeaders override

Is there a way to do this in Cohere?
new Anthropic({
  apiKey,
  baseUrl, // string
  defaultHeaders, // Record<string, unknown>
})

My use case is that we're re-routing requests to a proxy first (observability and security purposes) before sending to Cohere API

@huytool157  you should be able to pass the baseUrl in the environment key
new Cohere({
  environment: "YOUR_BASE_URL"
});

@dsinghvi thanks, any way to do headers?

Hey @huytool157 sorry for delay on this. One way you could do this is to pass a custom fetcher to the constructor.
import { CohereClient } from "cohere-ai";
import { Fetcher, fetcher } from "cohere-ai/core";

const cohere = new CohereClient({
    token: '...',
    fetcher: (args: Fetcher.Args) => fetcher({ ...args, headers: { ...args.headers, myHeader: "hello!" } })
});

@billytrend-cohere Is this fetcher option new? What's the minimum version that I need to upgrade to? Currently in 7.9.5.

yeah should be in 7.10.2 and up but would recommend latest version if possible! Should be a smooth update but let me know if you need assistance

@billytrend-cohere did you guys add some @aws-sdk deps recently? I'm getting some peer dependency issues trying to upgrade.
backend
└─┬ @aws-sdk/client-sso-oidc 3.609.0
  ├── ✕ unmet peer<EMAIL_ADDRESS>found 3.347.1
  └─┬ @aws-sdk/credential-provider-node 3.609.0
    └─┬ @aws-sdk/credential-provider-ini 3.609.0
      ├── ✕ unmet peer<EMAIL_ADDRESS>found 3.347.1
      └─┬ @aws-sdk/credential-provider-web-identity 3.609.0
        └── ✕ unmet peer<EMAIL_ADDRESS>found 3.347.1

we did, will look into this issue asap

Thanks, preferably we should not have to deal with this because we are using @aws-sdk/client-sts in different parts of the codebase and we only use the native cohere integrations without AWS Bedrock

We suspect it might be related to https://github.com/aws/aws-sdk-js-v3/issues/6258 but will keep you posted, meantime 7.10.2 shouldn't contain the problematic dependency!

I actually it starts in 7.10.2. These dependencies have @aws-sdk/client-sts under the hood. Kinda unfortunate that it's the same version as the fetcher option and now I'm stucked.
https://github.com/cohere-ai/cohere-typescript/pull/162/files#diff-7ae45ad102eab3b6d7e7896acd08c427a9b25b346470d7bc6507b6481575d519R22-R25

@billytrend-cohere following up on this!

I ended up upgrading @aws-sdk/client-sts to 3.616.0.  Not ideal since you shouldn't have to upgrade other packages to get cohere-ai working but we passed that hoop, going to close the issue.


Third PR : added description to Team.md

Looks good.

Thanks. Also, I've resolved the conflicts. I guess it can be merged now after 1 more approval.

@JilvaSheth Resolve the merge conflicts by clicking on 'Resolve Conflicts'? https://www.youtube.com/watch?v=U2bOwEY-vKo&t=145s

@JilvaSheth Resolve the merge conflicts by clicking on 'Resolve Conflicts'? https://www.youtube.com/watch?v=U2bOwEY-vKo&t=145s

Hi @JilvaSheth resolve your merge conflict by seeing the Wiki Page or watch a youtube video as mentioned by @Sheetal777

Hi @JilvaSheth resolve your merge conflict by seeing the Wiki Page or watch a youtube video as mentioned by @Sheetal777

Yes, sure I'll resolve it by today evening. Since I don't have my laptop with me right now.

I will not be able to complete the procedure of conflict resolution due to some reasons for now. So, I've closed it for now. Will repeat the whole process again and will open another PR. Thanks, everyone for the support :)


ImageUploaderInline upload fails with "Please correct the error below"

I followed your tutorial for using ImageUploaderInline in a ModelAdmin, adding inlines = [ProductImageAdmin].  The widget displays, and I can upload one or more images. But when I click Save, the form shows "Please correct the error below." There is no more information about an error.  There is nothing in the Django logs. The image I uploaded now shows up as a white box.
Can you tell me where or how I can debug this? Using Django==5.0.3

Well I narrowed it down to an issue with Safari.  Error does not occur using Chrome.  Safai=16.5.2.
In the form data upload, the image field does not have a filename:
------WebKitFormBoundary2ppXZmXtDv9RTVyU
Content-Disposition: form-data; name="images-0-image"; filename=""
Content-Type: application/octet-stream

Hello, thanks for reporting
Really, looks a problem with Safari...
I will to make some tests to check if is a failure of the side of this application and try to found a work-around. Maybe, this can be relative to the move the image or clone temporary file input to inlines at https://github.com/inventare/django-image-uploader-widget/blob/main/image_uploader_widget/static/admin/js/image-uploader-inline.js#L215

Hi @monospacesoftware, i released 0.4.2 at PyPI, can you upgrade to it and try if it fix your problem?
I made some tests using my iOS phone Safari and apparently it fixed the problem. Can you validate with your Safari?

Uploading does work in Safari on version 0.4.2, thank you. I did find some other bugs however, although they are not as critical. Can open another ticket if you prefer.

Drag and drop reordering does not work in Safari.There's no message or error in the console. The drag and drop thing just doesn't drop the image and change the order.
If you click Add Image, upload an Image, then click the Delete button on the image, then upload the same image again, nothing happens.  It seems to work ok if you upload a different image after the delete. There's no error in the console.

Thanks for the new reports. Don't need to open new issue for this. I will work on these small fixes on this week.

Drag and drop reordering does not work in Safari.There's no message or error in the console. The drag and drop thing just doesn't drop the image and change the order.

Fixed it on 0.4.4, like this (i finnaly installed a MacOS on a virtual machine):
https://github.com/inventare/django-image-uploader-widget/assets/20397491/e14808cc-669c-4a8a-a28b-dca05a01a718
@monospacesoftware  Can you validate if upgrading to 0.4.4 really solve those problems?

I think it's all working as expected now!  good job, thanks.


How to configure snapshots with curator

Hi,
trying to come up with the best solution to snapshot an indices subset.
Using ElasticSearch (6.2.2) from this repo on Google Kubernetes Engine.
Failed to find any useful examples on how to do this with ES on GKE.
Found PV snapshotting (k8s >v1.8), but I don't need all indices, so no need to snapshot entire volume.
Would use curator snapshot mechanism to store to Google Cloud bucket.
Any tips on how to go about this?
Thanks in advance!

This repo docs do mention how to schedule Curator jobs. You just need to learn Curator enough, in order to create a configuration that will deliver what you need.

The definition of the action_file.yaml is quite self-explaining for simple set-ups. For more advanced configuration options, please consult the Curator Documentation.

This repo docs do mention how to schedule Curator jobs. You just need to learn Curator enough, in order to create a configuration that will deliver what you need.

I already have existing snapshot & delete old indices configs, which I need to adapt.
Existing config uses environment variables passed from the shell.
Not sure how to implement those here, they were populated via script scheduled in a cronjob and then passed to the curator jobs.

Use https://github.com/pires/kubernetes-elasticsearch-cluster/blob/master/es-curator-config.yaml, maybe?

I should probably elaborate a bit.
This is the old bash script scheduled in cron:

#!/bin/bash
rm logs/backup_indices.log
export DAYS=40
export SNAPSHOT_NAME=snapshot-$(date -d -${DAYS}days +%Y-%m-%d)
echo "Creating snapshot for $(date -d -${DAYS}days +%Y-%m-%d)" >> logs/backup_indices.log
/usr/local/bin/curator --config /root/configs/backup_config.yml /root/actions/backup_action.yml
#curator --config configs/backup_config.yml --dry-run actions/backup_action.yml
mail -s "Move Elasticsearch Indices Report (New)"<EMAIL_ADDRESS>< logs/backup_indices.log

And the backup_actions.yml is using $DAYS & $SNAPSHOT_NAME set by the shell script:

actions:
1:
action: snapshot
options:
repository: s3_repository
name: ${SNAPSHOT_NAME:snapshot-%Y-%m-%d}
continue_if_exception: false
filters:
- filtertype: age
source: name
direction: older
timestring: '%Y-%m-%d'
unit: days
unit_count: ${DAYS}
2:
action: delete_indices
options:
continue_if_exception: false
filters:
- filtertype: age
source: name
direction: older
timestring: '%Y-%m-%d'
unit: days
unit_count: ${DAYS}

How would you go about using these shell env vars in docker/k8s?

Maybe I'm missing something but can't you simply set env vars in the podSpec such as https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/?

$SNAPSHOT_NAME is dynamically generated during each script execution, by using the linux "date" command "date -d -${DAYS}days +%Y-%m-%d)".
I don't think that this is a viable approach for setting a k8s container env var?

Additionaly, any tips on how to configure the elasticsearch keystore (which appears to be a requirement for configuring both GCS & AWS S3 access to store snapshots)?
https://www.elastic.co/guide/en/elasticsearch/plugins/current/repository-gcs-usage.html
https://www.elastic.co/guide/en/elasticsearch/plugins/current/repository-s3-client.html

@pires I will try to build my own image based on yours, the expanded image will create the "elasticsearch.keystore" keyfile, as described here:
https://www.elastic.co/guide/en/elasticsearch/reference/6.3/secure-settings.html
That way all my containers will already have the keystore configuration and gcs key used to authenticate to the gcs bucket used for snapshots.
I tried creating the file, from a shell in the client node.
looks like it's a binary file:
bash-4.4# cat /elasticsearch/config/elasticsearch.keystore
�����0��0��T*�H��I0�E0��12PBE*�H��
              *�H��

�r0p
     *�H��

�a_0]0)
�H��
0A1Time<PHONE_NUMBER>7850>0!0��ӫ�+:�_:��!�x-�x�5&�����m���������՟X�'���(���Mp�

Dockerfile:
FROM quay.io/pires/docker-elasticsearch-kubernetes:6.2.2_1

# inital setup
USER elasticsearch
COPY  gcs.client.default.credentials_file /tmp/

# fix elasticsearch-keystore failing with mktemp: Invalid argument
RUN export ES_TMPDIR=`mktemp -d -t elasticsearch.XXXXXXXX

# create keystore file and import the google cloud storage credentials key
RUN /elasticsearch/bin/elasticsearch-keystore create
RUN /elasticsearch/bin/elasticsearch-keystore add-file gcs.client.default.credentials_file

CMD

What does your image use for CMD?

I found your Dockerfile here, and modified mine accordingly:
https://github.com/pires/docker-elasticsearch/blob/6.2.2_1/Dockerfile
Dockerfile:
FROM quay.io/pires/docker-elasticsearch-kubernetes:6.2.2_1

# inital setup
USER elasticsearch
COPY  gcs.client.default.credentials_file /tmp/

ENV PATH /elasticsearch/bin:$PATH

WORKDIR /elasticsearch

# Copy configuration
COPY config /elasticsearch/config

# Copy run script
COPY run.sh /

# Set environment variables defaults
ENV ES_JAVA_OPTS "-Xms512m -Xmx512m"
ENV CLUSTER_NAME elasticsearch-default
ENV NODE_MASTER true
ENV NODE_DATA true
ENV NODE_INGEST true
ENV HTTP_ENABLE true
ENV NETWORK_HOST _site_
ENV HTTP_CORS_ENABLE true
ENV HTTP_CORS_ALLOW_ORIGIN *
ENV NUMBER_OF_MASTERS 1
ENV MAX_LOCAL_STORAGE_NODES 1
ENV SHARD_ALLOCATION_AWARENESS ""
ENV SHARD_ALLOCATION_AWARENESS_ATTR ""
ENV MEMORY_LOCK true
ENV REPO_LOCATIONS []

# Volume for Elasticsearch data
VOLUME ["/data"]

# fix elasticsearch-keystore failing with mktemp: Invalid argument & create+populate keystore
RUN export ES_TMPDIR=`mktemp -d -t elasticsearch.XXXXXXXX` && /elasticsearch/bin/elasticsearch-keystore create
RUN export ES_TMPDIR=`mktemp -d -t elasticsearch.XXXXXXXX` && /elasticsearch/bin/elasticsearch-keystore add-file gcs.client.default.credentials_file

CMD ["/run.sh"]

Build is failing with:
Sending build context to Docker daemon  15.87kB
Step 1/26 : FROM quay.io/pires/docker-elasticsearch-kubernetes:6.2.2_1
 ---> 6bc60f1c2953
Step 2/26 : USER elasticsearch
 ---> Using cache
 ---> d099f041a3be
Step 3/26 : COPY  gcs.client.default.credentials_file /tmp/
 ---> Using cache
 ---> edca7b0a21e0
Step 4/26 : ENV PATH /elasticsearch/bin:$PATH
 ---> Running in c88d0b4c1925
Removing intermediate container c88d0b4c1925
 ---> 654cf5eb84ce
Step 5/26 : WORKDIR /elasticsearch
Removing intermediate container e2b811733c47
 ---> 656a5a3786ee
Step 6/26 : COPY config /elasticsearch/config
 ---> d47fe83962d8
Step 7/26 : COPY run.sh /
 ---> 2888df120fd8
Step 8/26 : ENV ES_JAVA_OPTS "-Xms512m -Xmx512m"
 ---> Running in 6cb592601fe8
Removing intermediate container 6cb592601fe8
 ---> c6f39956481c
Step 9/26 : ENV CLUSTER_NAME elasticsearch-default
 ---> Running in 8a7610bf1d1e
Removing intermediate container 8a7610bf1d1e
 ---> d1dd59c6be54
Step 10/26 : ENV NODE_MASTER true
 ---> Running in bb500e435804
Removing intermediate container bb500e435804
 ---> 432e04ce7b2e
Step 11/26 : ENV NODE_DATA true
 ---> Running in a5c19bf07fec
Removing intermediate container a5c19bf07fec
 ---> 2a24f5f585e0
Step 12/26 : ENV NODE_INGEST true
 ---> Running in 7c001fcaa068
Removing intermediate container 7c001fcaa068
 ---> 9bafa994e712
Step 13/26 : ENV HTTP_ENABLE true
 ---> Running in 97d301ad25fd
Removing intermediate container 97d301ad25fd
 ---> 3094beebb028
Step 14/26 : ENV NETWORK_HOST _site_
 ---> Running in 81d5c147a527
Removing intermediate container 81d5c147a527
 ---> e7880443646f
Step 15/26 : ENV HTTP_CORS_ENABLE true
 ---> Running in b65be6498b03
Removing intermediate container b65be6498b03
 ---> 1e1930900b53
Step 16/26 : ENV HTTP_CORS_ALLOW_ORIGIN *
 ---> Running in 389b1c9758d9
Removing intermediate container 389b1c9758d9
 ---> 3be74de80145
Step 17/26 : ENV NUMBER_OF_MASTERS 1
 ---> Running in 8b5ef389ad7f
Removing intermediate container 8b5ef389ad7f
 ---> e04f5db12aa5
Step 18/26 : ENV MAX_LOCAL_STORAGE_NODES 1
 ---> Running in fc3cdf679c0d
Removing intermediate container fc3cdf679c0d
 ---> 40ac5fdb6119
Step 19/26 : ENV SHARD_ALLOCATION_AWARENESS ""
 ---> Running in d9b62faa9cda
Removing intermediate container d9b62faa9cda
 ---> 2bc975f25f15
Step 20/26 : ENV SHARD_ALLOCATION_AWARENESS_ATTR ""
 ---> Running in 7dc6bbb595c9
Removing intermediate container 7dc6bbb595c9
 ---> e64ea469f33d
Step 21/26 : ENV MEMORY_LOCK true
 ---> Running in 50f6ef779f66
Removing intermediate container 50f6ef779f66
 ---> bbd8d99f553e
Step 22/26 : ENV REPO_LOCATIONS []
 ---> Running in 7f4289969020
Removing intermediate container 7f4289969020
 ---> 7b5f62485b45
Step 23/26 : VOLUME ["/data"]
 ---> Running in 2d5ee4e70381
Removing intermediate container 2d5ee4e70381
 ---> 46c035e8d167
Step 24/26 : RUN export ES_TMPDIR=`mktemp -d -t elasticsearch.XXXXXXXX` && /elasticsearch/bin/elasticsearch-keystore create
 ---> Running in 445d31647926
Exception in thread "main" java.lang.IllegalArgumentException: Could not resolve placeholder 'NODE_NAME'
	at org.elasticsearch.common.settings.PropertyPlaceholder.parseStringValue(PropertyPlaceholder.java:116)
	at org.elasticsearch.common.settings.PropertyPlaceholder.replacePlaceholders(PropertyPlaceholder.java:69)
	at org.elasticsearch.common.settings.Settings$Builder.replacePropertyPlaceholders(Settings.java:1258)
	at org.elasticsearch.common.settings.Settings$Builder.replacePropertyPlaceholders(Settings.java:1208)
	at org.elasticsearch.node.InternalSettingsPreparer.initializeSettings(InternalSettingsPreparer.java:127)
	at org.elasticsearch.node.InternalSettingsPreparer.prepareEnvironment(InternalSettingsPreparer.java:106)
	at org.elasticsearch.cli.EnvironmentAwareCommand.createEnv(EnvironmentAwareCommand.java:95)
	at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86)
	at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124)
	at org.elasticsearch.cli.MultiCommand.execute(MultiCommand.java:75)
	at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124)
	at org.elasticsearch.cli.Command.main(Command.java:90)
	at org.elasticsearch.common.settings.KeyStoreCli.main(KeyStoreCli.java:41)

I added ENV NODE_NAME="" before the RUNs, build now failing with:
Step 26/27 : RUN export ES_TMPDIR=`mktemp -d -t elasticsearch.XXXXXXXX` && "/elasticsearch/bin/elasticsearch-keystore add-file /tmp/gcs.client.default.credentials_file"
 ---> Running in 58e4e0629619
/bin/sh: /elasticsearch/bin/elasticsearch-keystore add-file /tmp/gcs.client.default.credentials_file: not found
The command '/bin/sh -c export ES_TMPDIR=`mktemp -d -t elasticsearch.XXXXXXXX` && "/elasticsearch/bin/elasticsearch-keystore add-file /tmp/gcs.client.default.credentials_file"' returned a non-zero code: 127

Looks like /elasticsearch is not accesible for the user elasticsearch. What about chaging you chown?
- RUN chown elasticsearch:elasticsearch /elasticsearch/config/elasticsearch.keystore
+RUN chown -R elasticsearch:elasticsearch /elasticsearch/


Default instance and project do not update when you must navigate to Jira to finish saving an issue

When you can only start creating an issue form Mattermost because there are unsupported fields, the default instance and project will not update.
For users who use a project that contains unsupported custom fields, they have no way to leverage the default project and instance functionality.

Setup a Mattermost instance connected to 2 Jira instance
Locate a target jira instance and project where an unsupported custom fields (such as a number field) is mandatory
From a Matter most post, select Create Jira issue
Select target instance and project
Fill in the fields shown in the modal and click save
User id shown a link to navigate to Jira and finish saving their issue
Go save the issue (optional)
Open the create modal again
Observed: Default instance and project are not set

@aaronrothschild, I really don't know how common it is for user to use the integration to partially  create an issue. Please confirm this can wait until the 3.0.1 release.

Confirmed - this can wait until the 3.0.1 release

Closing issues due to inactivity. This issue can be re-opened with more interest from our community.


gpu-culling version panics on get_current_texture call

I've rebuilt my render-bench program to use current trunk rend3. Result is a black window, then, after a delay of a few seconds:
thread 'main' panicked at src/viewer.rs:543:68:
called `Result::unwrap()` on an `Err` value: Timeout

which is at
let frame = surface.unwrap().get_current_texture().unwrap();
This is the first call to Rend3 in the RedrawRequested event, on the first frame. So the setup is probably wrong in some way.
I probably haven't tracked the API changes properly. I'm generally copying from scene-viewer.
Backtrace attached:
gpu-culling-crash1.txt
Source code is in a new branch at https://github.com/John-Nagle/render-bench/tree/gpu-culling
The main branch uses an older version of Rend3 and has worked.
I previously built the "cube" demo on this machine, as a basic test, and that worked.

Found problem. Needed to call frame.present().


JS this context error

When I use the following writeup it is called successfully.
  const provider = useSuiProvider(SuiConfig.rpc)
  provider.getBalance({ owner: address, coinType: '0x2::sui::SUI' })

But when I unfolded it, The "client" does not exist.
 const { getBalance } = useSuiProvider(SuiConfig.rpc)
 getBalance({ owner: address, coinType: '0x2::sui::SUI' })

Yeah I think the problem is the returned object from useSuiProvider is an instance of "JsonRpcProvider", which is a stateful class instead of plain js object. So I would suggest keeping the reference as it is.

Close this issue for not receiving responses.


Add table_soccer - DO NOT MERGE YET

Hi, here is a proposition for https://wiki.openstreetmap.org/wiki/Tag:sport=table_soccer
But DO NOT MERGE IT yet. Cause I created it as a preset of leisure=pitch BUT the wiki do not say it should be "combined" with leisure=pitch. It seems this tag sport=soccer can be "alone" on a node without any other tag.
Can you please tell me how we should add it in the id-tagging-schema?

Hi @westnordost thanks for your comments. Note that my PR addess this issue DoFabien/OsmGo#108:

I found quite a few table soccer tables in public parks (foosball, "babyfoot" in French), but the lack of a preset tag on Osm Go! makes it harder to tag them. I think the table tennis preset could be used, with "Lit" and "Access".

In this issue, @maroneze report table soccer directly in parks as a POI (so out of amenities, pub, etc). So @maroneze will more than probably map then directly as a node on the map.
Please let me know your point of view @westnordost 👍

I have not seen in my life an outdoor table soccer table, I don't think this is a thing. But if there was such a thing, that would be the tag to use.

I had never seen it either (and I thought it unwise due to rain), but apparently that's a thing in some French towns (I've seen at least 3 in nearby towns). I didn't think of taking a photo (I will try to do it to submit it to the OSM wiki eventually), but if you google "babyfoot table parc" in Google Images ('babyfoot' is the French term for table soccer), you can see a few examples.

JFYI, we have them in our hood.
Mapped by @supaplexosm
leisure	pitch
sport	table_soccer

Mapilary
Table 1, Table 2

Mapped by me
playground	tabletop_football

Mapillary
Table

I have not seen in my life an outdoor table soccer table, I don't think this is a thing.

Table soccer tables can of course also be mapped if they are indoors, like other kinds of pitches too. "indoor=yes" may be added in these cases, example https://www.openstreetmap.org/node/9551800192

Currently, the tag is used surprisingly rarely: of the ~300 features which have the tag, around half to two thirds seem to be amenity features like pubs (which would benefit from an added field) and the rest seems to be individually mapped table soccer tables (which would benefit from a new preset).
These raw usage numbers wouldn't currently warrant the inclusion as a preset/field, but I would also assume that table soccer tables are quite significantly more common in real life compared what is currently mapped. Therefore, I would not object adding this tag as a preset and/or field.
For a field, it would probably be needed to use a semiCombo field type for the sport key and allow related "pub" sports like billiards, darts, etc. (you can use https://github.com/openstreetmap/id-tagging-schema/blob/v3.3.0/data/fields/sport_ice.json as a template).

Hi @tyrasd, please let me know how I should amend my PR 👍

TY @tyrasd, i just pushed the requested changes. Can you please review them 👍

Looks good to me, thanks! :+1:  I only changed the preset's name to Table Football Table. The double table sounds a bit funny, but I guess it is acceptable. Is that ok for you?

Hi @tyrasd I'm not a native english speaker, so I usually trust wikipedia to translate from french.

Table football, also called foosball and table soccer, is a table-top game...

Source: https://en.wikipedia.org/wiki/Table_football

I think that this should be named Foosball Table instead of Table Football Table since this game is commonly called foosball in American English. Table Football should instead be used for the English (United Kingdom) locale.
For example, Amazon in the US refers to this game as 'foosball' while Amazon.co.uk calls this game 'table football':

So we just revert to "Table football" and we can merge?

Merged with "Foosball Table" as the preset's name and field value.
PS: I just noticed that there is no icon for the preset, but it's also not easy to find something that fits. There isn't really anything on maki, temaki and not even fontawesome when searching in fontawesome's collection). Svgrepo (see https://github.com/ideditor/schema-builder/issues/60) would have one, but it's too detailed for the size we would display it at.


Remove join member as it conflicts with Type on LRA annotation

The join() member can result in a conflicting situation with the Type enum. Consider the following example
@LRA(value=Type.REQUIRES_NEW, join = true)
When such a method is called when there is already an active LRA context, what should the result be?
The join() is unnecessary as all information can already be defined with the Type enum.

We agreed on the call that join() seems superfluous and can be inferred by the presence of @Compensate @Complete

If a method annotated with

@LRA(value=Type.REQUIRES_NEW, join = true)
is invoked with an active context then that context is suspended and a new context is created for the duration of the method call. By default if the annotated class also contains an @Compensate method then the bean will be enlisted in this new LRA and the @Compensate callback will be invoked (in the context of the new LRA) when the method completes (join = false would override this default behaviour). When the new LRA is ended at the end of the method invocation the original (suspended) context is resumed. Note that join = true is the default.

But I do agree that the join is superfluous since joining an LRA can be inferred from the presence of the @Compensate annotation.
Therefore I agree that the join() attribute is unnecessary

PR Created.
It seems that it was only used in API (not the TCK)
Spec text not adapted since https://github.com/eclipse/microprofile-lra/pull/37 will change spec text a lot.

I cannot find a reference to the join() member in the spec text. So probably no changes needed at TCK level for the removal of the member.


Fix #29 (wordLimit turns "à" into replacement character)

The u modifier makes the regex engine treat the input as a Unicode string, which fixes the issue for some reason.

Thanks @benface !


Demote e2e test as per #10792

Demote e2e test as per #10792.

@ixdy @yujuhong for review and merge please.   This should make e2e runs considerably less noisy.

There are quite a few flaky tests. What's our criteria on demoting test?

More clearly, I saw a few tests that rely on getting /containerLogs through proxy also failing sporadically:

Docker Container should be able to override the image's default commmand (docker entrypoint)
Variable Expansion should allow substituting values in a container's args

Should we demote them all?

I'm starting at the top of the list (ranked by flakyness) and working my way down.  Next on my list is "Docker Containers should be able to override the image's default command".  Let me know fi you have any other favorites :-)

Yes,, "Variable Expansion..." is third on my list.

@quinton-hoole, I was just wondering if we had a explicit threshold :)

Good point.  The threshold is not written down anywhere, but I tend to use 95% as a hard cutoff per test.  Any test that has failed more than once in the past 30 runs tends to cause too much noise.

The PR looks good to me. Will check jenkins after it's done. I was just curious about the procedure because I think we need one (if there isn't any) :)


[BUG] -r can create infinite recursion

Describe the bug
A clear and concise description of what the bug is.
When running -r on a package that has missing dependencies that depend on each other and are also missing, an infinite recursion occurs.
To Reproduce
Steps to reproduce the behavior:

grayskull pypi --strict-conda-forge -r dwave-ocean-sdk
Grayskull will continue generating dependencies until manually stopped.

Expected behavior
A clear and concise description of what you expected to happen.
Grayskull should check if a missing dependency has already been generated and skip that, even if it's listed in another dependency as missing.
Outputs
If applicable, add the output to help explain your problem.
Environment:

grayskull --version
1.1.0

Additional context
Add any other context about the problem here.
It's difficult to explain but can be replicated by running it on the dwave-ocean-sdk package.

yeah, I was afraid that might happen, indeed that is a bug
Actually, that is a wrong design decision from the maintainers as well to have circular dependencies :/

I think the easiest solution is to check the folder where the output is placed in for already generated recipes (Although that doesn't work when outputting to the console). Maybe just keeping an internal dictionary and checking if the recipe is already included in it?

Actually, that is a wrong design decision from the maintainers as well to have circular dependencies :/

Definitely, have filed an issue upstream already. If you think this is therefore out of scope I can also just close the recipe again?

you can let this open, it would be nice to prevent that. Thanks for reporting it :)


Changes to the requirements to be a developer

Reviewers Checklist

[ ] Appropriate logging is done.
[ ] Appropriate error responses.
[ ] Handle every possible exception.
[ ] Make sure there is a docstring in the command functions. Hint: Lookout for
botcmd and re_botcmd decorators.
[ ] See that 100% coverage is there.
[ ] See to it that mocking is not done where it is not necessary.

Updated corobo message if a newcomer tries to assign an issue above 'difficulty/low' level.

Which issue does this PR resolve? You'll have to reference it to the issue link. For reviewers to review.
Please read the commit guidelines.

Oh yeah thanks!
Now should I edit my last commit as explained in the guide, or is there another way to correct it?

 Check Git Basics or Newcomers Docs for that. You'll have to amend your commit message and then do a force push. git commit --amend

Is this one OK @mridubhatnagar ?

unack https://github.com/coala/corobo/pull/467/commits/1a41601d80a381c5219f29695b6a507efeff16ee

Thanx for the specs @jayvdb !
Glad to have got it reviewed.
Now I suppose I'll make changes in the code, add it, amend my last commit, and then force push through this same request. The procedure mentioned in the guide to be taken after PR rejection.
Correct?

Yup; just reuse this PR ; continue as normal.  The only change is you now have a clearer issue to work on.

Abandoned PR.


Alt key

Is your feature request related to a problem? Please describe.
An alt key is not available
Describe the solution you'd like
To add an alt key in the keyboard buttons row
Describe alternatives you've considered
None
Additional context
None

That would be great. In bash i often use alt . "alt+dot" to add the previous comnands last word to the current cursor position

That would be great. In bash i often use alt . "alt+dot" to add the previous comnands last word to the current cursor position

There are also alt+f, alt+b to walk through words.
I dont get it why there is no Alt as of now. Like, WHY ??

Pressing "alt+f" on another (remote) terminal actually sends "Esc" "F". So if you want to do that, just press the Esc key and press F on the keyboard. Hope that helps.


Changing the asset in the regular address does not change the address itself

When we use regular address and change asset - address doesn't change
When we use this address in other wallet -  asset it is BEAM (regardless of our choice)

Wallet A - sender
Wallet B - receiver
Steps:

open receive screen in wallet A
change asset and see if the address is changing
select an asset other than BEAM and copy address
open send screen in wallet B
paste the address

Actual:
in send screen in wallet B asset BEAM (not the one chosen by us)
Expected:
in send screen in wallet B asset the one chosen by us in receiver screen in wallet A
https://user-images.githubusercontent.com/85252690/133056399-32b8ad67-9f98-4f7b-b586-3fb84db590d5.mp4

Not reproduced on Beam Wallet UI 6.2.11850.4684 (master)

Checked


Utility to add test data to local pub server.

This issue was originally filed by<EMAIL_ADDRESS>
It would be nice to be able to call a utility to insert test package data into your locally running pub server.

This issue has been moved to dart-lang/pub#435.


Fix bug on Idle Timeout

Ticket Link
Ticket 1635
List of squashed commits

Commit 1: Fix bug on Idle Timeout

Test Checklist

[x] Exhibits Clear Code Structure:
[x] Project Unit Tests Passed:
[x] Project Jasmine Tests Passed:
[x] Executes Expected Functionality:
[x] Tested For Incorrect/Unexpected Inputs:

How does pingServer work? I'd like to understand if it is resource intensive and whether or not it is in a tight loop.

Here's the code for $scope.pingServer:
/**
 * Ping tomcat server with a GET request to retrieve user info.
 */
$scope.pingServer = () => {
    const endpoint = BASE_URL + "members/aaronvil";
    dataProvider.loadData(() => {
    }, () => {
    }, endpoint);
};

It is completely unnecessary to check if the API is active when the logout is through the UI.


Power consumption not accurate

powertop and powerstat show a consumption of around 12 Watts. Polybar's battery module shows around 150 Watts.
After looking at the code, this seemed like it might be useful information:
There's no /sys/class/power_supply/BAT0/current_now, there is a power_now.
To give an idea of the deviation, here are some numbers. I varied my power usage and watched the Polybar indicator (configured to update once a second, but it actually updated once in ~5s). When it changed, I noted its value and the value Powerstat (configured to report once a second) reported. This is not really accurate because of the delays due to the manual labour, and the fact that the readings were not fully synchronised.
PB  powerstat PB-PS  PB/PS
140   11.97    128   11.7
140   11.95    128   11.7
138   11.95    126   11.5
159   13.97    145   11.4
163   16.21    147   10.1
207   17.66    189   11.7
207   17.11    190   12.1
197   16.68    180   11.8
176   15.10    161   11.7
522   45.4     477   11.5
555   49.4     506   11.2
454   40.8     413   11.1

          avg  216   11.5
          std  138   0.5

Polybar version: 3.1.0-git

What about the output of /sys/class/power_supply/BAT0/power_now? To convert to watts, the raw value needs to be divided by 10^6 IIRC.

This looks like #928, which was fixed in #958, which is not part of a release yet. You'll have to wait for 3.2.0 or compile polybar against the newest commit. Can you confirm that you get the right values compiling against the newest commit?

Yes, it's fixed! Awesome. Thanks.


PKCS11 Integration

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

Please ensure that the user interface for this only uses RFC7512 standard URIs. Don't make up your own way of identifying objects.
Further recommendations about finding certificates/keys in tokens where they may or may not be marked CKA_PRIVATE and have other bizarre (mis)configurations during provisioning can be found at http://david.woodhou.se/draft-woodhouse-cert-best-practice.html#rfc.section.8
It's probably simpler if you are only using keys without an associated certificate.
https://www.infradead.org/openconnect/pkcs11.html has an example of user documentation.

For testing, you can use a prepackaged SoftHSM token which can be used as part of your CI tests.
See http://git.infradead.org/users/dwmw2/openconnect.git/blob/v9.12:/tests/Makefile.am#l366 for the setup, http://git.infradead.org/users/dwmw2/openconnect.git/blob/v9.12:/tests/auth-pkcs11 for an example of the actual test.
http://git.infradead.org/users/dwmw2/openconnect.git/blob/v9.12:/tests/softhsm2.conf.in configures SoftHSM to use a version of the token database which is actually part of the distributed source (having been set up by the Makefile rules in that first link).

Trying to avoid the questions of how to express a certificate subject containing a space, this probably should have worked too?
$ echo Test | build/bin/aws_signing_helper sign-string --certificate ~/git/openconnect/tests/certs/user-cert.pem --pkcs11-lib /usr/lib/x86_64-linux-gnu/p11-kit-proxy.so --pkcs11-pin 1234
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x558d1f2506c2]

goroutine 1 [running]:
github.com/aws/rolesanywhere-credential-helper/cmd.glob..func5(0x558d1f873a80?, {0x558d1f2558f5?, 0x6?, 0x6?})
	github.com/aws/rolesanywhere-credential-helper/cmd/sign_string.go:129 +0x5c2
github.com/spf13/cobra.(*Command).execute(0x558d1f873a80, {0xc0000a43c0, 0x6, 0x6})
	github.com/spf13/cobra@v1.6.1/command.go:920 +0x847
github.com/spf13/cobra.(*Command).ExecuteC(0x558d1f8737a0)
	github.com/spf13/cobra@v1.6.1/command.go:1044 +0x3bc
github.com/spf13/cobra.(*Command).Execute(...)
	github.com/spf13/cobra@v1.6.1/command.go:968
github.com/aws/rolesanywhere-credential-helper/cmd.Execute()
	github.com/aws/rolesanywhere-credential-helper/cmd/root.go:22 +0x25
main.main()
	./main.go:8 +0x17

Enabling PKCS#11 logging in case it helps...
$ echo Test | build/bin/aws_signing_helper sign-string --certificate ~/git/openconnect/tests/certs/user-cert.pem --pkcs11-lib /usr/lib/x86_64-linux-gnu/p11-kit-proxy.so --pkcs11-pin 1234
C_Initialize
  IN: pInitArgs = NULL
C_Initialize = CKR_OK
C_GetSlotList
  IN: tokenPresent = CK_FALSE
  IN: pulCount = 0x7FFF76990510 = 0
 OUT: pSlotList = (5) NO-VALUES
C_GetSlotList = CKR_OK
C_GetSlotList
  IN: tokenPresent = CK_FALSE
  IN: pulCount = 0x7FFF76990510 = 5
 OUT: pSlotList = (5) [ SL38052036, SL842217594, SL900534759, SL1241219482, SL4 ]
C_GetSlotList = CKR_OK
C_GetSlotList
  IN: tokenPresent = CK_FALSE
  IN: pulCount = 0x7FFF769904A0 = 0
 OUT: pSlotList = (5) NO-VALUES
C_GetSlotList = CKR_OK
C_GetSlotList
  IN: tokenPresent = CK_FALSE
  IN: pulCount = 0x7FFF769904A0 = 5
 OUT: pSlotList = (5) [ SL38052036, SL842217594, SL900534759, SL1241219482, SL4 ]
C_GetSlotList = CKR_OK
C_GetSlotInfo
  IN: slotID = SL38052036
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x244a0c4"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_GetSlotInfo
  IN: slotID = SL842217594
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x3233387a"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_GetSlotInfo
  IN: slotID = SL900534759
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x35ad11e7"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_GetSlotInfo
  IN: slotID = SL1241219482
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x49fb819a"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_GetSlotInfo
  IN: slotID = SL4
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x4"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_GetSlotList
  IN: tokenPresent = CK_FALSE
  IN: pulCount = 0x7FFF769904D0 = 0
 OUT: pSlotList = (5) NO-VALUES
C_GetSlotList = CKR_OK
C_GetSlotList
  IN: tokenPresent = CK_FALSE
  IN: pulCount = 0x7FFF769904D0 = 5
 OUT: pSlotList = (5) [ SL38052036, SL842217594, SL900534759, SL1241219482, SL4 ]
C_GetSlotList = CKR_OK
C_GetSlotInfo
  IN: slotID = SL38052036
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x244a0c4"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_GetSlotInfo
  IN: slotID = SL842217594
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x3233387a"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_GetSlotInfo
  IN: slotID = SL900534759
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x35ad11e7"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_GetSlotInfo
  IN: slotID = SL1241219482
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x49fb819a"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_GetSlotInfo
  IN: slotID = SL4
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x4"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_Finalize
  IN: pReserved = NULL
C_Finalize = CKR_OK
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x20 pc=0x55d4d257b670]

goroutine 1 [running]:
github.com/aws/rolesanywhere-credential-helper/cmd.glob..func5(0x55d4d2b9ea80?, {0x55d4d25808f5?, 0x6?, 0x6?})
	github.com/aws/rolesanywhere-credential-helper/cmd/sign_string.go:128 +0x570
github.com/spf13/cobra.(*Command).execute(0x55d4d2b9ea80, {0xc0001b4360, 0x6, 0x6})
	github.com/spf13/cobra@v1.6.1/command.go:920 +0x847
github.com/spf13/cobra.(*Command).ExecuteC(0x55d4d2b9e7a0)
	github.com/spf13/cobra@v1.6.1/command.go:1044 +0x3bc
github.com/spf13/cobra.(*Command).Execute(...)
	github.com/spf13/cobra@v1.6.1/command.go:968
github.com/aws/rolesanywhere-credential-helper/cmd.Execute()
	github.com/aws/rolesanywhere-credential-helper/cmd/root.go:22 +0x25
main.main()
	./main.go:8 +0x17

Ah... this helps:
--- a/cmd/sign_string.go
+++ b/cmd/sign_string.go
@@ -125,6 +125,10 @@ var signStringCmd = &cobra.Command{
                                os.Exit(1)
                        }
                }
+               if err != nil {
+                  log.Println(err)
+                  os.Exit(1)
+               }
                sigBytes, err := signer.Sign(rand.Reader, stringToSign, digest)
                if err != nil {
                        log.Println("unable to sign the digest")

$ echo Test | build/bin/aws_signing_helper sign-string --certificate ~/git/openconnect/tests/certs/user-cert.pem --pkcs11-lib /usr/lib/x86_64-linux-gnu/p11-kit-proxy.so --pkcs11-pin 1234
2023/05/24 15:01:27 invalid slot

Hm, no idea what the slot numbers are. If I ditch the standard system config that p11-kit-proxy.so and hack it to use the softhsm2 provider directly, then I can work out a slot number and...
echo Test | build/bin/aws_signing_helper sign-string --certificate ~/git/openconnect/tests/certs/user-cert.pem --pkcs11-lib /usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so --pkcs11-pin 1234 --pkcs11-slot 38052036
2023/05/24 15:09:14 unable to find matching private key

Worked out the slot# when operating via p11-kit-proxy, so I can add back the tracing. Why isn't it finding the key?
 $  echo Test | build/bin/aws_signing_helper sign-string --certificate ~/git/openconnect/tests/certs/user-cert.pem --pkcs11-lib /usr/lib/x86_64-linux-gnu/p11-kit-proxy.so --pkcs11-pin 1234 --pkcs11-slot 20
C_Initialize
  IN: pInitArgs = NULL
C_Initialize = CKR_OK
C_GetSlotList
  IN: tokenPresent = CK_FALSE
  IN: pulCount = 0x7FFF6A89D940 = 0
 OUT: pSlotList = (5) NO-VALUES
C_GetSlotList = CKR_OK
C_GetSlotList
  IN: tokenPresent = CK_FALSE
  IN: pulCount = 0x7FFF6A89D940 = 5
 OUT: pSlotList = (5) [ SL38052036, SL842217594, SL900534759, SL1241219482, SL4 ]
C_GetSlotList = CKR_OK
C_GetSlotList
  IN: tokenPresent = CK_FALSE
  IN: pulCount = 0x7FFF6A89D8D0 = 0
 OUT: pSlotList = (5) NO-VALUES
C_GetSlotList = CKR_OK
C_GetSlotList
  IN: tokenPresent = CK_FALSE
  IN: pulCount = 0x7FFF6A89D8D0 = 5
 OUT: pSlotList = (5) [ SL38052036, SL842217594, SL900534759, SL1241219482, SL4 ]
C_GetSlotList = CKR_OK
C_GetSlotInfo
  IN: slotID = SL38052036
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x244a0c4"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_GetSlotInfo
  IN: slotID = SL842217594
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x3233387a"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_GetSlotInfo
  IN: slotID = SL900534759
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x35ad11e7"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_GetSlotInfo
  IN: slotID = SL1241219482
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x49fb819a"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_GetSlotInfo
  IN: slotID = SL4
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x4"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_GetSlotList
  IN: tokenPresent = CK_FALSE
  IN: pulCount = 0x7FFF6A89D900 = 0
 OUT: pSlotList = (5) NO-VALUES
C_GetSlotList = CKR_OK
C_GetSlotList
  IN: tokenPresent = CK_FALSE
  IN: pulCount = 0x7FFF6A89D900 = 5
 OUT: pSlotList = (5) [ SL38052036, SL842217594, SL900534759, SL1241219482, SL4 ]
C_GetSlotList = CKR_OK
C_GetSlotInfo
  IN: slotID = SL38052036
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x244a0c4"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_GetSlotInfo
  IN: slotID = SL842217594
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x3233387a"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_GetSlotInfo
  IN: slotID = SL900534759
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x35ad11e7"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_GetSlotInfo
  IN: slotID = SL1241219482
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x49fb819a"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_GetSlotInfo
  IN: slotID = SL4
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x4"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
2023/05/24 15:35:03 17
2023/05/24 15:35:03 18
2023/05/24 15:35:03 19
2023/05/24 15:35:03 20
2023/05/24 15:35:03 21
C_OpenSession
  IN: slotID = SL1241219482
  IN: flags = 4 = CKF_SERIAL_SESSION
  IN: pApplication = NULL
  IN: Notify = NULL
 OUT: phSession = 0xC00013EA50 = S1
C_OpenSession = CKR_OK
C_Login
  IN: hSession = S1
  IN: userType = CKU_USER
  IN: pPin = (4) "1234"
C_Login = CKR_OK
C_FindObjectsInit
  IN: hSession = S1
  IN: pTemplate = (1) [ CKA_CLASS ]
C_FindObjectsInit = CKR_OK
C_FindObjects
  IN: hSession = S1
  IN: max_object_count = 1000
 OUT: object = (3) [ H2, H3, H4 ]
C_FindObjects = CKR_OK
C_FindObjectsFinal
  IN: hSession = S1
C_FindObjectsFinal = CKR_OK
C_SignInit
  IN: hSession = S1
  IN: pMechanism = {
	mechanism: CKM_SHA256_RSA_PKCS
	pParameter: (0) NULL
      }
  IN: hKey = H2
C_SignInit = CKR_OK
C_Login
  IN: hSession = S1
  IN: userType = CKU_CONTEXT_SPECIFIC
  IN: pPin = (4) "1234"
C_Login = CKR_OPERATION_NOT_INITIALIZED
C_SignInit
  IN: hSession = S1
  IN: pMechanism = {
	mechanism: CKM_SHA256_RSA_PKCS
	pParameter: (0) NULL
      }
  IN: hKey = H3
C_SignInit = CKR_OPERATION_ACTIVE
C_SignInit
  IN: hSession = S1
  IN: pMechanism = {
	mechanism: CKM_SHA256_RSA_PKCS
	pParameter: (0) NULL
      }
  IN: hKey = H4
C_SignInit = CKR_OPERATION_ACTIVE
C_Logout
  IN: hSession = S1
C_Logout = CKR_OK
C_CloseSession
  IN: hSession = S1
C_CloseSession = CKR_OK
C_Finalize
  IN: pReserved = NULL
C_Finalize = CKR_OK
2023/05/24 15:35:03 unable to find matching private key

Ah, it's because the CKU_CONTEXT_SPECIFIC login after C_SignInit() fails. Comment that out and it works!
$ echo Test | build/bin/aws_signing_helper sign-string --certificate ~/git/openconnect/tests/certs/user-cert.pem --pkcs11-lib /usr/lib/x86_64-linux-gnu/p11-kit-proxy.so --pkcs11-pin 1234 --pkcs11-slot 20
"2ce382f9f514d675d59d27cc74780161f2200ec383e3f7dda23951f77e9c042732b31026f1665f5a806c4bb532e46e9732d8055895d32bc3b286fb34bcb05f0e1230a86a149cc232d8ea385c215a5691e7ae7a657a5491b6521998e9a679435245725fa12a2bbf90bfae512c382f6b00b3eeb56843720c9cddf755c0171e516360d10005d77642bd7ce89237ad94065be01893bdaad2c6fe6d2e5fb66eff668d24d8a35ae7a465c76b4f385ca7a69991e9c08fd4c77108e61431aefd3b6d5c501b605d2a769f452b74c9cbe37cf5ececf8877d440309028882e1a7856eeb5c58cc3bb694db13fd927b2a137859486175e0663a808697c9b94f9ab68599afb88c417e809f9fcdbfe84e8ba05cf1496187a31b901cad0fb10641af08f35a393ac4e65cfe96b08941be38962c1d351cf9a7"

... for an RSA key at least. EC not so much...
$ echo Test | build/bin/aws_signing_helper sign-string --certificate ~/git/openconnect/tests/certs/ec-cert.pem --pkcs11-lib /usr/lib/x86_64-linux-gnu/p11-kit-proxy.so --pkcs11-pin 1234 --pkcs11-slot 20
C_Initialize
  IN: pInitArgs = NULL
C_Initialize = CKR_OK
C_GetSlotList
  IN: tokenPresent = CK_FALSE
  IN: pulCount = 0x7FFD5EF12850 = 0
 OUT: pSlotList = (5) NO-VALUES
C_GetSlotList = CKR_OK
C_GetSlotList
  IN: tokenPresent = CK_FALSE
  IN: pulCount = 0x7FFD5EF12850 = 5
 OUT: pSlotList = (5) [ SL38052036, SL842217594, SL900534759, SL1241219482, SL4 ]
C_GetSlotList = CKR_OK
C_GetSlotList
  IN: tokenPresent = CK_FALSE
  IN: pulCount = 0x7FFD5EF127E0 = 0
 OUT: pSlotList = (5) NO-VALUES
C_GetSlotList = CKR_OK
C_GetSlotList
  IN: tokenPresent = CK_FALSE
  IN: pulCount = 0x7FFD5EF127E0 = 5
 OUT: pSlotList = (5) [ SL38052036, SL842217594, SL900534759, SL1241219482, SL4 ]
C_GetSlotList = CKR_OK
C_GetSlotInfo
  IN: slotID = SL38052036
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x244a0c4"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_GetSlotInfo
  IN: slotID = SL842217594
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x3233387a"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_GetSlotInfo
  IN: slotID = SL900534759
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x35ad11e7"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_GetSlotInfo
  IN: slotID = SL1241219482
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x49fb819a"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_GetSlotInfo
  IN: slotID = SL4
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x4"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_GetSlotList
  IN: tokenPresent = CK_FALSE
  IN: pulCount = 0x7FFD5EF12810 = 0
 OUT: pSlotList = (5) NO-VALUES
C_GetSlotList = CKR_OK
C_GetSlotList
  IN: tokenPresent = CK_FALSE
  IN: pulCount = 0x7FFD5EF12810 = 5
 OUT: pSlotList = (5) [ SL38052036, SL842217594, SL900534759, SL1241219482, SL4 ]
C_GetSlotList = CKR_OK
C_GetSlotInfo
  IN: slotID = SL38052036
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x244a0c4"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_GetSlotInfo
  IN: slotID = SL842217594
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x3233387a"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_GetSlotInfo
  IN: slotID = SL900534759
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x35ad11e7"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_GetSlotInfo
  IN: slotID = SL1241219482
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x49fb819a"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_GetSlotInfo
  IN: slotID = SL4
 OUT: pInfo = {
	slotDescription: "SoftHSM slot ID 0x4"
	manufacturerID: "SoftHSM project"
	flags: 1 = CKF_TOKEN_PRESENT
	hardwareVersion: 2.6
	firmwareVersion: 2.6
      }
C_GetSlotInfo = CKR_OK
C_OpenSession
  IN: slotID = SL1241219482
  IN: flags = 4 = CKF_SERIAL_SESSION
  IN: pApplication = NULL
  IN: Notify = NULL
 OUT: phSession = 0xC00013EA90 = S1
C_OpenSession = CKR_OK
C_Login
  IN: hSession = S1
  IN: userType = CKU_USER
  IN: pPin = (4) "1234"
C_Login = CKR_OK
C_FindObjectsInit
  IN: hSession = S1
  IN: pTemplate = (1) [ CKA_CLASS ]
C_FindObjectsInit = CKR_OK
C_FindObjects
  IN: hSession = S1
  IN: max_object_count = 1000
 OUT: object = (3) [ H2, H3, H4 ]
C_FindObjects = CKR_OK
C_FindObjectsFinal
  IN: hSession = S1
C_FindObjectsFinal = CKR_OK
C_SignInit
  IN: hSession = S1
  IN: pMechanism = {
	mechanism: CKM_SHA256_RSA_PKCS
	pParameter: (0) NULL
      }
  IN: hKey = H2
C_SignInit = CKR_OK
C_Sign
  IN: hSession = S1
  IN: pData = (92) "AWS Roles Anywhere Credential Helper PKCS11 Test1PKCS#11 Kit\xDA\x1AW\xDC\xD9\x01\xEB\xDE\xD9\xC5w\x1B\xF8a\xA5\xBFubQP..."
 OUT: pSignature = (0) NOTHING
C_Sign = CKR_OK
C_Sign
  IN: hSession = S1
  IN: pData = (92) "AWS Roles Anywhere Credential Helper PKCS11 Test1PKCS#11 Kit\xDA\x1AW\xDC\xD9\x01\xEB\xDE\xD9\xC5w\x1B\xF8a\xA5\xBFubQP..."
C_Sign = CKR_GENERAL_ERROR
C_SignInit
  IN: hSession = S1
  IN: pMechanism = {
	mechanism: CKM_SHA256_RSA_PKCS
	pParameter: (0) NULL
      }
  IN: hKey = H3
C_SignInit = CKR_OK
C_Sign
  IN: hSession = S1
  IN: pData = (92) "AWS Roles Anywhere Credential Helper PKCS11 Test1PKCS#11 Kit\xDA\x1AW\xDC\xD9\x01\xEB\xDE\xD9\xC5w\x1B\xF8a\xA5\xBFubQP..."
 OUT: pSignature = (304) NOTHING
C_Sign = CKR_OK
C_Sign
  IN: hSession = S1
  IN: pData = (92) "AWS Roles Anywhere Credential Helper PKCS11 Test1PKCS#11 Kit\xDA\x1AW\xDC\xD9\x01\xEB\xDE\xD9\xC5w\x1B\xF8a\xA5\xBFubQP..."
 OUT: pSignature = (304) "*\xA1\xD8\xA4\xED\xE2Q\\xA2\xE9\x08\xF5wRc\xC4\x96\xF2\xB3\xA9{\xC7\xBF\xC2e\x0C\xEF\x01N\xA5B\xF4\x174\x1DnG\xC1\xFA\x..."
C_Sign = CKR_OK
C_SignInit
  IN: hSession = S1
  IN: pMechanism = {
	mechanism: CKM_SHA256_RSA_PKCS
	pParameter: (0) NULL
      }
  IN: hKey = H4
C_SignInit = CKR_OK
C_Sign
  IN: hSession = S1
  IN: pData = (92) "AWS Roles Anywhere Credential Helper PKCS11 Test1PKCS#11 Kit\xDA\x1AW\xDC\xD9\x01\xEB\xDE\xD9\xC5w\x1B\xF8a\xA5\xBFubQP..."
 OUT: pSignature = (0) NOTHING
C_Sign = CKR_OK
C_Sign
  IN: hSession = S1
  IN: pData = (92) "AWS Roles Anywhere Credential Helper PKCS11 Test1PKCS#11 Kit\xDA\x1AW\xDC\xD9\x01\xEB\xDE\xD9\xC5w\x1B\xF8a\xA5\xBFubQP..."
C_Sign = CKR_GENERAL_ERROR
C_Logout
  IN: hSession = S1
C_Logout = CKR_OK
C_CloseSession
  IN: hSession = S1
C_CloseSession = CKR_OK
C_Finalize
  IN: pReserved = NULL
C_Finalize = CKR_OK
2023/05/24 15:51:14 unable to find matching private key

CKM_SHA256_RSA_PKCS seems like a strange thing to ask an EC key to do.


KeyError: 'i'

There is no 'i' in geohash's alphabet, so while the example from the README
>>> pgh.geohash_approximate_distance('shi3u', 'sh83n')
625441
>>>

works
>>> pgh.geohash_haversine_distance('shi3u', 'sh83n')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.5/site-packages/pygeohash/distances.py", line 73, in geohash_haversine_distance
    lat_1, lon_1 = decode(geohash_1)
  File "/usr/lib/python3.5/site-packages/pygeohash/geohash.py", line 72, in decode
    lat, lon, lat_err, lon_err = decode_exactly(geohash)
  File "/usr/lib/python3.5/site-packages/pygeohash/geohash.py", line 47, in decode_exactly
    cd = __decodemap[c]
KeyError: 'i'

doesn't.

Great catch,
You're right, it's actually that "shi3u" is not a valid geohash, just some random letters.  Geohash approximate distance is simply counting up the number of leading characters that match, so it will happily take invalid geohashes, while Haversine distance actually converts them.
With that in mind, I've added a default false flag to the geohash distance called check_validity, which will check that the inputs are in fact real geohashes before running. I've also changed the tests and README to use valid geohashes.


libfaketime: 0.9.9 -> 0.9.10

Description of changes

Changelog: https://github.com/wolfcw/libfaketime/releases/tag/v0.9.10
Diff: https://github.com/wolfcw/libfaketime/compare/refs/tags/v0.9.9...v0.9.10
Drop patch no-date-in-gzip-man-page.patch as changes made upstream.
From https://github.com/NixOS/nixpkgs/pull/206845, very very sorry for requesting reviews from everyone. Didn't close the PR when rebasing the branch D:
I did notice the change fails on x86_64-darwin, looking into it:
libfaketime.c:2345:29: error: use of undeclared identifier 'timespec_get'
  DONT_FAKE_TIME(result = (*timespec_get)(ts, base));
                            ^
libfaketime.c:4022:38: error: use of undeclared identifier 'timespec_get'
  DYLD_INTERPOSE(macos_timespec_get, timespec_get);
                                     ^

Things done

Built on platform(s)

[x] x86_64-linux
[x] aarch64-linux
[x] x86_64-darwin
[x] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[x] Tested basic functionality of all binary files (usually in ./result/bin/)
23.05 Release Notes (or backporting 22.11 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[x] Fits CONTRIBUTING.md.

Added patch 0001-libfaketime.c-wrap-timespec_get-in-TIME_UTC-macro.patch to fix source not building on x86_64-darwin; but maybe it'd be better to wait for upstream to merge the PR.

PR just merged by upstream :D

ready for merge?
ping pong @bjornfor :D

Now that the patch was merged, perhaps fetch it from upstream instead of adding it verbatim to  nixpkgs?

Now that the patch was merged, perhaps fetch it from upstream instead of adding it verbatim to nixpkgs?

It's done.

Drop patch no-date-in-gzip-man-page.patch as changes made upstream.

Can you put that in the commit message please? And also in the commit message, why you're adding that new patch?

Drop patch no-date-in-gzip-man-page.patch as changes made upstream.

Can you put that in the commit message please? And also in the commit message, why you're adding that new patch?

Both done! Let me know if anything else is needed.


Menu buttons: Usage tab

Acceptance criteria

[ ] Create a Menu buttons page in the left hand nav on the website.
[ ] Create Usage tab content/images for Combo button and Menu button.

Use the content usage template to create documentation.

Ref existing PAL docs for Combo button and Menu button:

Sustainability PAL
Carbon for IBM Products PAL

o


[DEVOPS-944] do not read arbitrarily many headers

Block streaming would previously try to load up all headers from checkpoints, just to throw all away except the newest. Now we just check the user-supplied checkpoints to find the newest that's in our chain, then stream the blocks.
Description

Linked issue

Type of change

[ ] 🐞 Bug fix (non-breaking change which fixes an issue)
[ ] 🛠 New feature (non-breaking change which adds functionality)
[ ] ⚠ Breaking change (fix or feature that would cause existing functionality to change)
[ ] 🏭 Refactoring that does not change existing functionality but does improve things like code readability, structure etc
[ ] 🔨 New or improved tests for existing code
[ ] ⛑ git-flow chore (backport, hotfix, etc)

Developer checklist

[ ] I have read the style guide document, and my code follows the code style of this project.
[ ] If my code deals with exceptions, it follows the guidelines.
[ ] I have updated any documentation accordingly, if needed. Documentation changes can be reflected in opening a PR on cardanodocs.com, amending the inline Haddock comments, any relevant README file or one of the document listed in the docs directory.

Testing checklist

[ ] I have added tests to cover my changes.
[ ] All new and existing tests passed.

QA Steps

Screenshots (if available)

Closing in favour of #3235 which will reach develop via merge of release/1.3.0


Pandas DataFrame to Table

How would I write a Pandas DataFrame to table storage?
for index, row in df.iterrows():
    data = row.to_dict()
    data['PartitionKey'] = 'some_column'
    data['RowKey'] = uuid.uuid4().hex
    table_service.insert_entity('some_table', data)

Does not seem to work:
AzureHttpError: Bad Request
{"odata.error":{"code":"PropertyNameInvalid","message":{"lang":"en-US","value":"The property name is invalid.\nRequestId:0a290785-6002-00b4-69ad-f3746a000000\nTime:2018-05-24T22:19:20.9543727Z"}}}

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

ID: cb1dcd40-daee-e1f1-3c10-1f0e02d7c794
Version Independent ID: ae5f5ff1-9d2f-2780-89d2-a6fa1fba43e7
Content: Get started with Azure Table storage using Python
Content Source: articles/cosmos-db/table-storage-how-to-use-python.md
Service: cosmos-db
Product: unspecified
GitHub Login: @SnehaGunda
Microsoft Alias: sngun

@ratchetwrench Thanks for the feedback. We are actively investigating and will get back to you soon.

@ratchetwrench Have you found an answer to your issue? In looking around, I was unable to find a conclusive answer but did find some information for your review:
Showing Pandas data frame as a table

Feature request: Way to convert Pandas dataframe to Table object

If this is still an issue, please communicate the specific issue you are experiencing.
Thank you,
Mike

Mike,
No, I have not found a solution, and the links you provided is not relevant
to what I was trying to do.
It's more like an API feature, where given a dataframe, insert the records.
But there is a batch limit, so I have to write that logic in there, and so
on so forth. At the moment, the serious lack of Python support across Azure
makes it nearly unusable beyond copy and pasting quick starts from the docs.
Nevertheless, it would be nice for Python, especially Pandas, to play nice
with Azure things.
Thank you for the follow up though.

David

On Thu, May 31, 2018 at 9:51 AM, Mike Ubezzi<EMAIL_ADDRESS>wrote:

@ratchetwrench https://github.com/ratchetwrench Have you found an
answer to your issue? In looking around, I was unable to find a conclusive
answer but did find some information for your review:
Showing Pandas data frame as a table
https://stackoverflow.com/questions/16958513/showing-pandas-data-frame-as-a-table
Feature request: Way to convert Pandas dataframe to Table object
https://github.com/biolab/orange3/issues/68
If this is still an issue, please communicate the specific issue you are
experiencing.
Thank you,
Mike
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/MicrosoftDocs/azure-docs/issues/9165#issuecomment-393599087,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AJbh0ak_L4iYz1y6kC2NcmGL7EtQHud8ks5t4B-pgaJpZM4UNHDF
.

@ratchetwrench Thanks for the feedback! I have assigned the issue to the content author to evaluate and update as appropriate.

@ratchetwrench currently supported formats are: byte[], bool, DateTime, double, Guid, int, long, and string we don't support Pandas DataFrame yet. If you have a feature request, can you please log it here: https://feedback.azure.com/forums/263030-azure-cosmos-db

#please-close


Add support for sending message bodies on GET requests.

NetflixOSS » ribbon » ribbon-pull-requests #41 SUCCESS
This pull request looks good

NetflixOSS » ribbon » ribbon-pull-requests #42 SUCCESS
This pull request looks good


Docs: Update to v2

https://docusaurus.io/docs/migration

Almost done, fixing various syntax errors.

Getting there, the theme is much closer to the main website now + comes with ability to toggle dark mode out of the box.

Immediate things to fix:

[ ] underline links
[ ] change banner image on overview
[ ] fix dark mode font colors
[ ] add HTML NFT guide: https://github.com/webaverse/app/issues/1160
[ ] stronger call to action / information on seasons
[ ] expand information on how to acquire SILK
[ ] FAQ section
[ ] improve footer
[ ] add search

Deployment worked! Just have to fix a few issues for it to be finally usable. https://docs.webaverse.com/

Alright I fixed some bugs so V2 is pretty much done and the rest on the checklist are open issues I'm solving now. Going to close this issue now.


Is prepending "ryo:" to name needed?

I've been messing around with the ryo-emacs config from sriramkswamy (https://github.com/sriramkswamy/ryo-emacs) which is already a very nice demonstration what can be achieved using ryo-modal.
The thing that is very noticeable in his config is that he refers to every single keybindings twice, which is hard to keep in sync so a likely source of trouble. Moreover it leads to an unnecessarily long config file with a lot of duplication (in his config that is work in progress the files for keybindings and specifying the names for which-key are each ~2000 lines)
In my opinion it would be much cleaner to have all the info at the same place as can be done using the :name functionality that is already present in ryo-modal by defining the keybindings using something along the lines of:
(ryo-modal-keys
("c"
   (("a w" sk/mark-around-word :then (kill-region) :exit t
         :name "Mark around word"))))

This works as expected, but when doing this it appears as ryo:mark around word in the which-key popup, which looks bad but also makes it harder to process the info that is being displayed and might explain why he took that approach.
Is the pre-pending "ryo:" to the name that you do really needed? If not, could that prefix get removed or else be made optional to make these keybindings easier to manage?
btw) setting the string that is now "ryo:" to a blank seems to work fine for me.

Hi!
I didn't think it would work to include whitespace in the :name section, but it does? The reason for the ryo: prefix is to avoid namespace clashes with other commands. I'm using which-keytoo, and I've added this line to my init: (push '((nil . "ryo:") . (nil . "")) which-key-replacement-alist), and that removes all ryo: prefixes. I should probably add that to the README file, since which-key is a popular package!
If the code line above doesn't work it may be because you need to update which-key (they changed it quite recently), or I may have written it wrong. I actually use it like this in my config:
(mapc
(lambda (x)
(push `((nil . ,(car x)) . (nil . ,(cdr x))) which-key-replacement-alist))
'(("kill" . "☠")
("projectile" . "✎")
("helm" . "⎈")
("other-window" . "↗▯")
("ryo:" . "")
("other-frame" . "↗⌧")))

Thanks for that response as that is a trick I wouldn't have figured out, i.e. adding

(push '((nil . "ryo:") . (nil . "")) which-key-replacement-alist)

to my config indeed makes strings in which-key appear as intended without the need for the duplication. Definitely worth adding something like this to the readme as that isn't that obvious.

Adding whitespaces in the string behind name works fine as long as the string is enclosed in quotes as I did in the code in the start post. The only downside appears to be that it looks a bit weird when looking up help for a key as it looks like this:

(ryo:Mark\ around\ word BEG END &optional REGION)

but that is just a cosmetic issue. Nothing more.

I've added the which-key info to the README. I'm closing this issue, since I do not think its wise to remove the ryo: prefix. I hope that is okay :)


App incorrectly handles multi-user enviroment

If a specific mode is selected ("integrated only", for example), and then another user launches the gSwitch app, a "hungry" app will immediately cause the discrete GPU to become active. Obviously, "integrated only" mode can't be selected again until the dependency is resolved. Expectation is that launching another instance of the app (by another user) doesn't cause a change in the selected mode. (selected mode of dynamic, integrated only, or discrete only should be global across users)

You raise a good point, it should be global.  I haven't tested a multi-user scenario yet, but I will check this out.

Yeah I see what you mean.
I think the bigger problem is that there should never be two instances of gSwitch running.

Specifically, how did you launch the app with two different users?  By logout, or terminal or what?

I'm still not sure how this was an issue because I was never able to reproduce it.  The app seems to work fine for me with different users but I will leave the issue open

Modes can be forced now so this is a nonissue.


Add the ability to update sns application if it already exist

@david-spaeth This is great and the functionality I was looking for.
@joshdholtz Do you have any plans on getting this merged?


feat: support noqa before multiline strings

Allow rules applying to lines inside multiline strings inside lists to be skipped by using the "noqa" statement in the line of the multiline start marker.

See https://github.com/warpnet/salt-lint/issues/317.


Nicaragua not listed in Country/Region field

Describe the bug
When being prompted to create a profile to start a course, I am unable to locate my country in the Country/Region field, should be listed right before Niger or Nigeria, Nicaragua does not appear.
To Reproduce
Steps to reproduce the behavior:

Go to 'https://docs.microsoft.com/en-us/users/register?redirectUrl=https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Flearn%2Fmodules%2Fget-started-flows%2F1-introduction%3Fsource%3Dlearn'
Click on 'Country/Region *'
Scroll down to 'List of countries: Nicaragua not showing'
See error: N/A

Expected behavior
Nicaragua should appear in Region/Country dropdown list
Screenshots
If applicable, add screenshots to help explain your problem.
Desktop (please complete the following information):

OS: Windows, desktop
Browser: Chrome
Version [e.g. 22]

Smartphone (please complete the following information):

Device: [e.g. iPhone6]
OS: [e.g. iOS8.1]
Browser [e.g. stock browser, safari]
Version [e.g. 22]

Additional context
Add any other context about the problem here.

@fkreimann Please report feedback at https://docs.microsoft.com/en-us/learn/support/troubleshooting#report-feedback


MPW tapeout repos do not always contain the tapeout data

NOTE: Probably not the correct repo to flag this issue.
I believe https://foss-eda-tools.googlesource.com/third_party/shuttle is intended to be a snapshot of the repo for each of the designs on a shuttle when the design was taped out. This allows others to reuse the design.
However, the actual data taped out is from the last successful precheck and not necessarily the data that is in the most recently updated repo.
For example, this design has the following manifest entry
A4,004, riscduino-dcore_d4_, '00081da2, , , , , , 78dfb71ad7efa8c76c2b3dced0d848be171b8c6d, ...

However, the precheck log shows the following commit ddec3fbfabd8cef36812a3f9e833e94adfc47f23
2022-12-03 15:29:55 - [INFO] - {{Project Git Info}} Repository: https://github.com/dineshannayya/riscduino_dcore.git \| Branch: main \| Commit: ddec3fbfabd8cef36812a3f9e833e94adfc47f23

When copying the design data to https://foss-eda-tools.googlesource.com/third_party/shuttle, is it possible to use the data from the precheck commit instead of the latest update?

Ok, the manifest entry shasum is not the commit id, but rather the shasum of the caravel_xxxxxxxx.oas file.
For the above example (slot-004), precheck/tapeout commit ddec3fbfabd8cef36812a3f9e833e94adfc47f23 no longer appears in the user repo.

After further research, these are slots for mpw-8 where the precheck commit id is not the most recent before tapeout.
slot-004: precheck commit id is no longer in the repo at all. The user may have deleted it with a force push.
slot-005: precheck commit id is no longer in the repo at all. The user may have deleted it with a force push.
slot-007: looks like there was a gds update after precheck. precheck gds.info does not match tapeout gds.info.
slot-029: no user data. just tapeout data.
slot-038: no user data. just tapeout data.

The SHA1SUMs are for the output OAS / GDS file which is downloaded using the command.
Take a look at https://github.com/mithro/mpw-tools

See specifically
https://github.com/mithro/mpw-tools/blob/be3862b72dde6068e3e865cf89c1ea5e265743df/get-mpw-files.py#L79-L105
and
https://github.com/mithro/mpw-tools/blob/be3862b72dde6068e3e865cf89c1ea5e265743df/get-mpw-files.py#L108-L126


好像gif无法压缩

越压越大

After testing, GIF has been able to be compressed to the smallest file when the level is adjusted to 4.


Empty resultset using :sasl on HIve 0.13 and 0.14

Using SASL the query doesn't return rows:
RBHive.tcli_connect(host,10_000,{ logger: Logger.new(STDOUT), hive_version: 13, transport: :sasl, sasl_params: {username: 'hive'} }) do |connection|
  res = connection.fetch(query)
  puts res.column_names.inspect
  puts res.first.inspect
end

This is the output:
I, [2015-02-12T07:06:43.543538 #1333]  INFO -- : Executing Hive Query: SHOW TABLES
[:tab_name]
nil
=> nil

Also async execution doesn't yield anything:
RBHive.tcli_connect(host,10_000,{ logger: Logger.new(STDOUT), hive_version: 13, transport: :sasl, sasl_params: {username: 'hive'} }) do |connection|
  hash = connection.async_execute(query2)
  state = connection.async_state(hash)
  while state == :running do
      puts state
      sleep(2)
    state = connection.async_state(hash)
  end
  puts state
  puts connection.async_fetch(hash)
  connection.async_close_session(hash)
end

I, [2015-02-12T07:09:54.103844 #1333]  INFO -- : Executing query asynchronously: SHOW TABLES
2
finished
2
=> <Hive2::Thrift::TCloseSessionResp status:<Hive2::Thrift::TStatus statusCode:SUCCESS_STATUS (0)>>

I'm not sure if this is relevant, but the hive_version: 13 doesn't work properly at the moment. The protocol changed so that the data is return in a columnar-based rather than a row-based orientation. My memory is fuzzy, but I'm pretty sure this manifests as getting nil for rows.
You can still speak the 0.12 version of the protocol to 0.13 - try again with hive_version: 12.
To fix it, the gem would need some fairly significant reworking. At the moment that's something we aren't likely to do for the foreseeable future, simply because we've decided to stay on Hive 0.12 due to show-stopper bugs in 0.13 and above, and moved our querying platform to Facebook's Presto.

Thank you, using hive_version: 12 did resolve the problem.


DNS resolution stops working intermittently.

Rancher Server version - v1.1.0-dev2-rc1
Longhorn controller image - cjellick/longhorn:dev6
Deploy a VM using image - rancher/vm-ubuntu:14.04
DNS resolution inside the VM works fine for sometime.
Then DNS resolution stops working.
Then I see it start working again.

Tested with rancher-server version - v1.1.0-dev2-rc3
longhorn version - rancher/longhorn:v0.1.0
DNS resolutuion works without any issues. No intermittent errors seen.


[PREGEL] Add computing state to conductor state machine

Sevent PR for adding a state machine to the pregel conductor:
Adds the last state - the Computation state - to the state machine.

TODO merge parent first


There is no sample application in flightphp

@mikecao
There is no sample application written in flight-php framework to give the developer a guideline to better coding practices using flight
I strongly suggest that a simple sample application which can show case the various features of flight-php along with the best way to structure the application will help developers to code better and efficient applications using this awesome framework

I'm not sure, many micro frameworks don't really aim to solve the problem of writing an application - they just provide you with the foundation to build upon. Since every use case will be different and require different sets of building blocks on top of flight it's very hard to provide a sensible sample application.

I use Flight in many of my apps, in many different ways, with auth in front, as static site, as API controller.
We could add a sample/example folder to the repo, and add our own samples?
If you can provide an sample, submit it as a PR and it can be approved and added to the repo.
I'll be willing to submit different use cases.
What do you say @mikecao?

@Conver I'd rather not include examples in the repo itself because I don't want people to think that is the standard way to setup their apps. I may go ahead and create a sample app, but it would definitely be a separate repo. I've seen lots of *-boilerplate repos that do the same thing.

@mikecao, that would also be a good way to goo', but I'll recommend letting users of Flight submit use cases of their own?

@Conver Yes I think a variety of simple examples would be better than having a single complex sample.

@mikecao, Great. I'll love to submit some.

Let me know when you add the repo, and I'll push some.

You can get some unofficial sample applications by searching GitHub .
List some below:
https://github.com/olipayne/BcryptGenerator
https://github.com/itinnovator/myphp-app
https://github.com/casgin/LittleEducationalCMS
https://github.com/chiccomagnus/PGAPI
https://github.com/recepuncu/cms
https://github.com/ycrao/tinyme

If anyone is looking for a good starting point I have forked a skeleton and brought it up to something more modern. It's pumped with some other things though (grunt + sass, twig)
https://github.com/MarkehMe/flight-skeleton
I plan to add a few things I need (like mongodb models) into it, but it is probably more than you would need already :)

For those who might be interested with skeleton for a pure Restful API project, I have created one for that purpose: https://github.com/pierresh/flightphp-skeleton

Added a few examples (that are still working) from this page. https://github.com/flightphp/core/commit/130deafab692a8111bbad7a8b926942258303944

I just completed a skeleton app that might be helpful for those that find this issue. https://github.com/flightphp/skeleton


no logout for a one month and no logout on browser close

Rainloop does not use $_SESSION cookies, instead is uses normal cookies with a lifetime of a one month! If you close browser or browser tab you won't be logged out of rainloop for one month regardless of personal setting of auto logout in rainloop. Auto logout functionality in rainloop only works when you have rainloop open in browser. This is major security bug.
Client site session cookies should be cleaned on browser close (unless "remember me" is checked) ($_SESSION works that way and its common for users to rely on this). Rainloop auto logout functionality should work also when rainloop is not open in any browser tab (by setting cookie lifetime).

RainLoop does not use cookies to store session.

still this store should be cleared after tab close or (better) browser close (unless remember me was checked).

+1
If the "Remember Me" box isn't check, then there a way for the session to expire in a meaningful time frame. Since many browsers nowadays save session cookies when they are closed, it isn't trivial to invalidate a session; one way of doing it is to use an ajax-based heartbeat/keepalive that can be compared to a server-based timestamp. When the browser closes, the heartbeat stops, and next time the browser opens again, the session will be timed-out based on the server-based timestamp.

I removed the Remember Me button (by setting the sign_me_auto to Unused). My autologout is set the 5 minutes. When I login on android chrome and then let my phone sit for 10 minutes the page is still there and able to read mail. Obviously if someone were to access my phone they could have access to my email despite my settings. What is the autologout design supposed to do and I wonder why is it not working? On a desktop I noticed a rltoken cookie being set with an expiration of 30days...What is that for and shouldn't it expire at the autologout period?

@RainLoop - some additional info to my previous comment. At various times I am seeing autologout working, but other times it is not. I am thinking this is related to android battery optimization of the browser. When the the screensaver kicks in, the browser network connection is suspended. So if the screensaver was enabled overnight and the browser is still logged into rainloop, the autologout is suspended. So I think the autologout design might not be complete. Something is needed on the server side so that if the session is no longer valid, it rejects any attempts to read email and redirects back to the login page. Does this make sense? Is there more info I can provide?

bump! Are there any news regarding this? Is there some draft idea of a fixture or implementation that maybe others can help with? Thanks in advance.


[Bug Report] el-table-column use selectable=false

Element UI version
2.8.2
OS/Browsers version
windows10/Chrome
Vue version
2.6.10
All of selectable are this false
Table headers cannot be disabled

Issues without a valid reproduction link will be closed directly.


Upgrade to io.js 2.0.0

https://github.com/iojs/io.js/blob/master/CHANGELOG.md
Highlights:

V8 <IP_ADDRESS>
class keyword is now usable in strict mode without flags
os.tmpdir() is now cross-platform consistent

We don't create issues to track upgrading to latest io.js and Chrome because we are already doing it regularly. We usually do the upgrade within 1 or 2 weeks after the new release.
For V8 <IP_ADDRESS> and class keyword, we already have it in Electron.

Thanks for explanation!

Is there any reason why 0.27.3 electron is still using io.js 1.6.3? There are already newer io.js versions released. Thank you.


feat: Add json_array_length Spark function

json_array_length in Spark is similar as Presto but has difference in return type, Presto is int64_t, Spark is int32_t.
Examples:
SELECT json_array_length('[1,2,3,4]');  -> 4

Spark doc: https://spark.apache.org/docs/latest/api/sql/#json_array_length

@rui-mo @JkSelf @PHILO-HE Can you please help review this?


fix(Browsers): added kiwicom supported browsers to the project

Added a company-wide browser list to the project so we can run tests on it and see if everything behaves as previously 🤞
Will test it also on few other projects just to ensure that everything behaves the same 😉
LiveURL: https://orbit-components-fix-supported-browsers.surge.sh

Also, I think this should be treated as a breaking change, what do you think?

Wow, thanks a lot for pointing this out! ❤
Yea this could be treated as a breaking change 🤔
This package is still in the testing phase..
Could you pls take over this MR and make it work on orbit and see if there are some big problems occurring 🙏 Also it would be worth to check bundle size

There appears to be no changes in bundle size.

Can you also please update this section of readme? As it is in relation to this issue :)  https://github.com/kiwicom/orbit-components/blob/master/.github/contribution/testing-conventions.md#browser-compatibility

Love the last commit! I copied it to our supported browsers package 😍  🦖

@filipdanisko with the last commit we shouldn't have to worry about updating the list anymore. Let me know what you think.


Bug: Unable to generate data if alias has leading underscore

Description
I cannot create data for a pydantic model if it has an alias containing a leading underscore.  Other "non-pythonic" aliases such as whitespace in the name seem fine.
e.g. data_type: Annotated[str, Field(alias="_type")]
The error goes away if I use data_type: Annotated[str, Field(serialization_alias="_type")] but this is not fit for purpose as I need to create a JSON schema (using model_json_schema) where the _type field is included in the definition.
URL to code causing the issue
No response
MCVE
from polyfactory.factories.pydantic_factory import ModelFactory
from pydantic import BaseModel, Field

class MyModel(BaseModel):
    aliased_field: str = Field(alias="_special_leading_underscore_field")

class MyFactory(ModelFactory):
    __model__ = MyModel

instance = MyFactory.build()

Steps to reproduce
Create a pydantic class where `Field` is populated with an `alias` that has a leading underscore (e.g. `type: Annotated[str, Field(alias="_type")]`).

In my example I want to serialize and validate using `_type` (as this is historically what is in my dataset).

Screenshots
No response
Logs
Traceback (most recent call last):
  File "Downloads/pydantic-factories/example.py", line 34, in <module>
    example_leading_underscore = AliasLeadingUnderscoreFactory.build()
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "Downloads/pydantic-factories/.venv/lib/python3.12/site-packages/polyfactory/factories/pydantic_factory.py", line 475, in build
    return cls._create_model(kwargs["_build_context"], **processed_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "Downloads/pydantic-factories/.venv/lib/python3.12/site-packages/polyfactory/factories/pydantic_factory.py", line 508, in _create_model
    return cls.__model__(**kwargs)  # type: ignore[return-value]
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "Downloads/pydantic-factories/.venv/lib/python3.12/site-packages/pydantic/main.py", line 212, in __init__
    validated_self = self.__pydantic_validator__.validate_python(data, self_instance=self)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pydantic_core._pydantic_core.ValidationError: 1 validation error for AliasLeadingUnderscore
_data_type
  Field required [type=missing, input_value={}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.9/v/missing

Release Version
2.17.0
Platform

[ ] Linux
[X] Mac
[ ] Windows
[ ] Other (Please specify in the description above)

[!NOTE]
While we are open for sponsoring on GitHub Sponsors and
OpenCollective, we also utilize Polar.sh to engage in pledge-based sponsorship.
Check out all issues funded or available for funding on our Polar.sh dashboard

If you would like to see an issue prioritized, make a pledge towards it!
We receive the pledge once the issue is completed & verified
This, along with engagement in the community, helps us know which features are a priority to our users.

In the interest of test driven development... here is a test highlighting the problem! https://github.com/litestar-org/polyfactory/commit/e953787919b61c236751891692287ae35a2c095a

right, so this is the cause of the behaviour: https://github.com/litestar-org/polyfactory/blob/main/polyfactory/factories/base.py#L920

do we think there would be an appetite to extend functionality somewhere to include a flag dictating whether or not we respect private attributes?  if yes, i can raise a PR.  if no, i guess we can close this issue

I'm a bit reluctant to add that tbh. I feel like it's simple enough for users to override this behaviour.

in that case, i will close this issue!


Bump parent images for echo apps

In particular, the newer "advanced" echo no longer runs as root (it now has USER configured), which makes it possible to run in more strict environments like OpenShift.
NONE

Thanks @jwendell!
/ok-to-test
/lgtm
/approve


Dev 872 Log data resource downloads and get number of download times for datasets

SonarQube analysis reported 2 issues

 1 critical
 1 minor

Watch the comments in this conversation to review them.

SonarQube analysis reported 5 issues

 1 critical
 3 major
 1 minor

Watch the comments in this conversation to review them.

SonarQube analysis reported 1 issue

 1 minor

Watch the comments in this conversation to review them.


feat: Add nix flake support

Thanks for creating exactly what I was looking for!
I'm happy to maintain nix support in my own fork, but if you'd like to add it upstream, think of this PR as a conversation starter.
Ideally, the version and hash in default.nix are bemped whenever there is a release via github action. I have an action that'll fetch the latest tag and swap it into default.nix with sed, but I haven't automated hash calculation yet.
If you're interested in this PR, I'll add that functionality.
Also, let me know if you have any general nix questions and how this PR makes it possible to use your package in nix/nixos.
Cheers!

Hey, thanks for the PR! It gave me a nudge to finally check out Nix :slightly_smiling_face:
While doing so, I noticed that the Nix package manager already includes an entry for the upstream tailwindcss binary. With a bit of copy/paste magic, it could be used to add tailwindcss-extra.
What are your thoughts on this? Wouldn't a PR in Nixpkgs be more beneficial? It could help others seeking the same solution in discovering it more easily.

Hey, thanks for the PR! It gave me a nudge to finally check out Nix 🙂
While doing so, I noticed that the Nix package manager already includes an entry for the upstream tailwindcss binary. With a bit of copy/paste magic, it could be used to add tailwindcss-extra.

Indeed, this is what I used until I brought in the daisyUI dependency.

What are your thoughts on this? Wouldn't a PR in Nixpkgs be more beneficial? It could help others seeking the same solution in discovering it more easily.

I agree, it would be far more beneficial. Although, were I to open a PR against nixpkgs, the solution I'd propose would be different.
For nixpkgs, I don't think I would propose simply adding daisyui to tailwindcss, or even adding tailwind-cli-extra as it's too niche to be generally useful. Ideally, the package in nixpkgs would allow the embedded 3rd party depedencies to be declared.
Though, I don't have enough experience with nix/nixpkgs to know whether that's practical, or even possible, given its goal of reproducible builds. I believe the 3rd party packages that it's built with would have to be part of the package's source so that they can be added to the package's hash. So I'm not sure that this concept can be generalized in a way that's less niche. I'll continue looking into the viability of a generalized solution -- it may be possible with an overlay.
But that's all to say -- I proposed the change to your package because I wasn't prepared to solve the problem more generally. It's a one-off fix to solve my immediate problem. But I won't be shocked if my needs expand beyond daisyui. I'm happy to keep these changes in my fork for now. Feel free to close this PR if you'd rather this package remain the simple and precise fix that it already is.

I looked into this a bit further. The standalone tailwind CLI build process depends on vercel-pkg, which needs to download Node binaries as part of its build process. This breaks nix's build sandboxing, which prevents network connections during build. The sandbox can be disabled, but it's there for a good reason.

I don't mind adding Nix support to this repo. We would just need to incorporate automatic updating of hashes for all architectures. If I'm not mistaken, the fetchurl method can also accept a "pure" sha256 value instead of the Nix hash. If that's the case, then updating the values within the release workflow would be easy.
Do you mind explaining how you will run/install the Nix package from this repo? Do the files have to reside in the root of the project, or can they be moved to a subdirectory like packaging/nix? I might add other types, e.g., snaps, later, so building out a clean structure would be nice.

@dobicinaitis Sounds good. I'll get this polished up in the coming week or so.
To "run" this package as a nix flake, with flake.nix at the top-level directory looks like:

nix run github:dobicinaitis/tailwind-cli-extra

With flake.nix in packaging, it looks like:

nix run github:dobicinaitis/tailwind-cli-extra?dir=packaging

I don't see this organization done often, but it is valid. I would describe it as non-idiomatic. At the same time, I don't love multiple nix-related files polluting the top-level directory with their presence. So I understand the inclination to hide them.
The alternative is to hide default.nix away in packaging and keep flake.nix at the top level to keep the run syntax minimal.

Thanks for the extra details @acaloiaro! In this case, just keep the Nix files at the top level. Once you have finished polishing them, if you wish, I can add the version and hash updating bits to the release workflow.

Hi! I am very interested in using this, and crossing my fingers for a merge :)


Update and fix dependency security vulns

I've been getting alerts about the security vulnerabilities in some of the deps we use in this project, so I went in and updated the deps to fix those.  I poked around and did a couple tests, so it should be good to go again.
@Ross-Hunter or @KevinGreene Would either of you be able to look this over?  I haven't touched ruby in a while and want to make sure I haven't done anything I didn't intend.
Thanks!

We never got around to putting any automated tests on this did we?
Code seems fine, but I won't get a chance to actually try and run this code until much later today. So if you have manually tested this 👍.

Sounds good to me, merging.