Incorrect display format of size in docker ps -s

I noticed that sizes shown by docker ps -s are formatted incorrect / inconsistent;
$ docker ps -s
CONTAINER ID  IMAGE COMMAND CREATED STATUS PORTS   NAMES  SIZE
024b89ef4d0a  [cut] [cut]   [cut]   [cut]  80/tcp  [cut]  1.57 MB
50163140f98f  [cut] [cut]   [cut]   [cut]  80/tcp  [cut]  1.096 MB
f29c681fb177  [cut] [cut]   [cut]   [cut]  80/tcp  [cut]  98.73 kB

As seen above, a dot (.) is used both as decimal and as thousands separator, making it difficult to distinguish a 1+ GB container from a 1.5 MB container (or at least confused me wether it was 1GB or 1MB).
I would have expected something like (asuming en_US locale);
$ docker ps -s
CONTAINER ID  IMAGE COMMAND CREATED STATUS PORTS   NAMES  SIZE
024b89ef4d0a  [cut] [cut]   [cut]   [cut]  80/tcp  [cut]  1.57 MB
50163140f98f  [cut] [cut]   [cut]   [cut]  80/tcp  [cut]  1,096 MB
f29c681fb177  [cut] [cut]   [cut]   [cut]  80/tcp  [cut]  98.73 kB

Or (right aligned and always show decimals);
$ docker ps -s
CONTAINER ID  IMAGE COMMAND CREATED STATUS PORTS   NAMES         SIZE
024b89ef4d0a  [cut] [cut]   [cut]   [cut]  80/tcp  [cut]      1.57 MB
50163140f98f  [cut] [cut]   [cut]   [cut]  80/tcp  [cut]  1,096.00 MB
f29c681fb177  [cut] [cut]   [cut]   [cut]  80/tcp  [cut]     98.73 kB

Naive question perhaps, but what makes you think the . in 1.096 MB is a thousand separator?
I just did a few tests generating files with dd, the . seems to consistently be a thousand separator:
$ docker run --name 1G busybox /bin/sh -c "dd if=/dev/zero of=test bs=1 count=0 seek=1G"
$ docker run --name 512M busybox /bin/sh -c "dd if=/dev/zero of=test bs=1 count=0 seek=512M"
$ docker ps -as
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS                      PORTS               NAMES               SIZE
4c12fb3d4d94        busybox:latest      "/bin/sh -c 'dd if=/   2 seconds ago       Exited (0) 1 seconds ago                        512M                536.9 MB
6839ad443ec9        busybox:latest      "/bin/sh -c 'dd if=/   32 seconds ago      Exited (0) 31 seconds ago                       1G                  1.074 GB

Hm (lolz); you are probably right!
The reason I thought it was a thousands separator, is there's three digits. Whereas the others have two. Due to the numbers being left aligned I interpreted that incorrectly. Living in the Netherlands (where a dot (.) is used as a thousands separator), probably added to that.
To take away this confusion, Perhaps the precision should be kept to two digits consistently, and right aligned;
$ docker ps -s
CONTAINER ID  IMAGE COMMAND CREATED STATUS PORTS   NAMES         SIZE
024b89ef4d0a  [cut] [cut]   [cut]   [cut]  80/tcp  [cut]      1.57 MB
50163140f98f  [cut] [cut]   [cut]   [cut]  80/tcp  [cut]      1.10 MB
f29c681fb177  [cut] [cut]   [cut]   [cut]  80/tcp  [cut]     98.73 kB

Feel free to submit a patch for this: I'm closing this issue.


Features for v0.2.0

We plan to implement following improvements for v0.2.0 (the next release).

[x] Don't absorb the wheel event if scroll is at the end of range #33 #84
[ ] Only render visible columns #49
[x] Investigate weird errors with React 0.13 #104 #83
[x] Fix vertical positioning errors and pixels bleeding through 1px gaps
[x] Improve Firefox perf #5
[x] Use Babel for transform (remove the need for global polyfills, Object.assign) #102
[x] Add UMD support to dist build #103
[ ] Implement groupHeaderRenderer #41
[x] Make footer stay on the bottom when using Height prop #97
[ ] Create new API for rendering cells using react components instead of cellRenderers
[x] Unify footer data API with header/groupHeader data API

Can you add fixing #41 to this too :)

@TomClarkson Sure that should be doable

Hi is possible to query ?  through the table ?

@raaka1 check out this issue #67: you'll find a filtering example there (http://jsbin.com/temufa/14/edit)

This release is out! https://github.com/facebook/fixed-data-table/releases/tag/v0.2.0

Wonderful work. Thanks!


Bower install downloading not required files

Description
While using bower install for installing, it downloads all the directories which is not even required.
Solution: It should just install the dist directory only.

The current behavior is intended and is common in other packages.


DRY logic in the module generation

Context
At the moment we support 3 type families: integers,  floats and String.
Recently Newtype  trait was introduced, which formalizes parse -> validate -> generate flow.
The generation logic is handled individually by each single type in gen modules, by the following functions:

gen_nutype_for_integer
gen_nutype_for_float
gen_nutype_for_string

Those functions are very similar and have a similar structure.
Since we're going to add new type families in the nearest future we want to find a way to avoid those duplications and DRY them.
Specs

