Multimedia AviFil32: bug with passing AVICOMPRESSOPTIONS[] plpOptions

There is a bug with how the AVICOMPRESSOPTIONS are passed to the AVISaveOptions, AVISaveOptionsFree and AVISaveOptionsFree functions. They are passed directly as an array of structs which causes a crash. As stated in the description, they should be passed as an array of pointers.

Pointer to an array of pointers to AVICOMPRESSOPTIONS structures. These structures hold the compression options set by the
dialog box. The nStreams parameter indicates the number of pointers in the array.

I'm not sure what the most elegant way to fix this is, but I've confirmed that it works when the following signature is used instead:
		[DllImport("avifil32.dll")]
		public static extern unsafe bool AVISaveOptions(
			HWND hwnd,
			ICMF_CHOOSE uiFlags,
			int nStreams,
			[In, MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.Interface, SizeParamIndex = 2)] IAVIStream[] ppavi,
			AVICOMPRESSOPTIONS** plpOptions);

And for instance a single AVICOMPRESSOPTIONS passed like this:
            AVICOMPRESSOPTIONS opts = new AVICOMPRESSOPTIONS();
            opts.fccType = streamtypeVIDEO;
            AVICOMPRESSOPTIONS* optionsPtr = &opts;
            AVICOMPRESSOPTIONS** optionsPtrPtr = &optionsPtr;
            AVISaveOptions(IntPtr.Zero, Avi.ICMF_CHOOSE.ICMF_CHOOSE_KEYFRAME | Avi.ICMF_CHOOSE.ICMF_CHOOSE_DATARATE, 1, streams, optionsPtrPtr);

This group of AVI functions do not have any associated unit tests. I have some ideas on how to elegantly fix this bug, but would appreciate a code snippet that I can use for testing. Do you have something you can share?

Knowing that you may be able to test with my simple resolution, I have committed my changes with the fix. You can pull them from the AppVeyor repository (see homepage for details). Please let me know if this little change resolves the problem.
I would appreciate the test code regardless so I can include this as a sample in my unit tests.

My last commit fails a simple test I wrote. Please ignore.

Thanks for your work.
Trying to create a small snippet, I've noticed that there also seem to be some other problems with your AviFil32 Wrap.
The following code sometimes creates a working video and sometimes it does not.
Sadly I can't figure out why. Perhaps you have an idea what is going on.
using Vanara.PInvoke;
using static Vanara.PInvoke.AviFil32;
using static Vanara.PInvoke.Kernel32;
using static Vanara.PInvoke.WinMm;
using static Vanara.PInvoke.Gdi32;
using System.Runtime.InteropServices;
using System.Drawing.Imaging;

namespace WinFormsApp1
{
    internal static class Program
    {
        [STAThread]
        static unsafe void Main()
        {
            int width = 640;
            int height = 480;
            uint frameSize = (uint)(4 * width * height);

            using var bmp = new Bitmap(width, height);

            AVIFileInit();
            var result = AVIFileOpen(out var aviFile, @"c:\temp\test.avi", OpenFileAction.OF_WRITE | OpenFileAction.OF_CREATE);
            result.ThrowIfFailed();

            AVISTREAMINFO strhdr;
            strhdr.fccType = mmioStringToFOURCC("vids", 0);
            strhdr.fccHandler = mmioStringToFOURCC("CVID", 0);
            strhdr.dwFlags = 0;
            strhdr.dwCaps = 0;
            strhdr.wPriority = 0;
            strhdr.wLanguage = 0;
            strhdr.dwScale = 1;
            strhdr.dwRate = 30;
            strhdr.dwStart = 0;
            strhdr.dwLength = 0;
            strhdr.dwInitialFrames = 0;
            strhdr.dwSuggestedBufferSize = frameSize;
            strhdr.dwQuality = unchecked((uint)-1);
            strhdr.dwSampleSize = 0;
            strhdr.rcFrame.top = 0;
            strhdr.rcFrame.left = 0;
            strhdr.rcFrame.bottom = height;
            strhdr.rcFrame.right = width;
            strhdr.dwEditCount = 0;
            strhdr.dwFormatChangeCount = 0;
            strhdr.szName = string.Empty;

            result = AVIFileCreateStream(aviFile, out var aviStream, in strhdr);
            result.ThrowIfFailed();

            IAVIStream[] aviStreams = new IAVIStream[1] { aviStream };

            // bugged version
            //AVICOMPRESSOPTIONS[] options = new AVICOMPRESSOPTIONS[1];
            //options[0].fccType = streamtypeVIDEO;
            //AVISaveOptions(IntPtr.Zero, ICMF_CHOOSE.ICMF_CHOOSE_KEYFRAME | ICMF_CHOOSE.ICMF_CHOOSE_DATARATE, 1, aviStreams, options);
            //AVISaveOptionsFree(1, options);
            //result = AVIMakeCompressedStream(out var compressedStream, aviStream, in options[0]);

            // fixed version
            AVICOMPRESSOPTIONS options = new AVICOMPRESSOPTIONS();
            options.fccType = streamtypeVIDEO;
            AVICOMPRESSOPTIONS* optionsPtr = &options;
            AVICOMPRESSOPTIONS** optionsPtrPtr = &optionsPtr;

            [DllImport("avifil32.dll")]
            static extern unsafe bool AVISaveOptions(
                HWND hwnd,
                ICMF_CHOOSE uiFlags,
                int nStreams,
                [In, MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.Interface, SizeParamIndex = 2)] IAVIStream[] ppavi,
                AVICOMPRESSOPTIONS** plpOptions);

            [DllImport("avifil32.dll", ExactSpelling = true)]
            static extern HRESULT AVISaveOptionsFree(int nStreams, AVICOMPRESSOPTIONS** plpOptions);

            AVISaveOptions(IntPtr.Zero, ICMF_CHOOSE.ICMF_CHOOSE_KEYFRAME | ICMF_CHOOSE.ICMF_CHOOSE_DATARATE, 1, aviStreams, optionsPtrPtr);
            AVISaveOptionsFree(1, optionsPtrPtr);
            result = AVIMakeCompressedStream(out var compressedStream, aviStream, in options);

            result.ThrowIfFailed();

            BITMAPINFOHEADER bi = new BITMAPINFOHEADER();
            bi.biSize = (uint)Marshal.SizeOf(bi);
            bi.biWidth = width;
            bi.biHeight = height;
            bi.biPlanes = 1;
            bi.biBitCount = 32;
            bi.biSizeImage = frameSize;

            result = AVIStreamSetFormat(compressedStream, 0, new IntPtr(&bi), (int)bi.biSize);
            result.ThrowIfFailed();

            for (int i = 0; i < 200; i++)
            {
                using (var graphics = Graphics.FromImage(bmp))
                {
                    graphics.Clear(Color.FromArgb(Random.Shared.Next()));
                }

                BitmapData bmpData = bmp.LockBits(
                    new Rectangle(0, 0, bmp.Width, bmp.Height),
                    ImageLockMode.ReadOnly, bmp.PixelFormat);

                try
                {
                    result = AVIStreamWrite(
                        compressedStream,
                        i,
                        1,
                        bmpData.Scan0,
                        bmpData.Stride * bmpData.Height,
                        0, out _, out _);
                    result.ThrowIfFailed();
                }
                finally
                {
                    bmp.UnlockBits(bmpData);
                }
            }

            AVIStreamRelease(compressedStream);
            AVIStreamRelease(aviStream);

            AVIFileRelease(aviFile);
            AVIFileExit();
        }
    }
}

To be honest I've just stumbled upon your library, because I ported an old program to .NET 6.0 and had a problem with my old AviFil32 wrap. I've managed to solve that problem and will probably stick to my old wrap. In the long run I want to replace AviFil32 all together with a more modern alternative.

Call AVISaveOptionsFree after calling AVIMakeCompressedStream

When you get the options dialog, which format are you selecting?

I also had to set BITMAPINFOHEADER.biBitCount = 24 and always choose "Uncompressed" in the options dialog under Win11 for it to play.

Call AVISaveOptionsFree after calling AVIMakeCompressedStream

Ah, that makes sense. Strangely this never has been a problem before.

When you get the options dialog, which format are you selecting?

For this test I just stick with Uncompressed an click OK.

I also had to set BITMAPINFOHEADER.biBitCount = 24

It works with biBitCount 32 for me. I also use Win11.

I've made the adjustments you mentioned, but still couldn't get your wrapper to create a working video.
It was driving me nuts, so I created the same test program with my old wrapper and another one using nuget package Vanara.PInvoke.Multimedia 3.3.14 plus replacements for the PInvokes with the plpOptions problems.
Still the version with Vanara did not work. Finally I figured out that the reference counts returned by AVIStreamRelease/AVIFileRelease were not 0. Trying to call AVIStreamRelease/AVIFileRelease multiple times until reference count is 0 resulted in a crash, but calling GC.Collect() afterwards fixes the problem and a working video is created.
It seems there is a bug in your wrapper with how those objects are released.
That also explains why it sometimes worked in my initials tests and later it no longer did, when I created a separate small program.
I've attached the two test programs.
AviTest.zip

Thank you for the details. The primary difference between the two is that the old wrapper passes pointers while Vanara passes interface references. I'll play with this a bit today to see why the process of creating the RCW increments the reference count and report back. It is an important learning that extends across all wrappers so I appreciate your bringing this to my attention.

Yep. I've confirmed that the automatic conversion to a Runtime Callable Wrapper (RCW) forces .NET to create a referenced instance. After calling the AVIxxRelease function corresponding to the created type, you can call 				Marshal.FinalReleaseComObject(pInterface) to force the runtime to release the object if you want to do it per interface. In your old wrapper, you're effectively not creating an RCW unless you explicitly call Marshal.GetObjectForIUnknown.

Thanks for the explanation.
As a consequence wouldn't it be better to not use RCW in this wrapper at all?

In most instances, the RCW simplifies coding by providing direct access to the interface methods and automated cleanup of the COM object (decrementing reference counts). It is the pattern used throughout the project. In some cases, like this one, the COM object was written in a way that requires zeroing out the reference count in order to complete operations. Poor coding assumptions. I think I'd rather continue with the consistency and the benefits and just document those interfaces that behave poorly.

OK, I see. Thanks.


Problem with groups

Hardware
ESP32
Firmware version
V2.3.0
Application version
V2.3.0
What happened? What did you expect to happen?
I have a problem with groups:

when I activate mqtt only the panes appear in HA, the groups do not appear.
if I created a group of 3 sections, no problem it works, I have 2 groups of 3 sections which go back into HA and which work correctly. On the other hand, if I created a group with the 6 shutters, I have one or two shutters which do not trigger.

I have the latest version, 2.3.0.
How to reproduce it (setp by step)
1. Go to...
2. Click on...
...

Logs
No response

You are correct.  Groups do not supported in the MQTT discovery.  This is because MQTT discovery doesn't have an entity domain concept for a group that I am aware.  Cover is not the same.
A group only sends out 1 frame + the number of repeats.  So if one or two shutters re are triggering, it means they did not hear the same frame that the others did.   Increase the number of repeats for your group.

