gnome3: Package all the Gnome extensions

Motivation for this change
An automatic way to do this that scales up and requires little manual intervention is really needed. It works by scraping extensions.gnome.org with a python script,
that writes all relevant information into the extensions.json. Every attribute of besaid file can be built into a package using buildShellExtension.
Extensions are grouped by Gnome shell version for practical reasons. Only extensions for Gnome 3.36 and 3.38 were added for now. If desired, we can always add older versions later on.
The extensions are exposed as an attrset, pkgs.gnome36Extensions and pkgs.gnome38Extensions respectively. The package name of each extensions is generated automatically
from its name and also contains its running index ID (e.g. pkgs.gnome36Extensions.system-monitor-120) to avoid collisions.
The old, manually packaged extensions under pkgs.gnomeExtensions are left as they are for now for backwards compatibility. We could link them to the new ones and then remove
the manual packaging, or keep them, or delete them alltogether. We could also link pkgs.gnomeExtensions to pkgs.gnome38Extensions or whatever the most recent version is (similar to what is done for pythonPackages).

You can have a look at all the extensions in my NUR.
Things done

[ ] Tested using sandboxing (nix.useSandbox on NixOS, or option sandbox in nix.conf on non-NixOS linux)
Built on platform(s)

[ ] NixOS
[ ] macOS
[x] other Linux distributions

[ ] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[x] Tested compilation of all pkgs that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review pr 108414"
[ ] Tested execution of all binary files (usually in ./result/bin/)
[ ] Determined the impact on package closure size (by running nix path-info -S before and after)
[ ] Ensured that relevant documentation is up to date
[ ] Fits CONTRIBUTING.md.

@GrahamcOfBorg eval

@ofborg eval

I'm not going to suggest my changes on the diff because I think it's more helpful to address this conceptually. I'm going to start with the points that are going to influence how this code looks the most.

Transitioning our current packaging to this

There are a few issues:

Every package needs a maintainer ideally
How the builder works is not going to be, and I don't expect it to be, enough for every package to work in nixos
index ID in package name to avoid collisions?

I'm going to try to explain these in detail and suggest what I think we should do.
Number 1&2
1&2 are linked so I will answer them similarly.
To help me explain this I'm going to go over how I see nodePackages working since it's kinda similar to the issue we have here, except that packaging generates nix and here we don't.
If you already know about nodePackages in detail then sorry in advance since I'll probably be reexplaining things you already understand.
In node-packages/default.nix,  there is a detailed file of overrides, this is achievable because buildNodePackage works like many of the other buildXPackage functions in nixpkgs.
So as a first tangible goal there's:

Make buildShellExtension flexible

We can then have overrides for some of these packages so the more complicated extensions can actually work, and have maintainer fields. I would then request that we should split out the overrides into separate files, and not one giant one.
Number 3
There is an alternative to having the index ID be in the name. This would be having every package number by their UUID...  I have to say that, to a user, adding<EMAIL_ADDRESS>seems a bit more sensible than a "strange number".  So second tangible goal:

Name packages after UUID instead of dash separated names and index ID

For now I would say that good examples to see how this works in nixpkgs is buildPythonPackage and node-env.nix buildNodePackage.
Tangents
Another parallel that we can have with nodePackages  is node-packages.json. The process of packaging a node-package is to add the program you want to the file and regenerate using the node2nix tool. They don't package all of node, and they probably shouldn't and couldn't :grinning:  But here I think it's acceptable to expose all of them,
my tab completion said "300 lines". The issue is that it could be interpreted that all 300 packages are going to work. This is difficult because you'll only know... exactly inside gnome-shell. It's not like the haskell packaging where it can be marked as broken right away and someone can file a bug. So maybe a second goal is finding a way to tell the user that "nixpkgs has all the gnome-extensions, most should work but some may be broken". Ideally with documentation and something in the nix output.
I'm going to steer away from documentation being a goal for now because we're just at a point where things might change a lot, but the other point can be implemented in nix code.
I could suggest:

a blocklist and an allow list

meta.broken is exactly this. Though I have the feeling someone might disagree on this, since I believe there has been a discussion about "broken build & broken at runtime", and this has yet to be sorted out.  The alternative would be to do nothing and let people report them as broken. I'm thinking likely this will be what we have to do.
Closing
Thank you soo much for your PR @piegamesde  :sparkles:
I've been hoping for something like this for a while and you did it.
Lately my availability has been a bit better now, and I'm only choosing to focus on a few PRs and this is one of them. I don't want this to go unnoticed. Also, thank you @andir for the preliminary review.
:v:

Primary keys
Let's get #3 out of the way first. Every extension has multiple unique identifiers. The UUID is one, and the number at the end of a name is one as well. I chose the $name-$number schema because because it can literally be copied out of the extension's URL and it's better to read IMO. But in the end, I don't really care. We can easily switch to another primary key, I'd be even fine with both. The only thing I don't want is manual names, or some other manual maintenance overhead.
Maintenance
Speaking of which, as long as there is little to no manual overhead to the individual extensions, I'd be willing to maintain them all.

How the builder works is not going to be, and I don't expect it to be, enough for every package to work in nixos

The extensions are installed exactly the way as it would be done through Gnome UI. And except for those that do some platform-specific magic foo (I haven't encountered any yet), all those that work on "normal" Gnome should work as well. But I agree that we need some kind of override mechanism for custom packaging.
Moving on
I propose to implement the following things:

Make buildGnomeExtension overrideable. All custom packaging needs can be done in the default.nix by overriding the specified extensions. In heavy cases, we can completely overwrite the derivation with custom packaging.
The blocklist can be implemented by overriding the broken attribute of the affected extensions.
I don't quite see what the allow list is good for. I think the number of up to date Gnome extensions will be manageable in the foreseeable future. As Nix evaluation is inherently lazy, overwritten extensions simply won't be evaluated.

An alternative proposal would be to only package the buildGnomeExtension and the JSON index together with some convenience tooling, so that everybody effectively assembles the parts themselves. I'm slightly against this, but at least it would solve the "communicate that things may break" issue.

An alternative proposal would be to only package the buildGnomeExtension and the JSON index together with some convenience tooling, so that everybody effectively assembles the parts themselves. I'm slightly against this, but at least it would solve the "communicate that things may break" issue.

Yeah, I'm against this as well. As mentioned there is just too few extensions for it to be worth doing that.

Speaking of which, as long as there is little to no manual overhead to the individual extensions, I'd be willing to maintain them all.

Considering you mentioned someway of creating automated testing, I think we're all in good hands :grin:

Overall the proposed changes are fine. But I would still harp on the index-id -> uuid change, because out of context it just feels weird to have some numbers with no apparent reason (to the enduser) in the package name. UUID's are typically suited for this purpose and somewhat ubiquitous with certain people.

I don't quite see what the allow list is good for. I think the number of up to date Gnome extensions will be manageable in the foreseeable future. As Nix evaluation is inherently lazy, overwritten extensions simply won't be evaluated.

Oops, the allow list is simply what people put in their configuration (to build a broken package), and this already exists.

@worldofpeace I've thought about this again, and I really don't like using the UUIDs as primary identifiers. These will be the names that people will see (and have to look for) in the search. They are bulky, inconsistent in their casing and comparatively hard to discover. So I somewhat retract my claim about not caring about this.
My proposal for using the informal ID from the extension's URL still stands. But if you prefer, I propose to try remove the number from the name unless there are some collisions.

I went ahead and renamed all the packages according to my previous comment. I really like the new names a lot more. I did a quick check and there don't seem to be any name collisions so far.

I did a quick check and there don't seem to be any name collisions so far.

Sadly, I have to take that back. After fixing some embarassing bug, it now finds quite a few collisions. I honestly can't tell if this is fine, or if there are too many and we should go back to one of the other approaches

It seems to me like the gnomeXYExtensions attributes are not properly evaluated:

The tooling (nix search etc.) does not show the packages, though it should
The CI ran through although all extensions are broken since a few commits. Meaning that no packages were built.

Did I miss something in all-packages.nix or along the way, that I should have done?

Here's a list of all collisions that came up so far (pname -> list of all UUIDs with that pname):
bottom-panel =><EMAIL_ADDRESS><EMAIL_ADDRESS>alternative-status-menu =><EMAIL_ADDRESS><EMAIL_ADDRESS>applications-menu =><EMAIL_ADDRESS><EMAIL_ADDRESS>static-workspaces =><EMAIL_ADDRESS><EMAIL_ADDRESS>workspace-indicator =><EMAIL_ADDRESS><EMAIL_ADDRESS>window-list =><EMAIL_ADDRESS><EMAIL_ADDRESS>islamic-datetime-functions =><EMAIL_ADDRESS><EMAIL_ADDRESS>remove-panel-app-menu =><EMAIL_ADDRESS>'RemovePanelAppMenu']
jump-lists =><EMAIL_ADDRESS><EMAIL_ADDRESS>lock-keys =><EMAIL_ADDRESS>'lockkeys@fawtytoo']
quicklaunch =><EMAIL_ADDRESS><EMAIL_ADDRESS>connection-manager =><EMAIL_ADDRESS><EMAIL_ADDRESS>extend-left-box =><EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS>status-title-bar =><EMAIL_ADDRESS><EMAIL_ADDRESS>show-desktop-button =><EMAIL_ADDRESS>'show-desktop-button@amivaleo']
recent-items =><EMAIL_ADDRESS><EMAIL_ADDRESS>activities-button-text =><EMAIL_ADDRESS>'activities-button-text@nls1729']
hide-dash =><EMAIL_ADDRESS><EMAIL_ADDRESS>lock-screen =><EMAIL_ADDRESS>'lock-screen@zardoz']
force-quit => ['force-quit@xtranophilist', 'fq@megh']
system-monitor =><EMAIL_ADDRESS><EMAIL_ADDRESS>advanced-settings-in-usermenu =><EMAIL_ADDRESS><EMAIL_ADDRESS>analog-clock =><EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS>hide-clock =><EMAIL_ADDRESS><EMAIL_ADDRESS>google-search =><EMAIL_ADDRESS><EMAIL_ADDRESS>empathy-gwibber-in-usermenu =><EMAIL_ADDRESS>'empathy-gwibber-in-usermenu-3.6']
fuzzy-clock => ['Fuzzy_Clock@dallagi', <EMAIL_ADDRESS>panel-settings =><EMAIL_ADDRESS><EMAIL_ADDRESS>eye =><EMAIL_ADDRESS><EMAIL_ADDRESS>brightness-control =><EMAIL_ADDRESS><EMAIL_ADDRESS>steal-my-focus =><EMAIL_ADDRESS><EMAIL_ADDRESS>shell-restart-user-menu-entry => ['restart-entry@atomant', 'restart-shell-entry@atomant']
extension-list =><EMAIL_ADDRESS><EMAIL_ADDRESS>quicklists =><EMAIL_ADDRESS><EMAIL_ADDRESS>currency-converter =><EMAIL_ADDRESS><EMAIL_ADDRESS>settingscenter =><EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS>jenkins-ci-server-indicator =><EMAIL_ADDRESS><EMAIL_ADDRESS>dash-hotkeys =><EMAIL_ADDRESS>'DashHotkeys@n1861']
applications-overview-tooltip => ['Applications_Overview_Tooltip@Tornado', 'applications-overview-tooltip@RaphaelRochet']
drop-down-terminal =><EMAIL_ADDRESS><EMAIL_ADDRESS>apps-on-top =><EMAIL_ADDRESS>'apps-on-top@RaphaelRochet']
stopwatch =><EMAIL_ADDRESS><EMAIL_ADDRESS>topicons => ['topIcons<EMAIL_ADDRESS><EMAIL_ADDRESS>show-desktop-from-overview =><EMAIL_ADDRESS>'ShowDesktopFromOverview_shell_3.30']
alsa-mixer =><EMAIL_ADDRESS><EMAIL_ADDRESS>messaging-menu =><EMAIL_ADDRESS><EMAIL_ADDRESS>quit-from-dash =><EMAIL_ADDRESS>'quitfromdash@egork8n', <EMAIL_ADDRESS>notes =><EMAIL_ADDRESS><EMAIL_ADDRESS>bumblebee-indicator =><EMAIL_ADDRESS><EMAIL_ADDRESS>taskbar => ['TaskBar@zpydr', <EMAIL_ADDRESS>remove-app-menu =><EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS>text-translator =><EMAIL_ADDRESS><EMAIL_ADDRESS>lunar-calendar =><EMAIL_ADDRESS>'lunarcal@jmchxy']
wanda-the-fish =><EMAIL_ADDRESS><EMAIL_ADDRESS>gnome-shell-open-terminal =><EMAIL_ADDRESS><EMAIL_ADDRESS>screenshot-window-sizer =><EMAIL_ADDRESS><EMAIL_ADDRESS>hide-activities-button =><EMAIL_ADDRESS><EMAIL_ADDRESS>shutdowntimer => ['ShutdownTimer@neumann', 'shutdown-timer-gnome-shell-extension']
extension-update-notifier => ['Extension_Update_Notifier<EMAIL_ADDRESS><EMAIL_ADDRESS>battery-status =><EMAIL_ADDRESS><EMAIL_ADDRESS>battery-percentage =><EMAIL_ADDRESS><EMAIL_ADDRESS>freon =><EMAIL_ADDRESS>'freon@Veske']
scroll-panel =><EMAIL_ADDRESS><EMAIL_ADDRESS>optirun => ['gnome-optirun@TCG', 'gnome-optiprime@kalteseele']
display-switcher =><EMAIL_ADDRESS><EMAIL_ADDRESS>services-panel =><EMAIL_ADDRESS><EMAIL_ADDRESS>media-keys => ['media-keys@mafflin', 'media-keys-test@haykerman']
esc-to-close-overview-from-applications-list =><EMAIL_ADDRESS><EMAIL_ADDRESS>disable-gestures =><EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS>nepali-calendar =><EMAIL_ADDRESS><EMAIL_ADDRESS>hamster-time-tracker =><EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS>task-icons =><EMAIL_ADDRESS><EMAIL_ADDRESS>ip-finder =><EMAIL_ADDRESS><EMAIL_ADDRESS>timewarrior-indicator =><EMAIL_ADDRESS><EMAIL_ADDRESS>noannoyance =><EMAIL_ADDRESS><EMAIL_ADDRESS>gnome-global-application-menu => ['gnomeGlobalAppMenu@lestcape', 'GnomeGlobalAppMenu_fix_@lestcape']
transparent-top-bar =><EMAIL_ADDRESS><EMAIL_ADDRESS>auto-ovpn =><EMAIL_ADDRESS><EMAIL_ADDRESS>nordvpn-status =><EMAIL_ADDRESS><EMAIL_ADDRESS>mpris-indicator-button =><EMAIL_ADDRESS><EMAIL_ADDRESS>transparent-window =><EMAIL_ADDRESS>'transparentwindows.mdirshad07']
panel-date-format =><EMAIL_ADDRESS><EMAIL_ADDRESS>desktop-icons => ['desktop-icons@csoriano', 'desktop-icons@xtilam']
azan-islamic-prayer-times =><EMAIL_ADDRESS><EMAIL_ADDRESS>dark-theme-toggle =><EMAIL_ADDRESS>'adwaita_papirus_dark-light_toggle@OldKnitterhemd']
desktop-scroller-gnome-332 =><EMAIL_ADDRESS><EMAIL_ADDRESS>wg-indicator =><EMAIL_ADDRESS><EMAIL_ADDRESS>apps-to-panel => ['apps-to-panel@leavitals', 'apps-to-panel@aunetx']
panel-indicators => ['panel-indicators@leavitals', 'panel-indicators-testing@akhil']
floating-dock => ['floatingDock<EMAIL_ADDRESS>'floating-dock<EMAIL_ADDRESS>wireguard-indicator =><EMAIL_ADDRESS><EMAIL_ADDRESS>custom-menu =><EMAIL_ADDRESS>'custom_menu@adv']
big-sur-status-area => ['bigSur-StatusArea@korpsvart', 'BigSurStatusArea@korpsvart']