Find a way to DRY the duplications (consider higher order functions, traits with template methods, or something else

Acceptance Criteria

The tests remain untouched and pass
The code is restructured in the way that adding a new type family will require writing less code for the generation logic.

I am working on it.

Done in https://github.com/greyblake/nutype/pull/73


Cannot get Annotations working.

Hey everyone,
I am following the  Simple reader with prev/next page controls example, but I cannot get annotations on any of the PDFs I try. I require the latest pdf.js version through npm.
Help would be appreciated, thank you.

See examples at https://github.com/mozilla/pdf.js/tree/master/examples/components . Closing as answered.

I require the latest pdf.js version through npm.

But this you mean npm install pdfjs-dist ?

I was able to get the annotations to appear, however they seem to be off center. my canvas in placed in the center of the page, but the textLayer and annotationLayer elements are in the top right corner.
And yes, i am using npm install pdfjs-dist


Missing "required" labels in the InfluxDB OSS API docs

There are missing required labels in the InfluxDB OSS API docs.
status is required to add a new check
orgID is required to add a new notification endpoint
every is required to add a new notification rule
orgID and bucketID are required to create a new scraper target
orgID si required to create a source
orgID or/and org is required to create a task - it might be worth noting that it only works like this for the OSS InfluxDB version. When it comes to the cloud InfluxDB there is no need for either orgID or org. I believe the Create a Task orgID and org should be described as they are for deleting data.
orgID is required to create a Telegraf configuration
orgID is required to create a new stack
orgID is required to apply or dry-run a template
orgID within orgIDs is required to export a new template
There is also one excessive "required" in create a dashboard where the name IS NOT a required parameter to create a new dashboard.

Additional things I've found:

ping response header X-Influxdb-Version is a string, not an integer.
replace cells in a dashboard response doesn't contain name and orgID

every is required to add a new notification rule

when either status or every is missing, server panics (panic has occurred: /api/v2/notificationRules: runtime error: invalid memory address or nil pointer dereference


Traffic with an on-ramp

This PR adds a notebook for the LWR model with an on-ramp at x=0.  This is intended to be the first chapter (other than perhaps introductory material) in Part IV of the book, which is focused on source terms.
There are several examples and a Riemann solver that I believe is correct for all inputs.  I used the f-wave solver from chapter 17 of FVMHP to check my work.  Eventually I found some situations for which that solver gives an incorrect answer; I haven't tried to write an approximate solver that is better.
The text is quite rough in places, with some repetition.  I haven't tried to fully explain every possible type of Riemann solution -- I'm not sure whether that would be worthwhile.
Feedback is welcome.

@rjleveque I'm copying some of your comments here for continued discussion.  I believe I've dealt with the rest in my latest commit.

It seems to me there is a fundamental difference between the conservation law with $f(\rho,x)$ for a variable speed limit, in which the total mass of cars is conserved, and the balance law that has a conservative flux on the left and a source term on the right. In the latter case the mass of cars is not conserved.

It's true both have a delta function source on the right but it's not true that an on-ramp exactly corresponds to a decrease in speed limit. The on-ramp introduces new mass and does not really change the speed limit on the right since it's the same flux function, it just increases the density and hence the speed decreases due to driver behavior.

The text in question was intended as a placeholder to remind me to discuss this connection, rather than a final draft.  I do think it's worthwhile to say something about this connection; if you would like to rewrite this part, it would be welcome.  I did have in mind that there might be a precise correspondence if one also stretched the x-axis appropriately -- by different amounts for x>0 and x<0.  I haven't worked it out, though.

In the next plot, the characteristics seem too dense and only extend up to t=0.4.

This is a feature of our current code.  All the characteristics from the region we plot impinge on the shock by t=0.4.  If this is undesirable, we could adjust the code to plot characteristics over a wider region.

In the plot above, why do cars accelerate instantaneously at $x=0$? Shouldn't they accelerate slowly through a rarefaction?

Several things in this notebook are counterinuitive, but I believe they're correct.  In this case, it's evident that there cannot be a right-going rarefaction because the characteristics for x>0 are going to the left.

should we also plot new vehicles entering at $x=0$ at various times?

Yes, this is something I'd like to add.


multiuser admin

Is it possible to add a feature to have more admins than just one?
and the new admin scope should be restricted to just one WG configuration.
for example, admin A is restricted to read and write peers on the wg1 configuration while admin B is just restricted to the wg2 and the default username is super admin and can see all wgN configurations and have the right to create admin and restrict them to just one wg configuration. is it possible?

I also like this feature, maybe in the future a multi-tenant management style? Like with groups and permissions.


Contour 0.14 examples - cannot create log

What steps did you take and what happened:
Deployed Contour as ds-hostnet-combined:
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  creationTimestamp: "2019-07-26T10:34:16Z"
  generation: 1
  labels:
    app: contour-internal
    chart: contour-0.4.0
    component: router
    heritage: Tiller
    release: contour-internal
  name: contour-internal
  namespace: default
spec:
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: contour-internal
      component: router
      release: contour-internal
  template:
    metadata:
      annotations:
        ad.datadoghq.com/contour.check_names: |
          [
            "prometheus"
          ]
        ad.datadoghq.com/contour.init_configs: |
          [
            {}
          ]
        ad.datadoghq.com/contour.instances: |
          [
            {
              "prometheus_url": "http://%%host%%:8000/metrics",
              "namespace": "contour",
              "metrics": ["contour_*"]
            }
          ]
        ad.datadoghq.com/contour.logs: |
          [
            {
              "source":"contour",
              "service":"ingress"
            }
          ]
        ad.datadoghq.com/envoy.check_names: |
          [
            "envoy"
          ]
        ad.datadoghq.com/envoy.init_configs: |
          [
            {}
          ]
        ad.datadoghq.com/envoy.instances: |
          [
            {
              "stats_url": "http://%%host%%:8002/stats"
            }
          ]
        ad.datadoghq.com/envoy.logs: |
          [
            {
              "source":"envoy",
              "service":"ingress"
            }
          ]
        cluster-autoscaler.kubernetes.io/safe-to-evict: "true"
      creationTimestamp: null
      labels:
        app: contour-internal
        chart: contour-0.4.0
        component: router
        heritage: Tiller
        release: contour-internal
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: node-role.kubernetes.io/spot-edge
                operator: Exists
            - matchExpressions:
              - key: node-role.kubernetes.io/edge
                operator: Exists
      automountServiceAccountToken: true
      containers:
      - args:
        - -c
        - /config/contour.json
        - --service-cluster
        - envoy-cluster
        - --service-node
        - $(NODE_NAME)
        - --base-id
        - "1"
        command:
        - envoy
        env:
        - name: NODE_NAME
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: spec.nodeName
        image: docker.io/envoyproxy/envoy-alpine:v1.10.0
        imagePullPolicy: IfNotPresent
        lifecycle:
          preStop:
            exec:
              command:
              - wget
              - -qO-
              - http://localhost:9001/healthcheck/fail
        name: envoy
        ports:
        - containerPort: 8080
          hostPort: 8080
          name: http
          protocol: TCP
        - containerPort: 8443
          hostPort: 8443
          name: https
          protocol: TCP
        readinessProbe:
          failureThreshold: 3
          httpGet:
            path: /healthz
            port: 8002
            scheme: HTTP
          initialDelaySeconds: 3
          periodSeconds: 3
          successThreshold: 1
          timeoutSeconds: 1
        resources:
          limits:
            memory: 64Mi
          requests:
            cpu: 100m
            memory: 64Mi
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /config
          name: contour-config
      - args:
        - serve
        - --incluster
        - --xds-port
        - "8001"
        - --http-port
        - "8000"
        - --stats-port
        - "8002"
        - --envoy-service-http-port
        - "8080"
        - --envoy-service-https-port
        - "8443"
        - --ingress-class-name=contour-internal
        command:
        - contour
        image: gcr.io/heptio-images/contour:v0.14.0
        imagePullPolicy: IfNotPresent
        name: contour
        ports:
        - containerPort: 8001
          hostPort: 8001
          name: xds
          protocol: TCP
        - containerPort: 8000
          hostPort: 8000
          name: metrics
          protocol: TCP
        resources:
          limits:
            memory: 64Mi
          requests:
            cpu: 100m
            memory: 64Mi
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirstWithHostNet
      hostNetwork: true
      initContainers:
      - args:
        - bootstrap
        - /config/contour.json
        - --xds-port
        - "8001"
        - --admin-port
        - "9001"
        command:
        - contour
        image: gcr.io/heptio-images/contour:v0.14.0
        imagePullPolicy: IfNotPresent
        name: envoy-initconfig
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /config
          name: contour-config
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      serviceAccount: contour-internal
      serviceAccountName: contour-internal
      terminationGracePeriodSeconds: 30
      tolerations:
      - effect: NoSchedule
        key: spotInstance
      - effect: NoSchedule
        key: edge
      volumes:
      - emptyDir: {}
        name: contour-config
  templateGeneration: 1
  updateStrategy:
    rollingUpdate:
      maxUnavailable: 33%
    type: RollingUpdate

It worked for a while, then envoy lost gRPC connection:
[2019-07-26 14:39:34.267][1][warning][config] [bazel-out/k8-opt/bin/source/common/config/_virtual_includes/grpc_stream_lib/common/config/grpc_stream.h:101] gRPC config stream closed: 14, upstream connect error or disconnect/reset before headers. reset reason: connection failure
[2019-07-26 14:39:34.413][1][info][upstream] [source/server/lds_api.cc:66] lds: remove listener 'ingress_https'
[2019-07-26 14:39:34.469][1][info][upstream] [source/server/lds_api.cc:74] lds: add/update listener 'ingress_https'

investigation shows contour restarted - with kubectl logs -c contour -p showing:
time="2019-07-26T13:35:02Z" level=info msg=response connection=6 context=grpc count=1 error_detail=nil resource_names="[ingress_https]" response_nonce=7 type_url=type.googleapis.com/envoy.api.v2.RouteConfiguration version_info=7
time="2019-07-26T13:35:02Z" level=info msg=stream_wait connection=6 context=grpc error_detail=nil resource_names="[ingress_https]" response_nonce=2 type_url=type.googleapis.com/envoy.api.v2.RouteConfiguration version_info=2
W0726 14:39:33.851239       1 reflector.go:289] pkg/mod/k8s.io/client-go@v11.0.0+incompatible/tools/cache/reflector.go:94: watch of *v1beta1.Ingress ended with: too old resource version: 153445 (182755)
log: exiting because of error: log: cannot create log: open /tmp/contour.ip-10-50-176-240.unknownuser.log.WARNING.20190726-143933.1: no such file or directory

What did you expect to happen:
Contour should not crash
Anything else you would like to add:
Perhaps we should add the /tmp emptyDir mount to the example manifests?
Environment:

Contour version: 0.14 / Envoy 1.10
Kubernetes version: (use kubectl version): 1.13-eks
Kubernetes installer & version: eks
Cloud provider or hardware configuration: AWS - latest EKS optimized AMIs
OS (e.g. from /etc/os-release): Amazon Linux 2

Additional notes:
This is a fresh cluster provisioned on Friday, as you may notice taints are used for edge nodes, originally the edge nodes were provisioned with the wrong aws security group, after updating the security group configuration in the ASG launch template, it seems only 1 node was replaced (allowing things to work on Friday evening)
Over the weekend, the cluster-autoscaler had downscaled the edge nodes, keeping the older node (which was running the workload) with the incorrect security group..
The error message regarding /tmp is confusing, but might not have been the cause of my issue - I rotated the old node out (with new nodes which have the correct security group from the launch template) and after monitoring for 2 hours... everything seems to work (apart from  frequent envoy messages about losing connection to contour - even though they are in the same pod, sharing hostNetwork ...)

Same issue with 0.14.0 a few instances
2019-08-08T00:23:15.000 99s5 log: exiting because of error: log: cannot create log: open /tmp/contour.contour-large-58595f77db-8n6z2.unknownuser.log.WARNING.20190808-002315.1: no such file or directory
2019-08-08T00:23:15.000 99s18 W0808 00:23:15.829571       1 reflector.go:289] pkg/mod/k8s.io/client-go@v11.0.0+incompatible/tools/cache/reflector.go:94: watch of *v1beta1.IngressRoute ended with: too old resource version: 103335177 (103335598)
2019-08-08T00:23:15.000 99s18 log: exiting because of error: log: cannot create log: open /tmp/contour.contour-large-58595f77db-hbpr9.unknownuser.log.WARNING.20190808-002315.1: no such file or directory
2019-08-08T00:23:24.000 99s16 log: exiting because of error: log: cannot create log: open /tmp/contour.contour-medium-bc9f97c44-7qm84.unknownuser.log.WARNING.20190808-002324.1: no such file or directory
2019-08-08T00:23:24.000 99s16 W0808 00:23:24.687019       1 reflector.go:289] pkg/mod/k8s.io/client-go@v11.0.0+incompatible/tools/cache/reflector.go:94: watch of *v1beta1.IngressRoute ended with: too old resource version: 103335177 (103335600)
2019-08-08T00:23:25.000 99s20 W0808 00:23:25.023187       1 reflector.go:289] pkg/mod/k8s.io/client-go@v11.0.0+incompatible/tools/cache/reflector.go:94: watch of *v1beta1.IngressRoute ended with: too old resource version: 103335177 (103335600)
2019-08-08T00:23:25.000 99s20 log: exiting because of error: log: cannot create log: open /tmp/contour.contour-medium-bc9f97c44-9twrr.unknownuser.log.WARNING.20190808-002325.1: no such file or directory

I think 0.14.0 made the effort to get rid of glog, i see klog in the vendor directory, which appears to have the same link into flags. Does this still need to be forced to disable file based logging?
_ = flag.Lookup("logtostderr").Value.Set("true")

Ffs.

On 8 Aug 2019, at 11:13, Matthew Alberts<EMAIL_ADDRESS>wrote:
I think 0.14.0 made the effort to get rid of glog, i see klog in the vendor directory, which appears to have the same link into flags. Does this still need to be forced to disable file based logging?
_ = flag.Lookup("logtostderr").Value.Set("true")
—
You are receiving this because you modified the open/close state.
Reply to this email directly, view it on GitHub, or mute the thread.

I'm with you :)