Hi,
Thank you for your answer.
Ok for groups in MQTT, on the other hand I really have a problem with groups, I'll explain:
I did a clean installation with V2.3.0, I only restored my radio config, I reinstalled the shutters one by one, each one works correctly individually, but as soon as I integrate them into a group, it's the anarchy. I created the "balcony shutters" group, I integrated the "dining room shutter" into this same group, I tested and it was the living room shutter which is located right next to it which was triggered. I created the "living room shutter", I tested the group and it is the kitchen shutter which is right next to the living room shutter which is triggered. I integrate the "kitchen section", I test and two other sections open.
Before posting I redid the connection procedure described in this page https://github.com/rstrouse/ESPSomfy-RTS/wiki/Configuring-the-Software#shademotor-setup but nothing to do the problem persists, it's is going crazy lol
I'm going to do all this again with V2.1.1, it worked when I installed it the first time.

After multiple attempts I found how to solve my problem, I changed the number that makes up the remote address and now it works great!!!! Many thanks for your superb work!!!!

I was going to say that it sounds like you have a duplicate address somewhere.  Unfortunately, you cannot know what addresses are already stored in the motor since the motor cannot speak.  It only has a receiver and not a transmitter.   This happens when an address is paired to the motor and then not later unpaired.

I am going to close this out for now.  Glad you got it all working.


lint-staged throwing error

When running lint-staged, it throws error cannot find module './src'
I have lint-staged/src present in node_modules btw.

Hey @vishalmindtickle, could you share the following:

The version of lint-staged you have installed
Your lint-staged config
Steps to reproduce the issue

Hi Suhas. Here's the details:
version: 3.6.1
config:
"lint-staged": {     "*.js": "eslint"   }
Steps to reproduce:
It was breaking when i tried to commit my code.
Then, i tried:
$ ./node_modules/.bin/lint-staged
It throws error as mentioned in previous comment.

Could you please upgrade to the latest version? You can refer releases for any changes that might be required to upgrade from v3.6.1.

@vishalmindtickle Was your issue resolved?

Hey Suhas,
It's been resolved. Thanks


[Infos] change word and definition from string to ReactNode

Issue and Steps to Reproduce
The Infos component doesn't allow to put a style on the word or the definition. It could be nice to give that opportunity to allow the consumer to style one particular definition or word.
In our project, we have that for example.

Versions
2.0.0-alpha.5
Expected
word and definition to have ReactNode type
Actual
word and definition have string type

Pull request has been merged, i am cloturing the issue.


Pin LiteLLM version

Pins LiteLLM version until https://github.com/BerriAI/litellm/pull/4279 is resolved/merged

merged now! @tomusher


ToDocument: char values are printed wrongly

Chars are printed incorrectly by F*'s pretty printer. Consider:
module A
open FStar.Char

let _ = ['\0'; '\n'; 'é'; 'ê'; 'ñ']

fstar.exe --print A.fst:
module A
open FStar.Char

let x = ['\000'; 0x0Az; '\233'; '\234'; '\241']

\000,  \233, \234, \241 are all not accepted by F*'s lexer
And 0x0Az is a uint 8 literal.
This is mostly because we use directly PPrint.OCaml.char, which assumes that's OCaml that will parse back the result. We should implement our own char, that could use unicode.
Note: those bugs are present on string literals as well.

Unsure why this didn't autoclose but:
Fixed by #3561, thanks Lucas!

Unsure why this didn't autoclose but:
Fixed by #3561, thanks Lucas!


Support Maven 3.8.6

Update to latest and greatest Maven version.
Reason mostly "Regression fixes from Maven 3.8.5" see
https://maven.apache.org/docs/3.8.6/release-notes.html

@ppalaga @gnodet Hi, I have a question on the contribution workflow. My pullrequest has passed the checks and is approved however I am unable to merge as I don't have write permissions. Dunno if this is intentional - but I need help to get my pullrequest merged. Anything I need to do? Did I miss to request something in case I should be able to merge? Any help appreciated :smile:

Sorry for the delay, this is now merged.


Feature Request: Default arguments

GraphQL supports default arguments, which could be extracted from Python syntax: https://graphql.com/learn/arguments/#using-default-values
E.g. this resolver signature
    @staticresolver
    async def list_users(
        data,
        info: GraphQLResolveInfo,
        limit: int = 20,
        reverse: bool = false,
        name_starts_with: str = "",
        last_login_after: Optional[UtcDatetime] = None,
    ) -> UserItems:
        ...

Could be reflected in the GraphQL schema as
  listUsers(
    limit: Int! = 20
    reverse: Boolean! = false
    nameStartsWith: String! = ""
    lastLoginAfter: String = null
  ): UserItems!

Which makes the schema more informative.
It's also nice because you don't always want an optional argument to be Noneable, particularly if None doesn't have a specific meaning as a possible argument. For instance, the difference between listUsers(reverse: false) and listUsers(reverse: null) is ambiguous. The latter possibility only introduces extra complexity, and an opportunity for a bug to slip in

thanks for the great suggestion!
added in ee3917a
released in 0.39.0


Base hrefs are not supported in prerendering

Describe the bug
It appears that base hrefs (e.g. <base href="/en/">) are not supported at the moment. I stumbled against two issues.
One issue is that the prerenderer/crawler grabs all hrefs and resolves the relative references against the current path. The result is something like this:

subsection resolved from /en/section => /section/subsection
section resolved from /en/section/subsection => /section/section

Note that this works fine in the browser, the problem is only with the prerenderer. I tinkered around with the code and managed to fix it by resolving against base in this line and the base itself is fairly easy to obtain in the crawl() that's called above.
The second issue is that the asset paths are relative. And the base href screws up all of them as ./_app gets resolved to /en/_app in the browser. This could be solved by allowing to turn off the asset relativity. It might be as simple as allowing / in config.kit.paths.assets. Currently it is refused by a param check with the Error: config.kit.paths.assets option must be an absolute path, if specified. and Error: config.kit.paths.assets option must not end with '/'. checks.
Reproduction
https://github.com/tontonsb/sveltekit-base-prerendering
Try npm run dev and visit http://localhost:5173/en to observe that you can either follow links or directly visit /en, /en/section and /en/section/subsection.
To observe the problem with the crawler:

Execute npm run build and you'll see Not found: /section/subsection
OK, let's make the language prefix optional. Try git checkout lang-optional and npm run build. Now /section/subsection will work (as the [[lang=lang]] prefix is optional in this branch), but you'll stumble against Not found: /section/section when it tries to resolve section from /section/subsection.
In case you want more fun, setting config.kit.prerender.handleHttpError = 'warn' will throw you into infinite 404 /section/section/section/sect... :)

To observe the problem with assets:

Do git checkout assets and npm run build && npm run preview.
Browse around http://localhost:4173/en.
Observe the errors in your console that report things like Not found: /en/_app/immutable/start-c96f4d66.js.

