Kotlin Multiplatform build times

I think there are some elements uncached in Kotlin Multiplatform because the build time on a very simple project is being very high.
This is the project: https://github.com/JavierSegoviaCordoba/semantic-versioning-kmp
Build time is over 20 minutes to compile: https://github.com/JavierSegoviaCordoba/semantic-versioning-kmp/actions/runs/1520669770
Not sure if the action is adding konan directory to the cache directories or something so.

Thanks for the report. Can you please try running the build with cache-debugging enabled? That will give an overview of what's in the Gradle User Home for this build.

This run should be using it. https://github.com/JavierSegoviaCordoba/semantic-versioning-kmp/runs/4520591847

.konan is not inside .gradle, it is in the root directory. There are more dependencies, native ones are inside .konan, but javascript libraries were in another place (I don't remember the folder name).
Not sure if caching that directory is the responsibility of Gradle action or not, but should be great the action supports adding custom directories to the Gradle cache so related things were cached like native dependencies or pip dependencies used by Gradle plugins (Kotlin multiplatform or docs Gradle plugins for example).

Thanks for the clarification. I think at this stage it's out of scope for gradle-build-action to cache arbitrary state located outside of the Gradle User Home directory.
To enable caching for the .konan directory you can either:

Use actions/cache to configure this caching separately
Specify the KONAN_DATA_DIR environment variable to ensure that the .konan directory is located inside ~/.gradle/caches.

Perhaps it would make sense for the kotlin-multiplatform Gradle plugin to place the KONAN_DATA_DIR within Gradle User Home.


Python Streaming job failing to drain with BigQueryIO write errors

We have a Python Streaming Dataflow job that writes to BigQuery using the FILE_LOADS method and auto_sharding enabled. When we try to drain the job it fails with the following error,

"/usr/local/lib/python3.7/site-packages/apache_beam/io/gcp/bigquery_tools.py", line 1000, in perform_load_job
ValueError: Either a non-empty list of fully-qualified source URIs must be provided via the source_uris
parameter or an open file object must be provided via the source_stream parameter.

Our WriteToBigQuery configuration,

beam.io.WriteToBigQuery(
  table=options.output_table,
  schema=bq_schema,
  create_disposition=beam.io.BigQueryDisposition.CREATE_IF_NEEDED,

 write_disposition=beam.io.BigQueryDisposition.WRITE_APPEND,
  insert_retry_strategy=RetryStrategy.RETRY_ON_TRANSIENT_ERROR,

 method=beam.io.WriteToBigQuery.Method.FILE_LOADS,
  additional_bq_parameters={
    "timePartitioning":
{
      "type": "HOUR",
      "field": "bq_insert_timestamp",
    },
    "schemaUpdateOptions":
["ALLOW_FIELD_ADDITION", "ALLOW_FIELD_RELAXATION"],
  },
  triggering_frequency=120,
  with_auto_sharding=True,
)

We are also noticing that the job only fails to drain when there are actual schema updates. If there are no schema updates the job drains without the above error.
Imported from Jira BEAM-14146. Original Jira may contain additional context.
Reported by: rahuli.

From the Jira it looks like the job failure was solved but the drain has trouble completing. I don't think we have to block the release on it, even though it does seem important to continue to figure out.

CC @chamikaramj from the Jira CCs

Fixed by #23710

.close-issue


Feature: REST Endpoints

JSON-RPC is terrible for caching on the host level.
I would like to see something that translates our endpoints that use JSON-RPC into a REST-y version of the same stuff, directly into Gecko.
We will keep the existing JRPC's.
I would prefer this kinda thing be automatic such that it translates "params" into a POST/GET/DELETE/PUT call by some metadata associated with the JRPC Go method itself.
I want it specifically for the AVM,  Platform VM, Keystore, and Admin endpoints on the default subnet.

Basically like this, but for REST.
Important reading:

https://docs.ava.network/v1.0/en/api/issuing-api-calls/
https://docs.ava.network/v1.0/en/api/platform/
https://docs.ava.network/v1.0/en/api/avm/
https://docs.ava.network/v1.0/en/api/keystore/
https://docs.ava.network/v1.0/en/api/admin/

Let me use an example to try and make sure I understand your request. You would like this JSON-RPC API:
Request:
curl -X POST --data '{
    "jsonrpc": "2.0",
    "method": "avm.createAddress",
    "params": {
        "username":"myUsername",
        "password":"myPassword"
    },
    "id": 1
}' -H 'content-type:application/json;' <IP_ADDRESS>:9650/ext/bc/X

Response:
{
    "jsonrpc": "2.0",
    "result": {
        "address": "X-EKpEPX56YA1dsaHBsW8X5nGqNSwJ7JrWH"
    },
    "id": 1
}

To be accessible through another REST API which would look like this:
Request:
curl -u username:password -X POST <IP_ADDRESS>:9650/ext/bc/X/addresses

Response:
{
    "address": "X-EKpEPX56YA1dsaHBsW8X5nGqNSwJ7JrWH"
}

Do you confirm this is what you expect? If no can you elaborate on this example for us to understand better?

Clooseee I don't think we need to use basic authentication, though. I would just pass it via the request body for this iteration and keep everything 1:1 with the JSON-RPC. Let TLS do the security for this kinda stuff. At least for now.

Ok, so something like this:
curl -X POST --data '{
    "params": {
        "username":"myUsername",
        "password":"myPassword"
    },
}' -H 'content-type:application/json;'  <IP_ADDRESS>:9650/ext/bc/X/rest/addresses

Then listAddresses would be:
curl -X GET --data '{
    "params": {
        "username":"myUsername",
        "password":"myPassword"
    },
}' -H 'content-type:application/json;'  <IP_ADDRESS>:9650/ext/bc/X/rest/addresses

etc...

Yeah and I think the real trick will be some sort of mapping between JRPC <-> REST calls. But totally do-able I believe.

Oh and for the REST body you have, you can remove the JSON and just make it standard POST calls.

Ok then, let me have a look at all the APIs and see if anything would prevent us from doing a direct mapping.

Ex:
curl -X POST -d "username=myUsername&password=myPassword"  -H "Content-Type: application/x-www-form-urlencoded" -X POST <IP_ADDRESS>:9650/ext/bc/X/rest/addresses

By the way, I'm suuupperr flexible. Let's just make it make sense and be a really clear user experience. And try to leverage the Go Gorrilla library since we're already using it. Nothing fancy or extra is required, I think.

It is usually probably more of an:
POST /x/api/users
POST /x/api/wallet
POST /p/api/wallet
GET /x/api/wallet/X-CjgjVNYmzaxW41wRB8dkCSpwXg6A38qhw
POST /x/api/users/export

Might add versioning instantly - v1, to later support smth like that: /x/api/v2/users
Would need to think of all REST /endpoints naming - this is crucial
Just my 2c :)

Welllll this isn't a website. These go for individual nodes generally in your own control. Versioning can be handled by routing v1 ... vN  to a node running the appropriate version, and that would be on the application layer which is being built around a node network you own. My 2c is keep is simple. We implement multiple "api"'s so we should probably use "rest" to be extra clear just like we use "ws" for websockets and in some cases "rpc" for the jrpc.
Let's not shake things up too hard. Let's just get a REST interface and go from there.

Hey guys,

Definitely don't hardcode endpoint suffixes. Sorry if I wasn't clear, after looking at the code I don't think it's a good idea to do that.
Only complete submissions please. If you want to vet an approach, let me know personally and I'll take a look. Ultimately Stephen and Dan will be the ones merging so you have to pass their litmus test.
 I know that people who put in effort and get nothing for it because their submission didn't pass muster is ehhhh not fun. I'll probably give a little something if you finish by Sunday with a valid PR but it doesn't get accepted.

Thanks for the effort so far, I'm ... honestly I'm really impressed. I didn't expect so much interest so early and I'm happy to see it.

