Write example

Hi,
I wanted to ask how I can write a object file with debugging symbols trough this and the object libary.
I saw in your docs on the write tab (https://docs.rs/gimli/latest/gimli/write/index.html) a simple example, but i don't understand how i add debugging information and write all of that into one object file.
A quick google search also reveals not much.
Bye

You can refer to https://github.com/rust-lang/rustc_codegen_cranelift/blob/master/src/debuginfo/ for a usage example.

I don't understand the code

For the gimli side of things, I can't give any better example than what is at https://docs.rs/gimli/latest/gimli/write/index.html. This library only implements the DWARF file format. It doesn't cover the semantics of the DWARF information, so if that part doesn't make sense to you then you need to learn more about DWARF, and there are plenty of resources on the internet for that.
To write the DWARF sections to a file using object, you need to change this part:
    // Create a `Vec` for each DWARF section.
    let mut sections = Sections::new(EndianVec::new(gimli::LittleEndian));
    // Finally, write the DWARF data to the sections.
    dwarf.write(&mut sections)?;
    sections.for_each(|id, data| {
        // Here you can add the data to the output object file.
        Ok(())
    })

First, instead of using EndianVec you need a writer to record the relocations. That's done here using WriterRelocate, and the important part of WriterRelocate is the Writer implementation which records the relocations.
After that, you need fill in the sections.for_each to add the sections and relocations to the object file. You already know how to add sections and relocations to object files. You can obtain the section name with id.name().

That would be line debuginfo. You will have to create a DwarfUnit (let's call it dwarf) with the root having DW_AT_low_pc and DW_AT_ranges indicating the full range of all functions to which this debuginfo applies and then dwarf.unit.line_program has a line program which maps from bytes in the code to source locations. For that you first do line_program.begin_sequence with the start address of the function and then for every location in the machine code you fill in the fields of line_program.row() (address_offset with the offset from the start of the function. file with the source file, line with the line in the source file, ...) and then call line_program.generate_row(). You need to do this in ascending order. And at the end you call line_program.end_sequence() with the size of the function.

@bjorn3 Thanks a lot
So would this code generate a dwarf information which says in file test.asm in line 1; coloumn 0 at the function data index 3;
// Begins sequence
dwarf.unit.line_program.begin_sequence(Some(5));

// Sets  all files
dwarf.unit.line_program.row().file = "test.asm";
dwarf.unit.line_program.row().line = 1;
dwarf.unit.line_program.row().column = 0;
dwarf.unit.line_program.row().adress_offset = 3;

dwarf.unit.line_program.generate_row(Some(5));

// Ends sequence
dwarf.unit.line_program.end_sequence();

Is there the width of what this debugging symbol discribes 1 byte big or a specific value (when specific value: how can i set it)?
How can i set the code this debugging symbol is refering to?

Is there the width of what this debugging symbol discribes 1 byte big or a specific value (when specific value: how can i set it)?

It is from the given address_offset until the next row (or the end of the function if there is no row after it).

dwarf.unit.line_program.generate_row(Some(5));

This function doesn't accept any arguments.

dwarf.unit.line_program.end_sequence();

And this one accepts the total length of the function.

Thanks, how can i say which code is related to that row?

I want to try something like this:
use std::fs::File;

use gimli::{write::{Address, DwarfUnit, EndianVec, Error, LineString, Sections}, Encoding};

use object::{
    write::{Object, StandardSection, Symbol, SymbolSection}, Architecture, BinaryFormat, Endianness, SymbolFlags, SymbolKind, SymbolScope
};

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut dwarf = DwarfUnit::new(Encoding {
        format: gimli::Format::Dwarf32,
        version: 5,
        address_size: 8,
    });

    let mut obj = Object::new(BinaryFormat::Coff, Architecture::X86_64, Endianness::Little);

    let directory_id = dwarf.unit.line_program.add_directory(LineString::String(b"./".into()));
    let file_id = dwarf.unit.line_program.add_file(LineString::String(b"test.abc".into()), directory_id, None);

    let data = vec![
        0xff // bad
    ];

    let (section, offset) =
        obj.add_subsection(StandardSection::Text, b"main", &data, 1);
    obj.add_symbol(Symbol {
        name: b"main".into(),
        value: offset,
        size: data.len() as u64,
        kind: SymbolKind::Text,
        scope: SymbolScope::Linkage,
        weak: false,
        section: SymbolSection::Section(section),
        flags: SymbolFlags::None,
    });

    let address = Some(Address::Constant(offset));

    dwarf.unit.line_program.begin_sequence(address);
    dwarf.unit.line_program.row().file = file_id;
    dwarf.unit.line_program.row().line = 2;
    dwarf.unit.line_program.row().column = 1;
    dwarf.unit.line_program.row().address_offset = 0x01;
    dwarf.unit.line_program.end_sequence(2);

    let mut sections = Sections::new(EndianVec::new(gimli::LittleEndian));
    dwarf.write(&mut sections)?;
    sections.for_each(|id, data| {
        let data = data.clone().into_vec();
        let section = obj.add_section(vec![], id.name().as_bytes().into(), object::SectionKind::Debug);
        let sec = obj.section_mut(section);
        sec.append_data(&data, 1);

        Ok::<(), Error>(())
    })?;

    let file = File::create("test.o")?;
    obj.write_stream(file)?;

    Ok(())

}

But sadly it don't work.
I dosn't read test.abc and relocates the debug symbol to my main functions 0xff byte.
Bye

Looks like you are missing dwarf.unit.line_program.generate_row() before the end_sequence call. Also you need to make sure that address is a relocation pointing to the main symbol, not a constant value. Linking will change the offset at which main is placed and a relocation is necessary for the linker to fixup the address stored in the debuginfo.
In addition you need to add the DW_AT_low_pc attribute with a value of 0 and DW_AT_ranges attribute referencing the ranges of all covered functions to the root of the unit for the debugger to even consider looking at the associated line program.

@bjorn3
Thanks,
How can i make it a relocation to my symbol?

In addition you need to add the DW_AT_low_pc attribute with a value of 0 and DW_AT_ranges attribute referencing the ranges of all covered functions to the root of the unit for the debugger to even consider looking at the associated line program.

Where do i need to add them?

Where do i need to add them?

For DW_AT_low_pc see https://github.com/rust-lang/rustc_codegen_cranelift/blob/0328ee571bbe3a1d21b5c01e816cf4224193a2fc/src/debuginfo/mod.rs#L131 (and https://github.com/rust-lang/rustc_codegen_cranelift/blob/0328ee571bbe3a1d21b5c01e816cf4224193a2fc/src/debuginfo/mod.rs#L119-L120 for the root variable) For DW_AT_ranges see https://github.com/rust-lang/rustc_codegen_cranelift/blob/0328ee571bbe3a1d21b5c01e816cf4224193a2fc/src/debuginfo/emit.rs#L26-L29 where self.unit_range_list is extended every time a function is added at https://github.com/rust-lang/rustc_codegen_cranelift/blob/0328ee571bbe3a1d21b5c01e816cf4224193a2fc/src/debuginfo/mod.rs#L326-L329.

How can i make it a relocation to my symbol?

In cg_clif this is implemented in https://github.com/rust-lang/rustc_codegen_cranelift/blob/master/src/debuginfo/emit.rs and https://github.com/rust-lang/rustc_codegen_cranelift/blob/master/src/debuginfo/object.rs together.

Thx

@bjorn3
So I now have this code:
use std::fs::File;

use gimli::{write::{Address, AttributeValue, DwarfUnit, EndianVec, Error, LineString, Sections}, Encoding};

use object::{
    write::{Object, Relocation, StandardSection, Symbol, SymbolId, SymbolSection}, Architecture, BinaryFormat, Endianness, SymbolFlags, SymbolKind, SymbolScope
};

fn address_for_func(obj: &Object, id: &SymbolId) -> Address {
    let sym = obj.symbol(id.to_owned());
    Address::Symbol { symbol: sym.value as usize, addend: 0 }
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut dwarf = DwarfUnit::new(Encoding {
        format: gimli::Format::Dwarf32,
        version: 5,
        address_size: 8,
    });

    let root = dwarf.unit.get_mut(dwarf.unit.root());
    root.set(gimli::DW_AT_low_pc, AttributeValue::Address(Address::Constant(0)));
    root.set(gimli::DW_AT_ranges, AttributeValue::RangeListRef(unit_range_list_id));

    let mut obj = Object::new(BinaryFormat::Coff, Architecture::X86_64, Endianness::Little);

    let directory_id = dwarf.unit.line_program.add_directory(LineString::String(b"./".into()));
    let file_id = dwarf.unit.line_program.add_file(LineString::String(b"test.abc".into()), directory_id, None);

    let data = vec![
        0xff // bad
    ];

    let (section, offset) =
        obj.add_subsection(StandardSection::Text, b"main", &data, 1);
    let sym = obj.add_symbol(Symbol {
        name: b"main".into(),
        value: offset,
        size: data.len() as u64,
        kind: SymbolKind::Text,
        scope: SymbolScope::Linkage,
        weak: false,
        section: SymbolSection::Section(section),
        flags: SymbolFlags::None,
    });

    let address = Some(address_for_func(&obj, &sym));

    dwarf.unit.line_program.begin_sequence(address);
    dwarf.unit.line_program.row().file = file_id;
    dwarf.unit.line_program.row().line = 2;
    dwarf.unit.line_program.row().column = 1;
    dwarf.unit.line_program.row().address_offset = 0x01;
    dwarf.unit.line_program.generate_row();
    dwarf.unit.line_program.end_sequence(2);

    obj.add_relocation(
        sect,
        Relocation {
            offset: reloc.offset,
            symbol,
            kind: reloc.kind,
            encoding: RelocationEncoding::Generic,
            size: reloc.size * 8,
            addend: i64::try_from(symbol_offset).unwrap() + reloc.addend,
            flags: todo!(),
        },
    );

    let mut sections = Sections::new(EndianVec::new(gimli::LittleEndian));
    dwarf.write(&mut sections)?;
    sections.for_each(|id, data| {
        let data = data.clone().into_vec();
        let section = obj.add_section(vec![], id.name().as_bytes().into(), object::SectionKind::Debug);
        let sec = obj.section_mut(section);
        sec.append_data(&data, 1);

        Ok::<(), Error>(())
    })?;

    let file = File::create("test.o")?;
    obj.write_stream(file)?;

    Ok(())

}

But i have a few errors and questions:

How can I define one of these unit_range_list_ids?
And for the reloc: How can i get all of these vars (reloc, symbol, symbol_offset, sect)

How can I define one of these unit_range_list_ids?

let unit_range_list_id = self.dwarf.unit.ranges.add(unit_range_list.clone());

#709 adds a write example that creates a complete object file, plus some helpers to make relocation handling easier.

Cool, then i can close this issue now


[Bug] You can't click on Open to collaboration toggle

You can only click on label and not on the toggle, which looks like a UX bug to me.

Hi there and welcome to the project :D @jcubic .
Thanks for pointing this out.
It was just an horrible design idea on my part, I will change this soon to just be a normal button.

You can make Toggle like this in Pure CSS. There are a lot of examples online.
Here is mine that I did long ago:
https://codepen.io/jcubic/pen/WXLKeQ
The old code require the label to be after the input, but now with :has() selector, you can make the label before the input. Another way is to change the order with flexbox.

Thank you, I'll give a try :))


Feature Request for feathersrc

Feature request for a feathersrc
Expected behavior
Ability to customize feathers generate in some way.
Actual behavior
No way to pass options documented.
System configuration
Module versions
feathers-cli 4.6.1
NodeJS version
7.10.0
Operating System
Win 10 64-bit
Description
I'd like something akin to a .sequelizerc to pass options to the standard feathers generator so I can skip some steps or point things to a different directory (possibly).
I would like this feature because I introduced async/await into my app, and am currently asynchronously loading pieces of my app's configuration (create all models in parallel, then when complete associate those that need to be associated in parallel <-- might need to unsupport that if my app gets some crazy associations; and also create services in parallel, for now the services don't depend on each other, but if they do then this would be broken up into stages).
But since I'm customizing how the app is loading its files, when I use feathers generate to create a new service, it dumps extra calls into my src/services/index.js file. It's easy to remove these lines, but I would like other devs on my team not to have to worry about that. Currently I'm telling them to copy an existing directory and change the names. ¯_(ツ)_/¯)
So, I'd like to just skip the forced update of index.js. This is the real option I'd be interested in currently.
Is this something y'all think is a good idea? Or bad idea (convention <-> configuration debate I suppose)?
Or is this something that can be achieved easily with a custom generator? I suppose I could just fork the feathers-generator and make my team's own customized yeoman generator, would that be a good way to go?
Here's a gist of some of this asynchrony - at least the bits that really matter within the scope of this request.
Thanks for reading! :D

