Profile page not working & there is  no mail component

Issue type
I'm submitting a ...  (check one with "x")

[x] bug report
[x] feature request
[ ] question about the decisions made in the repository

Issue description
Current behavior:

the profile page is not working
Expected behavior:

I want a profile, and signup form with real-time username availability
it is quite surprising that there is no mail component in this dashboard

You are telling us what you want and suddenly you speak of a mail component.
But you are also saying that the profile page is not working?
Please provide a description and maybe some code of what exactly is the matter, so we can help you.

But you are also saying that the profile page is not working?
Please provide a description and maybe some code of what exactly is the matter, so we can help you.

actually I want a dedicated profile page and mail component

First you need to get your authentication working. Then based on the logged in user u can fill your profile page with your user profile, which you get when you query your web api, for example.
First step: https://akveo.github.io/nebular/docs/auth/introduction#auth-module

First you need to get your authentication working. Then based on the logged in user u can fill your profile page with your user profile, which you get when you query your web api, for example.
First step: https://akveo.github.io/nebular/docs/auth/introduction#auth-module

and what about mail component

You mean like an inbox, outlook/gmail, etc? As far i i know there is none in NGX Admin/Nebular, but you can always use an opensource or third party angular component or plugin to fulfill your needs.

You mean like an inbox, outlook/gmail, etc? As far i i know there is none in NGX Admin/Nebular, but you can always use an opensource or third party angular component or plugin to fulfill your needs.

Please suggest any plugin or tutorial by which I'm able to use any codepen based template to achieve this


Typo "@ID(Integer)"→"@ID(Integer)"

bold with escape characters
https://docs.microsoft.com/en-us/sql/reporting-services/report-data/element-path-syntax-for-xml-report-data-ssrs?view=sql-server-2017

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

Verified the update.
@hyoshioka0128 Thanks for submitting the fix.


Sprint action staging

Resolves #175

Coverage remained the same at 82.796% when pulling 104abf0ce52ac1c43556a2f7e1d0a01e7f5e45e1 on sprint-action-staging into ee9084d55fecaf92baa1b9f452104445b4e450ae on master.


Multiple tab stops inside collection components

Provide a general summary of the feature here
We are developing a rather typical e-commerce storefront with interactive product cards, recommendation carousels and facet filtering based on a custom component library on top of react-aria hooks.
In our latest design phase our team has done extensive work on an accessible  <Carousel /> & <Accordion /> component leveraging react-aria's <Virtualizer /> and new collection package. These components were designed to become the base on top of which to build our <Filter />, <CardCarousel /> & <CardGrid /> components, all of which represent collection components with unknown, complex, focusable content inside each item.
As we retrospect, we would like to report on obstacles we faced while utilizing existing hooks and subsequently collect feedback on an extension to useSelectableCollection() we could see introduced into react-aria.
Since we know this hook lies at the core of react-aria we decided to open this issue to discuss potential approaches to making react-aria more suitable for complex interactive collections.
For the purpose of this issue, we will mainly narrow on focus behavior and tab sequence of collection components, hoping to gain insights into the decision process and exact accessibility requirements the Spectrum team has for collections.
🤔 Expected Behavior?
While inside the cell, tab, shift+tab and arrow keys can be used to navigate the cell content just like inside a <TabPanel />, fully contained inside the cell, not propagated and storing the last visited focusable element. A click on the cell would remain to set the focused key of the outer collection.
We would love to discuss the background in making collections single tab stop and the feasibility of integrating the proposal into the current state of react-aria, as we would save some bandwith by re-using existing hooks.
😯 Current Behavior
While implementing our use case, we noticed each focusable element inside a cell has to be stepped through to reach the next cell. When discovering a product grid, this presents rather bad UX in our opinion, calling for a way to skip to the next cell.
The issue is worsened by a loss of focus scope when leaving the cell, as the returning focus is placed on the first focusable element inside the cell rather than the last visited. Additionally, arrowup or arrowdown interactions in nested components are not discarded in the cell navigation, causing a jump in the row instead of proper interaction.
💁 Possible Solution
The likely obvious thought would be to add a new keyboard combination to jump to the next cell, but we found it to be rather infeasible as most sensible combinations are already taken up by basic cell navigation or (multi) selection of cells.
In order to solve all issues, we would like to discuss an alternative navigation mode: multi tab stop
In a similar way to the <Tabs /> component, a cell content would pose as the tab panel. While focus is on a cell, arrow key navigation can be used to move between cells. When the desired cell is reached, tab moves the focus inside the cell or outside the collection, depending on whether the cell contains a focusable element.
🔦 Context
Out of the box, react-aria collections can operate in two tab sequences: tab navigation & single tab stop
This design works wonderfully in most scenarios, but becomes rather unhandy when dealing with cells containing a large amount of focusable elements. Real world applications of such use-cases can often be seen in modern project management apps, but also in e-commerce applications, both notoriously troubled with bad accessibility.
💻 Examples
No response
🧢 Your Company/Team
No response
🕷 Tracking Issue
No response

Thanks for the feedback. I can provide the starting information: What patterns are we currently supporting? Each component  and hook page in our docs generally has a link to the Aria pattern we have implemented.
For tables, that's data grid
Grid (Interactive Tabular Data and Layout Containers) Pattern
Heading: Keyboard Interaction - Setting Focus and Navigating Inside Cells
Note, we have not implemented edit mode yet.

I think the allowsTabNavigation option works as you are describing? You can use tab to move to focusable elements within a cell (and eventually out of the whole collection), and arrow keys to move between cells.

Thanks for the feedback. I can provide the starting information: What patterns are we currently supporting? Each component and hook page in our docs generally has a link to the Aria pattern we have implemented.
For tables, that's data grid Grid (Interactive Tabular Data and Layout Containers) Pattern Heading: Keyboard Interaction - Setting Focus and Navigating Inside Cells Note, we have not implemented edit mode yet.

@snowystinger Thanks for referencing the grid pattern here. Our team only looked at the appropriate patterns of Accordion and Carousel, so we totally missed that there is an edit mode applied not only for input content but all complex content. This mode seems to be what we are looking for!
We implemented both ‘’, ‘’ and ‘’ with the behavior of edit mode, only with ‘Tab’ as the entering key. Instead, either ‘Enter’ or ‘F2’ would be used to put focus on the the last focused child within the cell.
I figure the focus is meant to be restored accordingly when re-entering the cell? Any idea how interfering ‘Esc’ key event would be treated?
Are there concrete plans or API spec to get this mode into react-aria? We could maybe provide a draft here after adjusting our keyboard control slightly and assesing how much work it is to port our everything to react-aria naming and style.

I think the allowsTabNavigation option works as you are describing? You can use tab to move to focusable elements within a cell (and eventually out of the whole collection), and arrow keys to move between cells.

@devongovett Unfortunately allowsTabNavigation doesn’t do the trick for us because since it lacks functionality to skip cell content in the tab sequence. This becomes bad UX when having a lot of focusable elements inside each cell and potentially hundreds of cells to discover.
Its also wasnt designed to deal with interfering arrow navigation and doesnt restore focus on the last focusable child within the cell.

Unfortunately allowsTabNavigation doesn’t do the trick for us since it wasn’t designed to deal with interfering arrow navigation in nested children and doesn’t restore focus on the last focusable child within the cell.

Do you happen to have a example/reproduction you can share with us? The team is having a bit of a hard time understanding the exact behavior here.

On this note, I have a question: In case edit mode is added to useSelectibleCollection(), would an Accordion or Carousel be using this mode?

Accordion and Carousel would not use edit mode I imagine, were you imagining a case where those components would use the arrow keys to cycle through the accordions/carousel view thus interfering with things like textfields within those components?

@LFDanLu I just hacked together a small demo. As mentioned, you will notice the following:

Using arrowup & arrowdown on nested children will bubble up to the container, moving the cell focus
When leaving the collection and re-entering it, focus is not restored to the last visited element, but to its cell.

What would be required, and what we implemented, is a way to "enter" the cell causing key listeners to pause on the container until exited. In my understanding, this is what edit mode also implements.

Gotcha, thank you for the demo. Last I remember from our work on edit mode (which "paused" all the grid navigation listeners when the user pressed Enter and renabled them when hitting Esc) was that we felt it was fairly non intuitive and it wasn't very clear to the user when they were in edit mode or not. It also ran into the issues that you mentioned with regards to collisions between Esc/Enter (e.g. if you were interacting with a searchfield where Esc clears the field, would the user know that you would need to hit Esc again to exit edit mode?). I believe @devongovett has worked on a second iteration that behaved differently, but I'm not sure of the details myself.
As for Accordion and Carousel, it looks like arrow key navigation is optional in the aria pattern for Accordion and not covered for Carousel hence my original stance that it those wouldn't need edit mode. I'm not sure if we would implement them with collection behavior like support on our end but I agree that they will need edit mode support if we did want to go down that route.
I think what you've described in the "Possible Solutions" sound promising, but will have to mull it over/play around with an implementation. I assume you can move from inside the cell back to focusing the entire cell, thus restoring all the collection event handlers (aka row selection and cell navigation via arrow keys would be enabled again?)

I assume you can move from inside the cell back to focusing the entire cell, thus restoring all the collection event handlers (aka row selection and cell navigation via arrow keys would be enabled again?)

Yes that’s exactly right 👍 Although there remain UX issues in communicating where the focus will move when trying to enter the cell. The cell might not contain focusable content, thus landing either inside the cell or outside the collection.
While we could ensure a focusable panel, it would be visually identical to the cell. We decided on the Tab key behavior since its pretty much guarantueed to not cause any collisions.

Talked with the team today and the consensus was that we'd be interested in supporting something like this within useSelectableCollection but we'll need to play around with it some more. Roughly we imagine the flow to be something like so:

Arrow keys to navigate between cells
use Tab to enter a cell to focus the contents. Tabbing once more when you are at the last focusable element in the cell would tab you out of the collection component
Shift + Tab/Escape would return focus to the cell allowing you to once more use the arrow keys to navigate between the cells
As for handling events and preventing key navigation from happening when you are inside the cell, we were thinking about stopping event propagation or something by default in textfields/etc but the capturing nature of some of the listeners in the hooks will have to be tweaked, still up in the air about this one

We had a question about your implementation: how do you exit back to focusing the cell when you are inside it? I had assumed Tab handles entering/exiting the cell but someone pointed out that this would be a focus trap hence why our theoretical flow uses Shift + Tab/Escape specifically to exit back to the cell level.
As for Accordion, the interactive elements that would use arrow keys/other interactions would theoretically be in the Accordion content rather than the Accordion header so thus arrow key events won't move focus through the Accordion so no need for edit mode or something like that theoretically. Carousel is still up in the air since we haven't implemented it yet

@LFDanLu Sounds great 👍 Let us know how we can help!
To answer your question i can hopfully refer to:

