Throw on skip

Some helpful tips for a successful Apache Thrift PR:

Did you test your changes locally or using CI in your fork?
Is the Apache Jira THRIFT ticket identifier in the PR title?
Is the Apache Jira THRIFT ticket identifier in the commit message?
Did you squash your changes to a single commit?
Are these changes backwards compatible? (please say so in PR description)
Do you need to update the language-specific README?

Example ideal pull request title:
    THRIFT-9999: an example pull request title

Example ideal commit message:
    THRIFT-9999: [summary of fix, one line if possible]
    Client: [language(s) affected, comma separated, use lib/ directory names please]

For more information about committing, see CONTRIBUTING.md

Cool thanks, I just updated my master so it doesn't say it is a conflict, and I am going to push up c_glib changes shortly, then we'll see where the collisions are.

Running this locally, will push anything I can to fix and move forward.

The dlang code needed a fix, working on it..


PHPCI is redirecting to /session/login

Hello,
PHP : 5.5.9
nginx: 1.4.6
Ubuntu : 14.04
After successful installation, when I access through the browser it redirects to the /session/login. I tried the solutions in other's similar issue, but nothing is worked for me.
is there any other reason for this issue?
Thanks,
Saneesh.

I think, that session doesnt work (write doesnt allowed).

Hello Corpsee,
Could you please explain a little more?

I don't know your situation, but it looks like problem with session (Session can't start and all requests redirect you to /session/login). I think, you should looking for PHP session errors in error log.

Have you enabled the .htaccess on public? you should have a .htaccess file on the public folder, double check that before checking session problems.

Hi @Saneesh - We're going to need some more information here...
What is the actual problem you are facing? I presume once you are redirected to login you can't actually log in?
Perhaps copies of your nginx virtual host config, etc. would prove useful?

This ticket should be closed. The user probably did not configured the nginx correctly. The redirect to  /session/login is the expected behavior to login into the application.

I experienced something like this due to mod_rewrite not being activated properly.


Add documentation on how to create a Glossarist dataset

What are the key files of a Glossarist dataset? The description YAML, concept YAML files... etc.

@ronaldtse we need 2 folders for creating a concept dataset (both folder names are singular)

concept
localized_concept

Currently there is no documentation for Glossarist Model V2 so I've followed what was done in isotc211-glosary and Typescript definitions concept.ts and item.ts. For Glossarist We don't need all the folders here only the 2 mentioned above and also we only need the data key and not the registers data for the concepts and localized_concepts.
I'm working on adding complete documentations for what is currently implemented in Glossarist and I'll open a PR for that once done.

@HassanAkbar in the termium gem when I export from glossarist, in the Cli class, the generated dataset only had a flat directory with concepts as YAML files. What’s wrong with it?

@ronaldtse I believe the issue has been fixed in https://github.com/glossarist/glossarist-ruby/issues/84.
I will add the documentation for this in a PR for this issue -> https://github.com/glossarist/glossarist-ruby/issues/81

Documentation was added in this PR -> https://github.com/glossarist/glossarist-ruby/pull/90


Caught NaN in diff for kdiff for thread on text8、GoogleNews.

When I try to run the demo.sh on text8, it told me that "Caught NaN in diff for kdiff for thread", and the process died because of "interrupted by signal 10: SIGBUS".
I have try this on different corpus like text8、GoogleNews.
And tried it on different system like windows11、ubuntu 20.02、OS X（Ventura 13.1-apple silicon(M1 Pro) also.
When I check the source code, I find that the bias_def_value and bias_word_value have never beed update.
Could anyone help me to run the demo?

Hi, thanks for reaching out.
It looks like the check did not pass in this line of the code, meaning the variable dfff or fdiff does not have a valid value for parameter update. When that happens, word vector parameter updates are skipped. Do you have information about which variable has an invalid value? If so, are you able to pinpoint the which operation gives rise to this invalid result (e.g., nan is in word embeddings like W[b + l1]? What are the values of bias_word_value and bias_def_value?)
Not sure if this is the cause of the issue you're experiencing, but I'm curious as to if you have obtained your own copy of dictionary definitions and modified line 79 accordingly to reflect the indices of the two initial seed words.

Hi, thanks for reaching out.
It looks like the check did not pass in this line of the code, meaning the variable dfff or fdiff does not have a valid value for parameter update. When that happens, word vector parameter updates are skipped. Do you have information about which variable has an invalid value? If so, are you able to pinpoint the which operation gives rise to this invalid result (e.g., nan is in word embeddings like W[b + l1]? What are the values of bias_word_value and bias_def_value?)
Not sure if this is the cause of the issue you're experiencing, but I'm curious as to if you have obtained your own copy of dictionary definitions and modified line 79 accordingly to reflect the indices of the two initial seed words.

Thanks, it now running perfect.
It is due to that the definition dictionary updating failed by get_definition.py.
When the definition dictionary not correct, it will make a part of the elements of  bias_word_value and bias_def_value to nan.

Awesome! Glad to hear it is working fine now.


Too slow

We have written the needed data into your clipboard because it was too large to send. Please paste.

/needsMoreInfo


(Question) - How to implement createReadStream?

I am having a difficult time trying to implement createReadStream(). I have a web-socket duplex stream that has a mp4 file being pushed to it from the server. I've seen the video-stream example, however, I still can't seem to wrap my head around the simple concept of reading a range from a stream in a way that render-media requires.
I am completely stuck and have not been able to figure out this simple concept for days. Any guidance on how to implement this would be greatly appreciated.
Client:
import {Constants} from './Constants';
import * as websocketStream from 'websocket-stream';
import {Duplex} from 'stream';
import * as render from 'render-media';

const stream: Duplex = websocketStream(Constants.connectionString);

stream.on('data', (data: ArrayBuffer) => {
    console.log(data.byteLength);
});

stream.on('finish', (data: ArrayBuffer) => {
    console.log('Stream finished.');
});

// const file = {
//     name: Constants.filePath,
//     createReadStream: function (opts: any) {
//     }
// };
//
// render.append(file, 'body', (err) => {
//     if (err) {
//         return console.error(err.message);
//     }
// });

Server:
import {Constants} from './Constants';
import * as fs from 'fs';
import * as ws from 'ws';
import * as websocketStream from 'websocket-stream';

new ws.Server({
    port: Constants.port
}).on('connection', (ws) => {
        console.log('connection');
        return fs.createReadStream(Constants.filePath)
            .pipe(websocketStream(ws));
    }
);

Adding my solution here incase someone else is having trouble figuring this out:
import {Constants} from './Constants';
import * as websocketStream from 'websocket-stream';
import {Duplex} from 'stream';
import * as render from 'render-media';
import * as rangeStream from 'range-stream';
import * as MultiStream from 'multistream';

const file = {
    name: Constants.filePath,
    createReadStream: function (opts: { start: number, end: number }) {
        opts = opts || {};

        let start = opts.start || 0;

        return new MultiStream(cb => {
            const stream: Duplex = websocketStream(Constants.connectionString);
            const reqStart = start;

            let end = opts.end ? (opts.end + 1) : -1;
            let reqEnd = start + Constants.requestSize;

            if (end >= 0 && reqEnd > end) {
                reqEnd = end;
            }

            if (reqStart >= reqEnd) {
                return cb(null, null);
            }

            const ns = stream.pipe(rangeStream(reqStart,  reqEnd - 1));

            start = reqEnd;

            cb(null,  ns);
        });
    }
};

render.append(file, 'body', (err: { message: string }) => {
    if (err) {
        return console.error(err.message);
    }
});


Pass correct mount type to agent for ephemeral volumes

Now we set volume's mount type to "ephemeral" to indicate ephemeral volumes. And this type will be passed to agent later. It's incorrect. Instead, "bind" should be the correct mount type to be passed.

/cc @mcastelino @amshinde

@YongjiXie @amshinde a question. We do want ephemeral memory volumes to be created within the VM. Not on the host. Will this continue to be the case after this change.

@YongjiXie @amshinde a question. We do want ephemeral memory volumes to be created within the VM. Not on the host. Will this continue to be the case after this change.

Sure. We have passed storages like: storages:<driver:"ephemeral" source:"tmpfs" fstype:"tmpfs" mount_point:"/run/kata-containers/sandbox/ephemeral/xxx" > to agent. This will make agent mount tmpfs to the mount point. Then IIUC, we need a bind mount between container path and this mountpoint.
Thanks,
Yongji

@YongjiXie What you described is how it is currently working in Kata.


[Bug] Temporal ENV does not import Custom DataClass

What are you really trying to do?
I'm Using Temporal on EKS Cluster and I try to connect temporal in other application and run workflow. When I use custom @dataclass as return value of activity, "Failed decoding arguments" error has occured.

Describe the bug

{
  "message": "Failed decoding arguments",
  "source": "",
  "stackTrace": "  File \"/usr/local/lib/python3.9/site-packages/temporalio/worker/_workflow_instance.py\", line 301, in activate\n    self._apply(job)\n\n  File \"/usr/local/lib/python3.9/site-packages/temporalio/worker/_workflow_instance.py\", line 373, in _apply\n    self._apply_resolve_activity(job.resolve_activity)\n\n  File \"/usr/local/lib/python3.9/site-packages/temporalio/worker/_workflow_instance.py\", line 490, in _apply_resolve_activity\n    ret_vals = self._convert_payloads(\n\n  File \"/usr/local/lib/python3.9/site-packages/temporalio/worker/_workflow_instance.py\", line 1232, in _convert_payloads\n    raise RuntimeError(\"Failed decoding arguments\") from err\n",
  "encodedAttributes": null,
  "cause": {
    "message": "<Custom dataclass path>",
    "source": "",
    "stackTrace": "  File \"/usr/local/lib/python3.9/site-packages/temporalio/worker/_workflow_instance.py\", line 1224, in _convert_payloads\n    return self._payload_converter.from_payloads(\n\n  File \"/usr/local/lib/python3.9/site-packages/temporalio/converter.py\", line 307, in from_payloads\n    values.append(converter.from_payload(payload, type_hint))\n\n  File \"/usr/local/lib/python3.9/site-packages/temporalio/converter.py\", line 569, in from_payload\n    obj = value_to_type(type_hint, obj, self._custom_type_converters)\n\n  File \"/usr/local/lib/python3.9/site-packages/temporalio/converter.py\", line 1361, in value_to_type\n    field_hints = get_type_hints(hint)\n\n  File \"/usr/local/lib/python3.9/typing.py\", line 1450, in get_type_hints\n    base_globals = sys.modules[base.__module__].__dict__\n\n  File \"/usr/local/lib/python3.9/site-packages/temporalio/worker/workflow_sandbox/_importer.py\", line 393, in __getitem__\n    return self.current[key]\n",
    "encodedAttributes": null,
    "cause": null,
    "applicationFailureInfo": {
      "type": "KeyError",
      "nonRetryable": false,
      "details": null
    }
  },
  "applicationFailureInfo": {
    "type": "RuntimeError",
    "nonRetryable": false,
    "details": null
  }
}

Minimal Reproduction

This is my execution code.
async with Worker(
        client,
        task_queue=TASK_QUEUE_NAME,
        workflows=[test_workflow],
        activities=[get_request_s3_dir],
    ):

        await client.execute_workflow(
            test_workflow.run,
            request,
            id=REQUEST_ID,
            task_queue=TASK_QUEUE_NAME,
            retry_policy=RetryPolicy(maximum_interval=timedelta(seconds=2), maximum_attempts=3),
        )