http://yeoman.io/authoring/storage.html is related to this

This issue was moved to feathersjs/feathers#952


Docker Next Generation - Per language container strategy

Docker now builds independent language images, and the final image can be assembled with ORT main binary + languages.
All images are deployed under ghcr.io registry by default.
Default runtime image contains Java, Python, Rust, Golang, NodeJS and Ruby components, and other components can be be added using the new custom-docker.sh script.
Extra components available are:
Android, Swift, Dotnet, PHP, Haskell
This closes original external PR:
Closes #7447

Too late for a review, so just some general remarks from me:

Indentation in workflow files is wrong, we always indent with two spaces.
Some commits probably should have been squashed, why introduce so many new workflow files only to remove them again within the same PR?
Last commit should (at least mostly) have been integrated into the previous commits.
Some commit messages are fine, but for example the 2nd and 3rd commit would have needed an explanation to understand the motivation.
I don't like the name "Mega image", it's not very telling.

Too late for a review, so just some general remarks from me:

Thanks for these remarks. In sum, very surprising that this was approved as-is by two (!) reviewers then.


Add: Channel

Channel Name
Channel 5
Alternative Names (optional)
No response
Network (optional)
No response
Owners (optional)
No response
Country
Belize
Subdivision (optional)
No response
City (optional)
Belize City
Broadcast Area

Languages
English
Categories (optional)

NSFW
FALSE
Launched (optional)
No response
Closed (optional)
No response
Replaced By (optional)
No response
Website (optional)
No response
Logo
https://www.google.com/url?sa=i&url=https%3A%2F%2Fwww.facebook.com%2FChannel5BelizeTV%2F&psig=AOvVaw2goR4_rPEcHN8xoK_4D_KR&ust=1675390112517000&source=images&cd=vfe&ved=0CBAQjRxqFwoTCJjF_prh9fwCFQAAAAAdAAAAABAE
Notes
No response

Duplicate of https://github.com/iptv-org/database/issues/2194


Nice to have: Dashboard showing aborted workflows

It would be nice to see also the number of workflows that get aborted so that the math adds up !
Not for this MVP but maybe in the future?

Thanks! Could, but then we'd have an odd number. Maybe there's a 6th thing that could be shown ...

Feels unnecessary for v1.X considering the odd number conundrum, might want to revisit after v2.0, but marking as "won'tfix" for now.

As a user running/troubleshooting through a WDL workflow it would ideally be nice to looks somewhere easily for workflows that have been aborted.

We should add this as a thing to add for proof v2 Sita


Test improvement

Changed log

The PHPUnit\Framework\TestCase class is supported since 4.8.36 version.
Using the ::class to declare class instance.

Coverage increased (+0.2%) to 78.962% when pulling ac916f93ed542dc017639f0e784ae53a47bbc464 on open-source-contributions:test_improvement into b4887755fc27b4caf1d3213cea6422b4f6f90630 on klarna:v4.x.


Decide what to do with the 13 free-tagging-bits inside NodeBackendID

Since #250 NodeBackendID has 13 free-tagging bits (previously it was 3),
thats a bit excessive but we also don't have a good idea where we would need them atm.
We need to decide what to do with them.

Idea: keep 4 tagging bits, use the rest to increase the size of the NodeID to allow for larger inlined values.


Logstash fails to start without x-pack

I have a simple docker image that uses the default one and uninstalls x-pack:
ARG VERSION
FROM docker.elastic.co/logstash/logstash:$VERSION

# https://www.elastic.co/guide/en/x-pack/current/installing-xpack.html#xpack-uninstalling
RUN logstash-plugin remove x-pack

Said image is being used in a docker-compose, but the container fails to start with the error message:
[FATAL][logstash.runner          ] An unexpected error occurred! {:error=>#<ArgumentError: Setting "xpack.monitoring.elasticsearch.url" hasn't been registered>, :backtrace=>["/usr/share/logstash/logstash-core/lib/logstash/settings.rb:32:in `get_setting'", "/usr/share/logstash/logstash-core/lib/logstash/settings.rb:64:in `set_value'", "/usr/share/logstash/logstash-core/lib/logstash/settings.rb:83:in `merge'", "org/jruby/RubyHash.java:1342:in `each'", "/usr/share/logstash/logstash-core/lib/logstash/settings.rb:83:in `merge'", "/usr/share/logstash/logstash-core/lib/logstash/settings.rb:135:in `validate_all'", "/usr/share/logstash/logstash-core/lib/logstash/runner.rb:244:in `execute'", "/usr/share/logstash/vendor/bundle/jruby/1.9/gems/clamp-0.6.5/lib/clamp/command.rb:67:in `run'", "/usr/share/logstash/logstash-core/lib/logstash/runner.rb:209:in `run'", "/usr/share/logstash/vendor/bundle/jruby/1.9/gems/clamp-0.6.5/lib/clamp/command.rb:132:in `run'", "/usr/share/logstash/lib/bootstrap/environment.rb:71:in `(root)'"]}

The semi-official image from DockerHub seems to be working just fine.

It seems that the error was caused by some leftover xpack properties in the /usr/share/logstash/config/logstash.yml configuration file. It can be worked around the issue by removing the 3 xpack configuration entries, but ideally this should be done automatically when removing the plugin.
For completeness sake here is the updated Dockerfile:
ARG VERSION
FROM docker.elastic.co/logstash/logstash:$VERSION

# https://www.elastic.co/guide/en/x-pack/current/installing-xpack.html#xpack-uninstalling
RUN logstash-plugin remove x-pack
RUN sed -i '/xpack/d' /usr/share/logstash/config/logstash.yml

Shouldn't the plugin validate its own configuration instead of logstash? Just got bitten by this issue as well.

Adding my 2 cents here:
Please note that x-pack-plugin may not be preinstalled in all logstash versions (build arg) so that the command (and thus building the Dockerfile) may fail.
I just tested with 5.0.0, which fails, and with 5.6.3, which succeeds.


statsd sidecar container fails to launch

hello,
The statsd sidecar container fails to launch with error statsd_exporter: error: unknown short flag '-s', try --help
Most likely, the problem originates from here: https://github.com/banzaicloud/bank-vaults/blob/master/operator/pkg/stub/handler.go#L439
which was introduced in #125, where it was taken from the args in the helm chart here: https://github.com/banzaicloud/banzai-charts/blob/master/vault/templates/deployment.yaml#L142
it might need to be a cmd instead, or passed in as an arg with a long flag

This is issue is coming from a breaking change in the states exporter, which was released yesterday, and we have tested it with the version one day earlier, see https://github.com/prometheus/statsd_exporter/commit/82f75d3b9ad053751cc2a5fe869c321b64a47934
I will push a fix for this in the operator and in the helm chart as well


Unit test failure: TerminalLinkDetector

https://dev.azure.com/monacotools/Monaco/_build/results?buildId=197333&view=logs&j=55ac390b-ffb1-50ea-3650-525dd9a3fd80&t=3a692518-c3cf-5f6a-c273-72f71dc185fb

https://dev.azure.com/monacotools/Monaco/_build/results?buildId=197359&view=logs&j=55ac390b-ffb1-50ea-3650-525dd9a3fd80&t=c01b9029-2b08-503e-eba8-b45cf5956c33&l=17416

These flakes are a bit odd, not sure what could cause them and the failures seem a bit all over the place 🤔

I added some logs that will help with debugging future failures. Closing in the meantime until a new one pops up.


Completer fault

Hi I noticed a malfunction when having PcItems with same prefix
Using this completer:
var completer = readline.NewPrefixCompleter(
		readline.PcItem("simple",
			readline.PcItem("rule",
				readline.PcItem("-name"),
				readline.PcItem("-name2"),
				readline.PcItem("-name23"),
			),
		),
	)

A will get following completion tree
.simple
......rule
............-name (as it is common prefix for all)
..................-name-name (this is not so good)
..................-name2
..................-name23
I would look at it on my own but I'm not sure where to look.

I think it may cause by PrefixCompleter. I will check it later :)

thanks a lot

@michalpristas Fixed. Please check that commit above.


Use Animated and remove react-tween-state