We implemented both <Accordion />, <CardView /> and <Carousel /> with the behavior of edit mode, only with Tab and Shift+Tab as the entering/exiting key.

We check whether the focus is currently on the first focusable element of the cell before making the decision whether to exit the cell. This ensures even components with Shift + Tab interaction are safe from collisions. Shift+Tab also walks you back in order therefore bringing you to the last focusable element of the cell when you re-enter from the bottom.
In regards to <Accordion />, a lot of e-commerce designs often require active filters to be represented as a selectable <TagGroup /> placed inside the <h3 /> while the <DisclosurePanel /> is collapsed.
As for your first spec draft, collisions only occur because of the Esc key interaction, right?

@nwidynski Thanks for the detailed reply! The details about your Accordion implementation as a collection component is very interesting, at the moment our own Accordion component isn't a collection component but I'm not sure we've considered the focus challenges you outlined. Just to clarify, could you expand some more on these focus scenarios? I was imagining that you ran into focus being lost when a tag was removed that the user was currently focused on but shouldn't the TagGroup handle that? Or what it that an Accordion header itself may be removed and thus focus needs to move else where inside the Accordion as a whole instead?

@LFDanLu Yep, we dynamically remove the entire<AccordionItem /> out of the collection when the facet cant yield any result.
You can imagine the following scenario:
Specific items may have unique facets. When a user narrows a common facet (e.g category), those items may not appear in the result set. We can subsequently auto-remove the unique facet out of the<Accordion />.
Changes to the result set can happen through user interaction but also programmatically as updates are streamed in.

I made a small recording of it
https://github.com/user-attachments/assets/0566b7db-0af4-4499-9321-1b4d3393d337

Hey hey,
I spent some of my time updating the selectable item / collection hooks what do you think about it? #7215

Thanks! I'll see if I or someone on the team can take a look soon


instant support

When I try and add the following to enable instant support:
<manifest xmlns:dist="http://schemas.android.com/apk/distribution"
    ... >
    <dist:module dist:instant="true" />
    ...

~ https://developer.android.com/guide/app-bundle/instant-delivery
I get a immediate crash and stack trace "Unable to start activity...No Activity found to handle Intent".  My guess is that it is something to do with the splash screen...I can't seem to figure out how to copy exact stack trace but it is easy to reproduce...just check the "Deploy as instant app" to the "Run/Debug Configuration"
Can you please update svgomg-twa manifest to support instant?

Closing the issue here in favour of tracking it in Chromium Bugs


[Bug]: Chat memory not working anymore

Before Reporting

[X] I have checked FAQ, and there is no solution to my issue
[X] I have searched the existing issues, and there is no existing issue for my issue

What happened?
I use Chat with chat model claude-3-5-sonnet-latest, a context window of 32770 and Memory set to "No Limit".
Since version 0.35.0 (426) it seems the chat has no memory of previous messages anymore.
How to reproduce the bug.
After discussing a small change with two files as reference (input tokens used: 4337, output tokens used: 1008) I wanted to have receive a summary of the changes as a commit message which could not be provided.
Prompt:

write a commit message for the change we have discussed in this conversation

Response:

I don't see any previous discussion about code changes in our conversation. This appears to be the first message in our chat. Without knowing what changes were made, I cannot write an appropriate commit message.
Could you please:

Share the changes that were made, or
Reference the previous discussion you're referring to

This will help me write a meaningful and accurate commit message following conventional commit message guidelines.

Relevant log output
No response
macOS version
14.7 (23H124)
Xcode version
Version 16.1 (16B40)
Copilot for Xcode version
0.35.0 (426)

Uploading the fix for notarization!

Fixed in 0.35.1.


[Suggestion] regarding tools

I'd suggest adding a shovel tool, and adding enchantability to tools.
The only vanilla tools missing from the list are shovel and sword, and while I see the merit in discounting a sword in a mostly peaceful type mod I would like a shovel that sticks around and is easily repaired.
I'd also suggest making tools enchantable (even allowing them to be disenchanted on upgrade if it's a pain to keep enchants through upgrades). I like the tools as a convenient alternative to things such as tinkers construct but would like to customize them a bit such as adding unbreaking to my tools. I could understand you must have left it out for some reason not immediately obvious to me such as mend making repairs moot or some such, so I understand if you don't wanna add this function.

What's about adding new enchanting system with Priest npc?

Thanks for your suggestions!
Enchantability is out of scope for this mod, for some of the reasons that you actually mention yourself.
As for shovels, they wouldn't actually have any practical use in the mod.


Inventory dissappears on relog

Forge or Fabric
NeoForge 1.21.1
Mod Version
1.6.7
Client Log
https://gist.github.com/jmadarg/ee96aea498db80c3d67b89aa2a2b563e#file-luggagetest-latest-log
Crash Report (if applicable)
No response
Bug Description
While playing on an modded server (NeoForge 21.1.41, MC 1.21.1) I noticed that if I had anything in my Luggage and disconnected then connected again, the inventory of the luggage would get wiped.
I then tested on a singleplayer world with the same pack and had the same issue. I noticed in the provided latest.log that in line 1990 it says [Server thread/ERROR] [net.minecraft.world.item.ItemStack/]: Tried to load invalid item: 'No key id in MapLike[{Slot:12b}]' with similar messages in the following lines
I'm also sharing this, my debug.log https://gist.github.com/jmadarg/d97df93067f049cf105dba68882fde83
Steps to Reproduce

Join a world/server
Get and place a luggage
Leave the world/server
Join the world/server once more
Luggage's inventory is gone

Please Read and Confirm The Following

[X] I have confirmed the details provided in this report are concise as possible and does not contained vague information (ie. Versions are properly recorded, answers to questions are clear).
[X] I have confirmed this issue is unique and has not been reported already.

I just tested something I didn't think about earlier. If you grab the luggage instead of leaving it as entity in the world, it does keep it's inventory.

fixed in af0e8f7, will upload a new build shortly


UI Pagination: Switching pages displays some values incorrectly

https://youtu.be/NkdkchHJzrk
Video should show the problem. Each entry has a group "A" and "B". When navigating from Page 1 to 2, some entries show  even though they do have a group. Also, every time I reload & switch pages, it shows something different.
Maybe some issue with lazyloading?

Hey @AlessioGr — thanks for the report! We'll look into this ASAP.

Hey @AlessioGr, we released the fix for this one. Thank you for reporting it!


Add more keybindings to quterofi/open secondary menues

Allow switching from one secondary menu to another, without going back to the main menu.
Allow setting an engine in the main menu instead of issuing the :open command from the engines menu with --autoaccept
etc?

Also, add a shortcut in the main menu all quterofi/open menues (including main), allowing to switch from quterofi to the standard :open menu. Preserving the unsubmitted text and (maybe) taking --invert into account.


Change auth from a resource to a mount

https://github.com/Autodesk/aomi/blob/d385ba14ac3ac499130ab46d037c186865489b82/aomi/model/resource.py#L264-L268
I think this will be required to have multiple auth backends of the same kind.

Not actually required for multiple auth backends... Adding #101  (mountpoint tuning) has shown we might want to distinguish more clearly between backends and resources in terms of the overall context. Dunno if I'll address it in next PR or punt...


Add topology spread constraints to manager deployment

What type of PR is this?
/kind feature

What this PR does / why we need it:
Adds option to specify PDB and topological spread constraint in helm chart
Which issue(s) this PR fixes:

Fixes #
Special notes for your reviewer:
Does this PR introduce a user-facing change?

Helm: Support the topologySpreadConstraints and PodDisruptionBudget

Hi @woehrl01, could you please sign the CLA?

/ok-to-test
/lgtm
/approve

/release-note-edit
Helm: Support the topologySpreadConstraints and PodDisruptionBudget

@alculquicondor Shouldn't we revert this, then should we open this PR against main branch?

Oops, I missed that.
We can just cherry-pick to main. WDYT?

Oops, I missed that.
We can just cherry-pick to main. WDYT?

Yeah, I'm ok with that. Let's offer to bot.
/cherry-pick main


Map tiles render on top of the rive models

The bug occurs when using render script found in this repo, located here.
I've managed to fix the issue by copying the render script to my project and changing the order of render.draw() calls.
There are two items on screenshots: health bar made with rive and tilemap.
Before:
    -- inside update() function
    render.enable_state(render.STATE_STENCIL_TEST)
    render.draw(self.rive_pred)
    render.disable_state(render.STATE_STENCIL_TEST)

    render.draw(self.tile_pred)
    render.draw(self.particle_pred)
    render.draw_debug3d()

After:
    -- inside update() function
    render.draw(self.tile_pred) -- moved this up

    render.enable_state(render.STATE_STENCIL_TEST)
    render.draw(self.rive_pred)
    render.disable_state(render.STATE_STENCIL_TEST)

    render.draw(self.particle_pred)
    render.draw_debug3d()

I don't know if this is the right way to fix the issue, so I'm not creating a PR.

Do you have any new information about this issue?

I see, thanks for update

Fixed in 2.0.0
See https://forum.defold.com/t/updated-rive-extension/75169


Create a widget to query ECSQL strings

On startup:

Bad query:

Successful query:

the table becomes very slow if the number of results exceeds 5000 rows

You probably want to be using a Virtualized Table

the table becomes very slow if the number of results exceeds 5000 rows

You probably want to be using a Virtualized Table

Unfortunately, the virtualized table loses the horizontal scrollbar if there are too many columns, and it can't be added back without some (hacky?) css ☹. Also for some long strings, the virtualized table will only write the visible portion to the DOM, which results in it trying to constantly format each string to fit inside its cell, leading to a jittery experience imo.
The performance gain is very important though...


Add Consolidate API

Description

These new methods allow algorithms to quickly create, register, and wire events on consolidators in a single line.
Related Issue

Closes #1958
Motivation and Context

Make using consolidators easy as pie :)
Requires Documentation Change

Yes, this should be added to the documentation.
How Has This Been Tested?

DataConsolidatorAlgorithm updated to use new methods and OnEndOfAlgorithm asserts added to ensure the consolidators are firing the event handlers.
Types of changes

[ ] Bug fix (non-breaking change which fixes an issue)
[x] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to change)
[ ] Non-functional change (xml comments/documentation/ect)

Checklist:

[x] My code follows the code style of this project.
[x] I have read the CONTRIBUTING document.
[x] I have added tests to cover my changes.
[x] All new and existing tests passed.

Also, want to make sure we support user specifying a handler as Action<TradeBar> even if the underlying subscription is quotes (which would yield QuoteBars) -- we can use QuoteBar.Collapse() to convert to trade bar to feed into their handler.


Fix for undefined this in event handlers

this is not guaranteed to be defined in addEventListener. A third-party lib was adding an event in a strange way which gave me the following error Uncaught TypeError: Cannot read property '_' of undefined.

Thanks! You haven't added the check in removeEventListener though…

Oops, added!

Merged, thanks!


How to Use Custom Labels