This is my workflow code.
@workflow.defn
class test_workflow:

    @workflow.run
    async def run(self, request: requestDataClass):
        request_s3_dir = await workflow.execute_activity(
            get_request_s3_dir,
            args = [BUCKET_NAME, request.request_id],
            start_to_close_timeout=timedelta(seconds=15),
        )

This is my activity code.
@activity.defn
async def get_request_s3_dir(bucket_name: str, request_id: str) -> customDataClass:
    uri = f"s3://{bucket_name}/{request_id}"
    return customDataClass.from_uri(uri)

This is my custom dataclass code.
@dataclass
class customDataClass:
    uri: str
    bucket_name: str
    object_key: str

    @classmethod
    def from_uri(cls, uri: str):
        ...
        return cls(uri, bucket_name, object_key)

Environment/Versions

OS and processor: Make Docker image and run pod in EKS
Temporal Version: 2.16.2(on my web) & temporalio == 1.3.0
base Image of Docker : python:3.9-slim-buster

Additional context

I'm using python 3.9 version to test on EKS. But when i use python 3.11 version as my Base Image or python setting there is no issue. Is there any difference between python 3.9 version's temporal env and 3.11 version's temporal env? ( I checked pip list versions. requirements version is same)
I know if i use in my workflow like below...

in python 3.9 verison ( above problem is solved)
with workflow.unsafe.imports_passed_through():
    from file import customDataClass

in python 3.11 verison
 < no need to import >

Let me know what is stable python version when i use temporal cluster and is there any best way to use pattern like this?

Thanks for your all effort.

Is the full error message just a path to the data class? Can I get the exact error message?

Is there any difference between python 3.9 version's temporal env and 3.11 version's temporal env?

None in our code, but Python may have changed how imports work between the two

I know if i use in my workflow like below...

So it appears in newer Python versions the sandbox importer can import your dataclass but in older Python versions you have to import it yourself

Minimal Reproduction

It may be easier with a full replication instead of just snippets, but I may have the idea here.
Regardless, I will see if I can investigate this. In the meantime, import the custom data class yourself as you have shown. Or upgrade to your Python version.

@cretz
Thanks for reply!

Is the full error message just a path to the data class? Can I get the exact error message?

Yes error message just a path to the data class

Regardless, I will see if I can investigate this. In the meantime, import the custom data class yourself as you have shown. Or upgrade to your Python version.

Thanks for your comment! I expect specific reason of above issue. Let me know if there is another thought.

Is it possible to provide a standalone replication? Maybe alter https://github.com/temporalio/samples-python/blob/main/hello/hello_activity.py until you can replicate the failure? (feel free to separate out to multiple files)


Variadic Tuples that end in a literal type require explicit as const narrowing

Bug Report
🔎 Search Terms
variadic, tuple, literal, spread
🕗 Version & Regression Information
First saw in v4.9.5; have tested back to 4.4.4 and still present.

This is the behavior in every version I tried, and I reviewed the FAQ for entries about variadic.

⏯ Playground Link
https://www.typescriptlang.org/play?ts=4.9.5#code/MYewdgzgLgBCDWAuGBtAdB6AnAlmA5igLoA0MYArgLYBGAplkTALyoDkAhm2WzdzAEYiAbgBQogPQSYAASgQAtHQAeABzrAoSrFhBZRoSLApgV6zXQAmydJii4CxHgEI2TVik782rkeMPQMADuevAcuibWqBho2HiEpDA+bizsXC5sMBwQMAFQfgbggSFY8BA2cQQZ7mnevmJAA
💻 Code
const ok: [...string[], number] = ['a', 'b', 1];

// @ts-expect-error
const unexpected: [...string[], '!'] = ['a', '!'];

const workaround: [...string[], '!'] = ['a', '!' as const];

const works: [string, '!'] = ['a', '!'];

🙁 Actual behavior
For Variadic Tuples that end in a literal type, assigning a matching Tuple gives

Type '[string, string]' is not assignable to type '[...string[], "!"]'.
Type at position 1 in source is not compatible with type at position 1 in target.
Type 'string' is not assignable to type '"!"'.

🙂 Expected behavior
For normal Tuples and Variadic Tuples that only begin with a literal type, assignments do not need as const to prevent widening.
For example this works:
const works2: ['!', ...string[], ] = ['!', 'x'];

It would be more intuitive if all Tuples behaved in the same way.

I found a similar issue:
interface Test {
    s: 'a' | 'b';
}

const works: Test[] = [{ s: 'a'}]

// TS2322: Type '{ s: string; }' is not assignable to type 'Test'.
//   Types of property 's' are incompatible.
//     Type 'string' is not assignable to type '"a"'.
const fails: Test[] = [...[{ s: 'a'}]]

This does appear to be a duplicate of https://github.com/microsoft/TypeScript/issues/52684 as per @Andarist.

This actually isn't a duplicate of #52684, though the issues are closely related. I will modify #52769 to also handle this one.


Random errors with parallel ISO file creation

Hi, we're running into intermittent errors from attempts at creating ISO9660 file. It looks like the problems only occur when multiple routines are run in parallel. It only takes a handful of parallel routines to cause the issue. If I force them to run sequentially with a lock, it can run thousands of times without issues.
Are there disclaimers about parallel execution, or should it be supported? We're using github.com/diskfs/go-diskfs v1.4.0, but I have tried latest code as of a month or so ago, and it was the same result. I can provide sample code that reproduces the problem if it is supposed to be supported. Thanks.

Here are sample error messages for running 5 parallel ISO creation -
/tmp$ ./iso
Thread 4 - done, err: 352342cb-8920-45d1-b0d3-829767d73135.dsk - could not finalize filesystem: error walking tree: error walking path f180a7cf-d2c7-4e20-ac68-d519fc4960d1.dsk: lstat f180a7cf-d2c7-4e20-ac68-d519fc4960d1.dsk: no such file or directory
Thread 1 - done, err: b015610c-7ec8-45fb-967d-39549e9c561e.dsk - could not finalize filesystem: error walking tree: error walking path f180a7cf-d2c7-4e20-ac68-d519fc4960d1.dsk: lstat f180a7cf-d2c7-4e20-ac68-d519fc4960d1.dsk: no such file or directory
Thread 0 - done, err: 7c7801a5-f2bd-4bc8-a502-ad685e4619b4.dsk - could not finalize filesystem: unable to calculate size of directory for .: could not calculate child f180a7cf-d2c7-4e20-ac68-d519fc4960d1.dsk entry size .: could not convert dirEntry to bytes: invalid filename F180A7CF_D2C7_4E20_AC68_D519FC4960D1.DSK;1: file name must be at most 30 characters, not including the separator '.'
Thread 3 - done, err: <nil>
Thread 2 - done, err: <nil>

/tmp$
/tmp$ ./iso
Thread 3 - done, err: createDisk in file 4389e133-6b30-427d-9ec0-0d7b949c6a33.dsk: could not expand device 4389e133-6b30-427d-9ec0-0d7b949c6a33.dsk to size 409600: no such file or directory
Thread 4 - done, err: 104e0cce-eefb-4250-bc98-b14bb1a8d7e4.dsk - could not finalize filesystem: error walking tree: error walking path 4389e133-6b30-427d-9ec0-0d7b949c6a33.dsk: lstat 4389e133-6b30-427d-9ec0-0d7b949c6a33.dsk: no such file or directory
Thread 1 - done, err: <nil>
Thread 2 - done, err: <nil>
Thread 0 - done, err: <nil>
/tmp$
/tmp$ ./iso
Thread 4 - done, err: 6469326b-f5e9-4cb5-b7e5-01cf006e9888.dsk - could not finalize filesystem: error walking tree: error walking path 10305b1e-475b-444b-a869-96ec1a27143e.dsk: lstat 10305b1e-475b-444b-a869-96ec1a27143e.dsk: no such file or directory
Thread 2 - done, err: <nil>
Thread 3 - done, err: <nil>
Thread 0 - done, err: <nil>
Thread 1 - done, err: <nil>
/tmp$ ./iso
Thread 1 - done, err: 3ff44c04-12a1-4cbb-96b3-fcf6644603e7.dsk - could not finalize filesystem: error walking tree: error walking path file1: lstat file1: no such file or directory
Thread 4 - done, err: <nil>
Thread 2 - done, err: <nil>
Thread 3 - done, err: <nil>
Thread 0 - done, err: <nil>
/tmp$ ./iso
Thread 3 - done, err: <nil>
Thread 0 - done, err: <nil>
Thread 2 - done, err: <nil>
Thread 4 - done, err: <nil>
Thread 1 - done, err: <nil>

/tmp$ ###### use lock to serialize execution
/tmp$ ./iso
Thread 4 - done, err: <nil>
Thread 0 - done, err: <nil>
Thread 2 - done, err: <nil>
Thread 1 - done, err: <nil>
Thread 3 - done, err: <nil>
/tmp$ ./iso
Thread 4 - done, err: <nil>
Thread 1 - done, err: <nil>
Thread 0 - done, err: <nil>
Thread 3 - done, err: <nil>
Thread 2 - done, err: <nil>
/tmp$ ./iso
Thread 4 - done, err: <nil>
Thread 0 - done, err: <nil>
Thread 2 - done, err: <nil>
Thread 1 - done, err: <nil>
Thread 3 - done, err: <nil>
/tmp$ ./iso
Thread 4 - done, err: <nil>
Thread 1 - done, err: <nil>
Thread 0 - done, err: <nil>
Thread 3 - done, err: <nil>
Thread 2 - done, err: <nil>

Test code to cause the issues described above
package main

import (
	"fmt"
	"os"
	"sync"
	"time"

	diskfs "github.com/diskfs/go-diskfs"
	"github.com/diskfs/go-diskfs/disk"
	"github.com/diskfs/go-diskfs/filesystem"
	"github.com/diskfs/go-diskfs/filesystem/iso9660"
	"github.com/google/uuid"
)

var isoLock sync.Mutex

// genISO generates a Type-1 ISO file containing the given file.
func genISO(i int, path string, content []byte) (err error) {
	diskImg := uuid.NewString() + ".dsk"

	// ISO size 400KB.
	const isoSize = 400 * 1024

	// --- UNCOMMENT TO FORCE SERIAL EXECUTION ---
	// isoLock.Lock()
	// defer isoLock.Unlock()

	mydisk, err := diskfs.Create(diskImg, isoSize, diskfs.Raw, diskfs.SectorSizeDefault)
	if err != nil {
		return fmt.Errorf("createDisk in file %s: %v", diskImg, err)
	}
	defer os.Remove(diskImg)

	// Create a partition.
	// blocksize for ISO9660 must be one of 2048, 4096, 8192
	mydisk.LogicalBlocksize = 2048
	fspec := disk.FilesystemSpec{Partition: 0, FSType: filesystem.TypeISO9660, VolumeLabel: "testISO"}
	fs, err := mydisk.CreateFilesystem(fspec)
	if err != nil {
		return fmt.Errorf("create FileSystem in disk file %s: %v", diskImg, err)
	}

	// Write files out.
	fs.Mkdir("/")

	file, err := fs.OpenFile(path, os.O_CREATE|os.O_RDWR)
	if err != nil {
		return err
	}

	n, err := file.Write(content)
	if err != nil {
		return err
	}

	if n != len(content) {
		return fmt.Errorf("%v - could not write content fully for %s", diskImg, path)
	}

	// The file diskImg now contains the bytes.
	iso, ok := fs.(*iso9660.FileSystem)
	if !ok {
		return fmt.Errorf("%v - not an iso9660 filesystem", diskImg)
	}

	if err = iso.Finalize(iso9660.FinalizeOptions{}); err != nil {
		return fmt.Errorf("%v - could not finalize filesystem: %v", diskImg, err)
	}

	return nil
}