I believe this would be you minimum patchset
diff --git a/cmd/contour/contour.go b/cmd/contour/contour.go
index 041cea2..da47ef3 100644
--- a/cmd/contour/contour.go
+++ b/cmd/contour/contour.go
@@ -24,9 +24,11 @@ import (
        "k8s.io/client-go/kubernetes"
        "k8s.io/client-go/rest"
        "k8s.io/client-go/tools/clientcmd"
+       "k8s.io/klog"
 )

 func main() {
+       klog.InitFlags(nil)
        log := logrus.StandardLogger()
        app := kingpin.New("contour", "Heptio Contour Kubernetes ingress controller.")

diff --git a/go.mod b/go.mod
index 0ff23d8..d4cff7a 100644
--- a/go.mod
+++ b/go.mod
@@ -39,6 +39,7 @@ require (
        k8s.io/client-go v11.0.0+incompatible
        k8s.io/code-generator v0.0.0-20190311093542-50b561225d70
        k8s.io/gengo v0.0.0-20190116091435-f8a0810f38af // indirect
+       k8s.io/klog v0.3.0
        k8s.io/kube-openapi v0.0.0-20190115222348-ced9eb3070a5 // indirect
        k8s.io/utils v0.0.0-20190607212802-c55fbcfc754a // indirect
        mvdan.cc/unparam v0.0.0-20190310220240-1b9ccfa71afe

given the internals of InitFlags
func InitFlags(flagset *flag.FlagSet) {

	// Initialize defaults.
	initDefaultsOnce.Do(func() {
		logging.logDir = ""
		logging.logFile = ""
		logging.logFileMaxSizeMB = 1800
		logging.toStderr = true
		logging.alsoToStderr = false
		logging.skipHeaders = false
		logging.skipLogHeaders = false
	})

	if flagset == nil {
		flagset = flag.CommandLine
	}

	flagset.StringVar(&logging.logDir, "log_dir", logging.logDir, "If non-empty, write log files in this directory")
	flagset.StringVar(&logging.logFile, "log_file", logging.logFile, "If non-empty, use this log file")
	flagset.Uint64Var(&logging.logFileMaxSizeMB, "log_file_max_size", logging.logFileMaxSizeMB,
		"Defines the maximum size a log file can grow to. Unit is megabytes. "+
			"If the value is 0, the maximum file size is unlimited.")
	flagset.BoolVar(&logging.toStderr, "logtostderr", logging.toStderr, "log to standard error instead of files")
	flagset.BoolVar(&logging.alsoToStderr, "alsologtostderr", logging.alsoToStderr, "log to standard error as well as files")
	flagset.Var(&logging.verbosity, "v", "number for the log level verbosity")
	flagset.BoolVar(&logging.skipHeaders, "skip_headers", logging.skipHeaders, "If true, avoid header prefixes in the log messages")
	flagset.BoolVar(&logging.skipLogHeaders, "skip_log_headers", logging.skipLogHeaders, "If true, avoid headers when opening log files")
	flagset.Var(&logging.stderrThreshold, "stderrthreshold", "logs at or above this threshold go to stderr")
	flagset.Var(&logging.vmodule, "vmodule", "comma-separated list of pattern=N settings for file-filtered logging")
	flagset.Var(&logging.traceLocation, "log_backtrace_at", "when logging hits line file:N, emit a stack trace")
}

`logging.toStderr` is defaulted to true

@mattalberts would you like to send a PR with your changes?

Sure can!
Sent from my iPhone

On Aug 8, 2019, at 12:29 PM, Steve Sloka<EMAIL_ADDRESS>wrote:
@mattalberts would you like to send a PR with your changes?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub, or mute the thread.

@stevesloka  I'll have the patch up shortly


fix(find): Use full path instead of real path to avoid symlinks

When a respository is in a symlink-ed path (eg: larger hard-drive for projects w/ small SDD for OS), calling nio.uv.fs_realpath will perform symlink resolution. https://github.com/nvim-neotest/neotest/blob/f6048f32be831907fb15018af2688ff6633704fc/lua/neotest/lib/file/init.lua#L233
Given the following scenario, nvim will run buffers with the home-dir path, instead of the resolved symlink path.
ln -s $HOME/projects /mnt/largehdd/projets
cd $HOME/projects/my_project
nvim .

Then, the following lua code will result on 2 different filenames.
local path_name = vim.api.nvim_buf_get_name(0) -- /home/me/projects/my_project/src/lib.rs
neotest.lib.files.path.real(path_name) -- /mnt/largehdd/projects/my_project/src/lib.rs

When sending the fully resolved symlinked path to a plugin, the path_name on the plugin will not match any of the path names of buffers, if they perform a search or use an external process.
This causes issues on rustaceanvim LSP-based test detection, which requires the file to be on the root of the LSP runner directory, and thus, the file_path sent is rejected.
This commit changes the login of neotest.lib.files.path.real to use the vim function for resolving the full path name, followed by an exists check, as there is 1 function usage that requires the error checking present.
Now, the following code is the same, and resolves the No tests found! when running :Neotest run file using rustaceanvim on a symlinked project folder (I know, niche...).
local path_name = vim.api.nvim_buf_get_name(0) -- /home/me/projects/my_project/src/lib.rs
neotest.lib.files.path.real(path_name) -- /home/me/projects/my_project/src/lib.rs

LGTM thanks for the PR!


LICENSE

Please add a LICENSE, so other people know, what they can, or can't do with the code.

I don't believe this repository contains any copyrightable code, only pure configuration files. However, adding a LICENSE file is no problem, so there you go.


The sponsor count badge doesn't show the correct count

Are you experiencing an issue with...
My own instance of shields
🐞 Description
My project has '7' sponsors, but the sponsor badge only ever shows '2'.

🔗 Link to the badge
https://img.shields.io/github/sponsors/ETLCPP
💡 Possible Solution
No response

The answer is in your screenshot. Of your 7 sponsors, 5 are private and 2 are public. We can only see and report public sponsors so we only know about the 2 public ones.


Nodepiece

Do not merge yet, docs and tests missing.

Just did a quick test on the Ethereum notebook's neighbor loader. Epochs went from ~2 sec to ~4 sec. I guess we need logic to not use regex unless using MAPs.
Additionally, the vertex loader's .data() method returned dataframes with numeric values as strings. Guess a bit of refinement is needed, and will make sure to run e2e tests as well.


Design decision template

Reviewer checklist

[ ] Test coverage: stack test --coverage
[ ] Public API documentation: stack haddock
[ ] Style conformance: stylish-haskell

The format looks nice, but I think there should also be a template that's not already filled out with example text.
Your suggestion for obsolete files is unclear - is adding an OBSOLETE prefix supposed to override the earlier decision that filenames should start with the date? If so, that should be mentioned, if not then the word "prefixed" is not an adequate description of how the filename should be modified.

@bmmoore I split this in two parts, the template itself, and the decision to have a template. I still found it useful to leave some text inside the template. Does that seem reasonable?


Owls 95632 - Automated upgrade of WKO 3.x with legacy auxiliary images config to auxiliary images 4.0

Changes to support both the runtime and manual conversion of 3.x auxiliary image configuration to "raw" serverPod init-container/volume configuration in a 4.0/v9-schema.

Uses conversion webhook to automatically upgrade 3.x/v8-schema auxiliary image to 4.0/v9-schema aux images.

Implements a new Webhook REST Server and the REST end-point conversion webhook.
Creates a new webhook deployment using REST endpoint of the conversion webhook as the entry point.
The conversion webhook deployment generates a self-signed CA certificate to be used in CRD.

Auxiliary image scripts modified to support both 3.x and 4.0 auxiliary images.
Changes to prevent pods from rolling when upgrading the Operator from 3.x to 4.0
Initial implementation of a standalone tool to manually convert v8 domain resource to v9 domain resource.
Latest Integration test results - https://build.weblogick8s.org:8443/job/weblogic-kubernetes-operator-kind-new/9284/ , https://build.weblogick8s.org:8443/job/weblogic-kubernetes-operator-kind-new/9287/ and https://build.weblogick8s.org:8443/job/weblogic-kubernetes-operator-kind-new/9288/.

@ankedia, just about to go through in detail... Here are some items that I'll be looking for (likely these aren't all addressed yet, but listing them now so that we can discuss):

The webhook deployment can handle having replicas > 1 (I would probably default to having 2 replicas)

Once you have 2 or more replicas then multiple webhook instances may be starting in parallel. They may each create a cert and try to update the CRD. One of them will "win" and update the CRD first. The other will get a HTTP 409 / Conflict. The "loser" should respond by reading the cert & key from whatever Secret where the winner stored it and using those values rather than the one that it had generated. Similarly, webhook instances started later should read the existing key/cert from the Secret. (The conflict might be on creating/updating that Secret rather than the CRD.)

The "uninstall" problem

After I uninstall the webhook, I expect that the CRD will be stranded so that Domain resources don't get deleted. There needs to be a way to reinstall the webhook, perhaps in a different namespace, and have this new installation of the webhook "know" that it is responsible for updating the CRD.

v8 fidelity

A 3.x operator (presumably 3.4) is running in a cluster where a 4.0 webhook has been installed. This operator will be reading and storing Domain resources as v8. Since the storage version is v9, the webhook will be converting Domains back and forth between v8 and v9 as the 3.x operator works. Are there any unexpected changes to the Domain when the 3.x operator reads it? There may not be an easy way to "restore" a Progressing status condition that existed.

@tbarnes-us , @russgold - I think I addressed your review comments. Please let me know if you have follow up comments or if the comments are resolved. Thanks.

I may have lost the comment - but I was thinking of error message WLSKO-0035, which seems to be shared by the operator and webhook cases - but refers to the operator location of the file?


Search saving not working with hotkeyboard CTRL + S

VSCode Version: 1.43.0
OS Version: Windows 7 x64

Steps to Reproduce:

Search something
"Open in editor"
A new search result will appear.
Press CTRL + S  to save
Nothing happens. (You have to go to File -> save in order to save the search)

Here's a gif

Does this issue occur when all extensions are disabled?: Yes

vscodebot

Thanks bot, but this isn't related to that issue.

My bad
I had an extension that overrided the CTRL + S shortcut.


Revamp Kedroids/champions program

Evidence markers

We know that people learn Kedro because someone else teaches it to them; therefore we believe that drawing people into the community will encourage them to share and promote Kedro more
We have also seen a growth in other users helping other users
For this to work, our Kedroids must become evangelists and promoters - we don't need help on community queries (our friendly community is always mentioned)

Perhaps we can show a clear path to what you get from contributing, and make it easier to do it, as a first step. So provide some template scripts for videos, encourage blog posts and linkedin posts and flag up easy issues that a contributor could tackle.

I agree these are good starting points (plus contributing plugins of their own and helping in #questions). We'd need them anyway for anything more sophisticated. The important thing is to be systematic about it and be tracking the success of these initiatives somehow.
Yesterday we got access to https://orbit.love/blog/announcing-orbit-champions-program-manager , it's something we can leverage.


tour: the line numbers done align correctly on a mobile device

Context: https://tour.golang.org

Mobile it's a little vague... I tried with firefox on Android and the line numbers are OK there. Which platform are you on?


[SPARK-11410] [PYSPARK] Add python bindings for repartition and sortW…

…ithinPartitions.

Merged build triggered.

Merged build started.

Test build #45147 has started for PR 9504 at commit 2ce6da8.

Test build #45147 has finished for PR 9504 at commit 2ce6da8.

This patch fails Python style tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test FAILed.

Test FAILed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/45147/
Test FAILed.

Title should have the [SQL] tag as well

@nongli
you can run the python test locally by python/run-tests --module pyspark-sql (take a look at -h to see the exact command)
before you run that, you need to build the assembly jar for Spark, e.g. sbt/sbt assembly/assembly

cc @davies

Build triggered. sha1 is merged.

Build started sha1 is merged.

Test build #45239 has started for PR 9504 at commit a63f552.

Test build #45239 has finished for PR 9504 at commit a63f552.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Build finished. 201 tests run, 0 skipped, 0 failed.

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/45239/

Build triggered. sha1 is merged.

Build started sha1 is merged.

Build finished. No test results found.

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder/45251/

LGTM

Since the last commit only updated the doc, I will merge this into master and 1.6 branch, thanks!


[study] Figure out how to print the minutes as pdf

No need to do any actual coding but research how it could be done and what library to use

React PDF provides good PDF creation tools to React. It gives tools to render the PDFs with PDFViewer component and a download link component for direct download without even rendering.
There is not a print dialogue action built into the library. We could use ReactToPrint for achieving this functionality with React PDF.
This is the Gemini AI suggested snippet for using the react-to-print here. There is also a live demo page for ReactPDF.
import { useReactToPrint } from 'react-to-print';

const { ref } = useRef();

const handlePrint = useReactToPrint({
  content: () => ref.current,
});

return (

      {/* Your React PDF component */}

  <button onClick={handlePrint}>Print</button>
);

I suggest we try this on tablebook. The second option is just to use the download link in React PDF. User can open the PDF with browser PDF tools when clicking on the downloaded PDF.


Auto Iterations buttons

It would be good to have a faster way to apply auto-iterate to one or all channels in deconvolution
So an Auto-Iterate All Channels button as well as individual buttons next to each channel
Something small and elegant such as a rounded square button with "Auto" or "Auto All" ?

JS, NC, DG, ND, ME zoom call on 12-Mar-2024:
Include in 2H2024 work


Publish on PyPi

Would it be possible to publish this package on PyPi to simplify and streamline the install process, so we could just run pip install bsdapi?

Will Pip's VCS integration work for you here?
pip install git+https://github.com/bluestatedigital/bsd-api-python

That could work in the short term, thanks!

this would still be great

if anyone is using pipenv, they'll want to do ```
pipenv install git+https://github.com/bluestatedigital/bsd-api-python?egg=bsdapi


python: iter infinitely yields on pointer classes to opaque structs

Closes #1553

#1823  👈
main

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

Join @Shoeboxam and the rest of your teammates on  Graphite

@mccalluc You probably thought transformations could be used as metric space tuples because this is a common code pattern in R.


fix: import order and strings

fixes import order and strings

@christiemolloy let's rebase main branch
Also remember to run yarn i18n after any strings changes. This will make build pass.


Extract file extension from signed urls in function getFileType

To get file extension dropify uses getFileType function, but some urls are signed, for example AWS, and the function getFileType can't extract the extension correctly.

For reference this is a duplicate of #91 so in the event of fixing one of the issues the other one can be closed as well.


The two POD networks are disconnected

Recently, I encountered a particularly strange problem.
I have a K3S cluster and recently added a new machine to the K3S cluster, but found that the POD network on two different machines could not connect.
I use the ping command on machine a to Ping the IP address of pod on machine B.Use the tcpdump tool to grab the packet

As shown, there is no Reply data
At the same time, I used the route -n to check, and found no exception

The K3s version of the machine in question is V1.20.2 + K3S1, and the K3s version of the other machines is V1.19.4 + K3S1
Is this problem caused by version inconsistency.How can I solve this problem.Looking forward to your reply. Thank you very much.

It is not generally recommended to run different versions of Kubernetes in the same cluster, except for briefly during an upgrade. Have you tried bringing both nodes up to the latest 1.20 release?

I adjusted the version to the same version.The problem is solved.Thanks


Test framework

@doanac @detsch This PR includes all I planned to add to the "test framework" during this initial implementation iteration.

I think it would be easier to introduce the test fixture utilities at the first and then do the test files.

I suppose it makes sense from the test case perspective, and a commit history will be cleaner. I will update PR accordingly. (I just wanted to justify the fixtures and how they evolutionary appears)

Perhaps adding a comment to the README.md mentioning how to execute the e2e tests locally would be helpful, which seems to be:
./dev-shell.sh
make test-e2e

Other then that, LGTM.

Perhaps adding a comment to the README.md mentioning how to execute the e2e tests locally would be helpful, which seems to be:
./dev-shell.sh
make test-e2e

It makes sense, I'll update the readme.

@detsch https://github.com/foundriesio/composeapp/pull/28/commits/6eca2756071f7d600ad1f2f4ff0227147a9b78c2

@detsch 6eca275

Looks good


Fix missing session token when fetching a _User

@gfosco @drew-gross
:warning: :warning: A BUG HAS BEEN INTODUCE TO MASTER!!!!!
This fixes it please merge ASAP. tests are failing...

Thanks! I was just about to look into this failure :)

Yeah, I was getting crazy while rebasing on the multiple-apps, and needed to cleanup my node_modules for some reason to make it appear...


🍒 Cherry pick PR #20553 to staging 🍒

🍒 Cherry pick https://github.com/Expensify/App/pull/20553 to staging 🍒

🚀 Cherry-picked to staging by https://github.com/OSBotify in version: 1.3.26-2 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

@Expensify/applauseleads please QA this PR and check it off on the deploy checklist if it passes.

🚀 Deployed to production by https://github.com/AndrewGable in version: 1.3.26-4 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

🚀 Cherry-picked to staging by https://github.com/AndrewGable in version: 1.3.28-2 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

@Expensify/applauseleads please QA this PR and check it off on the deploy checklist if it passes.

🚀 Deployed to production by https://github.com/AndrewGable in version: 1.3.28-5 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅


administrator rights

how to remove the prompt to run a file as administrator?

You can't.

You could use the fodhelper.exe bypass method.... message me on discord if you want to known more... shirmoris


KeyError: 'left'

Seeing the following error for one of my PDFs:
<IP_ADDRESS> - - [13/Feb/2024 14:05:43] "POST /api/parseDocument?renderFormat=all HTTP/1.1" 200 -
INFO:werkzeug:<IP_ADDRESS> - - [13/Feb/2024 14:05:43] "POST /api/parseDocument?renderFormat=all HTTP/1.1" 200 -
INFO:main:Parsing document: 6dbf73f5-9d13-4d29-b330-898e98d755c2.pdf
INFO:nlm_ingestor.ingestor.ingestor_api:Parsing application/pdf at /tmp/tmp4n1214e0.pdf with name 6dbf73f5-9d13-4d29-b330-898e98d755c2.pdf
INFO:nlm_ingestor.ingestor.ingestor_api:using pdf parser
testing.. {'parse_and_render_only': True, 'render_format': 'all', 'use_new_indent_parser': False, 'parse_pages': (), 'apply_ocr': False}
INFO:nlm_ingestor.ingestor.pdf_ingestor:Parsing PDF
INFO:nlm_ingestor.ingestor.pdf_ingestor:PDF Parsing finished in 109.6956ms on workspace
processing page:  0  Number of p_tags....  141
processing page:  1  Number of p_tags....  52
processing blocks in page:  1
error uploading file, stacktrace:  Traceback (most recent call last):
File "/root/nlm-ingestor/nlm_ingestor/ingestion_daemon/main.py", line 44, in parse_document
ingest_status, return_dict = ingestor_api.ingest_document(
File "/root/nlm-ingestor/nlm_ingestor/ingestor/ingestor_api.py", line 37, in ingest_document
pdfi = pdf_ingestor.PDFIngestor(doc_location, parse_options)
File "/root/nlm-ingestor/nlm_ingestor/ingestor/pdf_ingestor.py", line 35, in init
blocks, _block_texts, _sents, _file_data, result, page_dim, num_pages = parse_blocks(
File "/root/nlm-ingestor/nlm_ingestor/ingestor/pdf_ingestor.py", line 172, in parse_blocks
parsed_doc = visual_ingestor.Doc(pages, ignore_blocks, render_format)
File "/root/nlm-ingestor/nlm_ingestor/ingestor/visual_ingestor/visual_ingestor.py", line 117, in init
self.parse(pages)
File "/root/nlm-ingestor/nlm_ingestor/ingestor/visual_ingestor/visual_ingestor.py", line 562, in parse
self.json_dict = block_renderer.BlockRenderer(self).render_json()
File "/root/nlm-ingestor/nlm_ingestor/ingestor/visual_ingestor/block_renderer.py", line 347, in render_json
table_block["left"],
KeyError: 'left'
Sorry I'm unable to share the file. Updating the condition in block_renderer.py line 351 to check if "left" is in table_block has allowed me to get past this, but it's not clear to me if that's the best fix or not.

Have the same issue for some PDFs

Please pull from the main branch and let me know if the issue is still observed.

Seems to be fixed for me! Thanks


Pass :index option through to hidden field

Currently, if we call attachment_field(:image, index: 1), Refile omits the :index option when rendering the hidden field. This means the hidden field and file field are rendered with different names, e.g.:
<input type=hidden name=object[image] ...>
<input type=file   name=object[1][image] ...>

This is a bug.
The hidden field and file field need to render with identical name attributes in order for file upload to work properly. The name is generated by Rails based on certain options, so we need to make sure that both the field and file receive the same options, at least those options that affect the name. :index is one of those options.
This PR fixes this discrepancy by passing the :index option to the hidden field so that the output is correct:
<input type=hidden name=object[1][image] ...>
<input type=file   name=object[1][image] ...>

Nice :) Thank you! It seems like this is a solution to #335?
I'm not sure if there's any sensible way of testing this, some kind of regression test would be super nice, but maybe not absolutely required for me to merge this.

@jnicklas I've updated the PR and added a test. There wasn't yet a test for attachment_helper, so I added one that covers the :index scenario. I hope that is the right place to put it.

Ahh couldn't figure this bug out! Awesome really needed that fix, thanks +1

:+1: Fantastic, also really needed this.

Awesome :) Thanks!


CCPA Compatibility ?

Hello,
Thanks for the module, it looks great, You do not mention though CCPA Compliance, only GDPR's compliance is that something that is taken into account ? Is it compatible with CCPA?

Reopening as it was not answered


Fix for #501

#501

Thanks m8!
p.s
there is no need to open an issue explaining the problem and the open a PR, you can just open the PR, explain the issue that is being fixed and that's it :)


Support underscores in mpz for string input

Should work exactly as for int.  (Note that gmpy2 allows more permissible syntax.)

Give it to me, it is a simple string concatenation :)