Hi, I recently went through the tutorial for Fine-tune LLama 3 with Chat Data and chat_dataset. However, I couldn’t find a solution for setting custom labels.
Currently, it seems Torchtune only supports fine-tuning where labels are either all assistant output (train_on_input=False) or include the prompt (train_on_input=True). What if I want to use only a subset of the assistant output as labels?
Is there a straightforward way to modify the code to support this? I’d appreciate your guidance.

Hi @yuzhenmao , do you mean a subset of the assistant messages, or a subset of the output within a single assistant message?
If you would like to train on a subset of the assistant output, you'll need to write a custom message transform.
At a high level, you'll need a dataset builder. This is a function that takes a torchtune.modules.tokenizers.ModelTokenizer as the first argument and returns a torch.utils.data.Dataset:
def custom_dataset(tokenizer: ModelTokenizer) -> Dataset:
    ...

You'll point to this builder in your config (any additional key-value pairs in the dataset config will be passed to your builder as kwargs):
dataset:
  _component_: importpath.to.your.custom_dataset

If your data is compatible with huggingface's load_dataset, then you can use the torchtune.datasets._sft.SFTDataset class with a custom message transform. Your builder will look similar to this:
def custom_dataset(
    tokenizer: ModelTokenizer,
    *,
    source: str,
    packed: bool = False,
    filter_fn: Optional[Callable] = None,
    split: str = "train",
    **load_dataset_kwargs: Dict[str, Any],
) -> Union[SFTDataset, PackedDataset]:
    message_transform = CustomMessageTransform()
    ds = SFTDataset(
        source=source,
        message_transform=message_transform,
        model_transform=tokenizer,
        split=split,
        filter_fn=filter_fn,
        **load_dataset_kwargs,
    )
    if packed:
        if tokenizer.max_seq_len is None:
            raise ValueError(
                "PackedDataset requires a max_seq_len to be set on the tokenizer."
            )
        return PackedDataset(ds, max_seq_len=tokenizer.max_seq_len)
    return ds

The message transform is a callable that takes in a single row from your dataset and returns a list of torchtune.data._messages.Message objects. The masked property of each Message object is how you can train on only a subset of the assistant messages. If message.masked==True, then it will not be used in the loss calculation. Here's an example.
However, if you want to train on a subset of the output within a single assistant message, then it's a bit more complicated. If this is the case, let me know and I can help with that.
Let me know if you have any questions!

That is exactly what I need! Thank you @calvinpelletier so much for your detailed reply!


Publish releases on PyPI

Per this comment, I propose that Fabric3 releases be published on PyPI.
I would have posted an issue here earlier, but I believe that issues were disabled or not visible to me to create them. It's possible that I twice falsely thought that there was no issue tracker for this project, as when I arrived here today, I thought that issues were still disabled because I was looking at the wrong part of the UI.
Nevertheless, at this point, I'm content to maintain releases under Fabric3bis and probably won't switch back to Fabric3 unless I can have access to make releases. If this project does decide to make public releases, I recommend using the technique that I used in Fabric3bis, which re-uses the same Fabric version numbers, but adds a post-release tag to indicate which release following the upstream release. For example Fabric3bis 1.10.2.post1 is the first Fabric3bis release of Fabric 1.10.2.
I'm extremely grateful for this fork - it's enabled me to use Python 3 exclusively in my full tool chain.

Yes, issues for some reason where disabled, which was not my intent, I wasn't even aware that issues could be disabled, hence I didn't check. They are enabled now, sorry for the inconvenience.
The issue I have right now is that not all test-cases apply in python 2:
======================================================================
FAIL: test_utils.test_abort_message_only_printed_once
abort()'s SystemExit should not cause a reprint of the error message
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/mati/git/mati/fabric/local/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
    self.test(*self.arg)
  File "/home/mati/git/mati/fabric/tests/test_utils.py", line 101, in test_abort_message_only_printed_once
    eq_(result.stderr, "Fatal error: It burns!\n\nAborting.")
AssertionError: '/bin/sh: 1: fab: not found' != 'Fatal error: It burns!\n\nAborting.'

and I'm trying to investigate this issue now.

pip install Fabric3 :-)

Thanks @mathiasertl , pip install Fabric3 worked for me.
@jaraco: I don't think your fork on PyPy is needed any more, but that is up to you if you want to keep it.


Docs: Add Pull Request Template

Description

Adding a PR template
Template path .github\pull_request_template.md

Screenshots

Additional information
GSSOC 2023

Hello @subhashis2204
Please assign me this issue
Thank you

Hello @subhashis2204
Please review my Pull request #56
Thank you for your support


Vertical UV coordinate negated not flipped

Hi,
I think I have discovered an issue when reading in a model that a clamp wrap mode.  The issue is that when reading in UV coordinates the vertical component is negated not flipped as seen here:
public Vector2[] AsTexcoordArray(ref NumericArray contents, byte[] bufferData)
{
	if (contents.AsTexcoords != null) return contents.AsTexcoords;

	var arr = AsVector2Array(ref contents, bufferData);
	for (var i = 0; i < arr.Length; i++)
	{
		arr[i].Y *= -1;
	}

	contents.AsTexcoords = arr;
	contents.AsVec2s = null;

	return arr;
}

I think that the correct approach is to do this arr[i].Y = 1 - arr[i].Y;.  I've attached a modified version of the Avocado example mesh from the gltf-sample-models repo.  I've edited it to use a clamp warp mode.
Avocado.zip
Note that without code above the avocado renders as a just a smear of color.  With the adjustment it is textured correctly.
I think GLTFSceneExporter may also need to be updated since InvertY also multiplies by -1.  Perhaps the function should be updated to apply 1-y instead and be renamed to something like FlipY to avoid confusion with the other invert methods.
For reference https://github.com/KhronosGroup/UnityGLTF/issues/75 covers a similar but different issue.
Cheers!

This should be merged in and fixed, thanks for the contribution!


Build pipeline

pullreq

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


Added a proper working revalidateTag functionality to redis-stack handler

"revalidateTag" wasn't working correctly because it wasn't deleting the keys associated with the tag.

Added index creation for searching tags accross multiple keys
Added function for sanitizing tag string (to avoid errors with index search)
revalidateTag finds and deletes all keys with the requested tag

Hi @MaKTaiL, thank you for your contribution. The current implementation is fine. Instead of deleting cache entries, we are now collecting a list of tags that have been revalidated. When the Next.js Server retrieves values from the cache store, we check if a particular cache key was revalidated before serving it to the Next.js server. This was done to support pages from Pages Router. I'm currently working on a major refactoring for this part of the library. Once I've completed that, I'll revisit your PR. Thanks again!

Hi @MaKTaiL, thank you for your contribution. The current implementation is fine. Instead of deleting cache entries, we are now collecting a list of tags that have been revalidated. When the Next.js Server retrieves values from the cache store, we check if a particular cache key was revalidated before serving it to the Next.js server. This was done to support pages from Pages Router. I'm currently working on a major refactoring for this part of the library. Once I've completed that, I'll revisit your PR. Thanks again!

The current implementation does not do anything when you request a revalidateTag, it only updates the time the tag was "updated". The cache entry values remain the same unless you delete the key from the Redis database. Deleting the key will signal NextJS that there is no cache entry for it which will force a revalidation of the fetch results which will then be saved again with new values on Redis.

Hey @MaKTaiL! Sorry for the delay. Please change the target branch of this PR to the canary-1.0.0-rc.