// Minimum program that reproduces issue. To force serial execution (and see it work
// without error), uncomment the isoLock.Lock() code in genISO().
// Simply build & run this code. No other input file needed.
func main() {
	path := "file1"
	content := []byte{0x32, 0x33, 0x34, 0x35, 0x36, 0x37}

	for i := 0; i < 5; i++ {
		go func(x int) {
			err := genISO(x, path, content)
			fmt.Printf("Thread %v - done, err: %v\n", x, err)
		}(i)
	}

	time.Sleep(2 * time.Second)
}

Excellent, thank you for the detailed reproduction of the issue.

Thanks for the detailed reproduction. I tested against latest commit and it works. Worth cutting a patch release for this.


CASMINST-4940 CSM 1.3 Upgrade changes -- update potential cloud-init …

Summary and Scope

Fixes: CASMINST-4940

This introduces a new upgrade method for 1.2 to 1.3 upgrades. This is a stop gap mechanism and we aim to overhaul this flow entirely for 1.4.
Please note that:

The changes are a duplicate of the 1.0 to 1.2 upgrade method, without any of the networking stuff (IPAM and ifname updates).
I consciously chose to duplicate the image updates code rather than refactor it into a separate method to avoid regressions as we add more items into the 1.2 to 1.3 upgrade.
There would be an accompanying change in docs-csm/prerequisites.sh that would reference this new command line parameter.
I am unsure of how to test this and would need some guidance.

Issue Type

Install task

Prerequisites

[ ] I have included documentation in my PR (or it is not required)
[ ] I tested this on internal system (if yes, please include results or a description of the test)
[ ] I tested this on a vshasta system (if yes, please include results or a description of the test)

Idempotency
Same as existing code.
Risks and Mitigations
Changes are fairly isolated end-to-end so low risk.

@dzou-hpe did some testing for the original option - but I believe that was typically done during a full upgrade scenario.  I'd still check with him.
Looks like some unit tests that call updateBSS() need to be updated.  Looking into why that didn't fail the build.
Happy to hear this flow will be overhauled in the future. 😄

Looks like some unit tests that call updateBSS() need to be updated. Looking into why that didn't fail the build.

This will be fixed here: https://github.com/Cray-HPE/cray-site-init/pull/205

Rebased to pull in fixed unit tests for the failures in main.

The current failing unit tests look like they correctly pertain to this PR.

Sorry guys, I have been meaning to update this PR for a week now but got pulled into too many meetings this week. Updated to at least fix the unit tests, but didn't add new new unit tests.

This requires a doc change: https://github.com/Cray-HPE/docs-csm/pull/2054


volume support

It would be really great if we could specify volumes alongside env vars for each run service.

And yes, I know, the volumes are supposed to be defined inside the docker-compose yaml file, but it would be nice to override that from the plugin.


Enable centered label drawing for doughnut controllers

A prototype.
This PR is enabling the possibility to add an inner label in the middle of a doughnut controller.
This is leveraging on the already label calculation and drawing used for label annotation.

image
text

SAMPLE chart configuration:
{
  type: 'doughnut',
  data: {
    labels: ['Data1', 'Data2', 'Data3', 'Data4'],
    datasets: [ {
      data: [102, 200, 80, 55],
    }],
  },
  options: {
    aspectRatio: 2,
    plugins: {
      annotation: {
        annotations: {
          innerlabel: {
            type: 'doughnutLabel',
            display: true,
            drawTime: 'afterDraw',
            font: [{size: 24},{size: 16, weight: 'bold'}],
            click(context) {
              console.log("click", context);
            },
            color: ['blue', 'red'],
            content: ({chart}) => ['Utilization', chart.data.datasets[0].data.length + '%'],
          }
        }
      }
    }
  }
}

TODO

[x] test cases
[x] types
[x] documentation
[x] samples
[x]  wait for PR #755
[x] wait for PR #801

I don”t think the innerlabel is needed. All can be mamaged by annotation plugin. New updates asap

About the animations, without reading any code;
The element and its options were designed to be the "view", containing currently displayed value for everything.
I'm guessing you are using an array of colors for the lines of text?
In this "philosophy", each line should be an "element", containing its resolved current display values.
I put quotation marks around the element, because from the animations point of view, it can be any object.
Now, I'm out of context wit the annotations plugin, but I think something like sub elements is a thing or was it abandoned?

I'm guessing you are using an array of colors for the lines of text?

yes, that's correct

In this "philosophy", each line should be an "element", containing its resolved current display values.

I understand the philosophy and I agree. But a value is a value, also an array could be a value ;), therefore the implementation it should not be against of that philosophy, I guess.
About the plugin implementation, to have an element for each row of a label when a content is a text, sounds to me adding complexity to manage events, options (like padding, borders, etc) which I don't think make sense to address because a complete refactoring should be needed with a few vantages. Furthermore I'm expecting that also the performance will be affected, having potentially many elements to manage for each row.

I put quotation marks around the element, because from the animations point of view, it can be any object.

I have to admit that this use case forced me to go more in deep how animation is working and I have learned more, that's good! Nevertheless, staying on this use case and the plugin itself, the animation was thought (at least for what I had understood) only for the properties of the elements and not for their options. In fact we have only 1 animations configuration, based on the properties of the elements. And, in my opinion, doesn't make sense to extend it to the options (like color, bordeColor, etc.). And this animations setup (for colors) is coming from the controller which is implementing that, and plugin animations config is falling back to that.
Maybe you disagree, but I think that assign the option to the element after animation item creation sounds good even if not 100% align with the designed element model and its philosophy. What do you think?
I would suggest to stay with this implementation, simple, fitting the requirement and working without big effort.

I think something like sub elements is a thing or was it abandoned?

It's still present for all labels and the points (for polygons). Nothing is changed. But, as written above, it doesn't seem to make sense to have sub-elements for each row. I think good compromise is what I described above, assign options to element after animation item creation.

Now, I'm out of context wit the annotations plugin,

Ok... may I ask what it means exactly? is it just a period and it will be forever? I'm worried that you will leave the project... :worried:

I understand the philosophy and I agree. But a value is a value, also an array could be a value ;), therefore the implementation it should not be against of that philosophy, I guess. About the plugin implementation, to have an element for each row of a label when a content is a text, sounds to me adding complexity to manage events, options (like padding, borders, etc) which I don't think make sense to address because a complete refactoring should be needed with a few vantages. Furthermore I'm expecting that also the performance will be affected, having potentially many elements to manage for each row.

Yes, it might not be appropriate. Though then you could have hover / click effects for each row etc :)
Anyway, array is also a value, it just can't be animated. It should be possible to provide animation defaults for the element to disable animation of the options that should not be animated. (still did not look at the code, sorry :))
Another option could be to use something else, like textColor for that, which would not be animated by default.

Now, I'm out of context wit the annotations plugin,

Ok... may I ask what it means exactly? is it just a period and it will be forever? I'm worried that you will leave the project... 😟

It jus means its been long enough that I don't remember how things are anymore (hence the question about sub elements).
I still did not have the time to invest in these projects, sorry about that. Does not look good for today either :/.

It should be possible to provide animation defaults for the element to disable animation of the options that should not be animated.

I put it in my TODO. I will have a look in next days. I think it could make sense, only for color option.

Another option could be to use something else, like textColor for that, which would not be animated by default.

Personally, I don't like it because it's a deviation of the other plugins and chart.js itself where they are using color for text color. And a breaking change as well.

It jus means its been long enough that I don't remember how things are anymore (hence the question about sub elements).
I still did not have the time to invest in these projects, sorry about that. Does not look good for today either :/.

Fiuuuu... 😄 ... I had some time during the Christmas period but starting from next Monday, I will not have much time as well.