This is initial proposal to use Animated instead of react-tween-state. If approved next step is to update documentation.

Cool thanks! I haven't been able to take a look at the latest with React Native. Animated looks great.

Thanks. I updated README to match changes in this PR. See #4.


Use of imagemanip operations with the regular video stream (still / video) results in fatal error

Hi,
Using the ImageManipulation node with the video/still stream results in the following error:
Fatal error. Please report to developers. Log: 'ImageManipHelper' '60'
This occurs even if the ImgFrame::Type is set to NV12
Still images also cannot have a different resolution than video frames it seems, so one cannot adjust the image output resolution before encoding that way either.
Best regards,
oysstu

Hi @oysstu
Sorry for the inconvenience. ImageManip doesn't (yet) support NV12 input.
We are working on it and hope to have a fix for it soon.

@oysstu image_manip_refactor branch now includes improvements to ImageManip which now handle NV12 as input as well.
Along that it also supports color space conversion, so one can input other formats as well and produce NV12 output (as well as others, RGB,BGR,planar,interleaved,gray,...)
Note: due to hw restrictions and implementation detail, inputting planar formats is faster than interleaved (eg. YUV420 vs NV12, BGR planar vs BGR interleaved, etc...)
But converting to planar/interleaved doesn't make a difference.
(Above could sometimes be the reason to use isp instead of video output for some operations)

@themarpe I've closed this, seeing as it's implemented and merged already. With respect to what you wrote above; how to best judge which output stream to use for imagemanip? Let's say that the imagemanip node is a combination of cropping, resizing and for example conversion to GRAY8.

@oysstu
For ColorCamera that'd be isp over video. video is NV12 (interleaved), while isp output is YUV420 (planar).
Also, currently only still and video are interleaved (or preview if set to interleaved). So you may compute across pipeline in planar formats, until needed (eg for VideoEncoder) and only then convert to NV12


overhaul mod

few optimizations
allow clicking on anything (the buttons will be red if the mod fails to find a link)
don't use winforms clipboard (linux compat?)
updated csproj file to the new standard

thanks for the pr 😄


Repo description update from Solid to Solana

Repo description needs to be updates from Solid to Solana

Hey @DougAnderson444, sorry seems like this was left unanswered for a while. Cannot find the Sol-Id reference anywhere, so I'll close this.


Add @shopiy/koa-middleware-utilities

Description
Common utilities and type definitions used for creating koa middlewares.

@ismail-syed going to close, feel free to reopen when you come back if you plan on finishing this.


assertControllerClass vs. assertControllerName => check FQDN instead of class name

[x] I was not able to find an open or closed issue matching what I'm seeing.
[x] This is not a question. (Questions should be asked on slack (Signup for Slack here) or our forums.)

assertControllerClass does not check FQDN, instead it checks just the same (just the name of the class) as assertControllerName. I know that hypothetically it is possible to have multiple classes in one file, where the both methods can lead to different results, but that is rather an edge case (and bad design).
Code to reproduce the issue

$this->assertControllerClass(Foo\Bar\MyController::class); // error: "not equals mycontroller"
$this->assertControllerName(Foo\Bar\MyController::class); // error: "not equals mycontroller"

Expected results

$this->assertControllerClass(Foo\Bar\MyController::class); // success: "equals foobarmycontroller" (as zend-servicemanager also resolves/normalizes FQDNs)
$this->assertControllerName(Foo\Bar\MyController::class); // error: "not equals mycontroller"

Actual results

assertControllerClass checks only the name of the class (not the FQDN).

I propose to have either a dedicated method assertControllerFqdn or refactor the behavior of the assertControllerClass method and check against the FQDN.
What do you think?

Sorry, I saw that assertControllerName does exactly what I want...


Export Windows: Rightclick on Taskbar icon of exported game says "Godot Engine"

Godot version: 3.2.stable
OS/device including version: Win 64
Issue description:
Right clicking on the Taskbar Icon of the exported game says "Godot Engine" instead of the game name.
Hovering over the taskbar icon correctly shows the Project Name (as set in the Project Settings), equally correct is the name in the window when the game does not run in fullscreen mode.
Steps to reproduce:
Export game to Windows, right click on the taskbar icon.

Did you try to change the "Product Name" in the export preset (requires rcedit like for the icon: https://docs.godotengine.org/en/3.2/getting_started/workflow/export/changing_application_icon_for_windows.html)?

Yes I did that, as I stated. I'm surprised you did not notice, this must be my shortest issue ever ;)
I also have rcedit path asigned. The icon shows up in the taskbar without problem.

So after a restart, I tested the exported project again, turns out "Godot Engine" is now gone, instead what shows up is the File Description I set in the Windows Export Settings under Application.

The information you've viewing with a right click on the taskbar icon is determined by the Windows PE file format, it's not for us to define.
If it shows the FileDescription field (which is one of the available strings, see section "string names" in https://docs.microsoft.com/en-us/windows/win32/menurc/versioninfo-resource#remarks), then it's the one you need to set to customize this field.
The default FileDescription value is indeed "Godot Engine", it's hardcoded in the binary by the Windows Resource file (platform/windows/godot_res.rc) and that's why rcedit is necessary to change it.

Thanks for the info! Is FileDescription then the right name for this field? Every other software I run just shows the software name when I rightclick the taskbar icon.
If it says "File Description", someone who would want to export to Windows but did not know about what you just explained, would most likely feel inclined to write more than the name of the project, maybe even a small paragraph.

Yeah it's a bad name but that's the Windows API, we can't change it.
This could be clarified in tooltips, but we don't have a convenient system to add descriptions to export preset properties for now (contrarily to Project Settings).
So in the meantime this should be documented in the Export docs: https://docs.godotengine.org/en/3.2/getting_started/workflow/export/index.html

I am of course aware that the Godot team does not work for Microsoft ;)
What I meant is the wording as it appears in the Godot Engine.

Or are those auto generated from the application api?

That's the name of the Microsoft string. It would be wrong that we change it as it would then be harder for users to know what it corresponds to. You can find documentation online on how Windows handles it's PE data "File Description", but not for any custom name we might chose that fits a particular use of this field in Windows 10 taskbar right click.

Any screenshot where it's bugged?
I can't reproduce it in 3.2.4 beta4.


Support combining Predicates

This PR adds support for combining predicates together to form compound predicates. Predicates can be combined like the following:
let predicateA: Predicate<String>
let predicateB: Predicate<Int>

let predicateC = #Predicate<String, Int> {
    predicateA.evaluate($0) && predicateB.evaluate($1)
}

This creates a compound predicateC which only evaluates to true when predicateA evaluates to true given the first input, and predicateB evaluates to true given the second input.

@swift-ci please test

Sigh... looks like compiler regression again?

@iCharlesHu it looks like the compiler only hits this issue when asserts are enabled, but without asserts it compiles successfully. I've put this code behind #if FOUNDATION_FRAMEWORK for now until we can resolve this assertion (it looks like it may very well be a false positive given it compiles successfully without the assertion)

@swift-ci please test

@swift-ci please test

Great work on this guys! Really helpful stuff.
It may be early due to to 17.4 version requirement, but could you put some information about the fact that this is possible on the Swift Data docs? Right under here https://developer.apple.com/documentation/foundation/predicate#overview
I had to search for ages just to find out that this is possible.


Scroll To Top button added on every page.

Description
I have added scroll to top button on each and every pahe that take user directly to top as shown in the video.
Related Issues or Pull Requests
#145
Have you read the Contributing Guidelines on Pull Requests?

[y ] Yes
[ ] No

Checklist

[ y] I've read the contribution guidelines.
[ y] I've checked the issue list before deciding what to submit.
[ y] I've edited the README.md and link to my code.

I have added the video of one page this button is visible on every page.
https://user-images.githubusercontent.com/68965499/118270510-cc1a9b80-b4dd-11eb-8c9e-5b198bd8e35e.mp4
@Aasthajain123 @avinashkranjan please have a look at this pr.

Thanks for the PR @ChitvanRamani22. Can you please update the commit message and add a description for the PR. Commit messages are helpful while debugging and should describe the change accurately.

@avinashkranjan done.

Please fix the merge conflict

@avinashkranjan i have resolved the merge conflicts.

@ChitvanRamani22 Resolve the conflicts

@ChitvanRamani22 Kindly change the colour of background of the arrow to colour theme of the project..

@avinashkranjan shall i change it to blue?

@avinashkranjan shall i change it to blue or black?

Use this color #4a008f

@avinashkranjan done!


RTD config file in the repo

As follow-up from this comment, have transposed this here.
Would be nice to have the RTD settings moved into a .readthedocs.yml file in the repo. This would make it easier to see what is going on with RTD. Also if there is a doc building issue, it would be easier for people to tweak it in their own RTD project and submit a fix.

This would be welcome.  If any core contributor wants rights to RTD that doesn't have them and wants to fix this let me know and I'll be happy to add others to the RTD account.


Bad deprecation notices in 0.27.1 ?! Referenced PollWithContextTimeout does not exist ?!

After a bump to 0.27.1 the golang-ci-linter told me

wait.PollImmediate is deprecated: This method does not return errors from context, use PollWithContextTimeout

Looking at the 0.27.1 documentation I find PollWithContext, but no PollWithContextTimeout.
https://pkg.go.dev/k8s.io/apimachinery/pkg/util/wait#PollWithContext
https://pkg.go.dev/search?q=PollWithContextTimeout&m=symbol
Grepping the package sources I find that PollWithContextTimeout is only referenced in the deprecation notices in the comments. No implementation is found. See below.
The nearest similar function looks to be https://pkg.go.dev/k8s.io/apimachinery/pkg/util/wait#PollUntilContextTimeout

% grep -rn PollWithContextTimeout .
./k8s.io/apimachinery@v0.27.1/pkg/util/wait/poll.go:44:// inline usage. All other behavior is identical to PollWithContextTimeout.
./k8s.io/apimachinery@v0.27.1/pkg/util/wait/poll.go:62:// Deprecated: This method does not return errors from context, use PollWithContextTimeout.
./k8s.io/apimachinery@v0.27.1/pkg/util/wait/poll.go:81:// Deprecated: This method does not return errors from context, use PollWithContextTimeout.
./k8s.io/apimachinery@v0.27.1/pkg/util/wait/poll.go:153:// Deprecated: This method does not return errors from context, use PollWithContextTimeout.
./k8s.io/apimachinery@v0.27.1/pkg/util/wait/poll.go:171:// Deprecated: This method does not return errors from context, use PollWithContextTimeout.