I think @harsh-98 proposed solution is pretty efficient and does the job nicely. Even though I have no specific gorilla experience it still feels like the codec is not the place to do it, it would hijack its original purpose which is to serialize/deserialize different content types. The only real issue I see here is that if we want to keep the API and allow other formats later (e.g. protobuf, xml, binary, whatever...) it would have to be implemented in the codec function in a switch/case manner rather than using different codecs as expected by the gorilla library.
Although I agree that it would be a valid assumption that this will likely never happen and it should not prevent us from doing it this way if we feel like it "just because we never know in the future".
Another way I imagined (but haven't tested yet) would be to add a router to the existing list of handlers. Example for the AVM API:
diff --git a/vms/avm/vm.go b/vms/avm/vm.go
index e4f5212..97ee478 100644
--- a/vms/avm/vm.go
+++ b/vms/avm/vm.go
@@ -11,6 +11,7 @@ import (
        "time"

        "github.com/gorilla/rpc/v2"
+       "github.com/gorilla/mux"

        "github.com/ava-labs/gecko/cache"
        "github.com/ava-labs/gecko/database"
@@ -216,12 +217,17 @@ func (vm *VM) Shutdown() error {
 func (vm *VM) CreateHandlers() map[string]*common.HTTPHandler {
        rpcServer := rpc.NewServer()
        codec := cjson.NewCodec()
+       service := Service{vm: vm}
        rpcServer.RegisterCodec(codec, "application/json")
        rpcServer.RegisterCodec(codec, "application/json;charset=UTF-8")
-       rpcServer.RegisterService(&Service{vm: vm}, "avm") // name this service "avm"
+       rpcServer.RegisterService(&service, "avm") // name this service "avm"
+
+       router := mux.NewRouter()
+       router.HandleFunc("/rest", service.HandleREST)

        return map[string]*common.HTTPHandler{
                "":        &common.HTTPHandler{Handler: rpcServer},
+               "/rest":   &common.HTTPHandler{Handler: router},
                "/pubsub": &common.HTTPHandler{LockOptions: common.NoLock, Handler: vm.pubsub},
        }
 }

Then have a HandleREST function implemented at the service level (vms/avm/service.go) that does the mapping between the request and the function to call. Ideally this logic would be implemented in some utils class, so that each service can easily instantiate such an object providing its own mapping as a parameter. Again, just some idea that I have not yet tested.
BTW, I'm not doing this for the reward :-) Just because I have a bit of spare time, I like the project, and it's a great occasion to practice a bit of Go under real life conditions. Whoever gets the rewards is fine for me, I just hope my contribution can help making the implementation as good as possible.

Even though I have no specific gorilla experience it still feels like the codec is not the place to do it, it would hijack its original purpose which is to serialize/deserialize different content types.

Now that I dig into it a bit more and see your proposed solution, I agree. Codec are not the way to handle this... "handlers" are lol.
Can you two work together on this since you're not after the reward? Not sure if you're interested in that, but I do think it would produce a higher quality result.

See, what i have  done is made one handler to be able to handle two codecs: one for RPC(mapping request data to params and method ) and one for REST(mapping request to uri and params). It is able to handle aliases too.

Yeah @glemercier he's got a PR he's working on here: https://github.com/ava-labs/gecko/pull/215

I talked with Stephen and we think that handlers are the best route to rather than the Codec solution. VMs can route their own endpoints and after discussing, we consider it important that solutions take that into account.

@glemercier I was written script to show the denali step up with REST endpoints. It is now available in the PR.

I'm currently looking at how to get rid of the codec stuff in @harsh-98's code. I'm getting there and should be able to find something. Only thing is that it involves reflection (to get the function to call, and req/resp struct types before calling the final JRPC function), hopefully it will not make the code too complicated. I will keep you posted and issue a PR to @harsh-98's repo whenever I have something

I know Stephen really prefers not to use Reflection when possible.
On Sun, Jun 7, 2020, 5:25 PM Gregory Lemercier<EMAIL_ADDRESS>wrote:

I'm currently looking at how to get rid of the codec stuff in @harsh-98
https://github.com/harsh-98's code. I'm getting there and should be
able to find something. Only thing is that it involves reflection (to get
the function to call, and req/resp struct types before calling the final
JRPC function), hopefully it will not make the code too complicated. I will
keep you posted and issue a PR to @harsh-98 https://github.com/harsh-98's
repo whenever I have something
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/ava-labs/gecko/issues/211#issuecomment-640282184, or
unsubscribe
https://github.com/notifications/unsubscribe-auth/ABTW6OJOQ35IGGNIMQM5P73RVQAT7ANCNFSM4NSZ6RPQ
.

Yeah I get it, it's kind of overkill. Although I'm not sure there is any way to avoid it here. The problem is we have a lot of functions like this to handle JRPC requests:
func (service *Service) GetTxStatus(r *http.Request, args *GetTxStatusArgs, reply *GetTxStatusReply) error
func (service *Service) GetTx(r *http.Request, args *GetTxArgs, reply *GetTxReply) error
func (service *Service) GetUTXOs(r *http.Request, args *GetUTXOsArgs, reply *GetUTXOsReply) error
etc...

Those are implemented this way to comply with gorilla as explained here, which likely uses reflection itself:
When a service is registered, the server inspects the service methods and make available the ones that follow these rules:

- The method name is exported.
- The method has three arguments: *http.Request, *args, *reply.
- All three arguments are pointers.
- The second and third arguments are exported or local.
- The method has return type error.
All other methods are ignored.

To be able to call the JRPC function we need to get the type of the args and reply parameters in advance, since they are different for each function.
I will continue looking in some ways to avoid using reflection, maybe there is something in gorilla I missed which could help, but I am afraid we end up using some even more hacky ways. I'll keep you posted if I find anything.

One more thing, here is what we currently use to make the mapping between REST endpoints and JRPC methods:
var RestMapping map[string]string = map[string]string{
  "/tx":                        "GetTx",
  "/tx/issue":                  "IssueTx",
  "/tx/status":                 "GetTxStatus",
  "/tx/send":                   "Send",
  "/tx/mint":                   "CreateMintTx",
  "/tx/mint/sign":              "SignMintTx",
  "/utxo":                      "GetUTXOs",
  "/balance":                   "GetBalance",
  "/balance/all":               "GetAllBalances",
  "/asset/description":         "GetAssetDescription",
  "/asset/cap/fixed/create":    "CreateFixedCapAsset",
  "/asset/cap/variable/create": "CreateVariableCapAsset",
  "/address/create":            "CreateAddress",
  "/address/list":              "ListAddresses",
  "/key/import":                "ImportKey",
  "/key/export":                "ExportKey",
  "/ava/import":                "ImportAVA",
  "/ava/export":                "ExportAVA",
}

This is pretty simple and easily extendable, and contains everything we need to call the JRPC function with reflection.


Any functionality to extract words per pages count?

Currently I’m trying to implement ugly algorithm which will fill pages (their sizes i get from sectPr) one by one with paragraphs (like tetris), which will (conceptually) yield a distribution of paragraphs across pages and therefore their textual content.
I have two questions:

How can i calculate space that paragraph will occupy to "fill the tetris"?
 Maybe this function already implemented or maybe i misunderstood library functionality capabilities? Could you give me a piece of advise.

I shall be very grateful.

docx files are kind of fluid files, which means they do not determine, where each paragraph gets rendered. It's only possible to know the position of a text block, after the document gets rendered, e.g. in Word.
We are dealing with a similar problem. In the end, we are converting the docx to a pdf, a fixed layout format, and extract the location information from there. We use LibreOffice (via unoconv) for this, which works quite well if you have all needed fonts in place.

Thanks @RolandColored, well done :)


help with calling somatic SVs with savana 1.2.4

Hi there,
Thanks again for building this great tool. I have been trying to call somatic SVs with savana 1.2.4 on a rhabdoid tumor, where I am expecting there to be somewhere between 10-20 somatic SVs. This is also what I am finding from other SV callers. However, for some reason when I run savana on this sample, I am finding that there are 1000s of SVs. I am wondering if the way I am implementing savana is flawed? This is what my script looks like (I've edited paths to remove anything that could be PHI):
singularity run --bind /data1/shahs3:/data1/shahs3 /data1/shahs3/users/preskaa/singularity/savana_1.2.4--pyhdfd78af_0.sif savana run --tumour tumor.bam --normal normal.bam --outdir /data1/shahs3/isabl_data_lake/analyses/43/70/44370 --ref /data1/shahs3/reference/ref-sarcoma/GRCh38/v45/GRCh38.primary_assembly.genome.fa --contigs /data1/shahs3/reference/ref-sarcoma/GRCh38/v45/contigs.chr.hg38.txt --threads 8 --min_af 0.05

singularity run --bind /data1/shahs3:/data1/shahs3 /data1/shahs3/users/preskaa/singularity/savana_1.2.4--pyhdfd78af_0.sif savana classify --vcf tumor.sorted.sv_breakpoints.vcf --custom_params /data1/shahs3/isabl_data_lake/analyses/43/70/44370/classification-parameters.json --output tumor.classified.vcf --min_af 0.05 --threads 8

The classification-parameters.json looks like this:
{
    "somatic": {
        "MAX_NORMAL_READ_SUPPORT": 0
    }
}

The singularity image I used was pulled from here: https://quay.io/repository/biocontainers/savana?tab=info
Happy to provide any additional information that may be useful.
Thanks for your time and help.
Best,
Asher

Hi there! Thanks for raising this issue, happy to clarify :)
Was this sample sequenced with nanopore or PacBio? If nanopore, I'd recommend using the trained model to perform the classification:
singularity run --bind /data1/shahs3:/data1/shahs3 /data1/shahs3/users/preskaa/singularity/savana_1.2.4--pyhdfd78af_0.sif savana classify --vcf tumor.sorted.sv_breakpoints.vcf --ont --output tumor.classified.vcf --min_af 0.05 --threads 8

and if PacBio, the same command but swapping out --ont for --pb which will implement a set of filters that can be found here.
Regardless of whether the SVs were classified as somatic or not, they will be in the tumor.classified.vcf, so you'll need to filter for "PASS" SVs to ensure only SVs classified as somatic are present. Alternately, you can provide another argument to the savana classify command: --somatic tumor.classified.somatic.vcf and the tumor.classified.somatic.vcf will contain only somatic SVs.
If you'd prefer to use a custom classification JSON file, I'd recommend adding more filtering parameters. The custom JSON you provided will only remove SVs if they have normal support. However, there are many other variables that should be considered. If you go this route, I'd recommend doing some trial and error to see which filters work best for your data.
For example, you may want to include a minimum threshold on the required number of tumour reads via "MIN_TUMOUR_READ_SUPPORT" and the maximum number of normal reads with evidence of an SV (of any type) clustering to that the location via "MAX_CLUSTERED_READS_NORMAL". Additionally, there are other thresholds such as "MAX_ORIGIN_STARTS_STD_DEV" and "MAX_ORIGIN_EVENT_SIZE_STD_DEV" which are related to the standard deviation of the position and size of an SV and can be used to distinguish between noise and true somatic SVs. You can find more information about some of these fields here.
Let me know if you have any more questions or run into issues with the above.
All the best,
Hillary

Hi Hillary,
Thanks for the quick and comprehensive reply, this was super helpful! I was able to successfully run savana with your suggestions here, and the somatic SV counts is much more in line with what I anticipated. As a follow-up question, I was wondering if it is possible to use both the --ont flag and the --custom_params flag together?
Thanks again for your time and help.
Best,
Asher

Hi Asher,
Glad I was able to help! In combination with the --ont flag you can also apply a threshold to the minimum number of supporting tumour reads (using --min_support) and a minimum tumour allele-fraction (using --min_af).
If you wanted to apply more detailed custom filters than support and AF though, you could use the somatic VCF from a classify command run using the --ont flag and run it through another classification round using a custom JSON.
For example, to apply the model:
singularity run --bind /data1/shahs3:/data1/shahs3 /data1/shahs3/users/preskaa/singularity/savana_1.2.4--pyhdfd78af_0.sif savana classify --vcf tumor.sorted.sv_breakpoints.vcf --ont --output tumor.classified.vcf --threads 8 --somatic tumor.classified.somatic.vcf

and then, to filter the somatic calls even further with a custom JSON:
singularity run --bind /data1/shahs3:/data1/shahs3 /data1/shahs3/users/preskaa/singularity/savana_1.2.4--pyhdfd78af_0.sif savana classify --vcf somatic tumor.classified.somatic.vcf --custom_json classification-parameters.json --output tumor.classified.somatic.custom_filters.vcf

However, neither of these methods would recover calls that met the custom thresholds but were not classified as somatic by the model, they would only further filter the model's calls.
All the best,
Hillary

Hi Hillary,
Sorry I forgot to respond to this -- thank you for the detailed response here! This is very helpful. I tried the first option you mentioned (--ont flag with the --min_af flag and it worked great). I have yet to try filtering the somatic calls further with the custom json but this looks like it will be very useful as well.
Thanks again and best wishes,
Asher


[nginx-slim]: Release v0.12

This change is

@lavalamp please assign this to @bprashanth

Any reason to not move this to the ingress repo?

@bprashanth release history? I can try to do the same procedure when I migrated the ingress directory.

@bprashanth I think kubernetes/ingress is not the right place for this. Right now exists a directory only for images here. If we move only this image or with ubuntu-slim then the other images in this repo will depend on a different repo

/lgtm

gcr.io/google_containers/nginx-slim:0.12 has been pushed.

@ixdy thanks!


Installation instructions not working for v8

I want to use docker for setting up an opencast instance with the annotation tool running following installation instructions.
I thought I could just use the allinone Dockerfile and add the relevant build instructions from the documentation  (see https://github.com/opencast/opencast-docker/issues/150 for my initial question).
Unfortunately it is not working and I encountered multiple difficulties. I document them here for others and maybe someone can help me in the last step to make it work:

First I used the current opencast-docker version branch (9.1) and added some build instructions for the annotation-tool in the build-image of the allinone Dockerfile:

...
# Already existing build instruction for opencast
RUN git clone --recursive "${OPENCAST_REPO}" "${OPENCAST_SRC}" \
 && cd "${OPENCAST_SRC}" \
 && git checkout "${OPENCAST_BRANCH}" \
 && mvn --batch-mode install \
      -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \
      -DskipTests=true \
      -Dcheckstyle.skip=true \
      -DskipJasmineTests=true \
 && tar -xzf build/opencast-dist-${OPENCAST_DISTRIBUTION}-*.tar.gz --strip 1 -C "${OPENCAST_HOME}"

# Build instructions for the annotation tool that I added
RUN git clone --recursive "https://github.com/opencast/annotation-tool.git" "${OPENCAST_ANNOTATION_TOOL_SRC}"
RUN cd "${OPENCAST_ANNOTATION_TOOL_SRC}" \
 && git checkout master \
 && mvn --batch-mode install \
      -DdeployTo="${OPENCAST_HOME}"

# This is that last line from the opencast build step. I extracted it to use the cache for building the annotation tool
RUN rm -rf "${OPENCAST_SRC}"/* ~/.m2 ~/.npm ~/.node-gyp
...

The build failed, because that annotation tool imports org.opencastproject.util.data.functions.Tuples in one of its files but since v9 this file does not exists anymore in opencast (v8.10 vs v9.1).

Then I tried to use the v8.10 of opencast for building the annotation tool by adding -Dopencast.version=8.10 to the mvn install command. The build succeed but the initialization during the start of opencast failed. And http://localhost:8080/annotation-tool/index.html returned a 404 error.

Then I used the v8.10 branch opencast-docker allinone Dockerfile and did the same modifications as described in 1. and 2.
The build succeed but now it complained about the wrong version of the org.opencastproject.mediapackage dependency:

opencast_1  | 2021-01-08T21:31:41,054 | WARN  | (PaxLoggingServiceImpl$1ManagedPaxLoggingService:398) - Error while starting bundle: file:/opencast/deploy/annotation-tool-api-0-SNAPSHOT.jar
opencast_1  | org.osgi.framework.BundleException: Unable to resolve annotation-tool-api [10](R 10.0): missing requirement [annotation-tool-api [10](R 10.0)] osgi.wiring.package; (&(osgi.wiring.package=org.opencastproject.mediapackage)(version>=8.10.0)) Unresolved requirements: [[annotation-tool-api [10](R 10.0)] osgi.wiring.package; (&(osgi.wiring.package=org.opencastproject.mediapackage)(version>=8.10.0))]

If I omit the -Dopencast.version=8.10 parameter I get the same error as described in 1.
Is the building and installation instruction outdated? And what do I have to do, to make it at least build and start?
Thanks in advance for any help!

The installation instructions are indeed not up to date and/or complete. Unfortunately. However, you arrived at a combination that should work in theory. Can you verify that the bundle in question is really there?
Alternatively, you could also try a slightly earlier versions. I'm not sure I tested with 8.10, yet. :thinking:

The installation instructions are indeed not up to date and/or complete. Unfortunately. However, you arrived at a combination that should work in theory. Can you verify that the bundle in question is really there?
Alternatively, you could also try a slightly earlier versions. I'm not sure I tested with 8.10, yet. :thinking:

Thank you for your feedback.
I will test it with 8.4 or which opencast version do you recommend?
Shouldn't the bundle (org.opencastproject.mediapackage) be in the ~/.m2 directory after building the opencast version? But I will check this as well.

Thank you for your feedback.
I will test it with 8.4 or which opencast version do you recommend?
Shouldn't the bundle (org.opencastproject.mediapackage) be in the ~/.m2 directory after building the opencast version? But I will check this as well.

The bundle Karaf uses should actually be in the hierarchy beneat <oepncast_base_path>/system.
However, what I meant was rather: Can you check whether Karaf actually exports that package. You can check that with something like
package:exports | grep mediapackage

on your Karaf console.
8.4 should work; I recently tried 8.6 as well, IIRC.

The bundle Karaf uses should actually be in the hierarchy beneat <oepncast_base_path>/system.
However, what I meant was rather: Can you check whether Karaf actually exports that package. You can check that with something like
package:exports | grep mediapackage

on your Karaf console.
8.4 should work; I recently tried 8.6 as well, IIRC.

Thanks @JulianKniephoff, but the issue was with the loading order of the deploy files (https://github.com/opencast/opencast-docker/issues/150, https://github.com/opencast/annotation-tool/issues/226). So, the installation is working now for v8.10.
I will change the title, so that I can close this issue.

Thanks @JulianKniephoff, but the issue was with the loading order of the deploy files (https://github.com/opencast/opencast-docker/issues/150, https://github.com/opencast/annotation-tool/issues/226). So, the installation is working now for v8.10.
I will change the title, so that I can close this issue.

Aah, right, that makes sense. >_<
Glad you got it working. :D

Aah, right, that makes sense. >_<
Glad you got it working. :D


add feature

hi butthx, i very appreciate with your project :)
I have feature request, add option for ignore channel from PM message (not from grup). it's add privacy protect for channel id (caused other admin cannot find who admin send this message and see who admin ignore this channel)
thanks!

Hi, thanks you for your suggestions. i will add it in next update if possible. ✨


Desktop Single Column width

Please update desktop layouts that use single columns to a smaller width. The request is to not expand the single column layouts to full width (like the 2 column layouts). See examples:

In Figma
https://www.figma.com/design/9hUYtvCKjOyB92vt8ukYtD/Product-Handoff?m=auto&node-id=3184%3A12393&t=jOfT063R1943NYz7-1

Closing, stale


Improve Weather Station report

Related to https://github.com/Energy-Sparks/energy-sparks/pull/4063
We had a run of around ten days where data we had loaded from Meteostat had a large number of zero readings during the day. The other PR adds a task to allow this type of day to be backfilled.
This PR adjusts the admin data report for weather stations to summarise the average temperature, rather than whether there are missing readings. We rarely, if ever have missing days so reporting on other aspects of the data is more helpful here.
These controllers/views are quite old so I've tidied the code a bit to simplify it. But the primary changes are adjusting the query and views to show the average temperature for a day, to help highlight days where it is unusually cold (or possibly warm). This might also help highlight some other data issues that need following up with Meteostat.
The thresholds for the temperature ranges are a bit arbitrary but I've using 5.0 as lower threshold to highlight days with low temperatures, and AnalyseHeatingAndHotWater::HeatingModelTemperatureSpace::BALANCE_POINT_TEMPERATURE as the threshold for a warm day to align with the analytics. We're considering revising this threshold so the updated report helps to highlight those days.
Missing days are still shown on the calendar, but we're not showing any partial days any longer. But as noted this doesn't ever happen as we always request a full day from Meteostat.

Looks good - wondering if there should be some rounding on the average temperature figure shown in the tooltip:

Added if you'd like to rereview


Add AIX support

This Pull Request adds support for AIX Operating system which is now available on Go.

Any news about this CL ? The failures don't seem related.

@Helflym do you want to pick this back up? We're still missing godocs (we might as well add them while the PR is open, and we should standardize the rest of the code) and we should probably get rid of the remaining _s in utmp

@Helflym It looks like swap stats require root:

@Helflym It looks like swap stats require root:
    TestConcreteGetSwap: concrete_sigar_test.go:58:
                Error Trace:    concrete_sigar_test.go:58
                Error:          Received unexpected error:
                                perfstat_memory_total: permission denied
                Test:           TestConcreteGetSwap
--- FAIL: TestConcreteGetSwap (0.01s)

No, perfstat API is working without root permissions. The problem is related to how CGO handles errno and perfstat_pagingspace results. I guess errno is being set somewhere during perfstat_pagingspace's call even if it finally succeeds.
Adding a check on perfstat_pagingspace results should be enough.


⚠ PrivateHD has degraded performance

In ca930a0, PrivateHD ($PHD) experienced degraded performance:

HTTP code: 200
Response time: 1740 ms

Resolved: PrivateHD performance has improved in 3c8b1df.


Create pku

北京大学
https://www.pku.edu.cn/

https://mail.pku.org.cn/

@smile349 lib/domains/cn/org/pku: this request has an incorrect file path format, please ensure that you are familiar with     this repository rules located at the bottom of this page and change     your request accordingly. If you don't know how to change request, close it and open a new one.     If you are not able to make the pull request according the instructions, please send us an email to<EMAIL_ADDRESS>Please mention this request URL in the message.

@smile349 lib/domains/cn/org/pku: this request has an incorrect file path format, please ensure that you are familiar with this repository rules located at the bottom of this page and change your request accordingly. If you don't know how to change request, close it and open a new one. If you are not able to make the pull request according the instructions, please send us an email to<EMAIL_ADDRESS>Please mention this request URL in the message.
The file path I provided is correct. The email suffix of teachers in our school is @pku.edu.cn, while that of students is @pku.org.cn. This is the official website of our school https://www.pku.edu.cn/. This is our students' education login email address https://mail.pku.org.cn/coremail/hxphone/

@smile349 lib/domains/cn/org/pku: this request has an incorrect file path format, please ensure that you are familiar with     this repository rules located at the bottom of this page and change     your request accordingly. If you don't know how to change request, close it and open a new one.     If you are not able to make the pull request according the instructions, please send us an email to<EMAIL_ADDRESS>Please mention this request URL in the message.

OK


Is the weights available?

Hi,
thanks for the interesting work. could you share the weights after your training?

Is trained weights available?

Hi, no the trained models aren't available, only the code to re-run the training.


svelte-check support

Is your feature request related to a problem? Please describe.
Continuation of #143
Describe the solution you'd like
Most likely something comparable to eslint but with svelte-check instead.
Describe alternatives you've considered
No response
Additional context
No response
Validations

[X] Read the docs.
[X] Read the Contributing Guidelines.
[X] Check that there isn't already an issue that asks for the same feature to avoid creating a duplicate.

ESLint9
Stylelint16
Svelte

Is on the road to be supported. I took a look at https://github.com/sveltejs/language-tools/blob/master/packages/svelte-check/src/index.ts, it's quite stable.


shouldRotate API could be cleaner

Currently I think this is a tad confusing to use - rather than shouldRotate could it be lockToPortrait(), lockToLandscape() and unlockAllOrientations()?

Agreed. I'll improve the shouldRotate API.
Thanks for the suggestion!

By the way... I'm probably lame, but I haven't been able to find out where to lock the orientation. Isn't it supposed to be in the app component?
I have an "undefined is not an object" when trying to evaluate Orientation.shouldRotate.
console.log(Orientation) correctly returns what it should.
Thanks for your help!

@tnguyen42 did you put Orientation.shouldRotate(0); in the componentDidMount?

Yes.
Looks like:
var Orientation = require('react-native-orientation');

var App = React.createClass({
	componentDidMount: function(){
		Orientation.shouldRotate(0);
  	},
});

@tnguyen42 in your AppDelegate.m do you have the following?
- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
  NSUInteger orientations;

  orientations = UIInterfaceOrientationMaskPortrait;

  if (self.shouldRotate == YES) {
    orientations = UIInterfaceOrientationMaskAllButUpsideDown;
  }

  return orientations;
}

Make sure you have the self.shouldRotate' it used to be shouldRotate` but was fixed recently.

Yeah, everything seems in order. I pasted the code today.
I've just rebuilt the entire app with XCode and it still doesn't work.
Though
console.log(Orientation);

correctly displays [tid:com.facebook.React.JavaScript] { shouldRotate: [Function],   addOrientationListener: [Function],   removeOrientationListener: [Function] }

Hi,
The function still doesn't work. Am I the only one who encountered such a problem?

@tnguyen42 can you post your code somewhere?

Well I've just tried to use it on a very short example and I got the same result. So here it is:
'use strict';

var React = require('react-native');
var SearchPage = require('./SearchPage');

var Orientation = require('react-native-orientation');

var {
	StyleSheet,
	Text,
	Component,
	AppRegistry,
	NavigatorIOS,
	TouchableHighlight,
} = React;

class PropertyFinderApp extends Component {

	componentDidMount () {
		Orientation.shouldRotate(0);
	}

// ------------------------------ Render Here
	render () {

		return (
			<NavigatorIOS
				style={styles.container}
				initialRoute={{
					title: 'Property Finder',
					component: SearchPage,
				}}
			/>
		);
	}
}

var styles = StyleSheet.create({
	text: {
		color: 'black',
		backgroundColor: 'white',
		fontSize: 30,
		margin: 80,
	},
	container: {
		flex: 1,
	},
	button: {
		height: 36,
		flex: 1,
		flexDirection: 'row',
		backgroundColor: '#48BBEC',
		borderColor: '#48BBEC',
		borderWidth: 1,
		borderRadius: 8,
		marginBottom: 10,
		alignSelf: 'stretch',
		justifyContent: 'center',
	},
});

AppRegistry.registerComponent('PropertyFinder', function() {return PropertyFinderApp});

@tnguyen42 Ok that looks ok. Can you show me your AppDelegate.h + .m files? Also which version of React Native you're using.

Hi, thanks for your time.
Here's my AppDelegate.h:
/**
 * Copyright (c) 2015-present, Facebook, Inc.
 * All rights reserved.
 *
 * This source code is licensed under the BSD-style license found in the
 * LICENSE file in the root directory of this source tree. An additional grant
 * of patent rights can be found in the PATENTS file in the same directory.
 */

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (nonatomic) bool shouldRotate;

@property (nonatomic, strong) UIWindow *window;

@end

And here's my .m:
/**
 * Copyright (c) 2015-present, Facebook, Inc.
 * All rights reserved.
 *
 * This source code is licensed under the BSD-style license found in the
 * LICENSE file in the root directory of this source tree. An additional grant
 * of patent rights can be found in the PATENTS file in the same directory.
 */

#import "AppDelegate.h"

#import "RCTRootView.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  NSURL *jsCodeLocation;

  /**
   * Loading JavaScript code - uncomment the one you want.
   *
   * OPTION 1
   * Load from development server. Start the server from the repository root:
   *
   * $ npm start
   *
   * To run on device, change `localhost` to the IP address of your computer
   * (you can get this by typing `ifconfig` into the terminal and selecting the
   * `inet` value under `en0:`) and make sure your computer and iOS device are
   * on the same Wi-Fi network.
   */

  jsCodeLocation = [NSURL URLWithString:@"http://localhost:8081/index.ios.bundle"];

  /**
   * OPTION 2
   * Load from pre-bundled file on disk. To re-generate the static bundle
   * from the root of your project directory, run
   *
   * $ react-native bundle --minify
   *
   * see http://facebook.github.io/react-native/docs/runningondevice.html
   */

//   jsCodeLocation = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];

  RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation
                                                      moduleName:@"PropertyFinder"
                                                   launchOptions:launchOptions];

  self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
  UIViewController *rootViewController = [[UIViewController alloc] init];
  rootViewController.view = rootView;
  self.window.rootViewController = rootViewController;
  [self.window makeKeyAndVisible];
  return YES;
}

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
  NSUInteger orientations;

  orientations = UIInterfaceOrientationMaskPortrait;

  if (self.shouldRotate == YES) {
    orientations = UIInterfaceOrientationMaskAllButUpsideDown;
  }

  return orientations;
}