Feel free to work on any issue.  But keep in mind, that it's not a simple string concatenation.

Maybe I'm underestimating it. Allow me to observe the behavior of gmpy2 to decide its behavior. At least it seems to be a string concatenation in int.

We should match int's behavior.

I have completed it, please let me prepare for the test.
>>> from gmp import mpz
>>> mpz('123_1231')
mpz(1231231)
>>> mpz('123_456_789')
mpz(123456789)


Proxy Support & Set emoji as favicon

Changes favicon to bouquet emoji, Fixes #65
Adds proxy support, if proxy implementation is verified on Etherscan, Fixes #54

BNB uses a proxy, you can use it to test by decoding an approval


Populate count from element data

I'm looking for a way to populate count directly through HTML.
Something like
<div class="share" data-facebook-count="2" data-pinterest-count="4"> etc.
Any ideas appreciated.. I don't really want to modify the jssocials.js to do this, but I think there is no other way?
It would be nice if there was some function I could override to achieve this.
Thanks a lot for any help!

I was able to figure it out based on the answer to another issue for opening a popup on click.
I just changed the _loadCount logic to return the count from the element's data. In case anyone is ever interested:

loadCount: function(share) {
var deferred = $.Deferred();
var cnt = this.$element.data('cnt').split(",");
        var idx = 0;
        if(share.share=="googleplus") idx =0;
        else if(share.share=="pinterest") idx =1;
        else if(share.share=="facebook") idx =2;
        else if(share.share=="twitter") idx =3;
        else if(share.share=="email") idx =4;

        return deferred.resolve(cnt[idx]).promise();
    },