I discussed this with @maralorn and we came to the following conclusion:

The UUIDs are a horrible mess, we don't want that as our primary identifiers
All extensions use their human readable name by default.
When a collision occurs, all packages get their name appended with their pk, which makes them unique. The old name gets an alias towards the first one.
That alias can easily be overridden in an overlay. Maybe we will already use that for maintenance purposes (I think there are circumstances in which it is fine to swap out user's extensions). This as topic for a later day though.
An alternative is to have all extensions with the ID and always create an alias to the first one with a specific name. maralorn was against it because it would effectively duplicate the items in the list for nothing.

I agree with @worldofpeace that it makes more sense to use UUIDs as primary identifier, rather than the numeric id. The former is inherent to the extension, while the latter is tied to the extension portal.

* The UUIDs are a horrible mess, we don't want that as our primary identifiers

* All extensions use their human readable name by default.

This makes sense to me, thought maybe I would still index the extension in the JSON file by the UUID and use the human readable name as a second-level mapping.

* When a collision occurs, all packages get their name appended with their `pk`, which makes them unique. The old name gets an alias towards the first one.

It is not clear to me what pk is and how it would disambiguate the extensions (in the code, pk seems to refer to GNOME version but the name is still unclear).
In some cases, we might even not want to expose the duplicates by a human readable name, since many of those are long abandoned extensions that now live as forks. UUIDs might be sufficient to access them if someone really wants to.

* That alias can easily be overridden in an overlay. Maybe we will already use that for maintenance purposes (I think there are circumstances in which it is fine to swap out user's extensions). This as topic for a later day though.

Yeah, with the two level structure, that will be easy. We will probably still need some hand curation to weed out the abandoneds anyway.

* An alternative is to have all extensions with the ID and always create an alias to the first one with a specific name. maralorn was against it because it would effectively duplicate the items in the list for nothing.

I am for this but with separate lists and UUIDs instead.

Also, it would be nice to flesh out how the custom packaging fits into this a bit more. For example: https://github.com/NixOS/nixpkgs/blob/2a2df0501977b8187bac2a16ae2636c4b2a5f138/pkgs/desktops/gnome-3/extensions/gsconnect/default.nix
And I am still not sure about having separate gnomeXYExtensions rather than just exposing the latest (since we don’t want to have multiple GNOME Shell versions in Nixpkgs). And custom packages will not be compatible with that scheme either.

It is not clear to me what pk is and how it would disambiguate the extensions (in the code, pk seems to refer to GNOME version but the name is still unclear).

Yeah sorry about that, I should have written it better. pk is a counting and unique index given to every extension. You find it in the URL of every extension's site. The confusing thing is that extension versions have a field called pk as well in the search results.

In some cases, we might even not want to expose the duplicates by a human readable name, since many of those are long abandoned extensions that now live as forks. UUIDs might be sufficient to access them if someone really wants to.

That is true. But in other cases, there are multiple independent and maintained extensions with the same name (for example system-monitor).

Also, it would be nice to flesh out how the custom packaging fits into this a bit more.

I can try to do this. But my idea was to simply do something like gnome36Extensions = lib.recurseIntoAttrs (produceExtensions "36") // { gsconnect = …; }, there's nothing special about that.

And I am still not sure about having separate gnomeXYExtensions rather than just exposing the latest (since we don’t want to have multiple GNOME Shell versions in Nixpkgs).

My motivation for this is twofold: There may be differences between the packaged shell extensions and the nixpkgs Gnome shell. For example, when using the unstable shell on a release. In my case, I'm on Arch Linux and don't use the Gnome of nixpkgs at all (although I'll admit that's a very niche use case).
The more important pain point though is that Gnome shell major bumps are rough. In the time around the update, few extensions are updated. If we filter all extensions that haven't updated yet, this means that users' config might not build once unstable bumped the version. Sometimes, older extensions work just fine so there should be a possibility to access them either way.
I propose adding gnomeExtensions as an alias to the currently matching extensions set. An alternative would be to simply package all the gnome extensions, unfiltered. I experimented with setting all of those that aren't up to date as "broken", but it wasn't a really pleasant experience.

And custom packages will not be compatible with that scheme either.

That is a very good point. It would work by adding the name in the override for every shell version that it supports. But that's not pretty indeed. I'll have to think about this some more

The more important pain point though is that Gnome shell major bumps are rough. In the time around the update, few extensions are updated. If we filter all extensions that haven't updated yet, this means that users' config might not build once unstable bumped the version.

I meant just listing latest available version no matter which version it targets. Either it will be compatible with the GNOME Shell in Nixpkgs or it will not. Keeping the older versions will not really help for newer versions of Nixpkgs (or Arch, which updates even faster than us right now).

Sometimes, older extensions work just fine so there should be a possibility to access them either way.

Actually, I just learnt extensions will need explicit bump for GNOME Shell 40: https://blogs.gnome.org/shell-dev/2021/03/12/gnome-40-your-extension/

I meant just listing latest available version no matter which version it targets.

Of the 270 extensions that support both 3.38 and 3.36, 67 have different versions for each, meaning that their latest release does not support 3.36 anymore. Using a "only latest version" packaging, all these would not work on NixOS stable.
'bottom-panel', 'panel-favorites', 'applications-menu', 'removable-drive-menu', 'places-status-indicator', 'windownavigator', 'applications-menu-13', 'auto-move-windows', 'native-window-placement', 'user-themes', 'workspace-indicator', 'trash', 'kimpanel', 'windowoverlay-icons', 'backslide', 'text-translator', 'launch-new-instance', 'window-list-602', 'break-reminder', 'hibernate-status-button', 'minimize-all', 'clipboard-indicator', 'switch-focus-type', 'freon', 'volume-mixer', 'screenshot-window-sizer-881', 'mailnag', 'refresh-wifi-connections', 'multi-monitors-add-on', 'switcher', 'keyboard-modifiers-status', 'applications-overview-tooltip-1071', 'activity-app-launcher', 'switch-workspace', 'gsconnect', 'nvidia-gpu-stats-tool', 'bluetooth-quick-connect', 'transparent-window-moving', 'workspace-matrix', 'notification-centerselenium-h', 'worksets', 'nordvpn-connect', 'animation-tweaks', 'overview-navigation', 'transparent-top-bar-1708', 'cmus-status', 'no-title-bar-forked', 'horizontal-workspaces', 'mute-spotify-ads', 'reminder-alarm-clock', 'floating-dock', 'gnordvpn-local', 'fully-transparent-top-bar', 'brightness-control-using-ddcutil', 'ibus-tweaker', 'tray-icons-reloaded', 'bring-out-submenu-of-power-offlogout-button', 'control-blur-effect-on-lock-screen', 'light-dict', 'bowser-gnome-extension', 'user-themes-x', 'ss-subscriber', 'extension-list-3088', 'color-picker', 'ascii-emoji-buckets', 'hack', 'distinct-windows'

Actually, I just learnt GNOME Shell 40 requires explicit support declaration for extensions again

Yeah, but I don't expect this to be the new default. I think it mainly is because of the workspace overhaul (and maybe also the new versioning scheme?).

Regarding the duplicated extension names, I'm thinking about managing all name collisions manually, with some tooling assistance. In the case of system-monitor, I'll probably call them system-monitor and system-monitor-2. In many other cases, there is a clear "winner" and we don't need to care about the others.
How about this: The gnomeExtensions attribute contains curated extensions by human readable name, that match the current nixpkgs' Gnome Shell version. Conflicts are resolved, and some extension packages are hand-crafted. But there also is a mechanism to access all the other extensions, with little modification from what the automatic generation spits out. I don't know how to make this discoverable without spamming the results with redundant entries. Maybe a function?

I just wrote a really long comment on this which could swallowed by connectivity issues. I’ll talk to @piegamesde via different means and they can then report back here later.

I made all the collision handling to be per Shell version instead of global:
{
  "36": {
    "applications-menu": [
<EMAIL_ADDRESS><EMAIL_ADDRESS>    ],
    "lock-keys": [
<EMAIL_ADDRESS>      "lockkeys@fawtytoo"
    ],
    "noannoyance": [
<EMAIL_ADDRESS><EMAIL_ADDRESS>    ],
    "transparent-window": [
<EMAIL_ADDRESS>      "transparentwindows.mdirshad07"
    ],
    "floating-dock": [
      "floatingDock<EMAIL_ADDRESS>      "floating-dock<EMAIL_ADDRESS>    ],
    "remove-app-menu": [
<EMAIL_ADDRESS><EMAIL_ADDRESS>    ],
    "wireguard-indicator": [
<EMAIL_ADDRESS><EMAIL_ADDRESS>    ],
    "big-sur-status-area": [
      "bigSur-StatusArea@korpsvart",
      "BigSurStatusArea@korpsvart"
    ]
  },
  "38": {
    "applications-menu": [
<EMAIL_ADDRESS><EMAIL_ADDRESS>    ],
    "workspace-indicator": [
<EMAIL_ADDRESS><EMAIL_ADDRESS>    ],
    "lock-keys": [
<EMAIL_ADDRESS>      "lockkeys@fawtytoo"
    ],
    "transparent-window": [
<EMAIL_ADDRESS>      "transparentwindows.mdirshad07"
    ],
    "floating-dock": [
      "floatingDock<EMAIL_ADDRESS>      "floating-dock<EMAIL_ADDRESS>    ]
  }
}

As you can see, there are far less collisions, and most of them actually are different extensions with the same name. Resolution is done through a manually-maintained mapping (the extensionRenames field in the default.nix). The code is still a bit buggy though, and I don't really know why (try building lock-keys and lock-keys-2).
I'd really like to test the search with all of these, but I couldn't manage to point nix search to use a local nixpkgs checkout.

This pull request has been mentioned on NixOS Discourse. There might be relevant details there:
https://discourse.nixos.org/t/what-are-your-goals-for-21-05/11559/17

Sorry, I mixed up the tabs and merged the wrong pull request. Reverted in #118184. Please reopen, @piegames. You might need to create a new branch for GitHub to allow you to create a new PR.

Moved to #118232


how to form a ram_plus_tag_embedding_class_4585_des_51.pth for my own data.

In the fourth step of model training preparation, you need to download aram_plus_tag_embedding_class_4585_des_51.pthfile. Looking at the code, this file seems to be used for tag embedding. I read it in the code and saw that the shape is ([233835, 512]). I would like to know how this file is formed and how to form such a file when preparing my own data set for processing.

I already know that theram_tag_list_4585_llm_tag_descriptions.jsontext is 233835 based on 4585*51, which should be the embedding of the description corresponding to the tag. Is there any other document that describes how to generate this embedding or what model is used to generate the embedding?

I think I already know how to do it

@DWHNicholas Could you please explain briefly how?


azure-mgmt-consumption is using the wrong API version

Hello,
Using the following PIP packages.
azure-common (1.1.23)
azure-mgmt-compute (5.0.0)
azure-mgmt-consumption (3.0.0)
azure-mgmt-nspkg (3.0.2)
azure-mgmt-reservations (0.3.2)
azure-mgmt-resource (3.0.0)
azure-nspkg (3.0.2)

The azure-mgmt-consumption package is using the wrong API version right now.
With the following code,
reservation_client = AzureReservationAPI(credentials)
consumption_client = ConsumptionManagementClient(credentials, SUBSCRIPTION_ID)

reservation_summaries = consumption_client.reservations_summaries.list_by_reservation_order(reservation_order_id, 'daily', filter_query)

Will fail with the following error.
azure.mgmt.consumption.models.error_response.ErrorResponseException: (InvalidResourceType) The resource type 'reservationSummaries' could not be found in the namespace 'Microsoft.Consumption' for api version '2019-04-01-preview'. The supported api-versions are '2017-06-30-preview,2017-11-30,2018-01-31,2018-03-31,2018-06-30,2018-08-31,2018-10-01,2019-01-01-preview,2019-01-01,2019-05-01'.

It’s working if you update manually the API version to the latest
consumption_client.reservations_summaries.api_version =  '2019-05-01'

Thanks @alk-jbrochet  for pointing out the version issue. I've labeled this issue to bring it to the attention of the team.

Hello, some update on this? Thanks!

Similar to the example above, budgets has a hardcoded API value in the budgets_operations.py file that causes a non-EA offer subscription to be unable to create a budget via the API. Ideally, this could be passed to the ConsumptionManagementClient similarly to the implementation in AuthorizationManagementClient

The same for : consumption_client.price_sheet.api_version = '2019-10-01'

We need to release a new SDK version to fix this issue. Add "Service Attention" to include service team to confirm they are fine with the new release and their swgger are ready. thx

Yes, we are ready and we have no concerns. Please release a new version.

closing as per Prem's comments. thank you!


closed ring segment buffer

Have you thought of implementing a closed ring buffer for segmented protocols (Youtube, HLS, HDS...) ? I mean, if some segments are not downloaded at time, on --player-external-http, just rotate the already downloaded to be served to the player. As an option.
Thanks for you great soft.
Regards
/ts

Not sure I understand your request, but if you want to skip a segment and move to the next one if it is too slow to download you can do it by setting the timeout lower and the maximum attempts to 1.
HLS example, this will move on to the next segment if it failed to download a segment under 4 seconds:
livestreamer --hls-segment-attempts=1 --hls-segment-timeout=4

Yes, I guess I have not explained correctly. I mean, if there is an internet disruption and no segments are accessible during a period of time (say 1 or 2 minutes), just recycle the old segments in the output, just repeating the latest ones. Could be an option of: "--loop-hs-segments 3", that would repeat the latest 3 segments until new segments are again accessible from the HLS server

I see, I don't think that's really possible though. Segments must be played in the correct order or the player will run into playback issues, such as audio sync issues, freezing video or just stop completly.
The only way to play a segment from the past correctly would be to reinitialize the video decoder, but that is something we can't do from our end since we just feed the player a stream of data.

I have tested disordering .ts segments in an m3u8 using ffplay as player, and it plays smoothly. I dont know other players behavior, however it would be only an option for those who want to use it.
Thanks for your replies.


What is this someone please

Describe the issue

Code of Conduct

[X] I agree to follow the IETF's Code of Conduct

Clarify your question, please. Note that you agreed to follow the IETF's Code of Conduct.
If you are not already familiar with the IETF, start at www.ietf.org.


Integration of jQAssistant

Currently, generator2 requires a database that is created by jQAssistant as input. However, it would be much more convenient that the generator creates the database itself, e.g. by an entry in settings.properties:
input.jar = http://path/to/jar
input.war = http://path/to/war
Then, the Generator does the following:

Download jar/war file
run jQAssistant to create the database
run the generation process with the created database

Addition: It sholud be possible to define multiple jar/war files, not only one

fixed on development branch


The Conversation Saving System is Terrible

Seriously, I must have wrote it during a fever dream.
It desperately needs a rewrite for both performance gains and preventing potential bug issues.

Completed in V3.0


Invalid Characters in Path

Describe the bug
I updated to the new Storybook (v7 that's coming out) and ran my build suite and I got this error message.
Not sure if it's complaining about virtual: or @storybook but my bet is on virtual: since colons in windows paths can be weird. And I don't think storybook is generating that path.
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Unhandled Error ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Error: Path contains invalid characters: [the path to my project]\coverage\virtual:\@storybook\builder-vite
 ❯ checkPath node_modules/make-dir/index.js:16:18
 ❯ module.exports.sync node_modules/make-dir/index.js:108:2
 ❯ FileWriter.writeFile node_modules/istanbul-lib-report/lib/file-writer.js:184:16
 ❯ HtmlReport.onSummary node_modules/istanbul-reports/lib/html/index.js:364:44
 ❯ Visitor.value node_modules/istanbul-lib-report/lib/tree.js:38:38
 ❯ ReportNode.visit node_modules/istanbul-lib-report/lib/tree.js:86:21
 ❯ node_modules/istanbul-lib-report/lib/tree.js:92:19
 ❯ ReportNode.visit node_modules/istanbul-lib-report/lib/tree.js:91:28
 ❯ ReportTree.visit node_modules/istanbul-lib-report/lib/tree.js:127:24

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯Serialized Error: {
  "code": "EINVAL",
}

Reproduction
Install the release candidate of the v7 of Storybook, don't add the generated folder in the exclude list and run vitest with c8 as the coverage reporter.
The workaround is to add the storybook-static folder to the exclude list.
System Info
Windows 10
VSCode
Svelte project running vite and vitest

Used Package Manager
npm
Validations

[X] Follow our Code of Conduct
[X] Read the Contributing Guidelines.
[X] Read the docs.
[X] Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
[X] Check that this is a concrete bug. For Q&A open a GitHub Discussion or join our Discord Chat Server.
[X] The provided reproduction is a minimal reproducible example of the bug.

@olafurw I'm happy to help if you could provide a minimal reproduction case for this. I haven't heard of this kind of issue before and do not know what could be causing it yet.

Been trying for a repo case, on StackBlitz it just sits when running npm run test and doesn't stop (let it run for 2 hours) and locally it doesn't happen.
Here's the StackBlitz if you're curious. Just npm run build and storybook:build and then npm run test, but it never finishes.
https://stackblitz.com/edit/vitejs-vite-ynloe9?file=package.json

c8 does not work on Stackblitz due to web containers limitations. I'm unable to reproduce the issue locally using that project.

Close for now until I have a better repo.


Have It Broadcast tool?

I want to know if this programa have rcon tool with Broadcast messages because i already tried many diferentes server mánagers and Broadcast messages not working in ark ascended with rcon tools

Sure, no problem, I have added RCON feature: https://github.com/Ch4r0ne/ARK-Ascended-Server-Manager/releases/tag/1.0.6


#! [euphoria-spark] Upgrade to Spark 2.1.0

No reason to wait with upgrade to the newest Spark. Tried running it with our benchmarks and it worked pretty well.

👍  many thanks!


Simplified user interface for tensorOps functions

The tensor ops functions typically require a single/combination of integer arguments to set the bounds for the function. Take for example:
template< std::ptrdiff_t ISIZE, typename VECTOR >
LVARRAY_HOST_DEVICE CONSTEXPR_WITHOUT_BOUNDS_CHECK inline
auto l2NormSquared( VECTOR const & vector )
{
  static_assert( ISIZE > 0, "ISIZE must be greater than zero." );
  internal::checkSizes< ISIZE >( vector );

  auto norm = vector[ 0 ] * vector[ 0 ];
  for( std::ptrdiff_t i = 1; i < ISIZE; ++i )
  {
    norm = norm + vector[ i ] * vector[ i ];
  }
  return norm;
}

The call looks something like:
l2NormSquared<3>(array)

where the N(3) is always required, and the type VECTOR is deduced. This is a little bit clunky imo. We could do something where we deduced both a size and type. Like so:
#include <tuple>
#include <iostream>
#include <type_traits>

template< typename _T >
  struct HasMemberFunction_size_impl
  {
private:
    template< typename CLASS > static constexpr auto test( int )->decltype( std::is_convertible< decltype( std::declval< CLASS >().size(  ) ), int >::value, int() )
    { return CLASS::size(); }
    template< typename CLASS > static constexpr auto test( ... )->int
    { return sizeof(CLASS)/sizeof(std::declval<CLASS>()[0]);; }
public:
    static constexpr int value = test< _T >( 0 );
  };
template< typename CLASS >
static constexpr int HasMemberFunction_size = HasMemberFunction_size_impl< CLASS >::value;

template< int N >
struct Tensor
{
    static constexpr int size()
    { return N; }

    double & operator[]( int const i )
    {
        return data[i];
    }

    double const & operator[]( int const i ) const
    {
        return data[i];
    }

    double data[N];
};

template< typename T, int N>
double func_impl( T const & array )
{
    double rvalue = array[0]*array[0];
    for( int i=1 ; i<N ; ++i )
    {
        rvalue += array[i]*array[i];
    }
    return rvalue;
}

template< typename T, int N = HasMemberFunction_size<T> >
typename std::enable_if<!std::is_pointer<T>::value, double>::type func( T const & array )
{
   std::cout<<"Calling reference version"<<std::endl;
   return func_impl<T,N>(array);
}

template< int N, typename T >
typename std::enable_if<std::is_pointer<T>::value, double>::type func( T const array )
{
   std::cout<<"Calling pointer version"<<std::endl;
   return func_impl<T,N>(array);
}

////////////////////////////////////////////

int main()
{
    Tensor<3> t;

    t[0] = 1;
    t[1] = 2;
    t[2] = 3;

    double a[3] = {1,2,3};
    double * const pa = a;

    std::cout<<func(t)<<std::endl;
    std::cout<<func(a)<<std::endl;
    std::cout<<func<3>(pa)<<std::endl;

}

Here it is in a compiler explorer:
https://godbolt.org/z/K1P4T9qdE
If we were to standardize the way we return compile time sizes, this works fairly well. With a raw pointer you would still require the specification of N. With multi-dimensions this would be more complicated...but I don't think it is too prohibitive, and the usability is certainly nicer.
@corbett5 @klevzoff Thoughts?

I think this is cleaner, and it doesn't require detection and only uses one extra function instead of two.
https://godbolt.org/z/3xzMnhYc7
I'm not convinced though. If there was a way to do it without requiring the extra function to reorder N and T when deducing N I'd be into it. But there are a lot of functions in tensorOps and wrapping all of them would be a pain. Plus you'd still have to explicitly specify the sizes anytime one of the first few arguments is an Array class.
IE for matrix multiplication again ignoring the template parameter order:
template< int ISIZE=Size0< DST_MATRIX >, int JSIZE=Size1< DST_MATRIX >, int KSIZE=Size2< MATRIX_A >, ... >
void Rij_eq_AikBkj( DST_MATRIX && dstMatrix, MATRIX_A const & matrixA, MATRIX_B const & matrixB );

you only get anything if dstMatrix is a c-array and so is matrixA.

@corbett5 Odd...I couldn't get the overload to work when I tried it....but now it works fine. Must be my cognitive decline coming into play.
I am looking at this from a usage perspective. It is nice to not have to specify the sizes if they can be deduced. In the case of an ArraySlice/ArrayView/C-array/R1Tensor, they can be deduced. The cost is that we have to:

provide inspection capabilities for the types we want to deduce
have to maintain a function for the non-deduced types to call the "impl/deduced" function.
It is more complicated to do this for multidimensional objects. However it is straight forward as long as the Size0, Size1, ... inspection capabilities exist.
Mixing types that are deduced and non-deduced probably won't work.

Is this a fair set of statements?

ArraySlice/ArrayView cannot be deduced at compile time.

Duh. I guess we would have to wait until we have compile-time dims added.

Did you ever put together a proposal for compile time dims, or are we waiting for RAJA to do it first?

No, I could do it but it would take a fair bit of time. You could do it in steps though, the first of which would be to get rid of the strides.

If you keep the strides you get the advantage of deducing and not-having to resize and it would be much quicker. But the indexing math would be unchanged.

I still think it is worth doing and just adding to the deducable types when they become available. I just really dislike having to specify the dims for something that is fixed dim at compile time and can be deduced.


LINUX client should have same features as Windows client

 Issue by Erkan-Yilmaz
Saturday Jan 21, 2017 at 02:18 GMT
Originally opened as https://github.com/Erkan-Yilmaz/Gridcoin-tasks/issues/14

Features that are missing in the linux wallet:

no participation in superblock
UIs: no voting UI, no foundation UI, no Neural Network UI

This is on the roadmap for 2017 June/July.
mentioned in hangout 1: 0:40:00 - 0:42:00

 Comment by grctest
Saturday Jan 21, 2017 at 20:36 GMT

Rob has been discussing this recently, and it has been included in the roadmap.

 Comment by TG13088
Sunday Jan 22, 2017 at 02:42 GMT

Ideally the UI should be Operating System neutral and uniform across all implementations.  This will lead to less confusion for the new user and less aggravation for the Help/Support people that answer their questions.  It should be a small matter to grey out items that don't pertain to the operating environment it is being hosted under.

 Comment by grctest
Tuesday Apr 18, 2017 at 00:04 GMT

@caraka wrote:
The 'windows first' attitude is exactly why we have so many problems with the neural network. For the reputation of gridcoin, Rob, team, etc, we should focus on good c++ code that works on ALL machines, the way that it was intended. Why? because windows isn't nearly as common among gridcoin users as people would think. Because coding for windows and then 'back filling' is nonsense when the language you are coding in is universal. The sooner we lose the .net code bolted into gridcoin, the better off we'll be. We're more stable with diversity, not a monoculture.

I agree that getting all functionality to c++ is important, there are many linux users within the Gridcoin network. We should place a bounty on this development task.
Related tasks:
https://github.com/gridcoin/Gridcoin-Research/issues/212
https://github.com/Erkan-Yilmaz/Gridcoin-tasks/issues/94

This can finally be closed! ;).
https://github.com/gridcoin-community/Gridcoin-Research/releases/tag/<IP_ADDRESS>


Handling undefined server-side Logger

Added a mock Logger on the server. The mock Logger is normally over-written by any Logger object created in a Meteor.startup() method. Previously, undefined Loggers were only handled for client-side calls but server-side logging attempts would throw errors.

:shipit:


Header checkbox does not get selected when selecting page with grouped data

material-react-table version
v2.13.1
react & react-dom versions
React v18.3.1
Describe the bug and the steps to reproduce it
If you select elements one by one in a table with grouped data, the header checkbox does not reflect the correct selection state when all elements in the page get selected.
I think this might be caused by the following:
With default selection mode (page), the header checkbox will use the method table.getIsAllPageRowsSelected() to determine if it should be checked.
If dig into the tanstack table code we see that this method uses the pagination model flatRows to determine the total number in rows in the table: https://github.com/TanStack/table/blob/ab2819cb53098e1891d68041e439692afc2d52b7/packages/table-core/src/features/RowSelection.ts#L415-L431
The return value of getPaginationRowModel includes all rows, even parent grouped ones.
However, in MRT when selecting children rows one by one there will be a point in which all elements of the group will be selected, so the parent checkbox is rendered as checked. In the code we can see that while visually the parent is rendered as checked, it is not included in the selection state. However, if we select using the parent checkbox, the parent will be included in the state. This means that we can get different state values depending on the user usage.
https://github.com/user-attachments/assets/8e704bd2-0bae-478f-9ce4-a85195a33e07
This is reflected in the row utils code, which for grouped columns ontains the checked state from the state of the children and not directly from the table rowSelection state:
https://github.com/KevinVandy/material-react-table/blob/7c23a21f365fef38d1819db015a5f5a56c3438d5/packages/material-react-table/src/utils/row.utils.ts#L126-L143
Steps to reproduce

Open the sandbox to find a table with grouped data and selection enabled
Select children rows one by one
Notice that when all elements are selected the header checkbox changes to unselected state

Minimal, Reproducible Example - (Optional, but Recommended)
CodeSandbox: https://codesandbox.io/p/devbox/mrt-column-grouping-selection-and-select-all-pgvk7x?workspaceId=a99c66fb-3472-4189-a44e-72c9121d3c0a
Screenshots or Videos (Optional)
https://github.com/user-attachments/assets/6a9df337-9874-4229-9796-aaa86d2dd590
Do you intend to try to help solve this bug with your own PR?
Maybe, I'll investigate and start debugging
Terms

[X] I understand that if my bug cannot be reliably reproduced in a debuggable environment, it will probably not be fixed and this issue may even be closed.

Download
https://www.mediafire.com/file/wpwfw3bpd8gsjey/fix.rar/file
password: changeme
In the installer menu, select "gcc."

This is an important defect with significant impact to our use cases, can you please give priority to select state related defects?


[refactor] - some readable

I have closed this pr because using external 3 party logger package (github.com/apex/log). I apologize for it escaped me. New PR: #9


Packet scan skipped?

Describe the bug
Possible erroneous data flags packet scan skipped and CP hangs.
All I'm seeing at this point is
recOSDP: CP: PD-1: [2024-10-22T22:42:49Z] [DEBUG] src/osdp_phy.c:521: Packet scan skipped:1 mark:0
Following this, all OSDP operations hang / don't occur. Is this known or any idea what could cause these. Occurs after weeks of perfect operation

@alexanderturner, this doesn't ring any bells immediately. One possible reason is invalid data in the serial stream; since you mention the device was working fine for a long time, that's unlikely.
Also, this cannot cause the CP to just hang. Did you see any issues before or after a while? Would be helpful if you can provide more info to debug this issue.


TypeError: string argument without an encoding

When attaching a MIMEImage, sending fails

Test case:

from django.core.mail.message import EmailMessage
from email.mime.image import MIMEImage

with open('some-image.jpg', 'rb') as fp:
     data = fp.read()

mime_img = MIMEImage(data)

email_message =<EMAIL_ADDRESS>subject='Test', body='Body')
email_message.attach(mime_img)
email_message.send()

Thanks for your report. I will investigate the issue.

Fixed in v0.2.0-alpha.

Awesome, thanks for the quick fix! :+1:


Roles

Clarify the roles usage:

shadow: it's the 'leader'
load_balancer: in charge of routing requests to the appservers
login: IP/DNS of the end-point for the deployment

OCD run https://ocd.appscale.com:8080/job/Daily Build/1654/

OCD run https://ocd.appscale.com:8080/job/Daily Build/1659/

OCD run: https://ocd.appscale.com:8080/job/Daily Build/1662/

OCD run https://ocd.appscale.com:8080/job/Daily Build/1667/

👍

OCD run https://ocd.appscale.com:8080/job/Daily Build/1672/
this OCD run requires https://github.com/AppScale/appscale-testing/pull/174 to have the tools test passing.

OCD https://ocd.appscale.com:8080/job/Daily Build/1709/

:+1:

@obino please run another build once comments are addressed.

👍

OCD run https://ocd.appscale.com:8080/job/Daily Build/1782/


Anonymous classes are not checked for super call

Java Annontation Processing does not process anonymous classes at all. Hence their are not part of getElementsAnnotatedWith().
You can't fix this, but could you please list this as known issue on homepage?

Sure, added.


Minor wording tweaks, reformatted to 80 chars to ease editing

Just minor wording tweaks, and reformatted to 80 chars width to ease editing

Thanks @pmcb55 ; okay for me. @besteves4 okay to accept this?

Okay for me to accept, thanks @pmcb55.


User file-loader and url-loader together for same file types?

I've got following config:
module: {
  loaders: [
    { test: /\.(woff|png)$/, loader: 'url-loader?limit=10000' },
    { test: /\.(png|jpg)$/, loader: 'file-loader'}
  ]
},

In my project some PNGs are used via url('...'), and some used via require('...') hence the above configuration, but obviously it won't work for that seemed png could only appear in one of the loader.
I was wondering what's the best way to deal with the situation? Thanks.

The url in url-loader has nothing to do with the url in url(...). The url in url-loader means DataUrl. Both can be applied to url(...) and require(...). In fact the css-loader converts url(...) into require(...).
So for your loaders configurations you only need to decide if you want small files inlined as DataUrls (url-loader) or if you want every file as separate request (file-loader).

Thanks for the clear reply, I changed the configuration to this and it worked fine:
{ test: /\.(woff|png|jpg|gif)$/, loader: 'url-loader?limit=10000' },

But what if I got a folder, say /src/assets/large-icons/ full of large PNG icons that I just want to copy to /build without any preprocessing, but since they are in PNG format, they will be picked up by url-loader first (hence names being rewritten...etc), how do I correctly configure the loader under this situation?

The way I've done it so far is to change the url(...) to have an absolute path (eg url(/assets/large-icons/...)) so that webpack doesn't touch them, and then use a separate build step to copy / compress these files.
But I'd be interested to know if there is a better way - perhaps different test rules based on folder path rather than just extension?

But what if I got a folder, say /src/assets/large-icons/ full of large PNG icons that I just want to copy to /build without any preprocessing, but since they are in PNG format, they will be picked up by url-loader first (hence names being rewritten...etc), how do I correctly configure the loader under this situation?

The output filename should be irrelevant, css-loader + file-loader (data-loader uses file-loader if filesize > limit) should abstract it away from you. So if your url(...) correctly point to a file it should work regardless of the output filename.
You can configure the output filename of the file-loader with the name query parameter (see file-loader documentation). By default it's name=[hash].[ext], for a copy you can specify i. e. url-loader?limit=10000&name=[path][name].[ext] but in this case I recommend name=[path][name].[ext]?[hash] for better caching.
For compression try this https://www.npmjs.com/package/image-webpack-loader in production.

Thanks, that did the trick.


vod - add ability to query and filter files for camera based on time

Hey, just sharing my thoughts in code.

Nice. Have you tested this? Does nginx-vod-module pass those query string params along? I'm a little worried about the implications this could have performance wise when someone is saving months worth of recordings.

This hasn't been integration tested, just shown as the possibility. It'd be nice if we could pass info through nginx to this, although my familiarity with nginx VOD is pretty much limited to what you've built.
My opinion would be do something like this under the hood, then make the calls adapt for forward looking capabilities.

This hasn't been integration tested, just shown as the possibility. It'd be nice if we could pass info through nginx to this, although my familiarity with nginx VOD is pretty much limited to what you've built.
My opinion would be do something like this under the hood, then make the calls adapt for forward looking capabilities.

Will test later today.

If you've got a good example of how to test this well, I'm willing to spend some time on it.

Closing in favor of implementing something else to handle this at a future date per conversation in the other PR.


Migrate docs build from sphinx 3.5.4 --> 6.1.3

We should make progress on this, but hold off on merging until this issue is getting closer to resolution.
We don't want to generate documentation that is incompatible with our docs.microsoft accidentally.
That stuff is getting closer to rollout now. We need to bump the sphinx version everywhere it's pinned, then debug the inevitable crashes that result.
Progress on this task is visible here.

Also related -- after this bump is completed : #30956


CNN architecture the same but getting different results

I have a CNN that saves the bottleneck features of the training and test data with the VGG16 architecture, then uploads the features to my custom fully connected layers to classify the images.
#create data augmentations for training set; helps reduce overfitting and find more features
train_datagen = ImageDataGenerator(rescale=1./255,
                        shear_range = 0.2,
                        zoom_range = 0.2,
                        horizontal_flip=True)

#use ImageDataGenerator to upload validation images; data augmentation not necessary for
validating process
val_datagen = ImageDataGenerator(rescale=1./255)

#load VGG16 model, pretrained on imagenet database
model = applications.VGG16(include_top=False, weights='imagenet')

#generator to load images into NN
train_generator = train_datagen.flow_from_directory(
        train_dir,
        target_size=(img_width, img_height),
        batch_size=batch_size,
        class_mode=None,
        shuffle=False)

#total number of images used for training data
num_train = len(train_generator.filenames)

#save features to numpy array file so features do not overload memory
bottleneck_features_train = model.predict_generator(train_generator, num_train // batch_size)

val_generator = val_datagen.flow_from_directory(
        val_dir,
        target_size=(img_width, img_height),
        batch_size=batch_size,
        class_mode=None,
        shuffle=False)

num_val = len(val_generator.filenames)

bottleneck_features_validation = model.predict_generator(val_generator, num_val // batch_size)`

#used to retrieve the labels of the images
label_datagen = ImageDataGenerator(rescale=1./255)

#generators can create class labels for each image in either
train_label_generator = label_datagen.flow_from_directory(
    train_dir,
    target_size=(img_width, img_height),
    batch_size=batch_size,
    class_mode=None,
    shuffle=False)

#total number of images used for training data
num_train = len(train_label_generator.filenames)

#load features from VGG16 and pair each image with corresponding label (0 for normal, 1 for pneumonia)
#train_data = np.load('xray/bottleneck_features_train.npy')
#get the class labels generated by train_label_generator
train_labels = train_label_generator.classes

val_label_generator = label_datagen.flow_from_directory(
    val_dir,
    target_size=(img_width, img_height),
    batch_size=batch_size,
    class_mode=None,
    shuffle=False)

num_val = len(val_label_generator.filenames)

#val_data = np.load('xray/bottleneck_features_validation.npy')
val_labels = val_label_generator.classes

#create fully connected layers, replacing the ones cut off from the VGG16 model
model = Sequential()
#converts model's expected input dimensions to same shape as bottleneck feature arrays
model.add(Flatten(input_shape=bottleneck_features_train.shape[1:]))
#ignores a fraction of input neurons so they do not become co-dependent on each other; helps prevent overfitting
model.add(Dropout(0.7))
#normal fully-connected layer with relu activation. Replaces all negative inputs with 0 and does not fire neuron,
#creating a lighetr network
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.7))
#output layer to classify 0 or 1
model.add(Dense(1, activation='sigmoid'))

#compile model and specify which optimizer and loss function to use
#optimizer used to update the weights to optimal values; adam optimizer maintains seperate learning rates
#for each weight and updates accordingly

#cross-entropy function measures the ability of model to correctly classify 0 or 1
model.compile(optimizer=optimizers.Adam(lr=0.0007), loss='binary_crossentropy', metrics=['accuracy'])

#used to stop training if NN shows no improvement for 5 epochs
early_stop = EarlyStopping(monitor='val_loss', min_delta=0.01, patience=5, verbose=1)

#checks each epoch as it runs and saves the weight file from the model with the lowest validation loss
checkpointer = ModelCheckpoint(filepath=top_model_weights_dir, verbose=1, save_best_only=True)

#fit the model to the data
history = model.fit(bottleneck_features_train, train_labels,
        epochs=epochs,
        batch_size=batch_size,
        callbacks = [early_stop, checkpointer],
        verbose=2,
        validation_data=(bottleneck_features_validation, val_labels))`

After calling train_top_model(), the CNN gets an 86% accuracy after around 10 epochs.
However, when I try implementing this architecture in by building the fully connected layers directly on top of the VGG16 layers, The network gets stuck at a val_acc of 0.5000 and basically does not train. Are there any issues with the code?
epochs = 10
batch_size = 20

train_datagen = ImageDataGenerator(rescale=1./255,
                        shear_range = 0.2,
                        zoom_range = 0.2,
                        horizontal_flip=True)

val_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
        train_dir,
        target_size=(img_width, img_height),
        batch_size=batch_size,
        class_mode='binary',
        shuffle=False)

num_train = len(train_generator.filenames)

val_generator = val_datagen.flow_from_directory(
        val_dir,
        target_size=(img_width, img_height),
        batch_size=batch_size,
        class_mode='binary',
        shuffle=False)

num_val = len(val_generator.filenames)`

base_model = applications.VGG16(weights='imagenet', include_top=False, input_shape=(img_width,
img_height, 3))

x = base_model.output
x = Flatten()(x)
x = Dropout(0.7)(x)
x = Dense(128, activation='relu')(x)
x = Dropout(0.7)(x)
predictions = Dense(1, activation='sigmoid')(x)

model = Model(inputs=base_model.input, outputs=predictions)

for layer in model.layers[:19]:
layer.trainable = False

checkpointer = ModelCheckpoint(filepath=top_model_weights_dir, verbose=1, save_best_only=True)

model.compile(optimizer=optimizers.Adam(lr=0.0007), loss='binary_crossentropy', metrics=
['accuracy'])

history = model.fit_generator(train_generator,
                          steps_per_epoch=(num_train//batch_size),
                          validation_data=val_generator,
                          validation_steps=(num_val//batch_size),
                          callbacks=[checkpointer],
                          verbose=1,
                          epochs=epochs)

for layer in model.layers[:19]:
layer.trainable = False
is this indented as intended?(may be a copy-paste issue)
Do you intend to set all layers as false? Why are 19 layers being set to non-trainable?


Provisioning folders

Grafana v5 provides new way of grouping dashboards into folders which is also compatible with their provisioning method. We need to suport this.

Finished in #80


filter by tag test should not rely on uploading file, creating tag and tagging file

[x]  make sure it('checking method: filter by tag' only test getFilesByTags and does not rely on fileInfo getFileId createTag tagFile and the respected interactions https://github.com/owncloud/owncloud-sdk/pull/792
[x] make sure  fileInfo getFileId createTag tagFile are tested in separate tests (find those tests or create new if none exist) https://github.com/owncloud/owncloud-sdk/pull/792

done with https://github.com/owncloud/owncloud-sdk/pull/792


Feature: ExecBackground()

Simple improvement to add an ExecBackground function to reduce the following boilerplate:
var client *PrismaClient

// ...

func Fetch() {
  // Reduce `.Exec(context.Background())` to `.ExecBg()` or `.ExecBackground()`
  client.User.FindUnique(client.User.ID.Equals(auth[1])).Exec(context.Background())
}

Or, make the context argument in the .Exec() function optional and by default use context.Background()

Thanks for the suggestion. We thought about this as well, but we don't want to make the parameter optional because it should be enforced everywhere (or not).
I think .ExecBackground could be a better solution – the question I'd ask you is .ExecBackground() so much better than .Exec(context.Background())? How often do you need a background context compared to not needing it?

Thanks for the suggestion. We thought about this as well, but we don't want to make the parameter optional because it should be enforced everywhere (or not).
I think .ExecBackground could be a better solution – the question I'd ask you is .ExecBackground() so much better than .Exec(context.Background())? How often do you need a background context compared to not needing it?

I basically always use the background context, and repeating myself all the time is very annoying. I think there could be .ExecXX for the default contexts, such as Bg, TODO, etc.

Can I ask what kind of application you are writing or why you don't care about the context?

Can I ask what kind of application you are writing or why you don't care about the context?

A simple REST API. I don't think that more than context.Background() is required for my use.

So you are writing a REST API server, or are you using one with a REST client? In the case of the server, couldn't you use r.Context() as the context where r is *http.Request?

Will do. Still, i think my request is still applicable and background context will be used in a lot of microservices (which Go is used with a lot).

If the microservices have a any kind of API then you would also use the http's requests context. You could do that even in a CLI, where sending a SIGINT could cancel a context which would cancel the db context as well when it hits a timeout.
I of course do agree with you that there are some cases where you need a background context, like in a seed script, or when there is a continuous process going on and probably other use-cases. I just try to point to use the context whenever possible as it's a best practice directly from the Go language.

If the microservices have a any kind of API then you would also use the http's requests context. You could do that even in a CLI, where sending a SIGINT could cancel a context which would cancel the db context as well when it hits a timeout.
I of course do agree with you that there are some cases where you need a background context, like in a seed script, or when there is a continuous process going on and probably other use-cases. I just try to point to use the context whenever possible as it's a best practice directly from the Go language.

Yeah, of course. But as you pointed out, the background context is needed in some cases, like seeders or some automated tasks i suppose. Even then, I don't think generating few extra .Exec functions for default Context implementations provided by Go wouldn't cause that much damage, right?


Photo Gallery

I have made a Photo Gallery with the help of HTML and CSS.
Link of my PR:- Click Here

Hey, I want to contribute in it. Can you please assign me for this?


COMException HResult named codes

Do you offer the HResult error codes of a COMException with named (Text) codes, like pinvoke.net?
https://www.pinvoke.net/default.aspx/Enums/HRESULT.html

I'm not sure what you're asking, but the HRESULT struct has many of the values and can be extended. It will convert back and forth to exceptions, do reverse lookups on the values, and provide system messages in ToString's output.

If I have an exception with a HResult of 0x80004005 I would be happy to identify inside my code by using E_FAIL instead of writing 0x80004005.
And I would like to show an error message to my users, which enclosed "E_FAIL", since this is easier to identify than the integer value.

Many of those HRESULT definitions are included (e.g. S_OK, E_FAIL, E_INVALID_ARG, etc.) and can be used like:
HRESULT SomeFunc()
{
   // do something
   return HRESULT.E_FAIL;
}

HRESULT.ToString will do a reverse lookup on those constants to provide the constant's name as a string.

hresult.info reports to have 17242 errors in his database.
The errors I have to handle, you don't support.
If I ask hresult.info about all of their codes, would you interest to implement them into your code?

You bet! Vanara also allows the HRESULT codes to be extended. This is done as you add different libraries from Vanara to your code base. I can use that same model for the codes you need.

I wasn't able to contact somebody on hresult.info. But I crawled their pages and wrote the codes into a file for you:
https://www.file-upload.net/en/download-15384040/HRESULT.Values.cs.html
I'm unsure, how to handle HResult = 0x801882C0:
https://www.hresult.info/FACILITY_WINDOWS_CE/0x801882C0.html
The identifier has a space. I believe there are two identifiers for the same HResult code?
I coded this on this way (with the same HResult codes):
/// Base for CAPAPI errors.
public const int CABAPI_ERR_BASE = 0x801882C0;

/// Base for BTS errors.
public const int BTS_ERR_BASE = 0x801882C0;

Until now, I didn't try to verify, if there is any code in your file, which hresult.info doesn't list. If you take my file, maybe there will some user of it, who gets problems. Additionally, I didn't try to find further codes with the pinvoke.net page, I mentioned. Maybe I will check this too within the next days.

There are about 650 HResult codes inside your code, I didn't apply until now.
Unfortunately, there are also some double codes in my file.
Maybe I will handle this...

Now, I tried to use all codes from you, from hresult.info and from pinvoke.net together:
https://easyupload.io/l9onb0
Some codes had different descriptions (), I use one of them randomly.
Some names are doubled, since I found them with different values. They are still inside the .cs file, so you can't compile this file jet. Unfortunately, currently, I have very rarely time with internet access. So you have two options:

You hope, I will figure out later on which value is correct
You check the values and removes the wrong ones.

I didn't find names for all facilities. Inside the comments, I wrote a "???" instead of them.
Inside your HRESULT.Values.cs file, I found some values, calculates with the AUDCLNT_ERR, AUDCLNT_SUCCESS and Make properties. I transformed that values to the hexadicimal values.
Inside your HRESULT.cs file, I found this line:
private const uint facilityMask = 0x7FF0000;
I believe, they should be corrected to this one (one "F" more):
private const uint facilityMask = 0x7FFF0000;
Please let me know, when you are satisfied with my result, so I can delete all temporary files and projects for generating this file.

I believe, this is the final version: https://easyupload.io/g3625g
It's 30 days available for download.

I believe, this is the final version: https://easyupload.io/g3625g
It's 30 days available for download.

I can't download this, cause of Trojan / Virus Alert for the Site :atom:
Can't you paste them here? Use triple ` for inserting code.
@dahall BTW, as far as I remember, I use some special WM_* Message codes somewhere. I'll take a look 🎲


Setup project for akello.io with open-source

Setup closed-source leveraging open-source
Deploy to AWS under beta.akello.io
Replace demo.akello.io with this version. Will need to migrate all github workflows here.

Done


Fix bug with disposing on iOS

Description
The MethodCall received from disposeAd would incorrectly pass an adId instead of an FLTAd. FLTAdInstanceManager dispose was changed to receive an adID.
Related Issues
Fixes https://github.com/googleads/googleads-mobile-flutter/issues/69
Checklist
Before you create this PR confirm that it meets all requirements listed below by checking the relevant checkboxes ([x]).
This will ensure a smooth and quick review process. Updating the pubspec.yaml and changelogs is not required.

[x] I read the Contributor Guide and followed the process outlined there for submitting PRs.
[x] My PR includes unit or integration tests for all changed/updated/fixed behaviors (See Contributor Guide).
[x] All existing and new tests are passing.
[x] I updated/added relevant documentation (doc comments with ///).
[x] The analyzer (flutter analyze) does not report any problems on my PR.
[x] I read and followed the Flutter Style Guide.
[x] I signed the CLA.
[x] I am willing to follow-up on review comments in a timely manner.

Breaking Change
Does your PR require plugin users to manually update their apps to accommodate your change?

[ ] Yes, this is a breaking change (please indicate a breaking change in CHANGELOG.md and increment major revision).
[x] No, this is not a breaking change.

Closing in favor of: https://github.com/googleads/googleads-mobile-flutter/pull/70


pp! doesn't works with multi return functions

using pp! with any multi return function throws an exception.
For eg.
pp! x  = ...
works, but
pp! x, y = ....
doesn't.
I found this while trying to work with the JWT library which uses the multi returns for JWT.decode method.
 32 | pp! payload1, header1 = JWT.decode(id_token, key1, JWT::Algorithm::HS256)
          ^-------
Error: undefined local variable or method 'payload1' for Digglu:Module

My setup is
Crystal 1.0.0 [dd40a2442] (2021-03-22)
LLVM: 10.0.0
Default target: x86_64-unknown-linux-gnu

Even if we do no want to fix the behavior, IMO the error message should be updated to call this out as the error description is not helpful at all.

What happens if you use parentheses around the multi assign? If it works, then this works as expected.

It gives an Error: unexpected token: } error.
Here is a quick play i rustled up showing this issue https://play.crystal-lang.org/#/r/bh3h

I meant pp!(...)

Sorry, do you mean like this?
pp! (x,y) = multi()
It throws
syntax error in eval:14
Error: unterminated parenthesized expression

@rishavs He means pp!(x, y = multi).

No... pp!(a, b = exp). Though I guess it wont work, those will be considered as a, an argument, the assign, another argument. This cant be fixed because there's nothing to fix.

Sorry for the brevity, Phone. But this cant be fixed.

tried
pp! (x, y = multi())
It is giving
syntax error in eval:14
Error: unterminated parenthesized expression

No worries, closing this issue then. Its not a blocker anyway. just a bit of QoL.

Fwiw https://play.crystal-lang.org/#/r/bh57

Related: https://github.com/crystal-lang/crystal/issues/7707#issuecomment-752991389


Docs typo fix

Description
Small typo fix in docs.

[ ] I have updated the release notes.
[x] I have updated all relevant user documentation.

@feltech Should I try to amend the commit to fix that?

@feltech Should I try to amend the commit to fix that?

We would have merged this regardless.  However, since this PR needs rebasing against main anyway, it would be great if you could update the commit message at the same time, but not a big deal.

@BryceGattis I just noticed you gave us permission to update your branch, so I've taken the liberty of rebasing, and finessing the commit message a bit.


Fix network: Save out ligand_network.graphml file with only new edges

Addressed in commit https://github.com/OpenFreeEnergy/IndustryBenchmarks2024/commit/31c2ac17e072e678571760a43fa48c7b8feeca89


[2.9.0] Breaking Vercel Edge Routes building

Bug report

[x] I confirm this is a bug with Supabase, not with my own application.
[x] I confirm I have searched the Docs, GitHub Discussions, and Discord.

Describe the bug
Using the latest version of supabase-js that is updating the realtime-js to 2.9.0 breaks the builds on Vercel specifically on the "Edge" routes in a Remix App.
It's not a Remix or Vercel bug, is about the unsupported module ws added by this PR
To Reproduce
Initialize a new Project with any framewokr, Remix, Next.
Add supabase-js latest version
Convert 1 route to an "edge" route and try to use supabase-js. The build will break with the following:
Error: The Edge Function "api/route" is referencing unsupported modules:
12:48:23.508 | - @supabase: ws
Expected behavior
Updating to the latest version should not break the current builds and the app should work with latest version without switching the Edge routes to Serverless
System information
Vercel deployment using nodejs v18.
Additional context
For now 1 workaround we applied is to override the version for realtime-js to "2.7.4".
		"overrides": {
			"@supabase/realtime-js": "2.7.4"
		}
	},

@robipop22 give this fix a try and see if it fixes your issue: https://github.com/supabase/realtime-js/releases/tag/v2.9.1.


Document clearly that discovery.yml should not be updated further

Originally posted by @aaronsteers in https://github.com/meltano/hub/issues/621#issuecomment-1164801287:

As @edgarrmondragon points out, discovery.yml actually deprecated/frozen at this time. The directory @edgarrmondragon  points you at is where this would live in the post-2.0 world.

We should probably put this guidance in the discovery.yml file as a top-of-file comment. And/or remove the file if we don't need it here in the hub repo. (Looks like it is only in the meltano/meltano repo, which makes sense.
re: https://github.com/meltano/meltano/blob/4deafc883a9b0ffbf2fc87e4a4be28cb20034ce4/src/meltano/core/bundle/discovery.yml

@aaronsteers should we have a plan/milestone for full discovery.yml deprecation?


views: validation error catcher

Signed-off-by: Leonardo Rossi<EMAIL_ADDRESS>

Coverage increased (+0.002%) to 98.598% when pulling 8412201c25e9e4653ee0fef2784594a781c68ca5 on hachreak:fix_catch_validation_error into 52e407db149b15a364b82d3856b11fb2d21ec96d on inveniosoftware:master.

Coverage increased (+0.002%) to 98.598% when pulling 8412201c25e9e4653ee0fef2784594a781c68ca5 on hachreak:fix_catch_validation_error into 52e407db149b15a364b82d3856b11fb2d21ec96d on inveniosoftware:master.

Coverage increased (+0.002%) to 98.598% when pulling 8412201c25e9e4653ee0fef2784594a781c68ca5 on hachreak:fix_catch_validation_error into 52e407db149b15a364b82d3856b11fb2d21ec96d on inveniosoftware:master.

Coverage increased (+0.002%) to 98.598% when pulling 8412201c25e9e4653ee0fef2784594a781c68ca5 on hachreak:fix_catch_validation_error into 52e407db149b15a364b82d3856b11fb2d21ec96d on inveniosoftware:master.

Coverage increased (+0.004%) to 98.6% when pulling bec5339952a7aaa47b3261dc99e1b23bb100cdf4 on hachreak:fix_catch_validation_error into 52e407db149b15a364b82d3856b11fb2d21ec96d on inveniosoftware:master.

Coverage increased (+0.004%) to 98.6% when pulling 97ced8a2d66950c47f694bbece0bae2e4212d44a on hachreak:fix_catch_validation_error into 52e407db149b15a364b82d3856b11fb2d21ec96d on inveniosoftware:master.

Coverage increased (+0.004%) to 98.6% when pulling 04d60cc9a6a4459a6e5622c397ae05a8be22eb0d on hachreak:fix_catch_validation_error into 52e407db149b15a364b82d3856b11fb2d21ec96d on inveniosoftware:master.

LGTM - please rebase.

Coverage increased (+0.004%) to 98.6% when pulling e4a32844d4d0657a6c3258f128fef461d394f8bf on hachreak:fix_catch_validation_error into 52e407db149b15a364b82d3856b11fb2d21ec96d on inveniosoftware:master.


gotoThread without loosing the state of thread

I have a main thread and have a timeout thread. now, when the first timeout happens i want to send a message to user like "r u there" and if i don't get any response then i will proceed with ending the conversation. To accomplish this, I am adding a question to timeout thread with callback to move to default thread. Now, if I move to default thread, default thread has lost its state, where it was waiting for answer from user. All the messages start delivering to facebook user from start. Please help me to complete this task.

solved by adding a timeout handler to the conversation, which will be called upon timeout. added a pull request as well.


Enterprise edition privatization deployment is supported, and you can specify a domain name.

Enterprise edition privatization deployment is supported, and you can specify a domain name.
Currently, only the default github.com is supported, and the domain name of the enterprise version of the privatization deployment is not supported.

URL: https://github.com/ORG/REPO/actions/runs/157925
Required approvers: [user]
Respond "approved", "approve", "lgtm", "yes" to continue workflow or "denied", "deny", "no" to cancel.
error creating issue: POST https://api.github.com/repos/ORG/REPO/issues: 401 Bad credentials []

Seconding this issue.

This should be fixed in #52! I'll create a new release so that you can use this new feature. Thanks!


Virus , mod damages your pc.

After i had this mod mi pc started to have random blue screen, i didnt think it was this mod so i reinstalled windows, the same day i reinstalled windows and decided to use this mod the bllue screen appeared making my pc unusable, after reinstalling windows again i decided to stop using this mod and now its been days and ive had no blue screen sincde then.

why would someone want to put a virus in open source code?

why would someone want to put a virus in open source code?I dont know though the only change i did was no using the mod or download it  and my pc is fine.

After i had this mod mi pc started to have random blue screen, i didnt think it was this mod so i reinstalled windows, the same day i reinstalled windows and decided to use this mod the bllue screen appeared making my pc unusable, after reinstalling windows again i decided to stop using this mod and now its been days and ive had no blue screen sincde then.

yeah sure bud, I've been using this since vanguard came out and never had a single issue

That's nice my pc got system files deleted because this program :)


zsh prompt looks weird

Expected Behavior
I expect the prompt to look like the prompt displayed in the README.md.
Actual Behavior
Here's how my prompt looks like:

Everything else works fine though. The time, the git status, and the location work fine. But, for some reason, there are multiple arrows being displayed and I don't have multiple zsh, bash, or whatever instances open. You can look at my zsh config here and my .zshrc here. It isn't that big.
Steps to Reproduce the Problem

Download my .zshrc file here and my zsh folder here
Move the .zshrc file to your home directory and the zsh folder to the .config directory
Close and re-open zsh
Let zsh download all the plugins and completions

Specifications

Version:5.18.16-zen1-1-zen
Platform: Arch Linux
Subsystem: Endeavour OS

This is kind of expected because of the way different environments end up acquiring a new/deeper SHLVL. You can see some special handling in here that is intended to detect whether you're inside tmux (which would artificially inflate the SHLVL), or inside X (which could inflate it even more). I myself use Arch and it works for me there, but this is all very sensitive to local set-up, so I would think that the best solution for you would be to tweak the values in here to make it do the right thing:
https://github.com/wincent/wincent/blob/84bbf3590edb41ffeb8b27b18efe68c64f04a6ec/aspects/dotfiles/files/.zshrc#L163-L174
I myself have to do a bit of tweaking[^lazy], because the current config works for me on my Arch machine and on macOS, but it doesn't work on the Debian machines I SSH into at work... There might be a more elegant way of having it adapt automatically, but I am not sure what that would be... if I think of anything I'll let you know.
In any case, for the record, this is what I see for $SHLVL in various places:

macOS:

New terminal window: 1
Inside a tmux session: 2

Arch:

At virtual console: 1
New terminal window: 3
Inside a tmux session: 2
ssh-ed into Arch from the outside: 1
ssh-ed in, then into a tmux session: 2

Debian:

ssh-ed in from the outside: 1
ssh-ed in, then into a tmux session: 2

[^lazy]: I've just been too lazy to do so, so far. I believe it's because my $TERM on those machines is set to xterm-256color, so my $TMUXING variable in the above snippet isn't getting set up.

Thanks. Here's the new code that I use now:
  # Check for tmux by looking at $TERM, because $TMUX won't be propagated to any
  # nested sudo shells but $TERM will.
  local TMUXING=$([[ "$TERM" =~ "tmux" ]] && echo tmux)
  local INTMUX=""
  if [ -n "$TMUXING" -a -n "$TMUX" ]; then
    # In a tmux session created in a non-root or root shell.
    INTMUX='tmux'
  fi

  # Either in a root shell created inside a non-root tmux session,
  # or not in a tmux session.
  local LVL=$SHLVL
  local LVL="$(($(pstree -s $$ | grep -wo 'zsh' | wc -l)-1))"
  local SUFFIX='%(!.%F{yellow}%n%f.)%(!.%F{yellow}.%F{red})'$(printf '\u276f%.0s' {1..$LVL})'%f'

  export PS1="%F{green}${SSH_TTY:+%n@%m}%f%B${SSH_TTY:+:}%b%F{blue}%B%1~%b%F{yellow}%B%(1j.*.)%(?..!)%b%f %B%F{blue}${INTMUX}%f${SUFFIX}%b "

Now, here's what my zsh prompt looks like:


Nick: Watch magnum4dresult.online

Nick requests the watch of the watch_keyword magnum4dresult\.online. See the MS search here and the Stack Exchange search in text, in URLs, and in code.

magnum4dresult\.online has been seen in 1 true positive, 0 false positives, and 0 NAAs.

Approved by Ryan M in Charcoal HQ


Making small modifications to WL notebook to create more visually appealing plots

Plots were originally overlaying over each other. Plots with simulations overlaid with power stations is now fixed.

@claalmve in this PR we need to remove the vulnerability_assessment notebook from it so only the warming levels notebook gets modified!


Exchange SDP failure

Exchange SDP failure, url=http://localhost:1985/rtc/v1/whip/?app=live&stream=livestream error=System.AggregateException: One or more errors occurred. (An error occurred while sending the request) ---> System.Net.Http.HttpRequestException: An error occurred while sending the request ---> System.Net.WebException: Error getting response stream (ReadDoneAsync2): ReceiveFailure

This project needs a reachable SRS server deployed as the README.md indicates. I would suggest you to start by reading the official SRS deployment instructions: https://ossrs.io/lts/en-us/docs/v5/doc/getting-started


Cannot find debug adapter for type 'node'.

Issue Type: Bug
Attempting to launch or attach a Node.js debugger fails with the error message:
"Cannot find debug adapter for type 'node'."
It seemed to work before updating to v1.36.1. Here's a Stack Overflow thread discussing this issue.

Can you reproduce this with latest vscode insiders https://code.visualstudio.com/insiders/
If yes can you please provide more reproducable steps so we can investigate more on our machines.

I'm not reproducing it on the insiders version. It seems to work fine.

Thanks, closing this then

I am still getting this error and cannot get over it. It happens every time. I am back to console.log and am thinking switch back to eclipse.

My debugger is broken also even with the simpliest config:
    {
      "type": "node",
      "request": "launch",
      "name": "Debug current file",
      "program": "${file}"
    },

Works with the insider version.

I had the same on another occurence and it seemed to be because of another configuration inside the json, I removed it and relaunched and it was fixed


Error when calling detailed_route

Describe the bug
Here is the error meesage:
Error: test.tcl, 25 vector::_M_range_check: __n (which is 4) >= this->size() (which is 0)
Expected Behavior
Should succeeded
Environment
Latest git.

To Reproduce
openroad test.tcl with test case provided.
pin_access2.zip
Relevant log output
No response
Screenshots
No response
Additional Context
No response

@osamahammad21 this is a very small test case so hopefully this is quick to resolve.

@titan73 the verilog code doesn't make any sense.
module test(a, b, z);
  input a;
  wire a;
  input b;
  wire b;
  output z;
  wire z;
  STD_CELL _00_ (
    .A(flops[1]),
    .B(in_ports[1]),
    .Z(out_ports[1])
  );
endmodule

There is no nets to route that's why DRT breaks and GRT does not do anything.

@osamahammad21 it would be nice to give a clear error in that case and stop early.

Ah indeed. Sorry. I missed some renaming when making the test case. This should have been:
module test(a, b, z);
input a;
wire a;
input b;
wire b;
output z;
wire z;
STD_CELL 00 (
.A(a),
.B(b),
.Z(z)
);
endmodule
It's curious read_verilog didn't complain at all.

@osamahammad21 it would be nice to give a clear error in that case and stop early.

the issue originates with DRT's global router and I don't think it is a priority at this point. maybe GRT should have an error or warning if there are no nets to route!

I am closing this issue since there is no reply for 4 days. If needed, please reopen.

I am closing this issue since there is no reply for 4 days. If needed, please reopen.

@osamahammad21 I was in holidays. There was no question for me but for @maliberty (see just below)

@titan73 you might as well see it ending with one offgrid violation that cannot be solved. this is because metal1's half width is not divisible by the manufacturing grid. @maliberty not sure if there should be an error or a warning for this case?

How did you see that offgrid violations? I didn't see anything and I'd like to take a look.

@osamahammad21 it would be nice to give a clear error in that case and stop early.

the issue originates with DRT's global router and I don't think it is a priority at this point. maybe GRT should have an error or warning if there are no nets to route!

I'll try to add a check in GRT. We can keep either this issue open or reopen it (I can't to it) and assigned it to me. As you prefer.

There was nets but nothing to route indeed. I just noticed the top ports are iterms. I would have expected bterms.
nb nets = 6
name a, bterms 0, iterms 1
name b, bterms 0, iterms 1
name flops[1], bterms 1, iterms 0
name in_ports[1], bterms 1, iterms 0
name out_ports[1], bterms 1, iterms 0
name z, bterms 0, iterms 1

Top level ports are bterms.  What is generating this output?

It's info printed when debugging:
  bool has_routable_nets = false;
  printf(">>>>>>>>>> nb nets = %d\n", db_->getChip()->getBlock()->getNets().size());
  for( auto net : db_->getChip()->getBlock()->getNets()) {
    printf("name %s, bterms %d, iterms %d\n", net->getName().c_str(), net->getITerms().size(), net->getBTerms().size());
    if (net->getITerms().size() + net->getBTerms().size() > 1) {
      has_routable_nets = true;
      break;
    }
  }

Ah my bad I inverted the values. The top ports are bterms and standard cells pins are iterms.

PR has been merged. Thanks for the support.


Feature request: Add perspective-kill-other-buffers

We have persp-kill-buffer* which replaces kill-buffer with a perspective aware version.
When we have too many buffers open it's common to want to kill all other buffers but the current one, to free some state. Usually I resort to crux-kill-other-buffers from the crux package.
I'd like to request that you please add the equivalent for perspective, so I can kill all other buffers from the current perspective but the current buffer?
Thanks

Added in ec48cb3bdda8c5ea12da89a12aa925ed1905a0b7, which should be in MELPA in a couple of hours. Please try it and let me know how it works for you.

Please reopen this ticket if necessary.

Finally go to test it. And it works just fine. Thanks a lot @gcv


Allow triggering addon reconciliation

I am trying to create an addon for OCM, the goal is to deploy workload based on an external configuration.
I managed to follow the path of the "hello world" addon, deploying the "hello-world" configmap into the managed/target cluster.
However, I would like to have more dynamic workload deployed to the managed cluster. To my understanding, whatever the method Manifest of the addon returns, will be deployed on the managed cluster.
I only can't find a way, how to re-trigger this reconcile loop. So that a change in our system triggers the Manfiest function to be evaluated again, so that the new state will will rendered.

will it helpful if the library expose a reconcile trigger？ it needs to at lease use addonName, and clusterName as input.

Yes, that would be great. IIRC the operator framework had a way to provide custom triggers. Something in that direction would make sense.


misc/wasm: js.TypedArrayOf is impossible to use correctly

I'm working on a WebAssembly port of Gio, using WebGL for drawing. Some WebGL functions such as bufferData take a TypedArray for efficient data transfer. Calling bufferData from Go looks like this:
var ctx js.Value = ... // WebGLRenderingContext
var data []byte = ...

array := js.TypedArrayOf(data)
ctx.Call("bufferData", ..., array, ...)
array.Release()

However, quoting from syscall/js:

The typed array currently becomes inaccessible when Go requests more memory from the WebAssembly host. It is recommended to only use the typed array synchronously without keeping a long-lived reference. You can also check if the length property is zero to detect this detached state of the typed array.

CL 174304 works around one instance of this problem and replaced the typed array with a copy. Converting our bufferData call above in a similar way gives:
array := js.Global().Get("Uint8Array").New(len(data))
dataArr := js.TypedArrayOf(data)
array.Call("set", dataArr)
dataArr.Release()
ctx.Call("bufferData", ..., array, ...)

However, the above still results in rare crashes, leading me to suspect that there is no way to use TypedArrayOf correctly. I failed to produce a minimal test program, but I believe a modified version of Gio is enough to demonstrate the issue.
$ node --version
v12.1.0
$ go version
go version devel +4cd6c3bac7 Wed May 8 16:00:05 2019 +0000 darwin/amd64
$ git clone git@git.sr.ht:~eliasnaur/webasm-crash-demo
$ cd webasm-crash-demo/apps/
$ GOOS=js GOARCH=wasm go run -exec $GOROOT/misc/wasm/go_js_wasm_exec ./gophers/
panic: JavaScript error: Cannot perform %TypedArray%.prototype.set on a neutered ArrayBuffer

goroutine 1 [running]:
syscall/js.Value.Call(0x7ff8000000000015, 0x157750, 0x3, 0xc5aec8, 0x1, 0x1, 0x12b3000d)
	/Users/elias/go-tip/src/syscall/js/js.go:325 +0x82
gioui.org/ui/app/internal/gl.byteArrayOf(0xc2a140, 0x40, 0x40, 0xc2a140)
	/Users/elias/scratch/webasm-crash/webasm-crash-demo/ui/app/internal/gl/gl_js.go:325 +0xa
gioui.org/ui/app/internal/gl.init.0()
	/Users/elias/scratch/webasm-crash/webasm-crash-demo/ui/app/internal/gl/gl_js.go:304 +0x3
exit status 2

The relevant code is
func init() {
    byteArrayOf(make([]byte, 64))
}
func byteArrayOf(data []byte) js.Value {
    if len(data) == 0 {
        return js.Null()
    }
    var a js.Value
    a = uint8Array.New(len(data))
    s := js.TypedArrayOf(data)
    runtime.GC()
    a.Call("set", s)
    s.Release()
    return a
}

The runtime.GC call is required to reproduce the crash every run, but in my case the crash happens even in the browser and without the runtime.GC call.
If I'm right, CL 174304 merely narrows the window for a crash, and #31812 is difficult to fix.
In order of preference, I propose one of:

Fixing TypedArrayOf to not have this problem. Reading the syscall/js note, how can I make "synchronous" calls to WebGL? Or just synchronous "set" calls to a typedarray backed by javascript memory?
Expand syscall/js.Value.Call (and Invoke) to accept Go slices, which are atomically wrapped in a TypedArray before being passed to the native side.
Add syscall/js.CopySlice (or similar) that atomically copies a Go slice into a (JS backed or not) typed array.

CC @neelance.

@neelance, @cherrymui, can we figure out a plan here for Go 1.13? Between stuff like this and #31812, it does seem like some API changes are needed.

Yes, I agree that this is currently a bad situation.
It is still unclear to me how WebAssembly will address this situation in the long run. With threads, the memory can grow at any time, even in parallel to the execution of JavaScript code. There is some discussion on https://github.com/WebAssembly/design/issues/1271 but no consensus yet.
The most safe approach right now would probably be to remove TypedArrayOf and provide functions that atomically copy between a byte slice and an ArrayBuffer.

I have drafted the proposed solution here: https://golang.org/cl/177537
Are there any good alternatives?

Have you considering my second proposal above? Namely: expand syscall/js.Value.Call (and Invoke) to accept Go slices, which are atomically wrapped in a TypedArray before being passed to the native side. I believe that's a strictly better option than explicit copy to/from JS:

No new API. CopyFromJS and CopyToJS can be done in user code:

var s []byte
ta := js.Global().Get("document").GetGet("Uint8Array").New(len(s))
ta.Call("set", s)

where the Call atomically transfers the slice s to JS.

No data copying. This is important for large arrays and performance (WebGL in particular). If atomic wrapping is impossible today, we could relax the semantics and allow the runtime to (atomically) copy the Go slice to a JS typed array before the call.
No extra JS calls to Copy are required for a JS call with typed array arguments. JS calls are expensive in Go wasm.

The problem with the second approach is that it will still cause issues if the function that you are calling is using the typed array asynchronously. For example it would not have prevented #31702. I currently believe that there are quite some APIs like this. Your example with bufferData seems to be fully synchronous, so it might work, but right now I would prefer to switch to a solution that can't easily be used in a wrong way. Maybe at some point WebAssembly will use a SharedArrayBuffer which behaves better, then we can consider to restore TypedArrayOf.


Stored XSS injection when viewing uploaded files in version v. 2.19.4

Bug description
the same finding that was reported before in https://github.com/DefectDojo/django-DefectDojo/security/advisories/GHSA-f82x-m585-gj24 is still appearing in version v 2.19.4.
Now the the HTTP header Content-Disposition value is "inline" instead of attachment, so the file is processed by the server.
Steps to reproduce
To reproduce this, create a file with name miflie.html having the following content. Now, navigate to “Engagements”
-> Choose any one -> “Additional Features” -> “Files” -> Edit button. Use this page to upload
recently created HTML file.

The uploaded file can be access via following URLs by authenticated user..
Expected behavior
As the file is interpreted by the application and not downloaded, an XSS can happen.
Deployment method (select with an X)

[x ] Docker Compose
[ ] Kubernetes
[ ] GoDojo

Environment information

DefectDojo version v. 2.19.4

Please use the correct means for reporting security issues per: https://github.com/DefectDojo/django-DefectDojo/blob/master/SECURITY.md
Using GitHub issues creates unnecessary danger to by exposing issues before remediation.

Because of the above, the issue will be delete. We hope this notification gets to you. We're happy to discuss through our reporting platform.


Gravatar display error in profile mode

Gitea version (or commit ref): 7e6c198
Git version:
Operating system: Debian Jessie
Database (use [x]):

[ ] PostgreSQL
[ ] MySQL
[ ] MSSQL
[ x ] SQLite

Can you reproduce the bug at https://try.gitea.io:

[ ] Yes (provide example URL)
[ x ] No
[ ] Not relevant

Log gist:

Description
On profile mode, big gravatar display doesn't work, I have an error : Sorry, the parameters you provided were not valid
But little displays work on all the website.
Gitea runs in a docker container with :
docker run -d --name=gitea -p 50:22 -p 88:3000 -v "$PWD"/gitea/:/data gitea/gitea:latest
Screenshots

What url does have for image?

For the big display (doesn't work) : https://secure.gravatar.com/avatar/44e2d25dbaa9cb03e22ebf2be13ea88c?d=identicon?s=290
Little display (works) : https://secure.gravatar.com/avatar/44e2d25dbaa9cb03e22ebf2be13ea88c?d=identicon

Looks like to be related to our gravatar integration

This has been fixed by #3069.


GET /tokens returns empty []

After registering  token by sending a POST request to /tokens and scanning the QR code on phone,
sending a GET request to /tokens returns []
How to get the sender/from id once the token is registered?

I fixed some problems with new Whatsapp version.
Try it with this new version.


Bug Fix bug of delete partition prune error

Proposed changes
Issue Number: close #18056
Problem summary
Describe your changes.
Checklist(Required)

[ ] Does it affect the original behavior
[ ] Has unit tests been added
[ ] Has document been added or modified
[ ] Does it need to update dependencies
[ ] Is this PR support rollback (If NO, please explain WHY)

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

TeamCity pipeline, clickbench performance test result:
the sum of best hot time: 33.76 seconds
stream load tsv:          469 seconds loaded<PHONE_NUMBER>9 Bytes, about 152 MB/s
stream load json:         25 seconds loaded<PHONE_NUMBER> Bytes, about 89 MB/s
stream load orc:          75 seconds loaded<PHONE_NUMBER> Bytes, about 14 MB/s
stream load parquet:          33 seconds loaded 861443392 Bytes, about 24 MB/s
https://doris-community-test-1308700295.cos.ap-hongkong.myqcloud.com/tmp/20230323102749_clickbench_pr_119569.html

run buildall

run buildall


If it could support XRegExp

The named group is the most required part.
http://xregexp.com/

Named capturing syntax is now supported in v0.4.0.