feat: various workflow cleanup

Codecov Report

Merging #383 (0d94c3d) into tagged-release/q1-release (15556ea) will not change coverage.
The diff coverage is 75.00%.

@@                    Coverage Diff                     @@
##           tagged-release/q1-release     #383   +/-   ##
==========================================================
  Coverage                      93.17%   93.17%
==========================================================
  Files                             43       43
  Lines                           1626     1626
  Branches                         347      347
==========================================================
  Hits                            1515     1515
  Misses                           109      109
  Partials                           2        2

Impacted Files
Coverage Δ

...s/codegen-ui-react/lib/react-component-renderer.ts
72.54% <ø> (ø)

...eact/lib/react-component-with-children-renderer.ts
95.38% <ø> (ø)

packages/codegen-ui-react/lib/workflow/action.ts
95.45% <75.00%> (ø)

Continue to review full report at Codecov.

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


Update CONTRIBUTING.md

[x] I have read freeCodeCamp's contribution guidelines.
[x] My pull request has a descriptive title (not a vague title like Update index.md)
[x] My pull request targets the master branch of freeCodeCamp.
[x] None of my changes are plagiarized from another source without proper attribution.
[x] My article does not contain shortened URLs or affiliate links.

If your pull request closes a GitHub issue, replace the XXXXX below with the issue number.
Closes #XXXXX

Just trying to get a T-shirt, it's hard to find places to help...


[Misc] Investigate if auto-stop feature would interrupt Qualys agent from performing daily vulnerability scan

We need to understand whether or not and how the new auto-stop feature we put on SWB instances will affect (e.g. interrupt) Qualys agent from performing daily vulnerability scan, especially if the scan would require more than 1-hour to run.
After determining the impact, we will need to design work-around to better reinforce qualys-scanning or need to revisit using AWS inspector.

By lowering the CPU threshold, we confirmed that the auto-stop feature will not shut until the vulnerability scanning is done when the instance is active.

The issue is what triggers a scan to run. I cannot get scanning to work properly on startup

What can be used as candidate triggers? Are you suggesting that option 2 ("batch scan") sound more feasible to implement?

I know that when you enable scan on startup the instances fail to start properly in SWB

We're going to look into AWS inspector I think for this

@aaronmbruce We will have to bring this discussion back since Ernest is seeing the critical issues in the security hub https://nextgenbmi.atlassian.net/wiki/spaces/NBCA/pages/402653185/2022-04-29?src=mail&src.mail.action=view&src.mail.notification=com.atlassian.confluence.plugins.confluence-notifications-batch-plugin%3Abatching-notification&src.mail.recipient=8a7f808a784142dd01784157e952001a&src.mail.timestamp=1651246777115

Nathan suggests using Instance Scheduler to boot the stopped instances up once every week keep instances running for about 9 hours until patches are applied and shut them down.
Instances needs to run for 9 hours so that 2 Qualys scans can occur. Another option is to monitor how long the updates take, if it is ~2 hours we can have the instances run for shorter time reducing cost
We need to consider the cost effectiveness for this approach

Qualys scans every 4 hours according to Ernest

On kicking off a Qualys scan after proactive patching of systems that show up consistently in Security Hub:
See the “Scan on Demand and Scan on Startup” section of this PDF: https://www.qualys.com/docs/qualys-cloud-agent-windows-install-guide.pdf
from Charles Baerwald, Security Analyst | GIAC GEVA, Division of IT  | ISAM | Information Security, University of Missouri – Columbia

From: Anye, Ernest<EMAIL_ADDRESS>Sent: Wednesday, May 18, 2022 8:48 AM
To: Ferguson, Shaun<EMAIL_ADDRESS>Bruce, Aaron<EMAIL_ADDRESS>Baerwald, Charles H<EMAIL_ADDRESS>Paka, Vyshnavi<EMAIL_ADDRESS>Cc: Mandhadi, Vasanthi (Medical Research Office<EMAIL_ADDRESS>Song, Xing<EMAIL_ADDRESS>Subject: Patch Management in AWS Environment
Good morning,
Following our meeting yesterday, I am starting this conversation so that we can work on getting together to discuss patch management in our AWS environment. Based on what we discussed yesterday:
Shaun/Aaron will do some testing in Dev to apply patches to some EC2 instances
Once that is complete, the group will meet with Charlie to look into options to schedule a Qualys “scan” on the patched EC2 instances. My understanding is that Qualys agents report to the appliance every 4 hours

Shaun, please let the group know whenever your team has completed the patching so Vyshnavi can set up the meeting.
(@aaronmbruce can you work on this and report when done, now that we know how to trigger the Qualys scan post-patching?)
Thank you,
Ernest Anye, DrIT, CISSP

I manually patched one of the instances being flagged by qualys, and left it running for a day. It is still getting flagged as failing one patch, so I'm at a loss as to how to handle it.

Can you try kicking off the Qualys scan manually per the instructions Charles sent us, post-patching, so it gets updated point-in-time?  It may also take some time to matriculate from Qualys back into Security Hub, too.  ... but failing on just one patch is better, no?

Possible patch management solution
https://cloudcustodian.io/docs/aws/examples/ec2poweronstoppedforpatching.html

Natan is recommending we look into AWS SRA https://docs.aws.amazon.com/prescriptive-guidance/latest/security-reference-architecture/welcome.html


Pushover user not working

Describe the bug
When messages are sent over pushover and a user/device is given, nothing happens
To Reproduce
Steps to reproduce the behavior:

send messages to pushover.0
define a user (or device)

Expected behavior
Message is only sent to specified device
Versions:

Adapter version: v0v0v20
JS-Controller version: 4.0.23
Node version: v16.17.0
Operating system: Debian GNU/Linux 11 (bullseye)

Additional context
when sending to pushover with users,
sendInstance, { user: user, message: text, title: "Paketstatus" }
should be
sendInstance, { device: user, message: text, title: "Paketstatus" }
like described here: Pushover Usage

Fixed this in GitHub please test again

nice, notifications are working now


Select and dropdowns not working on mobile browsers

Hi,
I've tried the selects and dropdowns, even the ones of the lumX website and they are not working on chrome on android and safari on iOS. Am I missing something or is it a real bug?
Thanks

experienced same issue.  the dropdown comes down, but i'm unable to tap on an item in the dropdown.
it seems that the event goes to the underlying object instead.

Similar: just cloned repo and serving locally I am unable to navigate to any of the four items in the main page header from Chrome Developer Tools mobile device views!

Lumx has a great cross browser support, that I liked, but for mobile devices it is such a pain. I'm unable to use selects and dropdown. Please provide the fix.

I already solved some of the problems

Hi!, I have the same issues, please, how I can fix? Thank you

you can work with the latest version.
Clone the repo: git clone https://github.com/lumapps/lumx.git.

Still not working. Cloned the latest version

Not working for me either on android/chrome.  Desktop/chrome works fine.

I found removing the touchend in the lxDropdownMenu directive solved it for me.
.directive('lxDropdownMenu', ['$timeout', function($timeout)
    {
        return {
            restrict: 'E',
            require: '^lxDropdown',
            templateUrl: 'dropdown-menu.html',
            transclude: true,
            replace: true,
            link: function(scope, element, attrs, ctrl, transclude)
            {
                var timer;

                ctrl.registerDropdownMenu(element);
                element.on('click', function(event)
                {
                    event.stopPropagation();

                    scope.$apply(function()
                    {
                        ctrl.toggle();
                    });
                });

                scope.$watch(function()
                {
                    return element.html();
                }, function(newValue)
                {
                    if (timer)
                    {
                        $timeout.cancel(timer);
                    }

                    timer = $timeout(ctrl.updatePositionAndSize, 150); // debounce
                });
            }
        };
    }])

Still not solution for select directive ?

Any news on this?

We've just released LumX v1.0.0rc1. This new version fixes the issue, so I'm closing it.


Yaml API: Day Zero tutorial notebook

I've created the first version of Getting Started with Yaml notebooks.
The target group are users who don't have a lot of experience with coding and/or beam; and want to quickly get started with writing pipelines in beam.

Thank you for your contribution! Follow this checklist to help us incorporate your contribution quickly and easily:

[ ] Mention the appropriate issue in your description (for example: addresses #123), if applicable. This will automatically add a link to the pull request in the issue. If you would like the issue to automatically close on merging the pull request, comment fixes #<ISSUE NUMBER> instead.
[ ] Update CHANGES.md with noteworthy changes.
[ ] If this contribution is large, please file an Apache Individual Contributor License Agreement.

See the Contributor Guide for more tips on how to make review process smoother.
To check the build health, please visit https://github.com/apache/beam/blob/master/.test-infra/BUILD_STATUS.md
GitHub Actions Tests Status (on master branch)

See CI.md for more information about GitHub Actions CI.

R: @robertwb

Hi @robertwb, could you take a look at this PR? Thanks!

fixes #28695

I'll pick it up this week.

Hi @Polber, thanks for the review. All the changes are applied now.
@VeronicaWasson, could you perhaps have another look at this notebook?

Hi @Polber, do you think we can merge it now?

Thanks for taking another look at this PR @Polber!

Hey @bzablocki We are currently trying to get some docs onto the Beam website which I think would be a good idea to get submitted first so that users have docs to reference after trying out the day zero notebook.

That makes a lot of sense, I agree it's better to release some docs first. Thanks for the update. I'll wait for the documentation and I'll update this PR with the relevant references once that is done.

Ping! Seems like this is ready to merge?

Thanks for the ping, I'll submit an updated PR today.

I updated the PR with documentation and a short explanation on why a pipeline with a transform from an expansion service (Filter-sql) logs output in a different format than a simple pipeline without an expansion service.

As discussed in person, it feels a bit awkward to have every command be a combination of save file + execute command in Python. Could we set the interpreter to shell instead?

@Polber I converted saving the file to the built-in Jupyter's '%%writefile'. PR is ready for the final review/merge.


Framework refactor entry type definitions

Some streamlining of the entryTypesDefinition schema. I think this is just a streamlining of the code which was a bit confusing but please check ...

For the branches management, this is the short-term plan:
Deleted branches
genomicVariations_add-pathogenicity-predictions
clean-up_remove-validator-remnants
clean-up_remove_aggregated_response
Branches that will be deleted after PR #92
entry-type-definitions-cleanup
Branches that will be deleted after PR #90
hotfix_filteringTermsResults
Branches that will be deleted after PR #82
schema-urgent-fixes
Branches that will be deleted after PR #74
clean-up_renaming_entity_to_entry_type
Branches that will be deleted after this PR (#102)
framework-refactor-entry-type-definitions
For the mid-term plan, I will write what we are doing in every branch and add milestones and achievements.

Is this PR still mergeable?

Hi @jrambla . Yes, it is mostly documentation and style updates apart from http to https changes. I think this won't break specifications. We need 1 pending review.

Closing this PR as some of this was already merged in other PR and conflicting files did not make it mergeable anymore.


Check on DS/LDAP connectivity in PE

Use Case
Issues with LDAP/DS connectivity are often not noticed until functions such as API access via an AD user start to fail
Describe the Solution You Would Like
A fact and task running the DS check API
Describe Alternatives You've Considered
Metrics collector or service status but both would require much longer implementations
Additional Context
https://puppet.com/docs/pe/2019.8/rbac_api_v1_directory_get_ds_test.html test the connectivity to ldap

This can be distilled into a questions "can i connect to LDAP/DS or not" so this could be a good test

This was cancelled in July 2023 as per https://perforce.atlassian.net/browse/SUP-3710


increase baking speed by 2000+

According to The document, Accessing Mesh.vertices will create a full copy of vertices array EVERYTIME you access the property. This cause a major slow down when bake animation.
For a 10K mesh, 30 frame animation. it cause 2 min 50 sec to copy all array datas.
This PR cache the vertices, normals, and tangents array before iterating copy the vertex.
After merge the pr, for a 10K mesh, 30 frame animation. it will now take only 0.1 sec to complete to array copy action.
this change save me tons of time, if u like it, u can merge it.

Nice PR! thank you!

Nice!!


ipam/allocator/podcidr: fix old pod cidr logging error

When releasing a pod cidr of a node, this pod cidr field is appended to
the log cache. But log cache could not be flushed because log is not in
debug mode. So old pod cidr is always in the log cache and shows up in
the log output even after a new pod cidr is allocated.
Fix this error by flushing the log cache.

test-me-please

/mlh new-flake Cilium-PR-K8s-GKE
@twpayne  My PR just replaces log.Debug with log.Info. it's weird that some unrelated test cases have failed. Please help !
Thanks.

We have a few flaky tests at the moment, the failures have nothing to do with your PR. Note also that the test-me-please comment is to trigger CI to run, not a message to you :)

We have a few flaky tests at the moment, the failures have nothing to do with your PR. Note also that the test-me-please comment is to trigger CI to run, not a message to you :)

👍 .  Thanks for explanations.
/mlh new-flake Cilium-PR-K8s-GKE

@twpayne Hi, does there any update about this PR ?

Would you mind rebasing this PR on the latest master? We should have fixed some of the flaky tests.

@lrouter I think there might have been a mistake in the latest push to the PR, as the commit history is now mangled with commits from master and a merge commit, and your initial commit also got duplicated ^^
I would suggest you revert the PR to its initial state, then trying a rebase on master rather than a merge from master to your branch. Don't hesitate to ask if you'd want some help with the commands required to do that :)