@end

And my react version is 0.7.1.

Issue solved on my part: when adding files to my project, I had to check "Create groups" instead of "Created folder references".
Thanks for your time!

@tnguyen42 awesome glad you fixed it!

API has been updated @brentvatne :smile: thanks!

I tried 1.5 earlier today and could not get lockToPortrait() to work.  To make things easier for you to see, download both branches (1.4 && 1.5) from the following repo, and npm install for each branch:  https://github.com/achang28/OrientationTest.
1.4 branch: After pressing the "lock" button in the app, the orientation does in fact lock.
1.5 branch: the orientation does NOT lock after pressing "lock" button...

Hey @achang28 Can you try 1.6? Made some minor changes. I'm also looking for someone that can help with getting shouldAutoRotate working.

Sure. Will give it a shot in a few hours (currently still in bed...)

Cool. Thanks.
From reading the docs it says that the code below should be placed in the view controller.
-(BOOL)shouldAutorotate
{
    return YES;
}

I'm just wondering how can this be enabled globally? maybe @brentvatne can help?

Unfortunately I have no Obj-C skills...yet.  So with 1.6 lockToPortrait seems to work fine, whereas  lockToLandscape isn't behaving correctly -- it continues to allow rotation.
Good job -- keep at it!  Making some progress...


Move config-api module with git history