What is the actual method to use instead of the deprecated ones ?

Fixed by https://github.com/kubernetes/kubernetes/pull/117143/files
I think we can close this.

I can see this problem in v0.27.3:
SA1019: wait.Poll is deprecated: This method does not return errors from context, use PollWithContextTimeout. Note that the new method will no longer return ErrWaitTimeout and instead return errors defined by the context package. Will be removed in a future release.

WWIW, can also confirm on 0.27.5.

I understand that no one has time, but can no one look into this and see if this is a bug?

can no one look

yep no one looked :)


Enforce 'react/jsx-no-bind' eslint rule

Even though I know about this rule I am not able to use it without
eslint rule. So let's enforce best practices (I believe this is
best practice)...
See: https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md

Please test these changes in Expo:

seems like there are some updates related to graphql beyond the jsx-no-bind? ⚠

Yes, as I said it's a little bit tricky. It forces you to use better component structure and that means that you need to create new components. This leads to smaller Relay fragments => different generated GraphQL files structure.

Cool, probably I missed that, thanks


feat!: when not processed, CSS Modules return a proxy, do not scope CSS Modules class names by default

Closes #1512
This PR implements the following logic:

By default, CSS processing is disabled for every css file

module.* exports a proxy in that case to not affect runtime (meaning, styles.{value} will always return a string - a key)

If processing is enabled (css.include), css is processed and injected into DOM

By default, module.* returns non-scoped class names (styles.module always returns module, but styles.someRandomValue will return undefined)
If you want to enable scoped names, use css.modules.scopeClassNames: true option

How about making generateScopedName depend on classname and filename? This should should prevent class name conflict issues and make it so generated class names don't change when css content changes.
This is what postcss-modules uses in their tests.
https://github.com/madyankin/postcss-modules/blob/a400e145e0ae9e996e51eed81a2e8e2a1f604527/test/test.js#L31-L34

How about making generateScopedName depend on classname and filename? This should should prevent class name conflict issues and make it so generated class names don't change when css content changes.
This is what postcss-modules uses in their tests<EMAIL_ADDRESS>
They are using basename, so it can still be incompatible, if you have /foo/index.css and /baz/index.css for example. We can encode the whole path to fix this, of course. @isaec, what do you think?

This also changes semantics and requires different naming.

Maybe enum css.modules.classNames:

stable - (default) class name + hashed path
scoped - original implementation
raw?, non-scoped?, source? - source class names

How about making generateScopedName depend on classname and filename? This should should prevent class name conflict issues and make it so generated class names don't change when css content changes.
This is what postcss-modules uses in their tests<EMAIL_ADDRESS>
They are using basename, so it can still cause conflicts, if you have /foo/index.css and /baz/index.css for example. We can encode the whole path to fix this, of course, generating _${className}_${encodedFilepath} (_main_32rsfdr3, it won't change when content changes, but will change, if filename is changed, or file is moved to other directory) @isaec, what do you think?
This also changes semantics and requires different naming.

For my uses, the stability was the desired characteristic. If importing the stylesheet has the correct property string mapping, then stable or source both work for me. Stable seems like a good default, still discouraging selector matching for tests (unless you import the style object), but not providing unneeded noise in snapshot testing.

Option scopeClassNames is removed, option classNameStrategy is added with options:

scoped - use css.modules.generateScopeName from user config or fallback to default behaviour, this is how it works in dev and prod
non-scoped - returns just the name
stable - returns the nama and hash, based on filepath, relative to root

I am not familiar with CSS modules, so I'd trust your judgment here. Feel free to merge once you meet the agreement :)


Extract Answers

Realised people might be looking now. Will revisit we have a way to switch/fallback to the answers for testing.


Include product filter to separate common metrics by product

Added a jmx-exporter config file to label common metrics with a product filter. Updated dashboard accordingly.

Be wary that you should make the changes on the bulldog grafan instance, they may get lost otherwise


FAQ when user signed out

Added an FAQ page which user can refer to when he's not signed it.
The 'Get help' link when the user is not signed it will now take them
to this page instead of directly to the "Contact us".
⚠ NOTE: This is based off the GDS Design System branch/PR.
Ticket: https://dsdmoj.atlassian.net/browse/MTP-1834

@ushkarev sorry for the noise, I've rebased (although I suspect it will not be the last rebase considering the traffic in this repository these days) - and the amendments are in this commit so it should be easier for you to review.


Stable Diffusion Quantization

Hey, Can you please elaborate on Quantisation method you used here for SD-1.4. I am trying to implement similar project bit stuck with Quantisation process. I presume you user INT-8 quantisation for deployment on Mobile Device.
How you have achieved that in both TFLITE format and ONNX format. Can you please help me with that.

I applied dynamic quantization to both the TFLite models: the diffusion model and the text_encoder model. However, I encountered difficulties with the diffusion model due to its large size and couldn't find a suitable method to quantize it using the ONNX library at that time. Furthermore, the inference time of the text_encoder model did not significantly improve with the INT8 ONNX model, so I decided to keep the TFLite version for simplicity.
Attached is the notebook I used for converting and quantizing these models in this project.
integerquant.zip


Fixed aws-cli package name

Issue #79

Corrected package name for yum based distributions

I'm not quite sure how to do the automated tests, but I did find out about one of your other tools Terratest. I'll try to make it work. Would appreciate any advice or guides.

The tests are already in place. You just need to run them per these docs: https://github.com/hashicorp/terraform-aws-vault/tree/master/test

The test passed. Here's some of the output: https://gist.github.com/aanafcheh/1acce98ad693d02c3ba54fd5ffe1bf47

Wonderful, thank you!

https://github.com/hashicorp/terraform-aws-vault/releases/tag/v0.9.1


New theorem: Smaller than continuum + completely regular ==> zero dim

Something like this came up in the conversation for issue #189.  This is slightly more general.
(T300) Smaller than the continuum + completely regular ==> zero dimensional
Also generalized (T54) slightly, as it involved the same properties:

(old T54) zero dimensional ==> regular
(new T54) zero dimensional ==> completely regular

(tracking in #188)

Note: this implies [countable + regular ==> zero dimensional].  Because: [Lindelof + regular ==> normal] and [normal + $R_0$ ==> completely regular].

I seem to have made a typo in one of the property tags.  I had the right description above with "completely regular", but it ended up with "normal" instead.  I'll fix it in another PR now.

thanks for that catch


Fix 460

fixes #460 as well as adds some typing and logging

Codecov Report

Merging #461 (9ce098d) into master (9da6642) will decrease coverage by 0.12%.
The diff coverage is 77.85%.

@@            Coverage Diff             @@
##           master     #461      +/-   ##
==========================================
- Coverage   73.56%   73.44%   -0.13%
==========================================
  Files         115      115
  Lines       13916    13986      +70
==========================================
+ Hits        10238    10272      +34
- Misses       3678     3714      +36


Measurements-Quality is not saved with or without template

The quality is when taking a measurement is not being recorded.

fixed with commit f16de69721cf5f7a4e5c8099c032e5a25ac978ea


document file formats for bytes field of AudioSource

Objective
Fixes #6299
Solution
Change one line of documentation.

Change LGTM :) Can you update your PR title to explain what was done so it's easier to skim in the commit history?

👋
Could you change your PR title to something that describe the change? The PR title will end up as the commit in git history and it will improve readability of the git log.
Also, do you know if the formats supported depend on the feature flag enabled, or if those are only used when decoding files?

do you know if the formats supported depend on the feature flag enabled, or if those are only used when decoding files?

As far as I know you could store any bytes you would like in the bytes field, but playback won't work if the bytes aren't one of the supported formats and that format is enabled in the feature flag.

You should run cargo fmt --all. Also check if that link to rodio::decoder::Decoder is working in cargo doc.

bors r+


font selection is not appropriate

Need to change the font of the website, need a more professional way

which font you want to use?

which font you want to use?

like in this all things are looking similar, I am unable to differentiate between the heading, questions, answers. For answers, we should keep the font size small, or it should differ from the questions, and everywhere there is a bold text which is not a good practice.

but now it's seems good


Ability to add custom directory path inputs to cache/proxies/gallery stills/powergrades/captures

Hello,
My goal is to create an automated script to create a new project and save the presets for the specific database. However the request is to have the ability to add custom directory path inputs for
proxy generation location
cache files location
gallery stills location

capture and playback / Capture / Save clips to

Setting powergrade location

with final step to then set as resolve data base preset.

I am eager to learn more about this python package
I see there might already be one made which might work.
(settings.perf.cache_clips_location: Optional[Union[Path, str]])
I will test.
I suppose I could accomplish this task using outside UI - looking forward to learning about this package and eventually adding to it
Thanks for your time.

I figured out how to do part of this in regular API - but I guess my hands are tied if there is missing values in Davinci Resolves main API. As there is no proxy generation location / powergrade location from what I can find in 'GetSettings()'.  ---- but here is how I was able to change Capture, Cache Files and Gallery Stills location.
import DaVinciResolveScript as dvr_script
#Connect to DaVinci Resolve API
resolve_DaV_api = dvr_script.scriptapp("Resolve")
resolve_version_DaV_api = resolve_DaV_api.GetVersion()
print(f"resolve version: {resolve_version_DaV_api}")
project_manager_DaV_api = resolve_DaV_api.GetProjectManager()
#Get Current Database
current_database = project_manager_DaV_api.GetCurrentDatabase()
print(f"current_database: {current_database}")
#Get Current Project
current_project_DaV_API = project_manager_DaV_api.GetCurrentProject()
#Get all settings within that project
all_settings = current_project_DaV_API.GetSetting("")
print(f"all_settings in Project: {all_settings}\n\n")
def set_project_setting(project, setting_name, value):
if project.SetSetting(setting_name, value):
print(f"Success: Setting '{setting_name}' updated to '{value}'")
else:
print(f"Failed: to update '{setting_name}'")
if current_project_DaV_API:
formatted_cache_paths = r"C:/Users/John_Smith/Desktop/TEST"
cache_clip_path_addition = "/CacheClip"
gallery_stills_path_addition = "/.gallery"

CacheClipsLocation_chosen_path = formatted_cache_paths + cache_clip_path_addition if formatted_cache_paths else ""
gallery_chosen_path = formatted_cache_paths + gallery_stills_path_addition if formatted_cache_paths else ""
videoCaptureLocation_chosen_path = formatted_cache_paths if formatted_cache_paths else ""

# Update settings
settings_to_update = {
    #Project Settings/Master Settings
    "perfCacheClipsLocation": CacheClipsLocation_chosen_path,
    "colorGalleryStillsLocation": gallery_chosen_path,
    "videoCaptureLocation": videoCaptureLocation_chosen_path
}

for setting, value in settings_to_update.items():
    set_project_setting(current_project_DaV_API, setting, value)

else:
print("No Current Project found.")


Trigger on peak RSSI

Trigger on peak RSSI #64

Unfortunately this approach won't improve anything as it's too straightforward. The RSSI values are read once per 0.1ms and can vary sensibly (around 2-3 for subsequent reads).
So you might get a value above the threshold and right after that - the value lower than the previously read one. So it will earn you just 0.1ms and won't find a peak at all. Try experimenting.

Thank you for feedback. I tried to improve. Will test further

I have made some changes to peak detection algorithm. Tested, and looks like it's works quite good. Andrey  could you take a look at it?

Thanks for your effort. The code seems ok, but I'm not sure it's really needed. If it behaves the same both with this fix and without it, then I'd avoid unnecessary code complication.
Thank you anyway!

Triggering on peak RSSI should give much improved tracking accuracy,
Example: the first round you pass the gate at the far end away from the tracker, the next lap you fly very close tho the tracker. With threshold measuring, the first lap will be measured a little late, while the second will be measured early because the threshold will be passed earlier as the quad passes closer to the tracker.
When measuring via peak detection, both laps will be be counted equally , as the peak will be at the same moment, albeit a little higher or lower.
Measuring via peak  detection will also make setting the exact correct threshold value easier as it needs to be a little less precise.
This might make 'only' 10-100ms difference, but in droneracing 100ms is a LOT.
There is a reason all the other trackers use measuring by peak instead of threshold ;)