Looks good now, thanks @lrouter :)

/test

OK, approved as it's a trivial change and marked ready-to-merge.
I'll still keep an eye on the tests as it's a good barometer PR for our CI :)

OK, approved as it's a trivial change and marked ready-to-merge.
I'll still keep an eye on the tests as it's a good barometer PR for our CI :)

Thanks. By the way, we are working to build a local cilium CI/CD system. I fount that it's hard to do this. I have to build cilium-runtime again and again, and have to push them to a private repo to be used by following building steps.

OK, approved as it's a trivial change and marked ready-to-merge.
I'll still keep an eye on the tests as it's a good barometer PR for our CI :)

Thanks. By the way, we are working to build a local cilium CI/CD system. I fount that it's hard to do this. I have to build cilium-runtime again and again, and have to push them to a private repo to be used by following building steps.


sbcl: bootstrap from CLISP on supported systems

Description of changes
Don't use the binary blob in the build phase, where possible.
Things done

Built on platform(s)

[ ] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[x] aarch64-darwin

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)

[ ] sandbox = relaxed
[ ] sandbox = true

[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
23.11 Release Notes (or backporting 23.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[ ] Fits CONTRIBUTING.md.

@ofborg sbcl

@ofborg build sbcl

Why does it say "Skipped — No attempt"?

Hm, segfault at x86_64-darwin… should we use boostrap SBCL there then until someone with a machine investigates?
(aarch64-linux reminds us that the change slows down the bootstrap, but I guess we can tolerate the regression…)

Can we bump the timeout somehow? Doesn't this build failure mean it's not in the binary cache, now?

@ofborg build sbcl

Ofborg timeout for CI, r-ryantm timeout for update rev-deps, and Hydra timeout for filling binary cache are completely independent

Thanks that makes sense in retrospect but I never realized that

I built this at home on a x86_64-linux (NixOS) VM in UTM and it built fine so I'm confused as to why it's segfaulting 🤷♀

Well, irreproducible segfaults wouldn't be that surprising…
@ofborg build sbcl

Never mind I can't read. x86_64-darwin segfaults here too. I'm trying ECL instead see if that works...


Fix sparsity

The sparse attention mask needed to be a float, but was in fact a bool mask, and so was leaking information from future tokens. This fixes that.

This apparently includes all the commits from config_monster, so maybe let's merge that first


Tech Request: Grafana

Hey,
I was thinking it would be worth adding grafana to the list of hits.
It looks like you can match on grafana-app inside the html and Set-Cookie: grafana_sess in the header.
Example systems:
https://play.grafana.org/login
Local docker version.
docker run -d -p 3000:3000 --name=grafana grafana/grafana

Added!


darwin: use getaddrinfo_async_start()

libSystem (actually libinfo) provides an asynchronous getaddrinfo(). There is no public header that I can find but the prototypes are as follows (from libinfo's netdb_async.h):
/*
 * getaddrinfo
 */
typedef void (*getaddrinfo_async_callback)(int32_t status, struct addrinfo *res, void *context);
int32_t getaddrinfo_async_start(mach_port_t *p, const char *nodename, const char *servname, const struct addrinfo *hints, getaddrinfo_async_callback callback, void *context);
int32_t getaddrinfo_async_send(mach_port_t *p, const char *nodename, const char *servname, const struct addrinfo *hints);
int32_t getaddrinfo_async_receive(mach_port_t p, struct addrinfo **res);
int32_t getaddrinfo_async_handle_reply(void *msg);
void getaddrinfo_async_cancel(mach_port_t p);

/*
 * getnameinfo
 */
typedef void (*getnameinfo_async_callback)(int32_t status, char *host, char *serv, void *context);
int32_t getnameinfo_async_start(mach_port_t *p, const struct sockaddr *sa, size_t salen, int flags, getnameinfo_async_callback callback, void *context);
int32_t getnameinfo_async_send(mach_port_t *p, const struct sockaddr *sa, size_t salen, int flags);
#if (!defined(LIBINFO_INSTALL_API) || !LIBINFO_INSTALL_API)
int32_t getnameinfo_async_receive(mach_port_t p, char **host, char **serv);
#endif
int32_t getnameinfo_async_handle_reply(void *msg);
void getnameinfo_async_cancel(mach_port_t p);

The API works by returning a mach_port_t (which is just an unsigned int) in the p out param that can then be polled with EVFILT_MACHPORT.
It's supported by libinfo 392.1, which is shipped with OS X 10.7, the oldest version libuv supports (but I think it existed even before that.)
If need be, libuv could dlsym() the symbols and fall back to the thread pool if they're missing - but I don't think that's necessary.
Nice-to-have low prio that would free up the thread pool for more useful work.

Out of curiosity, where / how did you find this?

When I was tracking down a libSystem bug, IIRC.

Has no-stale flag, but bot seems to be malfunctioning.

Hello @bnoordhuis, how are you?
Is this still an issue?
I created a PR which includes this feature. If possible, could you please share your feedbacks?
The PR: https://github.com/libuv/libuv/pull/3509
Thank you.


Question on sync command

Hi,
the README states in relation to sync vs. copy:

If your goal is to simply move some files, then copy is definitely the right command, since it offers much better performance.

Could somebody elaborate why sync would be much better performance? Is it because of enumerating files in the source/destination before starting any real work? For comparing, so far sync only depends on timestamps, which would be quick, too?
Thanks, Mark

Copy would be better suited to the task of moving individual files as it only enumerates the source (and checks filepaths against the destination, if you have --overwrite=false).
Sync is better suited to the task of duplicating a local file structure to a storage account, as it checks both destinations and only copies the latest files, optionally deleting files not present on the source at the destination. Futhermore, sync does NOT support wildcard characters.
As a result, I'd recommend using sync more or less to hold a backup of a directory, and I'd recommend using copy for transferring miscellaneous files.

Does this adequately answer your question or is there more detail I can provide?

Thanks @adreed-msft. So the difference in perf is about enumerating/checking the destination before starting to copy?

That is correct.

Thanks!!

A wiki with more details is also available here: https://github.com/Azure/azure-storage-azcopy/wiki/Sync-command-guide


Send Unown form notification

Much like gender, pull Unown form and send to notifications. Does not
insert form into database and therefore does not display on web.py.
Works with PokeAlarm. Successfully tested with PokeAlarm.

Unown forms is availible on WildPokemon. You can do that without encounter.

Updated to check for Unown "form" without requiring encounter and send to webhook.  May consider closing this PR since PR #284 does the same thing. The difference is this only sends "form" for Unown. Difficult to test since Unown are ultra rare.

@j16sdiz This may be true, however, the way form is being passed, it still requires it to be encountered. I tried it without encounter and Unown form wasn't being passed to PokeAlarm like it used to.

starnge, i have been running without encounter for a month and still have forms.
I have only changed normalize_pokemon and the notifcation.py

@j16sdiz I believe its because there's a bug with ENCOUNTER = None, 'some', 'notify'.  When I set ENCOUNTER = 'none' but still have notifications, it doesn't send form to webhook because all encounters are turned off.  So I tried ENCOUNTER = 'some' and it still wouldn't send form. Only when I have ENCOUNTER = 'notify' does it send form and all encounter data on all in ALWAYS_NOTIFY_IDS.  So we were left with all or none.  I was able to patch the ENCOUNTER = 'some' bug and from there I was able to determine that form (and all encounter data) is only sent to webhook during encounter code because only normalized pokemon are sent to webhook which includes the form attribute.  Its a bigger bug with what is being sent to webhook, but I think the patch fixes it for now.


Improper parsing in TextFormatter.FindHotKey if hotkey specifier followed by unicode replacement character(s)

While doing a cleanup and performance pass on TextFormatter, the loops in the FindHotKey method made go hmmm.
They're basically Rune-ified IndexOf operations, looking for the hotkey specifier Rune and then the following Rune as the hotkey, so long as it isn't FFFD.
But the state machine doesn't account for the character following the hotkey specifier being FFFD.
When that happens, the state machine keeps running until it finds the next non-specifier and non-FFFD Rune and calls that the hotkey. That's of course not expected, but what makes it even more dangerous is that the index provided in the hotPos out parameter will be the index of the specifier, as with normal cases, but the following index is not the hotkey that it chose.
The naive fix is simple: Just have it reset curHotPos to -1 each time it finds Rune.ReplacementChar.
I've added several test cases that cover various sequences containing the hotkey specifier in at least one position and FFFD in at least one position.
I also see some simple ways to squeeze almost free performance out of that method, so I'm doing that as well (this was in the middle of performance work, after all). Mostly some span stuff and avoiding as many loop iterations as I can figure out without spending too much time on just that method.

So...
As I'm analyzing this, I'm noticing there are some invalid test cases (which I think was probably already known, based on comments around those tests).
In particular, the cases that include codepoint 0xE0B0 are incorrect.
Those shouldn't be returning as symbols, because that codepoint is in a private use area. If you feed that value to Rune.IsSymbol(thatRune), you'll get false, and if you feed it to Rune.GetUnicodeCategory(thatRune), you'll get UnicodeCategory.PrivateUse.
Those test cases should expect a false result, and we should probably have tests that include codepoints from each category, as well as combinations, both for scalars and for surrogate pairs, to ensure these methods are actually behaving properly. I'll at least be sure to fix the cases or the code, as appropriate. For that situation, it's both code and expected test result that need fixing.
I have what appears, so far, to be at least a more "correct" implementation (MUCH faster, too, for the majority of likely typical cases). I'll describe it in a follow-up comment here.

The new implementation of the FindHotKey method that I have is partially complete, in that it works seemingly correctly for BMP values, but still needs me to make the fixes to non-BMP cases.
The only loop that has been addressed, so far, is the first one in the method.
The first thing it does is checks if it can simply do an ordinal char scan of the string or if it has to resort to using the Rune enumerator, by checking if the hotkey specifier Rune is in the BMP. If it is, we can do an ordinal scan for that character, even if the string also contains surrogate pairs (that particular point is made in the Microsoft Learn Supplementary API Remarks docs for working with strings and makes sense based on how it's all defined anyway.
Anyway...

If specifier is in the BMP, proceed to 1a, performing the loop beginning at index 0 of the string and ending one character before the end of the string (since it has to be a pair of chars to be valid):
1a. If at end of the loop, proceed with 2. Otherwise, find IndexOf the specifier, beginning at index, and set index to the resulting value. Proceed to 1b.
1b. If index was < 0 (not found) or we would go out of bounds, proceed to 1b1. Else proceed to 1c.
1b1. Set curHotPos to index. Terminate loop and proceed with 2.
1c. Get the rune that starts at index + 1 as potentialHotKeyRune. Proceed to 1d.
1d. If all of the following are true of potentialHotKeyRune, proceed to 1e. Else increment index and proceed from 1a.

Is not FFFD
Is not same as specifier
Is in the BMP
Is a letter, digit, symbol, or punctuation
1e. Set curHotKey to that rune and curHotPos to index. Terminate loop and proceed with 2.

If either of the following are true, perform the currently existing full unicode loop. Otherwise, skip that and just proceed with the rest of the method, as we've done what needs to be done up to that point:

specifier is not in the BMP
curHotPos > 0 and the rune that starts at curHotPos is not in the BMP (meaning either the previous loop didn't run (specifier not in BMP) or it did run but found a non-BMP rune after the specifier and bailed to enable fallback to this method).

That last step, for handling cases of either non-BMP specifier or when the specifier is BMP but the character following it is not, is currently still the original implementation, which I need to fix as described earlier. Just haven't gotten to that point yet.
When the first loop can run, this is dozens of times faster, in debug builds, and almost 400x faster in release builds, even before addressing the other loops that may need to run.

Ugh. Sorry the formatting didn't come out like I wanted with that. Some things didn't get indented which should have and some got indented which shouldn't have.
Here is the code for the first loop, which is the main new part. Note most of the ifs are inverted to avoid nesting:
ReadOnlySpan<char> stringSpan = text.AsSpan ();
if (hotKeySpecifier.IsBmp)
{
  for(int index = 0;index < stringSpan.Length; index++)
  {
    index = text.IndexOf ((char)hotKeySpecifier.Value, index);

    if (index < 0 || index + 1 >= text.Length)
    {
      curHotPos = index;

      break;
    }

    if (!Rune.TryGetRuneAt (text, index + 1, out Rune potentialHotKeyRune))
    {
      continue;
    }

    if (potentialHotKeyRune == Rune.ReplacementChar
      || potentialHotKeyRune == hotKeySpecifier
      || !potentialHotKeyRune.IsBmp
      || (!Rune.IsLetterOrDigit (potentialHotKeyRune)
        && !Rune.IsPunctuation (potentialHotKeyRune)
        && !Rune.IsSymbol (potentialHotKeyRune)))
    {
      continue;
    }

    curHotKey = Rune.GetRuneAt (text, index + 1);
    curHotPos = index;

    break;
  }
}

And here is the slightly modified second part, which is the fallback to full unicode, with the index reset fix applied:
if (!hotKeySpecifier.IsBmp || (curHotPos >= 0 && !Rune.GetRuneAt (text,curHotPos).IsBmp))
{
  int index = 0;
  foreach (Rune c in stringSpan.EnumerateRunes ())
  {
    if (c == Rune.ReplacementChar)
    {
      curHotPos = -1;
    }
    else if (c == hotKeySpecifier)
    {
      curHotPos = index;
    }
    else if (curHotPos > -1)
    {
      curHotKey = c;

      break;
    }

    index++;
  }
}

I'm not done with that, yet, so it may still have issues.
Note that using either or both of these with the current tests will fail on a few of them, so it's not worth bothering with that unless you're just curious. This is just so y'all can see what I'm thinking with this in case any of it raises any red flags.

I'm totally going to benchmark this against the TextElementEnumerator, too, now that we have a cross-platform guarantee of consistent and correct behavior with it (which we didn't have when supporting .net Framework or .net < 5.0, making it pretty much useless before).
I would almost put money on it outperforming the Rune implementation and being more correct, implicitly, since it handles all code points, including surrogates, in multiple encodings, out of the box. And with the way there was SIMD love given to a lot of text-related stuff in .net 8, I even bet it might give my little BMP semi-optimization a run for its money, too.

Also, about TextElementEnumerator and the StringInfo class...
It uses ICU, now, which means it uses the current "gold standard" unicode implementation, and will evolve with Unicode, unlike certain methods and properties of char and Rune which may be incorrect, incomplete, non-standard, or not agree with each other, even for the same codepoints (yes, even still in .net 8).

That sounds interesting and I'm curious.

TL;DR.
However, i scanned it and <3.
That said, it's dorky that HotKeySpecifier is a Rune. The only valid values are those typable on a keyboard with a single key press.
IMO, HotKeySpecifier should be Key.

At the time I remember that I warned about this and made some changes in v1 to not use FFFD. I'm glad you're moving to Key. Thanks.

TL;DR.
However, i scanned it and <3.
That said, it's dorky that HotKeySpecifier is a Rune. The only valid values are those typable on a keyboard with a single key press.
IMO, HotKeySpecifier should be Key.

Agreed.
In that case, the whole thing can just operate on a Span<char>

Ok, so...
With that restriction, what constitutes a match only has to satisfy the following conditions:

Must be specifier character immediately followed by a valid hotkey
Valid specifiers and hotkeys are BMP, not in the PUA, and must be in any of the following unicode categories:

Letter
Digit
Punctuation
Symbol

One behavior I'm torn on is the current code's treatment of the hotkey specifier in the string, at all, especially if there are multiple specifier characters in the string. Right now, the behavior is to find the first specifier followed by a different character than the specifier, and then ignore the rest for hotkey purposes, but still remove them for display purposes.
A couple of issues with that:

The code to find the width of the text subtracts the hotkey specifier width if it is found at all in the string, unconditionally, even if it didn't actually become a hotkey because it didn't pass the above conditions.
That's not intuitive.
Why not let the consumer use the same character for the specifier and hotkey?

This is potentially especially troublesome if the text is generated programmatically or from some data source, and that text has the hotkey specifier character in it.

If more than one instance of the specifier exists in the text, they are all removed silently by the TextFormatter.GetLines method, and persisted in the _lines field but not in _text. This is not documented and looks like a potential source of bugs, both internally and externally.

So, I'd like to change the behavior to allow that character to be displayed, where it isn't in the actually selected hotkey position. But I'd leave the selection behavior the same (first one found is it and the search stops there).
All that really changes is that strings such as "__Text", which would show up as "_Text" right now and have a hotkey of T would still be displayed the same way (though the 0th character was deleted, not the 1st) and the hotkey would be underscore.

Also
I think the behavior should be modified so that, if the HotKey property is already set (ie not KeyCode.Null), none of this even runs, so that explicitly setting the hotkey always wins.

All that really changes is that strings such as "__Text", which would show up as "_Text" right now and have a hotkey of T would still be displayed the same way (though the 0th character was deleted, not the 1st) and the hotkey would be underscore.

I concours with the displaying of the specifier if more than once is provided because that it's the intention of the user.

Also
I think the behavior should be modified so that, if the HotKey property is already set (ie not KeyCode.Null), none of this even runs, so that explicitly setting the hotkey always wins.

I concur.

Coolio.
All that stuff should be pretty easy to do, then.
As I mentioned, I had started that branch off intending to just do opportunistic performance stuff for TextFormatter.
But, I think I'm going to separate at least some of it to a separate branch/PR just to contain scope a little bit. The thing is that I can't totally separate it all without intentionally doing superfluous work to make clean intermediate stages. So I guess we'll see what I have when I'm finished. 😅

One thing is we repeat a bunch of operations quite a bit.
So I'm trying to unwind some of that in TextFormatter and avoid at least some of that duplication of effort.
One that has the potential to be particularly heinous in a few ways is that most property setters in that class unconditionally set NeedsFormat, even if no value change occurred.
That of course can lead to unnecessary re-draws, which is a potentially large performance hit, especially with some of the work that whole process involves.
There's also a ton of implicit memcopy work in there, and the EnableNeedsFormat method is a non-trivial source of it, since it ends up mostly handling structs, both passed and returned by value, and then assigned to a field. I count at least 3, but possibly as many as 6 copies between the public API surface and NeedsFormat's backing field, just from following a few possible code paths. That's easily fixed though, by reference passing, so no big deal any more there.
But what worries me more is that the class is very not thread-safe. And it even has comments that claim it is, probably from old code. But that code isn't there and, in fact, there's literally no synchronization that has any effect anywhere in that class.
As far as NeedsFormat goes... While getting or setting a boolean is an atomic operation, in .net-land, the big problem (which isn't performance-related) is a race condition that can prevent necessary re-draws, if a property is set (causing NeedsFormat to get flipped to true) at any time before the re-draw completes and sets it false again.
And especially since consumer code can extend stuff or inject behaviors in various ways, the impact and result of that race condition is unbounded and unpredictable.
I'm going to end up at least implementing some basic synchronization in that class in a few places, because there are some serious problems. And some of those are things I've mentioned before but haven't gotten around to working on, yet, soooo... I guess now here it goes!
While I usually am fine with doing a little bit of extra work to make an easy-to-grok change progression across commits, this stuff is going to be beyond that threshold in several spots. So, There's a good chance I'll just end up re-titling this issue to cover what it ends up as. 😅
As a heads-up, probably a good idea to minimize or avoid entirely any significant modifications to TextFormatter.cs, if that doesn't hinder work items you've got going too much. If that's too much of a pain, then don't worry about it. I'll figure out how to make it all play nicely when it's time for a PR. 🤷♂
Aaaannnnnnyway... Back to it!
If anyone has any wishlist items for TextFormatter, now is a great time to speak up!

Actually... At least to avoid one source of potential conflicts...
I'm going to cherry pick a few commits from what I've done so far that aren't breaking changes but are structurally quite different right now, and then rebase on that and go from there (dropping the cherry-picked commits from the rebase, of course).
That way, if anyone does need to make changes to those files, they'll at least be much easier to follow.

There we go.
#3282
That PR is a pretty minimal set of changes and some are also things that I myself have done multiple times but that somehow kept not making it into my PRs. 😅

Renamed this to reflect the expanded scope better.

#3287 is relevant to this, but posted as a separate issue for visibility, since it's a pretty core type.
That's being dealt with in this work.

Hey @tig @BDisp
TextFormatter.FindHotKey has a bool parameter to enable old behavior of using first capital letter instead of the character following a hotkey specifier.
Do we want that or can it be removed?
I vote remove for many reasons, not the least of which is that this is a pretty small thing compared to many other breaking changes. 🤷♂
If it's left in, we do have to have this method support unicode, as well as anything that supports hotkeys, or else codepoints outside BMP that are classified as capitals won't be handled properly.

About that...
As it turns out, nothing internal to the library actually even uses it explicitly except for RadioGroup, which passes true unconditionally, which looks like old behavior that's almost certainly not intended, now, as far as I can tell.

Also for what it's worth, that change only required removing that code path from FindHotkey itself, removing the two test methods explicitly for that behavior, and removing the parameter from the calls in RadioGroup to compile and pass all tests, so it really wasn't being used or respected anywhere else, anyway.
But I did that in a specific commit. So, if y'all still want it, I can just revert that commit to bring it back.

I think @tig already decided to force specifying the hot key specifier for all situations. I don't know why RadioGroup wasn't considered too.

Cool. I already went forward with that assumption anyway.
Right now I'm trying to avoid as many enumerations of the string as possible within the scope of that method, without requiring other changes, and am benchmarking a few of the options available that can handle the fact that the string might be unicode, but that we only want values under U+D7FF for both the specifier and the hotkey.
In earlier discussion, we were thinking the use of Rune wasn't necessary, here. Unfortunately, unless we also impose the <= U+D7FF restriction on the actual text, we still have to care because the position will be different if any other characters before it are beyond the BMP. So, even if the parameter is changed to a char, it still ends up needing to be a Rune at some point or else there's unnecessary casting that the compiler unfortunately actually does emit, even in optimized builds.
There are multiple unicode-aware ways to do it now, including the old method of always going through it with the StringRuneEnumerator, and each one has different considerations/consequences for performance and code complexity. Since most should be fairly short strings, it's probably best to approach it with that assumption, optimizing for the most common case.
While I'd like to make other changes that would have even bigger impact, such as retaining the values and only performing the search again if the text is altered, I'm holding off on that kind of thing, for now, as those things will involve other code in more places and will need more extensive testing, just in case there are unforeseen side effects of that kind of thing.

I also have a major love/hate relationship with Rune (more hate than love).
Why Microsoft thought it would be cool to add in a UTF-32 (which nobody really uses) type that - oh yeah - is only aware of scalars (which misses the point of huge parts of what unicode offers), among plenty of other issues, to deal with text, when the rest of the world was already on the UTF-8 train and dotnet already had and understood the UTF-8 encoding is just.... 🤯

Do we want that or can it be removed?

Nuke from orbit please.

Already done. :)
And I have a new implementation for this method, now, which:

Is zero-allocation for all inputs.

Not even an enumerator allocation.

Doesn't create any additional Runes while it runs.
Fixes existing unit test cases that were marked as bugged, so those test cases now look for the proper value (and pass with it).
Has the new desired behavior of letting the specifier key be a legal value for the hotkey, if it finds two of them consecutively.

My code isn't even special - it just adapts for what does the real unicode-related magic, which is a specific overload of a static StringInfo method that is intended for exactly this sort of use case/pattern, but which is non-obvious and not particularly well-documented, IMO. I actually came across its existence and applicability by chance from a performance-related question issue filed on the dotnet runtime repo that I almost didn't even look at.
Now to expand the test cases for more positive proof for that unit and this will be ready to go.
Remember this branch contains other mostly cleanup and performance-related stuff, as well, that was part of some rabbit holes I dove down in the process.
I rebased it on v2_develop before I got back to work on it, today, so it's all up to date and conflict-free, with one (already resolved) exception. There was a dead/unused method I had removed that got modified in another PR, and I just resolved that by letting it use the code from v2_develop and didn't bother removing it again, since it was just opportunistic and isn't in scope.

Performance-wise, avoiding heap allocations is major, in any code, when possible.
Crude benchmarks showed this new implementation to be slightly better than on-par with an already-improved version I had written, in the worst case, but usually a LOT faster than that implementation, and faster in all cases vs the original with the capital search removed.

Oh yeah. I also have some work to finish that I started earlier in the branch around implementing INotifyPropertyChanged.
I mean I guess I can submit it as-is and finish that on another branch if y'all want, since it isn't broken - just doesn't actually raise the event for all properties, yet. 🤷♂

Oh, that's right!
That's what actually initially led to me finding the other things I've addressed so far in this issue other than FindHotKey itself. So I guess it's all related enough I should just finish it in the same branch.

I'm working on a source generator, right now, relevant to this and other work items I've got in progress, but which also applies to/is intended for use with any enum type defined in the project. It is opt-in, only doing anything if the appropriate attribute decorates an enum. Its specific behavior is also configurable, to a degree, via properties exposed on the attribute for each enum.
The purpose of it is to standardize code related to enums (such as extension methods) and to provide significant performance benefits for various common and simple, yet deceptively expensive operations, especially for Flags enums and enums defined with unsigned underlying types.
I have other source generators planned, but this one is the only one I'm working on now, since it is highly relevant to the code I'm currently working on in this and related issues.
The source generator code itself has to live in its own dll project (otherwise that would be a chicken-or-egg problem/self-referencing dependency), but is only relevant at design/build time of the library itself, as with any other code generator. In other words, it's not an additional file in the compiled artifacts of the Terminal.Gui csproj. The only results of the generator visible in the compiled code are the code it generates - again, just like any other source generator.
I also would like to, as a future enhancement, add automatic unit test generation for generated code, for sake of formality and completeness, even though the generator itself will already have unit tests proving validity of its own generated code on sample enums.

This first generator is also only for extension methods.
The next one that I intend to make is also enum-related, but is for generation of struct types associated with specific enum types, especially Flags enums, again for standardization, performance, easier use, functionality enums don't have (such as mutually exclusive flag value enforcement), singletons, wider type conversion capability, etc.
Both that and the one I'm working on for extension methods generate partial classes, by default (can be overridden via the property), to allow further customizations of generated code when and where necessary.

I'm also writing it with InternalsVisibleTo the whole Terminal.Gui namespace, as well as to TerminalGuiDesigner, as it's quite likely to be useful there, as well.

Analyzers are written and working for the new GenerateEnumExtensionMethodsAttribute, and the actual source generator is partially written.
The analyzer currently performs two diagnostics, injecting a compile error if they do not pass. Those are for ensuring the attribute is only used on enums the generator is designed to support, and are, for the initial version:

The enum must not be defined in the global:: namespace
The enum must have an underlying type of int or uint

Currently, the generator outputs a copy of the attribute class, so it can be used without being explicitly defined (and will always be what the generator expects), as well as the static class for the extension methods it's supposed to generate. That class is empty, though, at the moment, as I'm still wiring up the scanning of metadata needed to generate the methods. Once I'm done putting that together, generating the code should be fairly straightforward, as that process basically consists of writing the code as if manually implementing those methods and then just copying it into templates for the generator to use.

I do believe this was fixed in #3275. Closing.

Not really. They were/are related, but have quite a bit of different work involved. This issue has a broader scope.
I have a rather large body of outstanding work that I'm just now coming back to.
Apologies, as I thought I had given notice a few weeks ago that I would be busy for a bit. I apparently did not, however, which sucks. My bad, guys. 😔
One of the source generators I mentioned is finished for a few enum extension methods that can be used in place of some pretty hot built-ins that are non-ideal. All that I really need to do to finish that particular part up is add/finish tests for it. I'm going to open a separate issue for that, though, once I'm closer to done with it, since it did stray quite a bit from the original intent of this issue and is its own unit all by itself. However, the results of the generator(s) will be used in the final implementation of the rest of the work I have outstanding.
I have plenty more I want to add to the generators, but I'd rather get it in place as soon as I'm done with this unit, so everyone can benefit from it sooner rather than later and so I don't have to keep rebasing. 😅
I've also written a PowerShell module for convenience, to work around the deficiency Visual Studio still has around referencing Analyzers/Generators in projects in the same solution. It's optional, basically just performs pre-builds of the analyzer project, and only needs to be run once. Or you can just open the solution, build the generators project, close visual studio, and open the solution again. VS just can't unload/reload an analyzer it hosts, once it's loaded.
That PowerShell module would probably make sense to merge with any other PowerShell script(s), to be both cleaner and more idiomatic PowerShell, too.

Also, these generators replace some of the other work I had done for this as well as similar code for other types, so I'll probably end up mostly scrapping my current work and just cherry-picking a few key commits into a new branch, rather than trying to reconcile all that plus this plus all the other great work that's been done while I was MIA.

Wow this was a big one and went all over the place.
Wasn't really completed, though.
And yes, it is the one that corresponds to at least most of the code I dug up that was talked about in your PR @tig.
Regardless, I think this one should remain closed in favor of #3617 and/or a new one (or probably multiple) for several reasons, not the least of which is there have been a TON of changes since this issue was originally written.
Many of the root concepts from the code I wrote mostly still apply, but the code itself largely doesn't, and it's not constrained to just TextFormatter, both because of TextFormatter being everywhere but also because other things needed supporting changes as well.
Here's a short list[^Liar] of some of the most impactful things we can do/use, related to performance, accuracy, maintainability, and probably other concerns as well that don't need to get enumerated right now:

Use of Rune can (and should) be significanly reduced.
For proper unicode handling, significantly less code in many places, and a net performance increase, especially in some hot paths, StringInfo is our friend.[^SillyDocs]
Similarly, TextInfo and CharUnicodeInfo are also very useful for other specific purposes.
Our already pretty small but quite hot dependency on that wcwidth package can and ideally should be reduced or eliminated, for several reasons, with several available options at our disposal, from easy to still pretty easy but time-consuming.

[^Liar]: Yes, I have a muuuuch longer thing typed up for when it's time to do the work, but it doesn't belong right here right now.
[^SillyDocs]: The remarks on that doc are very out of date, and the mention that it uses Unicode 8 is not true of .net 8. It uses ICU, so whatever ICU is on the system is what you get. Currently, that looks to be Unicode 15.1, which is current. That also means there's reduced risk of us or consumers attempting to do something in code that isn't legal for the target system, because the responsibility for compliance is shifted to ICU, which is the gold standard these days. We would not need to be checking codepoints for specific values for range validation and such, any more. It's on the consumer and their system.
In any case, I guess we'll get to it when we get to it.
I'll likely just opportunistically slip a couple of the lowest hanging fruit things in with other work, since a few are literally one-liners, some even with no changes necessary to callers. The bigger stuff is going to be a lot easier to tackle when things aren't such rapidly moving targets.
So... I'll just drop a tag for myself for later.
@dodexahedron


Different widget types do not agree on how to align to pixel grid

Is your issue REALLY a bug?

[X] My issue is indeed a bug!
[X] I am not crazy! I will not fill out this form just to ask a question or request a feature. Pinky promise.

Is there an existing issue for this?

[X] I have searched the existing issues.

Is this issue related to iced?

[X] My hardware is compatible and my graphics drivers are up-to-date.

What happened?
I am currently using Cosmic, but I have also tested this on the latest iced master. I have noticed that various parts of the UI (in Cosmic) seem to "shimmer" or "wiggle", due to how different elements/widgets get rasterized. For example, text will always "jump" up or down one entire pixel at a time, but the quad of a button, will "smoothly" glide across pixels. Even a 1-pixel wide border on the quad will be able to sit between pixels, causing it to become become slightly blurred.
This is a video from Cosmic settings.
https://github.com/user-attachments/assets/4b87e56b-7b2a-4a78-b0e8-462747c63aef
And on the current Iced master, I am able to produce this:
https://github.com/user-attachments/assets/645b6e49-161d-4b2a-a05f-38b7d320a867
The border is supposed to have a 1px white border, but the sides are obviously 2px wide, and muted in color. Also the number of pixels between lines of text keep changing, instead of staying the same.
What is the expected behavior?
I would expect (or at least have the option to enforce) that everything is rendered aligned to the pixel grid. Such that a 1px border is only and always 1px on my monitor. Or that the distance between two lines of text are always x pixels when scrolling, instead of constantly swapping between x and 1+x pixel distance.
Essentially when scrolling a static page, I would like to have the contents be pixel-perfect identical, just shifted up or down by some number of pixels.
Version
master
Operating System
Linux
Do you have any log output?
No response

Let's say you have a container that is 5px wide and you want to draw a vertical line of 1px in its center. What would you expect?
When we pixel snap the line and it appears off-center, wouldn't then the bug be that the line isn't centered? Which poison do we pick?

I believe the gist of what you are noticing here is simply vertical text hinting performed by cosmic-text (which I coincidentally introduced here: https://github.com/pop-os/cosmic-text/pull/143) together with our rudimentary anti-aliasing strategy in our quad pipeline.
Pixel snapping is precisely what causes the uneven distances between primitives. We want the opposite.

For more context, everything is measured in logical pixels in iced. The UI primitives exist in an ideal world were pixels are infinite in a continuous space.
The pixel grid is seen as a hardware limitation that must be dealth with to project the UI primitives into the physical world; and therefore what you see through your screen is an approximation of the actual UI. It's this approximation that needs work.
There is no way to say in iced that a border should be 1 physical pixel. There are good reasons for this, but mainly it's because of fractional scaling support and subpixel offsetting (i.e. the problem I posed earlier).

Thanks for the response. Though it is unclear to me whether you believe this is all intended behavior, or whether it is something we should have a way to remedy. Even any approximation will become significantly less noticeable on HiDPI displays, most people are presumably still using displays where pixel-width inconsistencies are visible.
Perhaps my issue is two-fold

Inconsistent spacing between elements which do align to pixels, (mostly text) as they move across the display
Elements may become blurry at the edges since they are allowed to have a position between pixels

First point
As you mentioned, text hinting causes those elements to align vertically to the pixel grid. An issue is then that different text elements are not guaranteed to shift up and down at the same time, causing inconsistent pixel-spacing between text elements over time, as both videos in the issue show. The distance between text and containers will also be inconsistent.
Second point
Then, consider this switch in cosmic, sitting inside of a larger container in the settings app. Both the switch outline, the switch handle, and the container all have a row/column of "transition" pixels, making them slightly blurry. Now, if it was consistently this blurry, that would be one thing. But because it is sitting inside of a container which is centered within a window that may be an even or odd number of pixels, it is sort of random whether it is slightly blurry or sharp.

All together
I would personally prefer that such elements alternate between being 1 pixel off center, than all elements alternating between being blurry and crisp. I would also expect when scrolling on a page with a bunch of elements, that if some elements (like text) snap to the grid, then nothing should move even one pixel, until everything is ready to move 1 pixel. It is just inconsistent to have different elements move at different times, with some jumping an entire pixel, and others smoothly gliding between the pixels.
I hope I am getting my point across and not just rambling. This problem is obviously not unique to Iced, and I do not believe I have noticed similar behavior in applications using other toolkits.

The issue is not the subpixel offsetting, but the blurriness and snapping being noticeable. As I said, this is caused by vertical text hinting and a rudimentary anti-aliasing strategy; mostly noticeable in displays with low pixel density.
If I didn't think it was an issue that needed to be solved, I would have closed it. That said, I don't think it will be a priority in quite some time.

Fair enough. I just didn't gather whether you had understood my issue.


compiler error

There is my scss:
@for $view from 3px through 16px{
	.w#{$view*100} {
		width:$view*100;
	}
}

I need this result:
.w300px{width:300px;}
.w400px{width:400px;}
..
..
.w1600px{width:1600px;}

But I get this result:
.w300{width:300;}
.w400{width:400;}
..
..
.w1600{width:1600;}

please help me thank you

I am unsure how the original sass library handles the units in this situation but if you move the px into the loop, your result is achieved.
@for $view from 3 through 16{
    .w#{$view*100px} {
        width:$view*100px;
    }
}


How to fix sidebar height?

What code on is ignite-template-componentizando-a-aplicacao affected?
(https://github.com/rocketseat-education/ignite-template-componentizando-a-aplicacao/blob/main/src/styles/sidebar.scss)
What part(s) of the code would you like to see updated?
At this moment the sidebar stay this way:

I tried to define the height with 100vh, but case you scroll the page stays like this:

Hi @franklaercio ,
I solved this problem by adding by doing:
In src/styles/sidebar.scss
Add in nav.sidebar
min-height: 100vh;

Sorry for my English.

All of you guys, I really thank you.


Support for Dark Mode

The component should really support a dark mode option: https://www.thecreativemomentum.com/blog/should-your-website-consider-dark-mode

Hi @ludakhris
We're planning to add dark mode in the next release.
Stay tuned!


Stackdriver ErrorReporter Unexpected Type

Hello,
The stack driver error_reporting client throws a ValueError Unexpected type.  Here is the code
from google.cloud import error_reporting
error_reporter = error_reporting.Client()

try:
    raise NameError
except Exception:
    error_reporter.report_exception()

And the error
/home/teddy/.virtualenvs/rewards/bin/python /home/teddy/PycharmProjects/rewards/workers/error_test.py
Traceback (most recent call last):
  File "/home/teddy/PycharmProjects/rewards/workers/error_test.py", line 5, in <module>
    raise NameError
NameError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/teddy/PycharmProjects/rewards/workers/error_test.py", line 7, in <module>
    error_reporter.report_exception()
  File "/home/teddy/.virtualenvs/rewards/lib/python3.5/site-packages/google/cloud/error_reporting/client.py", line 251, in report_exception
    user=user)
  File "/home/teddy/.virtualenvs/rewards/lib/python3.5/site-packages/google/cloud/error_reporting/client.py", line 183, in _send_error_report
    logger.log_struct(payload)
  File "/home/teddy/.virtualenvs/rewards/lib/python3.5/site-packages/google/cloud/logging/logger.py", line 226, in log_struct
    client.logging_api.write_entries([entry_resource])
  File "/home/teddy/.virtualenvs/rewards/lib/python3.5/site-packages/google/cloud/logging/_gax.py", line 108, in write_entries
    entry_pbs = [_log_entry_mapping_to_pb(entry) for entry in entries]
  File "/home/teddy/.virtualenvs/rewards/lib/python3.5/site-packages/google/cloud/logging/_gax.py", line 108, in <listcomp>
    entry_pbs = [_log_entry_mapping_to_pb(entry) for entry in entries]
  File "/home/teddy/.virtualenvs/rewards/lib/python3.5/site-packages/google/cloud/logging/_gax.py", line 604, in _log_entry_mapping_to_pb
    entry_pb.json_payload[key] = value
  File "/home/teddy/.virtualenvs/rewards/lib/python3.5/site-packages/google/protobuf/internal/well_known_types.py", line 732, in __setitem__
    _SetStructValue(self.fields[key], value)
  File "/home/teddy/.virtualenvs/rewards/lib/python3.5/site-packages/google/protobuf/internal/well_known_types.py", line 702, in _SetStructValue
    raise ValueError('Unexpected type')
ValueError: Unexpected type

It looks like a dict of {'service': 'python'} is getting passed to _SetStructValue and there is no check for a dict so it is raising a ValueError.

@waprin Can you weigh in here?

Slightly tied up at the moment but will try to take a look at this asap.

@Teddy-Schmitz working on getting this fixed, but in the meantime if you switch to HTTP instead of gRPC by setting GOOGLE_CLOUD_DISABLE_GRPC to 1, it will workaround this issue.


Refactor JabbR-Core files to work with the new models

-Ensure all files are using the new models from the JabbR-Core.Data package
-Make sure the naming of properties is consistent with the new models
-Make sure the "join" collections are functioning properly (ex. AllowedRooms used to be a collection of ChatRooms, now it is a collection of ChatRoomChatUserAllowed objects, which each contain a room and a user object)

@jcocchi Once we get the basic chatroom functionality. I can help integrate if you need.


[Metadata Improvement]: Standardize Measurement Techniques

Issue Name
Standardize Measurement Techniques
Issue Description
Similar to what we've done for healthConditions, species, infectiousAgent, we need to standardize the ingested values for measurementTechnique. This may be considerably more difficult than the standardization of healthConditions for which there was a hierarchy of ontologies to use.

Use the MyTechniques.info API to standardize the ingested values of the measurementTechniques field

Organize the ontologies based on topicCategory. Note- Aside from the Chemistry edge cases using CHMO and potential clinical studies using SNOMED, there will be plenty of overlap between all the other ontologies

Based on the topicCategory for each record, determine which set of ontologies to search, hierarchically search the relevant ontologies
Other: please suggest

Next steps

[ ] Evaluate potential approaches and determine the best path forward for standardization
[ ] Create a benchmark dataset for measurementTechniques (see related issue)
[ ] Develop standardization approach and apply against benchmark to evaluate performance

Issue Discussion
The start of this activity has been discussed in multiple bi-weekly meetings in Q1 2024
Please select the type of metadata improvement

[X] Standardization (normalizing free text to an ontology)
[ ] Augmentation (adding values for metadata fields missing values)
[ ] Clean up (addressing redundancy or messy metadata)
[ ] Structure (changing the structuring of the metadata to support front end UI features)

Meta URL
No response
Related WBS task
https://github.com/NIAID-Data-Ecosystem/nde-roadmap/issues/13
For internal use only. Assignee, please select the status of this issue

[ ] Not yet started
[ ] In progress
[ ] Blocked
[ ] Will not address

Status Description
No response
Request status check list

[ ] This metadata improvement has yet to be discussed between NIAID, Scripps, Leidos
[ ] This metadata improvement does not need to be discussed between NIAID, Scripps, Leidos
[X] This metadata improvement has been discussed/reported between NIAID, Scripps, Leidos
[ ] This metadata improvement has been implemented locally to generate data for review
[ ] This metadata improvement has been implemented on Dev
[ ] This metadata improvement has been implemented on Dev and the results have been reviewed and approved for staging
[ ] This metadata improvement has been implemented on Staging
[ ] This page/documentation/change has been approved for Production
[ ] This page/documentation/change has been implemented on Production

@DylanWelzel it looks like CHMO merged their terms with other ontologies and deprecated the CHMO-specific identifiers associated with those terms.
From CHMO, what we're interested in are the children of http://purl.obolibrary.org/obo/OBI_0000070 (formerly CHMO_0000000
CHMO_0001133)
It's possible to parse this from the owl file by recursively getting terms which are subclassOf OBI_0000070, but hopefully BioPortal will have an easier way

@DylanWelzel There seems to be significant overlap between SNOMEDCT and NCIT. Let's ensure that we have what we need from NCIT since SNOMEDCT and NCIT have different hierarchical structures.
To do:

[ ] For SNOMEDCT: Pull all children (and grandchildren etc) of: http://snomed.info/id/71388002 (Procedure)
[ ] Pull the mappings between NCIT and SNOMEDCT from NCBO Bioportal (there's an API, but you'll need to register for an account to use it)
[ ] Filter for NCIT terms that map to SNOMEDCT terms ONLY if they are within the Procedure branch
[ ] Identify least common head for NCIT terms as additional potential branches to include

Results from the evaluation of Text2Term: https://docs.google.com/spreadsheets/d/1A0CR48cbAPiAhH4QKRXOJCAaY_bkNEysLjdM5Ofqzy0/edit?gid=165507656#gid=165507656


Fix: Broken link to Deutsch Jozsa algorithm

PR Description
Fixed broken link for Deutsch Jozsa algorithm in readme file
Some notes

[x] Please make sure that you placed the files in an appropriate folder

[x] And that the files have indicative names.

[x] Please note that Classiq runs automatic code linting, which may minorly alter some files.

[x] If you're familiar with pre-commit, you may run pre-commit install, and then at each commit, your files will be altered in a similar way

Hello @Ayushjhawar8 !
Thank you for this PR. We will review it in the upcoming days and get back to you.

merged in #497


Support HTTPS for log ingestion

Enhancement Proposal
The LXD team uses the LokiPushApiConsumer interface from the charms.loki_k8s.v0.loki_push_api library. This provides us with a list of URL endpoints to push logs to. ATM, the endpoints only support HTTP and we would like to use HTTPS.
We deploy Loki using the COS lite bundle which means the Loki endpoint URL we currently receive looks like this:
http://<IP_ADDRESS>:80/cos-loki-0/loki/api/v1/push
When implementing HTTPS, the consumer side (LXD here) will need more information to validate the Loki HTTPS server. Depending on how this is implemented, a CA certificate may need to be included in the relation data. Alternatively, a self-signed server cert with the appropriate IP/DNS SANs might be sufficient.

We're currently working on adding HTTPS termination to Traefik. Once we have that, this should work out of the box.

Loki will need to communicate that it's now terminated using https, and communicate the cert to the consumer.

TLS is now available both with termination at the ingress and for end-to-end encryption within the cluster.


stream_settings: Fix jitter behavior of plus/checkmark.

Previously, we show loading spinner in each streams rows. Now we show directly plus or checkmark icon instead of loading spinner.
CZO
Screenshots and screen captures:
Before:

After:

Self-review checklist

[x] Self-reviewed the changes for clarity and maintainability
(variable names, code reuse, readability, etc.).

Communicate decisions, questions, and potential concerns.

[ ] Explains differences from previous plans (e.g., issue description).
[ ] Highlights technical choices and bugs encountered.
[ ] Calls out remaining decisions and concerns.
[ ] Automated tests verify logic where appropriate.

Individual commits are ready for review (see commit discipline).

[x] Each commit is a coherent idea.
[x] Commit message(s) explain reasoning and motivation for changes.

Completed manual review and testing of the following:

[x] Visual appearance of the changes.
[ ] Responsiveness and internationalization.
[x] Strings and tooltips.
[ ] End-to-end functionality of buttons, interactions and flows.
[x] Corner cases, error conditions, and easily imagined bugs.

@sujalshah-bit please ping your buddy for review.

LGTM but I have noticed a related bug:

When clicking on the subscribe button, the add button becomes enabled (from disabled). This still feels like jitter as transition from disabled to enabled is visible.

@adnan-td I don't quite follow your feedback. What do you think should happen with the Add button instead of the current behavior?

when user unsubscribe and subscribe again Add button should disable like before, I have made the changes to achieve this behavior, @alya and @adnan-td  what are yours thoughts on this.

Great! Now the jitters gone and buttons state is disabled when input is empty.

@zulipbot add "mentor review"
@zulipbot remove "buddy review"

@adnan-td I don't quite follow your feedback. What do you think should happen with the Add button instead of the current behavior?

Before, the add button became enabled while the input was still empty on clicking the subscribe button (normally when input is non empty it is enabled).

closing in favor of #30845


How can I customize spam filterling keywords?

Miniflux says it filter feedburner spams and pixel trackers.
I want to add my preference to this filtering list.
I tried to edit vendor/fguillot/picofeed/lib/PicoFeed/Filter/Attribute.php
and add an item to $media_blacklist, but had no luck.
What is the correct way to do?
Configuration

Miniflux version:
latest docker image
Database type and version:
sqlite

Unfortunately, this is not really configurable for now. The best way is to modify the code.

OK, thanks. I'll seek for the line.


[typescript] Correct typings of TextField's onChange

Closes #8373

👍

I should have added it in the first place


New version: goreleaser.goreleaser 2.0.0

Checklist for Pull Requests

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

Manifests

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

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

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

Automated with GoReleaser
Microsoft Reviewers: Open in CodeFlow

Automatic Validation ended with:

Installation failed with exit code -1978335187
2024-06-04 17:55:43.010 [FAIL] Installer failed security check. Url: https://github.com/goreleaser/goreleaser/releases/download/v2.0.0/goreleaser_Windows_x86_64.zip Result: 0x80004005
Executable C:\Users\Validator\AppData\Local\Microsoft\WinGet\Packages\goreleaser.goreleaser__DefaultSource\goreleaser.exe returned exit code: 1
Executable C:\Users\Validator\AppData\Local\Microsoft\WinGet\Links\goreleaser.exe returned exit code: 1

Automated error analysis suggests -1978335187 may mean Installer failed security check. Another script should retry this every 18 hours.


Modules to integrate Azure Blob service REST API

The changes in this PR are based on the D365BC-Blob-Storage-API repository I created a while ago. I refactored it quite a bit for this PR. It contains two apps ("Azure Storage Services Auth. Helper", "Azure Blob Services API") and complimentary test apps.
The purpose is to being able to use the Azure Storage Services APIs in MSDyn365BC. The "Azure Storage Services Auth. Helper" might be used (hopefully) for all APIs in the future (Blob, Queue, Table, File), right now it's only for using it with the Blob service REST API.
I tested most of the functionality against a "real" Storage Account and also against the emulator "Azurite". But Azurite only provides a subset of the API-functionality. For testing you can easily install Azurite via NPM in a container with npm install --global azurite. Start Azurite with azurite --location c:\run\my\Azurite --queueHost <IP_ADDRESS> --blobHost <IP_ADDRESS> to being able to connect Azure Storage Explorer from the host. If you want to connect Storage Explorer from the host to the container use the following connection string: DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://<YourContainerIP>:10000/devstoreaccount1;
I hope the code is not too bad and that we'll be able to integrate it at some point in time 😊

One heads up regarding the "Azure Blob Services API Test"-app (I got a question from a colleague on this): the actual tests are in the codeunit "Blob Service Test Library"; The test-codeunits (e.g. "B. S. Test Key 2020-02-10 BL") are used to execute the tests in a specific context (meaning: combination of auth-method and API-version). I planned on adding tests for different API-versions and authentication-methods. In the end there might be at least 27 combinations of versions/auth-methods (currently 9 possible API-versions and hopefully soon 3 auth-methods).
To avoid having 50+ tests for each combination (so ~1400+ tests) I chose this way of creating the tests. That way it would be possible to basically just duplicate the codeunit "B. S. Test Key 2020-02-10 BL" to SAS-authentication (instead of SharedKey) and change one parameter to being able to run all tests for this combination as well.
But you'll also see that I don't have much experience in creating tests at all 😅 They are probably not up to best-practice standards...

Any idea why the buidl fails at the moment? The log says
Your program license does not allow you to publish 'AssistedSetupVisibleTransName'.
but I'd guess that you - being Microsoft - should have a license which allows this? 😉

That was a known bug. We had given a test page extension an ID, which isn't open in the license. The issue should have been resolved in 18.1 - wonder why it is re-appearing! We'll look into that.

For the build pipeline to work, please pull our latest changes. That should resolve the problem :-)

@mazhelez  Is there anything that is blocking this PR?

We are still code reviewing and working on the PR together with Simon.

@JesperSchulz cool.  Nice to know. 👍
Any chance that this will come with BC 19? 😁

@pri-kise well, let's hope for it 😊 There still is a chance for it I'd say 😉

It is my absolute pleasure to announce, that this module will ship with version 19.0 of Business Central 🥳 Simon and Maria gave it a serious push the past week and got the remaining details ironed out. Now it's time to get this module on the road and into the arms of our community 😀

@JesperSchulz there is a bug in codeunit 9051 "ABS Client Impl." procedure PutBlobBlockBlobUI
There is now standing:
if UploadIntoStream('.', SourceStream) then
But it should like something this:
if UploadIntoStream(DialogTxt, '', 'All files (.)|.', Filename, SourceStream) then
In this way the filename is from the choosen filename and you cannot use . but have to begin with All Files
Since this is nog yet on Github I do it like this :)