Purpose
Moves config-api module from ballerina-lang, restructures code to build the module independently.
Fixes: https://github.com/ballerina-platform/ballerina-lang/issues/25089
Tests
Tests are implemented using testerina. bvm/ballerina-config related java tests are moved to bvm/ballerina-config module in PR: https://github.com/ballerina-platform/ballerina-lang/pull/25415
https://github.com/ballerina-platform/module-ballerina-config/issues/4

 Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.10 out of 12 committers have signed the CLA.:white_check_mark: aashikam:white_check_mark: wggihan:white_check_mark: rdhananjaya:white_check_mark: warunalakshitha:white_check_mark: kalaiyarasiganeshalingam:white_check_mark: irshadnilam:white_check_mark: ldclakmal:white_check_mark: riyafa:white_check_mark: SupunS:white_check_mark: MadhukaHarith92:x: Kalaiyarasi:x: kaneeldiasKalaiyarasi seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.You have signed the CLA already but the status is still pending? Let us recheck it.

I think we can move these config API Java tests inside the config-native submodule. WDYT?

I think we can move these config API Java tests inside the config-native submodule. WDYT?

@BuddhiWathsala Had a discussion with @pubudu91. We thought of moving bvm/ballerina-config related test cases to bvm/ballerina-config module in ballerina-lang.