Hi @better-salmon! I just changed target branch, merged and resolved conflicts. I saw the changes you've made and it appears to be a working revalidateTag example but I'm concerned about the race condition of storing the tags in a map. If multiple people request different tags for revalidation, the tags' map (stored in a key formed with keyPrefix + revalidatedTagsKey) has a huge chance of conflicting between requests since both will be updating it at the same time. Whichever updates last will be the winner.
Let's look at this scenario:
Tags' map looks like this:
{
  "tag1": ["key1", "key2"],
  "tag2": ["key3', "key4"],
  "tag3": ["key5', "key6"],
}

User 1 requests revalidation of tag1, and User 2 requests revalidation of tag2, both at the same time.
Both requests retrieve the same copy of the tags map
First request removes tag1 from map and sends it back to Redis.
Second request removes tag2 and sends it back to Redis.
Final map will look like this:

{
  "tag1": ["key1", "key2"],
  "tag3": ["key5', "key6"],
}

You see tag1 still remains because it wasn't aware of the User 1 request. Now imagine a scenario with thousand of people doing the same thing.
That said I think using an index for the tags is the better, faster and safer solution.
For using an index it is paramount that we sanitize the tags (remove any chars that Redis does not accept in query operations).
I adapted the code for this while also using the sharedTagsKey you implemented. Let me know what you think.

I oversaw this case during the major refactoring. Thank you! I'll review and merge your solution soon.

@MaKTaiL hi! I have ended the work on the new API. But I accidentally made some force pushes to the canary-1.0.0-rc branch, please rebase your PR one more time. I'm sorry.

Use full names for variables and arguments e.g. query.documents.map((doc) => doc.id) will become query.documents.map((document) => document.id) or query.documents.map(({ id }) => id)
Remove the sharedTagsKey option from the redis-stack Handler options. It seems obsolete with indexing.

Actually, I can merge canary-1.0.0-rc to canary, and it will be easier for you to merge your PR to the canary branch.

Closing your pull request was not intended. Please rebase it one last time to the canary with the requested changes. You've done a great job!

Hi @better-salmon , sorry for the late reply. I was busy this weekend. I'll merge the changes as soon as I can.

It's ok! I will wait 👍

Thank you for your contribution!


feat(database): support for postgres

Thanks for this PR 🥳

Thanks for this PR 🥳

current state: @adlerhurst checks if "AS OF SYSTEM TIME" for the queries (esp. for the current sequences) is necessary


Remove ParserMethods which is unneeded

Originally the ParserMethods class was intended to avoid writing a type like:
def repAs[A1 >: A, B](implicit acc: Accumulator[A1, B]): Parser[B]

But that is not needed because Accumulator and Accumulator0 are contra variant in the first type parameter. Thus, we can put them as regular methods on Parser[A] without any ugly signatures and still be able to write p.repAs[NonEmptyVector[Int]] without having to name the input type (Int in this example).
This should be source compatible since we just moved implicit enrichments directly onto the class.
cc @martijnhoekstra @regadas

Codecov Report

Merging #148 (ec85358) into main (f5e01ac) will increase coverage by 0.10%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##             main     #148      +/-   ##
==========================================
+ Coverage   95.59%   95.69%   +0.10%
==========================================
  Files           7        7
  Lines         930      930
  Branches       90       86       -4
==========================================
+ Hits          889      890       +1
+ Misses         41       40       -1

Impacted Files
Coverage Δ

core/shared/src/main/scala/cats/parse/Parser.scala
95.29% <100.00%> (+0.12%)
:arrow_up:

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 f5e01ac...ec85358. Read the comment docs.

Codecov Report

Merging #148 (ec85358) into main (f5e01ac) will increase coverage by 0.10%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##             main     #148      +/-   ##
==========================================
+ Coverage   95.59%   95.69%   +0.10%
==========================================
  Files           7        7
  Lines         930      930
  Branches       90       86       -4
==========================================
+ Hits          889      890       +1
+ Misses         41       40       -1

Impacted Files
Coverage Δ

core/shared/src/main/scala/cats/parse/Parser.scala
95.29% <100.00%> (+0.12%)
:arrow_up:

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 f5e01ac...ec85358. Read the comment docs.

Nice

Nice

@johnynek Hope you don't mind; they were just small typos.

@johnynek Hope you don't mind; they were just small typos.


gambia.txt

University of The Gambia  file name

@Massay University of The Gambia has a domain utg.edu.gm, not gambia.edu.  Thus, if you wish to add it to this repository, the file name has to be lib/domains/gm/edu/utg.txt. It is true if the email domain is the same as the official website domain, i.e. you have email address looking like<EMAIL_ADDRESS>Please correct the file name in your request, or comment asking for help, if necessary. Thank you!

@Massay I am sorry. The file path in your request is now lib/domains/edu/utg.txt. In my comment earlier I said University of The Gambia has a domain utg.edu.gm, not gambia.edu. Thus, if you wish to add it to this repository, the file name has to be lib/domains/gm/edu/utg.txt. Could you please change the path? It has to be  lib/domains/gm/edu/utg.txt. If you are unsure how to do it, please make another request with correct file path.


add installation simulator

How to categorize this PR?

/area usability
/kind enhancement
/priority 3
What this PR does / why we need it:
This PR refactores the blueprint renderer util, to make the usage of its API more clear.
The previous version had baked many different uses-cases baked into a single function, which made it very hard to understand.
On to of this refactored blueprint renderer, there is now a installation simulator.
The installation simulator takes any blueprint and a set of imports to simulate the installation run with all its deploy items and sub-installations.
The deploy items can be "simulated" by a list of user provided deploy item export templates.
These are go templates that render a map of exports which are applied to a deploy items exports.
Which issue(s) this PR fixes:
Fixes #
Special notes for your reviewer:
Release note:

Add installation simulator, which allows to simulate complete landscaper installation flows including its deploy items and sub-installations.

/test

/test


Great job so far!

Couple of features I'd like to see for datatables (I think it will replace datatables.js in near feature):

Individual column filters
Subtotal, subcount, etc (avg,max,min...) for column groups
Maybe optional "actions" column for "edit,delete,etc buttons"

I hope you'll continue to improve your great work. If I wasn't just a beginner I'd love to fork this repo.

Thanks for the feedback @gozcan! I really appreciate it.
I'm hoping to have some of these features implemented in the future. In the meantime though, if you wanted to you could actually implement some of these features now by leveraging the custom template options I've built into the datagrid.
For example, for the individual column filters you could specify a custom header template which includes a dropdown menu with a textbox in it, that when typed into filters the original data by that column's filter.
Here's a concept (apologies for the completely rough and untested code):
<datatable-column :id="column.id" v-for="column in columns">
    <!-- Insert custom content here, such as a dropdown menu or something similar -->
    <!-- Example code -->
    <dropdown-menu>
        <input type="text" v-model="columnFilters[column.id]">
    </dropdown-menu>
</datatable-column>

new Vue({

    /* ... */

    data: function () {
        return {
            myData: [],
            columnFilters: {}
        }
    },

    computed: {
        filteredData: function () {
            var filteredData = [];

            for (var i = 0; i < this.myData.length; i++) {
                var row = this.myData[i];

                for (var column in this.columnFilters) {
                    var filter = this.columnFilters[column];

                    if (!filter) {
                        continue;
                    }

                    /* filter each row here based on whether there */
                    /* is a filter in your computed property */
                    /* and add it to the filteredData array */
                }
            }

            return filteredData;
        }
    }

});

Then just bind your datatable source to the filteredData instead of the original data object (myData)
And for the custom actions column you can use custom cell templates :) I've documented how to use custom cell templates here: Custom Cell Templates
Thanks again for your support :) I hope you continue to find the project useful.

Me too want to thank you! Looks realy great and neat. I am searching for something similar to  DevExpress Data Grid in Vue.js world and your component seems very promising.
For ideas for future I'd like to recommend to add dropdown filtering with ability to multiple values (and even regexp) select.
Am I right that it's possilble to make two dependent grid with selection in one will reflect a scope in other?
I want to make some classification component with two grid - one will be line items and second - classifier groups, so items from first could be put in different groups in second. And then a line in second is choosen this will narrow scope in the first grid.

Also it could be nice to have not only totals for numbers, but custom aggregate functions? for example count distinct, avg etc.

@4mitch I have added the ability to use custom aggregate functions. I have included basic functions for min, max, count, average, and total. Have a look in src/components/datatable/datatable.vue to see how it is implemented.

Just wanted to say thank you for your work. Previously I've attempted to force DataTables.net to work with VueJS, you've just saved me a lot of time. Thank you.

Thanks @arthurtyukayev! I appreciate the feedback and am glad to hear it saved you some time and frustration.

This looks very promising. A little guidance on how I can throw it into my project would be awesome!


ncdump 4.4.0-rc1 reporting <IP_ADDRESS> as netcdf library version

The wrong version number is being reported by ncdump version 4.4.0-rc1:
[durack1ml:150708_build/v4.4.0-rc1_install/bin] durack1% ncdump
ncdump [-c|-h] [-v ...] [[-b|-f] [c|f]] [-l len] [-n name] [-p n[,n]] [-k] [-x] [-s] [-t|-i] [-g ...] [-w] file
  [-c]             Coordinate variable data and header information
  [-h]             Header information only, no data
  [-v var1[,...]]  Data for variable(s) <var1>,... only
  [-b [c|f]]       Brief annotations for C or Fortran indices in data
  [-f [c|f]]       Full annotations for C or Fortran indices in data
  [-l len]         Line length maximum in data section (default 80)
  [-n name]        Name for netCDF (default derived from file name)
  [-p n[,n]]       Display floating-point values with less precision
  [-k]             Output kind of netCDF file
  [-s]             Output special (virtual) attributes
  [-t]             Output time data as date-time strings
  [-i]             Output time data as date-time strings with ISO-8601 'T' separator
  [-g grp1[,...]]  Data and metadata for group(s) <grp1>,... only
  [-w]             With client-side caching of variables for DAP URLs
  [-x]             Output XML (NcML) instead of CDL
  file             Name of netCDF file (or URL if DAP access enabled)
netcdf library version <IP_ADDRESS> of Jul  8 2015 18:15:19 $

@WardF seems like this could be the problem:
https://github.com/Unidata/netcdf-c/blob/v4.4.0-rc1/configure#L594-595

@durack1 Thanks for the heads up; I'm putting together the next release candidate and will make sure this is properly incremented!

@WardF no problem, we've been having a couple of issues with accessing data through dap URLs, @doutriaux1 should be able to outline the problem better than me.. I'm fairly sure this remains an issue with the 4.4.0-rc1 release

@durack @doutriaux1 That would be great if you can provide a bug report, as we hope to get the new release out in the next week or three and would try to include a fix for the issue, whatever it ends up being.

@WardF ok will do that.

@WardF @DennisHeimbigner see #122

I'm closing this out since the issue is fixed; I was going to wait until I pushed out the release candidate later today, but issue #122 is going to delay that a little bit. So, I'll close this out now.

@WardF I can confirm that ncdump 4.4.0-rc2 is now correctly reporting its version

Great, thanks; the issue was pretty simple, I had not updated the string in configure.ac before generating configure and the associated files.  Thanks for keeping me on my toes!

@WardF just wondering when you folks expect 4.4.0 to hit shelves (to be released)? From a quick scan of the issues (there doesn't appear to be a 4.4.0 milestone configured) it seems there are still a couple to resolve before 4.4.0 is finalised?

@durack1 I had planned on getting the 4.4.0-rc3 release out this week.  Our main feature for the 4.4.0 release is the inclusion of cdf-5 support; you can view this on the cdf-5 branch.  There is still a little cleaning up to do there, and to make sure everything works with the c++ and fortran interfaces.  I had hoped to get this done before releasing the next release candidate out the door, but I've delayed long enough, I feel.  I'm hoping to have the full 4.4.0 release within the month.

@WardF ok great, I'll watch for the rc3 release and take it for a run when it lands.. It'd certainly be nice to have cdf-5 support too!


Project list gets data from File System and allows DoS (with large amounts of requests)

this code will transverse the file system
  # returns a list of current projects (which are defined by a folder containing an maturity-model.json )
  list: ()=>
    projects = {}
    for folder in @.data_Path.folders_Recursive()
      config_File = folder.path_Combine @.config_File
      if config_File.file_Exists()
        data = config_File.load_Json()
        if data and data.key
          projects[data.key] =
            path: folder
            data: data
    projects

check performance and DoS implications of this code
Here is the test that confirms the DoS prob
describe '_regression | A11 - DoS', ->

  # https://github.com/DinisCruz/BSIMM-Graphs/issues/72
  it 'Issue 72 - Project list gets data from File System and could cause DoS', ()->
    using new Data_Project(), ->
      start = Date.now();
      test_List = (index, next)=>
        @.list().assert_Is_Object()
        next()

      #items = [0..0     ]   # 1 takes 15ms
      items = [0..10   ]   # 10 takes 50ms
      #items = [0..100  ]   # 100 takes 250ms
      #items = [0..1000 ]   # 1000 takes 2250ms
      #items = [0..5000 ]   # 5000 takes 1200ms
      async.each items, test_List, ->
        duration = Date.now() - start
        duration.assert_In_Between(30,80)  # for 10 it should take between 20ms and 80ms

accepting risk

on the topic of DoS here is test execution for 25,000 requests, which took 50secs to execute (with 100% node execution on that process)

in Jira https://maturity-models.atlassian.net/browse/RISK-2


How to log istio access logs to fluentd with tags?

Configuration for a Fluentd handler
apiVersion: "config.istio.io/v1alpha2"
kind: fluentd
metadata:
name: handler
namespace: istio-system
spec:
address: "fluentd-es.logging:24224"
this is just for fluentd server address, how to define tag?

Closing this issue, as this is a question about usage. Please use the fourms for these questions.


Issue on Firestore 4.4.0

Hello, I am getting this error and it fails most of our tests.
`../../.pub-cache/hosted/pub.dev/fake_cloud_firestore-2.3.0+3/lib/src/mock_query.dart:125:34: Error: The parameter 'values' of the
method 'MockQuery.startAt' has type 'List', which does not match the corresponding type, 'Iterable<Object?>', in the
overridden method, 'Query.startAt'.

'List' is from 'dart:core'.
'Iterable' is from 'dart:core'.
'Object' is from 'dart:core'.
Change to a supertype of 'Iterable<Object?>', or, for a covariant parameter, a subtype.
Query startAt(List values) => _subQueryByKeyValues(
^
../../.pub-cache/hosted/pub.dev/cloud_firestore-4.4.0/lib/src/query.dart:138:12: Context: This is the overridden method
('startAt').
Query startAt(Iterable<Object?> values);
^
../../.pub-cache/hosted/pub.dev/fake_cloud_firestore-2.3.0+3/lib/src/mock_query.dart:134:32: Error: The parameter 'values' of the
method 'MockQuery.endAt' has type 'List', which does not match the corresponding type, 'Iterable<Object?>', in the
overridden method, 'Query.endAt'.
'List' is from 'dart:core'.
'Iterable' is from 'dart:core'.
'Object' is from 'dart:core'.
Change to a supertype of 'Iterable<Object?>', or, for a covariant parameter, a subtype.
Query endAt(List values) => _subQueryByKeyValues(
^
../../.pub-cache/hosted/pub.dev/cloud_firestore-4.4.0/lib/src/query.dart:49:12: Context: This is the overridden method ('endAt').
Query endAt(Iterable<Object?> values);
^
../../.pub-cache/hosted/pub.dev/fake_cloud_firestore-2.3.0+3/lib/src/mock_query.dart:228:22: Error: The parameter
'arrayContainsAny' of the method 'MockQuery.where' has type 'List?', which does not match the corresponding type,
'Iterable<Object?>?', in the overridden method, 'Query.where'.
'List' is from 'dart:core'.
'Iterable' is from 'dart:core'.
'Object' is from 'dart:core'.
Change to a supertype of 'Iterable<Object?>?', or, for a covariant parameter, a subtype.
List? arrayContainsAny,
^
../../.pub-cache/hosted/pub.dev/cloud_firestore-4.4.0/lib/src/query.dart:151:12: Context: This is the overridden method ('where').
Query where(
^
../../.pub-cache/hosted/pub.dev/fake_cloud_firestore-2.3.0+3/lib/src/mock_query.dart:229:22: Error: The parameter 'whereIn' of the
method 'MockQuery.where' has type 'List?', which does not match the corresponding type, 'Iterable<Object?>?', in the
overridden method, 'Query.where'.
'List' is from 'dart:core'.
'Iterable' is from 'dart:core'.
'Object' is from 'dart:core'.
Change to a supertype of 'Iterable<Object?>?', or, for a covariant parameter, a subtype.
List? whereIn,
^
`

I am keen to contributing to a fix but not until a week later due to my current workload/headspace.

Seeing the same problem.

Thank you so much for fixing the issue quickly @sydneyagcaoili. I just published your fix to version 2.4.0. https://pub.dev/packages/fake_cloud_firestore/changelog#240.


Archive kube-batch

Ref https://github.com/kubernetes/community/pull/6467#discussion_r806914761, shall we consider archiving kube-batch?

+1, the project is now active under a different repo, Volcano.

+1
GitHub algorithm just recommended me this repo.

+1

Thanks for your suggestion; but I'd like to keep this project open, I'm going to put more time to enhance it.

the project is now active under a different repo, Volcano.

They're different projects :) Volcano just leveraged kube-batch as first version of its scheduler.


specify ARM64 mysql image to support m1 machines

Description
nitro init has an M1 check which says MariaDB must be used.
pkg/setup/setup.go includes a note pointing to https://docs.docker.com/docker-for-mac/apple-m1/. The official recommendation there is to specify ARM64:

Not all images are available for ARM64 architecture. You can add --platform linux/amd64 to run an Intel image under emulation. In particular, the mysql image is not available for ARM64. You can work around this issue by using a mariadb image.
However, attempts to run Intel-based containers on Apple M1 machines can crash as QEMU sometimes fails to run the container. Therefore, we recommend that you run ARM64 containers on M1 machines. These containers are also faster and use less memory than Intel-based containers.

On other projects this has worked without a hitch for us, for example in docker-compose.yaml adding
platform:
      linux/x86_64

to a "mysql" service.
Not sure how best to translate that to this app but happy to test betas if that's useful.

Hi @olets! We discussed hard coding the platform into the Docker request as this forces the container to use emulation but decided against forcing ARM64 platforms to emulate architectures for a better experience. The real issue with mysql is they have not published an ARM tag like mariadb and many other images (see the following screenshots).
I think we will eventually have to update Nitro to define the platform but hoping we don't have to force users into emulation an mysql recognizes the need for proper ARM support.

That all makes sense.
Is there a possibility where the decision could be left to the user? Maybe instead of showing M1 users "You can't use MySQL" the message could be something along the lines of

Running MySQL in Docker on an Apple M1 comuter requires emulation. If you choose MySQL we will specify the platform as linux/x86_64. Users have reported that this also works fine on Intel Apple computers. Read more at <some website> Use emulation?

and if the user says yes then add platform: linux/x86_64? Without that, until MySQL ships full support Nitro may not be an option for MySQL shops where there are any M1 users. (Though hopefully that won't be long)

PS I see I misread the Docker official recommendation. Change my initial sentiment from "this is not what Docker recommends" to "my team hasn't had any problem with emulation in mysql containers." Of course that still doesn't mean no one will have a problem — you're definitely right that simply quietly hardcoding it isn't a good solution.

Interested to hear if you're any closer to a decision on this. It tripped me up fresh on https://github.com/craftcms/spoke-and-chain/issues/22. Fwiw my team has been adding linux/x86_64 in our own Docker configs whenever for several months now and we have not seen a downside.

@olets I still don't have a machine with the M1 to test, but have not seen any reports on this issue. Are you by chance running the Nitro CLI under Rosetta 2?

I don't believe so — I installed with brew nitro craftcms/nitro/nitro. I'm also not sure how to check after installation.
But the limitation here should be how Nitro's configuring Docker, not what the CLI runs on: for mysql to run in Docker on Apple Silicon, a Linux platform must be specified (otherwise Docker looks for an Apple Silicon image, which doesn't exist). My team uses linux/x86_64, which still plays nice with Intel machines (it's the other arch explicitly supported in the Nitro formula). This is a standard part of using MySQL on M1s.
I do hope that Nitro will eventually specify an x86 MySQL image, so that M1 users can use MySQL. However, it isn't a limiting factor for me. Sounds like for now I should just expect to use MariaDB for Spoke And Chain.

Just saw Andrew's comment on my Spoke & Chain issue. Sounds like this is no longer an issue for MySQL 8 using this image https://github.com/nystudio107/spoke-and-chain/blob/develop/docker-config/mysql/Dockerfile (I have not verified yet). If Nitro uses that one (maybe it does?) this blocking warning could be modified https://github.com/craftcms/nitro/blob/f845b416b7e8578ba08f7b7c2574d63d739b7d33/pkg/setup/setup.go#L32-L36

@olets yeah if you use the image from Oracle, it works fine:
FROM mysql/mysql-server:8.0

Confusingly, the official MySQL 8 image isn't from Oracle, it's from the Docker team, and doesn't yet work properly with Apple Silicon.

Just saw Andrew's comment on my Spoke & Chain issue. Sounds like this is no longer an issue for MySQL 8

Not really, Andrew's solution is to build a mysql image on your machine with Docker where we are pulling the "official" image from Docker Hub (which does not have support for ARM64).

My team uses linux/x86_64, which still plays nice with Intel machines

I'm against hardcoding the platform on the ARM builds as that would also impact ARM linux machines (which are really Raspberry Pi's but there are a lot of efforts around an ARM64 linux desktop (HoneyComb, etc). However, we are doing some platform specific commands and we can certainly do a better job at detecting M1 chips.
Andrew's other idea was to use this image which is the "official" image from Oracle but not "official" on Docker Hub. When he first suggested it there had been no activity for 8+ months on mysql-server but that appears to have changed. Either way, we need to solve this problem for the next version of Nitro once and for all! :)

Well, there's actually only one idea here (I'm not building the image locally)... which is to use mysql/mysql-server:8.0 which is from Oracle... and while it's not the "official" Docker-maintained image, it is maintained by the company that makes MySQL, so I'm assuming it should be a decent choice.
It seems reasonably active: https://hub.docker.com/r/mysql/mysql-server/tags?page=1&ordering=last_updated
Either way, I've been using it without issues on Intel, and some of my colleagues on Apple Silicon, for some time without isues.

Well, there's actually only one idea here (I'm not building the image locally)...

Sorry, I should have been more clear. The link above to the Spoke and Chain repository is using a docker-compose.yaml file with a build argument that is pointing to a Dockerfile in the repo that has a single line so it is technically "building" when you run docker-compose up or docker-compose up --build. Which is not necessary and can be removed and just have the image specified on the docker-compose.yaml service under image.

It seems reasonably active

That is a new development I pointed out here:

When he first suggested it there had been no activity for 8+ months on mysql-server but that appears to have changed.

Hey. I've seen this has a fix for Apple Silicon already: https://github.com/drud/ddev/commit/791cf945b9669d882729afcf1f03ea5a8bca737d; Maybe nitro can have a similar fix too. @jasonmccallister Let me know if I can contribute in some way.


[Feature request] Quick contest "mode"

Objective: have the software calculate margins of victory or loss for quick contests

How:

Add little "QC" button next to 3d roll button. Make it so its "on" or "off" state is clearly distinguishable.

When turned on, output to chat "A quick contest is being made" Or something like that

After it's turned on, have it consider the next two immediate rolls as the rolls of the quick contest, whatever actors roll them.

After the rolls are made, output to chat the results, say, "Quick contest of X (actor name) vs Y (actor name).
Actor name is successful. Margin of victory is Z."

Instead of just actor names, perhaps inserting actor portraits as well?

Have the margins be clickable, as to add them to the modifier bucket.

Cheers.

I've thought about this in the past.   It is definitely something I would like to implement (QCs).  Unfortunately, UI space is at a premium, and setting aside space for another button may be hard to do.
However, we might be able to do this as a drag and drop.   The player (or GM), drags a roll (attribute, skill, attack, etc.) onto the token (or character sheet) of their QC opponent.
For example, for a ST vs ST roll, the GM could drag the ST roll value of the NPC onto the token (or character sheet) of the player character.   This will roll the ST for the NPC quietly, and then send a message to the player.   The player would be notified that they need to make an opposing roll.   Whatever roll the player makes, will be sent back to the GM.   The 2 rolls will be compared, and the margin of success/failure displayed in the chat as a clickable modifier.
We could probably also make it work in the other direction...   if the PC drags a roll onto an NPC token (since they probably cannot see the character sheet), it would roll the skill, and send the results to the GM.
There is an issue of visibility.   The GM might not want the players to see success/failure, or if they don't mind showing that, they might not want them to see the actual margin.

I understand the issue of UI space, but if I may suggest, and if at all possible, I'd really reserve the drag and drop roll workflow for targeting and applying damage. Simply drag and drop an weapon skill roll into a token, and it would roll the attack on the token.
Similarly, drag and drop the damage into a token, and it rolls damage and automatically opens up the ADD for that token. It think it would make things much more agile.

Good points.
If the GM dragged and dropped a damage roll onto a token/character sheet, it could automatically roll the damage and bring up the ADD.   It might not be as useful for Players, since they don't normally have access to the ADD (The GM must explicitly enable players to use the ADD), but it could be a small time saver for the GM (instead of clicking the damage roll, and then dragging from the chat log to the target).
As for dragging and dropping an attack skill...   if the player drags an attack roll onto a target, it could automatically roll the attack.   And if it succeeds, it would notify the GM that they need to roll an active defense for the target.    Maybe we can offer a dialog that shows:
No Defense, Dodge, Parry, Block, or Quick Contest
Or if the attack failed, it would just pop up:
Do you want to treat this as a Quick Contest?
Unfortunately, this pops up a dialog every time a player makes an attack... hmm... maybe not the best thing.  But if we continued with this idea, the GM could pick any of the defense options, or they could pick Quick Contest, and then roll anything and it would be applied as a Quick Contest versus the Player's roll.
So from the player's standpoint, they don't have to do anything different... they just drag their skill on to a target token.   If the skill happens to be from a melee or ranged attack, the GM would have the option to defend.... or treat as a QC.
Going in the other direction... hmmm.. I don't think I would offer the same functionality.   Mainly because I don't really want to (and I don't think we need to) automate the Player's process.  I want to make the GM's process easier... and if that means a quick dialog to roll dodge, parry or block, then great, because they are probably handling a lot of NPCs.   But the player only (usually) has the one character.... and (I believe) it is part of the game for the Player to figure out their defense, and roll it.    But this is a personal opinion... and could be changed.
Ok, what I mean to say is that if a GM drags a skill roll to a player's character token/sheet, it would just ask for a Quick Contest.   If the GM is attacking (instead), they would just roll the attack skill as normal, and if it succeeds, ask the player to make a defense roll.
Ok, I am babbling a bit... which just means the creative juices are flowing.   I think there is something here we can implement to make the game a bit easier for the GM (my primary goal).

If the GM dragged and dropped a damage roll onto a token/character sheet, it could automatically roll the damage and bring up the ADD.

This would be great.

It might not be as useful for Players, since they don't normally have access to the ADD (The GM must explicitly enable players to use the ADD), but it could be a small time saver for the GM (instead of clicking the damage roll, and then dragging from the chat log to the target).

I see a couple possibilities here. When a player drags and drops damage roll onto a token:

Option 1, the default: roll damage and open up the ADD for the GM, so he can apply it (this is the least disruptive for the player and the one to be implemented first, IMO).
Option 2: have the players set the ADD, and then send it to the GM, so he can review it and apply it. This could be done per level of player trust as well.
Have some level of player (trusted, assistant GM, whatever), be able to interact with the ADD and apply damage to tokens directly.

Thinking of it, I think instead of a player trust level decision this should be selected on a per player basis. This would allow for a more fine control.

As for dragging and dropping an attack skill... if the player drags an attack roll onto a target, it could automatically roll the attack. And if it succeeds, it would notify the GM that they need to roll an active defense for the target. Maybe we can offer a dialog that shows:
No Defense, Dodge, Parry, Block, or Quick Contest
Or if the attack failed, it would just pop up:
Do you want to treat this as a Quick Contest?
So from the player's standpoint, they don't have to do anything different... they just drag their skill on to a target token. If the skill happens to be from a melee or ranged attack, the GM would have the option to defend.... or treat as a QC.

Having a pop up for selecting defenses would be great too! Would really speed up things for the GM. We could make it so it shows the skill level for each defense right on the pop-up ( Dodge-11, Parry-10 (Shortsword), Block-10 (Medium Shield) - bonus points if the Parry button is actually a drop-down menu with other parry choices - with their scores - on it.
I agree on the "pops up a dialog every time a player makes an attack" concern. Perhaps, if instead of a pop-up dialog for this workflow we're discussing,, we should move this to the chat window? Like so (text in red just to make it stand out here):

That, it can easily be ignored by the GM. Truth be told, I think this is even better than a pop-up!

Going in the other direction... hmmm.. I don't think I would offer the same functionality. Mainly because I don't really want to (and I don't think we need to) automate the Player's process. I want to make the GM's process easier... and if that means a quick dialog to roll dodge, parry or block, then great, because they are probably handling a lot of NPCs. But the player only (usually) has the one character.... and (I believe) it is part of the game for the Player to figure out their defense, and roll it. But this is a personal opinion... and could be changed.

I see this as worth discussion and that both approaches have their own merits.

I don't like the approach of dragging a roll onto a target to do a Quick Contest because that is a limited version of Quick Contest. I think many QCs in GURPS use different stats between attacker and target. Stealth is the most common example -- it's a QC of the stalker's Stealth versus the target's Per/Hearing/Vision. Implementing QC only for the same stat ignores all of the other QCs where the stats are different.

I don't like the approach of dragging a roll onto a target to do a Quick Contest because that is a limited version of Quick Contest. Many QCs in GURPS use different stats between attacker and target. Stealth is the most common example -- it's a QC of the stalker's Stealth versus the target's Per/Hearing/Vision. Implementing QC only for the same stat ignores all of the other QCs where the stats are different.

I don't believe that would necessarily be the case. After selecting Quick Contest, the system could treat the immediately next roll as the second roll of the QC, whatever roll that may be.

My first thought on an implementation would be that if a player or GM drags a roll to a token (or character sheet), then the target player would be presented with a dialog saying that they need to make a contested roll, and display an open box.   The player would then select their opposing roll, and instead of clicking on it, they would drag it into the open box of the dialog.
The system would then roll both values, and present the differences in margins of success.


Extract common components

Any components that could have use across projects should be moved to the common-ui package, so that code is shared. This will require defining interfaces for things that up until now have been defined by concrete classes. (eg. Cohort, dataset)

we have a core ui project for shared components, so this can now be closed


Prompts for yes / no should use the -y option rather than --force

I have a feeling this one might be a bit controversial, but I think this would be a good discussion to get down if it hasn't already been discussed ad nauseum.
Rather than using --force for assumptions about confirmation, could we use -y (--assume-yes)? I think this could serve two goals. One, it would be more clear in situations of confirmation. Two, it can reserve --force for actions of great danger.
az storage account delete ... -y rather than az storage account delete ... --force

I would tend to agree with this. I've seen a mix of --yes (e.g. apt-get install, now rm), --confirm (e.g. heroku apps:delete), and --force used for equivalent behavior in different CLIs, but the --force flag seems to be typically used for operations that require "special" confirmation, due to them breaking some kind of invariant and/or having downstream consequences (e.g. deleting a Docker image that is used by a running container).


Set up Github Static pages to host project documentation

After #39 Sphinx is enabled, setup the Github static pages process to host the documents so we can easily point a web browser at them

Basic instructions at https://pages.github.com followed, so we now have a new repository in the ouh-churchill organisation ouh-churchill.github.io which contains the static html content for the pages that appear at https://ouh-churchill.github.io

Next up is to amend the makefile publishing process so that we don't get the generated output appearing in the diakonia repository, but direct to the github.io repo

Publish process amended, and documentation updated to reflect current practice


Need to add -mfpmath commandline option to 32-bit Linux builds

While adding a build for 32-bit Linux to detect the breakage you found in jrouwe/JoltPhysics#844, I found that just adding -m32 to the CMAKE_CXXFLAGS as you're doing here:
https://github.com/godot-jolt/godot-jolt/blob/e6150dac64f308b2ca5877c1b574c66ecba77e46/CMakePresets.json#L193-L195
is not enough. I needed to add -m32 -msse2 -mfpmath=sse in order to successfully run the unit tests.
Without the -mfpmath flag the compiler starts to generate 387 floating point instructions (you know the ancient ones that use a stack and have higher intermediate precision). This completely destroys the collision detection algorithms because part of a * b - c * d is calculated at higher precision so even if round_to_float32(a * b) == round_to_float32(c * d) the result could be non-zero. When using SSE, Jolt turns off fused multiply add instructions in sensitive areas, but with 387 instructions that doesn't work.

Yeah, I saw your change and had the same change lined up already as a result. :)
Would it maybe make more sense for you to always add this on your end through Jolt.cmake, somewhere around here, seeing as how that flag is already implied to be -mfpmath=sse during 64-bit compilations, as seen here?

That's a better idea indeed. I'll make the change.

The change is ready to be integrated into godot-jolt.


build: update CI to build against bitcoind 23

@roasbeef, remember to re-request review from reviewers when ready


Move use_backend to bottom of config file

Description
Current cookbook haproxy.cfg template outputs the use_backend rules before the extra_options which can include http-request rules. These rules per haproxy config validation, should occur after the use_backend rules.
$ sudo haproxy -c -V -f /etc/haproxy/haproxy.cfg
[WARNING] ... : parsing [/etc/haproxy/haproxy.cfg:50] : a 'http-request' rule placed after a 'use_backend' rule will still be processed before.

This PR just moves the use_backend rules after the extra_options in the template erb
Issues Resolved
fixes: #313
Contribution Check List
Seeking help on the tests. I am probably being dense, but haven't been able to run tests locally. Attempted following the linked testing documentation. Could anyone share like a quick list of what it takes to run the tests? The chef exec bundle install complains that I don't have a Gemfile and the delivery local unit complains that I don't have a local file.

[ ] All tests pass.
[ ] New functionality includes testing.
[ ] New functionality has been documented in the README if applicable

Hi there,
thanks for taking time to make a Pr for this. There's no way this will work for everyone but you. There will be scenarios where people want the extra options after backen.
In this circumstance I would recommend moving everything into extra options, or creating your own template for the file.

Yeah, I can see how others wouldn't want it that way. I figured I'd PR to see if it would be helpful. But instead I'll take your suggestion and do it another way. 👍


fix: add pin for sqlite3, so it can be downgraded, fixes #6807

The Issue

#6807
#6738

How This PR Solves The Issue
Adds a pin for sqlite3 3.40.1-2+deb12u1, so it can be downgraded when needed.
Manual Testing Instructions
# type: php, apt-get upgrade, auto downgrade
ddev config --project-type=php && ddev restart
ddev exec 'sudo apt-get update && sudo apt-get upgrade -y && echo && sqlite3 --version'

3.40.1

# type: php, apt-get install libsqlite3-dev, auto downgrade
ddev config --project-type=php && ddev restart
ddev exec 'sudo apt-get update && sudo apt-get install -y libsqlite3-dev && echo && sqlite3 --version'

3.40.1

# type: drupal11, apt-get upgrade, no downgrade, because we want sqlite to be 3.45.1 with Drupal 11
ddev config --project-type=drupal11 && ddev restart
ddev exec 'sudo apt-get update && sudo apt-get upgrade -y && echo && sqlite3 --version'

3.45.1

# type: drupal11, apt-get install libsqlite3-dev, error
ddev config --project-type=drupal11 && ddev restart
ddev exec 'sudo apt-get update && sudo apt-get install -y libsqlite3-dev && echo && sqlite3 --version'

# fails to install libsqlite3-dev, but we still can downgrade with the command below

# type: drupal11, use /etc/apt/preferences.d/sqlite3.pref, apt-get install libsqlite3-dev, auto downgrade
ddev config --project-type=drupal11 && ddev restart
ddev exec 'sudo mv /etc/apt/preferences.d/sqlite3.conf /etc/apt/preferences.d/sqlite3.pref && sudo apt-get update && sudo apt-get install -y libsqlite3-dev && echo && sqlite3 --version'

3.40.1

Automated Testing Overview

Release/Deployment Notes

Another option: Go back to the original technique and only do 3.45 for Drupal 11. I'm ok with that as well.

I don't want to revert because Debian snapshot link can be fragile.
And OTOH this approach here is too complex.
What if we pre-download *.deb files for sqlite 3.45.1 to install them with Drupal 11?

What if we pre-download *.deb files for sqlite 3.45.1 to install them with Drupal 11? (Add them to the webserver.)

OK with me. Solves the biggest problems. Anybody who had a particular problem with sqlite 3.45 could then just change project type to php or drupal10 or whatever.

We could either embed the .deb files or hide them in the image. I'd kind of be interested in the embed approach.

Closing this PR in favor of another one with embed .deb files.


Code does not work if some parameters are not trainable.

The code does not work if some of the parameters are not trainable. It only works if all the parameters are trainable.

Can you give me an example that shows not trainable parameter needs to compute the exponential moving average?

Hi @GBATZOLIS , thanks for the bug report.
I believe the issue is that when you initialize ExponentialMovingAverage it silently ignores parameters that are not trainable; when you later pass model.parameters() to some method it contains more parameters (the non-trainable ones) than the EMA object has state for. Does this align with the error messages you see?
While we are considering if this current behavior makes sense, I think this should be an easy workaround: just pass [p for p in model.parameters() if p.requires_grad] instead of model.parameters().

I believe I have addressed this in https://github.com/fadel/pytorch_ema/commit/30a1306f2e5dc6aa91b4b64c2a3acd1bb3b0d7b6.
In that commit, the code will no longer check whether a parameter is trainable, and will process all parameters passed to it. This means that if you don't want to do EMA on some parameters, you must not pass them to the EMA object.

Good solution.


Remove double head tag

It is also included in the base template to make it well formed.
I did not notice this until I looked for the Hugo generator tag on kubernetes.io.
The browsers seem to be smart about it, but it should be fixed.

/approve
/assign @Bradamant3

could not find base template on quick look, but YOLO
/lgtm


CLIP ViT-B/16

Hi Hila, thanks for your great work. I am trying to run the CLIP code from the notebook on the ViT-B/16 model, but I am getting attention maps that don't make any sense (not able to get similar results to what's in the notebook). For the ViT-B/32 model, I'm able to reproduce the results, but for some reason the ViT-B/16 model is causing an issue. Do you know why this is? The only things in the code I needed to change are:

Add the link to ViT-B/16 in the _MODELS dictionary in CLIP/clip/clip.py
Change the reshape in interpret from (1, 1, 7, 7) to (1, 1, dim, dim) where dim = int(image_relevance.numel() ** 0.5)
Thanks!

Hi @hila-chefer, I'm also experimenting with ViT-B/16 model and did the exact same process with @sanjayss34 did. I'm not really sure if this is an issue or not, but my hypothesis is that the ViT-B/16 model gives more attention to local behavior since it has a lower patch size compared to ViT-B/32.
Can you please help me to confirm whether my hypothesis is correct or not? Hereby I attached the code and some of the comparison between ViT-B/16 and ViT-B/32, following this amazing notebook  you've prepared.
Code:
# Add the link to ViT-B/16 in the_MODELS dictionary

clip.clip._MODELS = _MODELS = {
    "RN50": "https://openaipublic.azureedge.net/clip/models/afeb0e10f9e5a86da6080e35cf09123aca3b358a0c3e3b6c78a7b63bc04b6762/RN50.pt",
    "RN101": "https://openaipublic.azureedge.net/clip/models/8fa8567bab74a42d41c5915025a8e4538c3bdbe8804a470a72f30b0d94fab599/RN101.pt",
    "RN50x4": "https://openaipublic.azureedge.net/clip/models/7e526bd135e493cef0776de27d5f42653e6b4c8bf9e0f653bb11773263205fdd/RN50x4.pt",
    "RN50x16": "https://openaipublic.azureedge.net/clip/models/52378b407f34354e150460fe41077663dd5b39c54cd0bfd2b27167a4a06ec9aa/RN50x16.pt",
    "ViT-B/32": "https://openaipublic.azureedge.net/clip/models/40d365715913c9da98579312b702a82c18be219cc2a73407c4526f58eba950af/ViT-B-32.pt",
    "ViT-B/16": "https://openaipublic.azureedge.net/clip/models/5806e77cd80f8b59890b7e101eabd078d9fb84e6937f9e85e4ecb61988df416f/ViT-B-16.pt",
}

# Change the reshape in interpret from (1, 1, 7, 7) to (1, 1, dim, dim) where dim = int(image_relevance.numel() ** 0.5)
def interpret(image, text, model, device, index=None):
    logits_per_image, logits_per_text = model(image, text)
    probs = logits_per_image.softmax(dim=-1).detach().cpu().numpy()
    if index is None:
        index = np.argmax(logits_per_image.cpu().data.numpy(), axis=-1)
    one_hot = np.zeros((1, logits_per_image.size()[-1]), dtype=np.float32)
    one_hot[0, index] = 1
    one_hot = torch.from_numpy(one_hot).requires_grad_(True)
    one_hot = torch.sum(one_hot.cuda() * logits_per_image)
    model.zero_grad()
    one_hot.backward(retain_graph=True)

    image_attn_blocks = list(dict(model.visual.transformer.resblocks.named_children()).values())
    num_tokens = image_attn_blocks[0].attn_probs.shape[-1]
    R = torch.eye(num_tokens, num_tokens, dtype=image_attn_blocks[0].attn_probs.dtype).to(device)
    for blk in image_attn_blocks:
        grad = blk.attn_grad
        cam = blk.attn_probs
        cam = cam.reshape(-1, cam.shape[-1], cam.shape[-1])
        grad = grad.reshape(-1, grad.shape[-1], grad.shape[-1])
        cam = grad * cam
        cam = cam.clamp(min=0).mean(dim=0)
        R += torch.matmul(cam, R)
    R[0, 0] = 0
    image_relevance = R[0, 1:]

    # create heatmap from mask on image
    def show_cam_on_image(img, mask):
        heatmap = cv2.applyColorMap(np.uint8(255 * mask), cv2.COLORMAP_JET)
        heatmap = np.float32(heatmap) / 255
        cam = heatmap + np.float32(img)
        cam = cam / np.max(cam)
        return cam

    reshape_size = int(image_relevance.numel() ** 0.5)
    image_relevance = image_relevance.reshape(1, 1, reshape_size, reshape_size)
    image_relevance = torch.nn.functional.interpolate(image_relevance, size=224, mode='bilinear')
    image_relevance = image_relevance.reshape(224, 224).cuda().data.cpu().numpy()
    image_relevance = (image_relevance - image_relevance.min()) / (image_relevance.max() - image_relevance.min())
    image = image[0].permute(1, 2, 0).data.cpu().numpy()
    image = (image - image.min()) / (image.max() - image.min())
    vis = show_cam_on_image(image, image_relevance)
    vis = np.uint8(255 * vis)
    vis = cv2.cvtColor(np.array(vis), cv2.COLOR_RGB2BGR)

    plt.imshow(vis)
    plt.show()

@louisowen6 I was wondering if this is because the objects are large, e.g., the hightlight parts on the left column have more than 32 pixels (side length). Maybe try some small objects?

Hi @sanjayss34, @louisowen6, @litingfeng, thank you all for this very lively discussion.
I've been looking into what you're seeing with ViT-B/16, and I was able to reproduce quite easily.
This is an interesting point- intuitively, you can think of our method as expanding context. The best way to think about it is- the last attention layer is the most important one, and then we use the previous ones to understand the meaning of each token in the last layer since it has been contextualized.
Now, examining some of the examples for ViT-B/16, I noticed that the correct areas are being highlighted but are overshadowed by other areas in the image, for example:

while the elephant pixels are showing they are overshadowed by additional artifacts.
This is probably due to an "over expansion" of context where the  tokens highlighted in the first layers (which are way less significant to the classification) overpower those in the end (who are critical for classification).
What I suggest- limit the expansion of context as follows:
in interpret:
for i, blk in enumerate(image_attn_blocks):
        if i <=10:
          continue
        grad = blk.attn_grad
        cam = blk.attn_probs
        cam = cam.reshape(-1, cam.shape[-1], cam.shape[-1])
        grad = grad.reshape(-1, grad.shape[-1], grad.shape[-1])
        cam = grad * cam
        cam = cam.clamp(min=0).mean(dim=0)
        R += torch.matmul(cam, R)
    R[0, 0] = 0
    image_relevance = R[0, 1:]

notice how with these lines we skip the first 10 attention layers:
 if i <=10:
          continue

which yields the following improved results:
text: a man with eyeglasses

text: a man with lipstick

text: a rocket standing on a launchpad

elephant & zebra examples:
elephant:

zebra:

lake:

elephant:

water:

dog:

cat:

dog:

cat:

I'll add the option to control context expansion to the notebook, I hope I was able to solve this for you :) please let me know if you have any other questions.

Hi @hila-chefer, thanks a lot for your response and suggestion! I see that now the results are much more make sense than before. However. may I know what's the main reason why we have to treat the ViT-B/32 and ViT-B/16 differently? Is it due to their patch size difference? Thanks!

@louisowen6 happy to help :)
If you notice, I actually left 10 as the expansion factor in the notebook too- it’s beneficial for ViT-B/32 as well. My best guess on the gap in significance between both is that perhaps since there are more tokens for 16x16 patches, once an irrelevant token becomes highlighted it may expand the artifact to its neighbors (naturally) thus increasing the impact of artifacts.
But, as I mentioned, it seems that for CLIP the optimal expansion parameter is 10 in both cases so there is consistency.

Okay, thanks for your answer @hila-chefer! Really appreciate it :)