@JesperSchulz there is a bug in codeunit 9051 "ABS Client Impl." procedure PutBlobBlockBlobUI
There is now standing:
if UploadIntoStream('.', SourceStream) then
But it should like something this:
if UploadIntoStream(DialogTxt, '', 'All files (.)|.', Filename, SourceStream) then
In this way the filename is from the choosen filename and you cannot use . but have to begin with All Files
Since this is nog yet on Github I do it like this :)

We'll look into this one! Thanks Bert!

@mazhelez have you seen comment about the field length of the ContentType?
Or is this already fixed and this PR isn't up to date?
Text[50] might be to short for "open xml format"( MS Word) content types like

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

@mazhelez have you seen comment about the field length of the ContentType? Or is this already fixed and this PR isn't up to date? Text[50] might be to short for "open xml format"( MS Word) content types like

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

Thank you for raising this @pri-kise
It hasn't been fixed yet so good catch! I'll take care further.

19.0 bits incl. this module have been pushed to GitHub. We can close this PR 🥳 The merge now looks as if nothing has changed, but the iterations will still show the progress.

🎉🎊🎈
Great to see 🤗 Thanks for all your help, @JesperSchulz @mazhelez @darjoo


Handle parsing empty line

This was very hard to find behind the traceback.
Fixes issue discovered accidentally in #22 where a numpy
docstring attribute without a description leads to IndexError
of an empty line.
Happened with the following: https://github.com/vcs-python/libvcs/blob/4f008d922544e7ae2d0a2c195fa7e48c65712069/libvcs/git.py#L522-L535
    def get_git_version(self):
        """Return current version of git binary
        Returns
        -------
        str
        """
        VERSION_PFX = 'git version '
        version = self.run(['version'])
        if version.startswith(VERSION_PFX):
            version = version[len(VERSION_PFX) :].split()[0]
        else:
            version = ''
        return '.'.join(version.split('.')[:3])

