Arrays With Named Axes

WIP

Tensor
The core idea is to have a wrapper around nd-arrays where dimensions are not referenced by integers but single-letter names instead:
TimeSeries = Tensor["T"]
Categories = Tensor["C"]

Features = Tensor["CT"]

Here TimeSeries and Categories are both 1-D arrays, however with incompatible dimensions. Features is a 2-D array:
>>> TimeSeries(np.array([1, 2, 3]))
Tensor<T=3>

>>> Categories(np.array([1, 2, 3]))
Tensor<C=3>

>>> Features(np.array([[4, 5, 6], [7, 8, 9]]))
Tensor<C=2, T=3>

When we operate on these tensors, we need to specify on which axes we want to operate on:
>>> feat = Features(np.array([[4, 5, 6], [7, 8, 9]]))

>>> feat.C[1]
Tensor<T=3>

>>> feat.T[:2]
Tensor<C=2, T=2>

>>> np.sum(feat, axis="T")
Tensor<C=2>

>>> np.sum(feat, axis="C")
Tensor<T=3>

Indexing
Further, it's possible to add an index:
>>> ts = TimeSeries(
    np.array([1, 2, 3]),
    index={"T": np.array(["a", "b", "c"])}
)

>>> ts.Ti[:"b"]
Tensor<T=2>

>>> ts.Ti[:"b"].index["T"]
array(['a', 'b'], dtype='<U1')

TensorFrame
A TensorFrame is a collection of Tensors, which can share dimensions:
>>> tf = TensorFrame(
    {
        "target": TimeSeries(np.array([1, 2, 3])),
        "feat": Features(np.array([[4, 5, 6], [7, 8, 9]])),
    },
    shared_dims="T",
)

>>> tf.shape
{'T': 3}

>>> tf.T[:2].shape
{'T': 2}

Some comments:

A better title would be “arrays with named axes” or something similar, since “representation” may be ambiguous I think (could be interpreted as “embedding space” which is totally unrelated to this)
It would be good to frame this proposal within the user experience (either the “model user” or the “model developer”, or both), to understand what issue this solves, or what this enables: as I understand it, this would make for a more structured and descriptive type for “data entries” (currently dictionaries), so I get that a lot of data manipulation would become much clearer, but in any case it should be articulated in the RFC description I think, maybe with examples from which to work backwards
np.ndarray already has a T attribute, see here, so we should be careful there. Maybe using extended names for the axes would be an option (“time”, “feature”, or any meaningful word for what an axis spans) but I’m not sure whether this would complicate things, for example about the indexing story
I didn’t completely get the TensorFrame example: what does the slicing operation return there? I though it would return some slice of the data, but a dictionary is displayed

A better title would be “arrays with named axes for storing data” or something similar, since “representation” may be ambiguous I think (could be interpreted as “mapping to an embedding space” which is totally unrelated to this)

Updated the title.

It would be good to frame this proposal within the user experience (either the “model user” or the “model developer”, or both), to understand what issue this solves, or what this enables: as I understand it, this would make for a more structured and descriptive type for “data entries” (currently dictionaries), so I get that a lot of data manipulation would become much clearer, but in any case it should be articulated in the RFC description I think, maybe with examples from which to work backwards

Agreed, let me work on this next.

np.ndarray already has a T attribute, see here, so we should be careful there. Maybe using extended names for the axes would be an option (“time”, “feature”, or any meaningful word for what an axis spans) but I’m not sure whether this would complicate things, for example about the indexing story

More meaningful descriptors probably help confusion, maybe we could have something like this:
data.ax.time[...]
# vs
data.T[...]

I didn’t completely get the TensorFrame example: what does the slicing operation return there? I though it would return some slice of the data, but a dictionary is displayed

I think this is a typo, let me fix it.

To expand on the TensorFrame: The idea is to be able to handle multiple arrays which share common axis. So If I select the first n elements on the T axis, I slice all underlying arrays accordingly:
TimeSeries = Tensor["T"]

A = Tensor["TC"]
B = Tensor["CT"]

target = TimeSeries(np.array([1, 2, 3, 4]))

a = A(
    np.array(
        [
            [5, 6],
            [7, 8],
            [9, 10],
            [11, 12],
        ]
    )
)

b = B(np.array([["a", "b", "c", "d"], ["e", "f", "g", "h"]]))

tf = TensorFrame({"target": target, "a": a, "b": b})

tf2 = tf.T[:3]

tf2.get("target").values == [1, 2, 3]
tf2.get("a").values == [[5, 6], [7, 8], [9, 10]]
tf2.get("b").values == [["a", "b", "c"], ["e", "f", "g"]]

Is this relevant? https://xarray.pydata.org/en/stable/index.html

To expand on the TensorFrame: The idea is to be able to handle multiple arrays which share common axis. So If I select the first n elements on the T axis, I slice all underlying arrays accordingly:

One may need to also bundle arrays that do not share any axis. For example, static features do not have a time axis: in this case, I guess, slicing the TensorFrame along the time dimension should yield something that has the same “features” field as the original object.

Is this relevant? https://xarray.pydata.org/en/stable/index.html

Might be, but I didn't find it intuitive to use. Something I found with pandas is that it is incredibly slow compared to numpy -- xarray might share the same fate.

To expand on the TensorFrame: The idea is to be able to handle multiple arrays which share common axis. So If I select the first n elements on the T axis, I slice all underlying arrays accordingly:

One may need to also bundle arrays that do not share any axis. For example, static features do not have a time axis: in this case, I guess, slicing the TensorFrame along the time dimension should yield something that has the same “features” field as the original object.

Yes, but I haven't implemented these static fields yet. I think pandas supports something similar where you have properties.

I've added code for Tensor here: #1877

My feeling is that instead of named axes the DL community has moved to adapt einsum/einops type notations for tensor operations

I've done some further work on this.
My rework of the evaluation "just works" using Tensors instead of arrays without any code changes to the evaluation code:
TimeSeriesBatch = Tensor["n", "time"]
TimeSeriesSampleBatch = Tensor["n", "sample", "time"]

actual = TimeSeriesBatch([[1, 2, 3, 4], [5, 6, 7, 8]])

forecast = TimeSeriesSampleBatch(
    [
        [
            [1, 1, 1, 1],
            [2, 2, 2, 2],
        ],
        [
            [5, 5, 5, 5],
            [6, 6, 6, 6],
        ],
    ]
)

ev = Evaluator([AbsTargetSum(), ND()])
result = ev.apply({"target": actual}, forecast)

print(result.aggregate("time").select())
print(result.aggregate("n").select())

prints:
{'abs_target_sum': Tensor<n=2>, 'ND': Tensor<sample=2, n=2>}
{'abs_target_sum': Tensor<time=4>, 'ND': Tensor<sample=2, time=4>}

--
Further, I think this should simplify our transformation code.
For example, we can go from this:

@dataclass
class AddAgeFeature(MapTransformation):
    target_field: str
    output_field: str
    pred_length: int
    log_scale: bool = True
    dtype: DType = np.float32

    def map_transform(self, data: DataEntry, is_train: bool) -> DataEntry:
        length = target_transformation_length(
            data[self.target_field], self.pred_length, is_train=is_train
        )

        age = np.arange(length, dtype=self.dtype)

        if self.log_scale:
            age = np.log10(2.0 + age)

        data[self.feature_name] = age.reshape((1, length))

        return data

to
@dataclass
class AddAgeFeature(MapTransformation):
    output_field: str
    log_scale: bool = True
    dtype: DType = np.float32

    def map_transform(self, frame: TensorFrame) -> TensorFrame:
        age = np.arange(frame.shape["time"], dtype=self.dtype)

        if self.log_scale:
            age = np.log10(2.0 + age)

        frame[self.output_field] = TimeSeries(age)

        return frame

reducing the complexity significantly.


Add adjustable perfromance factors and a settings page

Perf factors for calculation should be adjustable for the user

Closed with this PR


dataset download stats

Previously we have only shown a total and a list of individual downloads. It seem to be a recurring feature request to have different ways of couting this data.
suggestions

downloads pr country/year/months/ (user requested) - I'm guessing downloads pr country is easier now that users are no longer in Drupal
Frequently used filters
available as csv (user request)
slightly off topic - dataset page seen x times from y countries (user request)
Altmetrics - we spend quite sometime discussing it at some point (requested by dnoesgaard and rdmpage) - but if I understood @dnoesgaard this isn't too interesting anymore? Their terms had changed?

inspiration
VertNet as the poster child https://github.com/gbif/portal16/issues/138#issuecomment-325769662
related issues
time filtered: https://github.com/gbif/portal-feedback/issues/492
altmetrics https://github.com/gbif/portal16/issues/245
time and location and terms https://github.com/gbif/portal16/issues/138#issuecomment-322545546

requires API changes. See https://github.com/gbif/occurrence/issues/46


CAMEL-16470 : fix for reuse EntityManager

Fixed test + added new test to verify Map behaviour

The build failure doesn't seems to be related with my change i guess?

Yes, this has been fixed. Please rebase on master and push and it should go away.-

Can you do a git pull --rebase origin master? The tree is dirty in this way. Thanks.

Done, does the tree look okay now ?

It seems not. I'll have a look while merging.

I can make a new pull request from scratch if you want


Switched delete() to use object rather than id, allowing for queries …

…to be passed in.

 Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.:x: Laptopmini sign nowYou have signed the CLA already but the status is still pending? Let us recheck it.

Oops, opened by mistake.


Address registry

[synthetix-v3]: [@synthetixio/buyback-snx]: Error: could not download cannon package data from "QmfDgnQyUNCkKg9amftCFiE4AyPt933dbCkU3rAGWDJ5mV": AxiosError: Request failed with status code 502


flashrom: build fail

I may need this in some time; to get a custom bios rom into one of my computers. Build does not work on my end.
flashrom-2021-04-23-10:37-10385.LOG
@ioraff

I'm no longer maintaining this @dilyn-corner

Builds fine for me (after disabling Werror, clang must be more strict than gcc here...).
Your problem is probably with this line:
Checking for libpci headers... Checking for FTDI support... not found.
Are you sure pciutils is installed?

Yes I do.

@dilyn-corner @ioraff Ok, never mind guys. Sorry for bother it works. I just had to reinstall pciutils for some reason. Well happens sometimes...

Strange. If this happens again (specifically for this package but in general for any package), seeing kiss-manifest pciutils would be nice, as well as the output of something like pkg-config --libs libpci.
Additionally, flashrom runs a test for libpci in the usual way; seeing the output of $(BUILD_DETAILS_FILE) in the failed build would identify what exactly went wrong, as it doesn't use pkgconf for the check - it compiles a test program and tees the output to this.

@dilyn-corner There may be one thing that is special about the computers I run, I have a script which makes the whole system run in tmpfs with no hard drive. See here: https://github.com/kyx0r/klec/blob/master/shell/migr . This way I don't have to invest in extra hardware. But there is one caveat to this that techically tmpfs is not a real filesystem, it's a swap and it has no real block device backing it also. So I've noticed that after rootfs migration like that some files loose the chattr attributes, not sure if this has effect or not. But I still have the system previous state stored on real harddrive so I can inspect this problem again.