@louisowen6 sure, feel free to ask if you have any other questions :) I’m closing this issue for now as it seems to be resolved, but @sanjayss34, @litingfeng if you have any follow up questions feel free to reopen.

Hi @hila-chefer, I'm also experimenting with ViT-B/16 model and did the exact same process with @sanjayss34 did. I'm not really sure if this is an issue or not, but my hypothesis is that the ViT-B/16 model gives more attention to local behavior since it has a lower patch size compared to ViT-B/32.
Can you please help me to confirm whether my hypothesis is correct or not? Hereby I attached the code and some of the comparison between ViT-B/16 and ViT-B/32, following this amazing notebook  you've prepared.
Code:
# Add the link to ViT-B/16 in the_MODELS dictionary

clip.clip._MODELS = {
    "RN50": "https://openaipublic.azureedge.net/clip/models/afeb0e10f9e5a86da6080e35cf09123aca3b358a0c3e3b6c78a7b63bc04b6762/RN50.pt",
    "RN101": "https://openaipublic.azureedge.net/clip/models/8fa8567bab74a42d41c5915025a8e4538c3bdbe8804a470a72f30b0d94fab599/RN101.pt",
    "RN50x4": "https://openaipublic.azureedge.net/clip/models/7e526bd135e493cef0776de27d5f42653e6b4c8bf9e0f653bb11773263205fdd/RN50x4.pt",
    "RN50x16": "https://openaipublic.azureedge.net/clip/models/52378b407f34354e150460fe41077663dd5b39c54cd0bfd2b27167a4a06ec9aa/RN50x16.pt",
    "ViT-B/32": "https://openaipublic.azureedge.net/clip/models/40d365715913c9da98579312b702a82c18be219cc2a73407c4526f58eba950af/ViT-B-32.pt",
    "ViT-B/16": "https://openaipublic.azureedge.net/clip/models/5806e77cd80f8b59890b7e101eabd078d9fb84e6937f9e85e4ecb61988df416f/ViT-B-16.pt",
}