Traceback (most recent call last):                                                                                [88/1321]  File "/home/t/work/python/libvcs/.venv/bin/mkdocs", line 10, in <module>                                                                                sys.exit(cli())                                                                                File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/click/core.py", line 829, in __call__                                                                                return self.main(*args, **kwargs)                                                                                File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/click/core.py", line 782, in main                                                                                rv = self.invoke(ctx)                                                                                File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/click/core.py", line 1259, in invoke                                                                                return _process_result(sub_ctx.command.invoke(sub_ctx))                                                                                File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/click/core.py", line 1066, in invoke                                                                                return ctx.invoke(self.callback, **ctx.params)                                                                                File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/click/core.py", line 610, in invoke                                                                                return callback(*args, **kwargs)                                                                                File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkdocs/__main__.py", line 159, in build_command                                                                                build.build(config.load_config(**kwargs), dirty=not clean)
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkdocs/commands/build.py", line 239, in build
    config = config['plugins'].run_event('config', config)
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkdocs/plugins.py", line 94, in run_event
    result = method(item, **kwargs)
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkapi/plugins/mkdocs.py", line 51, in on_config
    config, self.config["filters"]
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkapi/plugins/api.py", line 24, in create_nav
    value, docs_dir, config_dir, global_filters
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkapi/plugins/api.py", line 47, in collect
    module = get_module(package_path)
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkapi/core/module.py", line 104, in get_module
    module = Module(obj)
  File "<string>", line 4, in __init__
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkapi/core/module.py", line 27, in __post_init__
    super().__post_init__()
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkapi/core/structure.py", line 106, in __post_init__
    self.members = self.get_members()
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkapi/core/module.py", line 48, in get_members
    return get_members(self.obj)
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkapi/core/module.py", line 81, in get_members
    module = get_module(name)
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkapi/core/module.py", line 104, in get_module
    module = Module(obj)
  File "<string>", line 4, in __init__
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkapi/core/module.py", line 28, in __post_init__
    self.node = get_node(self.obj)
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkapi/core/node.py", line 229, in get_node
    return Node(obj, sourcefile_index)
  File "<string>", line 5, in __init__
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkapi/core/node.py", line 31, in __post_init__
    super().__post_init__()
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkapi/core/structure.py", line 106, in __post_init__
    self.members = self.get_members()
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkapi/core/node.py", line 82, in get_members
    return get_members(self.obj)
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkapi/core/node.py", line 209, in get_members
    member = get_node(obj, sourcefile_index)
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkapi/core/node.py", line 229, in get_node
    return Node(obj, sourcefile_index)
  File "<string>", line 5, in __init__
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkapi/core/node.py", line 31, in __post_init__
    super().__post_init__()
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkapi/core/structure.py", line 106, in __post_init__
    self.members = self.get_members()
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkapi/core/node.py", line 82, in get_members
    return get_members(self.obj)
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkapi/core/node.py", line 209, in get_members
    member = get_node(obj, sourcefile_index)
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkapi/core/node.py", line 229, in get_node
    return Node(obj, sourcefile_index)
  File "<string>", line 5, in __init__
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkapi/core/node.py", line 31, in __post_init__
    super().__post_init__()
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkapi/core/structure.py", line 104, in __post_init__
    self.docstring = get_docstring(obj)
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkapi/core/docstring.py", line 291, in get_docstring
    sections.append(get_section(*section))
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkapi/core/docstring.py", line 185, in get_section
    type, markdown = parse_returns(doc, style)
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkapi/core/docstring.py", line 174, in parse_returns
    return type, join(lines)
  File "/home/t/work/python/libvcs/.venv/lib/python3.7/site-packages/mkapi/utils.py", line 16, in join
    indent = get_indent(lines[0])