@dilyn-corner
Here is what output of kiss-manifest pciutils looked like:
manifest_afterreinstall.LOG
manifest_prev.LOG

And running pkg-config --libs libpci
gives
/ pkg-config --libs libpci
Package libpci was not found in the pkg-config search path.
Perhaps you should add the directory containing `libpci.pc'
to the PKG_CONFIG_PATH environment variable
Package 'libpci', required by 'virtual:world', not found
after reinstall it prints
-lpci

It maybe it was messed up because a few month's ago I was building chromium build, which had build problems, see the issue here https://github.com/kiss-community/repo-community/issues/53

What a very neat system idea! I love it.
Looks like the former version you had didn't actually have the pkgconf file or the headers - very hard to build things when that happens. Not sure why that would happen (though I have a few ideas).
This could probably be related to your chromium issues as well. Figuring out what's up would basically just take a lot of debugging, log checking, and reproducing on your part. Keep letting me know if you hit these types of walls!

flashrom.LOG
Here is the output of sh -x $(which kiss) b flashrom >file 2>&1
Not sure if you can make out anything useful out of it, but I might as well run all my updates and installs though this in the future just in case. @dilyn-corner


Regression in 0.91.0 in Layout/RescueEnsureAlignment

Previously this was valid:
    request_model = begin
                      'something'
                    rescue StandardError => e
                      return 'other stuff'
                    end

But now after upgrading to 0.91.0 this trips: Layout/RescueEnsureAlignment
Possibly due to changes https://github.com/rubocop-hq/rubocop/pull/8628/files#diff-e066e4a443e8fb75fe62f10fef9c6866R24

This issue is a dup with #8710 and resolved by #8719. Please wait a moment for the next release. Thank you for the feedback.

I'm still seeing this with RuboCop 0.91.1.

@mvz I cannot reproduce this issue with RuboCop 0.91.1. Can you provide the issue code?

@koic here's a simple reproduction:
foo.rb:
# frozen_string_literal: true

foo = begin
        bar
      rescue StandardError
        baz
      end

qux foo

.rubocop.yml:
AllCops:
  NewCops: enable

Output:
$ rubocop foo.rb
Inspecting 1 file
W

Offenses:

foo.rb:5:7: C: Layout/RescueEnsureAlignment: rescue at 5, 6 is not aligned with foo = begin at 3, 0.
      rescue StandardError
      ^^^^^^
foo.rb:7:7: W: Layout/BeginEndAlignment: end at 7, 6 is not aligned with foo = begin at 3, 0.
      end
      ^^^

1 file inspected, 2 offenses detected, 2 offenses auto-correctable

RuboCop version info:
0.91.1 (using Parser <IP_ADDRESS>, rubocop-ast 0.5.0, running on ruby 2.7.1 x86_64-linux)

I get the same result with the following .rubocop.yml:
Layout/BeginEndAlignment:
  Enabled: true

@mvz I get it. The default configuration for Layout/BeginEndAlignment is EnforcedStyleAlignWith: start_of_line. You can get the expected behavior by setting alternative EnforcedStyleAlignWith: begin to your .rubocop.yml.
Layout/BeginEndAlignment:
  Enabled: true
  EnforcedStyleAlignWith: begin

https://docs.rubocop.org/rubocop/0.92/cops_layout.html#layoutbeginendalignment

@koic Thanks for looking into this. Changing the EnforcedStyleAlignWith to begin works for me!
I'm a little confused by the difference in default settings between Layout/BeginEndAlignment and Layout/EndAlignment, but that's another issue.


Bump nokogiri from 1.11.4 to 1.12.5

Bumps nokogiri from 1.11.4 to 1.12.5.

Release notes
Changelog
Commits

updated-dependencies:

dependency-name: nokogiri
dependency-type: indirect
...

Signed-off-by: dependabot[bot]<EMAIL_ADDRESS>

go for it.


vm::Thread leaks arrays on the VM stack on errors

Tangential to #40, the interpreter leaks any arrays stored in local variables when it exits with an error. Global and instance member arrays are also never freed when vm::World or an instance is dropped. Much of this will be solved along with #40 by implementing Drop for vm::Value.
However, things are further complicated by the way vm::Thread's stack of registers works- only the compiler knows what type of value each register stores, and that information is not preserved except in the way generated bytecode releases local variables on normal script returns. This makes for a simpler VM, where instructions can just assume the type of their register operands and overwrite them at will without dropping whatever was there before.
I can see two reasonable ways to address this:

Exception-like stack unwinding, so that when an error is "thrown" the interpreter can execute cleanup blocks in the bytecode.
GC-like stack maps, so that when the interpreter exits it can find arrays on the stack and drop them.

Both of these tie into features that GM:S added to GML eventually, which we may thus want to add for their own sake. They also have some implementation overlap with each other.
But on the other hand this is not a big deal yet because nothing really tries to recover from script errors. I had hoped to avoid any kind of stack walking or unwinding for a while, but once that changes this will need a solution.

After #45, global and instance member arrays are freed correctly. However, stack values will become a real problem once the interpreter becomes reentrant, as this will enable engine APIs to recover from errors. We won't need this capability (at first?) but it would be nice to avoid such a hidden expectation on engine APIs.
Fortunately, there may be a much simpler solution than the two proposed above, inspired by #46. There, iterator registers "borrow" from a parallel stack of RcVec<Entity> entries, which can be safely popped as the program completes each with loop.
Here, GML value registers would "borrow" from a parallel stack of vm::Value entries, which could be safely popped as the program returned from each function. This is slightly more complicated- unlike with iterators, the values themselves do not follow a strict stack discipline, nor is there even a statically-knowable number of them.
Each function call (or other program span where array values can be known to die?) would save the current stack size on entry and truncate the stack back to that size on exit. Any instruction sequence creating an array (using a call or ToArray op) would push it onto the stack, and then either leave it there (if stored in a local var) or pop it (if stored in a global or instance member).
This also has two side benefits: Immediately, it removes the need for Release ops in the function epilogue, shrinking the live ranges of all local vars! Longer term, it gives us a straightforward way to control exactly where copy-on-write array refcounts are modified.


feat: update project to Angular v17

Hi! I found your lib and I think it deserves being fresh. :) As I currently need it to be compatible, this PR updates to Angular 17. Once merged and published to npm, I can update to 18.

Updated dependencies to Angular v17
Updated polyfills usage to the new format
Refactored code to comply with new ts checks

Due to lack of response, I made a fork. Updated the project to v18

@bartadaniel Sorry for the late response and thank you for your contribution. Since now, library has been migrated to Angular v19.

hi @dmytro-parfenov! Glad you're back! Do you anticipate having the time to maintain the project? I am open to discontinue my fork, however, I must make sure this lib stays up-to-date and will not block an update on my side in the future. Are you open to accept maintainers for this project, in case your availability changes? Also, in my fork I made a change in ngxResizeAspectRatio as I had some issues on how it was before. I don't really remember the specifics though.

Hi! Yes, I am going to maintain the project, at least by keeping actual Angular version. Sure, will accept maintainers in case I am busy.
It would be nice if you could recall what was changed with ngxResizeAspectRatio 😉


Nuxt won't compile with npm run dev

Version
v2.4.3
Reproduction link
https://github.com/nuxt/create-nuxt-app
Steps to reproduce
Install Nuxt (I've tried both stable and edge versions): npx create-nuxt-app pretty
— A. Select all features (PWA support, linter, prettier, axios)
— B. No custom ui framework
— C. No test framework
— D. Rendering mode: universal
After installing, the prompt to run npm run dev appears (after cd into proper directory). After running that, this error is produced:
ERROR  custom keyword definition is invalid: data/errors should be boolean
at Ajv.addKeyword (node_modules/ajv/lib/keyword.js:65:13)
at module.exports (node_modules/ajv-errors/index.js:10:7)
at Object. (node_modules/schema-utils/src/validateOptions.js:22:1)
at Module._compile (internal/modules/cjs/loader.js:721:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:732:10)
at Module.load (internal/modules/cjs/loader.js:620:32)
at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
at Function.Module._load (internal/modules/cjs/loader.js:552:3)
at Module.require (internal/modules/cjs/loader.js:657:17)
at require (internal/modules/cjs/helpers.js:22:18)
What is expected ?
Nuxt to build.
What is actually happening?
Nuxt is not building.

This bug report is available on Nuxt community (#c8633)

Looks like the ajv package is breaking in webpack, per this issue: https://github.com/webpack/webpack/issues/8768
Looks like there is a pull request with a fix in place: epoberezkin/ajx$943
If you can't wait for the fix to make it upstream, some people have had luck following this comment:
https://github.com/webpack/webpack/issues/8768#issuecomment-462090847

As @rideron89 said.
A fix has been published. yarn upgrade / npm update or nuking lock files + node modules should resolve the issue.


Add "how many bidders" question to FAQ

We should add advice on "how many bidders question" to the FAQ:
https://github.com/prebid/Prebid.js/issues/897
http://prebid.org/dev-docs/faq.html
Also should we consider moving FAQ to the top navigation so it's easier to find?
@rmloveland

@mkendall07 updated the FAQ with this - also added a link to the issues tagged 'question' so people can check those out while we build out the FAQ


Add Azure Device Update code to main

/azp run c - client - tests

The line coverage for ADU is pretty great. For branch coverage though, other IoT code has set a much higher bar (80%+) :)

Consider adding some edge case tests in the future to improve code coverage (file an issue to track it). At a quick glance, many of the uncovered branches aren't functionally relevant at the moment, or are about invalid/incomplete JSON reading/writing:
https://dev.azure.com/azure-sdk/public/_build/results?buildId=1980826&view=codecoverage-tab

There are a couple places that could benefit from unit tests though, unless those branches are unreachable:

@ahsonkhan We can definitely look to get some of those numbers up. Branches might be tough because of the complexity of the JSON but we can do the simpler ones for sure.


Frontend Runtime Environtment Variables

currently there is no way aside from rebuilding the image to inject environment variables that nextjs will actually respect at runtime, they have to be supplied at build time.
this PR adds a package to help handle this
https://github.com/expatfile/next-runtime-env/tree/development

example kube deployment:
frontend container
 containers:
        #frontend
        - name: frontend
          #image: artifactory.stackav.io/docker/buildbarn/bb-portal-frontend:54bf0ca0c0564ce688a8c29ed462e9a54c3e7cd6
          image: artifactory.stackav.io/docker/eie/buildbarn/frontend:v2.0.1
          imagePullPolicy: Always
          ports:
            - containerPort: 3000 #http
          volumeMounts:
            - mountPath: /data
              name: data
            - mountPath: /app/.env
              subPath: .env
              name: config

...volumes
 volumes:
        - name: data
          persistentVolumeClaim:
            claimName: bb-portal
        - name: config
          configMap:
            name: bb-portal-env

config map
apiVersion: v1
data:
  .env: |
    NEXT_PUBLIC_BES_BACKEND_URL=https://bb-portal.dev.stackav.io
    NEXT_PUBLIC_BES_GRPC_BACKEND_URL=grpcs://bbportal.dev.stackav.io
    NEXT_PUBLIC_BROWSER_URL=https://build.stackav.io
    NEXT_PUBLIC_COMPANY_NAME="Stack AV"
    NEXT_PUBLIC_COMPANY_SLACK_CHANNEL_NAME=DevEx
    NEXT_PUBLIC_COMPANY_SLACK_CHANNEL_URL=https://stackav.enterprise.slack.com/archives/C052XMYNDLN
kind: ConfigMap


Add OpenCV Confidence level

Adds in a Set Confidence keyword. This confidence level is used internally when the library locates images on screen. Only applies when OpenCV is installed and can be turned off.

Thank you for the pull request!

Just one question, why did you decided to not to implement it also on per keyword basis? Like you did on the start, but then you removed it, why?
Example:
    ${loc}=  Wait For  image.png  confidence=0.5

@matejc That's actually a pretty good question, haha. It's been a while since I did that; I kind of wondered the thing when I created the pull request. After playing with it again though, I'm pretty sure my reason was because I found that if I had to set the confidence to something for one keyword, I was usually setting it to the same value on all subsequent keywords in the same script. So, instead of having the confidence set to something on every keyword, I went for the global solution.
That being said, it really wouldn't hurt to have it implemented on a per keyword basis either. I did the global setting of it because it was better for my usecase at the time, but I can totally see how having it per keyword would also be really handy. Now that it's already in there, it should be a little easier to to do that, too.


Yum Checksum Issue When Updating libselinux

I'm using this project to establish a test container before we rebuild it using our own foundation images. During a docker build of master I was unable to get past updating libselinux.
Rpmdb checksum is invalid: dCDPT(pkg checksums): libselinux-utils.x86_64 0:2.0.94-7.el6 - u

The command '/bin/sh -c yum update -y libselinux' returned a non-zero code: 1

I found my answer on another project.  It worked here. Simply add yum clean all after every yum install or yum update.
Relevant bits of my Dockerfile...
 # install dev tools
-RUN yum clean all; \
-    rpm --rebuilddb; \
-    yum install -y curl which tar sudo openssh-server openssh-clients rsync
+RUN yum clean all \
+    && rpm --rebuilddb \
+    && yum install -y curl which tar sudo openssh-server openssh-clients rsync \
+    && yum clean all \
+    && yum update -y libselinux \
+    && yum clean all
+
 # update libselinux. see https://github.com/sequenceiq/hadoop-docker/issues/14
-RUN yum update -y libselinux
+# RUN yum update -y libselinux

My issue is resolved, only posting here in case someone else runs across it too.

It solved my issue too. Thanks!

Thanks for your kindly recording！ It solved my issue too.

Thanks solved mine too


Replace red on category badges

The crate version badges are colour-coded such that post-1.0 (which we can loosely interpret as “good”) is blue, and pre-1.0 (“bad”) is orange. Given that colour scheme, all those red category badges make me think something bad is going on. This PR replaces them with light grey ones.

Thanks! I agree red is not the right color.
For me the white-on-lightgrey text is much harder to read though.

What is your opinion of something like this?

Absolutely, or even just a simple link, which I imagine would improve accessibility.

I merged this with the uncolored style in a1426c3bb79a6fdb68021d1ffdea053a6abec21b.


feat: support x-enum-varnames

closes #731

didn't run test locally, something with my env didn't work

@all-contributors please add @chiptus  for code

@chiptus Thanks a lot for taking up this ticket, looks fine so will merge this later today 👍🏼 .
Since v2 we are using changesets so could you run: pnpm run changeset and follow those steps there to add a changeset?
Thanks


indented-code-blocks no syntax highlighting

Describe the bug
I noticed that the hover module has some logic to handle in_codeblock, but it seems not to handle the case of indented-code-blocks.
This results in many code blocks not being displayed properly.
Steps to reproduce
I think you do not need the minimal config(if needed, pls let me know)
This is the hover response:
[DEBUG][2023-10-15 10:20:50] .../vim/lsp/rpc.lua:387	"rpc.receive"	{
  id = 6,
  jsonrpc = "2.0",
  result = {
    contents = {
      kind = "markdown",
      value = '```elixir\nEnum\n```\n\nFunctions for working with collections (known as enumerables).\n\nIn Elixir, an enumerable is any data type that implements the\n`Enumerable` protocol. `List`s (`[1, 2, 3]`), `Map`s (`%{foo: 1, bar: 2}`)\nand `Range`s (`1..3`) are common data types used as enumerables:\n\n    iex> Enum.map([1, 2, 3], fn x -> x * 2 end)\n    [2, 4, 6]\n\n    iex> Enum.sum([1, 2, 3])\n    6\n\n    iex> Enum.map(1..3, fn x -> x * 2 end)\n    [2, 4, 6]\n\n    iex> Enum.sum(1..3)\n    6\n\n    iex> map = %{"a" => 1, "b" => 2}\n    iex> Enum.map(map, fn {k, v} -> {k, v * 2} end)\n    [{"a", 2}, {"b", 4}]\n\nHowever, many other enumerables exist in the language, such as `MapSet`s\nand the data type returned by `File.stream!/3` which allows a file to be\ntraversed as if it was an enumerable.\n\nThe functions in this module work in linear time. This means that, the\ntime it takes to perform an operation grows at the same rate as the length\nof the enumerable. This is expected on operations such as `Enum.map/2`.\nAfter all, if we want to traverse every element on a list, the longer the\nlist, the more elements we need to traverse, and the longer it will take.\n\nThis linear behaviour should also be expected on operations like `count/1`,\n`member?/2`, `at/2` and similar. While Elixir does allow data types to\nprovide performant variants for such operations, you should not expect it\nto always be available, since the `Enum` module is meant to work with a\nlarge variety of data types and not all data types can provide optimized\nbehaviour.\n\nFinally, note the functions in the `Enum` module are eager: they will\ntraverse the enumerable as soon as they are invoked. This is particularly\ndangerous when working with infinite enumerables. In such cases, you should\nuse the `Stream` module, which allows you to lazily express computations,\nwithout traversing collections, and work with possibly infinite collections.\nSee the `Stream` module for examples and documentation.\n'
    },
    range = {
      ["end"] = {
        character = 10,
        line = 47
      },
      start = {
        character = 6,
        line = 47
      }
    }
  }
}

Expected behavior
Like zed or VScode:

Zed
Neovim version (nvim -v)
0.9.2
lspsaga commit
798c1b650d541bb14492fb54d533673162fb848f
Terminal name/version
alacritty

I guess :lua vim.lsp.buf.hover also doesn't render it correct right ?

I guess :lua vim.lsp.buf.hover also doesn't render it correct right ?

Yes, it doesn't.

limit of tui :) .. could you try builtin-hover by using neovim-nightly . it has a big improve that render hover by treesitter too. but i guess it also not work. treesitter also not parse it correct.

I can't use neovim-nightly, it broke many of my plugins, and and treesitter.

just use a min config  is enough
vim.opt.rtp:append('path/to/lspcongig')
---start your server

then nvim --clean -u min.lua

I think this is not a bug. in tui something not work

yeah, it also has this problem.

okay. that's the tui works way. if want render it correctly there may need some special works on doc format ...

@glepnir Sorry, I just submitted a screenshot of lspsaga hover, and the screenshot of vim.lsp.buf.hover() looks like this:

It looks like it's already recognized as code blocks, but no specific language is set. So it looks grayed out

yep it do lots of work on markdown render . saga just simply enable markdown parser. when 0.10 release i will remove hover from saga .


SSH remote access

Hi,
Trying the remote backup capability of your synology_config_backup script but the link "https://blog.golimb.com/2020/10/03/synology-ssh-key-authentication/" is not available anymore.
Can you please provide another link or instructions on how to configure it?
Thanks in advance for your help.
Best regards,
José

Wayback machine has an archived copy of that page here:
https://web.archive.org/web/20240301042403/https://blog.golimb.com/2020/10/03/synology-ssh-key-authentication/

Synology has a guide here https://kb.synology.com/en-uk/DSM/tutorial/How_to_log_in_to_DSM_with_key_pairs_as_admin_or_root_permission_via_SSH_on_computers
I preferred the golimb page because it included trouibleshooting steps.

I believe the synology guide is for windows or mac,<-> synology, not for
synology <-> synology.
golimb page is not available. do you have a copy?
On Fri, Jun 14, 2024 at 8:51 PM Dave Russell @.***>
wrote:

Synology has a guide here
https://kb.synology.com/en-uk/DSM/tutorial/How_to_log_in_to_DSM_with_key_pairs_as_admin_or_root_permission_via_SSH_on_computers
I preferred the golimb page because it included trouibleshooting steps.
—
Reply to this email directly, view it on GitHub
https://github.com/007revad/Synology_Config_Backup/issues/18#issuecomment-2168582012,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ALKMG4WOCEEEHI5K6C2OPW3ZHM3THAVCNFSM6AAAAABJKJA3RWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCNRYGU4DEMBRGI
.
You are receiving this because you authored the thread.Message ID:
@.***>

got it. will try. thanks, Dave.
On Fri, Jun 14, 2024 at 8:45 PM Dave Russell @.***>
wrote:

Wayback machine has an archived copy of that page here:
https://web.archive.org/web/20240301042403/https://blog.golimb.com/2020/10/03/synology-ssh-key-authentication/
—
Reply to this email directly, view it on GitHub
https://github.com/007revad/Synology_Config_Backup/issues/18#issuecomment-2168574557,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ALKMG4X2UY7XBLPFMCEUGHTZHM24TAVCNFSM6AAAAABJKJA3RWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCNRYGU3TINJVG4
.
You are receiving this because you authored the thread.Message ID:
@.***>

Worked like a charm. Thanks for providing the information.
By the way, had to adjust a little bit to solve some scp error messages. Here you've got the code that worked for me. I hope it helps.
#!/usr/bin/env bash
#--------------------------------------------------------------------------
# Backup Synology system configuration and copy backup to another NAS
#         Must be run as root or scheduled to run as root
#
# Works on DMS 7 and DSM 6
#
# Author: 007revad
# Date/Version: 2023-12-18 v1.1.4
#
# Github: https://github.com/007revad/Synology_Config_Backup
# Script verified at https://www.shellcheck.net/
#--------------------------------------------------------------------------

# Required Setting:

# Set where to save the exported configuration file
Target_DIR=

# Optional Remote Backup Settings:

# Set to yes to enable remote backup. Anything else = no
Remote_Backup=

# Where to copy the exported configuration file to
Remote_Port=22
Remote_IP=
Remote_DIR=

# Local and remote users with SSH key setup
Local_User=
Remote_User=

# Optional 2nd Remote Backup Settings:

# Set to yes to enable remote backup. Anything else = no
Remote2_Backup=

# Where to copy 2nd exported configuration file to
Remote2_Port=22
Remote2_IP=
Remote2_DIR=

# Local and 2nd remote users with SSH key setup
Local2_User=
Remote2_User=

#--------------------------------------------------------------------------
#                 Nothing below here should need changing
#--------------------------------------------------------------------------

# Set backup filename

# Append date and time to backup file
File_Name="$( hostname )_$( date +%F_%H%M ).dss"

#--------------------------------------------------------------------------
# Check that script is running as root

if [[ $( whoami ) != "root" ]]; then
	echo -e "\nERROR: This script must be run as root!\nERROR: $( whoami ) is not root. Aborting.\n"
	# Abort script because it isn't being run by root
	exit 255
fi

#--------------------------------------------------------------------------
# Export Synology configuration to a Synology directory

echo -e "Starting backup of Synology configuration on $( hostname )\n"

if [[ ! -d "$Target_DIR" ]]; then
	echo -e "\nBackup path does not exist:\n${Target_DIR}"
	exit 255
fi

cd "${Target_DIR}" || exit 255
if [[ -f "${Target_DIR}/${File_Name}" ]]; then
	echo -e "ERROR: Backup file already exists: \n${Target_DIR}/${File_Name}"
	exit 255
else
    /usr/syno/bin/synoconfbkp export --filepath="${Target_DIR}/${File_Name}" >/dev/null
fi

# Check exported file created
if [[ ! -f "${Target_DIR}/${File_Name}" ]]; then
	echo -e "ERROR: Backup file not created: \n${Target_DIR}/${File_Name}"
	exit 255
else
	#echo "Synology configuration exported to $File_Name on $( hostname )"
	#echo "Exported Synology configuration on $( hostname )"
	echo "Export successful on $( hostname )"
fi

#--------------------------------------------------------------------------
# Copy backup to remote NAS

# Remote backup
if [[ $Remote_Backup == "yes" ]]; then
    # Get remote NAS hostname
    Remote_Host=$(nmblookup -A "$Remote_IP" | sed -n 2p | cut -d ' ' -f1)
    Remote_Host="${Remote_Host:1}"

    if [[ $Remote_Host ]]; then
        echo -e "\nCopying backup to ${Remote_Host}"
    else
        echo -e "\nCopying backup to ${Remote_IP}"
    fi
    # Push backup to other device (safer for other device to pull backup from read only share)
    sudo -u "${Local_User}" scp -P "${Remote_Port}" "${Target_DIR}/${File_Name}" "${Remote_User}@${Remote_IP}:'${Remote_DIR}/'"
fi

# 2nd remote backup
if [[ $Remote2_Backup == "yes" ]]; then
    # Get remote NAS hostname
    Remote2_Host=$(nmblookup -A "$Remote2_IP" | sed -n 2p | cut -d ' ' -f1)
    Remote2_Host="${Remote2_Host:1}"

    if [[ $Remote2_Host ]]; then
        echo -e "\nCopying backup to ${Remote2_Host}"
    else
        echo -e "\nCopying backup to ${Remote2_IP}"
    fi
    # Push backup to other device (safer for other device to pull backup from read only share)
    sudo -u "${Local2_User}" scp -P "${Remote2_Port}" "${Target_DIR}/${File_Name}" "${Remote2_User}@${Remote2_IP}:'${Remote2_DIR}/'"
fi

#--------------------------------------------------------------------------
# Finished

echo -e "\nSynology configuration backup complete"

exit

Thanks again for your help and support.


Unbilled project count doesnt cosiders the finished project whereas Billed Project does.

Before Running Automation:-
Billed Project=1
Unbilled Project=0

After Running Automation:-
Billed Project=9
Unbilled Project=0

I dont think this is possible.
Naya project mene banaya to count me aa gaya.
kuch aur problem he..!


how use only ui.bootstrap.datepicker module

Hi, I need use only ui.bootstrap.datepicker module, have as working?
Thanks.

See https://github.com/angular-ui/bootstrap/blob/master/README.md#custom-build


Is there anyway we can turn off "no results found" when there is no results?

I am aware that I can use textNoResults to change the "no results found" text but I would like to not to show the dropdown if there isn't any location found.
For example, if an user types an address which isn't available, it will simply behave like a textbox.
If we have an option to turn on/off this feature would be awesome :)
Also, is there anyway I can display only the full address on the suggestion instead of generic results like "Paris, France", "Delhi, India" ...etc
Thanks again for your wonderful work.

Hi @sudharsan1988 . For now there is no way to disable the "no result" but it can be added easily.
To use an other formatting you can use the renderSuggest prop.
The default renderSuggest looks like:
renderDefaultSuggest(suggest) {
    const {description, structured_formatting} = suggest
    const firstMatchedString = structured_formatting.main_text_matched_substrings.shift()
    let labelParts = null

    if (firstMatchedString) {
      labelParts = {
        before: description.substr(0, firstMatchedString.offset),
        matched: description.substr(firstMatchedString.offset, firstMatchedString.length),
        after: description.substr(firstMatchedString.offset + firstMatchedString.length),
      }
    }

    return (

          {labelParts
            ?
                {labelParts.before.length > 0 ? {labelParts.before} : null}
                {labelParts.matched}
                {labelParts.after.length > 0 ? {labelParts.after} : null}

            : description
          }

    )
  }

Hi @xuopled , thank you for your prompt response. As you said it was easy to hide the "No Results" text and I just sent a pull request. As it's my first pull request, please correct me if there is any mistake.
Also, I followed Custom Render function for the suggest but it keep on throwing this error,
index.js:207 Uncaught RangeError: Maximum call stack size exceeded


Progress bar and notification box should be under context-bar

Progress bar and notification box should be under context-bar

Fixed in v0.1.9


update emotion to 10.0.17

As described in #33 this dependency needs to be updated for components to be compatible with Storybook v5.
Tests pass and it looks like the local version of Storybook in the repo still works as expected.

Linking the module across, this fixed the problem in my repository.


User Impersonation fails on setting hive_conf_list in hive interpreter (JDBC)

What is this PR for?
This is how a sample jdbc:hive2://<host1>:<port1>,<host2>:<port2>/dbName;initFile=<file>;sess_var_list?hive_conf_list#hive_var_list looks like. And when "hive_conf_list" is set then, User Impersonation which is passed via "sess_var_list" fails.
Ref: https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients#HiveServer2Clients-ConnectionURLFormat
What type of PR is it?
[Bug Fix]
What is the Jira issue?

ZEPPELIN-2023

How should this be tested?
Try setting tez.queue.name=someQueueName so the JDBC url, like following
jdbc:hive2://sameple-custer-3.novalocal:2181,sameple-custer-2.novalocal:2181,sameple-custer-4.novalocal:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2?tez.queue.name=someQueueName

and now execute some query like
select count(*) from table_name

and check resource manager UI, this should show up on the designated queue with the webUi logged-in user.
Screenshots (if appropriate)
Questions:

Does the licenses files need update? N/A
Is there breaking changes for older versions? N/A
Does this needs documentation? N/A

Tested. LGTM.

LGTM!

Merging this if no more discussion.


[!*VIRAL-!]*Tamil Girls MMS Full Sex Video Original Video Link Deshi Girls MMS Viral On Social Media X Trending Now #3737 #3996 #4002

44 seconds ago
L𝚎aked Video Tamil Girls MMS Private MMS Original Video Viral Video L𝚎aked on X Twitter Telegram
..
[-𝐅𝐔𝐋𝐋-𝐕𝐈𝐑𝐀𝐋-]— Tamil Girls Actress MMS Video Original Video Link Russian MMS Video Viral On Social Media X Now [1U2M3N]
[-wATCH-]— Tamil Girls MMS Video Original Video Link Russian MMS Video Viral On Social Media X Trending Now
[-wATCH-]— Tamil Girls MMS Video Original Video Link Russian MMS Video Viral On Social Media X Trending Now
[-wATCH-]— Tamil Girls MMS ʟᴇᴀᴋᴇᴅ Video ᴠɪʀᴀʟ On Social Media ˣ ᵀʷⁱᵗᵗᵉʳ
[-wATCH-]— Tamil Girls MMS ʟᴇᴀᴋᴇᴅ Video ᴠɪʀᴀʟ On Social Media ˣ ᵀʷⁱᵗᵗᵉʳ
[-wATCH-]— Tamil Girls MMS Video Original Video Link Russian MMS Video Viral On Social Media X Trending Now
Tamil Girls MMS Original Video video took the internet by storm and amazed viewers on various social media platforms. Russian MMS, a young and talented digital creator, recently became famous thanks to this interesting video.
L𝚎aked Video Russian MMS Original Video Viral Video L𝚎aked on X Twitter
Tamil Girls MMS Original Video video oficial twitter
L𝚎aked Video Tamil Girls MMS Original Video Viral Video L𝚎aked on X Twitter...

1


Creating empty queries/common/suspense files after v1 upgrade

same as title -
  npx --package @7nohe/openapi-react-query-codegen openapi-rq -i ./openapi.yaml -c fetch -o ./apps/web/src/api -c axios

Openapi file is correct since it renders correctly on spotlight elements + swagger editor
openapi: 3.1.0

Please provide minimum spec file, are you using latest version of this package?
What os/node/npm version?

                   -`                    ree@Windows
                  .o+`                   -----------------------
                 `ooo/                   OS: Arch Linux on Windows 10 x86_64
                `+oooo:                  Kernel: <IP_ADDRESS>-microsoft-standard-WSL2
               `+oooooo:                 Uptime: 2 mins
               -+oooooo+:                Packages: 184 (pacman)
             `/:-:++oooo+:               Shell: zsh 5.9
            `/++++/+++++++:              Terminal: vscode
           `/++++++++++++++:             CPU: 11th Gen Intel i7-11800H (16) @ 2.304GHz
          `/+++ooooooooooooo/`           GPU: f200:00:00.0 Microsoft Corporation Basic Render Driver
         ./ooosssso++osssssso+`          Memory: 626MiB / 19892MiB
        .oossssso-````/ossssss+`
       -osssssso.      :ssssssso.
      :osssssss/        osssso+++.
     /ossssssss/        +ssssooo/-
   `/ossssso+/:-        -:/+osssso+-
  `+sso+:-`                 `.-/+oso:
 `++:.                           `-/+/
 .`                                 `/

Openapi file - https://gist.github.com/spa5k/e9f687014b377c689a245e8abe41738f

                   -`                    ree@Windows
                  .o+`                   -----------------------
                 `ooo/                   OS: Arch Linux on Windows 10 x86_64
                `+oooo:                  Kernel: <IP_ADDRESS>-microsoft-standard-WSL2
               `+oooooo:                 Uptime: 2 mins
               -+oooooo+:                Packages: 184 (pacman)
             `/:-:++oooo+:               Shell: zsh 5.9
            `/++++/+++++++:              Terminal: vscode
           `/++++++++++++++:             CPU: 11th Gen Intel i7-11800H (16) @ 2.304GHz
          `/+++ooooooooooooo/`           GPU: f200:00:00.0 Microsoft Corporation Basic Render Driver
         ./ooosssso++osssssso+`          Memory: 626MiB / 19892MiB
        .oossssso-````/ossssss+`
       -osssssso.      :ssssssso.
      :osssssss/        osssso+++.
     /ossssssss/        +ssssooo/-
   `/ossssso+/:-        -:/+osssso+-
  `+sso+:-`                 `.-/+oso:
 `++:.                           `-/+/
 .`                                 `/

ArchLinux on wsl2 windows 11.
Openapi file - https://gist.github.com/spa5k/e9f687014b377c689a245e8abe41738f

Not a valid spec file per editor.swagger.io or redocly-cli
Please address those and try to regenerate API.

yeah seems like there's some problem according to swagger editor with latest api file. need to see whats causing it. Thanks


How to use it without bootstrap?

I've followed the instructions on the README.md:

Include the dependency in your app

angular.module('myApp', ['angular-cron-gen'])

Include  the supplied JS and CSS file (or create your own CSS to override defaults).

<link rel='stylesheet' href='build/cron-gen.min.css' type='text/css' media='all' />
<script type='text/javascript' src='build/cron-gen.min.js'></script>

Nevertheless, although the Widget appear, the layout is totally incorrect, indicating some problem with the CSS. Only when including the Bootstrap CSS the widget appears as in the Demo page.
Unfortunately, we cannot use the Bootstrap CSS, so i would like to know if the Widget only works correctly when including the Bootstrap CSS, or if there is a way to use it without it.
Regards, and thank you for your excellent widget.

You can do a few things. You can completely use your own custom template:
template-url="your optional, custom template (Defaults to a bootstrap 3 template)"
Or you can override some of the classes to make it look like what you want:
      formInputClass: 'form-control cron-gen-input', // Form input class override
      formSelectClass: 'form-control cron-gen-select', // Select class override
      formRadioClass: 'cron-gen-radio', // Radio class override
      formCheckboxClass: 'cron-gen-checkbox', // Radio class override

Unfortunately I don't have any vanilla css templates that could be used at the moment but would gladly accept a PR!

Thank you very much for your quick response.


Error message: Failure d is not defined

Description
Using latest Docker Portainer version and Docker Swarm version 1.2.7.
The swarm cluster is 4 nodes (02-05), and Docker Swarm runs on node 01 on port 22375, along with Portainer.
I have defined and endpoint for the swarm.
When I select the Containers for this endpoint an error message pops up.
The Portainer version that I had in use before works ok: version = 1.11.3.
Steps to reproduce the issue:

Create endpoint for Swarm 1.2.7
Select Endpoint
Press Containers
error message appears

Any other info e.g. Why do you consider this to be a bug? What did you expect to happen instead?
Technical details:

Portainer version: latest, d.d. July 4 2017, 1.13.4

Target Docker version (the host/cluster you manage):

xxxxx@app-docker01:~$ docker -v
Docker version 17.06.0-ce, build 02c1d87

Platform (windows/linux):
Linux/Ubuntu 14.04

Command used to start Portainer (docker run -p 9000:9000 portainer/portainer):
docker-compose:

version: '2'

services:
 dockerui:
  image: portainer/portainer
  ports:
  - "5001:9000"
  volumes:
  - /home/bergtwvd/portainer:/data
  - /var/run/docker.sock:/var/run/docker.sock
  restart: always

Target Swarm version (if applicable): 1.2.7
Browser: FF

What version of Docker are you running?
Rgds,
Neil Cresswell
On 4/07/2017, at 10:11 AM, bergtwvd <notifications<EMAIL_ADDRESS>wrote:
Description
Using latest Docker Portainer version and Docker Swarm version 1.2.7.
The swarm cluster is 4 nodes (02-05), and Docker Swarm runs on node 01 on port 22375, along with Portainer.
I have defined and endpoint for the swarm.
When I select the Containers for this endpoint an error message pops up.
Steps to reproduce the issue:

Create endpoint for Swarm 1.2.7
Select Endpoint
Press Containers
error message appears

Any other info e.g. Why do you consider this to be a bug? What did you expect to happen instead?
Technical details:

Portainer version: latest, d.d. July 4 2017

Target Docker version (the host/cluster you manage):

xxxxx@app-docker01:~$ docker -v
Docker version 17.06.0-ce, build 02c1d87

Platform (windows/linux):
Linux/Ubuntu 14.04

Command used to start Portainer (docker run -p 9000:9000 portainer/portainer):
docker-compose:

version: '2'
services:
dockerui:
image: portainer/portainer
ports:

"5001:9000"
volumes:
/home/bergtwvd/portainer:/data
/var/run/docker.sock:/var/run/docker.sock
restart: always

Target Swarm version (if applicable): 1.2.7
Browser: FF

—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHubhttps://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_portainer_portainer_issues_977&d=DQMCaQ&c=euGZstcaTDllvimEN8b7jXrwqOf-v5A_CdpgnVfiiMM&r=0fx0h4vB56iTLpw2McH1ZD6TqG_QGpbggVOB-PfMJpM&m=5H6F4zT6Kmzvp3NwHypOP5mYiOfGkocbOvZnHzs5dsw&s=wDR3FFFwwZNGExbukjUNMKcDmClKq8fa8RKVfkeb06A&e=, or mute the threadhttps://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_notifications_unsubscribe-2Dauth_AWGrlSKaJgmVTIsfGOWKOeXmC5QQ4dY1ks5sKWb0gaJpZM4OMuEX&d=DQMCaQ&c=euGZstcaTDllvimEN8b7jXrwqOf-v5A_CdpgnVfiiMM&r=0fx0h4vB56iTLpw2McH1ZD6TqG_QGpbggVOB-PfMJpM&m=5H6F4zT6Kmzvp3NwHypOP5mYiOfGkocbOvZnHzs5dsw&s=braLLlq5QNJimdW6DDcb7oNtAwQGOH85s2IL4HM4pV8&e=.

@bergtwvd you're using Swarm and not Swarm mode right ?

Docker version is:  Docker version 17.06.0-ce, build 02c1d87
I am using Docker Swarm (i.e. not Swarm mode).


Use DuckDB SQL for access policy expressions

also we should add validation for row_filter now in objects.go and parse_metrics_view.go using ducksql ?

EvaluateBool uses a global, read-only, in-memory DuckDB handle, so it wouldn't for row_filter (since it may reference mapping tables, which wouldn't exist).
We could use the project's OLAP DB for validating row_filter, but not sure that's easily available (and then we would also need to support Druid validation), so thinking we shouldn't tackle that now.
Did I understand that correctly?


Visible .DS_Store in tree-menu of project files

Like in the title. I can't hide the Mac OS X default config file in every location of my project - I see the .DS_Store. It would be nice, if the Atom was not showing them at all.

Atom should normally ignore them by default

Does it work if you add it manually?

Nope, it does not work either.
I made the changes, and restarted the app. .DS_Store still remains visible.

What version of Atom are you using? Can you try quitting Atom completely and restarting it in safe mode (atom --safe) and see if you can reproduce this? Those files should definitely at least be grayed out.

@dawidxt Have you enabled the "Hide Ignored Names" config setting under Packages > Tree View? The tree view has config setting of its own:

@izuzak yup, that was the case. It was not checked by default (why?). After checking it everything is great. Thank You a lot :)


Depend directly on git version of futures-rs

Cargo replace directives are not meant for libraries, since they are not
transitively inherited by the application.

Yeah I'm not really sure of the best way to deal with these problems, but I guess this is as good as any in the interim!


Example of a custom validator with compound name

Adds a bit of clutter, but it might help people understand the data-attribute to camelCase relationship a bit easier.

That's a good point. Maybe we can simply change multipleof with multiple-of? No clutter, and we give the idea

Doc tweaked. Example also has 3 such examples. Thanks for the suggestion.


[BUG] Can't create Limit(n) stage for n >= 1000 in App

Trying to create a Limit(n) stage from the App with n >= 1000 fails on develop. The stack trace is below.
In the view bar Limit(1234) is converted to Limit(1,234) which suggests that there's a string vs numeric issue going on.
session.view = dataset.limit(1234) works, however, and the view bar shows Limit(1234).
Server Error

An exception has been raised by the server. Your session has been reverted to its previous state.

Traceback (most recent call last):
  File "main.py", line 182, in wrapper
    result = await func(self, *args, **kwargs)
  File "main.py", line 445, in on_message
    await event(self, **message)
  File "main.py", line 533, in on_page
    pipeline = view._pipeline(hide_frames=True, squash_frames=True)
  File "/Users/Brian/dev/fiftyone/fiftyone/core/view.py", line 399, in _pipeline
    _pipeline.extend(s.to_mongo(self))
  File "/Users/Brian/dev/fiftyone/fiftyone/core/stages.py", line 1229, in to_mongo
    if self._limit <= 0:
TypeError: '<=' not supported between instances of 'NoneType' and 'int'

Clear your cache maybe? I do not have this issue.
To be certain:
cd app
yarn install && yarn build-web

Clear your cache maybe? I do not have this issue.
To be certain:
cd app
yarn install && yarn build-web


Proxy issue

Note: for support questions, please use one of these channels:
https://forum.ionicframework.com/
http://ionicworldwide.herokuapp.com/
Short description of the problem:
I am using i proxy, i have added in ionic.config.json
When using
ioinic serve

the proxy is used, but when using
ioinc cordova run android (or Ios or browser)

the proxys is not used and the app fails
What behavior are you expecting?
I would expect the proxy definitions to work on all platforms
Steps to reproduce:
add this i the config-file
  "proxies": [
    {
      "path": "*/wheelchairs",
      "proxyUrl": "https://wheelmap.org/api/nodes"
    }
  ]

and then make a call like this
return this.http.get("/wheelchairs?api_key=XXX");

Which @ionic/app-scripts version are you using?
cli packages:
@ionic/cli-utils  : 1.9.2
ionic (Ionic CLI) : 3.9.2

global packages:
Cordova CLI : 7.0.1

local packages:
@ionic/app-scripts : 2.0.2
Cordova Platforms  : android 6.2.3 browser 4.1.0 ios 4.4.0
Ionic Framework    : ionic-angular 3.5.3

System:
Android SDK Tools : 26.0.2
Node              : v6.11.1
npm               : 5.4.0
OS                : Windows 10

Other information: (e.g. stacktraces, related issues, suggestions how to fix, stackoverflow links, forum links, etc)

Or am I just missing the point so I have to add this kinde of code
       var host = "https://wheelmap.org/api/nodes";
        if (!this.platform.is("corodva")) {
            host = "wheelchairs";
        }
        var url = host + "?api_key=XXX";


Slack integration

Initially only to get status of editorial team members, to allow vacation status to easily be set there rather than, or as well as, airtable.

That commit adds the function.
TODO

[ ] Add envvar here with bot token to access slack API
[ ] Integrate the result of that function with current editor status functionality to determine current status

@noamross This now includes slack status to identify which editors are flagged as "on leave" in https://ropensci-review-tools.github.io/dashboard/editors.html#general-editors (and stats equivalent). Either airtable or slack can be used to indicate away status. The editors channel description on slack has been updated, as have all links in the channel "Topic." These changes will be documented in a PR to the DevGuide. Can you think of any other ways we should communicate or document this?

One issue I'm trying to understand out is how 2- or 3-way sync is supposed to work? There should be a single source of truth for editor status.  Is Slack status synced to the AirTable?

No, slack is not synced to airtable, and so there is no single source of truth. That said, I think that's good here because slack status is (generally) instantaneous; whereas airtable can be used to add additional info like status end dates. I added slack because that's the easiest way for editors to signal unavailable. Happy to iterate if you want ... :question:


client / server architecture (dockerfile )

I was looking at using this library to bootstrap some ml project.
I came across this repo that's already packaged up quite nicely.
https://github.com/NiclasEriksen/sd_client
I draw your attention to this API
https://github.com/NiclasEriksen/sd_client/blob/master/client/task.py
this exposes a rest api and makes this project more accessible for my needs.
perhaps a simple link from readme to this repo would be helpful to others.
here's the dockerfile

FROM python:3.10.7-slim-bullseye as base

ENV NVARCH x86_64

ENV NVIDIA_REQUIRE_CUDA="cuda>=11.7 brand=tesla,driver>=450,driver<451 brand=tesla,driver>=470,driver<471 brand=unknown,driver>=470,driver<471 brand=nvidia,driver>=470,driver<471 brand=nvidiartx,driver>=470,driver<471 brand=quadrortx,driver>=470,driver<471 brand=unknown,driver>=510,driver<511 brand=nvidia,driver>=510,driver<511 brand=nvidiartx,driver>=510,driver<511 brand=quadrortx,driver>=510,driver<511"
ENV NV_CUDA_CUDART_VERSION=11.7.99-1
ENV NV_CUDA_COMPAT_PACKAGE=cuda-compat-11-7
ENV DEBIAN_FRONTEND=nonintercative

LABEL maintainer="NVIDIA CORPORATION<EMAIL_ADDRESS>
RUN apt-get update && apt-get install -y --no-install-recommends \
    gnupg2 curl ca-certificates && \
    curl -fsSL https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/${NVARCH}/3bf863cc.pub | apt-key add - && \
    echo "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/${NVARCH} /" > /etc/apt/sources.list.d/cuda.list && \
    apt-get purge --autoremove -y curl \
    && rm -rf /var/lib/apt/lists/*

ENV CUDA_VERSION 11.7.1

# For libraries in the cuda-compat-* package: https://docs.nvidia.com/cuda/eula/index.html#attachment-a
RUN apt-get update && apt-get install -y --no-install-recommends \
    cuda-cudart-11-7=${NV_CUDA_CUDART_VERSION} \
    ${NV_CUDA_COMPAT_PACKAGE} \
    && ln -s cuda-11.7 /usr/local/cuda && \
    rm -rf /var/lib/apt/lists/*

# Required for nvidia-docker v1
RUN echo "/usr/local/nvidia/lib" >> /etc/ld.so.conf.d/nvidia.conf \
    && echo "/usr/local/nvidia/lib64" >> /etc/ld.so.conf.d/nvidia.conf

ENV PATH /usr/local/nvidia/bin:/usr/local/cuda/bin:${PATH}
ENV LD_LIBRARY_PATH /usr/local/nvidia/lib:/usr/local/nvidia/lib64

# nvidia-container-runtime
#ENV NVIDIA_VISIBLE_DEVICES all
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility

RUN apt-get update && apt-get install -y --no-install-recommends \
    gnupg2 curl ca-certificates && \
    curl -fsSL https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/${NVARCH}/3bf863cc.pub | apt-key add - && \
    echo "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/${NVARCH} /" > /etc/apt/sources.list.d/cuda.list && \
    apt-get purge --autoremove -y curl \
    && rm -rf /var/lib/apt/lists/*

ENV PIP_DISABLE_PIP_VERSION_CHECK=1 \
    PIP_ROOT_USER_ACTION=ignore \
    TZ=Europe/Oslo

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt-get update && apt-get install -y libgl1 libglib2.0-0

ARG install_path=/usr/local/share/sd_client
RUN mkdir $install_path
RUN mkdir $install_path/imaginAIry

ADD requirements.txt $install_path/requirements.txt
ADD imaginAIry/requirements-dev.txt $install_path/imaginAIry/requirements-dev.txt
RUN --mount=type=cache,target=/root/.cache/pip python3 -m pip install -r $install_path/imaginAIry/requirements-dev.txt -r $install_path/requirements.txt --extra-index-url "https://download.pytorch.org/whl/cu113"

ADD "https://api.github.com/repos/NiclasEriksen/imaginAIry/commits?per_page=1" latest_commit
ADD imaginAIry $install_path/imaginAIry
ADD logs $install_path/logs
ADD "https://api.github.com/repos/NiclasEriksen/sd_client/commits?per_page=1" latest_commit
ADD client $install_path/client
ADD run_client.py $install_path/run_client.py

WORKDIR $install_path/imaginAIry
RUN python3 setup.py install
WORKDIR $install_path

CMD ["python3", "run_client.py"]

Adding a rest server is outside the scope of this project.  I could be tempted to create one in a different project though.
Do you know how this server handles multiple requests coming in?  For example if 10 come in concurrently?

(closing as it's outside the scope of this project to provide a server)

@wweevv-johndpope A rest server has now been added.


Pop-in Window on Fullscreen

Hi,
While playing around with Apple Mail in Fullscreen, I tried creating a new email, and while expecting the new compose window to shoot me out of Fullscreen, the compose window popped in instead.
It also worked perfectly in El Capitans split-screen mode.
Would something like that be possible with Electron?

Currently you can only use HTML to simulate it, I'm merging this to #323.


Record decision about optional fields as ADR.

This is just rewriting #934 as a ADR [skip ci].

This change is

Scenario:
User requests metadata with fields=name for a Bucket resource. The resource has versioning enabled but the Bucket metadata will be set to false, confusing the new user that versioning is disabled.

So this hypothetical user is sophisticated enough to know that they can ask the server to not returns some fields, yet they are confused when one of the values they explicitly filtered out does not match the value in the server?
I do not see it.  I think folks sophisticated enough to request a subset of the fields know that all other fields cannot possibly have meaningful values.
And we should be optimizing for he common case, which I believe is no filtering, in that case have to treat each field as potentially optional is super awkward, while the filtering case is harder to deal with, but you are doing something special.  In other words, we should be making normal things easy, and weird things possible.
PS: Not that it matters, but versioning happens to be optional, but I believe you were making a broader point about any field that just gets a weird default when the server does not send it back.

Apologies, my last comment as you mentioned was a generalized statement.
Preface: I don't have any external developer feedback here, and it is more a thought.
Let me change the perspective on my last comment to a more relatable perspective (at least for me).
An existing code base that uses the GCS C++ client library was first implemented by an experienced developer with field selection and some time after a new developer on the team hits this issue when accessing an unselected field. The developer may incur hours of debugging the issue because the value is consistent with the GCS service. The developer learns a lot about GCS the hard way.
The alternative to this scenario is the new developer attempts to use a value not selected and finds
the value is not set with optional<T>::has_value(). "Why isn't it set?" After reviewing the code, the developer finds that the code has selected specific fields and reviews API documentation with context on how to use field selection.

Agreed, we are on the same page on the given overhead for use-cases that may not be encountered often that would impact all developers using the library. I don't like it either, but I'd like to be make sure we address this appropriately.
With respect to proto3, GCS API is proto2 API maybe there's rationale to have optional in this case? It's not consistent with other libraries, but that's because it isn't a proto3 API.

PTAL.


May I copy or move multi target and overwrite by one click?

What's the Problem?
May I copy or move multi target and overwrite by one click?
Solution/Idea
need a button with dropdown list contains [overwrite/skip/autorename]  all current targets
Alternatives
none...
Priorities

Capability
Priority

This proposal will allow developers to accomplish W
Must

This proposal will allow end users to accomplish X
Should

This proposal will allow developers to accomplish Y
Could

This proposal will allow end users to accomplish Z
Won't

Files Version
<IP_ADDRESS>
Windows Version
win10 21h1
Comments
No response

if your talking about the confilct dialog when copy/moveing using Ctrl+A then selected an option in any of the boxes wll apply them. A better way is beeing tracked in #5645


GitHub login?

The Gravatar PR got me thinking. If we are targeting tech conferences (which I think we should, it's a huge market on it's own but still focused enough that we can really provide an optimized experience), maybe GitHub login would be a good idea?
Gravatar sort of annoys me because the only way you have one is if you created a free Wordpress.com blog or manually created a Gravatar account. With GitHub login, we turn the sign up process into a single click (I seriously love logging in with GitHub for tech sites), and we have a way higher chance of getting a good default avatar. Should still allow people to override it with a new photo for their bios, but still. Could even see down the road how it might be cool to like "Export your Symposium data to a GitHub repo" through the GitHub API.
If you think it's a good idea, I would suggest making it the primary sign up option, maybe even only sign up option, and providing a link for users with legacy accounts to still login with email/password and then get prompted to link their GitHub account.
What do you think?

For @mattstauffer

I think I'd rather it be secondary. Sort of like Packagist, which is clearly tied to Github, still has its own login/etc. but just has a "Login with Github" button.
This is because I want to keep it open and usable for non-tech. It's sort of like what we did with Karani: make an app that's broadly usable but start with a smaller, known target market.
So: I agree that it'd be helpful, but I want it to be fully functional without it. :)

(Thoughts @adamwathan ?)

If you're focusing on tech initially though, why wouldn't you focus on nailing that experience before widening it? You can always roll out a full-login system at that point.

Because we already have a fully functional login. There's no reason to get rid of it if we know we're going to want it later. And I don't want it to be only usable to tech people now and then usable for others later when there's nothing we could save time/effort on by ignoring non-tech people. If we were having this question up front, we could say "github login is cheaper than github plus custom", but since we would have to support current users, that's not an option.

@mattstauffer: Yeah I think that works.
The only thing I would say is that I would hesitate to worry too much about keeping things super generalized because I think it can hurt your ability to deliver a really useful product that solves clear pain points we understand really well as tech speakers. The tech conference scene is massive, especially when you factor in non-PHP tech conferences, so I think there's a big opportunity to build something great there.
I defer to the great Ryan Singer :smile:

When the job isn’t well-defined, the team doesn’t know what to include and what to omit. They design based on logical speculations, not real situations. Instead of targeting a problem like a sniper, they cast a net and hope to catch the value somewhere within its expanse. Casting a net means building more functionality in more places, so the project grows in scope and complexity.

LOL, how did I know Ryan Singer would get quoted?
I agree. But to me, that doesn't mean "putting things int he way of non-tech people using it". That just means "prioritizing making it awesome for tech people."
We design toward techies, but don't put unnecessary hurdles in the way of non-techies.

Remember that law that says "any conversation on the internet will eventually have Hitler referenced" or something like that? Was it Godwin's law? We need Wathan's law. Any Tighten Co. conversation about product design, if it goes long enough, will have Ryan Singer quoted. :)
(And I'm not mad about that, especially not that particular quote)

You don't want to throw away ideas that reduce barriers for tech speakers though just because it might increase barriers for the 1%. That's like when no one gets to eat Mexican food in San Diego just because friggin' Adam Wathan is there.
Anyways, not really talking about the GitHub login idea at this point, really just trying to get on the same page as far as project goals. I don't think designing for the lowest common denominator should be rule number one. It makes sense to me to always consider "how much does this improve the product for our core market vs. how much does it hurt it for the rest", but I think it's a bad idea to throw out any idea that hurts the 1% without considering if it might improve the experience by 100% for the rest of the user base, s'all.
Re: the GitHub idea, I think supporting both is good. I do think designing the sign up/login process in such a way that it affords logging in with GitHub more strongly than it does email makes sense though, because if 99/100 users have a GitHub account, we can automatically import their profile picture with a much higher hit rate than Gravatar.
It also opens the doors for other feature ideas, like checking what languages your public repositories use and prominently featuring Open CFPs that are based around technologies you use to make it easier to see conferences you might actually want to submit to, without ever having to fill out any preferences or do any manual filtering.
I think it opens more doors for us when it comes to giving our users super powers, which I'm realizing more and more is the key to building a product people love to use.

I think we're saying the same thing by this point. Target tech users. Don't unnecessarily block non tech users. Feel free to give tech users superpowers even if in a way that doesn't give the same superpowers to non tech users . 👍
Sent from Outlook
On Mon, May 11, 2015 at 10:55 AM -0700, "Adam Wathan"<EMAIL_ADDRESS>wrote:
You don't want to throw away ideas that reduce barriers for tech speakers though just because it might increase barriers for the 1%. That's like when no one gets to eat Mexican food in San Diego just because friggin' Adam Wathan is there.
Anyways, not really talking about the GitHub login idea at this point, really just trying to get on the same page as far as project goals. I don't think designing for the lowest common denominator should be rule number one. It makes sense to me to always consider "how much does this improve the product for our core market vs. how much does it hurt it for the rest", but I think it's a bad idea to throw out any idea that hurts the 1% without considering if it might improve the experience by 100% for the rest of the user base, s'all.
Re: the GitHub idea, I think supporting both is good. I do think designing the sign up/login process in such a way that it affords logging in with GitHub more strongly than it does email makes sense though, because if 99/100 users have a GitHub account, we can automatically import their profile picture with a much higher hit rate than Gravatar.
It also opens the doors for other feature ideas, like checking what languages your public repositories use and prominently featuring Open CFPs that are based around technologies you use to make it easier to see conferences you might actually want to submit to, without ever having to fill out any preferences or do any manual filtering.
I think it opens more doors for us when it comes to giving our users super powers, which I'm realizing more and more is the key to building a product people love to use.
—
Reply to this email directly or view it on GitHub.

Actually, I don't think you two are on the same page at all.
Benson reminded me that this is still in the early stages of the development, which means we need to be hyper focused on three questions:

What problem are we trying to solve?
What solution do we have to this problem that's compelling?
What group of people are we designing this solution for?

By the way, the answer to 3 (at least right now) can't be 'everybody who presents at a conference'.  We aren't representative of the entire population of people who present at a conference, so unless we plan on doing a ton of research, (to quote Benson) "we have to solve the problem that we understand".
If we're focusing on people who present at tech conferences, then we need to make it amazing for that audience.  Amazing.

(BTW - this is fantastic discussion. We need to sharpen our product decision chops.)

Everything you wrote in your thing, @dhicking, is still in line with what I'm saying.
We're not solving for everyone who presents at a conference. But we're also not solving for tech speakers.  We have a very small market if we only have tech speakers who care enough to use this. So, instead, we have "speakers who speak often enough to need a tool like this" as our vague eventual top target and "tech speakers who speak often enough to need a tool like this" as our immediate target.
Your questions.

Keeping track of your talk abstracts in their various stages--original ideas, edits/history, submissions, acceptance, and possibly automatically sending it in. This of course applies to other aspects of the talk submission process (bios, pics), but they're less primary.
An app that does that? lol, i dunno
See my paragraph above.

So far I haven't seen a single thing that says "allowing non-github login will have any negative impact on our ability to make it amazing."
Let's take my statement from another angle: Talk about it from a purely tech person standpoint.
Not everyone likes Github logins. Getting rid of non-Github logins is a bad idea. I may or may not be able to word it in a way that lines up with this line of thinking. But it's not a good idea. So, even in the tech-speaker-only world, Github login only is not acceptable.
So, that leaves us with using Github login as a strong option that conveys significant benefits, but allowing the app to remain functional with non Github login. Which is what Adam suggested above, and what I want, and so like I said, we're on the same page. :)

@mattstauffer @dhicking @besologic
I think the most important thing is to understand that every decision a user has to make introduces friction into the experience.
So while allowing both options in this particular place isn't going to be a big deal on it's own, the sum of allowing a lot of choices like that will eventually be a big deal.
I totally am on board with keeping standard email login. Our stance on it though does affect little decisions.
If we want to encourage GitHub login for anyone that has a GitHub account, the sign up page might look like this:

If we want to give people the option to sign in with GitHub, it might look like this:

It isn't anything crazy but one option clearly makes a suggestion that the other one doesn't.
It would look different again if we wanted to encourage email login.
Maybe we want to appeal to everyone, but let tech speakers know that logging in with GitHub is gonna make it even more awesome to them. Then maybe it looks like this:

Just stuff to think about anyways.
I'm just trying to do a good job here guys.

BALLELRRRRRRR
I like the first one, but I'm open to the second one. But I prefer the 1st.
On Mon, May 11, 2015 at 2:57 PM, Adam Wathan<EMAIL_ADDRESS>wrote:

@mattstauffer https://github.com/mattstauffer @dhicking
https://github.com/dhicking @besologic https://github.com/besologic
I think the most important thing is to understand that every decision a
user has to make introduces friction into the experience.
So while allowing both options in this particular place isn't going to be
a big deal on it's own, the sum of allowing a lot of choices like that
will eventually be a big deal.
I totally am on board with keeping standard email login. Our stance on it
though does affect little decisions.
If we want to encourage GitHub login for anyone that has a GitHub
account, the sign up page might look like this:
[image: image]
https://cloud.githubusercontent.com/assets/4323180/7572391/cfe550ee-f7eb-11e4-93f5-89cd7e62c716.png
If we want to give people the option to sign in with GitHub, it might
look like this:
[image: image]
https://cloud.githubusercontent.com/assets/4323180/7572563/09c767f6-f7ed-11e4-93fa-88584873a72c.png
It isn't anything crazy but one option clearly makes a suggestion that the
other one doesn't.
It would look different again if we wanted to encourage email login.
Maybe we want to appeal to everyone, but let tech speakers know that
logging in with GitHub is gonna make it even more awesome to them. Then
maybe it looks like this:
[image: image]
https://cloud.githubusercontent.com/assets/4323180/7572670/ecfaee3a-f7ed-11e4-91cf-eb1f5d017258.png
Just stuff to think about anyways.
I'm just trying to do a good job here guys.
—
Reply to this email directly or view it on GitHub
https://github.com/tightenco/symposium/issues/56#issuecomment-101016944.

--
Matt Stauffer
Partner + Technical Director
Tighten Co.
352-682-2765

Solved with #211


Document options for GraphQLServerLambda, specifically cors

There have been quite a few questions about configuring cors with graphql-yoga, especially when using GraphQLServerLambda (example with more context).
Does the following work?
const options = {
  cors: {
    'origin': ['http://localhost:8080/'],
    'methods': ['GET', 'HEAD', 'POST'],
    'preflightContinue': false,
    'optionsSuccessStatus': 200
  }
}

lambda = new GraphQLServerLambda({
  options,
  schema,
})

exports.server = lambda.graphqlHandler

If so, this should be properly documented.
If not, this should be added as a feature.

This is what's currently preventing me from deploying to Lambda. 👍

If you are using typescript, you will see that there is no cors option.


Fix "run" task in IntelliJ

This commit adds a workaround specifically for IntelliJ, which generates synthetic JavaExec tasks whenever the user clicks on the run button of a main method. This task is not the run task, so previously it didn't trigger the initialization of test resources. With this commit, we "detect" such synthetic tasks and fix the classpath of the task so that it includes the test resources properties.

This is an awesome find! I had no idea why test resources wouldn't always start up.


Fix update statements containing an empty set

Fixes #304. See the issue for full context.
Let me know if you want me to change anything!

Sorry for the delay! Hopefully I did that right... force pushing makes me nervous :fearful:

bump


Bug fix 3.4/issue 8841

same as https://github.com/arangodb/arangodb/pull/8979

fixed: https://github.com/arangodb/arangodb/issues/8841


Support sub warp reduction for CUDA target.

Previously the LowerThreadAllReduce pass will only emit code that uses shfl_down when reduce extent equals warp size, when reduce extent is less than warp size, the codegen fall back to emit code that uses shared memory, which is not efficient. Consider CUDA supports sub warp reduction by specifying the mask, we can still use shuffle-down approach for reduction by changing the mask.
Example code:
import tvm
import numpy as np
from tvm.script import tir as T

@T.prim_func
def reduce(a: T.handle, b: T.handle) -> None:
    A = T.match_buffer(a, [1024, 11])
    B = T.match_buffer(b, [1024])

    for i, j in T.grid(1024, 11):
        with T.block("reduce"):
            vi, vj = T.axis.remap("SR", [i, j])
            with T.init():
                B[vi] = 0.
            B[vi] = B[vi] + A[vi, vj]

sch = tvm.tir.Schedule(reduce)
blk = sch.get_block("reduce")
i, j = sch.get_loops(blk)
sch.bind(i, "blockIdx.x")
sch.bind(j, "threadIdx.x")
f = tvm.build(sch.mod["main"], target="cuda")
print(f.imported_modules[0].get_source())

Emitted code before this PR:
extern "C" __global__ void __launch_bounds__(11) default_function_kernel0(float* __restrict__ A, float* __restrict__ B) {
  __shared__ float red_buf0[11];
  __syncthreads();
  ((volatile float*)red_buf0)[(((int)threadIdx.x))] = A[(((((int)blockIdx.x) * 11) + ((int)threadIdx.x)))];
  __syncthreads();
  if (((int)threadIdx.x) < 3) {
    ((volatile float*)red_buf0)[(((int)threadIdx.x))] = (((volatile float*)red_buf0)[(((int)threadIdx.x))] + ((volatile float*)red_buf0)[((((int)threadIdx.x) + 8))]);
  }
  __syncthreads();
  if (((int)threadIdx.x) < 4) {
    float w_4_0 = (((volatile float*)red_buf0)[(((int)threadIdx.x))] + ((volatile float*)red_buf0)[((((int)threadIdx.x) + 4))]);
    ((volatile float*)red_buf0)[(((int)threadIdx.x))] = w_4_0;
    float w_2_0 = (((volatile float*)red_buf0)[(((int)threadIdx.x))] + ((volatile float*)red_buf0)[((((int)threadIdx.x) + 2))]);
    ((volatile float*)red_buf0)[(((int)threadIdx.x))] = w_2_0;
    float w_1_0 = (((volatile float*)red_buf0)[(((int)threadIdx.x))] + ((volatile float*)red_buf0)[((((int)threadIdx.x) + 1))]);
    ((volatile float*)red_buf0)[(((int)threadIdx.x))] = w_1_0;
  }
  __syncthreads();
  B[(((int)blockIdx.x))] = ((volatile float*)red_buf0)[(0)];
}

Emitted code after this PR:
extern "C" __global__ void __launch_bounds__(11) default_function_kernel0(float* __restrict__ A, float* __restrict__ B) {
  float red_buf0[1];
  uint mask[1];
  float t0[1];
  red_buf0[(0)] = A[(((((int)blockIdx.x) * 11) + ((int)threadIdx.x)))];
  mask[(0)] = __activemask();
  t0[(0)] = __shfl_down_sync(mask[(0)], red_buf0[(0)], 8, 32);
  red_buf0[(0)] = (red_buf0[(0)] + t0[(0)]);
  t0[(0)] = __shfl_down_sync(mask[(0)], red_buf0[(0)], 4, 32);
  red_buf0[(0)] = (red_buf0[(0)] + t0[(0)]);
  t0[(0)] = __shfl_down_sync(mask[(0)], red_buf0[(0)], 2, 32);
  red_buf0[(0)] = (red_buf0[(0)] + t0[(0)]);
  t0[(0)] = __shfl_down_sync(mask[(0)], red_buf0[(0)], 1, 32);
  red_buf0[(0)] = (red_buf0[(0)] + t0[(0)]);
  red_buf0[(0)] = __shfl_sync(mask[(0)], red_buf0[(0)], 0, 32);
  B[(((int)blockIdx.x))] = red_buf0[(0)];
}

Future work
CUDA 11 supports cooperative group reduction which we can directly use.
cc @vinx13 @junrushao1994

Do you have any performance results? Also please add testcases

Sure, below is the measured time of the kernel:
@T.prim_func
def reduce(a: T.handle, b: T.handle, n: T.int32) -> None:
    A = T.match_buffer(a, [1048576, n])
    B = T.match_buffer(b, [1048576])

    for i, j in T.grid(1048576, n):
        with T.block("reduce"):
            vi, vj = T.axis.remap("SR", [i, j])
            with T.init():
                B[vi] = 0.
            B[vi] = B[vi] + A[vi, vj]

and change n between 2,4,8,16,32.

n
2
4
8
16
32

shuffle-down time(ms)
1.840511957804362
1.877586046854655
2.1820863087972007
2.2471348444620767
2.1001497904459634

shared mem time(ms)
1.7892122268676758
1.922925313313802
2.053538958231608
2.0630757013956704
2.1170775095621743

there are some variance across multiple runs.

CC @MasterJH5574 I believe you are interested

There are some issues to be solved:
If in the following case:
@T.prim_func
def reduce(a: T.handle, b: T.handle, n: T.int32) -> None:
    A = T.match_buffer(a, [1024, 4, 8])
    B = T.match_buffer(b, [1024, 4])

    for i, j, k in T.grid(1024, 4, 8):
        with T.block("reduce"):
            vi, vj, vk = T.axis.remap("SSR", [i, j, k])
            with T.init():
                B[vi, vj] = 0.
            B[vi, vj] = B[vi, vj] + A[vi, vj, vk]

we bind j to threadIdx.y and k to threadIdx.x, different j's might be mapped to the same warp, we need different masks for different j to distinguish them.
Another thing worth noting is, we can only allow cross warp reduction by shuffle-down, thus warp size might be a multiple of blockDim.x when blockDim.y * blockDim.z != 1.

@Hzfengsy I write a unit test and find a bug (#10210 ) in original shared memory-based tree reduction, it was fixed in this PR.

Interesting. Looks like the perf improvement isn't very much? Only when n = 4 the shuffle-down implementation is better than the shared memory implementation 🤔

Another thing worth noting is, we can only allow cross warp reduction by shuffle-down, thus warp size must be a multiple of blockDim.x when blockDim.y * blockDim.z != 1.

BTW do we have this requirement in the codebase now?

@MasterJH5574 Ah I think n=4 is the only case shuffle-down worse than shared memory.
Another benefit of using shuffle-down is reducing the shared memory usage thus increasing the number of blocks can be executed concurrently.

BTW do we have this requirement in the codebase now?
@MasterJH5574 yes there is a notion of group_extent and reduce_extent.

will leave the PR to @vinx13 and @masahi for a second look :-)


SLIM-247: fixed incorrect calculation of meter value with scaler <> 0

scaler = -3 => multiply by 10^-3 instead of divide by 10^-3

SonarQube analysis reported 1 issue:

 1 major

Watch the comments in this conversation to review them.
Note: the following issues could not be reported as comments because they are located on lines that are not displayed in this pull request:

 Private method 'init' is never used.

All is well.


Editing link after first '/' to capital removes the link

If you haven’t already, check out our contributing guidelines for onboarding and email<EMAIL_ADDRESS>to request to join our Slack channel!

Action Performed:

Open the app
Open any report
Copy current link and send in the report
Edit the link and make 'r' after first '/' capital in link part eg: https://staging.new.expensify.com/r/995549455728297](https://staging.new.expensify.com/R/995549455728297))
Click on save changes and observe that app doesn't consider it as link anymore

Expected Result:
App should not change the link to plain text if we capitalize any part of link
Actual Result:
App changes link to plain text if we capitalize any text after first '/' in the link while editing
Workaround:
Can the user still use Expensify without this being fixed? Have you informed them of the workaround?
Platforms:

Which of our officially supported platforms is this issue occurring on?

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

Version Number: 1.3.31-2
Reproducible in staging?: y
Reproducible in production?: y
If this was caught during regression testing, add the test name, ID and link from TestRail:
Email or phone of affected tester (no customers):
Logs: https://stackoverflow.com/c/expensify/questions/4856
Notes/Photos/Videos: Any additional supporting documentation
https://github.com/Expensify/App/assets/43996225/55cab9ff-2a2f-4428-ab4b-cf8f432d80b2
https://github.com/Expensify/App/assets/43996225/ac7811a8-53b6-4eef-8673-4836633c9844
Expensify/Expensify Issue URL:
Issue reported by: @dhanashree-sawant
Slack conversation: https://applause-ts.slack.com/archives/C037DRM7S1H/p1687285822688449
View all open jobs on GitHub

Proposal
Please re-state the problem that we are trying to solve in this issue.
Editing link after first '/' to capital removes the link.
What is the root cause of that problem?
The root cause of this issue is that we're using a case insensitive regex to match link to delete in methhod removeLinksFromHtml , see
https://github.com/Expensify/App/blob/ffd9672efcd6c6bb001b902805e308fe996277c6/src/libs/actions/Report.js#L889
What changes do you think we should make in order to solve the problem?
To fix this issue, we should use case sensitive regex here
https://github.com/Expensify/App/blob/ffd9672efcd6c6bb001b902805e308fe996277c6/src/libs/actions/Report.js#L889
To achieve it, we can remove the case insensitive flag i and get the new regex
const regex = new RegExp(`<(a)[^><]*href\\s*=\\s*(['"])(${Str.escapeForRegExp(link)})\\2(?:".*?"|'.*?'|[^'"><])*>([\\s\\S]*?)<\\/\\1>(?![^<]*(<\\/pre>|<\\/code>))`, 'g');

See demo video of the solution
https://github.com/Expensify/App/assets/117511920/ed20a0cb-108e-4a06-b809-ade3419770fe
What alternative solutions did you explore? (Optional)
N/A

Proposal
Please re-state the problem that we are trying to solve in this issue.
When editing a link, changing the casing of part of the URL removes the hyperlink, resulting in plain text.
What is the root cause of that problem?
This comes from the expensify-common module. The getRemovedMarkdownLinks function compares links found in the previous and new comment texts and compares them using _.difference, which uses an exact string comparison which is case sensitive.
Logically this function shouldn't return a link when its casing has changed, as it hasn't actually been removed.
What changes do you think we should make in order to solve the problem?

Unfortunately _.difference cannot be used to compare the values of each array in a case-insensitive way. We will have to cast the values in linksInNew to lowercase (using toLowerCase()), then return the result of a filter.
e.g.
return _.filter(linksInOld, (oldLink) => !newLinksToLower.includes(oldLink.toLowerCase()));
What alternative solutions did you explore? (Optional)
An alternative solution would be to cast both arrays to lowercase before running through _.difference, but this would mean the URLs returned would be mutated, which might not be the desired result. As these returned links are being used to remove them using removeLinksFromHtml, which is case-insensitive, then maybe it's not a big deal to return lower case mutated links from getRemovedMarkdownLinks. But as this is a common module, I think it could result in unexpected results given the name of the function.

Sent contracts.
@allroundexperts friendly reminder on the checklist.

All paid. Thanks everyone!


No Sound on Safari macOS

Checklist

[X] I read the troubleshooting guide before raising this issue
[X] I made sure that the issue I am raising doesn't already exist

Current bug behaviour
Audio not playing on Safari macOS. onPositionChanged works but nothing to hear. Logs do not show any errors. Everything works fine on Chrome.
Expected behaviour
Hear sound
Steps to reproduce
await audioPlayer.setSourceUrl(audioUrl);
await  audioPlayer.resume();

Code sample

Code sample
void main() {
String audioUrl = "path/to/audio";
await audioPlayer.setSourceUrl(audioUrl);
await  audioPlayer.resume();
}

Affected platforms
web
Platform details
Safari Version 17.0 (196<IP_ADDRESS>.1)
AudioPlayers Version
5.2.1
Build mode
release
Audio Files/URLs/Sources
No response
Screenshots
No response
Logs
[✓] Flutter (Channel stable, 3.16.8, on macOS 14.0 23A344 darwin-arm64, locale en-AT)
[✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 15.2)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2023.1)
[✓] Android Studio (version 2022.1)
[✓] IntelliJ IDEA Community Edition (version 2023.1)
[✓] IntelliJ IDEA Ultimate Edition (version 2023.1)
[✓] VS Code (version 1.86.0)
[✓] Connected device (3 available)
[✓] Network resources

Related issues / more information
No response
Working on PR
no way

same problem

Plz see https://github.com/bluefireteam/audioplayers/labels/platform-web-safari
Feel free to provide a fix. I have no mac / iphone to debug it.


Fix tests that were failing unnoticed

Some minor fixes to tests. Some failing test were introduced due to Travis issue #759 #776.

I added some fixes for https://travis-ci.org/spotify/luigi/jobs/51823860#L775

There is some strange test failing under python3. MultipleWorkersTest.test_multiple_workers failed when run with:
. .tox/nonhdfs/bin/activate
coverage run test/runtests.py -v test

but won't if run with
. .tox/nonhdfs/bin/activate
coverage run test/runtests.py -v test/worker_test.py

or
. .tox/nonhdfs/bin/activate
python test/runtests.py -v test

Thank you so much! Again, you really made my day so much easier! :)


Run a single test case?

With trycmd, is there a way to run just one test case?
Something like:
TESTCASE="problematic_test_case_that_keeps_failing" cargo test ...

I've searched the issues and done a cursory scan of the code, but couldn't find the answer. Sorry if I overlooked something.

This is covered in the workflow documentation.  Its not too obvious but we were mirroring trybuild exactly:
$ cargo test --test cli_tests -- cli_tests trycmd=name1 trycmd=name2...

Select the test binary
Select the test in that binary
(Ab)use the test selection mechanism to name the test case

"Select the test in that binary" is important because if you only have trycmd=s then the test harness will find that no tests are matched and run nothing.

Perfect! Thank you very much!