Anyway, I'm still working on this PR and I'd like to have something really consistent to show you asap (apart the discussion about animation). I have refactored it during last 2 days to provide the background inside the doughnut controller (and not the box around the label which doesn't make sense).

@kurkle, about color option animation, I have disabled it for the plugin, only for color, not for the other colors like background or border.
    animations: {
      numbers: {
        properties: ['x', 'y', 'x2', 'y2', 'width', 'height', 'centerX', 'centerY', 'pointX', 'pointY', 'radius'],
        type: 'number'
      },
      colors: {
        properties: ['color'],
        type: 'color',
        duration: 0
      }
    },

What do you think?

@kurkle, about color option animation, I have disabled it for the plugin, only for color, not for the other colors like background or border.
    animations: {
      numbers: {
        properties: ['x', 'y', 'x2', 'y2', 'width', 'height', 'centerX', 'centerY', 'pointX', 'pointY', 'radius'],
        type: 'number'
      },
      colors: {
        properties: ['color'],
        type: 'color',
        duration: 0
      }
    },

What do you think?

Does not have to be a group, unless you want to disable the whole group:
    animations: {
      numbers: {
        properties: ['x', 'y', 'x2', 'y2', 'width', 'height', 'centerX', 'centerY', 'pointX', 'pointY', 'radius'],
        type: 'number'
      },
      color: { duration: 0 }
    },

I'm not sure if element default apply here, but it could also be disabled just for some elements, so you can have animated color changes for hover effects in others.

Does not have to be a group, unless you want to disable the whole group:

At the beginning , I have done as you suggested but in this way I disabled ALL color properties. I thought that setting only the color, only the color will be disable but the rest will remain. Let me do a test because I was quite sure

I'm not sure if element default apply here, but it could also be disabled just for some elements, so you can have animated color changes for hover effects in others.

Maybe I'm wrong but hover colors must be managed by the plugin because it's not managed by Chart.js, for plugins.

@kurkle the PR has been rebased and has got new features/changes applied in other merged PRs (like init and opacity options for labels).

@kurkle what would be the steps needed to get this merged? 🤩

@LeeLenaleee I have rebased. Ready for review, when you have time.

Not yet, there is no version released yet, I have made a bump pr so we can release one:
https://github.com/chartjs/chartjs-plugin-annotation/pull/951


Docs don't instruct project set up

Docs are good at setting up important concepts before describing their use in the tutorial. Something the tutorial is missing is instructions for preparing your project in general. Basic instructions like: create a new working directory, create these folders, or instructions for creating any config, MAKE or dependency files that are needed for building a new project. I'm new to haskell so I'm not sure what exactly these kinds of instructions would look like, but going through the tutorial I see samples of code within specific files without instructions to create those files.
this may feel a bit pedantic, but i think the name service tutorial for the sdk also serves as a good intro to working with golang in general (and same for the substrate docs for using rust). I don't think it's the responsibility of this tutorial to introduce haskell, but it would be good if a completely new haskell user could at least successfully create a working project by following instructions exactly.

Hi,
I had an old issue I closed a while back to do something like this before working on a project that uses this lib. Just wanted to include a link to that issue here: https://github.com/f-o-a-m/kepler/issues/202, it might help out in some way.
The issue also has this comment that describes how to add this project as a dep.

I will add a snippet to the installation instructions on how to setup a new project (using stack). I think that using this project as a springboard to haskell isn't quite possible; go-lang is a very simple language compared to haskell.


chef-zero provisioner looks for Chef Server URL and fails

When I try to use this provisioner with Vagrant, I get the following errors.  Why is it looking for a server URL?  Shouldn't it default to something like localhost:8889?
There are errors in the configuration of this machine. Please fix
the following errors and try again:

chef client provisioner:
* Chef Server URL must be populated.
* Validation key path must be valid path to your Chef Server validation key.

My vagrant plugin list:
vagrant-aws (0.5.0)
vagrant-berkshelf (4.0.1)
vagrant-cachier (1.1.0)
vagrant-chef-zero (0.7.1)
vagrant-hostsupdater (0.0.11)
vagrant-ohai (0.1.7)
vagrant-omnibus (1.4.1)
vagrant-share (1.1.4, system)
vagrant-vmware-fusion (3.1.2)
The relevant part of my Vagrantfile:
w.vm.provision :chef_client do |chef|
chef.node_name = config.vm.hostname
chef.run_list = [
"recipe[training-laptop::default]"
]
end

I am also getting this problem on Vagrant 1.7.2

I have this issue too... still looking for the solution...

Same here :-1:

@ismailfaruqi, it's here https://github.com/miguelaferreira/vagrant-chef-zero/commit/ee2b8df81803c4e56c433a3ad1e4347d7084f519

@ismailfaruqi @Paxa, IMHO a better fix by @wzin here a48312b

I'm still getting this error on vagrant 1.7.2
vagrant-berkshelf (4.0.3)
vagrant-chef-zero (0.7.1)
vagrant-omnibus (1.4.1)
vagrant-share (1.1.3, system)
vagrant-vbguest (0.10.0)```

```➜  vagrant_vms  vagrant reload
Vagrant.require_plugin is deprecated and has no effect any longer.
Use `vagrant plugin` commands to manage plugins. This warning will
be removed in the next version of Vagrant.
There are errors in the configuration of this machine. Please fix
the following errors and try again:

chef client provisioner:
* Chef Server URL must be populated.
* Validation key path must be valid path to your Chef Server validation key.

A new gem with the latest fixes has not yet been released. Our bad!
We will work on getting that out.
Meanwhile, could you please build from source and try again?

clone the repo
in the repo do: gem build vagrant-chef-zero.gemspec
in the repo do: vagrant plugin install vagrant-chef-zero-0.7.1.gem

A new gem was released last Friday that contains the fixes for this issue.
Closing the issue.

@miguelaferreira I saw that there were version 4.2.2 of chef-zero gem from 19 May. Is that version that have this fixed ?
I currently have version 4.2.3, but issue appears again (chef solo/zero provisioner ask for chef server url)

Hi @lukas0krupa
The fix I mentioned was in vagrant-chef-zerogem (version 1.0.1), not chef-zero gem.


sshuttle: 0.61 -> 0.71

Account for a zany new build system & add myself as a maintainer.
Tested by connecting to a remote system and browsing the web & LAN,
both as root and a regular (sudo) user. Cool tool. Will use a lot.
CC @iElectric

Since GitHub probably won't ping on edits:  @domenkozar.


AccordianItem btnClass classes are not applied to the Accordian Button properly

AccordianItem btnClass attribute does not apply the classes to the rendered accordian button at all when flush=true, and inconsistently when flush=false.
To Reproduce
Steps to reproduce the behavior with flush:

Add an AccordianItem with flush and btnClass

<AccordionItem id="1" flush btnClass="py-0">

      Test

      Thing

  </AccordionItem>

Run the app and inspect the accordian button. It will still have padding and the py-0 class won't be present

Another misbehavior:

Add an AccordianItem with btnClass

<AccordionItem id="1" btnClass="py-0">

      Test

      Thing

  </AccordionItem>

Run the app. This time, the button styling is applied
Click the accordian button. The btnClass styling will be reverted

Expected behavior
btnClass classes should be applied whether flush=true and whether the accordian is open.
Desktop:

Chrome
Version 101.0.4951.64 (Official Build) (64-bit)

Additional context
In my case, I'm trying to use it within a Modal.

Can you update it:
npm i -D flowbite-svelte@latest

Use class="py-0"?
<AccordionItem id="1" flush class="py-0">

      Test

      Thing

  </AccordionItem>

And let me know if it works.

After updating, it did actually add the class to the button:
<button type="button" class="flex justify-between items-center py-5 w-full font-medium text-left text-gray-500 border-b border-gray-200 dark:border-gray-700 dark:text-gray-400 py-0">
Test
 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" width="24" height="24" fill="currentColor" aria-hidden="true" class="mr-2 text-gray-500 sm:w-6 sm:h-6 dark:text-gray-300"><path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"></path></svg></button>
The issue now is that the previous py-5 class overrides it so the padding remains unchanged. Maybe if it's listed before other classes it will override conflicting classes.

Can you try this?
<AccordionItem id="1" flush class="myclass">

      Test

      Thing

  </AccordionItem>

it doesn't work. The same class applied to a div works. Example:

<AccordionItem id="1" flush class="myclass">

      Test

      Thing

  </AccordionItem>

Testing

inspecting the styling yields an interesting result; svelte seems to generate a hash for the div and the styling is only applied when that hash is also a class on the div:
.myclass.s-cOvF5IHP9Bqp {
    padding: 0;
    color: red;
}

I just added AccourdionFlush. Please update it and let me know.

<AccordionFlush id="1" {btnClass} >

Header 2-1

    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo ab
    necessitatibus sint explicabo, atque temporibus rem iusto, dicta
    voluptatem molestias ex quibusdam ipsa omnis laboriosam deleniti ipsum
    nisi quis perspiciatis.

</AccordionFlush>
<AccordionFlush id="2"  {btnClass} >

Header 2-2

    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illo ab
    necessitatibus sint explicabo, atque temporibus rem iusto, dicta
    voluptatem molestias ex quibusdam ipsa omnis laboriosam deleniti ipsum
    nisi quis perspiciatis.

</AccordionFlush>

tried updating with @latest and @0.15.35 since that was the latest tag I saw, but get "AccordianFlush is not defined."

Try:
rm -rf ./node_modules
rm ./package-lock.json
npm i

I was able to make this work for my needs. One note: the code will still add a "border-t-0" class to the button, I assume for the flush styling. Thanks a bunch for the quick turnaround on fixing this!


Missing package icons

The following packages miss an icon
Greenhouses.Components
Greenhouses.Flows
Greenhouses.Flows.FluidFlow.Reservoirs
Greenhouses.ControlSystems
Greenhouses.ControlSystems.Climate.Utilities
Greenhouses.ControlSystems.HVAC
Greenhouses.Functions.Enumerations
Greenhouses.Functions.TestRig
Greenhouses.Icons
Greenhouses.Icons.Water

Not anymore :) Thanks


Hang getting youtube video and cannot resume because got no data blocks

DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

[X] I understand that I will be blocked if I intentionally remove or skip any mandatory* field

Checklist

[X] I'm reporting that yt-dlp is broken on a supported site
[X] I've verified that I'm running yt-dlp version 2023.10.13 (update instructions) or later (specify commit)
[X] I've checked that all provided URLs are playable in a browser with the same IP and same login details
[X] I've checked that all URLs and arguments with special characters are properly quoted or escaped
[X] I've searched known issues and the bugtracker for similar issues including closed ones. DO NOT post duplicates
[X] I've read the guidelines for opening an issue
[X] I've read about sharing account credentials and I'm willing to share it if required