IndexError: list index out of range
make[2]: *** [Makefile:26: build_docs] Error 1
make[2]: Leaving directory '/home/t/work/python/libvcs'

Added print()'s in utils.py:
lines ['Base class for repositories.', '', 'Extends :py:class:`logging.LoggerAdapter`.']                                                                                lines ['A git repository.', '', ':param url: URL of repo', ':type url: str', '', ':param git_shallow: clone with ``--depth 1`` (default False)', ':type git_shallow: bool', '', ':param git_submodules: Git submodules that shall be updated, all if empty', ':type git_submodules: list', '', ':param tls_verify: Should certificate for https be checked (default False)', ':type tls_verify: bool', '', '.. versionchanged:: 0.4.0', '', '   The ``remotes`` argument is ignored. Use :meth:`~.set_remote` to set remotes', '   before running :meth:`~.obtain`.', '', '   The ``remotes`` argument is deprecated and will be removed in 0.5']
lines ['Assure destination path exists. If not, create directories.']                                                                                lines ['Return clean VCS url from RFC-style url', '']
lines ['url : str', '    PIP-style url', '']
lines ['str :', '    URL as VCS software would accept it']                                                                                lines ['    URL as VCS software would accept it']
lines ['Delegate a critical call to the underlying logger.']                                                                                lines ['Delegate a debug call to the underlying logger.']
lines ['Delegate an error call to the underlying logger.']                                                                                lines ['Delegate an exception call to the underlying logger.']
lines ['Get the effective level for the underlying logger.']                                                                                lines ['Retrieve name of the remote / upstream of currently checked out branch.', '']
lines ['str :', '    If upstream the same, returns ``branch_name``.', '    If upstream mismatches, returns ``remote_name/branch_name``.']
lines ['    If upstream the same, returns ``branch_name``.', '    If upstream mismatches, returns ``remote_name/branch_name``.']
lines ['Return current version of git binary', '']
lines ['str']
lines []