@aashikam, why we commented out several Java tests?.

@aashikam, why we commented out several Java tests?.

@BuddhiWathsala The java tests are tests with ballerina files. Since I'm not sure I covered everything in the java-ballerina tests using testerina, I commented out the files and kept them for future reference without deleting them. Reference issue: https://github.com/ballerina-platform/module-ballerina-config/issues/4


Extend Rive.contents to provide more file information

It would be great if the Rive.contents property were extended to provide more information about the file contents. For example, if I could get a list of the text runs exported, it would allow me to build some type safety around the get/setTextRun APIs, so that we're not trying to update text on text runs that no longer exist.

Hey @woro83c, we've released an experimental CLI tool (note that at this time it's still a work-in-progress), and we only provide instruction for building on Mac at this stage.
However, this tool can be used to parse a .riv file, and you can give it a custom Mustache template to generate any code/files you want.
Using this CLI you'd, for example, be able to generate a JSON file containing all of the text- and nested- text runs.
We welcome any and all feedback at this stage.
https://github.com/rive-app/rive-code-generator-wip/tree/main

thank you, sounds really good... i'll check it out.


Stopped working today please help!

Uncaught (in promise) TypeError: Cannot read property '1' of null
at e (bundle.js:59) This Error Showed up today .Please look into it


using the shortcode with the helpers.shortcode function in svelte components is returning is returning the string of the shortcode and not the picture element

Hi, I'm using the elderjs/image plugin and I can't figure out how to render the picture element in my svelte component
this is my component
<script lang="ts">
  export let helpers;
</script>

<style lang="scss">
  img {
    margin: 0.2rem;
    max-height: 4.5rem;
    padding: var(--spacing-0);
    @media (max-width: 40em) {
      max-height: 3rem;
      padding: 0;
    }
  }
</style>

<a href={helpers.permalinks.home({slug: '/'})}>
  {
    @html helpers.shortcode({name: 'picture',props:{src:'/img/logo.png'}})
  }

  <!-- {@html helpers.picture('/img/logo.png', {maxWidth: 2000, class:'', alt: ''})} -->
</a>

and this is being rendered instead {{picture src='/img/logo.png'/}}
I also tried the helpers.picture way but I'm getting helpers.picture is not a function error message If I do that.

By any chance is this in a Layout.svelte? I can look tomorrow but that may be a limitation/bug of the current implementation. Can you try and put it in Route/component svelte file?

@nickreese It's in a component svelte file which is being used by a header component which is then inside the Layout file, this is my layout file, The code above is from the navbrand component here I haven't pushed the elderjs image code yet because of this bug, If you need to see it in action then I can push to a temporary branch.

@NK-WebDev this is definitely due to
when the shortcodes hook is run. It happens between the route template and the layout  This was done because of the recursive nature used to mount svelte components but the regex/hydrate process could be extracted and moved to the shortcode hook. Basically I understand how to fix it, just gotta find time to write it.


Logo of simple.css

Maybe this project could get a better logo too?
As a designer, I find it really hurting both font choice, colors and positioning.
I was thinking... Maybe it deserves a better logo, but still keeping it simple and clear. I'll put here my quick design and if you like it, I can submit a pull request?

The preview is clearly a .jpg file, but I made it as .svg so it will be very sharp in README.md and your project's website.

P.S. - Nothing fancy, but it might be a better option for now?

OMG, that logo looks amazing. I love it and it would be amazing if you
could submit a PR. Honestly, the logo that we have now was made in 10
seconds in GIMP when I had a quick minute, so thank you so much for making
us a new one.
I will be looking out for your PR.
On Wed, Oct 4, 2017 at 10:08 AM, dvL<EMAIL_ADDRESS>wrote:

Maybe this project could get a better logo too?
As a designer, I find it really hurting both font choice, colors and
positioning.
I was thinking... Maybe it deserves a better logo, but still keeping it
simple and clear. I'll put here my quick design and if you like it, I can
submit a pull request?
The preview is clearly a .jpg file, but I made it as .svg so it will be
very sharp in README.md and your project's website.
[image: logo]
https://user-images.githubusercontent.com/3460368/31183335-89642d40-a926-11e7-8e71-6304f3d674f8.jpg
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/cpdevelops/simple.css/issues/35, or mute the thread
https://github.com/notifications/unsubscribe-auth/APfr95id5VD8Ific4bdHmTx2qDej6C35ks5so59dgaJpZM4PtxT9
.

--
Colin Pokowitz
<EMAIL_ADDRESS>www.cpdev.me

New logo added in PR #37.


Update Documentation (trim & type)

🗺  Requirements
Update both API doc pages to clarify the following:
1.) Vehicle object available fields (trim & type were added but are missing from the documentation list)
2.) Update documentation summary text to state whether or not the object itself, and the fields contained within the object are mandatory or optional is also missing (in accordance with actual xAPI behavior)
🤔 Problem Statement
We added 2 new fields to this object but never updated the documentation (beyond updating some of the sample JSON)

*Note: Trim & Type also seem to behave differently than the rest of the Vehicle object fields when it comes to null values.
🕵 Current Behavior
New fields are added but the only indication these exist is via either the front-end UI or some example JSON in some parts of the API documentation (inconsistent).
😍 Expected Behavior
Documentation is updated to match how the API actually functions.
✔  Acceptance Criteria

[ ] Create Claim Documentation page for vendor docs updated
[ ] Create Claim Documentation for xapi docs updated

Resources
Any relevant resources that developers can use to better contextualize the user story
🎥  Loom explanation:
🎨 Design file: https://www.figma.com/file/Rw0HAZA2zArcgf6e9hxopp/xForce-Pages?type=design&node-id=646-2&mode=design&t=HjDaIU8bvxqUF05S-0
📈 Supporting Report:

Hey team! Please add your planning poker estimate with Zenhub @jared-chapman @Alexsbuchanan @mikemclaren

Hi Usha,
It looks like it's working as intended. Typically we decode the provided VIN and fill in those fields based on the VIN decode. Last year as part of an IAA request we opened those fields up for user input so that you could give us VIN decode data (especially for things that might not decode well, like boats). So if you don't provide the Vehicle data object it looks like we'll do the VIN decode and attempt to populate that data ourselves, but if you do provide the object, we expect all of those fields to be provided (I believe Trim & Type may be optional, but we'll update the documentation soon to clarify this).


♻ Strict Typescript

FYI: The SonarCloud can be ignored. I am migrating to https://deepsource.io/ anyway.


Book Store: Add Redux reducer and actions

Book Store 🚀
Hi there, 👋 In this PR:

[ ] At first I created a new branch and then installed react-redux and @reduxjs/toolkit packages. ✅
[ ] Then I configure the store. ✅
[ ] Then I created books reduced with a couple of actions and exported them ✅
[ ] Then I created a categories reducer with action and exported them ✅
[ ] Last but not least I joined that reducer in my store and edited the readme file tech-stack section. ✅

Thanks for visiting this PR 👍

@TuyishimireEric Thank you so much for reviewing my pull request. 🙏


fetch_ocw2hugo_course_paths always crawls the entire bucket

Steps to Reproduce
Run an import management command like import_ocw_course_sites or overwrite_ocw_course_content that calls fetch_ocw2hugo_course_paths using the --filter or --filter-json argument to filter on a subset of courses
Expected Behavior
The function only checks the paths for the courses specified in the filter
Actual Behavior
The function crawls the entire S3 bucket, which takes a long time

Some additional context here is that initially this was desired functionality because of the need to check for unpublished courses in the source data.  When editing was still happening regularly in Plone and a course was unpublished, it would be ignored by ocw-to-hugo and have no output produced.  The reason this worked in this manner is because our first build system for OCW Next was simply a script that built the ocw-to-hugo output folder in its entirety.  Unpublished courses were being rendered because there wasn't a great way to check if the course was unpublished during this build script, which was just a bash file.  The best way to ensure a course wouldn't be published was to simply prevent ocw-to-hugo from outputting anything for that course.
Therefore, delete_unpublished_courses was added as a task that's run at the end of a run of import_ocw_course_sites.  After each run, the Website objects that exist in the DB are compared to what is found in the ocw-to-hugo-output S3 bucket and if a site exists in studio that doesn't exist anymore in the source bucket it is removed from the DB.  I made a separate issue to prevent this from happening here: https://github.com/mitodl/ocw-studio/issues/1218


test: Pluto.migrations updating to vi

Description:
Moving tests away from old style chai / sinon implementation to vitest.
Slight simplification to use specific models instead of using the Repositories to generate them.
Checklist:

[x] My PR follows the contribution guidelines of this project
[x] My PR is free of third-party dependencies that don't comply with the Allowlist
[x] I have commented my code, particularly in hard-to-understand areas
[x] I have made corresponding changes to the documentation
[x] I have added tests that prove my fix is effective or that my feature works
[x] I have checked the PR title to follow the conventional commit specification

@amagyar-iohk Don't really like blocking PR's because coverage dropped 0.04


Add dwave.cloud.hybrid.Client

Extending the pool of clients {base, qpu, sw} with the hybrid one.
Solver filtering criterion: category == "hybrid".
In support of https://github.com/dwavesystems/dwave-system/issues/288.

Closed in #379.


Advanced Slides not opening Excalidraw Image