Hi, what is the advantage / your use case for doing it this way?

Usually most people need only one share item, but I have a page with 15 of them.  It's a summary of other pages on my site that can be shared.  It doesn't make sense to let the client retrieve 5 different counts for 15 items, they will have to request 75 URLs.  That's a lot of load on mobile data for mobile users, and will slow everything down.  If I keep my own counts in my database, I can provide them with the page load and speed up the load time significantly.

Thanks for the feedback and sharing your use case. I'll consider having some mechanism to get shares count out of control.

Hi, I have two use cases for my Joomla! plugin that involves multiple buttons on a page:

Blog page that has the buttons on top, bottom and somewhere in the text
a overview page of blogs where on that page the buttons are placed below or in the displayed intro text of those listed blogs.

The difference between these two is that for 1. all counts should be the same as they count the actual page they are displayed at (the url for all button sets is the same). For 2 the counts are different as they do not display the counts of the page they are displayed on, but count the shares of the url they are pointing to.
What would be a performance gain (not sure if this is already implemented or not) would be for case 1 to only once retrieve the counts and then for every consequent placement of the buttons re-use these counts on that page. Some sort of caching of the counts for a specific url.
Here is an example of case 1: Multiple buttons on one page pointing to same url > https://www.lerendeleiders.nl/persoonlijk-leiderschap/464-nlp-de-weg-van-excellentie
and case 2: multiple buttons pointing to different url's > https://www.lerendeleiders.nl/
Hope this helps :)

@otterslide I have the same use case as yours. So did you finally manage to put all the counts in your database to retrieve them faster ?


Fix ODR-260 and provide solution for RHEL/CentOS 7 network setting failure issue

To fix ODR-260 and provide solution for RHEL/CentOS 7 network setting failure issue in some cases (apply to ODR-319).

ODR-260: RHEL/CentOS bootstrap failed to set network on D51 sometimes
Fix issue that T41 network setting won't take effective until we reboot OS manually after RHEL7/CentOS7 bootstrapping (part of ODR-319).

I tested this change with configuration of (RHEL7/CentOS7+T41), (RHEL7+D51). All network settings are good and it solved RHEL7/CentOS7 network related issues we have seen before.

well crap. -1 -1 -1 -1 -1 -1 -1
The issue that spawn this wasn't fixed by it in the real deployment. In fact, during deployment testing, the .ifname=0 (going back to trusting the old-style kernel names) showed inconsistent naming during installs: a few times eth0 got mapped to the first mez card, most other times it got mapped to the 2nd mez.
We need to revert this, since it will also mess up regression tests because of the name changes again.
@benbp can you do that directly, or does another PR need to be created with the change backed out?

@stuart-stanley a new PR has to be created, but there should be a revert button right above your comment that you can click to auto-generate that PR.

@benbp no such luck. (Though I'm now a collaborator instead of just a sympathizer now ;)


Procedures in package bodies are not indented correctly

Here is the original code:

package body A_MAIN_ASYNC_PKG is
    procedure wait_until(
        signal a : in boolean;
        b        : boolean
    ) is
	begin
		if (a /= b) then
		    wait until a = b;
		end if;
	end procedure wait_until;

end A_MAIN_ASYNC_PKG;

and here is how it gets formatted

package body A_MAIN_ASYNC_PKG is
    procedure wait_until(
        signal a : in boolean;
        b        : boolean
    ) is
begin
    if (a /= b) then
        wait until a = b;
    end if;
end procedure wait_until;

end A_MAIN_ASYNC_PKG;

As you can see all the lines starting from the keyword begin have been indented to the left for no reason. Here is how it should be formatted.

package body A_MAIN_ASYNC_PKG is
    procedure wait_until(
        signal a : in boolean;
        b        : boolean
    ) is
    begin
        if (a /= b) then
            wait until a = b;
        end if;
    end procedure wait_until;

end A_MAIN_ASYNC_PKG;

Fixed


Change SparNord integration to add support for Lægernes Bank

This adds support for correctly importing transactions from Lægernes Bank.
As Lægernes Bank is on the same technical backend as for example Spar Nord the existing Spar Nord integration only needed the bank ID for Lægernes Bank to correctly import transactions.
This integration is more than likely needed for correct import of transactions from all banks on the BEC backend (17 danish banks) so perhaps we should consider renaming the integration in bank-factory.js and under the banks folder.
The banks in question are as follows but as i don't have any way of testing each one only Lægernes Bank have been added in this PR:

Bank
Bank ID
Note

Nykredit
NYKREDIT_NYKBDKKK

Spar Nord   Bank
SPARNORD_SPNODK22
Covered in   original integration

Arbejdernes   Landsbank
ARBEJDERNES_LANDSBANK_ALBADKKK

Vestjysk   Bank
VESTJYSK_BANK_VEHODK22

Danske   Andelskassers Bank
DANSKE_ANDELSKASSERS_BANK_DANBDK22

Fynske Bank
FYNSKE_BANK_VESBDK22

Lollands   Bank
LOLLANDS_BANK_LOBADK21

Lægernes   Bank
LAGERNES_BANK_LAPNDKK1
Added in   this PR

Møns Bank
MONS_BANK_MONSDK21

PenSam Bank
PENSAM_PENFDK22

Merkur   Andelskasse
MERKUR_ANDELSKASSE_MEKUDK21

Hvidbjerg   Bank
HVIDBJERG_BANK_HVBADK21

Frørup   Andelskasse
FRORUP_ANDELSKASSE_FROPDK21

Andelskassen   Fælleskassen
ANDELSKASSEN_FALLESKASSEN_FAELDKK1

Faster   Andelskasse
FASTER_ANDELSKASSE_FAANDK21

Frøslev -   Mollerup Sparekasse
FROSLEV_MOLLERUP_SPAREKASSE_FRMODK21

As i've mentioned all these banks share a technical backend so it's highly likely they all need to be added to this integration at some point.

Lets leave the other banks to the folks that use them and hence can actually test the change.


Introducing PeepholeCombineArrayPush

Fixes issue #3212

Created Google internal issue b/130801558.
Assigning to @brad4d for review.

Overall this optimization doesn't strike me as a very useful one.
It's not likely that a human author would put a lot of array.push(), right next to each other,
so I'd think this would only be useful if other optimizations ended up putting them together, which
then allowed this optimization to do something useful. That also seems likely to be a rare thing to me.
Execution time is precious for large projects. Do you have a use-case in which the code size savings from this optimization will justify the time spent in looking for places where it can be done?

Overall this optimization doesn't strike me as a very useful one.

I agree. I was hunting for an issue to contribute to a compiler related project, and this one seems like a challenge that I would like to get started on, so I did it. It was marked help wanted and was commented as a good first issue, so I took it on, without a second thought. In retrospect, I probably should have considered the cost/benefit for the optimization.

Do you have a use-case in which the code size savings from this optimization will justify the time spent in looking for places where it can be done?

@dan1wang, can you help us to understand why do we want this optimization?

I think the optimization is useful only if the original array is pretty large. I don't know of a use-case where that's the case (I did find this ugly code, though: https://github.com/nemac/seldon/blob/master/areas.js).
I think it would be more worthwhile to address issue #3211 (string.concat & array.concat) because it's more likely one of the string/array is fairly large.

Sounds like we've agreed to close this PR.
@cshung thanks for submitting it anyway.
Hopefully you still found the experience a valuable one and can apply it to creating another?
:)

Hopefully you still found the experience a valuable one and can apply it to create another?

@brad4d Can you please recommend an issue that is good?

@cshung As it happens I've just been looking at #3343 which would probably be a good first PR.


UI for room invitations/removals

Details

Fixed Issues

$ https://github.com/Expensify/Expensify/issues/316180
PROPOSAL:
Tests/QA

You need the following accounts:

workspace creator account (workspace admin)
workspace member account
non workspace member account

Create a workspace with the workspace admin
Invite the workspace member
Created rooms with private/public/restricted visibility on the workspace
As the workspace admin, start a DM with the non workspace member.

As the workspace admin, navigate to the room. Click on the report header to open the report details.
Click on the "Members" option. Verify you're taken to the RoomMembersPage.
Click "Invite". Select both the workspace member's and non workspace member. Click "Invite". Verify you're taken back to the RoomMembersPage, and it has been updated to reflect the newly invited participant. Verify there is a room change log in the report that says "invited xxxx".
Select the people you just invited. Click "Remove". Verify a confirmation modal appears.
Click "Remove" on the confirmation modal. Verify that the RoomMembersPage has updated to reflect the removed participants.
Now mention both the workspace member and non workspace member in the room. Verify there is a room change log in the report that says "invited xxxx". Verify the room members are updated to reflect their invitation.
Select the people you just invited. Click "Remove". Verify a confirmation modal appears.
Click "Remove" on the confirmation modal. Verify that the RoomMembersPage has updated to reflect the removed participants.
Repeat 1-5 for all room visibilities.

PR Author Checklist

[x] I linked the correct issue in the ### Fixed Issues section above
[x] I wrote clear testing steps that cover the changes made in this PR

[x] I added steps for local testing in the Tests section
[x] I added steps for the expected offline behavior in the Offline steps section
[x] I added steps for Staging and/or Production testing in the QA steps section
[x] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
[x] I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

[x] Android / native
[x] Android / Chrome
[x] iOS / native
[x] iOS / Safari
[x] MacOS / Chrome / Safari
[x] MacOS / Desktop

[x] I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
[x] I followed proper code patterns (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
[x] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method

[x] If any non-english text was added/modified, I verified the translation was requested/reviewed in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I followed the guidelines as stated in the Review Guidelines
[x] I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] I verified that if a function's arguments changed that all usages have also been updated correctly
[x] If a new component is created I verified that:

[x] A similar component doesn't exist in the codebase
[x] All props are defined accurately and each prop has a /** comment above it */
[x] The file is named correctly
[x] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[x] The only data being stored in the state is data necessary for rendering and nothing else
[x] If we are not using the full Onyx data that we loaded, I've added the proper selector in order to ensure the component only re-renders when the data it is using changes
[x] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[x] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[x] All JSX used for rendering exists in the render method
[x] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG))

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
[x] I have checked off every checkbox in the PR author checklist, including those that don't apply to this PR.