@StarrrLiteNL I somewhat agree, but have you seen the RSSI signal in real time? Believe me, there's no clean peak or nice smooth transition from low to high when approaching the timer.
The suggested approach might improve things a bit, but also might make them a bit worse. But most likely it won't change anything significantly. So I'd avoid making changes to the detection algorithm until they are proved to benefit the accuracy.
As for other timers, don't they really use a threshold? Then how would they detect false peaks if a drone flies on some distance from the timer?

I'm used modified chorus firmware with peak detection, for about half year. It works good, at lest not worse than standard :) I'm not sure if it makes big improvement comparing standard firmware.  Still need to be tweaked. I'm not sure if  ~3ms is enough to detect peak. Possible that SLOPE_DETECTION_ITERATIONS should be increased.
I will experiment more next year :)

@voroshkov , they threshold and peak. Once a channel passes the threshold, it will keep measuring untill it falls below it , and then takes the peak value for time measurement.
The RSSI values should resemble something of a curve, perhaps some smoothing/filtering of the raw RSSI values could help with that?

@StarrrLiteNL, exactly!

Don't get me wrong, I agree with the idea, but need good implementation for it, which will maintain balance between instant tracking and accuracy.
I value the speed of lap reporting and won't like to have a seconds delay between actual passing the finish gate and a "beep" indicating the event.


TODO list for integration of app-model

🧰 Task
list of todos after #4784