Likewise, having issues opening excalidraw image in advanced slides.
code matches https://mszturc.github.io/obsidian-advanced-slides/extend-syntax/excalidraw/
Output is as attached image.

Obsidian Version 0.15.9
Advanced Slides Version 1.15.0

please try this tho options:

![[2021-10-24 14-25-12.excalidraw.md]]
![[2021-10-24 14-25-12.excalidraw]]

Does one of those work?

Both of these options are working now. I'm not sure what changed, but thank you.

In your example you specified the relative path to the vault. Currently, Advanced Slides does not support file paths, only files themselves. I'll see if I can adjust this in the next version

@MSzturc - I'm getting the same issue as Timothy. I have not specified the relative path in the markdown, but the slides are showing ![[relative path]] instead of the excalidraw drawing


[all] Tweaks to npm scripts to improve windows compatibility

Its currently difficult to built and test lit from a windows machine which makes it difficult to contribute. I've personally ran into issues myself while investigating this issue ( https://github.com/lit/lit/issues/1815 ).
Not sure how best to approach this so apologise if I should have created an issue first, any feedback is welcome. I've went and modified the package.json files for most of the packages (in particular prioritizing everything needed to be able to build and test the lit and lit-labs packages, though currently still having issues with localize and localize-tools).
The goal is to leave everything functioning as before for unix users but have them working on windows. I've ran the build and tests on my mac before and after the changes and the output appears the same so far.
Main changes:

replacing rm -rf with rimraf ( https://github.com/isaacs/rimraf )
using cross-env for setting environment variables ( https://github.com/kentcdodds/cross-env )
replacing single quoted paths with escaped double quotes e.g. "npx wtr \"../lit/test/**/*_test.(js|html)\"" instead of "npx wtr '../lit/test/**/*_test.(js|html)'"
in the case of regen-package-lock replacing the ; AND with "(rimraf node_modules package-lock.json || true) && npm install" ( https://medium.com/@chillypenguin/running-node-npm-scripts-sequentially-on-windows-8737dc24da1f )

localize and localize-tools
npm clean script was not working on windows, its possible to replace sed and grep using ( https://github.com/shelljs/shx ) but the xargs remains an issue. So instead using rimraf with the files specified like some of the other packages.
 "scripts": {
    "clean": "git clean -dXn | sed 's/^Would remove //' | grep -v node_modules | xargs rm -rf",
  }

for localize becomes: "rimraf {fnv1a64,id-generation,lit-localize}.{js,js.map,d.ts} tests/ .tsbuildinfo"
for localize-tools becomes: "rimraf lib/"

localize-tools has the src/fnv1a64.ts and src/id-generation.ts files symlinked to the localize counterparts, this a bit trickier for windows as it requires installing git with non-default settings may require running the command with admin privileges, unless enabling a setting in a recent version of windows 10. More info here: ( more info here: https://github.com/git-for-windows/git/wiki/Symbolic-Links ).
Current workaround was to add a postinstall script to localize-tools that copies the files over instead (had a bit of a fight with git on this one):

"shx cp ../localize/src/fnv1a64.ts src/fnv1a64.ts && shx cp ../localize/src/id-generation.ts src/id-generation.ts"

Not sure if this is the right way to go about this, probably a better approach than this.

The above changes allows me to build lit on windows, however once built there are some issues with tests (which I have not yet looked into). Here is an example:

(edit: did a little bit of digging into the test fail above)
For some reason this line of the test is giving me different results on win/mac:
https://github.com/lit/lit/blob/main/packages/lit-element/src/test/lit-element_styling_test.ts#L312
The result of this querySelectorAll on my mac is an array with just this element (manually formatted):
<style scope="x-6">
  div.x-6 {
    padding: 4px;
  }

  span.x-6 {
    display: block;
    border: 4px solid blue;
  }

  div.x-6 {
    border: 2px solid blue;
  }

  span.x-6 {
    display: block;
    border: 3px solid blue;
  }
</style>

And on windows I get an array with two style elements (again manually formatted):
<style scope="x-6">
  div.x-6 {
    padding: 4px;
  }

  span.x-6 {
    display: block;
    border: 4px solid blue;
  }

  div.x-6 {
    border: 2px solid blue;
  }

  span.x-6 {
    display: block;
    border: 3px solid blue;
  }
</style>

<style scope="x-6">
  div.x-6 {
    border: 2px solid blue;
  }

  span.x-6 {
    display: block;
    border: 3px solid blue;
  }
</style>

For the package locks conflicts, you can just run npm run upgrade from the root to regenerate everything.

For the package locks conflicts, you can just run npm run upgrade from the root to regenerate everything.

ah thanks... having a bit of a fight with it

Hmm, looks like something is off relating to the package locks being out of sync with the package json files somehow? Not sure why that would happen if you did a full regeneration https://github.com/lit/lit/pull/1867/checks?check_run_id=2570659334

hmm hopefully sorted now, had been added dependencies via npx lerna add --dev rimraf --scope packagename but seems that doesn't update the package-lock.json.

Hold off on this for now, couple of issues I want to investigate. After running build on windows:

git wants to commit some files like .husky/.gitignore and config.schema.json in localize-tools with crlf file endings
ignore-sync seems to not be coping across the [relative] section for .eslintignore and .prettierignore

Ok I've made some changes and I think we are now good.

ignore-sync has been updated to 4.0.0 which fixes the [relative] merging issue on windows

nuke and update scripts
Updated the nuke and update scripts to fallback to npx rimraf should the rm -rf fail:
e.g nuke
(rm -rf node_modules || npx rimraf node_modules) && npm install && lerna exec \"(rm -rf node_modules || npx rimraf node_modules)\" && lerna bootstrap && npm run clean

Line endings issues
Git for Windows default behaviour is to automatically check out text files with CRLF ending and convert them back to LF when committing.
Running the build was changing some files from CRLF to LF (while the actual content remained the same), which made git think there was a change to commit but gave an error when trying to commit that there was nothing to commit.
Some examples:

husky updates the /.husky/.gitignore and saves it in LF endings
ignore-sync writes out the generated .prettierignore, .eslintignore etc with LF endings

To fix this I've added a few .gitattributes files, for example in the root:
# Auto detect text files and perform LF normalization
* text=auto

# Declare files that will always have LF line endings on checkout.
/.husky/.gitignore text eol=lf
/.prettierignore text eol=lf
/.prettierignore-sync text eol=lf
/.eslintignore text eol=lf
/.eslintignore-sync text eol=lf

They have also been added to: localize-tools, localize/examples/runtime and localize/examples/transform.
I've cloned and ran the build on windows and mac and it all seems good.
Also ran the new update script so hopefully my package-lock.json nemesis is taken care of this time.


draft/question: implement connect_and_verify

Hi there
I'm wondering if you'd find this useful at all? I think it could reduce some boilerplate
Happy to clean it up or take any code review if this seems useful
Best

Made one change based on your feedback -- let me know how you'd like to proceed? (No harm in closing if this isn't a direction you'd like to go in)

This is definitely a good thing to have though! So worthwhile doing it, just want to do it right :)

Thanks so much for your time engaging on this!


Merge CPU and GPU time stepping loops.

See: https://github.com/ali-ramadhan/Oceananigans.jl/blob/0eba5b12a678cccbc8927e8165e3819b69fa758b/src/time_steppers.jl

@glwagner went as far as possible with the current version of GPUifyLoops.jl in https://github.com/climate-machine/Oceananigans.jl/pull/97.


sessionInvalidationSucceeded causes page refresh

https://github.com/simplabs/ember-simple-auth/blob/master/packages/ember-simple-auth/lib/simple-auth/mixins/application-route-mixin.js#L200
I'd like to invalidate session without a page refresh, is this possible?

Just define your own sessionInvalidationSucceeded action on your application route that overrides the one from ApplicationRouteMixin.

Awesome, thank you so much. Great library!


Filter modules by health

Is your feature request related to a problem? Please describe.
The home page of Cyclops shows all deployed modules as cards that can be searched by name

The scope of the issue is to enable searching by health status.
Describe the solution you'd like
You can implement a dropdown with values healty, unhealthy and unknown. The filtering should be implemented only on frontend in a similar way as the name search

Sure thing @nikhiltanna


Kanban board

Links to the repositories:
https://github.com/users/danielamoreno699/projects/1
https://github.com/danielamoreno699/WanderPal ( Backend)
https://github.com/danielamoreno699/wanderpal-frontend (Frontend)
number of team members: 4

Hi @danielamoreno699,
Wow, you did it 🎉

Your project is complete!  There is nothing else to say other than... it's time to merge it :shipit:
Congratulations! 🎉
To highlight

All cards have descriptions, have been assigned, and are pointed fairly according to the requirement✔

Optional suggestions
Every comment with the [OPTIONAL] prefix won't stop the approval of this PR. However, I strongly recommend you to take them into account as they can make your code better. Some of them were simply missed by the previous reviewer and addressing them will really improve your application.
Cheers and Happy coding!👏👏👏
Feel free to leave any questions or comments in the PR thread if something is not 100% clear.
Please, remember to tag me in your question so I can receive the notification.

As described in the Code reviews limits policy  you have a limited number of reviews per project (check the exact number in your Dashboard). If you think that the code review was not fair, you can request a second opinion using this form.


Peer Review [V&V Plan] - contact with QSA

Artifact Under Review
V&V Plan
Team Number for Team Doing the Review
Team 10
Description of Issue
I'm not sure if this was planned out already but just wondering if it's actually feasible to contact a QSA for your T-CO0 test - how will you find and contact them? Is there a timeline and plan for this?

@Necried


Question: Edge detection

val state = rememberZoomableState()
val painter = resourcePainter(R.drawable.example)

LaunchedEffect(painter.intrinsicSize) {
  state.setContentLocation(
    ZoomableContentLocation.scaledInsideAndCenterAligned(painter.intrinsicSize)
  )
}

I'm wondering if this (Edge detection Function) only works with painter or others like ( AsyncImage ) ?

Modifier.zoomable() is designed for any kind of zoomable content, so no you aren't limited to painters. Edge detection will work for anything as long as you can provide the content size.
If you are displaying images with Coil then is there a reason you aren't using ZoomableAyncImage(), which handles this for you?

Modifier.zoomable() is designed for any kind of zoomable content, so no you aren't limited to painters. Edge detection will work for anything as long as you can provide the content size.
If you are displaying images with Coil then is there a reason you aren't using ZoomableAyncImage(), which handles this for you?

You right about ZoomableAyncImage 😄, Actually used both of them.
Kindly can you share an example other than painter?

Hmmm I can only think of images. SubSamplingImage() doesn't technically use a painter, but it divides bitmaps into tiles and calculates their visual size:
https://github.com/saket/telephoto/blob/fe91eee397a88dc26760a099b9e7209d6207fd24/zoomable-image/sub-sampling-image/src/main/kotlin/me/saket/telephoto/subsamplingimage/SubSamplingImageState.kt#L96-L98
If you were drawing something to the canvas, I'd imagine it to look something along these lines:
  val density = LocalDensity.current
  val verticalSpacePx = density.run { 24.dp.toPx() }
  var canvasSize by remember { mutableStateOf(Size.Zero) }

  val state = rememberZoomableState()
  LaunchedEffect(state) {
    state.setContentLocation(
      ZoomableContentLocation.scaledInsideAndCenterAligned(
        canvasSize.copy(height = canvasSize.height - verticalSpacePx * 2)
      )
    )
  }

  Canvas(
    Modifier
      .fillMaxSize()
      .onSizeChanged { canvasSize = it.toSize() }
      .zoomable(state)
  ) {
    drawRect(
      color = Color.Yellow,
      topLeft = Offset(0f, verticalSpacePx),
      size = size.copy(height = size.height - verticalSpacePx * 2),
    )
  }

(I haven't actually tested this code).

@devs-gireeb I'm going ahead and closing this issue, but please feel free to continue this discussion.


Find a suitable version of python.

When running presubmit, we were using /usr/bin/python3, which works fine on
systems that have a reasonably recent python version there.  However, our CI
system has a very old version of python there and prefers the use of "pyenv"
to modify the PATH to provide the desired version of python as simply
"python".  So add a check to use the first of "python" or "/usr/bin/python3"
that is at least version 3.7.3.

This change is

Is this PR still necessary per cl/398550449?


Allow a configurable timeout for slow/non-responding requests

Hi,
Maybe my use case is unique but occasionally I have some requests that take a long time to return. They should return quick but for various reasons it can happen that they take over a minute.
Would it be possible to add some sort of timeout that after X seconds the progress is forced to complete and hide?
Thanks,
Kevin.

It's a bit outside the normal use-case.  I'm happy to take a PR, but this isn't likely something I'll be adding to the project personally.  Thanks!


v2.12: leadship election panics and crashes controller

 controller | time="2020-12-16T10:35:34.758Z" level=info msg="Deleting TTL expired workflow argo/calendar-workflow-x28p4"
 controller | E1216 11:15:18.671907   78349 leaderelection.go:307] Failed to release lock: Lease.coordination.k8s.io "workflow-controller" is invalid: spec.leaseDurationSeconds: Invalid value: 0: must be greater than 0

I'm pretty use we panic here and then we see other things shutting down.
 controller | time="2020-12-16T11:15:18.671Z" level=info msg="stopped leading" id=local
 controller | time="2020-12-16T11:15:18.672Z" level=info msg="Shutting workflow TTL worker"
 controller | panic: http: Server closed
 controller | goroutine 279 [running]:
 controller | github.com/argoproj/argo/workflow/metrics.runServer.func1(0x1, 0xc00074df68, 0x8, 0x2382, 0x0, 0x0, 0xc000836000)
 controller | 	/Users/acollins8/go/src/github.com/argoproj/argo/workflow/metrics/server.go:53 +0x117
 controller | created by github.com/argoproj/argo/workflow/metrics.runServer
 controller | 	/Users/acollins8/go/src/github.com/argoproj/argo/workflow/metrics/server.go:50 +0x246
 controller | Terminating controller

https://github.com/kubernetes/client-go/issues/754

@alexec is this happening on your test? are you configuring LeaseDuration:   0 * time.Second on code?

@sarabala1979 no, it just seems to happen after about running for (maybe) 20m+

The issue is fixed in v1.20 Kubernetes.
https://github.com/kubernetes/kubernetes/pull/80954

It is very hard to reproduce this issue. it is not consistent. I was able to reproduce 2 times in my local env with k3d. I got one more different error also after that I couldn't reproduce it.
controller | I1217 09:33:17.702074   80579 leaderelection.go:288] failed to renew lease argo/workflow-controller: failed to tryAcquireOrRenew context deadline exceeded
controller | E1217 09:33:20.362137   80579 leaderelection.go:307] Failed to release lock: Operation cannot be fulfilled on leases.coordination.k8s.io "workflow-controller": the object has been modified; please apply your changes to the latest version and try again

FYI It looks like the fix is cherry-picked back to 1.18: https://github.com/kubernetes/kubernetes/pull/80954#issuecomment-717382622

We've hit a similar issue around LEADER_ELECTION_IDENTITY must be set so that the workflow controllers can elect a leader, which caused our workflow-controller to go into CrashLoopBackOff and jobs not to be scheduled.
Here are logs, if that's helpful. If there's a way that we could have prevented this, would be great to know. And if anyone has a monitoring approach that would have alerted to something like this, I'd be v interested to learn. Thanks in advance:
time="2020-12-25T20:44:53.729Z" level=info msg="config map" name=workflow-controller-configmap
time="2020-12-25T20:44:53.745Z" level=info msg="Configuration:\nartifactRepository:\n  archiveLogs: true\n  gcs:\n    bucket: {}\n    serviceAccountKeySecret:\n      key: \"\"\ninitialDelay: 0s\nmetricsConfig: {}\nnodeEvents: {}\nparallelism: 20\npodSpecLogStrategy: {}\ntelemetryConfig: {}\nworkflowDefaults:\n  metadata:\n    creationTimestamp: null\n  spec:\n    arguments: {}\n    retryStrategy:\n      backoff:\n        duration: 1m\n        factor: 2\n      limit: 10\n      retryPolicy: Always\n    serviceAccountName: {}\n    ttlStrategy:\n      secondsAfterFailure: 604800\n      secondsAfterSuccess: 604800\n  status:\n    finishedAt: null\n    startedAt: null\n"
time="2020-12-25T20:44:53.745Z" level=info msg="Persistence configuration disabled"
time="2020-12-25T20:44:53.746Z" level=info msg="Starting Workflow Controller" version=v2.11.8+b7412aa.dirty
time="2020-12-25T20:44:53.746Z" level=info msg="Workers: workflow: 32, pod: 32, pod cleanup: 4"
time="2020-12-25T20:44:53.867Z" level=info msg="Manager initialized successfully"
time="2020-12-25T20:44:53.867Z" level=fatal msg="LEADER_ELECTION_IDENTITY must be set so that the workflow controllers can elect a leader"

This sequence repeats every five minutes when the workflow-container-controller starts.

You need to set the LEADER_ELECTION_IDENTITY environment variable in your manifest. This is typically (always?) set to metadata.name.

Are you using install.sh from release or just updating the release version?
if you are just updating the release version, you need to add env on your existing deployment spec.
        env:
        - name: LEADER_ELECTION_IDENTITY
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.name

I was using this 2.11.8, tagged with kustomize: https://github.com/argoproj/argo/manifests/cluster-install?ref=v2.11.8. It had worked for a few weeks before that issue. I'm fairly confident the manifests didn't change.
I don't see any LEADER_ELECTION_IDENTITY in the manifests until after 2.12.2. I checked the manifests that were deployed and the images were all correctly tagged to 2.11.8 — it doesn't seem to be an issue with an untagged image upgrading accidentally.
So either I made a mistake (very possible) or the error came from a 2.11.8 image.
It resolved after upgrading to 2.12.2 — not sure whether that was the version upgrading or just a change in version. Wiping the whole argo namespace and reapplying the 2.11.8 manifests didn't help.
Thanks you as ever for engaging and for the phenomenal library.

LEADER_ELECTION_IDENTITY is a v2.12 feature, not a v2.11 feature, so you should not see anything is the logs if you're running v2.11.8.
docker run argoproj/workflow-controller:v2.11.8 version
Unable to find image 'argoproj/workflow-controller:v2.11.8' locally
v2.11.8: Pulling from argoproj/workflow-controller
e54ef591d839: Already exists
d69ba838510e: Already exists
Digest: sha256:44d87c9f555fc14ef2433eeda4f29d70eab37b6bda7e019192659c95e5ed0161
Status: Downloaded newer image for argoproj/workflow-controller:v2.11.8
workflow-controller: v2.11.8+b7412aa.dirty
  BuildDate: 2020-12-24T10:16:20Z
  GitCommit: b7412aa1bcff2df20bbe5d515abddb8f33cf4c9e
  GitTreeState: dirty
  GitTag: v2.10.0-rc1
  GoVersion: go1.13.15
  Compiler: gc
  Platform: linux/amd64

Why oh why does Docker Hub allow you to overwrite images like this.

@max-sixty Fixed.
docker run argoproj/workflow-controller:v2.11.8 version
workflow-controller: v2.11.8
  BuildDate: 2020-12-29T20:43:36Z
  GitCommit: 310e099f82520030246a7c9d66f3efaadac9ade2
  GitTreeState: clean
  GitTag: v2.11.8
  GoVersion: go1.13.4
  Compiler: gc
  Platform: linux/amd64

Great — thanks a lot for tracking it down!

K8s 1.19 client has a fix for this issue

K8s 1.19 client has a fix for this issue


Added Piezo Buzzer Support

Adds piezo buzzer support to pin D6 to play a tone when a print is completed.

Just tried it and it works
thanks a lot!

I have no idea how to do it, but anyone thinks would be possible to add a page (in the system browser site) to write and upload on the mini monitor a different tune for when the printer finishes?

I have no idea how to do it, but anyone thinks would be possible to add a page (in the system browser site) to write and upload on the mini monitor a different tune for when the printer finishes?


better choosing of format according to color depth

while converting tif into png makes sense for bitonal images, it's not very good for color images. In this case jpg is much better. We currently don't have any way to tell if a tiff is color or bitonal from the manifest, but we should do that. Example of work having this problem: http://library-dev.bdrc.io/show/bdr:W1KG4941 (front page)

this should only be applied to color, not to grayscale, as some works (such as W00JW501203) have grayscale images encoded as tiffs, but png still outperforms jpg (by a large rate) in terms of compression


Expand icon disappears when expansion was done using keyboard shortcut

Testing #156161

Create a manual folding range from a selection.
Put the cursor over the middle of the first line.
Expand using a keyboard shortcut like Ctrl+Shift+[ on Windows.
:bug: The icon disappears.
Fold again using a keyboard shortcut.
The icon appears.

If I click on the ... icon to expand the folding range, the icon changes to a vertical ..., which I assume is the expected behaviour.

I just noticed that if I bring my mouse over the hidden icon, it fades in. But in that case, wouldn't users have to remember where they created a folding range and expanded it?

Fixed by setting editor.showFoldingControls to always.


Topic/renovatebot

[x] read the CONTRIBUTING guidelines
[x] raised a GitHub issue or discussed it on the projects chat beforehand
[] added unit tests
[] added integration tests
[] updated documentation if needed
[] updated CHANGELOG.md

This will implement #323.
To make the renovatebot work, we would need to create a github app. (I decided to implement it with an app, as the permissions can be set more specifically)
In the developer setting create a new app.

Set GitHub App name (eg.renovatebot-headscale, or something like that)
Set Homepage URL to https://github.com/juanfont/headscale
Set permissions:

Administration Read-only
Contents Read & write
Issues Read & write
Metadata Read-only
Pull requests Read & write
Workflows Read & write
Everything else leave on No access

Install App "Only select repositories" --> juanfont/headscale
Generate Private Key (this will let you download a zip with a cert inside)
Add to the Secrets Actions of the repository two new secrets
RENOVATEBOT_APP_ID with the content App ID
RENOVATEBOT_SECRET with the private key encoded in base64 (cat .<CURRENT_DATE>.private-key.pem | base64 -w 0 && echo
Merge PR

After the setup of renovatebot it run it manually for the first time. This will result in some PRs to update some github actions. After that the renovatebot will look automatically on the 5th and 20th of each month for updates. Otherwise it will spam a lot of PRs for update. This can be reconfigured if needed.

Great work!


tekton.dev -demo,some command may be wrong --- the location is: Interactive Tutorial - step 2 of 6

Expected Behavior
when i run : mkdir /mnt/data && kubectl apply -f https://k8s.io/examples/pods/storage/pv-volume.yaml ......
the command Should execute correctly
Actual Behavior
mkdir: cannot create directory ‘/mnt/data’: File exists
the result like this ,so the next command won`t be execute
Steps to Reproduce the Problem

maybe we should use : mkdir -p /mnt/data && command....       to avoid  the problem

Additional Info

Kubernetes version:
Output of kubectl version:
(paste your output here)

Tekton Pipeline version:
Output of tkn version or kubectl get pods -n tekton-pipelines -l app=tekton-pipelines-controller -o=jsonpath='{.items[0].metadata.labels.version}'

@gitupxm163 the interactive tutorial is part of website repo, can you open this issue in that repo with the exact location of setup file.

@pritidesai i will do it ,thanks


Create a JUnit5 test runner

JUnit 4 works for Google, but everyone else has moved on. Create a new runner using modern JUnit.

Added in 1.5.0


Add ability to reference a directory and/or wildcard path in HostTailers

Is your feature request related to a problem? Please describe.
I'm frustrated not being able to use HostTailer with file names i don't know by advance.
Describe the solution you'd like
Add ability to tail files referencing a directory or a wildcard path.
Describe alternatives you've considered
Use a self-made fluentbit configuration as rancher does it in https://github.com/rancher/charts/blob/release-v2.6.2/charts/rancher-logging/rancher-logging/100.0.0%2Bup3.12.0/templates/loggings/rke/configmap.yaml#L21

Hi, @aslafy-z could you please give us more details about your use case?  We've tried the hosttailer with wildcard  and this is works for us.

How did you make it work?
Here is my configuration that doesn't work:
apiVersion: logging-extensions.banzaicloud.io/v1alpha1
kind: HostTailer
metadata:
  name: kubelet
  namespace: infrastructure-logging
spec:
  fileTailers:
  - name: kubelet
    path: /var/lib/rancher/rke/log/kubelet*.log

and the file path is:
/var/lib/rancher/rke/log/kubelet_33eff5a64b09cf37ef3f4258907834079fe5fdb14a851f2589b232256638f521.log -> /var/lib/docker/containers/33eff5a64b09cf37ef3f4258907834079fe5fdb14a851f2589b232256638f521/33eff5a64b09cf37ef3f4258907834079fe5fdb14a851f2589b232256638f521-json.log

Unfortunately we add the path to the command line of the sidecar container which I beleive works different then setting it in a config file, we need to look into this

Tested with latest, it works with the following configuration:
apiVersion: logging-extensions.banzaicloud.io/v1alpha1
kind: HostTailer
metadata:
  name: sample
spec:
  fileTailers:
    - name: api
      path: /tmp/test/api_*.log
    - name: web
      path: /tmp/test/web_*.log

Hey,
I tried to save the RKE logs via Hosttailer and developed the following workaround. The problem with the RKE logs is that they are only symlinks to the log files under /var/lib/docker/containers. But the path /var/lib/docker/containers is not mounted, because the defined path is "/var/lib/rancher/rke/log". Here it would be cool if you could simply define additional "mount paths" in the fileTailers without configuring the whole additional volume mount thing.
$ ll /var/lib/rancher/rke/log
kubelet_XXXXXXX.log -> /var/lib/docker/containers/XXXXXXX/XXXXXXX-json.log

apiVersion: logging-extensions.banzaicloud.io/v1alpha1
kind: HostTailer
metadata:
  name: rke-logs
spec:
  fileTailers:
    - containerOverrides:
        volumeMounts:
          - mountPath: /var/lib/docker/containers
            name: host-docker-path
            readOnly: true
          - mountPath: /var/pos
            name: positions
          - mountPath: /var/lib/rancher/rke/log
            name: var-lib-rancher-rke-log
      name: kublet
      path: /var/lib/rancher/rke/log/kubelet_*.log
  workloadOverrides:
    volumes:
      - hostPath:
          path: /var/lib/docker/containers
          type: Directory
        name: host-docker-path
      - hostPath:
          path: /var/pos
          type: ''
        name: positions
      - hostPath:
          path: /var/lib/rancher/rke/log
          type: ''
        name: var-lib-rancher-rke-log

@PlayMTL Can you please open a separate issue to track this feature request? Thank you


Request clarification on the meaning of "sample"

The Task Events section lists "sample" as an optional integer entry, with the description:

Onset of the event according to the sampling scheme of the recorded modality (that is, referring to the raw data file that the events.tsv file accompanies).

Could someone please clarify this?  Does it mean sample number?  Does it start at 0 or at 1?

Does it mean sample number?

Yes, for example if you want the exact data of an EEG recording with a sampling frequency of 1000Hz at 1 second, you would specify sample = 1000

Does it start at 0 or at 1?

this is related to https://github.com/bids-standard/bids-specification/issues/499 -- unfortunately there is no explicit indication of zero versus one-based indexing in BIDS at the moment.
In my short example above I used one-based indexing ... but in the #499 thread is a good argument for zero-based indexing in my opinion.

@sappelhoff
is this documented anywhere because it is true that the column description is not super clear?
had to reverse engineer what it could mean from one the bids example.
Should we clarify this definition with an example?

This clarification might not be as easy as it sounds. For example, European Data Format (EDF) which seems to be a preferred format for BIDS EEG is a multi-channel file format that allows different sampling rates for different channels in the same file.

Right. If I could turn back time, I'd maybe not make sample a "first class citizen" in the BIDS spec, and instead would have used it as one (of many) examples of the arbitrary columns that users can define themselves.
But now that we are stuck with it, I am up for improving the text, including the caveat raised by Kay. One could for example discourage the use of sample if there are more than one relevant sampling frequencies.

Closely related to the sample issue is how many significant figures should be provided for onset and duration in the events.tsv files.
The event files on openNeuro range from integers to numbers with 16 significant figures.
There seems to be little relationship to the actual accuracy of the values.
Anyone writing tools to clean up event files as part of the dataset formatting for BIDS
will likely end up rewriting/regenerating the event files and the decision has to be made.
Does anyone have any guidance on this issue?

Closely related to the sample issue is how many significant figures should be provided for onset and duration in the events.tsv files.

As you have probably seen, we don't have any requirements for this ... I would be open to adding a reasonable recommendation, if you have one in mind.

There seems to be little relationship to the actual accuracy of the values.

I don't understand what you mean by that.

Does anyone have any guidance on this issue?

as mentioned above: I think we could add a recommendation to the spec text, but I wouldn't know how that could look like, apart from maybe:

we RECOMMEND that dataset curators specify "onset" and "duration" with as much decimal precision as is reasonable in the context of the experiment. For example in an EEG experiment with devices operating at 1000Hz sampling frequency, dataset curators SHOULD specify at least 3 figures after the decimal point.