It looks like this is the area it happened:

Thanks for your contribution.


bugfix webdav4s request urls

When using webdav4s the requests will be send as "http" and not "https".
So this will always fail when the webdav server does not allow "http" requests.

Hi @ddg-igh ,
(CC: @garydgregory )
I've just copied your report to https://issues.apache.org/jira/browse/VFS-758. Thank you very much for reporting! It was my mistake not to test this basic thing. Sorry about that.
I'd like to look into the issue this weekend and let you guys know.
Regards,
Woonsan

Hi @ddg-igh ,
(CC: @garydgregory )
I think I found a simpler fix: https://github.com/apache/commons-vfs/pull/83
Basically, all Http4FileObject and its descendants have internal URIs, converted from the logical one to physical one already. So, it seems simpler just to use #getInternalURI().getScheme() in Webdav4FileObject.toUrlString(GenericURLFileName, boolean).
Thanks again!
Woonsan

Hi @woonsan,
this looks like a nice solution. So i can close this request.
The only thing someone should document is that the Webdav4sFileProvider should only be bound to schemes with an "s" at the end of the name. In case that people will manually bind the provider to schemes. Otherwise this will not work.


@list CAP Consistency?

Hey! Someone new in the Bluesky group mentioned m-ld.
First thing I always do is try the demo (usually they fail), yours worked! Voila! Congrats! Impressed!
I'm Mark, author of a similar library called GUN. So the 2nd thing I did was look if you're using CRDTs or what not? Still not sure.
Seems like if 2 people edit @id: "test" {foo: 'bar'} and {foo: 'baz'} at the same time it becomes {foo: ['bar','baz']} union set?
Then a dev just map/reduces the set to choose the one they want? (2 concerns: if I add the single-valued constraint, spec doesn't say what to do, so does it not happen automatically or does it? If so, what rule is used? Second, without the constraint, this could get really spammy and not scale. If every O(1) update requires an O(N) read perf, even just in-memory, will deteriorate quickly - 20 people beta testing a "hello world" input will excess keystroked updates. Conceptually, I like the model tho, but performance reality bites unless single-valued constraint is on by default, also dev will always have to litter test.foo.length? test.foo[0] : test.foo type checks everywhere.)
More importantly, how is @list consistency determined? This is annoyingly CP-level centralized stuff or "ugh maybe need a blockchain" junk. 5 people insert into the list concurrently, 2 people delete, all at the same time. Indices won't match (GUN errors on Arrays, tells you to use .set( which defaults to loosely ordered sets to avoid this all. Strongly consistent ordered lists have to be implemented ontop). What is the expected result? The best answers I've seen on this is @ept Martin Kleppmann's CRDT work, he's the only one that I've seen solve it well, but performance is non-trivial too and can have unbounded growth (but recently he has this brilliant compaction method that Joseph Gentle @josephg convinced me of, it is extremely exciting).
Also curious to hear your critiques of GUN's CRDT.

Heya Mark, welcome and thanks for these super thoughts/questions.

Seems like if 2 people edit @id: "test" {foo: 'bar'} and {foo: 'baz'} at the same time it becomes {foo: ['bar','baz']} union set?

Yes. This is the JSON-LD graph model (in which everything is a set) being imperfectly matched with the normal/intuitive semantics of the JSON representation (in which some things are registers or arrays). The approach being explored is that this is OK, and desirable in the long run.
So the base assumption is that {foo: ['bar','baz']} is OK and normal. What's really happened is a singleton set, which was always a set, has had a member added. The app might be completely OK just showing this to the user, at which point the user sorts it out at user-speed. If multiple users have the same speed noticing and editing (unlikely) and so manage to do so concurrently (very unlikely), AND they make different decisions (hopefully even more unlikely), you could get a few rounds of argument.
However as an engineer it's natural to prefer that the app doesn't have to be built around every subject property being a set... The first option is actually to deal with this in the layering of the app. You keep all values and just apply some reasonable merge for consumers (for example the demo does this in the UI). Then the next update by the user will collapse the values back to one. There's a risk here of a minor divergence if instances of the app display things differently – for example using foo[0] could do this if the (unordered) set iterates differently, but it'll vary whether this matters.
(I'm not quite following where the O(N) read perf is coming from. Just to say, the graph is O(1) for reads, but I'm not sure if that addresses your point. Maybe you mean N is the number of existing values of the property, and you're envisaging the possibility of a big set – related to keystrokes – in which case, keep reading.)
Next option is to add the single-valued constraint. At the moment this is spammy because it broadcasts its decision – it's on the list to fix: https://github.com/m-ld/m-ld-spec/issues/72. However the fix is to provide a better version of "single-valued", which uses a CRDT and so, needs no broadcast.
So that's:

A CRDT composed on top of a CRDT,
which is selected declaratively.

The second point is key to the vision: like linked data in general, m-ld is aiming for declarative data semantics. At the moment, constraints are declared in the configuration, but soon they'll be in the data itself. The declaration might lead to some extension code being loaded which implements the selected semantics. More on the vision in the short paper here: http://ceur-ws.org/Vol-2941/paper1.pdf
OK so (finally – sorry) lists are done using a List CRDT. At the moment the default list is similar to LSeq, which means it's a few years behind Martin's work (though it's inspired by one of his papers on how it deals with item moves); won't behave perfectly intuitively for text (character sequences); and might have some performance issues. But again the principle is to have alternative list CRDTs available which track the state of the art.
A few addenda, which came up while typing:

Tombstones: m-ld's base CRDT does not need to keep deleted data. This means m-ld ducks some of the issues other CRDTs have to work around with compaction. However it also means it can't arbitrarily compare states without knowledge of their contributing operations...
which means that it has the different challenge of maintaining a journal, which (ironically) has led to implementing journal compaction. Again, the hypothesis is that having a journal is a good thing – it brings with it natural traceability, and can be tuned differently for different scenarios. In case this turns out false (or false sometimes), I'd hope to be able to change the approach on point 1, or make it a choosable option.
Related to declarative selection of CRDTs, we're also looking at other consistency models besides SEC. The idea is to start with conflict-free and build coordination on top for when you need it. So if you wanted a List implementation which can only behave a certain way by coordination, or centralisation, or blockchain, you can do that. The first explorations in this are related to security, and you can read much more here: https://github.com/m-ld/m-ld-security-spec/blob/main/design/suac.md

I haven't enough of a handle on GUN's CRDT yet to offer any critique so let me try and internalise it some more. I started out on the m-ld journey before I knew about it. It would be great (as with all these projects and ideas) if the trajectories could converge where appropriate!

@gsvarovsky thanks for taking the time to reply! Awesome pointers towards answers, will close.  Hopefully can reuse this somewhere in the docs for folks like me?
(No worries to dive, we are all too busy anyways, just glad to see other decentralized libraries that actually work! And oh, then find out, of course... they're CRDT based. Hehe)


Flip skysphere's X axis so that it matches the orientation of the environment map applied on models

see the examples in http://localhost:8000/examples/background-image.html and you'll see the skysphere does not match the environment map. This is now fixed:

Nice catch!


Integrate vocabulary handlers

This change hooks up the UI to the new vocabulary handlers on hyde.  They are taking quite some time to respond, and I'm not sure why.  I would appreciate @hyunssong advice on how to help make it faster.
If you happen to drill into the UI before the response comes back, React errors out.  I am not sure why it is taking so long.

@hyunssong are the tests failing because of what you were talking about this morning at standup?

@dannymandel As the test cases are failing on the hierarchyFacet, I am assuming that is related to what I mentioned in today's standup. I opened a PR that has the updated test cases so that should be merged first I guess.

@dannymandel As the test cases are failing on the hierarchyFacet, I am assuming that is related to what I mentioned in today's standup. I opened a PR that has the updated test cases so that should be merged first I guess. FYI, The PR that has the updated test cases is #180.

Yup, merged it in.  Seems happy now.  Thank you!

Docker changes to work with this in https://github.com/isamplesorg/isamples_docker/pull/64

Going to merge this one to get it tested out…


[FEATURE] warlock spell slots

Describe your idea
No options to track warlock spells slots. Changing of it does not emit new message.
Versions

Change Log: [e.g. 1.0.0]
System: [e.g. dnd5e 2.0.0]
Foundry VTT: [e.g. 11.305]

Additional context
Logging to separate chat/window is great feature too).
upd: You can use existing module for chat: https://foundryvtt.com/packages/chat-tabs
You just need to set type of log messages

Fixed in Change Log 0.5.0.

Wow. It was fast!)