# Change the reshape in interpret from (1, 1, 7, 7) to (1, 1, dim, dim)
# where dim = int(image_relevance.numel() ** 0.5)

def interpret(image, text, model, device, index=None):
    logits_per_image, logits_per_text = model(image, text)
    probs = logits_per_image.softmax(dim=-1).detach().cpu().numpy()
    if index is None:
        index = np.argmax(logits_per_image.cpu().data.numpy(), axis=-1)
    one_hot = np.zeros((1, logits_per_image.size()[-1]), dtype=np.float32)
    one_hot[0, index] = 1
    one_hot = torch.from_numpy(one_hot).requires_grad_(True)
    one_hot = torch.sum(one_hot.cuda() * logits_per_image)
    model.zero_grad()
    one_hot.backward(retain_graph=True)

    image_attn_blocks = list(dict(model.visual.transformer.resblocks.named_children()).values())
    num_tokens = image_attn_blocks[0].attn_probs.shape[-1]
    R = torch.eye(num_tokens, num_tokens, dtype=image_attn_blocks[0].attn_probs.dtype).to(device)
    for blk in image_attn_blocks:
        grad = blk.attn_grad
        cam = blk.attn_probs
        cam = cam.reshape(-1, cam.shape[-1], cam.shape[-1])
        grad = grad.reshape(-1, grad.shape[-1], grad.shape[-1])
        cam = grad * cam
        cam = cam.clamp(min=0).mean(dim=0)
        R += torch.matmul(cam, R)
    R[0, 0] = 0
    image_relevance = R[0, 1:]

    # create heatmap from mask on image
    def show_cam_on_image(img, mask):
        heatmap = cv2.applyColorMap(np.uint8(255 * mask), cv2.COLORMAP_JET)
        heatmap = np.float32(heatmap) / 255
        cam = heatmap + np.float32(img)
        cam = cam / np.max(cam)
        return cam

    reshape_size = int(image_relevance.numel() ** 0.5)
    image_relevance = image_relevance.reshape(1, 1, reshape_size, reshape_size)
    image_relevance = torch.nn.functional.interpolate(image_relevance, size=224, mode='bilinear')
    image_relevance = image_relevance.reshape(224, 224).cuda().data.cpu().numpy()
    image_relevance = (image_relevance - image_relevance.min()) / (image_relevance.max() - image_relevance.min())
    image = image[0].permute(1, 2, 0).data.cpu().numpy()
    image = (image - image.min()) / (image.max() - image.min())
    vis = show_cam_on_image(image, image_relevance)
    vis = np.uint8(255 * vis)
    vis = cv2.cvtColor(np.array(vis), cv2.COLOR_RGB2BGR)

    plt.imshow(vis)
    plt.show()