Logs
Example of the crawler error when running npm run build:
Error: Not found: /section/subsection
    at resolve (file:///path/to/sveltekit-base-prerendering/.svelte-kit/output/server/index.js:2493:18)
    at resolve (file:///path/to/sveltekit-base-prerendering/.svelte-kit/output/server/index.js:2358:34)
    at Object.#options.hooks.handle (file:///path/to/sveltekit-base-prerendering/.svelte-kit/output/server/index.js:2537:59)
    at respond (file:///path/to/sveltekit-base-prerendering/.svelte-kit/output/server/index.js:2356:43)
file:///path/to/sveltekit-base-prerendering/node_modules/@sveltejs/kit/src/core/postbuild/prerender.js:27
                                throw new Error(format(details));
                                      ^

Error: 404 /section/subsection (linked from /en)
    at file:///path/to/sveltekit-base-prerendering/node_modules/@sveltejs/kit/src/core/postbuild/prerender.js:27:11
    at save (file:///path/to/sveltekit-base-prerendering/node_modules/@sveltejs/kit/src/core/postbuild/prerender.js:346:4)
    at visit (file:///path/to/sveltekit-base-prerendering/node_modules/@sveltejs/kit/src/core/postbuild/prerender.js:195:3)
[vite-plugin-sveltekit-compile] Prerendering failed with code 1
error during build:
Error: Prerendering failed with code 1
    at ChildProcess.<anonymous> (file:///path/to/sveltekit-base-prerendering/node_modules/@sveltejs/kit/src/exports/vite/index.js:599:15)
    at ChildProcess.emit (node:events:513:28)
    at Process.ChildProcess._handle.onexit (node:internal/child_process:291:12)

Example of the asset errors after npm run build && npm run preview in branch assets:
Error: Not found: /en/_app/immutable/start-c96f4d66.js
    at resolve (file:///home/juris/sveltekit-base-prerendering/.svelte-kit/output/server/index.js:2493:18)
    at resolve (file:///home/juris/sveltekit-base-prerendering/.svelte-kit/output/server/index.js:2358:34)
    at Object.#options.hooks.handle (file:///home/juris/sveltekit-base-prerendering/.svelte-kit/output/server/index.js:2537:59)
    at respond (file:///home/juris/sveltekit-base-prerendering/.svelte-kit/output/server/index.js:2356:43)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)

System Info
System:
    OS: Linux 5.10 Ubuntu 22.04.1 LTS 22.04.1 LTS (Jammy Jellyfish)
    CPU: (8) x64 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz
    Memory: 4.66 GB / 7.61 GB
    Container: Yes
    Shell: 3.6.0 - /usr/bin/fish
  Binaries:
    Node: 16.17.0 - ~/.local/share/nvm/v16.17.0/bin/node
    npm: 8.15.0 - ~/.local/share/nvm/v16.17.0/bin/npm
  npmPackages:
    @sveltejs/adapter-static: ^1.0.0 => 1.0.4
    @sveltejs/kit: ^1.0.0 => 1.1.1
    svelte: ^3.54.0 => 3.55.1
    vite: ^4.0.0 => 4.0.4

Severity
serious, but I can work around it
Additional Information
It seems that localization with a path prefix is not really possible unless one is willing to manually import a lang store and add a /{$lang}/ prefix to all internal links.
While some workarounds could be done as outlined above, the best solution would be official support for path prefixes. Be it with base href or other method of prepending the prefix to internal links.
On a related note it would be good to support something like a set of prerendering param values. E.g. I would like to render all my pages for lang in ['', 'en'] even if no internal link points to some of them. Something like the ['*'] in config.kit.prerender.entries, but with fixed param values. In the case of prefix param it might even be something like ['/*', '/en/*'] in the same config param.

Yeah, I think base: '/' should be allowed. By default we do want to support relative links when there's no base path, since it makes stuff more portable (see e.g. https://github.com/sveltejs/kit/issues/595 for motivating use cases), but allowing base: '/' would be a sensible way to opt out of that.
We could in theory treat the existence of a <base> element (either in src/app.html or the rendered page content) as a signal to use absolute asset paths, but at SSR time it would have to be a naive html.includes('<base') check which could yield false positives, so specifying the option is preferable I think. Would that suffice in your case?
Accounting for <base> when prerendering is a no-brainer, we should fix that.

Thanks for looking into this!
Well, on most cases with a present <base> the existing relative paths wouldn't work, so making asset paths absolute makes sense. But if you suspect you won't be able to avoid false positives, maybe just do if (html.includes('<base')) console.log("Warning: you have <base> so you might want to opt for '/' in the base or asset base")?
I suppose the best of both worlds would be to take the base href into account when creating the relative paths, but that's likely complicated with the current crawler.
Btw it might be useful to expose the function that generates the relative paths. Things like <base href="../../en/"> would help with path prefixing but still allow putting the project in a directory.

A warning is a good idea, I like that.
The <base href="../../en"> thing could be done in userland like so:
<base href="{'../'.repeat($page.url.pathname.split('/').length - 1)}/{lang}/">

A tiny bit clunky but arguably simple enough that we don't need to add it to the framework

I am also in need of base: '/'. I have a 404 page in my root folder that I serve when the requested file could not be found. This breaks when the requested file is not in the root folder, e.g. /non-existent/file, because ./_app/immutable/start-2d81a9c7.js now resolves to /non-existent/_app/immutable/start-2d81a9c7.js, which obviously does not exist.
This setup works fine with Next.js because it uses absolute paths by default: /_next/static/chunks/main-f11614d8aa7ee555.js.
Unrelated to OP's issue, but related to mine: SvelteKit renders +error.svelte when the requested file could not be found. Is there a way to make it render the beforementioned 404 page without doing the following inside +error.svelte?
...
{#if $page.status === 404}
	<svelte:component this={NotFound} />
{:else}
...

It is not a big deal but I thought I should ask.


Unnecessary download of ESP Wireless Drivers

I am working with esp32-wrover-kit:wapi configuration. Whenever I do "make menuconfig" and "make", the build system loads the ESP Wireless Drivers again and again irrelevant of their being already downloaded. This is time consuming and loads the network for no reason. I think it will be beneficial if a solution can be found for this issue.

Thanks for reporting this.  I'll be taking a look.

Whenever I do "make menuconfig" and "make"

Well, there is a clean_context in the way, that will delete what was downloaded.  I can fix this but it will break the context/clean_context symmetry. This is how I had it the very first time, download on context and delete on distclean, but put some extra effort to not break the symmetry (BTW, apps download packages are also only cleaned on distclean).
@xiaoxiang781216 do you have any inputs before I go ahead and do that?

@Ouss4 Thanks for your response. Please note; I use lvgl library as well (for example) , it is downloaded one time only after "make distclean" or in first configuration.

@Ouss4 Thanks for your response. Please note; I use lvgl library as well (for example) , it is downloaded one time only after "make distclean" or in first configuration.

Yes, this is what I said about "apps packages cleaned on distclean", it means they won't be deleted during a clean_context which menuconfig is doing.


Merged icon

Any reason we use the pull request icon colored purple instead of the merged icon ?
Note the proper merged icon is used everywhere (PR/Labels) but inbox/bookmarks
Sent with GitHawk

Oh that seems like a bug. Would love a fix!
Sent with GitHawk

I’ll take it
Sent with GitHawk

@rnystrom So the icon comes from an extension on NotificationType. NotificationType has PullRequest but doesn’t have the state (merged, closed..).
I could switch the extension to be on the model which has the state information but that wouldn’t work with Bookmark who’s model doesn’t have the state.
I could change NotificationType to have pullRequest and pullRequestMerged but that would mean changing v3notificationSubject since the NotificationType is made using the rawValue of V3NotificationSubject. This doesn’t feel like a great solution to me but let me know.
I could do a simple check right before getting the icon and see if the type is pull request and see if state is merged. I’d have to do some manual check by bookmark as well. This seems like a patch not a great fix.
I just want to make sure I approach it in the best way since things seem tight nit right now.
Sent with GitHawk

@rnystrom you want to keep the icon in the bookmark section as is and fix the merge icon in the inbox?
Sent with GitHawk


0.1 seconds (IMPORT FAILED): E:\pinokio\api\comfyui.pinokio.git\ComfyUI\custom_nodes\ComfyUI-Crystools

Hey, I have this issue when I run Pinokio with your nodes installed, the nodes look great and I would like to use them.
I noticed another issue the same as mine here and have updated Pillow to 10.x.x, and I still get the same error...
Cannot import E:\pinokio\api\comfyui.pinokio.git\ComfyUI\custom_nodes\ComfyUI-Crystools module for custom nodes: cannot import name 'IFD' from 'PIL.ExifTags' (E:\pinokio\api\comfyui.pinokio.git\ComfyUI\env\lib\site-packages\PIL\ExifTags.py)
I'm very new to python sorry - what information can I provide you with to help resolve this issue?
Many thanks

I use Pinokio too, to be honest the only way to fix this was to delete ComfyUI completely and reinstall it from scratch :(
It's not just Crystools nor Pinokio, it happens a lot with extension, dependencies break all the time.
Reinstalling the custom nodes or even deleting the env folder wasn't enough. Sorry

Yes, as @tetsuoo-online said (Thanks!), is "common" to reinstall all dependencies (even with a new venv)
You can use something like my scripts for installation in less than 10 minutes.
If the issue persists, please create a new one but using the form please; I need more data.

cyrstian, (https://gist.github.com/crystian/1ffd2e4d97433b419bf5b0f5acf4101a)
Thanks for the link to your scripts, sadly I don't understand enough to make use of them without descriptions.
This is the only issue I have with my comfy install at the moment.

Is it possible to look at a .log and find the specific conflict/ fail point your nodes have?
Are you suggesting I could fix this issue if I update all the dependencies for comfyUI? - If so how would I go about this?

Many thanks

yeap, the number 2 sure, there a lot of videos/information about that :) (reinstall python and comfyui)

thank you crystian,
If I run script number 2 will it reinstall all the cusatom nodes i currently use? Or is it a wipe?
Does it matter where I run script 2 from?
Sorry for being so dumb about this stuff, your help is much appreciated.
One more thing - where is the submission form plz? (sorry once again for being such a newb.)

I wonder if this further information, is what you require for your work, many thanks
[2024-01-10 00:11] [Crystools INFO] Crystools version: 1.3.4
[2024-01-10 00:11] Traceback (most recent call last):
File "E:\pinokio\api\comfyui.pinokio.git\ComfyUI\nodes.py", line 1814, in load_custom_node
module_spec.loader.exec_module(module)
File "", line 883, in exec_module
File "", line 241, in call_with_frames_removed
File "E:\pinokio\api\comfyui.pinokio.git\ComfyUI\custom_nodes\ComfyUI-Crystools_init.py", line 18, in
from .nodes.image import CImagePreviewFromImage, CImageLoadWithMetadata, CImageGetResolution, CImagePreviewFromMetadata,
File "E:\pinokio\api\comfyui.pinokio.git\ComfyUI\custom_nodes\ComfyUI-Crystools\nodes\image.py", line 11, in
from PIL.ExifTags import TAGS, GPSTAGS, IFD
ImportError: cannot import name 'IFD' from 'PIL.ExifTags' (E:\pinokio\api\comfyui.pinokio.git\ComfyUI\env\lib\site-packages\PIL\ExifTags.py)

No worries, you can try to install the dependency, but maybe you can break your python environment; you can try with:
pip install pillow==9.5.0

Thanks, crystian - it was the first thing i tried after reading the other issue from tetsuoo, sadly this did not work for me.
Is there any information I can send you that would help?


⚠ GLDDNS Server (ns2.glddns.com) has degraded performance

In b3e40b9, GLDDNS Server (ns2.glddns.com) (ns2.glddns.com) experienced degraded performance:

HTTP code: 200
Response time: 695 ms

Resolved: GLDDNS Server (ns2.glddns.com) performance has improved in e75aea9 after 6 minutes.


Yet more failing tests for optional parameter behavior around Arrays

This is another group of failing tests for parameter parsing. See also related issues / PRs:

#615 encounters similar behavior with defaults inside an optional Array

#895 tests some of the same behavior, but with optional params inside an optional Array

#723 encounters identical behavior (nested optional Array containing required params forces all elements of the array to have an optional value)

Creating this PR for discussion of the cases + any resolution I come up with.

I think a lot of this is fixed now, @al2o3cr care to rebase and retest and potentially PR there specs with passing?

Is there any possible to change some spec in this PR and not creating another PR?
I have prepared some fix for tests and a possible solution for problem.

I don't think you can tack your changes on top of someone else's PR, but git pull code from this PR, make your changes and make a new PR.

I believe https://github.com/ruby-grape/grape/commit/9a083581204a492ac7153cbd4d05e385f4a94793 closes this, thanks @ipkes.


Python Client for Roles and Policies

Let's prepare a mixin for interacting with Roles and Policies with the Python client, in case users want to use the API directly.
Do not only have the list, get etc, but also utility methods, such as updating a default role. It should wrap the following logic:
import requests
import json

# Get the ID
data_consumer = requests.get("http://localhost:8585/api/v1/roles/name/DataConsumer").json()
data_consumer

# Prepare the patch
patch = [{"op": "replace", "path": "/defaultRole", "value": "true"}]

res = requests.patch(
    "http://localhost:8585/api/v1/roles/b3296549-5e9c-42c6-b51d-94eee9c8c675",
    data=json.dumps(patch),
    headers={"Content-Type": "application/json-patch+json"}
)
res.json()

You can check the implementation of similar Mixins, such as the TableMixin class, and prepare the methods on a new role_mixin.py file.

@pmbrull I would like to work on this issue.
Thank you

Hi @YashasviChaurasia assigned the issue, thanks for contributing. You can reach out to us in Slack if you have any questions. I'd recommend reviewing the API docs (https://docs.open-metadata.org/swagger.html) and the ometa_api implementation for some examples. Thanks

I will work on this

closing by #10531


Script Version mistake in v1.1.18

Hi Dave,
in the latest script release 1.1.18 ... insiede I found:
scriptver="v1.1.17"
Ty,
Andrea

Thanks Andrea. I've fixed v1.1.18 now.


Reerror: error-resilient parsing (same as Merlin for OCaml)

This PR implements a new "parsing loop" that is more robust to errors and should improve the experience in an IDE.
The parser itself is not affected (we still have a declarative grammar), but we now have a slightly different interpretation in interactive use-cases.

Esy is missing the "fix" dependency. I don't know the proper way to update it.

I can add @opam/fix via a resolution in a package.json. I wonder if this is a bug with parsing the .opam file in esy.
cc @andreypopp

Been testing this out and it's so good.
@ulrikstrid - it wouldn't be a resolution, it would just be a regular dependency.
@let-def you just add "@opam/fix": "*" to the "dependencies" section of src/refmt/esy.json and ./esy.json (the later is just the development-time package configuration, the later is what will be released).
If you just add those fields, the CI should pass and we can release this puppy.

Woohoo! Closing now that it's merged (after @anmonteiro rebased it). Very excited to announce this one.


Proposal Stream.buffer(highWaterMark)

I propose Stream.buffer as a new method that mimics the functionality of the node stream writev function
const deleteKeys = new Writable({
	highWaterMark: 50,
	write: (key, encoding, callback) => {
		//handle 1 item in stream
	},
	writev: (keys, callback) => {
		//keys contains all keys that have been buffered since the last iteration started
	},
});

This fills a similar role to batch. the difference is that batch waits for the provided count to be pushed to it before it pushes the array downstream.
buffer would collect items until downstream requests another batch up to a limit
_(source)
  .buffer(50)
  .tap(batch => {
    //batch contains all items that have flown downstream while tap was processing its last iteration (limit 50)
  });

I am willing to write this assuming it is something the project is willing to accept.

This sounds reasonable, though I'd like call it something like batchUpTo(...) or batchMax(...).
buffer sounds more like collecting up to the highWaterMark, but still emitting one at a time to me. Essentially highWaterMark+write instead of highWaterMark+writev.

I can go with batchUpTo.
This whole thing depends on my correct understanding that for this pipeline
_(source)
  .batchUpTo(50)
  .tap(batch => _(somethingAsync))
  .mergeWithLimit(1)

tap would only request the next value from batchUpTo once mergeWithLimit finishes with the previous substream.

Yes. That should be the case.
BTW, I suggest you use flatMap(...) instead of .map(...).mergeWithLimit(1).
They are equivalent, but flatMap is clearer, and potentially more efficient.
On Thu, Oct 18, 2018 at 9:32 AM Stephen Dahl<EMAIL_ADDRESS>wrote:

I can go with batchUpTo.
This whole thing depends on my correct understanding that for this pipeline
_(source)
.batchUpTo(50)
.tap(batch => _(somethingAsync))
.mergeWithLimit(1)
tap would only request the next value from batchUpTo once mergeWithLimit
finishes with the previous substream.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/caolan/highland/issues/655#issuecomment-431032092,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AGIyZWv-nLNzKBM0Qm-j9xX8wIUJVuZWks5umJDqgaJpZM4XpLMH
.

Thanks for the tip. this library has too many useful things and it is easy to lose track of what tools are available.
I was looking through the source code to see if I could get started but it looks like I can't use consume as a base since I cant pull from upstream since I need to define my own pull function to pass downstream. can you recommend another function to base batchUpTo on or should I duplicate code and reimplement consume inside my method? If there is not another method to base my work on it seems that abstracting consume to a lower level method that consume and my function calls would be best but that it a bit invasive of a code change for my first expedition into this repo.

The trick is to use consume along with create. See the implementation for latest, which is probably the closest to what you're trying to do.
The difference is that with batchUpTo, you want to apply backpressure if the buffer is filled up, whereas limit fully decouples the backpressure for child stream from the source stream. One way to do this kind of backpressure coordination is like this
var batched = [];
var resumeSource;
var resumeDest;
var pushDest;
var waitingForBatch = false;

var source = this.consume(function (err, x, ignore, next) {
  resumeSource = next;

  if (err) {
    // pushDest the error
    // resumeDest and continue this stream
  } else if (x === nil) {
    // pushDest batched if not empty.
    // pushDest nil
  } else {
    batched.push(x);
    if (waitingForBatch) {
      waitingForBatch = false;
      // pushDest batch and clear it.
      // resumeDest
    }

    // Continue this stream if batched is not full.
    // This stream will implicitly pause if the batch *is* full
});

resumeSource = source.resume.bind(source);

return source.createChild(function (push, next) {
  resumeSource();
  pushDest = push;
  resumeDest = next;

  if (buffer.length > 0) {
    // push batch and clear it.
    // continue this stream.
  } else {
    // This part signifies that the source should push the next element as soon as it has it.
    waitingForBuffer = true;
  }
});

You can also use pull and createChild. It'll probably look very similar, except instead of calling resumeSource, you call pull.

finally got around to working on this. I decided that this fit best as part of .batch with the signature .batch(min, max) and default max to min so that you can still get the same behavior if you call it with 1 param. but I am getting an infinite loop on tests and my manual test quits after the first batch. Latest didn't seem to call next in its consume so I didn't it mine but that may be what is stopping it.
I was also having trouble seeing where to extend the unit tests. I noticed that nodeunit is not being maintained anymore. is there a plan to switch to mocha or jest for the new version? I have worked with both and jest seems better to me.

have it working now in my own test but still getting an infinite loop and stack overflow when running grunt test
let _ = require('./lib/index');

let stream = _();
stream
    .tap(b => console.log(b))
    .batchWithTimeOrCount(1000, 5, 7)
    .tap(b => console.log(b))
    .collect()
    .tap(b => console.log(b))
    .toPromise(Promise)

async function waitRandom() {
    return new Promise((res) => {
        let deley = Math.ceil(Math.random() * Math.random() * 1000);
        setTimeout(res, deley);
    })
}

(async () => {
    let i = 0
    while(true){
        await waitRandom();
        stream.write(i++);
        if(i > 50){
            stream.end();
            break;
        }
    }

    await stream;
})()

I'm not sure why you see an infinite loop, but I left some comments in your commit.
The other problem is that you can't add arguments to transforms. They get exported as a top-level transform that is curried, and adding additional arguments breaks that API. That is, you can run code like _.batchWithTimeOrCount(1000)(2)(stream).
I think merging it into batchWithTimeOrCount make sense, but we need to come up with another name. Maybe batchWithTimeOrCountRange? Not great, I know, but this is how things are.


Renamed all README.txt files to README.md

This was an open Issue so I did it.
Signed-off-by: Davide<EMAIL_ADDRESS>

Hi @unixb0y,
Thanks for sending this pull request! I'm merging this now.
Once this has been merged, it would be good to go through each file and make sure that it is formatted correctly now. Would you have time to do that?
@mithro

@mithro I'm pretty sure the txt files were plain text so the markdown version should look exactly the same and they're most probably "formatted correctly" as well.
Or do you mean adding the markdown tags that make headers appear bold / larger etc.?

Actually, you're right - markdown files e.g. don't recognize a line break if there aren't 2 spaces at the end of the line and this sort of stuff. Working on it now.


Distribute Data Prepper Docker image with JDK 17

Is your feature request related to a problem? Please describe.
The Data Prepper Docker image should include Corretto JDK 17 since it is an LTS version. The current Data Prepper Docker image includes Corretto 15. The tar.gz archive with JDK is also using JDK 15.
Describe the solution you'd like
Distribute Data Prepper Docker images with Amazon Corretto 11.
Describe alternatives you've considered (Optional)
Data Prepper could include AdoptOpenJDK 17 instead.
Data Prepper could use JDK 11 which is also LTS. However, we have found that simply updating to JDK 17 provides a performance improvement.
Tasks

[ ] Update the Docker image
[ ] Update the JDK which is installed in the tar.gz archive file
[ ] Update example Docker images

This is probably something that should be worked after #665. At that point, the Gradle build and the Docker image will be using the same Java version.

OpenSearch distributes with Temurin for the JDK. Absent a specific need to support Corretto, I suggest that we also distribute with Temurin. This is a slight change from the original proposal.
@oeyh

Temurin plans to support Java 17 through at least Oct 2027. Corretto has an end of life of Oct 2029. Both dates are sufficiently far in the future to where I don't see any benefit there.
https://adoptium.net/support/
https://aws.amazon.com/corretto/faqs/


image_transport_plugins: 1.9.4-0 in 'kinetic/distribution.yaml' [bloom]

Increasing version of package(s) in repository image_transport_plugins to 1.9.4-0:

upstream repository: https://github.com/ros-perception/image_transport_plugins.git
release repository: https://github.com/ros-gbp/image_transport_plugins-release.git
distro file: kinetic/distribution.yaml
bloom version: 0.5.22
previous version for package: 1.9.3-0

compressed_depth_image_transport
* address gcc6 build error and tune
  With gcc6, compiling fails with stdlib.h: No such file or directory,
  as including '-isystem /usr/include' breaks with gcc6, cf.,
  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70129.
  This commit addresses this issue for this package in the same way
  it was addressed in various other ROS packages. A list of related
  commits and pull requests is at:
  https://github.com/ros/rosdistro/issues/12783
  Signed-off-by: Lukas Bulwahn<EMAIL_ADDRESS>* Fix a missing return statement and add -Wall -Werror.
* Contributors: Lukas Bulwahn, Mac Mason

compressed_image_transport
* address gcc6 build error and tune
  With gcc6, compiling fails with stdlib.h: No such file or directory,
  as including '-isystem /usr/include' breaks with gcc6, cf.,
  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70129.
  This commit addresses this issue for this package in the same way
  it was addressed in various other ROS packages. A list of related
  commits and pull requests is at:
  https://github.com/ros/rosdistro/issues/12783
  Signed-off-by: Lukas Bulwahn<EMAIL_ADDRESS>* Contributors: Lukas Bulwahn

image_transport_plugins

No changes

theora_image_transport
* address gcc6 build error and tune
  With gcc6, compiling fails with stdlib.h: No such file or directory,
  as including '-isystem /usr/include' breaks with gcc6, cf.,
  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70129.
  This commit addresses this issue for this package in the same way
  it was addressed in various other ROS packages. A list of related
  commits and pull requests is at:
  https://github.com/ros/rosdistro/issues/12783
  Signed-off-by: Lukas Bulwahn<EMAIL_ADDRESS>* Contributors: Lukas Bulwahn

This new release fails on the i386 platforms: http://repositories.ros.org/status_page/ros_kinetic_default.html?q=REGRESSION
Please release a fixed version since this is blocking the sync of Kinetic.


[APPLE] Input coordinate not accurate to output

Seems like it also affects the base main script - will submit an issue whenever I can.


support optLock

https://developer.apple.com/library/mac/documentation/DataManagement/Conceptual/IncrementalStorePG/ImplementationStrategy/ImplementationStrategy.html#//apple_ref/doc/uid/TP40010706-CH2-SW16
We currently have an oops()

Support is unnecessary in this type of update model.


Remove version: Rainmeter.Rainmeter version 4.5.2

This version is older than what has been set in max-versions-to-keep by the publisher.
Microsoft Reviewers: Open in CodeFlow

URL: https://github.com/rainmeter/rainmeter/releases/download/v<IP_ADDRESS>41/Rainmeter-4.5.2.exe
OK
(Automated message - build 917)


spec/compiler: Inconsistency between specification and implementation related to struct type identity when struct contains embedded alias on unnamed type

Go version
go version go1.23.0 linux/amd64
Output of go env in your module/workspace:
GO111MODULE=''
GOARCH='amd64'
GOBIN=''
GOCACHE='/home/leabit/.cache/go-build'
GOENV='/home/leabit/.config/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='amd64'
GOHOSTOS='linux'
GOINSECURE=''
GOMODCACHE='/home/leabit/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='linux'
GOPATH='/home/leabit/go'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
<EMAIL_ADDRESS>GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='auto'
<EMAIL_ADDRESS>GOVCS=''
GOVERSION='go1.23.0'
GODEBUG=''
GOTELEMETRY='local'
GOTELEMETRYDIR='/home/leabit/.config/go/telemetry'
GCCGO='gccgo'
GOAMD64='v1'
AR='ar'
CC='gcc'
CXX='g++'
CGO_ENABLED='1'
GOMOD='/home/leabit/goprojects/exeexe/go.mod'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build1849554432=/tmp/go-build -gno-record-gcc-switches'

What did you do?
Golang specification for type identity states the following for the struct types:

Two struct types are identical if they have the same sequence of fields, and if corresponding fields have the same names, and identical types, and identical tags. Non-exported field names from different packages are always different.

Thus, it has 4 requirements:

same sequence of fields
same corresponding names
identical types of corresponding fields
identical tags of corresponding fields

However, there are cases related to embedding aliases of unnamed types where, despite meeting all four previous requirements, the compiler still fails to compile.
I will explain the problem through few examples.  The following notes holds for all examples:

three packages are used: pac1, pac2 and main
declared alias types in pac and pac2 are unnamed types struct{} (thus, they are identical)
struct tags aren't used, so they are ignored

(1) This example successfully compiles (as expected).  M1 and M2 have the same sequence of fields. Names, even thought not explicitly defined, are indirectly given by embedding and thus they are same (MyType1). Types of the fields (field MyType1) are also same (struct{}).
pac1:
package pac1

type MyType1 = struct{}

pac2:
package pac2

type MyType1 = struct{}

main:
package main

import (
	"exeexe/pac1"
	"exeexe/pac2"
)

type M1 struct {
	pac1.MyType1
}

type M2 struct {
	pac2.MyType1
}

func main() {
	_ = M2(M1{})
}

(2) In this example MyType1 = struct{} is replaced with MyType2 = struct{} in pac2. Also, pac2.MyType2 is now embedded in M2 (instead of pac2.MyType1) in main package. As expected, it doesn't compile. Even thought the types of the fields are the same, the names are not (MyType1 != MyType2), thus requirement 2 doesn't hold.
pac1:
package pac1

type MyType1 = struct{}

pac2:
package pac2

type MyType2 = struct{}

main:
package main

import (
	"exeexe/pac1"
	"exeexe/pac2"
)

type M1 struct {
	pac1.MyType1
}

type M2 struct {
	pac2.MyType2
}

func main() {
	_ = M2(M1{})
}

(3) This example shows the actual problem. The only difference compared to the previous example is that embedded field (pac2.MyType2) is now replaced by non-embedded (ordinary) field with the name MyType1 (type is the same). Since specification for type identity doesn't make a distinct between embedded and ordinary field in the struct this should be valid and compile (all requirements are met).
pac1:
package pac1

type MyType1 = struct{}

pac2:
package pac2

type MyType2 = struct{}

main:
package main

import (
	"exeexe/pac1"
	"exeexe/pac2"
)

type M1 struct {
	pac1.MyType1
}

type M2 struct {
	MyType1 pac2.MyType2
}

func main() {
	_ = M2(M1{})
}

(4) This example just shows that even when MyType1 pac2.MyType2 is replaced with MyType1 pac1.MyType1 in M2 (so just the name is added), it still doesn't compile.
pac1:
package pac1

type MyType1 = struct{}

pac2:
package pac2

type MyType2 = struct{}

main:
package main

import (
	"exeexe/pac1"
)

type M1 struct {
	pac1.MyType1
}

type M2 struct {
	MyType1 pac1.MyType1
}

func main() {
	_ = M2(M1{})
}

What did you see happen?
Inconsistency between specification and implementation
What did you expect to see?
Since I am following specification, I expect examples (3) and (4) to compile, or to modify the specification to address the difference.

Related Issues and Documentation

cmd/compile: Embedded field names are not tracked correctly with aliased types #28655 (closed)
spec: incorrect requirement for the embedded field #69460 (closed)
Multiple embedded struct fields can cause collisions #24235 (closed)
spec: type identity section not fully updated for 1.9 #22202 (closed)
cmd/compile: cannot compile with alias type used in multiple files #50925 (closed)
spec: Interplay between type conversions and embedded structs is not clear. #53975
internal compile error caused by function type alias #36419 (closed)
proposal: spec: treat blank struct fields as having the same names for type identity #21967 (closed)
cmd/cgo: types regression for anonymous structs #38408 (closed)
gccgo: internal compiler error for (invalid) program using interface aliases #25302 (closed)

(Emoji vote if this was helpful or unhelpful; more detailed feedback welcome in this discussion.)

A clever finding.
BTW, it looks your code doesn't prove type identity, but conversion rules. Though I believe that your point is described well and it applies to conversions too.

The code is used to prove type identity:
package main

type MyType1 = struct{}

type M1 = struct {
	MyType1
}

type M2 = struct {
	MyType1 MyType1
}

func main() {
	indentify := any(M1{}) == any(M2{})
	println(indentify) // false
}

@zigo101 Right, I just used conversion as a quick way to check type identity equality. According to specification if two types are identical, values of these types can be assigned to each other. Further, if they are assignable, conversion is possible.

@griesemer @ianlancetaylor

As I understand the spec, in case of (3) and (4), M1 and M2 does not have the same sequence of fields, because MyType1 of M1 is an embedded field, while MyType1 of M2 is not.

BTW, if I use a @zigo101 way of checking type identity, then even the first example fails (it prints false). However, the conversion is successful (as already stated).
@cuonglm Specification doesn't make a distinction between embedded and ordinary fields. From spec:

Promoted fields act like ordinary fields of a struct except that they cannot be used as field names in composite literals of the struct.

Even if you are right, then the first example with indentify := any(M1{}) == any(M2{}) needs to prints true.

The problem shown in the first example should be implementation bug in my understanding.

Even if you are right, then the first example with indentify := any(M1{}) == any(M2{}) must print true.

I don't get it. You can't do M1{} == M2{} because they are distinced types, thus any(M1{}) == any(M2{}) should print false IMHO.

Specification doesn't make a distinction between embedded and ordinary fields. From spec:

Don't that your quote show the difference? "act like" does not mean they are the same fields, causing M1 and M2 don't have the same sequence of fields

Aha, @cuonglm  is right here. M1 and M2 and not alias declarations. So they are distinct types. No problem is shown in example 1.

Then how is conversion possible?

Then how is conversion possible?

It's the same manner with converting from a float to a int, following a set of rules, which you can read here: https://go.dev/ref/spec#Conversions

Because in example 1, M1 and M2 shares the same underlying type.
The point (inaccuracy in spec) mentioned by @leabit can still be demonstrated in this example: https://github.com/golang/go/issues/69472#issuecomment-2351027492

Because in example 1, M1 and M2 shares the same underlying type.
The point (inaccuracy in spec) mentioned by @leabit can still be demonstrated in this example: #69472 (comment)

As I explained above, M1 and M2 don't have the same sequence of fields. If you laid them out literally, M1 is:
struct{main.MyType1}

while M2 is:
struct{MyType1 main.MyType1}

They don't satisfy the type identity definition in spec:

two types are identical if their underlying type literals are structurally equivalent; that is, they have the same literal structure and corresponding components have identical types

Okay, I think it is indeed some nitpicking.

A named type is always different from any other type. Otherwise, two types are identical if their underlying type literals are structurally equivalent; that is, they have the same literal structure and corresponding components have identical types. In detail:

The final in detail means re-explaining it in detail. So the above quotation will not overlap the following detailed explanations.

@cuonglm Yes, you are right about the first example (my bad, I forgot they are named in main, not aliases like in pac1 and pac2). any(M1{}) == any(M2{}) should prints false since they are two different types (they are named). Also, they can convert to each following the next rules from the spec:

ignoring struct tags (see below), x's type and T are not type parameters but have identical underlying types.

However, I think the inconsistency still exists for the rest (examples 3 and 4).
If you look at it that way, then the following should print false since struct {pac1.MyType1} is structurally different than struct {pac2.MyType1}:
pac1:
package pac1

type MyType1 = struct{}

pac2:
package pac2

type MyType1 = struct{}

main:
package main
import (
"exeexe/pac1"
"exeexe/pac2"
)
type M1 = struct {
pac1.MyType1
}
type M2 = struct {
pac2.MyType1
}
func main() {
indentify := any(M1{}) == any(M2{})
println(indentify)
}

If you look at it that way, then the following should print false since struct {pac1.MyType1} is structurally different than struct {pac2.MyType1}

How could they be different?
These fields are both embedded, have the same name MyType1, and have the same underlying type struct{}.
The package pac1 and pac2 does not play any role in this identity checking because MyType1 is a exported field.

@leabit In you last example, pac1.MyType1 and pac2.MyType1 denote the same type: struct{}. So M1 and M2 are also the same type.
The core of the issue is whether or not field sequence is defined clearly. I re-read the struct section of spec and am inclined to believe its definition is okay now. https://go.dev/ref/spec#Struct_types

@cuonglm  Well, the specification treats the following two as the same in all segments: struct{SomeType} is same as struct{SomeType SomeType}. That's how I understood and interpreted "act like" statement for the embedded fields (I assume a lot of people would too; It looks like @zigo101 also did). Why would we consider ordinary and embedded fields different, and not embedded field from the different packages (pac1 and pac2). That was the point of my last example (probably not the best).
Just to be clear, I fully understand what you are trying to say and you might be right (we are in the same team :D ), but something is wrong here. and I would say that's the ambiguity and vagueness of the specification (or maybe implementation).
If you are right, it must be clearly stated in the specification and your "As I understand the spec..." says that it is not.

@zigo101 It states:

A struct is a sequence of named elements, called fields, each of which has a name and a type. Field names may be specified explicitly (IdentifierList) or implicitly (EmbeddedField).

I don't see any difference here between embedded and ordinary fields. A struct is a sequence of named elements (field sequence), where name can be implicit (embedded field) or explicit.

I agree it is not very clear. Maybe the wording can be improved.

@zigo101 Yes, or implement it in a way it doesn't make a difference between embedded and ordinary field (as specification states, at how I interpret it).
Anyway, something must be done, whether it involves fixing the compiler or updating the specification. At least, we can all agree that the problem exists.

or implement it in a way it doesn't make a difference between embedded and ordinary field

Then the "embedding field" feature will totally lost its meaningfulness. :D

@zigo101 I meant, in this case. Not generally (not like losing promotion of methods).

Promoted fields/methods are intrinsic characters of a type. If two types have different promoted fields/methods, then they must be two distinct types.

I agree, but I am not sure how it can make a problem if the embedded fields are considered in as same way as an ordinary fields for type identity (as the specification states).

@zigo101 You are talking about the following?
package main

type MyType struct {
	Field int
}

func (MyType) Method1() {}

type M1 = struct {
	MyType
}

type M2 = struct {
	MyType MyType
}

func main() {
	indentify := any(M1{}) == any(M2{})
	println(indentify)
}

Both M1 and M2 are actually struct {MyType MyType}, but M2 doesn't have Method1 in its method set and Field as a field. So logically they can't be considered as the same types. Right.
I assume, then the conclusion is that the specification is not good since according to it, this two types are the same.

The spec intends to view M1 and M2 in your last comment as two distinct types. The current descriptions might be not perfect but I think they are acceptable.
For this specific case in 3rd and 4th examples of your first comment, a.k.a. the case in which the embedding fields don't provide promoted fields/methods, it might be okay to treat the containing unnamed struct types as identical, but I don't think it is worth making this difference from embedding fields providing promoted fields/methods.

It's not clear to me what this issue has to do with alias or unnamed types: if I understand correctly, the issue is about whether two struct fields are identical if one of them is embedded and the other one is not but they appear in the same "spot" in the struct, have the same name, same type, and same tag.
It is the intent of the spec that two corresponding fields are not identical if one of them is embedded and the other one is not. I agree that this doesn't seem to be spelled out explicitly. A suitable example or perhaps some prose fine tuning should address that.
The implementation is very clear though: for two structs to be identical, two otherwise matching fields must be both embedded or both not embedded.

@griesemer

It's not clear to me what this issue has to do with alias or unnamed types

Named types are different without any further check, so issue only makes sense when unnamed types are used.
First example would fail to compile in case pac1.MyType1 and pac2.MyType2 are defined as follows:
pac1:
package pac1

type MyType1 struct{} // defined (named) type

pac2:
package pac2

type MyType1 struct{} // defined (named) type

main:
package main

import (
	"exeexe/pac1"
	"exeexe/pac2"
)

type M1 struct {
	pac1.MyType1
}

type M2 struct {
	pac2.MyType1
}

func main() {
	_ = M2(M1{})
}

Types of the field in M1 in M2 are not the same (unlike in case of unnamed types where they are and the program successfully compiles).

if I understand correctly, the issue is about whether two struct fields are identical if one of them is embedded and the other one is not but they appear in the same "spot" in the struct, have the same name, same type, and same tag.

Yes, you did understand it correctly.

Thanks, @leabit for confirming. Please comment on the CL if you believe it is not sufficient, thanks.


Will you consider supporting the Edge webstore?

The name of this module includes “Chrome Webstore”, so that’s the only store it’s meant to support


New program added

Related Issues

Add more OPEN SOURCE programs and events

Proposed Changes

Add MLH Open Source Tracks in programs
Solving issue #69

Screenshots

Original
Updated

Hey, @prakhar728 you need to add it only once the month the program is going to start!
Update the same and I will merge the PR

Hey, @prakhar728 you need to add it only once the month the program is going to start! Update the same and I will merge the PR

Can you checkout now?

Hey, @prakhar728 you need to add it only once the month the program is going to start! Update the same and I will merge the PR

Can you checkout now?

I meant add just in one month
Not all 3 is required

Hey, @prakhar728 you need to add it only once the month the program is going to start! Update the same and I will merge the PR

Can you checkout now?

I meant add just in one month Not all 3 is required

Actually it runs thrice a year. So I added 3 times. If you want I can write only once or change the names of the batch(spring,summer, and fall)

Hey, @prakhar728 you need to add it only once the month the program is going to start! Update the same and I will merge the PR

Can you checkout now?

I meant add just in one month Not all 3 is required

Actually it runs thrice a year. So I added 3 times. If you want I can write only once or change the names of the batch(spring,summer, and fall)

But you mentioned spring batch in all the 3

Hey, @prakhar728 you need to add it only once the month the program is going to start! Update the same and I will merge the PR

Can you checkout now?

I meant add just in one month Not all 3 is required

Actually it runs thrice a year. So I added 3 times. If you want I can write only once or change the names of the batch(spring,summer, and fall)

But you mentioned spring batch in all the 3

Now? It must be fixed


(maint) release notes: add contributors for recent 5.2 releases

Might be worth spot checking the lists to make sure I did what I think I did.

CLA signed by all contributors.


add Support for events timestamp

When I track new events I need to pass the timestamp when the event was generated.
The customer.io api  say's I can send the timestamp through a value with the name timestamp, but this library sends everything through "data", disabling the capacity to send a timestamp.

Opened the PR #8 with a proposal to enable timestamp support


Pyitlib elimination

Package conflict
Pyitlib requires scikit-learn lower than 1.0.0.
The problem is that old versions have troubles with Cython on some machines and we decided to move pyitlib into external and import it as a build-in package bypassing pip installation. It turns out that part we need contains the only one object from sklearn - LabelEncoder, which is stable across mostly versions.
Tests imrovements
Sometimes pickle compression works and a test returns error. This case was covered.
Code formatted to black style as well.

Codecov Report

Merging #70 (2580ede) into master (7e11513) will decrease coverage by 0.63%.
The diff coverage is 33.33%.

@@            Coverage Diff             @@
##           master      #70      +/-   ##
==========================================
- Coverage   65.11%   64.48%   -0.63%
==========================================
  Files          32       32
  Lines        2250     2250
==========================================
- Hits         1465     1451      -14
- Misses        785      799      +14

Files Changed
Coverage Δ

bamt/networks/base.py
48.62% <33.33%> (ø)

... and 6 files with indirect coverage changes


Feature Request: View complex np.ndarrays

It'd be great if you could view the real and imaginary components of a complex np.ndarray separately.

Would you like to provide me with a python code to do it? It would help me to create a release faster (otherwise, it's not in a priority for me, as I'm busy with other stuff)
I prefer to save it as a single image, maybe by concatenating the images (e.g. with np.hstack).
But if you prefer it as multiple separated images, then please make a function with this signature:
from pathlib import Path

def preprocess_complex(img: np.ndarray, path: Path) -> Iterable[Tuple[np.ndarray, Path]]:
    ...


xgroup: Support MKSTREAM and add BusyGroup const

https://redis.io/commands/xgroup CREATE supports an undocumented(https://github.com/antirez/redis-doc/issues/1007) MKSTREAM option.
Added support for it as a boolean parameter to the XGroupCreate method.
Added redis.BusyGroup const, which represents the error returned by XGROUP CREATE if the group already exists(see https://redis.io/commands/xgroup docs)

Note, that mkStream is a breaking API change, so maybe adding a XGroupCreateMkStream is a better option, which is also more consistent with ZAddNX and similar.

Yes, let's add XGroupCreateMkStream - I think it is better API and is backwards compatible.

Lack of BusyGroup variable means that the clients need to do
if err.Error() == "BUSYGROUP Consumer Group name already exists" {
	// handle
}

which is ugly

Yes, but

you still can have that var in your code
go-redis does not try to maintain the list of errors return by Redis


Support for hideWhenCreating etc.

hideWhenCreating methods on the fields are currently not supported for fields under a polymorphic field.

And also default values for the visiblity set for fields are ignored:
    public $showOnDetail = false;
    public $showOnCreation = false;
    public $showOnUpdate = false;


feat: updated packages

to official released versions

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

npm package (@latest dist-tag)
GitHub release

Your semantic-release bot :package::rocket:


feat(prosody): use prosody ingress instead proxy of web container

As discussed here. A review by a community member would be very appreciated.
@gkapkowski WDYT?

@sapkra I can't test this right now but it looks good for me.

Will this ever be merged? This makes xmpp-bind work for us.

Hello @philipp-durrer-jarowa!
Since this is a values.yaml-only change, you can replicate it as-is to your own installation without modifying the chart. I'm not sure that enabling ingress for a single service by default is desirable, as it can lead to confusion


[BUG] scary search result "Your connection is not private" page

Current behavior

Search results page linked to HTTPS versions of pages. Results in warning page. SCARY!

Expected behavior

no warning page. linked to HTTP version

Screenshots
Current
http://search.consumerfinance.gov/search?utf8=✓&affiliate=cfpb&query=fall+consumer+advisory+board
https://www.consumerfinance.gov/about-us/advisory-groups/consumer-advisory-board/

I'll reach out to @ErikSArnold at GSA.

@rosskarchner This can be closed, right?

Yes!


Hide-text text-indent firefox problem

We have a problem with de hide-text mixin, text-indext: 101% is not enough.
To fix the problem i've changed text-indent to 110%...
Only if firefox

Can you please provide some context or paste the code you’re using hide-text with? Also, what version of Bourbon are you using?

Closing due to lack of response.


Laravel 11 Compatibility

Hi @mpociot !
Thanks for this awesome package!
Since Laravel 11 came out just a couple days ago, I was wondering if there are any plans on supporting it?
Thanks,
David

The package is already usable with Laravel 11 since it does not have any explicit dependencies on the Laravel or Illuminate versions. 🙂


Remove console.log() call from data-test.js

Current coverage is 82.03% (diff: 100%)

Merging #467 into master will increase coverage by 0.68%

@@             master       #467   diff @@
==========================================
  Files            18         18
  Lines          2069       2165    +96
  Methods         371        371
  Messages          0          0
  Branches        181        181
==========================================
+ Hits           1683       1776    +93
- Misses          386        389     +3
  Partials          0          0

Powered by Codecov. Last update efaa4f1...353d52d


NAVERCloudCorp.NAVERWORKSDrive version <IP_ADDRESS>2

Checklist for Pull Requests

[x] Have you signed the Contributor License Agreement?
[x] Is there a linked Issue?

Manifests

[x] Have you checked that there aren't other open pull requests for the same manifest update/change?
[x] This PR only modifies one (1) manifest
[x] Have you validated your manifest locally with winget validate --manifest <path>?

[x] Does your manifest conform to the 1.6 schema?

Note: <path> is the directory's name containing the manifest you're submitting.

Verify:

Verify:


Wrong shell in /etc/passwd for isNormalUser = false

Issue description
Users with isNormalUser = false have the shell /nix/store/6xfli9pns0cjwb1fi8kh21fd33jbrwq4-shadow-4.2.1 but should have something like /run/current-system/sw/bin/nologin.  One result of this issue is that these users can't create forward-only SSH sessions.
Steps to reproduce
grep shadow /etc/passwd
Technical details
clever on #nixos found commit 31c158ad453547993095b9425a60697738fdac5d which introduced the issue.

System: 16.09.git.453086a (Flounder)
Nix version: nix-env (Nix) 1.11.2
Nixpkgs version: 453086a15fc0db0c2bc17d98350b0632551cb0fe

cc @zimbatm

I just found out that the pkgs.shadow program doesn't export the shellPath passthrough for some reason.


Fix several playlist create / edit API by using request body

Changes
Some playlist API are requiring passing data in the body instead of query parameters. (creation and edit for example)
Some others (reordering, adding tracks) are supporting both methods but it's cleaner to use the body.
Status

[X] These changes have been tested and documented properly.
[X] This pull request introduces some breaking changes.

The following changes has been updated in the v9.2.2.
Thanks for your contribution!


Populate Drizzle schema with the database tables

After analyzing application needs and how we intend to build our service layer, we have settled for the following structure for the database:
BEGIN;

CREATE TABLE IF NOT EXISTS public.company
(
    id uuid NOT NULL DEFAULT gen_random_uuid(),
    name character varying COLLATE pg_catalog."default" NOT NULL,
    cnpj character varying(14) COLLATE pg_catalog."default",
    cpf character varying(11) COLLATE pg_catalog."default",
    condominium_address character varying COLLATE pg_catalog."default",
    CONSTRAINT company_pkey PRIMARY KEY (id)
);

CREATE TABLE IF NOT EXISTS public.condominium
(
    id uuid NOT NULL DEFAULT gen_random_uuid(),
    name character varying COLLATE pg_catalog."default" NOT NULL,
    cnpj character varying(14) COLLATE pg_catalog."default" NOT NULL,
    address character varying COLLATE pg_catalog."default" NOT NULL,
    neighborhood character varying COLLATE pg_catalog."default" NOT NULL,
    city character varying COLLATE pg_catalog."default" NOT NULL,
    uf character varying(2) COLLATE pg_catalog."default" NOT NULL,
    cep character varying(8) COLLATE pg_catalog."default" NOT NULL,
    CONSTRAINT condominium_pkey PRIMARY KEY (id)
);

CREATE TABLE IF NOT EXISTS public.department
(
    id uuid NOT NULL DEFAULT gen_random_uuid(),
    name character varying COLLATE pg_catalog."default" NOT NULL,
    company_id uuid NOT NULL,
    CONSTRAINT department_pkey PRIMARY KEY (id)
);

CREATE TABLE IF NOT EXISTS public.employee
(
    id uuid NOT NULL DEFAULT gen_random_uuid(),
    name character varying COLLATE pg_catalog."default" NOT NULL,
    email character varying COLLATE pg_catalog."default",
    phone_number character varying(14) COLLATE pg_catalog."default" NOT NULL,
    company_id uuid NOT NULL,
    department_id uuid NOT NULL,
    CONSTRAINT employee_pkey PRIMARY KEY (id)
);

CREATE TABLE IF NOT EXISTS public.scheduling
(
    id uuid NOT NULL DEFAULT gen_random_uuid(),
    start_time timestamp without time zone NOT NULL,
    end_time timestamp without time zone NOT NULL,
    visitor_name character varying COLLATE pg_catalog."default" NOT NULL,
    subject character varying COLLATE pg_catalog."default",
    vehicle_type character varying COLLATE pg_catalog."default" NOT NULL,
    vehicle_license_plate character varying COLLATE pg_catalog."default" NOT NULL,
    "condominiumId" uuid NOT NULL,
    company_id uuid NOT NULL,
    CONSTRAINT scheduling_pkey PRIMARY KEY (id)
);

CREATE TABLE IF NOT EXISTS public."user"
(
    id uuid NOT NULL DEFAULT gen_random_uuid(),
    email character varying COLLATE pg_catalog."default" NOT NULL,
    user_type user_type NOT NULL,
    condominium_id uuid NOT NULL,
    employee_id uuid NOT NULL,
    CONSTRAINT user_pkey PRIMARY KEY (id)
);

CREATE TABLE IF NOT EXISTS public.user_key
(
    id character varying COLLATE pg_catalog."default" NOT NULL,
    user_id uuid NOT NULL,
    hashed_password character varying COLLATE pg_catalog."default",
    CONSTRAINT user_key_pkey PRIMARY KEY (id)
);

CREATE TABLE IF NOT EXISTS public.user_session
(
    id character varying COLLATE pg_catalog."default" NOT NULL,
    user_id uuid NOT NULL,
    active_expires bigint NOT NULL,
    idle_expires bigint NOT NULL,
    CONSTRAINT user_session_pkey PRIMARY KEY (id)
);

ALTER TABLE IF EXISTS public.department
    ADD CONSTRAINT department_company_id_company_id_fk FOREIGN KEY (company_id)
    REFERENCES public.company (id) MATCH SIMPLE
    ON UPDATE NO ACTION
    ON DELETE NO ACTION;

ALTER TABLE IF EXISTS public.employee
    ADD CONSTRAINT employee_company_id_company_id_fk FOREIGN KEY (company_id)
    REFERENCES public.company (id) MATCH SIMPLE
    ON UPDATE NO ACTION
    ON DELETE NO ACTION;

ALTER TABLE IF EXISTS public.employee
    ADD CONSTRAINT employee_department_id_department_id_fk FOREIGN KEY (department_id)
    REFERENCES public.department (id) MATCH SIMPLE
    ON UPDATE NO ACTION
    ON DELETE NO ACTION;

ALTER TABLE IF EXISTS public.scheduling
    ADD CONSTRAINT scheduling_company_id_company_id_fk FOREIGN KEY (company_id)
    REFERENCES public.company (id) MATCH SIMPLE
    ON UPDATE NO ACTION
    ON DELETE NO ACTION;

ALTER TABLE IF EXISTS public.scheduling
    ADD CONSTRAINT "scheduling_condominiumId_condominium_id_fk" FOREIGN KEY ("condominiumId")
    REFERENCES public.condominium (id) MATCH SIMPLE
    ON UPDATE NO ACTION
    ON DELETE NO ACTION;

ALTER TABLE IF EXISTS public."user"
    ADD CONSTRAINT user_condominium_id_condominium_id_fk FOREIGN KEY (condominium_id)
    REFERENCES public.condominium (id) MATCH SIMPLE
    ON UPDATE NO ACTION
    ON DELETE NO ACTION;

ALTER TABLE IF EXISTS public."user"
    ADD CONSTRAINT user_employee_id_employee_id_fk FOREIGN KEY (employee_id)
    REFERENCES public.employee (id) MATCH SIMPLE
    ON UPDATE NO ACTION
    ON DELETE NO ACTION;

ALTER TABLE IF EXISTS public.user_key
    ADD CONSTRAINT user_key_user_id_user_id_fk FOREIGN KEY (user_id)
    REFERENCES public."user" (id) MATCH SIMPLE
    ON UPDATE NO ACTION
    ON DELETE NO ACTION;

ALTER TABLE IF EXISTS public.user_session
    ADD CONSTRAINT user_session_user_id_user_id_fk FOREIGN KEY (user_id)
    REFERENCES public."user" (id) MATCH SIMPLE
    ON UPDATE NO ACTION
    ON DELETE NO ACTION;

END;

We need that schema available on the schema.ts file under @open-visit/database in such a way that we can use to query data from the database trough Drizzle in a typesafe way. This can be achieved by either database introspection, or by building the schema manually and performing a database migration using drizzle-kit generate:pg.
Useful resources:

How Drizzle schemas are converted to SQL: https://orm.drizzle.team/docs/schemas
The available column types that are directly mapped to the column types available on Postgres databases: https://orm.drizzle.team/docs/column-types/pg
Declaring column indexes and constraints: https://orm.drizzle.team/docs/indexes-constraints
Using the push feature to directly push schemas declared in Drizzle to an existing database https://orm.drizzle.team/kit-docs/overview#prototyping-with-db-push
"Introspecting" schema from an existing database: https://orm.drizzle.team/kit-docs/overview#prototyping-with-db-push

Just to be clear on what directions can be taken here: our schema is already defined. It has been decided between me and @thtomazella and has all the tables and columns we need to server our application needs.
The only thing we need now is for this schema to be available on Drizzle, because that is what will give us our type information when performing database operations This can be done by either:

Running this query against the database and introspecting from the database to generate the schema;
Manually write the schema and make it conform to the query above;

Shall we put all the schemas in one file?

They can be put in a single file, or distributed across multiple files (see: https://orm.drizzle.team/docs/sql-schema-declaration).
I personally recommend single files since you can manage declaring relationships between tables without having multiple imports/exports on all the different files, but I won't enforce any specific file structure.


Fix HiDiveIE.

Please follow the guide below

You will be asked some questions, please read them carefully and answer honestly
Put an x into all the boxes [ ] relevant to your pull request (like that [x])
Use Preview tab to see how your pull request will actually look like

Before submitting a pull request make sure you have:

[x] At least skimmed through adding new extractor tutorial and youtube-dl coding conventions sections
[x] Searched the bugtracker for similar pull requests
[x] Checked the code with flake8

In order to be accepted and merged into yt-dlp each piece of code must be in public domain or released under Unlicense. Check one of the following options:

[x] I am the original author of this code and I am willing to release it under Unlicense
[ ] I am not the original author of this code but it is in public domain or released under Unlicense (provide reliable evidence)

What is the purpose of your pull request?

[x] Bug fix
[x] Improvement
[ ] New extractor
[ ] New feature

Description of your pull request and other information
Closes https://github.com/yt-dlp/yt-dlp/issues/952 and maybe https://github.com/yt-dlp/yt-dlp/issues/408 aswell

@LunaGNUisance Can you see if any of your issues are solved with this PR?

Sorry for late response to this, I just found it.
I'm having the issue where yt-dlp is actually not finding or writing any subs at all from hi-dive. The person with the previous posted issue was having it grab subs for the English videos. But i'm not able to get it to download any subs at all.
Trying to list subtitles just gives "No Subtitles found"
Hidive does list 2 separate format codes for English videos and Japanese videos. (4 for each at different resolutions) But no subs at all.
Any ideas?


Help with shipyard on Linux

I ran this without issues on Mac OS X but on my linux server, I am having an issue with the no default node appearing in the UI. Update: incidentally I am seeing the same issue on another Mac.
I installed shipyard with curl -sSL https://shipyard-project.com/deploy | sudo ACTION=deploy bash -s
I believe I am running Docker bound on a UNIX socket. Happy to provide any other debugging info.
docker --version
Docker version 1.9.1, build a34a1d5

Some things that seem to be bizarre:

installation didn't show any issues

Deploying Shipyard
 -> Starting Database
 -> Starting Discovery
 -> Starting Cert Volume
 -> Starting Proxy
 -> Starting Swarm Manager
 -> Starting Swarm Agent
 -> Starting Controller
Waiting for Shipyard on <IP_ADDRESS>:8080
..................
Shipyard available at http://<IP_ADDRESS>:8080
Username: admin Password: shipyard
ubuntu@ip-172-30-1-157:~$ sudo docker ps
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS                          PORTS                                            NAMES
8075c61267d6        shipyard/shipyard:latest       "/bin/controller --de"   37 seconds ago      Up 35 seconds                   <IP_ADDRESS>:8080->8080/tcp                           shipyard-controller
0fcd17d98ae5        swarm:latest                   "/swarm j --addr 172."   37 seconds ago      Up 36 seconds                   2375/tcp                                         shipyard-swarm-agent
f35f5060b28d        swarm:latest                   "/swarm m --replicati"   37 seconds ago      Up 36 seconds                   2375/tcp                                         shipyard-swarm-manager
818d93c3010f        ehazlett/docker-proxy:latest   "/bin/docker-proxy -h"   37 seconds ago      Restarting (2) 10 seconds ago   <IP_ADDRESS>:2375->2375/tcp                           shipyard-proxy
af1ce33058ff        alpine                         "sh"                     37 seconds ago      Up 36 seconds                                                                    shipyard-certs
a04acdd3f6c8        microbox/etcd:latest           "/bin/etcd -addr 172."   37 seconds ago      Up 36 seconds                   <IP_ADDRESS>:4001->4001/tcp, <IP_ADDRESS>:7001->7001/tcp   shipyard-discovery
5d60554ec14c        rethinkdb                      "rethinkdb --bind all"   38 seconds ago      Up 37 seconds                   8080/tcp, 28015/tcp, 29015/tcp                   shipyard-rethinkdb

ehazlett/docker-proxy:latest seems to be restarting constantly with a repeating docker logs of:

Usage of /bin/docker-proxy:
  -ca string
        path to CA certificate
  -cert string
        path to certificate
  -d string
        path to the Docker socket (default "/var/run/docker.sock")
  -i    allow insecure communication
  -key string
        path to certificate key
  -l string
        listen address (default ":2375")

This was my fault.  A dev image was pushed erroneously.  Please pull
ehazlett/docker-proxy and try again.  Sorry!
On Mon, Dec 28, 2015 at 9:42 PM, Erik Dasque<EMAIL_ADDRESS>wrote:

I ran this without issues on Mac OS X but on my actual server, I am having
an issue with the no default node appearing in the UI
Some things that seem to be bizarre:

installation didn't show any issues

Deploying Shipyard
-> Starting Database
-> Starting Discovery
-> Starting Cert Volume
-> Starting Proxy
-> Starting Swarm Manager
-> Starting Swarm Agent
-> Starting Controller
Waiting for Shipyard on <IP_ADDRESS>:8080
..................
Shipyard available at http://<IP_ADDRESS>:8080
Username: admin Password: shipyard
ubuntu@ip-172-30-1-157:~$ sudo docker ps
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS                          PORTS                                            NAMES
8075c61267d6        shipyard/shipyard:latest       "/bin/controller --de"   37 seconds ago      Up 35 seconds                   <IP_ADDRESS>:8080->8080/tcp                           shipyard-controller
0fcd17d98ae5        swarm:latest                   "/swarm j --addr 172."   37 seconds ago      Up 36 seconds                   2375/tcp                                         shipyard-swarm-agent
f35f5060b28d        swarm:latest                   "/swarm m --replicati"   37 seconds ago      Up 36 seconds                   2375/tcp                                         shipyard-swarm-manager
818d93c3010f        ehazlett/docker-proxy:latest   "/bin/docker-proxy -h"   37 seconds ago      Restarting (2) 10 seconds ago   <IP_ADDRESS>:2375->2375/tcp                           shipyard-proxy
af1ce33058ff        alpine                         "sh"                     37 seconds ago      Up 36 seconds                                                                    shipyard-certs
a04acdd3f6c8        microbox/etcd:latest           "/bin/etcd -addr 172."   37 seconds ago      Up 36 seconds                   <IP_ADDRESS>:4001->4001/tcp, <IP_ADDRESS>:7001->7001/tcp   shipyard-discovery
5d60554ec14c        rethinkdb                      "rethinkdb --bind all"   38 seconds ago      Up 37 seconds                   8080/tcp, 28015/tcp, 29015/tcp                   shipyard-rethinkdb

ehazlett/docker-proxy:latest seems to be restarting constantly with
a docker logs of: Usage of /bin/docker-proxy: -ca string path to CA
certificate -cert string path to certificate -d string path to the Docker
socket (default "/var/run/docker.sock") -i allow insecure communication
-key string path to certificate key -l string listen address (default
":2375")

I believe I am running Docker bound on a UNIX socket. Happy to provide any
other debugging info.
—
Reply to this email directly or view it on GitHub
https://github.com/shipyard/shipyard/issues/712.

That worked (I had to remove the images to prevent it from using cached images in the automatic deploy).
Might be a good idea to version pin the images pulled from the https://shipyard-project.com/deploy script, what do you think?
Or maybe keep a latest that's different from a dev branch?


Add maintenance page when GCForms is unavailable

Problem: Currently end users will either be presented with a 500 page when the GCForms application is no longer functioning or is undergoing maintenance.
Work: Add a maintenance page to inform users that the application is not available
Involves:

Creating a route53 check that verifies if the app is running
Created a CloudFront CDN end point
Create a primary and fallback route53 entry for GCForms
Create a static site (en and fr) that users will be directed to when the route53 entry is in fallback mode

Similar to cds-snc/platform-forms-client#402
Need to consolidate into a potential epic and break down issues to smaller chunks

Initial implementation does not work as expected. Currently investigating on changes we will need to make it work.


Reload of Child-Objects does not work right

Hi Guys,
with a click on a button iam loading new items in the slider. On the first load, everything works right. It looks like this:

But when i click again on the button, to reload the items in the slider it looks like this:

My configuration for the swiper:
config: SwiperConfigInterface = {
    scrollbar: null,
    direction: 'horizontal',
    mousewheelControl: true,
    scrollbarDraggable: true,
    scrollbarSnapOnRelease: true,
    pagination: '.swiper-pagination',
    paginationType: 'bullets',
    paginationClickable: true,
    nextButton: '.swiper-button-next',
    prevButton: '.swiper-button-prev',
    breakpoints: {
      480: {
        slidesPerView: 1
      },
      800: {
        slidesPerView: 2
      }
    }
  };

The HTML-Code:

    <swiper class="swiper-slide" [config]="config" fxFlex>

                {{result.score}}

                                    {{result.name}}

{{result.score}}

    </swiper>

Can you tell me, whats wrong with my code? "results" is just an array of objects.

Okay i´ve found that the div class "col s12 m4 13" changes when i click the button again.
First it looks like this:

After clicking again it changes:

Someone has an idea, why it changes?

If you update the contents you might need to call the update function of the swiper to make it refresh the container styles. You can access the update functions through directiveRef. If that does not help then I guess its a styling issue.

Hi @sconix  thanks for your answer.
I tried this:
<swiper #swiper class="swiper-slide" [config]="config" fxFlex>

@ViewChild('swiper') swiper;

and called this function when button is clicked:
this.swiper.update(true);

and the result is still the same

Could you try to wrap your slide contents within a div, i.e. not to make the for loop in the very first div. Since swiper adds those slide classes on the very first div and now when you run the loop those classes are not reapplied. But by moving the loop inside a div then the main slide div is always there and therefore those slide classes should stay.

Since the component only adds the classes if the number of childs changes. So in you case I guess the number stays the same so those classes are not re-added.

I always show 5 Children. Not more.
Can u give me an example how u mean that? Where should i put the loop in?

Like just wrap it in extra div:

...

Or just add the swiper-slide class for the div where you have the ngFor.

Adding the swiper-slide class for the div where the ngFor is was the solution!
Thanks @sconix  !!!

I leave this open so that I can check if there is some simple check for auto detecting the slide changes.

The upcoming release should add the class automatically even in this kind of situation i.e. where number of childs is the same.


Add a onThemeActivated hook

Probably not something everyone needs, but in my use case I need to hook into after a new theme is fully loaded. I need to query items in the "games.Whetstone.settings.get" function and those are not yet available in the OnThemeActivate hook.

This will be in version v1.1.2


[Generic] Fix RSS items id missing

The items "id" on a playlist, from a RSS feed is missing (despite the unit test). I used the tag  ot item's RSS to get this unique value.
Due to this id missed, the download-archive file is not working correctly with RSS feed.
Please follow the guide below

You will be asked some questions, please read them carefully and answer honestly
Put an x into all the boxes [ ] relevant to your pull request (like that [x])
Use Preview tab to see how your pull request will actually look like

Before submitting a pull request make sure you have:

[x] Searched the bugtracker for similar pull requests
[x] Read adding new extractor tutorial
[x] Read youtube-dl coding conventions and adjusted the code to meet them
[x] Covered the code with tests (note that PRs without tests will be REJECTED)
[x] Checked the code with flake8

In order to be accepted and merged into youtube-dl each piece of code must be in public domain or released under Unlicense. Check one of the following options:

[x] I am the original author of this code and I am willing to release it under Unlicense
[ ] I am not the original author of this code but it is in public domain or released under Unlicense (provide reliable evidence)

What is the purpose of your pull request?

[x] Bug fix
[ ] Improvement
[ ] New extractor
[ ] New feature

Description of your pull request and other information
The items "id" on a playlist, from a RSS feed is missing (despite the unit test). I used the tag  item's RSS to get this unique value.
Due to this id missed, the download-archive file is not working correctly with RSS feed.
I didn't add another unit test because they are already there.

id in url_transparent does not make any sense since it's overwritten by the actual id extracted from url.

@dstftw thanks a lot for your answer, I understand my mistake.
The issue, is that for a RSS feed like this one :
https://rss.acast.com/teuf-d-appart
The "id" is always the same : "media". So it's impossible to download this RSS playlist with the "--download-archive" option :-(


Yosys stucks in an infinite loop when running synthesis

Steps to reproduce the issue

Download oled.zip
Unzip it and cd into the directory
Run make, or if you prefer, yosys -p "synth_ice40 -top PmodOLEDCtrl -json PmodOLEDCtrl.json"  PmodOLEDCtrl.v SpiCtrl.v Delay.v OledInit.v OledEX.v

Expected behavior
Some background first: I am trying to use Digilent's Pmod OLED with icesugar, an iCE40UP5k-powered development board by adapting the Nexys 3 Verilog Example - ISE 14.2 example.
The edits I have made are meant to remove Xilinx's proprietary parts as well as Verilog structures not supported by yosys, i.e. multi-dimensional parameter arrays like alphabet_screen, clear_screen, and digilent_screen. Chances are that I introduced some bugs in the process so the attached code won't work, but I still expect yosys to either

produce a JSON netlist on success, or
emit an error on failure.

Actual behavior
It appears to stuck in an infinite loop. I have waited for more than half an hour and it didn't output anything. The last few log lines are
6.3. Executing PROC pass (convert processes to netlists).

6.3.1. Executing PROC_CLEAN pass (remove empty switches from decision trees).
Cleaned up 0 empty switches.

6.3.2. Executing PROC_RMDEAD pass (remove dead branches from decision trees).
Marked 1 switch rules as full_case in process $proc$/usr/local/bin/../share/yosys/ice40/cells_sim.v:1330$335 in module SB_DFFNES.
Marked 1 switch rules as full_case in process $proc$/usr/local/bin/../share/yosys/ice40/cells_sim.v:1274$328 in module SB_DFFNESS.
Marked 1 switch rules as full_case in process $proc$/usr/local/bin/../share/yosys/ice40/cells_sim.v:1199$324 in module SB_DFFNER.
Marked 1 switch rules as full_case in process $proc$/usr/local/bin/../share/yosys/ice40/cells_sim.v:1143$317 in module SB_DFFNESR.
Marked 1 switch rules as full_case in process $proc$/usr/local/bin/../share/yosys/ice40/cells_sim.v:1074$314 in module SB_DFFNS.
Marked 1 switch rules as full_case in process $proc$/usr/local/bin/../share/yosys/ice40/cells_sim.v:1026$311 in module SB_DFFNSS.
Marked 1 switch rules as full_case in process $proc$/usr/local/bin/../share/yosys/ice40/cells_sim.v:957$308 in module SB_DFFNR.
Marked 1 switch rules as full_case in process $proc$/usr/local/bin/../share/yosys/ice40/cells_sim.v:909$305 in module SB_DFFNSR.
Marked 1 switch rules as full_case in process $proc$/usr/local/bin/../share/yosys/ice40/cells_sim.v:753$297 in module SB_DFFES.
Marked 1 switch rules as full_case in process $proc$/usr/local/bin/../share/yosys/ice40/cells_sim.v:697$290 in module SB_DFFESS.
Marked 1 switch rules as full_case in process $proc$/usr/local/bin/../share/yosys/ice40/cells_sim.v:622$286 in module SB_DFFER.
Marked 1 switch rules as full_case in process $proc$/usr/local/bin/../share/yosys/ice40/cells_sim.v:566$279 in module SB_DFFESR.
Marked 1 switch rules as full_case in process $proc$/usr/local/bin/../share/yosys/ice40/cells_sim.v:497$276 in module SB_DFFS.
Marked 1 switch rules as full_case in process $proc$/usr/local/bin/../share/yosys/ice40/cells_sim.v:449$273 in module SB_DFFSS.
Marked 1 switch rules as full_case in process $proc$/usr/local/bin/../share/yosys/ice40/cells_sim.v:380$270 in module SB_DFFR.
Marked 1 switch rules as full_case in process $proc$/usr/local/bin/../share/yosys/ice40/cells_sim.v:332$267 in module SB_DFFSR.

It seems that the BitPatternPool used in proc_rmdead has impressively bad performance when long random bit patterns are involved.  We'll try to think of a proper solution; for a workaround, try changing the strings used in OledInit.v as state values to enumerated constants with sequential values.

for a workaround, try changing the strings used in OledInit.v as state values to enumerated constants with sequential values.

It works! I had to replace the "state strings" in both Oledinit.v and OledEX.v with sequential integers to get yosys to run in a reasonable amount of time, though.

Is this the reason also for #2415 ?