Screenshots/Videos

Web
https://github.com/Expensify/App/assets/31285285/726b9f9d-4b3f-4759-92e0-e44af918f1b5

Mobile Web - Chrome
https://github.com/Expensify/App/assets/31285285/0e4e98a1-2147-425e-ae2a-7e66cc058eff

Mobile Web - Safari
https://github.com/Expensify/App/assets/31285285/3894c3f3-8a59-42dd-bbb4-9def4d0fa5ce

Desktop
https://github.com/Expensify/App/assets/31285285/78b91651-1403-44e6-8e2c-af5189c494e8

iOS
https://github.com/Expensify/App/assets/31285285/35e9d932-d9ba-4fba-9847-ed404149421b

Android
https://github.com/Expensify/App/assets/31285285/d2680766-e4af-4a4a-a6ba-8b2022d82097

TODO: reminder for myself to handle LHN custom last messages in the front-end for InviteToRoom and RemoveFromRoom change logs

Two bugs noticed so far:

When you invite users, they are not invited optimistically i.e. you have to wait for the server to see them in the members list
If you type a user that do not exist in the members page, an infinite skeleton is shown

When you invite users, they are not invited optimistically i.e. you have to wait for the server to see them in the members list

This used to work, but was changed because we got rid of participants under the report object. I've already created a followup to address this. Since there's a really tight deadline for this I think it's fine if we don't block on this for now.

If you type a user that do not exist in the members page, an infinite skeleton is shown

I'll look into this

Use the links below to test this build in android and iOS. Happy testing!

:test_tube::test_tube: Use the links below to test this build in android and iOS. Happy testing! :test_tube::test_tube:

android :robot:
iOS :apple:

https://ad-hoc-expensify-cash.s3.amazonaws.com/android/27966/index.html
https://ad-hoc-expensify-cash.s3.amazonaws.com/ios/27966/index.html

desktop :computer:
web :spider_web:

https://ad-hoc-expensify-cash.s3.amazonaws.com/desktop/27966/NewExpensify.dmg
https://27966.pr-testing.expensify.com

In the invite page i can see users that are already members
https://github.com/Expensify/App/assets/16493223/78370f54-5fc1-40ba-9474-0cef1d8efbca

Backend bug? The payload includes inviteeEmails

After removing the ws member and the non-ws member. I tried adding them by mention. But only the non-ws member is being added

Reviewer Checklist

[X] I have verified the author checklist is complete (all boxes are checked off).
[X] I verified the correct issue is linked in the ### Fixed Issues section above
[X] I verified testing steps are clear and they cover the changes made in this PR

[X] I verified the steps for local testing are in the Tests section
[X] I verified the steps for Staging and/or Production testing are in the QA steps section
[X] I verified the steps cover any possible failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[X] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)

[X] I checked that screenshots or videos are included for tests on all platforms
[X] I included screenshots or videos for tests on all platforms
[X] I verified tests pass on all platforms & I tested again on:

[X] Android: Native
[X] Android: mWeb Chrome
[X] iOS: Native
[X] iOS: mWeb Safari
[X] MacOS: Chrome / Safari
[X] MacOS: Desktop

[X] If there are any errors in the console that are unrelated to this PR, I either fixed them (preferred) or linked to where I reported them in Slack
[X] I verified proper code patterns were followed (see Reviewing the code)

[X] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick).
[X] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[X] I verified that comments were added to code that is not self explanatory
[X] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[X] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method
[X] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[X] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is approved by marketing by adding the Waiting for Copy label for a copy review on the original GH to get the correct copy.
[X] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[X] I verified the JSDocs style guidelines (in STYLE.md) were followed

[X] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[X] I verified that this PR follows the guidelines as stated in the Review Guidelines
[X] I verified other components that can be impacted by these changes have been tested, and I retested again (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar have been tested & I retested again)
[X] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[X] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[X] If a new component is created I verified that:

[X] A similar component doesn't exist in the codebase
[X] All props are defined accurately and each prop has a /** comment above it */
[X] The file is named correctly
[X] The component has a clear name that is non-ambiguous and the purpose of the component can be inferred from the name alone
[X] The only data being stored in the state is data necessary for rendering and nothing else
[X] For Class Components, any internal methods passed to components event handlers are bound to this properly so there are no scoping issues (i.e. for onClick={this.submit} the method this.submit should be bound to this in the constructor)
[X] Any internal methods bound to this are necessary to be bound (i.e. avoid this.submit = this.submit.bind(this); if this.submit is never passed to a component event handler like onClick)
[X] All JSX used for rendering exists in the render method
[X] The component has the minimum amount of code necessary for its purpose, and it is broken down into smaller components in order to separate concerns and functions

[X] If any new file was added I verified that:

[X] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[X] If a new CSS style is added I verified that:

[X] A similar style doesn't already exist
[X] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(themeColors.componentBG)

[X] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[X] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[X] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[X] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[X] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[X] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.
[X] I have checked off every checkbox in the PR reviewer checklist, including those that don't apply to this PR.

Screenshots/Videos

Web

https://github.com/Expensify/App/assets/16493223/b1499e45-8bc4-4031-b5c0-dce08d7bf880

Mobile Web - Chrome

Mobile Web - Safari

Desktop

https://github.com/Expensify/App/assets/16493223/7281cbcb-ea48-4dc5-a2c8-ac76d99cde84

iOS

Android

@s77rt can you complete checklist fully?

@Li357 finished it off for them

I'll complete the author checklist once Expensify/Web-Expensify/pull/38879 is deployed, need it to use the adhoc builds.

:test_tube::test_tube: Use the links below to test this build in android and iOS. Happy testing! :test_tube::test_tube:

android :robot:
iOS :apple:

https://ad-hoc-expensify-cash.s3.amazonaws.com/android/27966/index.html
https://ad-hoc-expensify-cash.s3.amazonaws.com/ios/27966/index.html

desktop :computer:
web :spider_web:

https://ad-hoc-expensify-cash.s3.amazonaws.com/desktop/27966/NewExpensify.dmg
https://27966.pr-testing.expensify.com

:hand: This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

🚀 Cherry-picked to staging by https://github.com/francoisl in version: 1.3.87-1 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
failure ❌

🕸 web 🕸
success ✅

@Expensify/applauseleads please QA this PR and check it off on the deploy checklist if it passes.

🚀 Cherry-picked to staging by https://github.com/francoisl in version: 1.3.87-1 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
failure ❌

🕸 web 🕸
success ✅

@Expensify/applauseleads please QA this PR and check it off on the deploy checklist if it passes.

🚀 Cherry-picked to staging by https://github.com/francoisl in version: 1.3.87-1 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
success ✅

🕸 web 🕸
success ✅

@Expensify/applauseleads please QA this PR and check it off on the deploy checklist if it passes.

🚀 Deployed to production by https://github.com/francoisl in version: 1.3.87-12 🚀

platform
result

🤖 android 🤖
success ✅

🖥 desktop 🖥
success ✅

🍎 iOS 🍎
failure ❌

🕸 web 🕸
success ✅

@fedirjh @jasperhuangg @Li357 can we please get a regression test for the regression it caused here?


chat context

The whole response object is getting inserted into chat context, only the message part should.

fixed in version 0.1.5