hi, why can't I get results that make sense with your code, but use the author's source code can get, except "reshape_size = int(image_relevance.numel() ** 0.5), image_relevance = image_relevance.reshape(1, 1, reshape_size, reshape_size)" are valid

@louisowen6 sure, feel free to ask if you have any other questions :) I’m closing this issue for now as it seems to be resolved, but @sanjayss34, @litingfeng if you have any follow up questions feel free to reopen.

thanks

Hi @snowkueen, could you please explain the issue? I wasn’t able to reproduce. Are you using our colab notebook?


security/acme-client Delete Cert does not Delete certificate

I've noticed the following bug while using the ACME plugin.
After setup, and creating a certificate.
Select the certificate and click the delete icon.
Attempt to recreate the certificate (create new cert w/ same common name and SANs):
Expected:
Issue Success and only one of this certificate selectable in the UIs options
Actually happens:
/var/etc/acme.sh.log states "Certificate has not reached renewal date use --force"
have to manually delete all associated folder (acl GUID) under:
/var/etc/acme-client/certs/GUID
/var/etc/acme-client/keys/GUID
/var/etc/acme-client/configs/GUID
/var/etc/acme-client/home/commonname
Only then can I request the same cert and it succeed, then leaves the final bug of the UI having two certificates listed in drop downs to choose from. there should only be the new one, not both which includes the non-existent certificate.
Please advise.