[ ] continue replacing procedural QtMenus with app-model registered ones (note PR #4826 provides the base changes and tests required for the menu migration to app-model and all other PRs are based off of this original PR. It should thus be merged first)

[x] view menu: #4826
[x] file menu: #4865
[x] help menu: #4922
[ ] window menu: #4977
[ ] plugins menu:  #4991

[x] allow registration of app keybindings that aren't attached to a specific python object (like viewer or layers).  I think this could be done gradually.  to start, we could by put a object that implements the  KeymapProvider interface at the beginning or end of the ChainMap used to lookup keybindings.  In the longer run, the app-model keybindings registry would be the source of keybindings, and key_bindings.KeymapHandler would be retired.

[ ] extract keypress control from the vispy canvas (https://github.com/napari/napari/issues/3087)

[ ] add documentation to napari.org/plugins that explains how to add menu items, including a list of "contributable" menu ids, (similar to this)

[ ] add documentation to napari.org/plugins explaining exactly what names they can use in their when context clauses in their manifests (like this page for vscode). Related issue: https://github.com/napari/docs/issues/146, also for reference Talley has mentioned wanting to (auto)generate docs using the descriptions in the ContextKeys: https://github.com/napari/napari/pull/4499#issuecomment-1129426998

[ ] add documentation explaining how to use superqt.fonticons to declare icons (and figure out the best way for those icons to change color with the theme)

[ ] decide on and add documentation to explain exactly what types may be used as type hints for dependency injection in a plugin command function.  (these are the names that are declared in the the app.injection_store.namespace)

[ ] replace action manager with commands registry, determine if any deprecation is needed

[ ] consider putting the notification system in the app-model (perhaps upstream)

[ ] create 3 tiers of keybinding scope: default (napari), plugins, and user keybindings (in order of increasing priority)

[ ] rename _qt.get_app to get_qapp... however that's publicly exported, and that needs to be considered

[ ] consider using Actions for layer mode buttons

[ ] move to expressing keybindings using app-models keycodes instead of vispy's  (the app-model tests and demos have a lot of examples of how to express keypresses using the KeyMod and KeyCode enums)

[ ] #4919

[ ] https://github.com/napari/napari/issues/4979

@tlambert03 Thanks for putting this together! do you mind if I convert this issue to a project board so we can track and collaborate?

[ ]  rename _qt.get_app to get_qapp... however that's publicly exported, and that needs to be considered

the napari.qt could still export get_app with a deprecation warning.

Small addition:
Update docs/guides/contexts_expressions to explain their use in context of app-model.
(I am assuming that after full transition to app-model we won't be using the old system at all anymore?)

Documenting some planning/tasks related to app-model integration.
Tasks post #4991 :

Fix for loop in npe1 samples menu  _rebuild_npe1_samples_menu
Use partial in _rebuild_npe1_samples_menu
https://github.com/napari/napari/issues/6516 - in first instance remove use of enums for commandID and menuIDs (which removes 2 files)
https://github.com/napari/napari/issues/6585
Remove lambdas in Window._add_menus (see: https://github.com/napari/napari/pull/4991#discussion_r1429848050 for details)

Other related tasks, where I am not sure of priority/order to be worked on:

https://github.com/pyapp-kit/app-model/issues/52
https://github.com/pyapp-kit/app-model/issues/176
https://github.com/napari/napari/pull/4977
https://github.com/napari/napari/issues/6326 (this may be fixed with menu contributions / nap 6 implementation)
Split https://github.com/napari/napari/pull/6204 (note action manager deprecation occurs here)

Post npe1 deprecation tasks (only listing items relevant/related to this body of work):

deprecate npe1 when adding widgets in _run and deprecate _add_plugin_function_widget and add_plugin_dock_widget (no function/dock widget distinction in npe2
remove npe1 widget tests

Lower priority (?) related tasks:

https://github.com/napari/napari/issues/6524
https://github.com/napari/napari/issues/6232

cc @Czaki @DragaDoncila in case I missed something.

@lucyleeow I think #6643 should also be listed somewhere in here, probably in the lower priority tasks, since we have a workaround for now

Done and added some more!


Scenes loading before clicked with lazy property

Current behaviour
Link to demo: https://snack.expo.io/B1kGRZKDH
If I click the 'SECOND' tab it alerts '2', which is expected. Then if I click back to the 'FIRST' tab, it alerts '3'. This happens in the simulator and on iOS devices every time. Weirdly, it occasionally works correctly in the Snack, but about 80% of the time it doesn't work as expected. Android seems to be fine. I can only get this behavior by clicking a tab to the left of the selected tab.
Expected behaviour
With the lazy property I would expect that it doesn't alert '3' until I click the tab labeled 'THIRD'.
Code sample
https://snack.expo.io/B1kGRZKDH
Your Environment

software
version

ios (device and simulator)
any version

react-native
0.60.3

react-native-tab-view
2.10.0

react-native-gesture-handler
1.3.0

react-native-reanimated
1.2.0

node
10.16.0

npm or yarn
npm

same issue

I'm facing the same issue
Is  #813 related?
@satya164 Have created a small repro in which I reproduced this
https://github.com/M4rk9696/tab-view-lazy-load-bug

software
version

ios or android
both

react-native
0.61.5

react-native-tab-view
2.11.0

react-native-gesture-handler
1.5.2

react-native-reanimated
1.4.0

node
v10.16.0

npm or yarn
yarn

@satya164 What is the purpose for layout.width in the check? I was trying to find the RCA, removing it seems to make it work
https://github.com/react-native-community/react-native-tab-view/blob/b4fc7c4d4a9eb31139e30034eaeb02fde7bb09e9/src/SceneView.tsx#L110

any update ?

@satya164 Can you reopen this please?

In case anyone stumbles across this, I've had a much better experience with https://github.com/ptomasroos/react-native-scrollable-tab-view.

Got same issue

any solution ?

@satya164 What is the purpose for layout.width in the check? I was trying to find the RCA, removing it seems to make it work
https://github.com/react-native-community/react-native-tab-view/blob/b4fc7c4d4a9eb31139e30034eaeb02fde7bb09e9/src/SceneView.tsx#L110

@Mark1626 when I remove layout.width as you suggested,I observed that componentDidMount is called everytime when you change tab and go back so it's not a good option since your scene will be recreated on every focus.

@satya164 What is the purpose for layout.width in the check? I was trying to find the RCA, removing it seems to make it work
https://github.com/react-native-community/react-native-tab-view/blob/b4fc7c4d4a9eb31139e30034eaeb02fde7bb09e9/src/SceneView.tsx#L110

@Mark1626 when I remove layout.width as you suggested,I observed that componentDidMount is called everytime when you change tab and go back so it's not a good option since your scene will be recreated on every focus.


Add Domain La Sapienza of Rome - Italy

@giu88-it I am sorry, the domain studenti.uniroma1.it is removed from our trusted domains list because it was abused in the past. If you are the student of this school, please enroll to GitHub Student Developer Program. Then apply for JetBrains educational subscription with your GitHub account (GitHub tab at https://www.jetbrains.com/shop/eform/students).


Transitions problem

Version
Tell us which versions you are using:

react-native-router-flux v3.30.0
react-native v0.27.0

Expected behaviour
In your example, when going to tab bar, we can see the navigation drawer during the transition, is it normal? Is there a way to hide it?
Second, when I swift left to toggle the navigation drawer, it goes back to the previous view. Is there a props to handle it?

I test on IOS and android. Transitions slow :(

I have a problem with transition on Android.
<EMAIL_ADDRESS><EMAIL_ADDRESS>

@sarovin @Shakarang I have both of these issues too..
<EMAIL_ADDRESS><EMAIL_ADDRESS>

react native 0.28 rename the experimental Navigator name, so is RNRF already adapt that ?

<EMAIL_ADDRESS>use a fork of experimental navigator from<EMAIL_ADDRESS>

I'm getting Native Module cannot be null on RN0.28. Help needed.

@sarovin Have you maybe solved the transition problem on android somehow?

 On device, not simulator.

@ajoshdee This package uses a fork for Nagiator Experimental, please check docs.

Same problem.
It's still happening to me 2 years later with RN 0.56 and<EMAIL_ADDRESS>


Slots compatibility

I am using Jewelcraft which has a number of new slots.  I was hoping that the utility slots would be able to handle it, but dones't seem to work.  The biggest thing I have been able to test is when you make a tome and add it to your tome slot you get a certain amount of etir (mana), and in your mod it does not matter where I put the tome, I get nothing
Not sure if there is a way for you to add or adjust your mod to have these as configurable slots, I love the mod just doesn't quite work 100%.  Also any reason that the food does not have a key to press so you can eat on the fly?

I've checked Jewelcrafting code and it seems there are no compatibility issues. But the reason your extra utility slots could not work is because of Jewelcrafting "2 - Socket System" -> "Maximum number of Sockets" config value. I have no idea how to set it properly but you can try to increase it and see.
After I set "Maximum number of Sockets" to 10 and equipped 3 rings with 3 sockets each and necklace it seems that every socket is working.

I have plans on adding Jewelcrafting custom slots but later after initial issues will be fixed.
You can't use food more often than once per 10-15 minute.  In general you don't need to use food in combat or reactively. And adding more hotbars with food will clutter UI even more. So no food hotbar is deliberate choice but if you have strong arguments it's discussable.

Did you try equipping a book or tome?  I the current inventory mod I am
using there is a specific spot it goes and it give  you etir (or whatever
they are calling mana).  I did not seem to be able to get that to work with
your mod. I did not test rings or other things of that sort since I don't
currently have any.
Also, I do hear you about the food, and I use a mod that extends the
duration of food as well, so yes it not likely that I would need them on a
hot key, and honestly have them out of the backpack is kind of nice
On Thu, Nov 14, 2024 at 8:59 PM Suden @.***> wrote:

I've checked Jewelcrafting code and it seems there are no compatibility
issues. But the reason your extra utility slots could not work is because
of Jewelcrafting "2 - Socket System" -> "Maximum number of Sockets" config
value. I have no idea how to set it properly but you can try to increase it
and see.
After I set "Maximum number of Sockets" to 10 and equipped 3 rings with 3
sockets each and necklace it seems that every socket is working.
image.png (view on web)
https://github.com/user-attachments/assets/f2a7910f-bc9e-498c-9ec4-b15b1730134c
I have plans on adding Jewelcrafting custom slots but later after initial
issues will be fixed.
You can't use food more often than once per 10-15 minute. In general you
don't need to use food in combat or reactively. And adding more hotbars
with food will clutter UI even more. So no food hotbar is deliberate choice
but if you have strong arguments it's discussable.
—
Reply to this email directly, view it on GitHub
https://github.com/shudnal/ExtraSlots/issues/5#issuecomment-2477797929,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ATMSV3OZE2PEJFMVWQQYMZD2AVIRRAVCNFSM6AAAAABRZO7RE2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDINZXG44TOOJSHE
.
You are receiving this because you authored the thread.Message ID:
@.***>

I am not familiar with Jewelcrafting at all. I don't know what is tome or book.

OK, well I thought it was just the book and it seem like it is all the
utility spaces are not registering items put there.  Clearly as they are
working for you  there could be a conflict with other mods possibly
I have attached a couple screenshots.
On Thu, Nov 14, 2024 at 10:51 PM Suden @.***> wrote:

I am not familiar with Jewelcrafting at all. I don't know what is tome or
book.
—
Reply to this email directly, view it on GitHub
https://github.com/shudnal/ExtraSlots/issues/5#issuecomment-2477898574,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ATMSV3JTYVFYF5ZCAJJ2JDL2AVVUDAVCNFSM6AAAAABRZO7RE2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDINZXHA4TQNJXGQ
.
You are receiving this because you authored the thread.Message ID:
@.***>

I installed JC and don't see any book or tome there. Only rings and necks.
I can't see screenshots.

There is another mod. Not Jewelcrafting. There is nothing called tome or something like that in JC.

I guess this is the MagicPlugin

Ahh, you are correct.
If it matters I am also running the Therzie suite of mods, Warfare, Armory, Wizardry, and Monstrum.
Is the MagicPlugin causing the issue?

That's not the issue but not yet implemented compatibility. I'll make it work eventually,

I've checked MagicPlugin and MagicRevamp. Both mods work as intended. I've tested with book and tome and eitr adds accordingly.

idk then, for me it isn't working.
Does the load order of the mods matter?
On Fri, Nov 15, 2024 at 12:57 AM Suden @.***> wrote:

I've checked MagicPlugin and MagicRevamp. Both mods work as intended. I've
tested with book and tome and eitr adds accordingly.
image.png (view on web)
https://github.com/user-attachments/assets/3716df3e-8675-4413-8d64-4c747efc3c11
—
Reply to this email directly, view it on GitHub
https://github.com/shudnal/ExtraSlots/issues/5#issuecomment-2478019723,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ATMSV3IS2QMG3JYTNXTPRIL2AWEK7AVCNFSM6AAAAABRZO7RE2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDINZYGAYTSNZSGM
.
You are receiving this because you authored the thread.Message ID:
@.***>

I guess there is some other mod then.

I have disabled a number of mods that mess with bags and inventory, but not
since the last update you provided I can not equip armor or utility items.
Food, arrows and quick bar seem to be fine.
I tried disabling all the mods except the most critical ones and still had
the same issue, so I don't know if there is some remnant of an old mod that
is messing with yours or what the deal is.
On Fri, Nov 15, 2024 at 10:23 AM Suden @.***> wrote:

I guess there is some other mod then.
—
Reply to this email directly, view it on GitHub
https://github.com/shudnal/ExtraSlots/issues/5#issuecomment-2479144039,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ATMSV3N4WFLHJYOWP73UXK32AYGWZAVCNFSM6AAAAABRZO7RE2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDINZZGE2DIMBTHE
.
You are receiving this because you authored the thread.Message ID:
@.***>

Your current mod list would be helpful

SmarterContainers looks suspicious. I'll check later.

I have made the fix for utility equipment in 1.0.5. Pls check if it works.
I've also tested SmarterContainers and some other mods and it works well. There are couple of mods still waiting to be tested.
You should remove RequipMe because it could mess with tombstone interaction and this mod already has similar configurable feature. Auto equip of weapon and shield I will add in next version where RequipMe will be marked as incompatible.

ok, so I am running you latest version, and it all seems to be working.
Items are being recognize for the values for example the belt is giving the
carry bonus, books are giving me etir.
The only "issue" and this might actually be a feature you intended, is that
I can not drag and drop equipment into my paper doll, example to equip
armor, I must right click it from my inventory and then wait for it to
equip, and to remove I must right click on the paper doll and wait for the
white box to go away then I can drag it to my backpack.  This might be as
designed, but it took me a minute to figure it out.
On Sat, Nov 16, 2024 at 5:16 AM Suden @.***> wrote:

I have made the fix for utility equipment in 1.0.5. Pls check if it works.
I've also tested SmarterContainers and some other mods and it works well.
There are couple of mods still waiting to be tested.
You should remove RequipMe because it could mess with tombstone
interaction and this mod already has similar configurable feature. Auto
equip of weapon and shield I will add in next version where RequipMe will
be marked as incompatible.
—
Reply to this email directly, view it on GitHub
https://github.com/shudnal/ExtraSlots/issues/5#issuecomment-2480504193,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ATMSV3NCR5PBCAAYVZJTOJL2A4LPLAVCNFSM6AAAAABRZO7RE2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDIOBQGUYDIMJZGM
.
You are receiving this because you authored the thread.Message ID:
@.***>

This is by design you're right. Fast equip/unequip is what I strongly dislike in AzuEPI. And strict limit of item must be equipped to be in slot at EaQS is also too restrictive. So this mod is a middleground. You can place item in equipment slot without equipping it. But you must equip/unequip it by hand and wait while performing equip action.
If you press equip on other item after equipping it will swap with current item in slot btw.

I finally get what you meant in second part when items could not be dragged into slot. Fixed in 1.0.7. Now you can drag item in slot like it was in previous version.

Awesome, I will update and check it out...just and fyi Thunderstore mod
manager is only recognizing 1.0.6.
Also, I would like to thank you for being so responsive and working with me
to improve your mod and make it more mod friendly and usable.
On Sat, Nov 16, 2024 at 9:17 PM Suden @.***> wrote:

I finally get what you meant in second part when items could not be
dragged into slot. Fixed in 1.0.7. Now you can drag item in slot like it
was in previous version.
—
Reply to this email directly, view it on GitHub
https://github.com/shudnal/ExtraSlots/issues/5#issuecomment-2480893705,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/ATMSV3KFVCGBZ6D3LXFQ6FT2A74D7AVCNFSM6AAAAABRZO7RE2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDIOBQHA4TGNZQGU
.
You are receiving this because you authored the thread.Message ID:
@.***>

Well more work now means less work in the future. I'm also interested to make mod that doesn't break or lag or cause compatibility issues.


VUEPRESS DOCS!!!

The whole thing.
Documentation generated using Vuepress and Typedoc.
Directions for use:

Once you make changes to the the code in src folder, run npm run docs:gen (at root). This will convert the comments in the TS files to Markdown.
Run npm run docs:dev to view the docs in development mode.

Thank you, i really appreciate it!


fix use boost::regex instead of std::

Proposed changes
Issue Number: close #xxx

Further comments
If this is a relatively large or complex change, kick off the discussion at<EMAIL_ADDRESS>by explaining why you chose the solution you did and what alternatives you considered, etc...

run buildall

run buildall


Visible columns not saved

Describe the bug
When changing visible columns there is no way to save the view. Any update will reset to default set of columns that doesn't even have host config action visible.
To Reproduce
Steps to reproduce the behavior:

Go to web interface
Change visible columns
Refresh
Columns are being reset

Expected behavior
When changing visible columns save the set into browser session at least.
Desktop (please complete the following information):

MacOS 15.1
FireFox 131.0.3 (aarch64) / Google Chrome 130.0.6723.70 (Official Build) (arm64)
pgwatch built on aarch64 MacOS for amd64 linux with #580 change.

It is big enough annoyance that I would classify it more like bug than feature request. Generally normal expectations is that there is some kind of saving of settings. If it wasn't the normal expectation, then I would have classified it as feature request.


Updated .listStyle to be correct as of public release

.grouped does not work in the release version of SwiftUI.
Will need to use GroupedListStyle() instead

Also added a header and footer example to the list.

Thank you for the pull request. :) @maeganjwilson

No problem!


CollectionFlip

Hello, I really love this library but I just am wondering if we can use it to animate UICollectionView.

Thanks for the suggestion @TheSwifter. It shouldn't be too hard to expand onto UICollectionView. Do you have a thought on how you would structure that? I'm going to think on it for the next couple days before deciding whether to take it on, and how to approach it.


Notification on written text

Hey! Great work on your plugin, by the way.
I was wondering, do you believe it would be doable to set up an option to make notifications pop up when anyone mentions specific texts and strings of characters? Would make moderation jobs so much easier.

Sure, I'm just using FluxDispatcher.subscribe('MESSAGE_CREATE', ...) to listen for all messages and then check what user created it. There shouldn't be anything stopping you from filtering the results based on anything you want.
However, I believe that kind of task should probably just be given to a bot on the server.
I also wouldn't add it to this plugin since I don't think it fits its purpose, it's called "User Notify" after all.


Move the device ID generation to ratbagctl

See #641 for a longer explanation.
Fixes #641

Urgh. this fails the test because our ratbagctl test suite crazy merge mix doesn't fetch the custom device names in the fast run (and the slow run fails elsewhere).

Alright, updated and ready for review now :)


Marten.MartenCommandException - System.InvalidCastException

Hey guys, I love the vision of Marten and I'm trying it out on a prototype project. However I keep getting this particular error when querying.
Marten.MartenCommandException: Marten Command Failure:

select column_name, data_type, character_maximum_length
from information_schema.columns where table_schema = :arg0 and table_name = :arg1
order by ordinal_position;

select a.attname, format_type(a.atttypid, a.atttypmod) as data_type
from pg_index i
join   pg_attribute a on a.attrelid = i.indrelid and a.attnum = ANY(i.indkey)
where attrelid = (select pg_class.oid
                  from pg_class
                  join pg_catalog.pg_namespace n ON n.oid = pg_class.relnamespace
                  where n.nspname = :arg0 and relname = :arg1)
and i.indisprimary;

SELECT
  U.usename                AS user_name,
  ns.nspname               AS schema_name,
  pg_catalog.textin(pg_catalog.regclassout(idx.indrelid :: REGCLASS)) AS table_name,
  i.relname                AS index_name,
  pg_get_indexdef(i.oid) as ddl,
  idx.indisunique          AS is_unique,
  idx.indisprimary         AS is_primary,
  am.amname                AS index_type,
  idx.indkey,
       ARRAY(
           SELECT pg_get_indexdef(idx.indexrelid, k + 1, TRUE)
           FROM
             generate_subscripts(idx.indkey, 1) AS k
           ORDER BY k
       ) AS index_keys,
  (idx.indexprs IS NOT NULL) OR (idx.indkey::int[] @> array[0]) AS is_functional,
  idx.indpred IS NOT NULL AS is_partial
FROM pg_index AS idx
  JOIN pg_class AS i
    ON i.oid = idx.indexrelid
  JOIN pg_am AS am
    ON i.relam = am.oid
  JOIN pg_namespace AS NS ON i.relnamespace = NS.OID
  JOIN pg_user AS U ON i.relowner = U.usesysid
WHERE
  NOT nspname LIKE 'pg%' AND
  i.relname like 'mt_%';

select constraint_name
from information_schema.table_constraints as c
where
  c.constraint_name LIKE 'mt_%' and
  c.constraint_type = 'FOREIGN KEY' and
  c.table_schema = :arg0 and
  c.table_name = :arg1;

select column_name, data_type, character_maximum_length
from information_schema.columns where table_schema = :arg2 and table_name = :arg3
order by ordinal_position;

select a.attname, format_type(a.atttypid, a.atttypmod) as data_type
from pg_index i
join   pg_attribute a on a.attrelid = i.indrelid and a.attnum = ANY(i.indkey)
where attrelid = (select pg_class.oid
                  from pg_class
                  join pg_catalog.pg_namespace n ON n.oid = pg_class.relnamespace
                  where n.nspname = :arg2 and relname = :arg3)
and i.indisprimary;

SELECT
  U.usename                AS user_name,
  ns.nspname               AS schema_name,
  pg_catalog.textin(pg_catalog.regclassout(idx.indrelid :: REGCLASS)) AS table_name,
  i.relname                AS index_name,
  pg_get_indexdef(i.oid) as ddl,
  idx.indisunique          AS is_unique,
  idx.indisprimary         AS is_primary,
  am.amname                AS index_type,
  idx.indkey,
       ARRAY(
           SELECT pg_get_indexdef(idx.indexrelid, k + 1, TRUE)
           FROM
             generate_subscripts(idx.indkey, 1) AS k
           ORDER BY k
       ) AS index_keys,
  (idx.indexprs IS NOT NULL) OR (idx.indkey::int[] @> array[0]) AS is_functional,
  idx.indpred IS NOT NULL AS is_partial
FROM pg_index AS idx
  JOIN pg_class AS i
    ON i.oid = idx.indexrelid
  JOIN pg_am AS am
    ON i.relam = am.oid
  JOIN pg_namespace AS NS ON i.relnamespace = NS.OID
  JOIN pg_user AS U ON i.relowner = U.usesysid
WHERE
  NOT nspname LIKE 'pg%' AND
  i.relname like 'mt_%';

select constraint_name
from information_schema.table_constraints as c
where
  c.constraint_name LIKE 'mt_%' and
  c.constraint_type = 'FOREIGN KEY' and
  c.table_schema = :arg2 and
  c.table_name = :arg3;

select column_name, data_type, character_maximum_length
from information_schema.columns where table_schema = :arg4 and table_name = :arg5
order by ordinal_position;

select a.attname, format_type(a.atttypid, a.atttypmod) as data_type
from pg_index i
join   pg_attribute a on a.attrelid = i.indrelid and a.attnum = ANY(i.indkey)
where attrelid = (select pg_class.oid
                  from pg_class
                  join pg_catalog.pg_namespace n ON n.oid = pg_class.relnamespace
                  where n.nspname = :arg4 and relname = :arg5)
and i.indisprimary;

SELECT
  U.usename                AS user_name,
  ns.nspname               AS schema_name,
  pg_catalog.textin(pg_catalog.regclassout(idx.indrelid :: REGCLASS)) AS table_name,
  i.relname                AS index_name,
  pg_get_indexdef(i.oid) as ddl,
  idx.indisunique          AS is_unique,
  idx.indisprimary         AS is_primary,
  am.amname                AS index_type,
  idx.indkey,
       ARRAY(
           SELECT pg_get_indexdef(idx.indexrelid, k + 1, TRUE)
           FROM
             generate_subscripts(idx.indkey, 1) AS k
           ORDER BY k
       ) AS index_keys,
  (idx.indexprs IS NOT NULL) OR (idx.indkey::int[] @> array[0]) AS is_functional,
  idx.indpred IS NOT NULL AS is_partial
FROM pg_index AS idx
  JOIN pg_class AS i
    ON i.oid = idx.indexrelid
  JOIN pg_am AS am
    ON i.relam = am.oid
  JOIN pg_namespace AS NS ON i.relnamespace = NS.OID
  JOIN pg_user AS U ON i.relowner = U.usesysid
WHERE
  NOT nspname LIKE 'pg%' AND
  i.relname like 'mt_%';

select constraint_name
from information_schema.table_constraints as c
where
  c.constraint_name LIKE 'mt_%' and
  c.constraint_type = 'FOREIGN KEY' and
  c.table_schema = :arg4 and
  c.table_name = :arg5;

select count(*) from information_schema.sequences where sequence_schema = :arg6 and sequence_name = :arg7;
SELECT pg_get_functiondef(pg_proc.oid)
FROM pg_proc JOIN pg_namespace as ns ON pg_proc.pronamespace = ns.oid WHERE ns.nspname = :arg8 and proname = :arg9;

SELECT format('DROP FUNCTION %s.%s(%s);'
             ,n.nspname
             ,p.proname
             ,pg_get_function_identity_arguments(p.oid))
FROM   pg_proc p
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
WHERE  p.proname = :arg9
AND    n.nspname = :arg8;

SELECT pg_get_functiondef(pg_proc.oid)
FROM pg_proc JOIN pg_namespace as ns ON pg_proc.pronamespace = ns.oid WHERE ns.nspname = :arg10 and proname = :arg11;

SELECT format('DROP FUNCTION %s.%s(%s);'
             ,n.nspname
             ,p.proname
             ,pg_get_function_identity_arguments(p.oid))
FROM   pg_proc p
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
WHERE  p.proname = :arg11
AND    n.nspname = :arg10;

Column is null ---> System.InvalidCastException: Column is null
   at Npgsql.BackendMessages.DataRowMessage.CheckNotNull()
   at Npgsql.NpgsqlDataReader.<ReadColumn>d__102`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Npgsql.NpgsqlDataReader.GetString(Int32 ordinal)
   at Marten.Storage.Function.fetchDelta(DbDataReader reader, DdlRules rules)
   at Marten.Storage.Function.CreatePatch(DbDataReader reader, SchemaPatch patch, AutoCreate autoCreate)
   at Marten.Schema.SchemaPatch.Apply(NpgsqlConnection conn, AutoCreate autoCreate, ISchemaObject[] schemaObjects)
   --- End of inner exception stack trace ---
   at Marten.Schema.SchemaPatch.Apply(NpgsqlConnection conn, AutoCreate autoCreate, ISchemaObject[] schemaObjects)
   at Marten.Storage.Tenant.generateOrUpdateFeature(Type featureType, IFeatureSchema feature)
   at Marten.Storage.Tenant.ensureStorageExists(IList`1 types, Type featureType)
   at Marten.Events.EventStore.FetchStreamAsync(Guid streamId, Int32 version, Nullable`1 timestamp, CancellationToken token)
   at BCI.Prototype.WebAPI.Processing.MartenEventStore.<Get>d__6.MoveNext() in /agent/_work/9/s/BCI.Prototype/src/BCI.Prototype.WebAPI/Processing/MartenEventStore.cs:line 53
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at CQRSlite.Domain.Repository.<LoadAggregate>d__6`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at

....

The calling code looks like this:
await _semaphore.WaitAsync(cancellationToken);

using (var session = _store.LightweightSession(IsolationLevel.RepeatableRead))
{
   try
   {
       var martenEvents = await session.Events.FetchStreamAsync(aggregateId, token: cancellationToken);

       return martenEvents.Select(x => (IEvent)x.Data)
               .Where(x => x.Version > fromVersion)
               .ToArray();
   }
   catch (Exception ex)
   {
       Log.Fatal(ex, "Marten failed Get({aggregateId}, {fromVersion}) with {type}: {message}", ex.GetType().Name, ex.Message, aggregateId, fromVersion);
       throw;
   }
   finally
   {
       _semaphore.Release();
   }
}

The semphore is to limit the connections to the database, because the system is highly concurrent. I can't reproduce locally but using any cloud provider (tried with hosted postgres in Azure, GCP and in an isolated postgres instance in kubernetes) it occassionally throws the above exception.
I've been looking through the documentation and I can't figure out what I'm doing wrong.

@joakimjm This one is going to be irritating because there's quite a bit of code to look through. You're blowing up when Marten is trying to validate the current state of the database objects for I'm guessing the event store.
As a workaround, can you generate all the database schema locally, then use that SQL script to set up your hosted database, then make sure that StoreOptions.AutoCreate == AutoCreate.None in the production configuration so Marten doesn't even try to run those queries?
I'll try to harden Marten itself for whatever the null thing is when I can.

Jeremy

Hey Jeremy - thanks for your suggestion. I've started using AutoCreate.None and I haven't had any errors since.

Cool, I'm closing this for now.


feat: add api to handle stripe webhook

Description: 概要

Changes: 変更内容

Changes

feat: add api to handle stripe webhook (b15c0a2fcc86744889c308bab02975d0aaeb3964)
fix: eslint (b842ed2ecad03da02ee97ebdda4057faf10b1a8a)
fix: typecheck (ee6b89b243c5d57d8db637d163785976d9e2ebe2)

Expected Impact: 影響範囲

Operating Requirements: 動作要件

Additional context: 補足

Codecov Report

Merging #168 (ee6b89b) into release/next-v0.19.2 (87f1369) will decrease coverage by 0.34%.
The diff coverage is 50.00%.

@@                   Coverage Diff                    @@
##           release/next-v0.19.2     #168      +/-   ##
========================================================
- Coverage                100.00%   99.65%   -0.35%
========================================================
  Files                       147      147
  Lines                      2008     2020      +12
  Branches                    236      238       +2
========================================================
+ Hits                       2008     2013       +5
- Misses                        0        7       +7

Impacted Files
Coverage Δ

shared/constants/index.ts
100.00% <ø> (ø)

apps/server/packages/infra/payment/index.ts
89.39% <41.66%> (-10.61%)
:arrow_down:

apps/server/config/env.ts
100.00% <100.00%> (ø)

Continue to review full report at Codecov.

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


Web interface: Changes of settings under Media only apply for printing if Save Changes is clicked under Printing Defaults

In the PostScript Printer Application I set up a printer, it gets assigned a make/model and then I can click "Media", tell which paper is in which tray, click "Save changes" at the bottom, and then click "Printing Defaults" where I can set the default for the other options (and also select the tray from which I want to print). If I do nothing here because the paper I want to print on is in the first tray and the other settings are also what I need, I do not click anything, click on the printer name to get back to the printer's page and click "Test Page". The test page prints, but in Letter size whereas I have told under "Media" that my tray contains A4 paper. But when I click "Save Changes" under "Printing Defaults", even without changing anything and then print the test page again, it comes out in A4 size.
In the PostScript Printer Application the data about trays, paper sizes, and other options comes from PPD files and they usually have Letter as default paper size. So on the "Media" screen all trays are shown with the default paper size, Letter. I switch that to A4 as I am in Europe where one uses A4 paper and click "Save Changes". With this I assume that the page size is A4 now, especially that the "Printing Defaults" page shows in the tray selection drop-down that tray 1 loaded with A4 paper is selected, but in reality an invisible default choice iwth the original default paper size of Letter is active.
The click on "Save changes" under "Media" should not only update the media_ready[] array in the pappl_pr_driver_data_t data structure of the print queue but also set the media_default to the entry of the selected tray (or of the first tray if none is selected).

This patch fixes this issue:
refresh-media-default-when-changing-media-ready.patch.txt
It simply lets the papplPrinterSetReadyMedia() function refresh the media_default record in the printer data right after having updated the array of ready media, so changes in the tray selected by default are immediately reflected.

Some important notice about the patch:
The
  if (i >= printer->driver_data.num_source)
    printer->driver_data.media_default = printer->driver_data.media_ready[0];

after the loop is needed as a paper source can also disappear, especially if in the PostScript Printer Application under "Device Settings" the seetings under "Installable printer accessories" get changed.

I have applied this patch to the Snap of the PostScript Printer Application now, meaning that it gets tested this way, but for reproducing this bug the unsnapped PostScript Printer Application or any other Printer Application should be used.

I can reproduce this bug also with testpappl of the PAPPL package and my HP OfficeJet Pro 8730. The problem occurs when I do not apply the patch and goes away with the patch applied.

@tillkamppeter This isn't the right place to "fix" this - the default media shouldn't be changed when setting the ready media, particularly if the source in the default media isn't set. The web interface is the only place that we limit media-default to the list of ready media, so that should be where this change should be made (with a preference of preserving the media size first...)

Most important is that the user does not get something completely unexpected when he sets the "Media" settings to what he has actually loaded into the trays (for example that if he sets the media size in all trays to A4 that the job comes out in Letter).
Also if the default media setting in the driver data does not correspond with any of the tray's media, the physical printer cannot print with these settings (as it seems that the print job is sent with exactly the settings in media_default). Therefore media_default must be set to the media of one of the trays. I had selected the tray which is set by media_default.source as this is also the media displayed under the "Printing defaults".
so what you would think to set as media_default after having changed the ready media settings is at first checking whether the current tray has loaded the size which is set in media_default.size_name and only if it matches stay with the selected tray and otherwise find the first tray with the matching size, and if none matches in size, use the currently selected tray again?
I am also OK to do the setting of media_default for the updated ready media in the web interface instead of in the driver data code.

The default media is completely invisible in the web interface. one sees only the ready media on the "Media" page and on the "Printing Defaults" page one sees the ready media for the source set in the default media.
So what has to be changed would be to add a "Default Media" entry to the "Media" page, like
Default Media

                A4        [ ] Borderless  Plain Paper

Ready Media

Tray 1 Media:   A4        [X] Borderless  Plain Paper
Tray 2 Media:   A3        [ ] Borderless  Plain Paper
Envelope Media: Env 10    [ ] Borderless  Plain Paper

The user can now configure the ready media for all his trays and also default paper size, borderless, and paper type on the Media page. On the "Printing Defaults" page the drop down will get one extra item (the first item) saying "Default Media: A4, Plain Paper" for the user being able to select the default media instead of an entry of the ready media. But the media selected on "Printing Defaults" always should be used, as otherwise the Printer Application is not intuitive. The user expects the settings in the web interface to be used.

To make the Printer Application behave as the web interface suggests, without modifying the web interface, jobs have to be printed with the ready media in the tray selected by the default media (the one which appears in the "Media" drop-down of the "Printing Defaults" page). This is what the user tells that he has in his printer, and if he does not configure the ready media on the "Media" page it is the default media anyway (at least in my PostScript Printer Application as there I initialize the ready media with the default media).
A patch which would do this is here:
job-create-print-options-use-media-ready.patch.txt

@tillkamppeter The default media should be one of the ready media, so PAPPL's web interface enforces that. I am not going to make this complicated or infinitely configurable.

How does PAPPL's web interface enforce that the default media is one of the ready media? How can the user see which of the ready media is the default media? How can the user configure the default media via the web interface?

@tillkamppeter You can only pick one of the ready media from the printing defaults page.

@michaelrsweet that I can pick only one ready media from the Printing Defaults page is clear to me, it is the ready media I select to print on.
My problem is the following:
I create a new printer, has Tray 1 and Tray 2, so the driver gives me two ready media and one default media in the driver_data structure. The driver sets the default media to Tray 1, Letter, not borderless, plain paper and the ready media get initially filled with the paper size, type and, margins of the default media: Letter, not borderless, plain paper. The Media page shows the two appropriate entries and on the Printing Defaults page Tray 1, the source defined in the default media is selected.
If a user prints immediately, paper is taken from Tray 1 and it is assumed that it is Letter-sized plain paper and the printing is not done borderless.
Now many users set the ready media on the Media page to what they have in their printer. For example I set A4 borderless plain paper for Tray 1 and A3 borderless plain paper for Tray 2. I save the changes on the Media page and switch to Printing Defaults. Tray 1, the source of the default media is still selected, and the drop-down shows what paper I have in Tray 1: A4 borderless plain paper. Now I print a job, but the pages do not get scaled into the borderless A4 size but into Letter size with margins, as the job processing function of PAPPL uses the default media. What I expect is what I have told to be in Tray 1 on the Media page and displayed in the Media drop-down on the Printing Defaults page: My job being scaled onto borderless A4 paper (I have set "print-scaling" to "fill"). Especially as paper size, margins, and type of the default media are nowhere visible in the web interface.
With the little patch which I attached two comments earlier it works this way. It sould work at least this way if the user does not specify a page size with the job, nor the file having a specified page size (being an image file for example, or PDF/PostScript when print-scaling is set to fill or fit). If a page size is given with the job, the ready media should get searched for this size and only if it is not available one could fall back to the ready media of the default tray )or the manual tray if the printer has one?).

Try this:
[master 52b7492] Update the default media when the ready media for the corresponding source is changed (Issue #164)

It is working as expected now. Thank you very much.


Improve category support for layers

Improve the support for layer categories :

The order addLayer is called should define the draw order of layers within their category. I.e., addLayer should add the layer to the end of its category, inserting it into the overall layer list if necessary.
A defaultCategories array should define the draw order of the categories themselves.

Added support to insert a layer into the layer list based on category. If no category is given then the base category is assigned to the layer.