Auto Retry and onError calls unreliable on firefox

Question
I'm implementing tus js client on a website and I'm getting a strange behavior that the auto retries and onError calls on firefox are unreliable. The auto retry does not follow the specified timespans on the array, after that I tried removing the retries and just waiting for the onError call after connection loss but onError is never called. On Google Chrome, everything works fine, the retries happen and the onError call after all of them works too. I'm pretty sure that this is not a bug, but something on my implementation, since the demo page on the official tus.io website using tus js client works fine on my Firefox browser.  Any ideas on what to check to figure out what should be causing this issue?
This is the tus.Upload block from my application:
var upload = new tus.Upload(file, {
    endpoint: "http://my.website.com/tus-upload/",
    //retryDelays: [0, 1000, 3000, 5000],
    //this is commented out as I was trying to go directly to onError after internet loss
    metadata: {
        name: file.name,
        contentType: "application/offset+octet-stream"
    },
    onError: function (error) {
        if (window.confirm('Failed because: ' + error + '\nDo you want to retry?')) {
            upload.start();
            return;
        }
        console.log("Failed because: " + error)
    },
    onProgress: function (bytesUploaded, bytesTotal) {
        var percentage = (bytesUploaded / bytesTotal * 100).toFixed(2);
        console.log(bytesUploaded, bytesTotal, percentage + "% key:" + key)
    },
    onSuccess: function () {
    }
});

console.log(upload);
upload.start();

Setup details
Please provide following details, if applicable to your situation:

Browser: Firefox 67.0
Used tus-js-client version: 1.8.0-1
Used tus server software: tusdotnet

I would have two questions before digging further into this:

Can you supply exact steps to reproduce your problem?
Does this issue also arise when using https://master.tus.io/files/ as the endpoint?

Changing the endpoint does solve the problem! I thought it was something I was doing wrong with the JS client because of the different behavior across browsers, but now I think maybe it should have something to do with my endpoint.
About the exact step, I can't provide much of the code, but I think maybe the most important thing is that I use the File API to get the file, like this:
var entry = e.dataTransfer.items[i].webkitGetAsEntry();
e is the parameter from an addEventListener('drop') callback on a div.
And from the webkit entry I call file, and them call the tus upload.
entry.file(function (file) {
    var upload = new tus.Upload( file, ... );
    upload.start();
});

Changing the endpoint does solve the problem! I thought it was something I was doing wrong with the JS client because of the different behavior across browsers, but now I think maybe it should have something to do with my endpoint.

That could very well be the case. However, tus-js-client should be able to handle other tus servers as well, so it would be nice if we could find out what's happening. But you might also consider opening a support ticket for the tusdotnet server.

About the exact step, I can't provide much of the code, but I think maybe the most important thing is that I use the File API to get the file, like this:

I wasn't directly thinking about the code but rather what you are doing to trigger the onError callback and retry mechanisms? Are you disconnecting your machine from the network, for example?

About how I was triggering the error, I'm disconnecting the Ethernet cable on my computer, and the website with tus is running remotely. I'll see what I can do now and if the problem persists I will open a ticket on the tusdotnet github. Thanks for the help!

Ok, sound good. Let us know if you need any more help.

Closing this issue due to inactivity. Feel free to leave a comment if you want to continue the discussion :)


couchbase instrumentation doesn't not support?

NB: Before opening a feature request against this repo, consider whether the feature should/could be implemented in the other OpenTelemetry client libraries. If so, please open an issue on opentelemetry-specification first.
Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
Describe the solution you'd like
Is couchbase not supported in opentelemetry instrumentation implementation?
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Additional context
Add any other context or screenshots about the feature request here.

No there's currently no couchbase instrumentation AFAIK.
Instrumentation requests usually go to https://github.com/open-telemetry/opentelemetry-js-contrib - however it usually makes more sense for people who know couchbase to work on an instrumentation for it. Either by natively instrumenting that package, or by hosting a instrumentation package themselves, or in a third-party repository, away from the OTel Org.
https://github.com/open-telemetry/opentelemetry-js-contrib should be the last place to request an instrumentation being hosted as it hampers our ability to develop the OTel core modules, more info here.


Big blob of changes

@broxen when You have some time, please test this commit, it fixes/implements some much needed functionality ( client logout handling, PYR<->Quaternion conversion routines, logging filtering )

Awesome! I'll jump on this over the weekend.

Some testing on Fedora 26:
Summary:
Logging in with two clients, same user segs, different characters StrongDude and WeakDude
Resolved

Issue #93 Appears resolved
Issue #66 Tested new chat commands, along with intentional typos. Chat worked as designed! yay!
Issue with log output appears to be resolved (see below)

Open

Issue #30 Server crashed after logout with StrongDude, see console output below
Logged out entities still appear in the world. (Seen in the moments before server crash)
Issue #81 Ran around with StrongDude to test updates sent to other clients. Still experiencing errors with collision and position updating (rubberbanding and "jumping")
Issue #94 Entities still aren't updating rotation to reflect character direction. Other entities remain facing one direction.
Issue #85 is still active. Ctrl-C causes seg-fault
Issue #71 is still active. Client times out during log character creation.
Issue #95 is still active. Still able to log in to the same account twice

New Issue

Issue #130 Unhandled command event type 62 and Debug   : Not all bits were consumed which may be related (they appear together)

ToDo:

Issue #63 - Need to further test on Windows (which I'll do later tonight and make a second post)

Outputs and Logs
From Console. Output.log and Crash.log attached.
crash.log
output.log
$ ./authserver
Super Entity Game Server
http://segs.sf.net/
Copyright (c) 2006-2017 Super Entity Game Server Team (see Authors.txt)
This software is licensed! (See License.txt for details)

segs v0.4.0 alpha (The Real Beginning)
main
Debug   : Config file is missing 'location_addr' entry, will try to use default
Debug   : Config file is missing 'auth_pass' entry, will try to use default
Warning : Reading map data from ./data/bin/ folder
Debug   : Reading ./data/bin/costume.bin ... OK
Debug   : Reading ./data/bin/supergroupColors.bin ... OK
Debug   : Loading origins:
Debug   : Reading ./data/bin/origins.bin ... OK
Debug   : Reading ./data/bin/villain_origins.bin ... OK
Debug   : Loading classes:
Debug   : Reading ./data/bin/classes.bin ... OK
Debug   : Reading ./data/bin/villain_classes.bin ... OK
Warning :  All map data read
Warning :  Postprocessing runtime data ..  Hashes filled
(11453|140062135965440) Crypto seed 00000001
(11453|140062127572736) User segs trying to login from <IP_ADDRESS>.
		id : 64u
		 : succeeded
(11453|140062135965440) Client requesting server list
(11453|140062127572736) Client selected server 1!
(11453|140062119180032) create_cookie still needs a good algorithm.0x00000002
CLIENT VERSION 4
CharacterClient id: 2
CharacterClient slots: 8
(11453|140062147495680) Connection closed
 Telling map server to expect a client with character StrongDude,0
(11453|140061903419136) create_cookie still needs a good algorithm.0x0a00c007
1 - 0 - 1
	Sending create entity
	Sending create entity
Received cookie confirm a00c009 - 1
	Sending create entity
	Sending create entity
	Sending create entity
Received window state 11 - 4
// ...
Received window state 34 - 4
Debug   : MiniMapState tile  251  for player 0x7f62a00029b0
// ...
Debug   : MiniMapState tile  272  for player 0x7f62a00029b0
Received window state 0 - 2
// ...
Received window state 24 - 4
Debug   : MiniMapState tile  251  for player 0x7f62a00029b0
// ...
Debug   : MiniMapState tile  252  for player 0x7f62a00029b0
Debug   : MiniMapState tile  251  for player 0x7f62a00029b0
Received window state 18 - 4
// ...
Received window state 4 - 2
Console command received b test
Received window state 4 - 1
Received window state 4 - 2
Console command received broadcast test
Received window state 4 - 1
Received window state 4 - 2
Console command received broad test
Received window state 4 - 1
Received window state 4 - 2
Console command received l test
Received window state 4 - 1
Received window state 4 - 2
Console command received local test
Received window state 4 - 1
Received window state 4 - 2
Received window state 4 - 1
Received window state 4 - 2
Console command received loca test
Received window state 4 - 1
Received window state 4 - 2
Console command received localy test
Received window state 4 - 1
Received window state 4 - 2
Console command received broadcaster test
pressed
pressed
Debug   : MiniMapState tile  251  for player 0x7f62a00029b0
pressed
pressed
Received window state 7 - 2
Unhandled command event type 67
Debug   : Not all bits were consumed
(11453|140062135965440) Crypto seed 00000001
(11453|140062127572736) User segs trying to login from <IP_ADDRESS>.
		id : 64u
		 : succeeded
(11453|140062135965440) Client requesting server list
(11453|140062127572736) Client selected server 1!
(11453|140062119180032) create_cookie still needs a good algorithm.0x00000002
CLIENT VERSION 4
CharacterClient id: 2
CharacterClient slots: 8
(11453|140062147495680) Connection closed
 Telling map server to expect a client with character WeakDude,1
(11453|140061903419136) create_cookie still needs a good algorithm.0x0a00b3fe
1 - 0 - 1
	Sending create entity
	Sending create entity
	Sending create entity
	Sending create entity
	Sending create entity
Received cookie confirm a00b400 - 1
	Sending create entity
	Sending create entity
	Sending create entity
	Sending create entity
Received window state 11 - 4
// ...
Received window state 34 - 4
Debug   : MiniMapState tile  251  for player 0x7f62a0008cf0
// ...
Debug   : MiniMapState tile  272  for player 0x7f62a0008cf0
Received window state 0 - 2
// ...
Received window state 24 - 4
Debug   : MiniMapState tile  251  for player 0x7f62a0008cf0
// ...
Debug   : MiniMapState tile  251  for player 0x7f62a0008cf0
Received window state 18 - 4
Received window state 17 - 4
Received window state 16 - 4
Received window state 8 - 4
pressed
pressed
pressed
pressed
pressed
Debug   : MiniMapState tile  252  for player 0x7f62a00029b0
Debug   : MiniMapState tile  252  for player 0x7f62a00029b0
Debug   : MiniMapState tile  252  for player 0x7f62a00029b0
pressed
pressed
pressed
pressed
Received window state 4 - 1
Received window state 4 - 2
Console command received b test
Received window state 4 - 1
Received window state 4 - 2
Console command received l test
Received window state 20 - 4
Received window state 20 - 4
Received window state 20 - 4
Received window state 7 - 2
Received window state 20 - 4
Received window state 20 - 4
Received window state 20 - 4
Debug   : Unresponsive link
// ... there's probably about 30 of these
Debug   : Unresponsive link
Segmentation fault (core dumped)