Only then can I request the same cert and it succeed

Well, usually you should revoke the certificate before removing it.

/var/etc/acme.sh.log states "Certificate has not reached renewal date use --force"

However, in our next release we'll call acme.sh --remove when a certificate is removed from the GUI. This should fix the issue. You can test the fix as follows:
opnsense-patch -c plugins c3b9653d

then leaves the final bug of the UI having two certificates listed in drop downs to choose from. there should only be the new one, not both which includes the non-existent certificate.

I don't consider this to be a bug. We do this on purpose. In OPNsense you have two independent components:

the OPNsense certificate storage (a core component)
the Let's Encrypt plugin

Once a certificate was successfully created by the Let's Encrypt plugin it is uploaded to the OPNsense certificate storage. The Let's Encrypt plugin will never attempt to remove something from the certificate storage. This would risk to break services that might require this certificate to work as expected (OPNsense WebGUI, nginx, HAproxy, to name a few). Even worse, you wouldn't notice that something is broken until you restart the affected service, which could be a long time after removing the certificate.
So I have decided that the Let's Encrypt plugin should never remove anything from OPNsense certificate storage. But of course you can always remove obsolete certificates manually from System -> Trust -> Certificates.

fraenki... You get a gold star for a great reply.


[Bug]: Fall Ball incorrectly counting as final in Classic Knockout

What happened?

The tracker counts Fall Ball (and Jinxed also) as a final, even though it´s a regular round
Platform
Epic Games

Try it in v1.314.


Use helix queries

https://github.com/helix-editor/helix/tree/master/runtime/queries
They are better than the ones coming with the grammars. See https://github.com/helix-editor/helix/discussions/3020

And the scopes they use: https://docs.helix-editor.com/master/themes.html#syntax-highlighting


Add more unit tests

Creates unit tests for multiple functions.
Also fix some typing errors in MonarchMoney.

@grablair , please review if you would like.
I'll merge sometime this week.


cimi conventions for usage resources

Refactor the usage resources to follow the CIMI conventions: attributes should be camel-cased, etc.

Won't implement at this time.  See PR for rationale.


eden status doesn't work with GCP

When I run eden status and configured for GCP, it has no status indication:
EVE state: registered

✔ Adam status: container with name eden_adam is running
        Adam is expected at https://<IP_ADDRESS>:3333
        For local Adam you can run 'docker logs eden_adam' to see logs
✔ Registry status: container with name eden_registry is running
        Registry is expected at https://<IP_ADDRESS>:5000
        For local registry you can run 'docker logs eden_registry' to see logs
✔ Redis status: container with name eden_redis is running
        Redis is expected at redis://<IP_ADDRESS>:6379
        For local Redis you can run 'docker logs eden_redis' to see logs
✔ EServer process status: container with name eden_eserver is running
        EServer is expected at http://<IP_ADDRESS>:8888 from EVE
        For local EServer you can run 'docker logs eden_eserver' to see logs
✔ EVE REMOTE IPs: <IP_ADDRESS>; fec0::160:88b7:ff10:cfdb; fe80::d3ee:39b5:2a71:9a15; <IP_ADDRESS>; fec0::20f7:8d4b:3eb1:691c; fe80::dfb1:fe5e:d764:a64b
        Last info received time: 2020-09-10 11:46:12 +0000 UTC

There is no real EVE state, except for the top line, which must be wrong, because there is no vm running, and I didn't open the port to adam yet.

Could you please tell how do you configure. It looks like a standard Qemu run

It isn't qemu, if it were, it would have had the qemu status line right after the remote IPs.
I did make CONFIG='--devmodel GCP' build and then eden setup --eve-tag <mytag> and then eden start and then eden status

It looks it's because we had problems with eden clean

Is this related to #251?
So how do I fix my process so I can get it working?

I believe it's fixed


feat(layer): add madsim layer

Fix https://github.com/apache/incubator-opendal/issues/1871

Hi @wangrunji0408, could you please take a look when you have some free time? Thank you in advance.

Please update with main branch to avoid possible conflicts.

Let's integrate this layer for real use-cases and than improve it.


some way to find an element in relation to another element

Split from https://github.com/eeue56/elm-html-test/issues/32 by request.
some way to find an element in relation to another element.  In this example, find the button in "Section A" (and ignore the button in "Section B"):
div []
    [ section []
        [ h3 [] [ text "Section A" ]
        , button [] [ text "Submit" ]
        ]
    , section []
        [ h3 [] [ text "Section B" ]
        , button [] [ text "Submit" ]
        ]
    ]

Possible API:
Query.find
    [ tag "section"
    , havingChild [ tag "h3", text "Section A" ]
    ]
    |> Query.find [ tag "button", text "Submit" ]

Another possible API:
Query.find
    [ tag "button"
    , text "Submit"
    , havingAncestor [ tag "section", text "Section A" ]
    ]

I like the idea of a variation on the first API that works on descendants instead of children, and calling it containing instead of havingChild - more notes on why here.


Create easy way for community alert CC staff of upcoming platforms

Either here, via Google form, or elsewhere. Have some easy criteria/questions submitter can answer (version of Threshold/Guiding questions).

combine with an easy spot on github or elsewhere where platforms can list themselves as a CC platform, or add themselves to a queue where we can help them add CC licensing


Typo on main page: mirco -> micro

my pedantic hour ;)

You're not the only one but merged it anyway 👍 thank you!