Region
Canada
Provide a description that is worded well enough to be understood
YTDL works perfectly fine with a whole bunch of videos from youtube, I was downloading a huge playlist and it's just this one for some reason.
In the first invocation it hangs
[debug] Command-line config: ['-fmp4,mp4', '-vU', '-C', '--socket-timeout=60', 'https://www.youtube.com/watch?v=CHIMKfG44vo']
[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version<EMAIL_ADDRESS>[b634ba742] (pip)
[debug] Python 3.11.5 (CPython x86_64 64bit) - macOS-12.6.7-x86_64-i386-64bit (OpenSSL 3.1.2 1 Aug 2023)
[debug] exe versions: ffmpeg 6.0 (setts), ffprobe 4.2.2, phantomjs 2.1.1, rtmpdump 2.4
[debug] Optional libraries: Cryptodome-3.18.0, brotli-1.0.9, certifi-2023.05.07, mutagen-1.46.0, sqlite3-3.43.0, websockets-11.0.3
[debug] Proxy map: {}
[debug] Loaded 1890 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Available version<EMAIL_ADDRESS>Current version<EMAIL_ADDRESS>yt-dlp is up to date<EMAIL_ADDRESS>[youtube] Extracting URL: https://www.youtube.com/watch?v=CHIMKfG44vo
[youtube] CHIMKfG44vo: Downloading webpage
[youtube] CHIMKfG44vo: Downloading ios player API JSON
[youtube] CHIMKfG44vo: Downloading android player API JSON
[youtube] CHIMKfG44vo: Downloading m3u8 information
[youtube] CHIMKfG44vo: Downloading MPD manifest
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, size, br, asr, vext, aext, hasaud, id
[info] CHIMKfG44vo: Downloading 2 format(s): 22, 22
[debug] Invoking http downloader on "https://rr4---sn-ni5f-t8gz.googlevideo.com/videoplayback?expire=1699990843&ei=23hTZdunDsv_kgbbj6CYDA&ip=<IP_ADDRESS>&id=o-ADJ4nheJpDsZxy8JUJleNv4KdXwU9Mn-HeBGlHE2rd7b&itag=22&source=youtube&requiressl=yes&mh=KL&mm=31%2C26&mn=sn-ni5f-t8gz%2Csn-vgqsrnsr&ms=au%2Conr&mv=m&mvi=4&pl=22&initcwndbps=1845000&spc=UWF9f0MR9gXDW7N_rbFBeiNr1molOQs&vprv=1&svpuc=1&mime=video%2Fmp4&cnr=14&ratebypass=yes&dur=331.813&lmt=1590246024483012&mt=1699969045&fvip=5&fexp=24007246&beids=24350018&c=ANDROID&txp=5432432&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Ccnr%2Cratebypass%2Cdur%2Clmt&sig=ANLwegAwRgIhAOvS72wsD1PnCoxwRe4Iukuqk-eR56aGFWT6AeyClF-RAiEAlWRlZiLD1IlQ1q2ANHsOPQImBWrXoVkkkVj67KSfivE%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AM8Gb2swRQIhAMTqDLnQ07Iz0Tl0x0GRQ0ZHCmKIAdwd2Fhh8Or84nxDAiAKfinWMrDVjpvyqEgE632V1A-k0Yr02QOcKoR8n1qSpg%3D%3D"
[download] Destination: 5-Time Mr.Olympia Phil Heath Guest Posing at 2015 NPC Natural Northern USA Finals [CHIMKfG44vo].mp4
[download]   0.2% of   58.69MiB at  305.42KiB/s ETA 03:16

In subsequent invocations it cannot resume.
Provide verbose output that clearly demonstrates the problem

[X] Run your yt-dlp command with -vU flag added (yt-dlp -vU <your command line>)
[X] If using API, add 'verbose': True to YoutubeDL params instead
[X] Copy the WHOLE output (starting with [debug] Command-line config) and insert it below

Complete Verbose Output
[debug] Command-line config: ['-fmp4,mp4', '-vU', '-C', '--socket-timeout=60', 'https://www.youtube.com/watch?v=CHIMKfG44vo']
[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version<EMAIL_ADDRESS>[b634ba742] (pip)
[debug] Python 3.11.5 (CPython x86_64 64bit) - macOS-12.6.7-x86_64-i386-64bit (OpenSSL 3.1.2 1 Aug 2023)
[debug] exe versions: ffmpeg 6.0 (setts), ffprobe 4.2.2, phantomjs 2.1.1, rtmpdump 2.4
[debug] Optional libraries: Cryptodome-3.18.0, brotli-1.0.9, certifi-2023.05.07, mutagen-1.46.0, sqlite3-3.43.0, websockets-11.0.3
[debug] Proxy map: {}
[debug] Loaded 1890 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Available version<EMAIL_ADDRESS>Current version<EMAIL_ADDRESS>yt-dlp is up to date<EMAIL_ADDRESS>[youtube] Extracting URL: https://www.youtube.com/watch?v=CHIMKfG44vo
[youtube] CHIMKfG44vo: Downloading webpage
[youtube] CHIMKfG44vo: Downloading ios player API JSON
[youtube] CHIMKfG44vo: Downloading android player API JSON
[youtube] CHIMKfG44vo: Downloading m3u8 information
[youtube] CHIMKfG44vo: Downloading MPD manifest
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, size, br, asr, vext, aext, hasaud, id
[info] CHIMKfG44vo: Downloading 2 format(s): 22, 22
[debug] Invoking http downloader on "https://rr4---sn-ni5f-t8gz.googlevideo.com/videoplayback?expire=1699990582&ei=1ndTZabTH8-akwbxi7moDw&ip=<IP_ADDRESS>&id=o-AIVV3Cc_fLuqmZPDo1zRoZYupTl5V6s_qYo02oWJaoAq&itag=22&source=youtube&requiressl=yes&mh=KL&mm=31%2C26&mn=sn-ni5f-t8gz%2Csn-vgqsrnsr&ms=au%2Conr&mv=m&mvi=4&pl=22&initcwndbps=1783750&spc=UWF9f3sDuUtSYbqDHA9tsNhpoVHsFec&vprv=1&svpuc=1&mime=video%2Fmp4&cnr=14&ratebypass=yes&dur=331.813&lmt=1590246024483012&mt=1699968820&fvip=5&fexp=24007246&beids=24472440&c=ANDROID&txp=5432432&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Ccnr%2Cratebypass%2Cdur%2Clmt&sig=ANLwegAwRQIhANQUZRo1SSIQZmCZp1_5rML8PRIWO_qaZzB4NZin_8WqAiAjPIfCWa_b_E40XfineJWFsqTeNaFr6_0WMmni3Govog%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AM8Gb2swRAIgTfzcGoH9XmfuzsyaJnlsWkTdyrF1Ss2iTUuMsdl0kvcCIAx_Y5gmzX3Pqz5OcAYYkP6Y0ZzuXqgKF2KXeklsSQ1y"
[download] Resuming download at byte 96184

ERROR: Did not get any data blocks
  File "/usr/local/bin/yt-dlp", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/__init__.py", line 1008, in main
    _exit(*variadic(_real_main(argv)))
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/__init__.py", line 998, in _real_main
    return ydl.download(all_urls)
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 3510, in download
    self.__download_wrapper(self.extract_info)(
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 3485, in wrapper
    res = func(*args, **kwargs)
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 1556, in extract_info
    return self.__extract_info(url, self.get_info_extractor(key), download, extra_info, process)
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 1567, in wrapper
    return func(self, *args, **kwargs)
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 1723, in __extract_info
    return self.process_ie_result(ie_result, download, extra_info)
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 1782, in process_ie_result
    ie_result = self.process_video_result(ie_result, download=download)
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 2921, in process_video_result
    self.process_info(new_info)
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 3387, in process_info
    success, real_download = self.dl(temp_filename, info_dict)
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 3108, in dl
    return fd.download(name, new_info, subtitle)
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/downloader/common.py", line 455, in download
    ret = self.real_download(filename, info_dict)
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/downloader/http.py", line 365, in real_download
    return download()
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/downloader/http.py", line 331, in download
    self.report_error('Did not get any data blocks')
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 1045, in report_error
    self.trouble(f'{self._format_err("ERROR:", self.Styles.ERROR)} {message}', *args, **kwargs)
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 973, in trouble
    tb_data = traceback.format_list(traceback.extract_stack())

[debug] Invoking http downloader on "https://rr4---sn-ni5f-t8gz.googlevideo.com/videoplayback?expire=1699990582&ei=1ndTZabTH8-akwbxi7moDw&ip=<IP_ADDRESS>&id=o-AIVV3Cc_fLuqmZPDo1zRoZYupTl5V6s_qYo02oWJaoAq&itag=22&source=youtube&requiressl=yes&mh=KL&mm=31%2C26&mn=sn-ni5f-t8gz%2Csn-vgqsrnsr&ms=au%2Conr&mv=m&mvi=4&pl=22&initcwndbps=1783750&spc=UWF9f3sDuUtSYbqDHA9tsNhpoVHsFec&vprv=1&svpuc=1&mime=video%2Fmp4&cnr=14&ratebypass=yes&dur=331.813&lmt=1590246024483012&mt=1699968820&fvip=5&fexp=24007246&beids=24472440&c=ANDROID&txp=5432432&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Ccnr%2Cratebypass%2Cdur%2Clmt&sig=ANLwegAwRQIhANQUZRo1SSIQZmCZp1_5rML8PRIWO_qaZzB4NZin_8WqAiAjPIfCWa_b_E40XfineJWFsqTeNaFr6_0WMmni3Govog%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AM8Gb2swRAIgTfzcGoH9XmfuzsyaJnlsWkTdyrF1Ss2iTUuMsdl0kvcCIAx_Y5gmzX3Pqz5OcAYYkP6Y0ZzuXqgKF2KXeklsSQ1y"
[download] Resuming download at byte 96184

ERROR: Did not get any data blocks
  File "/usr/local/bin/yt-dlp", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/__init__.py", line 1008, in main
    _exit(*variadic(_real_main(argv)))
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/__init__.py", line 998, in _real_main
    return ydl.download(all_urls)
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 3510, in download
    self.__download_wrapper(self.extract_info)(
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 3485, in wrapper
    res = func(*args, **kwargs)
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 1556, in extract_info
    return self.__extract_info(url, self.get_info_extractor(key), download, extra_info, process)
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 1567, in wrapper
    return func(self, *args, **kwargs)
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 1723, in __extract_info
    return self.process_ie_result(ie_result, download, extra_info)
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 1782, in process_ie_result
    ie_result = self.process_video_result(ie_result, download=download)
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 2921, in process_video_result
    self.process_info(new_info)
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 3387, in process_info
    success, real_download = self.dl(temp_filename, info_dict)
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 3108, in dl
    return fd.download(name, new_info, subtitle)
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/downloader/common.py", line 455, in download
    ret = self.real_download(filename, info_dict)
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/downloader/http.py", line 365, in real_download
    return download()
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/downloader/http.py", line 331, in download
    self.report_error('Did not get any data blocks')
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 1045, in report_error
    self.trouble(f'{self._format_err("ERROR:", self.Styles.ERROR)} {message}', *args, **kwargs)
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 973, in trouble
    tb_data = traceback.format_list(traceback.extract_stack())

Similar error occurs with some other elements of the playlist but resume error differs slightly.  Both seem to get to 0.2% before stalling.
[debug] Command-line config: ['-fmp4,mp4', '-vU', 'https://www.youtube.com/watch?v=5MlRHDte9XA']
[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version<EMAIL_ADDRESS>[b634ba742] (pip)
[debug] Python 3.11.5 (CPython x86_64 64bit) - macOS-12.6.7-x86_64-i386-64bit (OpenSSL 3.1.2 1 Aug 2023)
[debug] exe versions: ffmpeg 6.0 (setts), ffprobe 4.2.2, phantomjs 2.1.1, rtmpdump 2.4
[debug] Optional libraries: Cryptodome-3.18.0, brotli-1.0.9, certifi-2023.05.07, mutagen-1.46.0, sqlite3-3.43.0, websockets-11.0.3
[debug] Proxy map: {}
[debug] Loaded 1890 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Available version<EMAIL_ADDRESS>Current version<EMAIL_ADDRESS>yt-dlp is up to date<EMAIL_ADDRESS>[youtube] Extracting URL: https://www.youtube.com/watch?v=5MlRHDte9XA
[youtube] 5MlRHDte9XA: Downloading webpage
[youtube] 5MlRHDte9XA: Downloading ios player API JSON
[youtube] 5MlRHDte9XA: Downloading android player API JSON
[youtube] 5MlRHDte9XA: Downloading m3u8 information
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, size, br, asr, vext, aext, hasaud, id
[info] 5MlRHDte9XA: Downloading 2 format(s): 22, 22
[debug] Invoking http downloader on "https://rr1---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1699991823&ei=rnxTZbHQPK-psfIPh8ex0Ao&ip=<IP_ADDRESS>&id=o-AOwxImiK9dppnt3EaR7Ul8E0jGpq6nPdHo9qfU3h9GSk&itag=22&source=youtube&requiressl=yes&mh=u5&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqsrn6e&ms=au%2Conr&mv=m&mvi=1&pl=22&gcr=ca&initcwndbps=1843750&spc=UWF9f5fRoDNXpOOA3v19s6qCiG2ljq4&vprv=1&svpuc=1&mime=video%2Fmp4&cnr=14&ratebypass=yes&dur=965.764&lmt=1674763739967331&mt=1699970018&fvip=4&fexp=24007246&beids=24350018&c=ANDROID&txp=1211224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cgcr%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Ccnr%2Cratebypass%2Cdur%2Clmt&sig=ANLwegAwRQIhAIe-YMGhpNbt9dhQ-0uB5LDWyYTg6UKPxnIGPfYHfb5lAiA2VOLx7MFNmSylZha77lNhdj-llFvc3uLUeHo36i8NYQ%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AM8Gb2swRQIhAJ59xmSnLExqwPUJahq2ZQEgBIlalzoo3XfGYAG0wDpIAiBzVEekH2XLHrRg0ijQoRazSTxZXKpECgEkCodfcF-9cg%3D%3D"
[download] Resuming download at byte 422842
ERROR: unable to download video data: HTTP Error 404: Not Found
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/networking/_urllib.py", line 410, in _send
    res = opener.open(urllib_req, timeout=float(request.extensions.get('timeout') or self.timeout))
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File<EMAIL_ADDRESS>line 525, in open
    response = meth(req, response)
               ^^^^^^^^^^^^^^^^^^^
  File<EMAIL_ADDRESS>line 634, in http_response
    response = self.parent.error(
               ^^^^^^^^^^^^^^^^^^
  File<EMAIL_ADDRESS>line 563, in error
    return self._call_chain(*args)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File<EMAIL_ADDRESS>line 496, in _call_chain
    result = func(*args)
             ^^^^^^^^^^^
  File<EMAIL_ADDRESS>line 643, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 404: Not Found

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 4051, in urlopen
    return self._request_director.send(req)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/networking/common.py", line 114, in send
    response = handler.send(request)
               ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/networking/_helper.py", line 204, in wrapper
    return func(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/networking/common.py", line 325, in send
    return self._send(request)
           ^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/networking/_urllib.py", line 415, in _send
    raise HTTPError(UrllibResponseAdapter(e.fp), redirect_loop='redirect error' in str(e)) from e
yt_dlp.networking.exceptions.HTTPError: HTTP Error 404: Not Found

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 3387, in process_info
    success, real_download = self.dl(temp_filename, info_dict)
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 3108, in dl
    return fd.download(name, new_info, subtitle)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/downloader/common.py", line 455, in download
    ret = self.real_download(filename, info_dict)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/downloader/http.py", line 364, in real_download
    establish_connection()
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/downloader/http.py", line 120, in establish_connection
    ctx.data = self.ydl.urlopen(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 4070, in urlopen
    raise _CompatHTTPError(e) from e
yt_dlp.networking.exceptions._CompatHTTPError: HTTP Error 404: Not Found

[debug] Invoking http downloader on "https://rr1---sn-ni5f-t8g6.googlevideo.com/videoplayback?expire=1699991823&ei=rnxTZbHQPK-psfIPh8ex0Ao&ip=<IP_ADDRESS>&id=o-AOwxImiK9dppnt3EaR7Ul8E0jGpq6nPdHo9qfU3h9GSk&itag=22&source=youtube&requiressl=yes&mh=u5&mm=31%2C26&mn=sn-ni5f-t8g6%2Csn-vgqsrn6e&ms=au%2Conr&mv=m&mvi=1&pl=22&gcr=ca&initcwndbps=1843750&spc=UWF9f5fRoDNXpOOA3v19s6qCiG2ljq4&vprv=1&svpuc=1&mime=video%2Fmp4&cnr=14&ratebypass=yes&dur=965.764&lmt=1674763739967331&mt=1699970018&fvip=4&fexp=24007246&beids=24350018&c=ANDROID&txp=1211224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cgcr%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Ccnr%2Cratebypass%2Cdur%2Clmt&sig=ANLwegAwRQIhAIe-YMGhpNbt9dhQ-0uB5LDWyYTg6UKPxnIGPfYHfb5lAiA2VOLx7MFNmSylZha77lNhdj-llFvc3uLUeHo36i8NYQ%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AM8Gb2swRQIhAJ59xmSnLExqwPUJahq2ZQEgBIlalzoo3XfGYAG0wDpIAiBzVEekH2XLHrRg0ijQoRazSTxZXKpECgEkCodfcF-9cg%3D%3D"
[download] Resuming download at byte 422842
ERROR: unable to download video data: HTTP Error 404: Not Found
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/networking/_urllib.py", line 410, in _send
    res = opener.open(urllib_req, timeout=float(request.extensions.get('timeout') or self.timeout))
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File<EMAIL_ADDRESS>line 525, in open
    response = meth(req, response)
               ^^^^^^^^^^^^^^^^^^^
  File<EMAIL_ADDRESS>line 634, in http_response
    response = self.parent.error(
               ^^^^^^^^^^^^^^^^^^
  File<EMAIL_ADDRESS>line 563, in error
    return self._call_chain(*args)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File<EMAIL_ADDRESS>line 496, in _call_chain
    result = func(*args)
             ^^^^^^^^^^^
  File<EMAIL_ADDRESS>line 643, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 404: Not Found

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 4051, in urlopen
    return self._request_director.send(req)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/networking/common.py", line 114, in send
    response = handler.send(request)
               ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/networking/_helper.py", line 204, in wrapper
    return func(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/networking/common.py", line 325, in send
    return self._send(request)
           ^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/networking/_urllib.py", line 415, in _send
    raise HTTPError(UrllibResponseAdapter(e.fp), redirect_loop='redirect error' in str(e)) from e
yt_dlp.networking.exceptions.HTTPError: HTTP Error 404: Not Found

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 3387, in process_info
    success, real_download = self.dl(temp_filename, info_dict)
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 3108, in dl
    return fd.download(name, new_info, subtitle)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/downloader/common.py", line 455, in download
    ret = self.real_download(filename, info_dict)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/downloader/http.py", line 364, in real_download
    establish_connection()
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/downloader/http.py", line 120, in establish_connection
    ctx.data = self.ydl.urlopen(request)
               ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line 4070, in urlopen
    raise _CompatHTTPError(e) from e
yt_dlp.networking.exceptions._CompatHTTPError: HTTP Error 404: Not Found

The video format you are downloading (22) is broken for those URLs on YouTube's end.
Also, are you sure you want -f mp4,mp4? That tells yt-dlp to download the single mp4 file with the highest resolution twice. In practice, it ends up being only downloaded once due to the filename being the same, but this will still limit you to 720p, since higher resolutions have split audio/video.

would be nice if we could fix the http downloader so that it doesn't hang like that though

The video format you are downloading (22) is broken for those URLs on YouTube's end. Also, are you sure you want -f mp4,mp4? That tells yt-dlp to download the single mp4 file with the highest resolution twice. In practice, it ends up being only downloaded once due to the filename being the same, but this will still limit you to 720p, since higher resolutions have split audio/video.

I know what I asked it to do.
It says "give me the best fidelity mp4, and give me the highest fidelity audio stream that is compatible with an mp4 container"
If you just use "-fmp4" it will download a split audio stream and am mp4 video stream and then try to MUX them, but if the audio transport doesn't fit in an MP4 it will start to do weird nonsense like mux them into an mkv.
I don't know enough about how modern youtube works to know what format is actually requested for a desktop browser, but I like mp4s because virtually anything can play them without software like VLC or mvp.
I think what you're saying is I should request different formats and do a mux+transcode because the media served from the server is corrupt, but i agree with @bashonly that it shouldn't be hanging.

Technically this is a duplicate of #3372, but back when that issue was opened, the http downloader would error immediately instead of hanging. Possible regression?

Did some digging, and the bug seems very similar to #7504, which was fixed by 662ef1e910b72e57957f06589925b2332ba52821
When I revert that commit, the download will error immediately instead of hang

It says "give me the best fidelity mp4, and give me the highest fidelity audio stream that is compatible with an mp4 container"

But it doesn't. -f mp4 means "download the best quality format with a mp4 extension served as a single file".
The comma is used to select multiple formats to download. -f 17,22 would download format 17 and format 22. -f mp4,mp4 instructs yt-dlp to download the same format (in this case 22) twice.
If you want h264 and aac inside a mp4 container, you should use -S vcodec:h264,res,acodec:m4a instead.
If you just want "an mp4" you can use -S ext, but with this you might end up with av1 or vp9 video streams, which are not the greatest for compatiblity.

-f bestvideo[ext=mp4]+bestaudio[ext=m4a],best[ext=mp4] would still download the video twice. You would want to use / instead of , to use premerged formats as a backup instead of downloading both.
This does still come with the problem I mentioned before that YouTube now offers av1 and vp9 video streams inside mp4 files. If you want maximum compatibility, this is likely not what you want. You could add [vcodec^=avc] to limit format selection to h264/avc video streams, but imo. no -f and instead -S vcodec:h264,res,acodec:m4a is easier and means if no h264 formats are available, another format will still be downloaded.

For comparison, results with yt-dl are slightly different.
The repro for this issue #8579 fails because a block gets 404 after some successful reads.
...
[debug] Invoking downloader on u'https://rr4---sn-cu-aigss.googlevideo.com/videoplayback?sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cgcr%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cns%2Ccnr%2Cratebypass%2Cdur%2Clmt&fexp=24007246&ei=Mw1UZfm9FM2EhcIPs_iuiAs&ip=<IP_ADDRESS>&spc=UWF9f3gBN3FQh71tCLQmKJIJTgW58PKRQNQa0Cn0XA&id=o-AKCFbTi06wnsz11kR7sNEeiZgImd1kVMAAe-PI9udzCP&txp=1211224&svpuc=1&cnr=14&requiressl=yes&ratebypass=yes&source=youtube&gcr=gb&sig=ANLwegAwRAIgGzAPtpf-d4OL9NrfUDGtcNjM8dw6Wxv7JRGUy68CX6YCIDP7TX1K4X_zOLgOysyKaQ50-i7rH5dynFX02Jmj-MVM&pcm2cms=yes&dur=965.764&ns=JewhnVHEFs7joMVPEegkqigP&initcwndbps=1853750&vprv=1&lsig=AM8Gb2swRAIgTQauAC-KBq-x2hc9vlK7JoowuTSvSs_v0aTzJmj2byICIG4GZhfSDPncRZMO3mikqsYQMmnvonnfqoUbXzopU2P4&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpcm2cms%2Cpl%2Cinitcwndbps&lmt=1674763739967331&expire=1700028819&mime=video%2Fmp4&fvip=4&beids=24350018&c=WEB&mm=31%2C29&mn=sn-cu-aigss%2Csn-cu-c9i6&mh=u5&n=LYk79JrE02PMZw&mt=1700006723&mv=m&pl=25&ms=au%2Crdu&mvi=4&itag=22'
[download] Destination: 2014 NPC & IFBB  Emerald Cup Prejudging Video-5MlRHDte9XA.mp4
[download]   0.2% of 232.10MiB at 29.39KiB/s ETA 02:14:32[download] Got server HTTP error: Downloaded 422842 bytes, expected 243369394 bytes. Retrying (attempt 1 of 10)...
ERROR: unable to download video data: HTTP Error 404: Not Found
Traceback (most recent call last):
  File "youtube_dl/YoutubeDL.py", line 2137, in process_info
    success = dl(filename, info_dict)
  File "youtube_dl/YoutubeDL.py", line 2076, in dl
    return fd.download(name, new_info)
  File "youtube_dl/downloader/common.py", line 387, in download
    return self.real_download(filename, info_dict)
  File "youtube_dl/downloader/http.py", line 349, in real_download
    establish_connection()
  File "youtube_dl/downloader/http.py", line 116, in establish_connection
    raise err
HTTPError: HTTP Error 404: Not Found

The repro for #7504 fails immediately when a 0-length block is returned on the first read.
[debug] Invoking downloader on u'https://rr5---sn-cu-aigss.googlevideo.com/videoplayback?sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cns%2Ccnr%2Cratebypass%2Cdur%2Clmt&fexp=24007246&ei=lQ5UZZfJCaiKvdIP1-mVyAI&ip=<IP_ADDRESS>&spc=UWF9f4Xh5vCI6-6d4hLuirLDPvxzomKho73mjD2zrw&id=o-AMYvNP5qdfU3zdsckl8SjL5QC_7rr94GIHTb5TLg38WJ&txp=1219224&svpuc=1&cnr=14&requiressl=yes&ratebypass=yes&source=youtube&sig=ANLwegAwRQIgR62-HLw5GHSTCIZdBo2wjJm8lWfy2oLUksdGP-SyCFsCIQDUcbLptNjfP907Kh6k_6OSQWHZTcoFVCCbu-TSO-ai4w%3D%3D&dur=72.817&ns=qDzjfjigqgmqhxEHkyxA8m0P&initcwndbps=1853750&vprv=1&lsig=AM8Gb2swRQIhAOaRHUZgNWK_yRuB4LgP7GYUSNnldN3YAgV3TZrz2L5iAiAhErIs6eEVvZaYUhskQNNBd_WufJRNmNhcZ4XCVbA3eA%3D%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lmt=1673451770409789&c=WEB&expire=1700029173&mime=video%2Fmp4&fvip=3&beids=24350018&itag=18&mm=31%2C29&mn=sn-cu-aigss%2Csn-cu-c9id&mh=S3&n=NnUN8h7DIz_DxQ&mt=1700006723&mv=m&pl=25&ms=au%2Crdu&mvi=5'

ERROR: Did not get any data blocks
  File "/usr/lib/python2.7/runpy.py", line 174, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
    exec code in run_globals
  File "/home/df/Documents/src/youtube-dl/youtube_dl/__main__.py", line 19, in <module>
    youtube_dl.main()
  File "youtube_dl/__init__.py", line 473, in main
    _real_main(argv)
  File "youtube_dl/__init__.py", line 463, in _real_main
    retcode = ydl.download(all_urls)
  File "youtube_dl/YoutubeDL.py", line 2233, in download
    url, force_generic_extractor=self.params.get('force_generic_extractor', False))
  File "youtube_dl/YoutubeDL.py", line 853, in extract_info
    return self.__extract_info(url, ie, download, extra_info, process)
  File "youtube_dl/YoutubeDL.py", line 860, in wrapper
    return func(self, *args, **kwargs)
  File "youtube_dl/YoutubeDL.py", line 967, in __extract_info
    return self.process_ie_result(ie_result, download, extra_info)
  File "youtube_dl/YoutubeDL.py", line 1001, in process_ie_result
    return self.process_video_result(ie_result, download=download)
  File "youtube_dl/YoutubeDL.py", line 1849, in process_video_result
    self.process_info(new_info)
  File "youtube_dl/YoutubeDL.py", line 2137, in process_info
    success = dl(filename, info_dict)
  File "youtube_dl/YoutubeDL.py", line 2076, in dl
    return fd.download(name, new_info)
  File "youtube_dl/downloader/common.py", line 387, in download
    return self.real_download(filename, info_dict)
  File "youtube_dl/downloader/http.py", line 350, in real_download
    return download()
  File "youtube_dl/downloader/http.py", line 320, in download
    self.report_error('Did not get any data blocks')
  File "youtube_dl/downloader/common.py", line 182, in report_error
    self.ydl.report_error(*args, **kargs)
  File "youtube_dl/YoutubeDL.py", line 663, in report_error
    self.trouble(*args, **kwargs)
  File "youtube_dl/YoutubeDL.py", line 615, in trouble
    tb_data = traceback.format_list(traceback.extract_stack())

Same behaviour with Python 3.9, and when changing to the backup server (rr5---sn-cu-c9id.googlevideo.com). Video-only formats 134, 135 are fine.
Introducing a retry loop doesn't help either, as with yt-dlp where an infinite retry loop occurred without 662ef1e.

Do we also need to check that resume_len isn't already equal to byte_counter here?

Does that fix the issue? @bashonly. If so, that makes sense. It basically gives both fail conditions priority over both retry conditions

Does that fix the issue?

Yeah it does, and it doesn't seem to break anything else. I'm just not sure about the error that should be raised there

I believe retry(ContentTooShortError(byte_counter, int(ctx.content_len)))


Web console: fix pagination, add error delimiters

This PR fixes the pagination control count and adds delimiters (/) for the error display:

nit:
I would use newline for Failed task id, On host, Debug
and add another delimiter for the sub-items under debug (download, archive, etc)

Ok, I rejiggered it a bit:

There is only one item under Debug, it is "download query detail archive" which I just renamed to "get query detail archive" because it is shorter, also get is less likely to be read as a single item vs download. The query detail archive is a single file that contains all the important query and execution details that can be sent to someone for debugging.


Fix technology not showing in info modal

Notes for Reviewers
This PR fixes #

[X] Added case validation on UI side
[X] Made fields not required
[X] Used RTK

Signed commits

[ ] Yes, I signed my commits.

I'll be making a couple of more enhancements here so that we don't get any rerender issues or other issues in future, to prevent rerender I'll be separating them from the parent component so that they don't depend on parent component states

@sudhanshutech can you help with testing this PR, lemme know if you find any issue related to losing focus during typing or losing technology in technology field

sure @Yashsharma1911 , i will get back to you after testing

@sudhanshutech can you help with testing this PR, lemme know if you find any issue related to losing focus during typing or losing technology in technology field

Again, this is only applicable in MeshMap Designer.

@Yashsharma1911 make sure that you have tested the Info / Share modal in Visualizer, too.

@sudhanshutech have checked?

Yes i checked, its working fine for me. There was no loosing focus

Thankyou @sudhanshutech


Document that Switch will not work on old emulator images

The older emulators run Android 2.1, and the SwitchCompat implementation does not work on Android versions < 4.0. The newer emulator packages should be okay because they run 8.0 (Windows) and 5.1 (macOS). If people want to test the Switch in the emulator, they will need to upgrade.

Revisiting this, we made it so that Switch will fall back to a Checkbox on devices older than SDK 14. The documentation should reflect that this will happen.


fix: broken auth tests

This commit fixes the auth tests; we no longer use the auth0 token
for instantiating any clients, we only use the MGA account session
token.
This commit also changes the run scripts in the package.json such
that the generic integration-test target runs all integration
tests; previously it was only running cache/control/topics tests,
which felt counter-intuitive to me. I added a new target that runs
only the cache/control/topics tests but it seemed to me like the
default behavior should be to run all of the tests, to avoid
surprising anyone and missing the execution of certain tests.
There may be changes necessary in the canaries code to account for this.

:shipit:


Views don't seem to work

tests/test_keras.py suggests to use .dimshuffle((1,0,2)) to match the expected input shape of warp-ctc. I found that this leads to wrong results.
Test file: https://gist.github.com/githubnemo/5553d3c9c0735c2f372ede2a119d4495
Suppose I use the keras compatible format (batch, seqlen, units) and create a tensor from it:
nacts = [...] # from test_ctc.py extended by one batch, shape = (3,4,5)
acts = # nacts reshaped to (4,3,5)
tsActsN = theano.shared(acts)
tsActs = tsActsN.dimshuffle((1,0,2))
loss = ctc(tsActs)

the result will not be the same as if I would have used nacts to create the tsActs tensor directly.
However, copying works:
nacts = [...] # from test_ctc.py extended by one batch, shape = (3,4,5)
acts = # nacts reshaped to (4,3,5)
tsActsN = theano.shared(acts)
tsActs = theano.shared(np.zeros((3,4,5), dtype='float32'))
for i in range(4):
    tsActs = T.set_subtensor(tsActs[:,i,:], tsActsN[i,:,:])
loss = ctc(tsActs)

I'm not sure how this comes but .dimshuffle() creates a view which might upset things.
This behavior is the same regardless of device=cpu or gpu.

I'm pretty sure this is due to the fact that dimshuffle only creates a view. When calling CudaNdarray_DEV_DATA(%(acts)s); the pointer to the raw data is returned and since dimshuffle only modifies the dimension, not the data, it has basically no effect.

I can reproduce this with the following change to tests/test_ctc.py. Replace:
tsActs = theano.shared(acts, "acts")   # float32, so should be moved to GPU
with:
acts = acts.transpose((1,0,2)).copy()
tsActs = theano.shared(acts, "acts")   # float32, so should be moved to GPU
tsActs = tsActs.dimshuffle((1,0,2))
These should be the same -- one transpose in numpy, one in theano -- but the CTC costs are wrong.
Annoyingly, passing tsActs.copy() to ctc_cost() doesn't work, because the Elemwise{Identity} gets optimized away. Instead, I've added some C code to deep copy the tensor if it's not C-contiguous.

That patch looks much nicer than what I could hack together in that time, neat.
My test model loss converges equally (epsilon=0.01) compared to the workaround so I would say this is fixed.

Could it be that the CTC ops overwrite some of its inputs? Or return a view
of its inputs?
If that is the case, then this must be declared in the Op. Currently, there
is no such declaration:
http://deeplearning.net/software/theano/extending/inplace.html
On Wed, Aug 24, 2016 at 10:56 PM, githubnemo<EMAIL_ADDRESS>wrote:

That patch looks much nicer than what I could hack together in that time,
neat.
My test model loss converges equally (epsilon=0.01) compared to the
workaround so I would say this is fixed.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/mcf06/theano_ctc/issues/11#issuecomment-242268322,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AALC-8aSQAUoRNTPg7ER3HBdXKs0Zvi5ks5qjQRkgaJpZM4JsiCs
.

Actually, the outputs are freshly allocated.


.load() only loading overlap between scenes with HLS data?

I'm currently using HLS data (both HLSL30.v2.0 and HLSS30.v2.0 collections) for a short time frame (5-16-2024 through 5-18-2024) and I noticed that only areas that have an overlap of both collections still have imagery in the final output. I'm at a bit of a loss as to why this may be occurring, but I suspect it may have to do with the way the lazy xarray dataset is built. I thought setting the nodata value might help (as mentioned in https://github.com/opendatacube/odc-stac/issues/162), but the output did not change. The HLS config contains information about band names, band values, cloud masking information, etc.
I am currently using odc-geo==0.4.6 and odc-stac==0.3.9.
This image shows what we expect to see:

And this image shows what is loaded in with data = stac.stac_load(item_collection,                geopolygon=roi,                chunks={"x": "auto", "y": "auto","time":"auto"},                output_crs=crs,                dtype='int16',                resolution=30,                stac_cfg=hls_cfg                          )

I know there are a lot of moving parts in this issue, but any insights as to why something like this might be happening will be very helpful :) Thank you!

@ithaca-oyler please provide replication code, what stac query you are running, how are you calling stac load etc. This certainly looks like broken nodata marker, do the data files have expected nodata field set? By default we trust nodata marker in the file over all other places. Do you get same problem when running without Dask?

Hi @Kirill888 -- attached is a zip file that contains a sample notebook, the config file, and an example of what one of the metadata files look like. According to the metadata, the data files expect to have nodata set to -9999 (listed as FILLVALUE in the metadata). The output images shown in my previous comment are the outputs from odc.algo xr_quantile at the end of the notebook. I have tried several different combinations of setting the nodata value in the config file, as a stac.load() call, and in xr_quantile() with no good results.
replication-code.zip

@ithaca-oyler the code does way too much and requires complex environment to run. Please provide a simpler example using single band only. My guess is that data bands work probably fine, but Fmask band is not, need to specify nodata=255 for it. Please debug more on your end.

@Kirill888 Thank you for your patience while I put together a simpler example for you. I'm taking out the cloud masking step, but still making the change you suggested with specifying nodata=255 in the HLS config I was using. I hope to have an updated notebook made in the next day or so. In the meantime, I have done some additional debugging and I think you're on the right track with part of the issue being in the Fmask band. Fixing some of the HLS config helped and brought back some of the pieces of data that are between the HLS tiles.
Here's what specifying nodata=255 and removing the cloud masking step resulted in:

I also decided to experiment with the chunks setting in stac.load() and I was surprised to find changing up this setting produced different results. For the image above, the setting was chunks={"x": "auto", "y": "auto","time":"auto}. Here, I changed it to chunks={"x": 512, "y": 512,"time":"auto"}

And here I changed it to  chunks={"x": 1024, "y": 1024,"time":"auto"}

Do you have any thoughts as to why the output might be changing with the chunk sizes?

Hi @Kirill888 -- a few updates. I've done a bit more debugging and I was able to determine that there were several issues contributing to my results, namely cloud masking, the no data flags I had set in my HLS config file, and needing to select the correct groupby argument in .load(). Below is the result of nodata=0 in my config file and data = stac.load(item_collection,                geopolygon=roi,                chunks={"x": "auto", "y": "auto","time":"auto"},                output_crs=crs,                resolution=30,                stac_cfg=cfg,                nodata=np.nan,                dtype='float64',                groupby='solar_day') for the same subset of 3 days shown in previous comments (no cloud masking):

The fragmentation shown in my original question occurs with a combination of the nodata value in my HLS config not being set, the xr_quantile() nodata value being set to 0, and  groupby='time' or groupby not being set at all. Lots of moving parts and places where things could go wrong.
The end results output from xr_quantile() still aren't quite looking how I expect, but I think I've ruled out .load() as the source of my problems given how the rgb time slices look. I'll hop over to the odc-algo repo to post my question about xr_quantile() there.
Thanks a bunch!


Prevent app log panic / message channel double-close

Fix #1417 : make app logging closer goroutine on-demand and disable it for app logs command.
Recap: For app logs context cancellation is late.
Closer races against process termination
When closer wins the race a panic occurs, double close of the message channel.
However, closer is not required, because websocket is closed by server!
Closing by user would be sigterm (^C).
That kills the process and goroutines with no time for this kind of finalization.

Codecov Report

Merging #1419 (4b181c8) into main (e914dfe) will decrease coverage by 9.78%.
The diff coverage is 68.42%.

@@            Coverage Diff             @@
##             main    #1419      +/-   ##
==========================================
- Coverage   36.91%   27.13%   -9.79%
==========================================
  Files         157      157
  Lines       11525    11528       +3
==========================================
- Hits         4255     3128    -1127
- Misses       6638     7935    +1297
+ Partials      632      465     -167

Flag
Coverage Δ

acceptance-apps
24.62% <0.00%> (-0.13%)
:arrow_down:

acceptance-cli
?

unittests
7.74% <68.42%> (+0.03%)
:arrow_up:

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

internal/cli/usercmd/app.go
5.08% <0.00%> (ø)

internal/cli/usercmd/client.go
61.90% <ø> (ø)

pkg/api/core/v1/client/apps.go
10.08% <70.58%> (+0.58%)
:arrow_up:

internal/cli/usercmd/push.go
9.17% <100.00%> (ø)

internal/api/v1/application/importgit.go
0.00% <0.00%> (-67.70%)
:arrow_down:

helpers/tar.go
0.00% <0.00%> (-66.67%)
:arrow_down:

internal/api/v1/appchart/show.go
0.00% <0.00%> (-64.71%)
:arrow_down:

internal/api/v1/appchart/create.go
0.00% <0.00%> (-61.30%)
:arrow_down:

internal/api/v1/service/delete.go
0.00% <0.00%> (-60.00%)
:arrow_down:

internal/api/v1/env/show.go
0.00% <0.00%> (-59.10%)
:arrow_down:

... and 52 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update e914dfe...4b181c8. Read the comment docs.

Closing in favor of #1420. That PR significantly simplifies and cleans the client log receiver. My attempt here complexifies it.


Use Ubuntu 22.04 in lint action

Which will probably not fix the issue in #1472, it's the latest linux runner but still over a year old.

https://github.com/kgorking/ecs/blob/1dd4400589b0d7e2bd9a1aed147890f566041648/.github/workflows/clang.yml#L32-L39
I guess we could use this to run a newer toolchain.

https://github.com/natalie-lang/natalie/actions/runs/6915553353/job/18814621284?pr=1507#step:4:109
Yeah, this still uses 14

https://github.com/kgorking/ecs/blob/1dd4400589b0d7e2bd9a1aed147890f566041648/.github/workflows/clang.yml#L32-L39
I guess we could use this to run a newer toolchain.

Yeah, that's not going to work if we put our own Docker image in between.

Dang, we were already running rake docker_tidy! I don't know why I thought we were using an off-the-shelf GitHub action for that. My bad.
I think the changes here are good to just freshen up the runner anyway.

...but now I'm confused. I wrote #1472 because I thought we had a clang-tidy warning that CI didn't catch. Did I just dream that up?

...but now I'm confused. I wrote #1472 because I thought we had a clang-tidy warning that CI didn't catch. Did I just dream that up?

No, that's correct (although the actual issue reported by clang-tidy has been). We run clang-tidy in the ruby:3.2 image, which is based on Debian Bookworm. This contains clang 14.
My desktop is running clang 16, that's how I found the issue that led to #1472


RFC: Site development flow 1.0

On the current environment is hard to add custom config, update WordPress or to add any custom extensions.
In order to solve this problem, we propose to use only Docker images, but which integrate your code via git.
Since WordPress-Operator is coupled with the WordPress runtime, we suggest a layering structure:
    INTEGRATION CODE (custom glue code)
----------------------------------------------
   CLIENT CODE + WORDPRESS (via composer)
-----------------------------------------------
      PHP + NGINX (our base image)

In order to add your custom config, you'll need to have, in your repository, a Dockerfile that starts from our custom base image. That image represents a certain PHP version, bundled with a set of minimal PHP extensions and minimal Nginx config (Lua code for serving GCS buckets). Your Dockerfile can then contain custom extensions or custom Nginx config (that needs to be added at certain paths).
This will enhance the local development workflow and deployment:

on local you can run the same image as in production, via docker-compose
you can use Skaffold to run the same image on local as in production. Also, Skaffold can be used to deploy on your local stack instance or in stage/production.

In this use case, running sites are read-only and the development SHOULD only work via composer and git.

Concerns from @milero:

How much it would take to build a custom Docker image?

on code update
on extension add
on plugin/wordpress update


[incubator/gogs] Bumped version from 0.11.86 to 0.11.91

What this PR does / why we need it:
Bumped version from 0.11.86 to 0.11.91
@obeyler @poblin-orange

/ok-to-test

/approve

/ok-to-test

/test pull-charts-e2e

@ribeiromiranda: The following test failed, say /retest to rerun all failed tests:
Test name	Commit	Details	Rerun command
pull-charts-e2e	99500eb link /test pull-charts-e2e
Full PR test history. Your PR dashboard. Please help us cut down on flakes by linking to an open issue when you hit one in your PR.

W0417 18:59:34.657]   File "/workspace/./test-infra/jenkins/../scenarios/execute.py", line 30, in check
W0417 18:59:34.658]     subprocess.check_call(cmd)
W0417 18:59:34.658]   File "/usr/lib/python2.7/subprocess.py", line 190, in check_call
W0417 18:59:34.658]     raise CalledProcessError(retcode, cmd)
W0417 18:59:34.658] subprocess.CalledProcessError: Command '('./test/e2e.sh',)' returned non-zero exit status 1
E0417 18:59:34.658] Command failed
I0417 18:59:34.658] process 625 exited with code 1 after 1.8m
E0417 18:59:34.658] FAIL: pull-charts-e2e
The test error is not related to the change.
@obeyler


Issue 11252 - In operator requested for std.range.iota

I decided against implementing it for floating pointed iotas because comparing floating points is so unreliable.

Check what was said later in the bug report... It does not do a linear search, this is a constant-time algorithm.

I'm on the fence about this one.  Using an operator overload on iota seems like a very roundabout way of doing what the bug report is asking for.  Why can't this just be a standalone range (in the numerical sense, not in the sense of input range) comparison function?
bool liesBetween(string boundsType="[)", T)(T val, T lower, T upper)
{
    static if (boundsType="[)")
        return lower <= val && val < upper;
    else
        ... // other boundsType cases, it's just 4 of them
}

assert(5.liesBetween(3, 6));

Note that the original bug report isn't even asking for testing membership in iota with non-unit step, so implementing an operator overload for iota really seems like overkill. It's not as though we have a general membership test for generic ranges, either, so it also feels somewhat out-of-place.

Also, if iota is applied to a custom user type that supports ++ but not arithmetic in general, then it's not possible to implement operator in in an efficient way, in which case I would be against adding it to Phobos.  But if we exclude those instances of iota, then it seems incongruous (sometimes iota supports in, sometimes it doesn't).
I think a standalone comparison function is still better -- no need to instantiate iota just to check if something lies between lower/upper bounds, and no need to worry about instantiations of iota where bounds checking cannot be implemented efficiently.

What comes to custom types only incrementing, I think I must add a template constraint forbidding usage with non-integral types. That constraint is already there for indexing, so nothing special there.
But I agree that may be a bit inconsistent way with the other library to solve this problem. On the other hand, somebody might already have an iota that needs to be checked, and forcing to retype it's parameters is a bit suboptimal. Only bit, trough.
Isn't this question somewhat like c++ iterator pairs vs ranges? In that should one use two arguments to describe bounds for an area, or one where the bounds have been premade?
I'll add the constraint. If you are positive it should be a three-argument between function instead of iota, close this. On the other hand, I could also change the in operation to a regular member function.

@wilzbach This doesn't add a new symbol, why do you want Andrei's review for this?

An operator is a symbol, or at least equivalent to a symbol. Or do you mean module-level symbols?

@wilzbach This doesn't add a new symbol, why do you want Andrei's review for this?

Because this seems to be like an important precedent (and is about adding a new symbol): "should we add in operator support to ranges or add a new symbol?"

Wow, I did not even notice that iota for user-defined types before now. I agree it should support in operator if the type was fully arithmetic, but because it does not support random access anyway it is matter of a separate pr. So no need for custom-type unittests either.
I'll do the documentation, trough.

Add test for user defined types

That's not as easy as it sounds (you can read in some bugzilla issue why), so we should leave that for another PR.

I won't probably do it this nor the next week because I have other stuff to do but then, I will.

One more thing: iota should support contains similar to SortedRange. The backend of in and contains is the same.

Documentation done.


updatelatestversionformysql

@marlonj-ms : Thanks for your contribution! The author(s) have been notified to review your proposed change.

Please assign this to MySQL PM.

#please-close


3.5.1

@rultor release tag is 3.5.1

@rultor release tag is 3.5.1

@portlek OK, I will release it now. Please check the progress here

@rultor release tag is 3.5.1

@portlek Done! FYI, the full log is here (took me 10min)

@rultor release tag is 3.5.2

@rultor release tag is 3.5.2

@portlek OK, I will release it now. Please check the progress here

@rultor release tag is 3.5.2

@portlek Done! FYI, the full log is here (took me 13min)


how should I use i18n-node with lighterhtml? [help]

About i18n-node, where should I register __() to be used within lighterhtml templates?
This is an example implementation for handlebarsjs.com template engine:
// register hbs helpers in res.locals' context which provides this.locale
hbs.registerHelper('__', function () {
  return i18n.__.apply(this, arguments);
});
hbs.registerHelper('__n', function () {
  return i18n.__n.apply(this, arguments);
});

lighterhtml is not compatible with node (meaning: it doesn't do SSR)
to use i18n with anything, just use it normally
html`<div>${i18n`my content`}</div>`


Automated Package Upgrade

:tada: This PR is included in version 2.2.9 :tada:
The release is available on:

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


Autoplay video

how to prevent view to autoplay the video?

Please, pay attention to the issue you have already open. #50

Im sorry, i think my quetion is deleted
I new on github
Pada tanggal 11 Nov 2017 11.15 PM, "Pierfrancesco Soffritti" <
<EMAIL_ADDRESS>menulis:

Closed #51
https://github.com/PierfrancescoSoffritti/Android-YouTube-Player/issues/51
.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/PierfrancescoSoffritti/Android-YouTube-Player/issues/51#event-1337278328,
or mute the thread
https://github.com/notifications/unsubscribe-auth/Ad8WveltOnL20QuqeiHZBKYU0wiHOpIxks5s1cgJgaJpZM4QaiPF
.