@nemerle Testing on Windows 10:
Summary
Same setup. Two characters, same account, logged in simultaneously.
Same results all around. One notable difference in the output logs, which have some kind of formatting issue. Also there was no crash log when the server crashed after log out.
output.log
no crash.log available
One thing I noticed: Logging in with two separate accounts and logging out appears to work as intended. It's really when logging out with a character when BOTH clients are logged into the SAME account. This will be resolved by fixing #95.
Some screenshots


GH-39968: [Python][FS][Azure] Minimal Python bindings for AzureFileSystem

Rationale for this change
We want to use the new AzureFileSystem in pyarrow.
What changes are included in this PR?

Add minimal python bindings for AzureFileSystem. This includes just enough to run the python tests against azurite plus default credential auth to enable real use of this once this PR merges.
Adding additional configuration options and remaining authentication options can be done as a follow up.
I tried to copy the existing pybinds for GCS and S3
Explicitly set ARROW_AZURE=OFF rather than relying on defaults. The defaults are different for builds vs tests so this was causing tests to be enabled while Azure was disabled during the build.

Are these changes tested?
Enabled the the python filesystem tests for the new filesystem. I had to skip azure in a couple of the tests though because they are not yet working on the C++ side. I created Github issues to resolve these https://github.com/apache/arrow/issues/40025 and https://github.com/apache/arrow/issues/40026 and added TODO comments where relevant, that reference these Github issues.
Are there any user-facing changes?
pyarrow users can now use the native AzureFileSystem to get much better reliability and performance compared to adlfs based options.

Closes: #39968
GitHub Issue: #39968

We may want to update ci/scripts/python_*.sh/.github/workflows/python.yml too for PYARROW_WITH_AZURE in this PR. Or we can do it in a separated PR to keep this PR minimal.

I updated .github/workflows/python.yml and ci/scripts/python_sdist_build.sh. I think these are the only ones I missed in https://github.com/apache/arrow/pull/39971. Probably I missed them because GCS was disabled.

The MATLAB builds seem to be having issues. I don't think these can be related to my changes

Yes. MATLAB related failures are unrelated. Could you open an issue for it to ignore the failures in this PR?

@github-actions crossbow submit -g cpp -g wheel

Yes. MATLAB related failures are unrelated. Could you open an issue for it to ignore the failures in this PR?

Created an issue: https://github.com/apache/arrow/issues/40034

It looks like there are 2 CI failures:
appvayor: Build execution time has reached the maximum allowed time for your plan (90 minutes).
C++ / AMD64 macOS 12 C++ (pull_request): 97/97 Test #73: arrow-s3fs-test ..............................***Timeout 300.06 sec
I think both are unrelated to this PR

Can you check that this is actually tested in one of the CI python builds? I think right now it is being skipped in all the default builds here in PRs (and also if enabled, not sure if azurite is set up in those builds)

Yeah, pretty sure I missed this. It looks like Python CI test suites are all based on the conda build plus one mac OS build. I will enable Azure on these and install azurite.

I think I'm still going to need to install azurite on a couple of the builds. I'm just having a bad time trying to run the conda builds locally.

I assume you will have to add the Azure C++ SDK dependency to ci/conda_env_cpp.txt

I'm trying to work out these CI failures. I'm not 100% if they are related to my changes. They are all in conda builds which I have modified but the errors are all coming from installing gcs testbench and I can't reproduce the failures locally.

Can reproduce the CI failures locally with PYTHON=3.9 docker-compose build conda-python assuming conda and conda-cpp have been built first.
I can also reproduce this error on main.

All this conda build stuff is turning into a bit of a mess. I should have included it in https://github.com/apache/arrow/pull/39971. I think at this point its best if I start a new PR to handle conda builds separately.

Created https://github.com/apache/arrow/pull/40080 for the conda and other build stuff.

From my point of view this is ready to go. I'm confident the tests are running now as we can see logs for the tests that are currently skipped on Azure
SKIPPED [2] opt/conda/envs/arrow/lib/python3.10/site-packages/pyarrow/tests/test_fs.py:506: Not implemented yet in for Azure. See GH-40025

I see that some tests are skipped on macOS because azurite-blob cannot be found, is it expected?
https://github.com/apache/arrow/actions/runs/8068749515/job/22042241403?pr=40021#step:6:451

@github-actions crossbow submit -g python -g wheel

I see that some tests are skipped on macOS because azurite-blob cannot be found, is it expected?
https://github.com/apache/arrow/actions/runs/8068749515/job/22042241403?pr=40021#step:6:451

The same problem can be seen on the wheel builds, and potentially other builds.

I see that some tests are skipped on macOS because azurite-blob cannot be found, is it expected? https://github.com/apache/arrow/actions/runs/8068749515/job/22042241403?pr=40021#step:6:451

Its not expected to me. I had noticed it before (perhaps I should have mentioned it) but I assumed it was expected because it looks like the same problem exists for minio for S3 tests.

Summary of CI failures:
Related to my changes, that I need to fix:
Azure build is not enabled on fedora or debian but the tests are still running and unsurprisingly fail
https://dev.azure.com/ursacomputing/crossbow/_build/results?buildId=61513&view=logs&j=0da5d1d9-276d-5173-c4c4-9d4d4ed14fdb&t=d9b15392-e4ce-5e4c-0c8c-b69645229181&l=6032
https://dev.azure.com/ursacomputing/crossbow/_build/results?buildId=61512&view=logs&j=50a69d0a-7972-5459-cdae-135ee6ebe312&t=13df7b5c-76db-5c26-6592-75581a9ed64a&l=6087
I think unrelated, that I will not look into:
S3 test timeout https://github.com/apache/arrow/actions/runs/8084728188/job/22090642540?pr=40021
Looks like a problem introduced in the pandas nightly https://github.com/ursacomputing/crossbow/actions/runs/8083585629/job/22086967459
Something related to timestamp arrays https://github.com/ursacomputing/crossbow/actions/runs/8083584576/job/22086961342

I think unrelated, that I will not look into:

Indeed, those are all unrelated and happening on main as well

Perhaps we need to error out when PyArrow Azure testing is required and Azurite is not available?

I think ideally we still skip the tests if azurite is not available, even when you have an install that has AzureFileSystem available. At least for local testing I would prefer that. But our system of automatically skipping is not always great on CI when you don't notice all your tests are just being skipped ..

I think the fedora and debian builds should be fixed. Problem was because PYARROW_WITH_AZURE defaults to OFF but PYARROW_TEST_AZURE defaults to ON when ARROW_AZURE env var is not set. I have explicitly set ARROW_AZURE=OFF everywhere that it was not previously set to fix this.

@github-actions crossbow submit -g python -g wheel

There seem to be some new CI failures after rebasing. These look unrelated to my changes.
    def test_count_distinct():
        seed = datetime.datetime.now()
>       samples = [seed.replace(year=y) for y in range(1992, 2092)]

@Tom-Newton Leap year failures. This PyArrow test seems to fail on Feb 29. We should perhaps retry tomorrow to get a clearer view of the remaining issues :-)

Actually, you can rebase from main now that https://github.com/apache/arrow/pull/40288 has been merged

@github-actions crossbow submit -g python -g wheel

IIUC, currently the PyArrow Azure tests are only run on the Conda CI tests? This is not a blocker, but we should probably improve that later.
@jorisvandenbossche Can you give this PR another review?

IIUC, currently the PyArrow Azure tests are only run on the Conda CI tests? This is not a blocker, but we should probably improve that later.

Are you referring to the crossbow builds? I can probably make a follow up to enable Azure in more of those builds. As far as I can tell the only python tests in the normal CI are the conda ones.

As far as I can tell the only python tests in the normal CI are the conda ones.

No, there's also the macOS Python test and the AppVeyor test (though the latter does not seem to have run here for some reason).

there's also the macOS Python test

I think azurite and minio both need to be installed here.

I've just rebased after https://github.com/apache/arrow/pull/40455
@jorisvandenbossche when you get a chance please could you re-review. Sorry to be impatient, but I really want to start using this and I'm hoping it will be merged in time for the 16.0.0 release.

No need to apologize for the ping! ;)
I actually had re-reviewed the last code changes last week and everything looks good to me, forgot to comment that.
The conclusion from the last discussion just above about extra test builds to enable this (https://github.com/apache/arrow/pull/40021#issuecomment-1971476506) is that this can wait for later? Do we want to create a follow-up issue to add this to some additional non-conda builds?

After merging your PR, Conbench analyzed the 7 benchmarking runs that have been run so far on merge-commit 9f6dc1f.
There were 7 benchmark results indicating a performance regression:

Commit Run on ursa-i9-9960x at 2024-03-13 23:17:43Z

file-read (Python) with compression=uncompressed, dataset=nyctaxi_2010-01, file_type=parquet, output_type=table
dataset-selectivity (Python) with dataset=nyctaxi_multi_ipc_s3, selectivity=1%

and 5 more (see the report linked below)

The full Conbench report has more details. It also includes information about 2 possible false positives for unstable benchmarks that are known to sometimes produce them.

I'm not really sure what to make of this. These benchmarks do seem potentially relevant but all I've done is add a feature not modify anything so I don't see how this PR could have caused a regression.

I'm not really sure what to make of this. These benchmarks do seem potentially relevant but all I've done is add a feature not modify anything so I don't see how this PR could have caused a regression.

You can ignore all of them. I checked earlier today, and all are spurious spikes in the timings.
If this PR would actually have caused a regression, you would see that the later commits would also all be slower, which is not the case here: