Enable towncrier

We have a configuration file for towncrier in the repository (inherited from https://github.com/jaraco/skeleton), so I figure we might as well make use of it. All the cool projects have a changelog, and using towncrier to maintain one is going to be slightly less annoying than doing it manually.
Actually I started working on this a little already a couple days ago while I was waiting for some other stuff, just to see how tricky it would be... seems like it's fairly straightforward. The only significant change is that every PR now has to include a changelog fragment.
@sjlongland any thoughts on this? I think if we're going to do it, best to get it out of the way now. (This should be my last last-minute addition to the initial release milestone :stuck_out_tongue:)

um... okay so I may have spoken too soon. It's proving a little tricky to set things up to actually build the changelog when we make a release, because the existing command for building the changelog (from the skeleton, i.e. running jaraco.develop.finalize) seems to make some assumptions that clash with our development workflow. I'm sure it won't be too hard to figure out, I'm just not sure it's worth waiting on the initial release until we can do this.

It'd definitely be worth it if we can automate the change-log generation… at work we do it by hand, and it's the pits.  Too often, someone adds a new version but then forgets to put a link down the bottom linking to the commit changes, or mangle the URI accidentally.
https://github.com/widesky/jswidesky-client/blob/master/CHANGELOG.md is managed by hand.
That said, you don't want to try and pick up a new tool whilst flustered getting a release out.  Definitely worth a look to see if we can get it working.

OK sounds reasonable. I'll take a shot, I might be able to figure it out tonight...  I can push my branch) And it will be nice to have this out of the way.

OK sounds reasonable. I'll take a shot, I might be able to figure it out tonight...  I can push my branch) And it will be nice to have this out of the way.

I can take over if you like… I haven't got work interfering with free time so should be able to tackle this without much interruption.

OK, sounds good. Though, I realized I won't be able to push changes until I get home from work anyway, so I'll spend a little bit of time on it and then push my changes, and if things haven't resolved themselves you can take over.

I got something figured out, at least, and pushed my candidate changes as a PR (linked just above).
The code itself was not hard at all. What makes this tricky is how it affects the design of our release workflow. Back in #40 I set up the infrastructure for the following release workflow:

We start by making a Github release ("Github release" refers to the announcement page on Github that we make using this form), with a corresponding tag, in the Github web interface (or by using the Github API)
The workflow automatically runs and tests the code from a checkout of the main Git branch
It also tests the documentation from a checkout of the main Git branch
It builds the package for distribution
After getting a maintainer's approval through the Github UI (or API), it publishes the package to Test PyPI
Then after getting approval again, it publishes to PyPI

That procedure is designed to make the Git tag the source of truth about what version of the code actually corresponds to the release. The thing is, when we run towncrier build to aggregate all the changelog fragments into the actual changelog update, it needs to have the version number of the release that it's going to be building a changelog for... but the changelog needs to go into the tagged commit, which means the version number isn't available from the tag until after the changelog has been generated.
I guess the proper way to deal with this has to be that when preparing a release, we manually give towncrier the version number of the tag that's going to be created. It feels a little inelegant, because towncrier is definitely capable of extracting the version from the package itself; but I think the only alternative would be changing the source of truth about the version number to be something other than tag (maybe a hard-coded constant in pyproject.toml or __init__.py? maybe the changelog itself?) and personally I really do not like doing that because it introduces ambiguity about what version of the code corresponds to what released version.
For now, just to keep things simple, I pushed a candidate change that requires us to manually run towncrier to update the changelog just before we make a release. In the long run, there's definitely a good opportunity to have this whole thing automated, so that we only provide the version number once, to a workflow, and it does the whole thing for us: compile the changelog, commit the change, tag that commit, and go through all the other steps of creating and testing a release based on the tag. But I think it needs a good amount of thought to figure out how best to do that, and I'd rather we leave it to discuss after we get at least one release in the books.
So yeah, #90 is my proposal for how we move forward for now - but I'm definitely open to discussion. If you want to take a crack at implementing something a little more sophisticated that will give us a smoother release workflow, go for it - it's just my preference to pause here, finish up our first release, and then come back to that problem.

Ehh fun, chicken-and-egg problem.  towncrier needs the version number, which is derived from the git tag, which we want to include the current change-log information but can't because the tag doesn't exist yet.
I think a manual release step seems the most appropriate.  While I'm used to manually updating a version number in the code (NodeJS it's in package.json; lots of legacy Python projects have it either in a module property or in setup.py), it's not exactly an elegant way of doing this.
I agree it's not a solution that needs immediate fixes, so we can re-visit this later.

The changes look okay, but I'll just manually run it here and see what it does… make sure it actually generates sensible output.

RC=0 stuartl@rikishi ~/projects/setuptools-pyproject-migration/work $ ls -l CHANGELOG.rst
-rw-r--r-- 1 stuartl stuartl 0 Oct  5 17:32 CHANGELOG.rst
RC=0 stuartl@rikishi ~/projects/setuptools-pyproject-migration/work $ python3 -m towncrier build --version 1.0.0
Loading template...
Finding news fragments...
Rendering news fragments...
Writing to newsfile...
Staging newsfile...
I want to remove the following files:
/home/stuartl/projects/setuptools-pyproject-migration/work/changelog.d/88.feature
Is it okay if I remove those files? [Y/n]: n
Done!
RC=0 stuartl@rikishi ~/projects/setuptools-pyproject-migration/work $ git status
On branch towncrier/1/dev
Your branch is up to date with 'origin/towncrier/1/dev'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   CHANGELOG.rst

RC=0 stuartl@rikishi ~/projects/setuptools-pyproject-migration/work $ git diff
RC=0 stuartl@rikishi ~/projects/setuptools-pyproject-migration/work $ cat CHANGELOG.rst
1.0.0
=====

Features
--------

- Enable towncrier (#88)

So that added a new entry to the previously empty CHANGELOG.rst.

If I let it delete the file…
RC=0 stuartl@rikishi ~/projects/setuptools-pyproject-migration/work $ python3 -m towncrier build --version 1.0.0
Loading template...
Finding news fragments...
Rendering news fragments...
Writing to newsfile...
Staging newsfile...
I want to remove the following files:
/home/stuartl/projects/setuptools-pyproject-migration/work/changelog.d/88.feature
Is it okay if I remove those files? [Y/n]: y
Removing news fragments...
Done!
RC=0 stuartl@rikishi ~/projects/setuptools-pyproject-migration/work $ git status
On branch towncrier/1/dev
Your branch is up to date with 'origin/towncrier/1/dev'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   CHANGELOG.rst
        deleted:    changelog.d/88.feature

…the deletion is staged.  Presumably it then lives permanently in CHANGELOG.rst from then on.
So it looks to be doing the right thing when run directly.

Running via tox:
towncrier: commands[0]> towncrier build --yes
Traceback (most recent call last):
  File "/home/stuartl/projects/setuptools-pyproject-migration/work/.tox/towncrier/bin/towncrier", line 8, in <module>
    sys.exit(cli())
             ^^^^^
  File "/home/stuartl/projects/setuptools-pyproject-migration/work/.tox/towncrier/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/stuartl/projects/setuptools-pyproject-migration/work/.tox/towncrier/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "/home/stuartl/projects/setuptools-pyproject-migration/work/.tox/towncrier/lib/python3.11/site-packages/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/stuartl/projects/setuptools-pyproject-migration/work/.tox/towncrier/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/stuartl/projects/setuptools-pyproject-migration/work/.tox/towncrier/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/stuartl/projects/setuptools-pyproject-migration/work/.tox/towncrier/lib/python3.11/site-packages/towncrier/build.py", line 123, in _main
    return __main(
           ^^^^^^^
  File "/home/stuartl/projects/setuptools-pyproject-migration/work/.tox/towncrier/lib/python3.11/site-packages/towncrier/build.py", line 162, in __main
    project_version = get_version(
                      ^^^^^^^^^^^^
  File "/home/stuartl/projects/setuptools-pyproject-migration/work/.tox/towncrier/lib/python3.11/site-packages/towncrier/_project.py", line 46, in get_version
    raise Exception("No __version__, I don't know how else to look")
Exception: No __version__, I don't know how else to look
towncrier: exit 1 (0.43 seconds) /home/stuartl/projects/setuptools-pyproject-migration/work> towncrier build --yes pid=105672
.pkg: _exit> python /home/stuartl/projects/setuptools-pyproject-migration/env/lib/python3.11/site-packages/pyproject_api/_backend.py True setuptools.build_meta
  towncrier: FAIL code 1 (19.91=setup[19.48]+cmd[0.43] seconds)
  evaluation failed :( (20.09 seconds)

A ha… so the answer is, we manually provide it via tox… otherwise towncrier can't figure out the version number:
https://github.com/twisted/towncrier/issues/320
RC=0 stuartl@rikishi ~/projects/setuptools-pyproject-migration/work $ tox -e towncrier -- --version 1.0.0
.pkg: _optional_hooks> python /home/stuartl/projects/setuptools-pyproject-migration/env/lib/python3.11/site-packages/pyproject_api/_backend.py True setuptools.build_meta
.pkg: get_requires_for_build_editable> python /home/stuartl/projects/setuptools-pyproject-migration/env/lib/python3.11/site-packages/pyproject_api/_backend.py True setuptools.build_meta
.pkg: build_editable> python /home/stuartl/projects/setuptools-pyproject-migration/env/lib/python3.11/site-packages/pyproject_api/_backend.py True setuptools.build_meta
towncrier: install_package> python -I -m pip install --force-reinstall --no-deps /home/stuartl/projects/setuptools-pyproject-migration/work/.tox/.tmp/package/65/setuptools_pyproject_migration-0.0.1.dev4+g16cfb26-0.editable-py3-none-any.whl
towncrier: commands[0]> towncrier build --yes --version 1.0.0
Loading template...
Finding news fragments...
Rendering news fragments...
Writing to newsfile...
Staging newsfile...
Removing the following files:
/home/stuartl/projects/setuptools-pyproject-migration/work/changelog.d/88.feature
Removing news fragments...
Done!
.pkg: _exit> python /home/stuartl/projects/setuptools-pyproject-migration/env/lib/python3.11/site-packages/pyproject_api/_backend.py True setuptools.build_meta
  towncrier: OK (1.50=setup[1.20]+cmd[0.30] seconds)
  congratulations :) (1.63 seconds)
RC=0 stuartl@rikishi ~/projects/setuptools-pyproject-migration/work $ git status
On branch towncrier/1/dev
Your branch is up to date with 'origin/towncrier/1/dev'.

Changes to be committed:
  (use "git restore --staged <file>..."  I figured we can make it automatically figure out the version number in the future, but for now it was easiest to just pass it in manually.

Haha we got it simultaneously :smile:

Haha we got it simultaneously 😄

Classic race condition. :-)


getNTPOffset gets stuck

When i use getNTPOffset it sometimes gets stuck at await _datagramSocket.firstWhere

I sent too many requests

Sometimes it get stuck, why?

@pav3lo Do you have some minimal code example where this error occurs?

When i run this from main, sometimes it gets freeze:
print(await NTP.getNtpOffset(localTime: DateTime.now()));
print(await NTP.getNtpOffset(localTime: DateTime.now()));
print(await NTP.getNtpOffset(localTime: DateTime.now()));
print(await NTP.getNtpOffset(localTime: DateTime.now()));
print(await NTP.getNtpOffset(localTime: DateTime.now()));
print(await NTP.getNtpOffset(localTime: DateTime.now()));
print(await NTP.getNtpOffset(localTime: DateTime.now()));
print(await NTP.getNtpOffset(localTime: DateTime.now()));
print(await NTP.getNtpOffset(localTime: DateTime.now()));
print(await NTP.getNtpOffset(localTime: DateTime.now()));

From NTP pool website:

Many servers are provided by volunteers, and almost all time servers are really file or mail or webservers which just happen to also run ntp. So don't use more than four time servers in your configuration, and don't play tricks with burst or minpoll - all you will gain is extra load on the volunteer time servers.

You are not supposed to use it like that, you should call it only once (initialization of the app) save it, and then load it if you need it again.
Try not to call it that frequently, or change ntp server to some other that might handle that (like maybe time.google.com). But I think eventually they will start timeouting you as well.
To get NTP from different server:
NTP.getNtpOffset(lookupAddress: 'time.google.com');


docs: add guides for usage

Most of the guides required before open sourcing, most of the code is tested in the examples and guides.

whoops I have been doing local work on the same files, will merge this and rebase.


Error pages exceptions fixes

First of all I thought it was better to have error/404.phtml instead of pages/404.phtml as a 404 error view script.
If I got it somehow wrong I'd love to know why it was pages/404.phtml.
Then I was inspecting https://github.com/zendframework/ZendSkeletonApplication/issues/5 , and added some checks to avoid working with 'exception' parameters that are not objects instance of Exception. You can see these fixes directly in the error/404.phtml and error/index.phtml scripts (which are almost the same.... we should probably remove one of them in the future).
Also attached the 'exception' and 'display_exceptions' to the vars passed to the view renderer. Some errors were just not passed to the view before, which made it difficult to track for example Zend\Di\Exception\ClassNotFoundException.
Also added parameter display_exceptions to the module config, default to "false". Makes more evident that it should be turned on in development environment.

Closing, was using an old clone. Fixed in https://github.com/zendframework/ZendSkeletonApplication/pull/8


Sc 9184 add jenkins jmx

Would it make sense to add description field as well?

Hard to say, we maybe will have different set of metrics soon if will decide to write our own plugin for J like DD did.
I may add these descriptions https://plugins.jenkins.io/metrics/ ha?

Just a note for us so we don't forget about adding the Jenkins signature in autodisco.yml

I may add these descriptions https://plugins.jenkins.io/metrics/ ha?

Yeah, that may be good.

Just a note for us so we don't forget about adding the Jenkins signature in autodisco.yml

Just a note for us so we don't forget about adding the Jenkins signature in autodisco.yml

And support to backend (for autodisco) + support in autodisco UI if not already added. Create tickets for those?


Please publish to NPM

Now that you support CommonJS we would love this library on NPM. :-D

+1

+1
The one that exists in npm is outdated.

+1

Who is maintaining the NPM module? It should be tied to this repo its out of date
https://www.npmjs.com/~lmacsen#packages
<EMAIL_ADDRESS>@lmacsen on npm

@kevzettler I just updated the module to the latest version.
I made stats.js NPM module few months ago to use it in some projects and I forgot him. I never thought that someone else uses it.
I would like maintain this NPM module and update it every time from now.
But if any stats.js developer want to maintain this module, just let me know.
Thank you.

@lmacsen Wouldn't mind updating the package myself. Would it be possible to become the owner of the package? https://www.npmjs.com/~mrdoob

@lmacsen +1 for @mrdoob  maintaining

+1 it just makes more sense
On Fri, 25 Sep 2015 00:46 Kev Zettler<EMAIL_ADDRESS>wrote:

@lmacsen https://github.com/lmacsen +1 for @mrdoob
https://github.com/mrdoob maintaining
—
Reply to this email directly or view it on GitHub
https://github.com/mrdoob/stats.js/issues/32#issuecomment-143081490.

@mrdoob
Sorry for the late. I added you as unique owner of stats.js NPM package.
I hope you will keep updated and thank you for all your great work!

Does the NPM package need the closure compiler .jar? It takes up quite a lot of space.

@mrdoob Hi. Can you add a webhook or something to auto publish update when you release to github ? The npm package is still in REVISION 12, github one's is 14.
Thanks.

Done!

Thanks :)


Handle verification of JWT tokens gracefully.

Description
Expired JWT token should return 401 instead of 5xx.
Fixes # (issue)
#304
Please delete options that are not relevant.

[*] Bug fix (non-breaking change which fixes an issue)

Checklist:
Please delete options that are not relevant.

[*] I have performed a self-review of my code
[*] I have commented my code, particularly in hard-to-understand areas
[*] My changes generate no new warnings

@collado-mike @eric-maynard , Please review . There was a flaky test failure with new test Class so I had to move tests to PolarisServiceImplIntegrationTest


When watching videos on Chrome, Discord says I am playing a game, instead of "Watching"

If possible, could I know what to edit in the discord.js file to only allow "WATCHING" as the only activity type? I see it has:
t.ActivityTypes=["PLAYING","STREAMING","LISTENING","WATCHING"]
I tried to remove all but "WATCHING", however it still says I'm playing a game...

Maybe the library included in the extension is old. I'll search for a work-around.

Hello!
I have just tried to use your software, but for some reason it doesn't work.
The extension is here, loaded in and the token is active. It does not, however, find the tab name or display it on my account (images). Is this some wrong doing on my part or is there an issue at hand?

Hello!
I have just tried to use your software, but for some reason it doesn't work.
The extension is here, loaded in and the token is active. It does not, however, find the tab name or display it on my account (images). Is this some wrong doing on my part or is there an issue at hand?

Sorry for causing another issue. After upgrading one of dependency, I was needed to modify some raw material to connect to Discord gateway without any official library support or things. One purpose from new release was "making work", actually. There might some bugs in current release and some work-around to connect Discord with user account is required now to this plugin work flawlessly.

Sorry for causing another issue. After upgrading one of dependency, I was needed to modify some raw material to connect to Discord gateway without any official library support or things. One purpose from new release was "making work", actually. There might some bugs in current release and some work-around to connect Discord with user account is required now to this plugin work flawlessly.

Sorry for causing another issue. After upgrading one of dependency, I was needed to modify some raw material to connect to Discord gateway without any official library support or things. One purpose from new release was "making work", actually. There might some bugs in current release and some work-around to connect Discord with user account is required now to this plugin work flawlessly.

And when will the next release happen, if there isn't anything I can do myself to fix the issue?

Sorry for causing another issue. After upgrading one of dependency, I was needed to modify some raw material to connect to Discord gateway without any official library support or things. One purpose from new release was "making work", actually. There might some bugs in current release and some work-around to connect Discord with user account is required now to this plugin work flawlessly.

And when will the next release happen, if there isn't anything I can do myself to fix the issue?

I can't say the exact EST to you because I am busy of other things and doing educational things at the time. However, after knowing what disconnects from Discord gateway and what things shouldn't be modified via Discord.JS library, I can fix right now. The attached flie is the modified version of Discord.JS and you can download the original file from Discord.JS webpack builds.

I can't say the exact EST to you because I am busy of other things and doing educational things at the time. However, after knowing what disconnects from Discord gateway and what things shouldn't be modified via Discord.JS library, I can fix right now. The attached flie is the modified version of Discord.JS and you can download the original file from Discord.JS webpack builds.

I can't say the exact EST to you because I am busy of other things and doing academical things at the time. However, after knowing what disconnects from Discord gateway and what things shouldn't be modified via Discord.JS library, I can fix right now. The attached flie is the modified version of Discord.JS and you can download the original file from Discord.JS webpack builds.

Guess I'll be waiting for release then! Thanks a lot.

I can't say the exact EST to you because I am busy of other things and doing academical things at the time. However, after knowing what disconnects from Discord gateway and what things shouldn't be modified via Discord.JS library, I can fix right now. The attached flie is the modified version of Discord.JS and you can download the original file from Discord.JS webpack builds.

Guess I'll be waiting for release then! Thanks a lot.

Thank you for waiting 🥇 ...

Thank you for waiting 🥇 ...


Makubot isn't replacing embeds with video links again

https://discordapp.com/channels/322509699159162883/579363357543497772/762076293322768404
The "image" link was https://makubot.s3.us-east-2.amazonaws.com/pictures/upisnotjump/video0-video00.mov
Why isn't it replacing with a video link?

Line 467 of picturecommands.py; Correct me if I'm wrong, but the url isn't empty when the embed fails to embed a video, right? In any case, I think this conditional statement is where the issue is because the one in send_img_func below it is different.

I did some testing, and it turns out that it indeed ends up empty if it didn't accept the URL as an image (that's why it's worked to revert embeds to video URLs in the past).
But you're totally correct, nice eye! This is why you don't repeat code, whoops.
Thanks! :D


fix: add himanshu1221

resolves #1698
Checklist for profile addition

[x] Name the PR fix: add <your-username>.
[x] You've added file named your-username.json in the profiles directory.
[x] You've linked the PR to the correct issue.

@Panquesito7 is it okay now ?


Identicon is gone

Basically we have 3 options now:

try again @polkadot/vue-identicon
reincarnate @vue-polkadot/vue-identicon
use @vue-polkadot/sigil-js

#1407 related

Updated description with alternatives

the our identicon had some problem with the build afaik
the polkadot would be like the simplest fix
sigil-js is really nice but the package is huge (1.4MB vs 110 KB)

WDYT @roiLeo, @yangwao ?

* the our identicon had some problem with the build afaik

I thought that the problem with identicon came from PWA.

* the polkadot would be like the simplest fix

yeah, this one seems the best for now

* sigil-js is really nice but the package is huge (1.4MB vs 110 KB)

the question doesn't arise, package is to big
Have you thought about creating your own Hashvatar component?

Hashvatar

this looks really nice!
This is mine


Implement Connection Management

various issues (like #30) asked about how a connection management (lost connections etc.) could be realised.
though orchestra-jsapi shows a way how this can be implemented (https://github.com/swissmanu/orchestra-jsapi/blob/master/index.js#L41), it makes use of internal APIs of the underlying XMPP client.
since the question appeared	repeatedly, it might make sense to implement a minimal connection management mechanism directly into harmonyhubjs-client.

I've found a very simple fix to this issue. Please see PR #42


internal/dinosql: Remove unneeded column suffix

When returned columns have no name set, a name is generated based on
index (e.g. column_1, column_2). When generating Go structs, sqlc wasn't
using the correct column name to track duplicate, resulting in nonsense
field names like Column5_2.
This has the added benefit for generating correct JSON tag values for
these columns.

No surprise here, but credit to @kevinburkemeter for the initial bug report.


RHS for continuous time D-Control

Hello Patrick,
i would like to create a feedback controlled differential equation. However, i do not know how to create the D-Controller. I can just "imagine" how to build it in an explicit euler scheme, i.e. thinking about it in a discrete step-function sense.
I was thinking something like this:
dim = 3

def gen_y0():
    return jnp.zeros((dim))

def rhs(t,y,args):
    # some reference ..
    r = 0.1
    # .. some time-varying error as a function of reference
    e = r - t

    delayed_t = y[0] # ?? I don't know how to handle this / get a delayed time
    dt = (t - delayed_t)
    delayed_e = (y[1] - y[2]) / dt

    D = (e - delayed_e) / dt

    return jnp.array([
        1.0,
        e,
        delayed_e,
    ])

term = dfx.ODETerm(rhs)
saveat = dfx.SaveAt(ts=jnp.arange(11)/10.0)

dfx.diffeqsolve(term, Euler(), t0=0, t1=1.0, y0=gen_y0(), dt0=0.1, saveat=saveat).ys

Do you happen to have any insights into this? What am i missing?
Thank you in advance!

After some thoughts, i think i have to re-write my system with state dimension $n$, number of inputs $m$, number of measurements $p$ as
$$(\mathbb{1}+B K_d C) \frac{dx}{dt}=f(x) + B K_d \frac{dr}{dt}$$
where $B \in \mathbb{R}^{n\times m}, K_d \in \mathbb{R}^{m\times p}, C \in \mathbb{R}^{p\times n}$ and $r(t) \in \mathbb{R}^p$  is the time-varying reference.

Something like that looks correct. The continuous-time form of a D-controller uses the derivative. (In particular you don't need to turn this into a delay diffeq.)
See e.g. the "mathematical form" heading on its Wikipedia page.


Assignment 1 Dimitri van der Lee

Introduction

Hi everyone, I am Dimitri, and I am a PhD candidate in the department of biotechnology, working on microbial electrosynthesis. Pleased to meet you all!
Describe your research in 2-3 sentences to someone that is not from your field (please avoid abbreviations)

The goal of my research is to overcome the limitations that are currently preventing microbial electrosynthesis to be scaled up.
My research entails the following aspects:

Research Aspect
Answer

Use/collect personal data (health data, interviews, surveys)
No

Use/collect experimental data (lab experiments, measurements with instruments)
Yes

Collaborate with industry
Yes

Write/develop software as the main output of the project
No

Use code (as in programming) for data analysis
Yes

Work with large data (images, simulation models)
Yes

Other:
N/A

Reflections on the importance of RDM videos

In my opinion, data is often very easy to get lost in. It is so easy to collect a lot of data, but then be unable to get order in it. For this reason, I believe it would be very helpful to already have a plan on how to handle your data and its analysis, before you even start collecting this data.
What would you like to learn during this course?

During this course, I would like to get a standard in how I manage my data in a safe way, which couses me and everyone around me to be able to easily find and access my data.
Checklist assignments

[x] Assignment 1: creating a GitHub issue (the overview issue) (before 30 April, 10:00)
[x] Respond to the GitHub issue #125
[x] Assignment 2: Data Flow Map 1 (share a link in this issue before 7 May 13:00). Link: https://tud365-my.sharepoint.com/:p:/g/personal/dimitrivanderl_tudelft_nl/ETDprba7as5PrgAoC22REFABwCcuR0M4Uw6HqLWsQt6Fng?e=GKiAXp
[x] Provide feedback to at least one Assignment 2 from another participant
[ ] Respond to the GitHub discussion #126
[ ] Respond to the GitHub discussion #127
[ ] Assignment 3: Data Flow Map 2 (share a link in this issue before 21 May 13:00). Link:
[ ] Provide feedback to at least one Assignment 3 from another participant
[ ] Assignment 4: Data Management Plan (before 29 May 13:00)
[ ] Respond to the GitHub discussion #128 if you have any questions (optional)
[ ] Assignment 5: Data Flow Map 3: submit your slide (before 30 May, 17:00)

Nice DFM and overview. I am a bit doubtful on whether a master copy should be on personal laptop.

Thank you for your feedback. Yes, that was a matter of concern for me as well. however, I am doubtfull where I could store my master data copy while still using onedrive. (you got any ideas?) The data will always be on onedrive and/or the U:drive, so there will alsways be a backup available.

It's a good data flow map. I am curious whether your onedrive is based on TU Delft account or not? Are your csv files containing experimental data always edited on onedrive?

Nice overview :). How do you back-up your OneDrive? Do you do this manually every week?

Good assignment 3, I think you have thought about most of the aspects of FAIR principle. Do you consider using version tools like Git for your data mangement?

Thanks for sharing assignment 3 @demiteach! Looks very clear - so I have very little feedback from my side!

If you want to try out Jupyter notebooks, these lesson materials might be of interest: https://coderefinery.github.io/jupyter/. Previous participants were also enthusiastic about Sphinx for documentation: https://www.sphinx-doc.org/en/master/
Indeed, always discuss with supervisor(s) and collaborator(s) what data is shared, and where!

Thanks for sharing! Very nice and clear!


filtering entries before unpacking

I have a tar ball with windows libraries in it with case-sensitive symlinks to files to match the behaviour of a case-insensitive file system. When extracting the tar on a case insensitive file system things blow up. I'm wondering what the best way would be to filter out symlinks on case insensitive file systems while keeping them on case sensitive ones.

looks like https://github.com/alexcrichton/tar-rs/pull/178 is exactly what I'm looking for. Any chance it will be merged soon?


(FACT-1418) Replaces COM moniker call for Nano Server support

This patch fixes the lack for COM monikers support on Windows Nano Server while retaining API call compatibility.

Waiting for CLA signature by @alexpilotti
@alexpilotti - We require a Contributor License Agreement (CLA) for people who contribute to Puppet, but we have an easy click-through license with instructions, which is available at https://cla.puppet.com/
Note: if your contribution is trivial and you think it may be exempt from the CLA, please post a short reply to this comment with details. http://docs.puppet.com/community/trivial_patch_exemption.html

CLA signed tx

CLA signed by all contributors.

@Iristyle is there something we want to do with this?

Closing as ticket was closed (/cc @Magisus).

This has been superseded by #1573


[SPARK-44227][SQL] Extract SchemaUtils from StructField

What changes were proposed in this pull request?

Extract SchemaUtils from StructField so that StructField does not requires anything from Catalyst.
Why are the changes needed?

To help StructField get rid of the need to depend on Catalyst.
Does this PR introduce any user-facing change?

No
How was this patch tested?

Existing tests

@cloud-fan @hvanhovell

Merged to master for Apache Spark 3.5.0.


Fails to serve Unity/Brotli

Exporting a WebGL build from unity and then running http-server -o --cors --brotli
I see Serve Brotli Files is true, but I get an error where files like Build/world.framework.js.br are not being served with Content-Encoding: br in the response header.
Ultimately this means Unity WebGL builds are not viewable with http-server
Environment Versions

OS Type: OSX
Node version: v16.13.1
http-server version: v14.1.1

I'm having the same issue here on windows and trying to serve unity webgl files.
I tried to find a correct mimetype to put in with the option --mimetype but I have been unsuccesful so far.
But I think the way to make it work is this option to force the type on the brotli file.

yup, doesn't work for me either, says the flag is set to true but does not actually serve the files with 'Content-Encoding', 'br'


Project does not build with CoRN from opam

Having -R corn CoRN in the _CoqProject is incorrect; it makes coqdep tell make about .vo targets inside the corn/ directory, even though coq_makefile tells make nothing about such targets.  The suggested thing to do is to, e.g., move corn to dependencies/CoRN (note the capitalization change), and then set COQPATH="$(pwd)/dependencies".  If you want me to make a PR with this change (and an appropriate .dir-locals.el), let me know.

Closed by #8 and #9


enhance the UI of a chat page.

improved the chat page.
previous chat page:

new chat page:

please add hactoberfest tag too.

Excellent work! Looks awesome & very inline to our main theme. Thank you for contributing! Merging🚀


Update accessor info only after network subsystem ready

Using current code DIALServer is not working during the device boot up time. During the analysis found during the boot up it always endup with the error no interface ready: here. Hence the Accessor URL for the  plugin services are empty and DIALServer is creating wrong commands.
With this changes, update the accessor info once the network event is ready, so that means at least one interface is ready.

Yea these changes added to do the update accessor once network event fired


Allow only READONLY_USERNAME and READONLY_PASSWORD to be set for auth

This is useful for registries that are supposed to be just mirrors of upstream registries (using REGISTRIES_JSON).

uhm I found the new test case not effective. I mean, it still passes without the src/authentication-method.ts change. Any idea?

Oh yeah. Good catch.
https://github.com/jingyuanliang/serverless-registry/blob/ea743e310b5c4a7f87b5da6956567b5f1590434d/test/index.test.ts#L117-L135
Probably take inspiration of this test. I think the manifest test doesn't take the auth path as it uses the client directly!

Regardless of auth, I wanted to test that it starts without error at least...


Lashup sometime fails to converge

JIRA: https://jira.mesosphere.com/browse/DCOS_OSS-4328

Codecov Report

Merging #50 into master will decrease coverage by 1.19%.
The diff coverage is 81.25%.

@@           Coverage Diff            @@
##           master     #50     +/-   ##
========================================
- Coverage    81.5%   80.3%   -1.2%
========================================
  Files          30      30
  Lines        1719    1716      -3
========================================
- Hits         1401    1378     -23
- Misses        318     338     +20

Impacted Files
Coverage Δ

src/lashup_gm_probe.erl
82.97% <100%> (+1.58%)
:arrow_up:

src/lashup_config.erl
88.88% <66.66%> (-3.12%)
:arrow_down:

src/lashup_hyparview_membership.erl
80.61% <75%> (-4.27%)
:arrow_down:

src/lashup_hyparview_ping_handler.erl
78.26% <0%> (-7.25%)
:arrow_down:

src/lashup_kv.erl
79.71% <0%> (+0.94%)
:arrow_up:

src/lashup_kv_aae_mgr.erl
83.33% <0%> (+2.38%)
:arrow_up:

src/lashup_gm_fanout.erl
89.65% <0%> (+3.44%)
:arrow_up:

Continue to review full report at Codecov.

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


keyboard_input : Res<Input> - not working after import of bevy_mod_picking

It seems that there is a conflict between the Input type from Bevy's input module and the Input type from the bevy_mod_picking crate. The bevy_mod_picking crate defines its own Input type as part of the PickSet enum, which is causing the confusion.
bevy = { version = "0.13.1", features = ["dynamic_linking"] }
bevy_mod_picking = "0.18.2"
Solution: In bevy 0.13 it is Res<ButtonInput<KeyCode>> now :-)

Bevy migration guide 0.12 to 0.13 gave the solution.


When i pass my receiver ID, it is applied to joinpolicy

Hi, first of all thanks for this package, its easy to setup.
I have created my own SMR and have my own receiver ID i want to use. When i pass this ID, it is applied to the joinpolicy variable in stead of the receiver variable.
Here my code:
this.castDevice = new Castjs('*********');
When i output the this.castDevice in the console, i get this:
castDevice: {
  availabe: true,
  controller: Object,
  description: null,
  duration: 0,
  durationPretty: "00:00:00",
  events: Object,
  joinpolicy: "*********",
  muted: false,
  paused: false,
  player: Object,
  poster: null,
  progress: 0,
  receiver: "CC1AD845",
  session: null,
  source: null,
  state: "disconnected",
  subtitles: Array[0],
  time: 0,
  timePretty: "00:00:00",
  title: null,
  volumeLevel: 1
}

Any update on this?

@GertTimmerman I'm so sorry, but I'm so busy atm. I can accept any PR request if you could fix it.

I have created a PR that will fix this issue


Source formatting

cc/ @chermidap

Wrong branch: https://github.com/nhpatt/katangapp-android/pull/2


Missing dependencies: Cython, torchvision, PyQt5

In addition to the dependencies you mention,

installing davisinteractive raised a warning about not having Cython but did succeed, however the code in fbrs/utils/cython obviously does not run.
to run the interactive GUI required PyQt5, you may want to provide that in the list of requirements (it is not installed with davisinteractive for me).
also got an error at runtime about missing torchvision

The working setup for a conda environment I used was
conda create -n mivos
conda activate mivos
conda install -y "cudatoolkit<11.2" -c conda-forge # 11.1.1
conda install -y pytorch torchvision -c pytorch # python 3.8.8 torch 1.8.0 torchvision 0.9.0
pip install davisinteractive progressbar2 opencv-python networkx gitpython gdown Cython

With this, the model runs for me (Ubuntu 20.04). Thought I should leave a note here so you can amend the README if you agree or at least help others.
By the way, very nicely packaged, all models should follow your example of download_models.py using gdown :smiley:

Ah right...
I did not actually rebuild my environment to test the dependencies so I missed a few...
Thanks for the note! I will update the README in a bit.

Fixed. Thanks again!


Missing files after command run

Description:
Running
michal@DESKTOP-SKG77NC:~/projects/flotiq-nextjs-blog-1$ npx flotiq-codegen-ts generate --compiled-js
? FLOTIQ_API_KEY found in env file.
  Do you want to use API key from .env? Yes
Downloading OpenAPI schema...
Generating client from schema...
Compiling to javascript...
An error occurred: Error: Command failed: tsc -p ./flotiqApi
    at checkExecSyncError (node:child_process:890:11)
    at execSync (node:child_process:962:15)
    at buildToJs (/home/michal/.npm/_npx/1531fb1c99eef8a5/node_modules/flotiq-codegen-ts/build_to_js.js:6:5)
    at main (/home/michal/.npm/_npx/1531fb1c99eef8a5/node_modules/flotiq-codegen-ts/index.js:121:9)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {

Causes tsc error.
After debugging - there was no files in output directory before tsc command.
Changes:

Add more output to compile fn
Output files to cwd path, not localpath
Cleanup command, add additional output
Use tmp dir

Refs #24775 #24776

Changed formatting:
Before:

After:


Add extra warning if workflow is used

@bleathem can you check ?

@bleathem I updated (and rebased with master) , let me know if it was what you had in mind.


Reconfigure error pages to be generic for all nginx sites, add 400 page

This goes with https://github.com/dimagi/commcare-hq-errorpages/pull/5
After both PR's are merged we will need to run deploy_proxy on:

[ ] staging
[ ] prod
[ ] india

@emord @dannyroberts

Both these PRs look good to me. I'll let you take care of merging @TylerSheffels in case there's some coordination with deploying to the machines


Grids superposition with buttons on resizing

When tcg changes its orientation, components overlaps. e.g, two tcg overlaps its grids and buttons after changing orientation, with auto resizing set to true.

Hello. I was not able to reproduce this issue.
    TwinColGrid<Integer> tcg1 = new TwinColGrid<>();
    TwinColGrid<Integer> tcg2 = new TwinColGrid<>();

    tcg1.setCaption("Caption");
    tcg1.setItems(IntStream.range(1, 20).boxed().toList());
    tcg1.getAvailableGrid().addColumn(x -> x).setHeader("Header");
    tcg1.getAvailableGrid().addColumn(x -> x).setHeader("Header");
    tcg1.setAutoResize(true);
    tcg1.setWidthFull();

    tcg2.setCaption("Caption");
    tcg2.setItems(IntStream.range(1, 20).boxed().toList());
    tcg2.getAvailableGrid().addColumn(x -> x).setHeader("Header");
    tcg2.getAvailableGrid().addColumn(x -> x).setHeader("Header");
    tcg2.setAutoResize(true);
    tcg2.setWidthFull();
    SplitLayout split = new SplitLayout(new VerticalLayout(tcg1, tcg2), new Span());
    split.setSizeFull();
    add(split);

The problem was not a TwinColGridAddon issue, it was related to the tcg container Component and I was able to fix it.


[tests-only] Bump commit id for API tests

The way the skeleton files happen in core acceptance tests got a refactoring. So bump the commit id here to use that. And it passes, which is a bonus!

Bumped again to include some changes to the core acceptance tests run.sh script.

@ishank011 @labkode ready for review.

CI failed after the last commit. I am not sure how this got merged. I will make another PR to fix it.


blur[12]

Demo: https://observablehq.com/d/a0492676582ff10a
In this PR:

Separate interfaces for one- and two-dimensional blurring
Implement fractional rolling window size for better fractional radius
Implement arbitrary step (stride) rolling window (e.g., for blurring RGBA ImageData)
Inline three-pass blur instead of for loop
Blur in-place instead of copying (and dealing with iterables etc.)
Create only a single copy of the input array
Positional arguments instead of D3-style method chaining
Stricter validation of options (and use Math.floor instead of Math.round per language idiom)
Use Math.* directly instead of importing extracted symbols

I haven’t actually implemented RGBA ImageData blurring yet, but it should be possible to use the blurf function here to do that. (I’d love a contribution to this PR!)

How does this compare to https://github.com/d3/d3-array/pull/151?

How does this compare to https://github.com/d3/d3-array/pull/151?

The API is different:

you don't have setters and getters but just a direct function call.
The array is blurred in-place and returned, so you have to be careful and do B = blur1(A.slice(), 3)
There are two signatures blur1 and blur2, depending on whether you want 1-d or 2-d blurring.

In terms of performance the difference is impressive: Mike's new implementation is 6 to 8 times faster than mine in 1-d [tests]; similar results on macos Chrome, Firefox and Safari.
I'm surprised both by the huge performance boost in 1-d and the fact that it doesn't result in hugely better performance in 2-d (“only” 30% faster—which is already a big win). Maybe what's slowest is the number of copies?
I think I'd want blur1 to be renamed blur, with a default r = 5, so I can write blur(A).

#254 adds the stride.

I think I’ve got it working with a circular buffer of size 2 * radius + 1, eliminating the need to copy the entire input values array. That should make the performance even better. I’ll push more changes later today.

How does this compare to https://github.com/d3/d3-array/pull/151?

I think this is pretty well covered in the top description? If you have more constructive questions, please ask.

My aim with the question was to illuminate how this implementation compares and contrasts with the other. The top description describes this implementation only, without any comparisons or references to the other, so at first glance it was not clear what advantages this implementation has over the other. Thank you @Fil for thoroughly addressing my query - that's exactly the kind of information I was looking for. Thank you both for your amazing work!

The top description describes this implementation only, without any comparisons or references to the other

I strongly disagree; the description enumerates the changes in this PR versus the other branch.

Ooooohhhh! Sorry, I didn't realize that. My mistake. Thank you for clarifying.

Here's a benchmark https://github.com/d3/blur-benchmark
Overall the circular buffer is quite faster on larger arrays, but a bit slower on medium-sized arrays.

I’m seeing that the circular buffer is quite slower than the copy in Chrome, so given the added complexity of this approach I’m going to unwind the latest commit and stick with the original approach.
I still want to think about strides and RGBA blurring but otherwise this PR is ready for review.

I wrote an adapter to make the blur functions work for RGBA image data:
function blurfImage(radius) {
  const blur = blurf(radius);
  return (T, S, start, stop, step) => {
    start <<= 2, stop <<= 2, step <<= 2;
    blur(T, S, start + 0, stop + 0, step);
    blur(T, S, start + 1, stop + 1, step);
    blur(T, S, start + 2, stop + 2, step);
    blur(T, S, start + 3, stop + 3, step);
  };
}

Otherwise the algorithm is the same. Hooray!

I’m quite happy with how this turned out. I hope you like it, @Fil! 😅

I'd like to rename blur1 to blur, have r default to 5, and make height optional since it's redundant information.

Hmm. I’m okay with the rename.
I don’t see a lot of value in having a default for r; when would you want to blur with a default radius, and why is 5 the right default? The CSS blur doesn’t have a default. https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/blur
Making height redundant seems okay, although there’s something to be said for being explicit.

Also, it seems this version doesn't support iterables… is it something we might want to add back (with arrayify?).

No; you can’t modify an iterable in-place as you need to be able to assign indexed values, not just iterate over them. If you have an iterable, you’d need to convert it into an array first yourself.

when would you want to blur with a default radius

When I compute the laplacian of a slow moving value (no high frequency), the radius is just a scaling factor. Not a big issue.


Roll Flutter Engine from 820645dbcc69 to c43b268576f4 (4 revisions)

https://github.com/flutter/engine/compare/820645dbcc69...c43b268576f4
2024-01-09<EMAIL_ADDRESS>Roll Skia from 360944e3175f to 665f7d51ef25 (2 revisions) (flutter/engine#49628)
2024-01-09<EMAIL_ADDRESS>Roll Skia from 92b84715ba73 to 360944e3175f (2 revisions) (flutter/engine#49622)
2024-01-09<EMAIL_ADDRESS>Roll Skia from 06404ed554e7 to 92b84715ba73 (1 revision) (flutter/engine#49620)
2024-01-09<EMAIL_ADDRESS>Roll Dart SDK from e8aa66f435ae to 721fccffc708 (5 revisions) (flutter/engine#49616)
If this roll has caused a breakage, revert this CL and stop the roller
using the controls here:
https://autoroll.skia.org/r/flutter-engine-flutter-autoroll
Please CC bdero@google.com,rmistry<EMAIL_ADDRESS>on the revert to ensure that a human
is aware of the problem.
To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose
To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622
Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md

Commit queue failed; closing this roll.


feature-key-file and partition-tree-sprigs issue

Noting a couple of bugs I found in the schema. PR at https://github.com/aerospike/schemas/pull/1

List feature-key-file as required when it is optional for enterprise (has a default) and is not required for CE.
The max value for partitiom-tree-sprigs has been 268453456 since server 4.2.

I can work on adding fixes to the schema generator when I have time, will use the PR branch for asconfig for now.

@sud82 @arrowplum pinging you guys as requested by Joe. I'm planning to try and fix these in the schema generation but it might be a while before I get to it. Note there are some other issues listed at https://github.com/aerospike/schemas/issues/2

merged


How can I registry w/o a password?

I created a Core 2.0 app with the template using Identity and hooked in LdapAuthentication.  It works great, but registration requires a password, otherwise I get an error saying it's too short.  I'm just coming up to speed on ASP.NET Core 2 and figure they're some trick.
In the Register.cshtml.cs I changed UserManager to LdapUserManager and in LdapUserManager I tried overriding SupportsUserPassword to return false always.
Any help is appreciated.

You have to modify the registration experience in some way to accomplish this. Presumably you don't want the app to create a new AD user, so if that's the case, you might want to validate their AD password as part of the registration process, or possibly eliminate the registration process altogether. This project doesn't implement a full LDAP user store which would be required to accomplish the later.

Thanks.  I found to prevent Identity from validating the password, I created a NoPasswordHasher and then in the controller's constructor that gets an injected LdapUserManager I set the hasher and clear validators.  If you're interested I can update the readme to give directions on modifying the code from the template to use your package.
	_ldapUserManager.PasswordHasher = new NoPasswordHasher<ApplicationUser>();
	_ldapUserManager.PasswordValidators.Clear();

@JimWatV1 sorry I was out of the loop for a bit. If you want to suggest some readme changes go ahead.


chore: added missing PagePdfOptions.Margin struct .

We unfortunately generate them, so it would be overridden, but we are in the process of updating everything accordingly. Also I've created #150 to verify that it works once we are at that point and don't forget it.


AMD compatibilty

Please consider making your script AMD friendly.
https://github.com/umdjs/umd
Thank you!

We believe this is fixed in 2.0.0.  Please retest against 2.0.0 release and open a new issue following Issue Reporting guidelines in 2.0.0 if you believe this is still an issue.


[Feature] Does OpenSearch support complex deep-learning model?

In the document ML commons shows how to upload a model and host this model by OpenSearch. It just gives a use case of SBERT written by  TorchScript. When using this model for prediction, it gives an example:

POST /_plugins/_ml/_predict/text_embedding/WWQI44MBbzI2oUKAvNUt
{
  "text_docs":["today is sunny"],
  "return_number": true,
  "target_response": ["sentence_embedding"]
}

In this case, seems OpenSearch just supports text embedding, and the model input needs to use the text_docs key to input data. The text_docs key seems just to support a list of strings, and can't handle complex data structures such as JSON objects. But nowadays modern AI models always need complex data structures, eg. custom JSON objects for GNN model input, and a 2-dimension/3-dimension array for CV model input...
Can OpenSearch handle these cases described before?

If OpenSearch really can handle these cases, could you please give me some examples? I feel really confused about this feature.


AS special case stacked area plot with gap

Only one special case is chosen for each report, the reports that are not "meh" are proportionally plotted as empty gap.
The plot looks like this:

Sorting first by total special case portion seems to fragment the plot.
Data: as_stats3.csv

Sort last by special case portion:

Related: #75. Commit: https://github.com/SichangHe/internet_route_verification_meta/commit/7cc33f24cdff60905096be4e7c2eb521b3ec27a8

Sort last by special case portion, and ignore ASes without special cases:

I prefer this one over the previous one. Seems easier to read. The graph itself seems interesting enough to discuss and draw insights from.

Latest plots.

AS-special-case-percentages-stacked-area-squared.pdf
AS-special-case-percentages-stacked-area.pdf

All RIBs.


update dialog not showing.

new AppUpdater(this) 	.showEvery(5)
Following the above code i have created a method where i pass duration in int value but i was unable to start the update dialog if i pass duration which is larger than 0.If i pass 0 then update dialog shows up.
I am adding my code below,
public void getUpdate(int duration, boolean shouldRepeat) {
        new appUpdater.setUpdateFrom(UpdateFrom.GOOGLE_PLAY)
                .setDisplay(Display.DIALOG)
                .setButtonDoNotShowAgain("") // will get rid of DoNotShowAgain
                .setButtonDismiss(R.string.no_thanks)
                .showAppUpdated(true);
        if (duration != 0) {
            appUpdater.showEvery(duration); //Fire in that given duration
        }
        appUpdater.start();
    }

Try Changing "if (duration != 0)" to "if (duration > 0)"

Ok.I will try.

It worked.Thanks


CASMCMS-8301: Update craycli to 0.68.0 for new BOS fields

Summary and Scope
Updates the craycli to include the BOS clear-state option.  Also pulls in some linting changes.
Issues and Related PR

Resolves CASMCMS-8301

Testing
See craycli PRs for testing info
Risks and Mitigations
None
Pull Request Checklist

[X] Version number(s) incremented, if applicable
[X] Copyrights updated
[X] License file intact
[X] Target branch correct
[X] CHANGELOG.md updated
[X] Testing is appropriate and complete, if applicable
[X] HPC Product Announcement prepared, if applicable

Closing because we are pulling 0.70.0 into main.


Fix api key being hidden incorrectly

This PR fixes api key being hidden incorrectly and instead of last 4 chars it's considering the whole string but the first 4. I also replaced "..." with "", what do you think?
<hidden>bb3c

Last change incorrectly modified the way api key was hidden. The intention was to safely show the last 4 digits only when the lenght of the api key is greater than 4. This PR fixes it and instead skipping the first 4 it'll show the last 4.

Using ... is shorter than <hidden>, but I really don't have a preference between the two. The IDE extensions all use XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX so the log would look like XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXX1234. That's ok for IDE logs because they usually get cleared when the IDE restarts, but for ~/.wakatime.log that would be too long and make logs harder to read.


Apollo federation reference for typename

On apollo federation, is possible to return a typename to delegate the resolve method of a field to another subgraph.
For example, on customers graph, it's possible to resolve the field "order" by delegating the typename to subgraph, in this case the order graph:
 return { __typename: "Order", customerId: customer._id };
In the example below, customer can resolve this orders by delegating the ref to the graph that resolves the typename "Orders", than this graph can provide fields to another type by referencing it's typename.
const customerResolvers = {
  Customer: {
    __resolveReference(object) {
      //customer can resolve itself
      return customers.find((customer) => customer._id === object._id);
    },
    Orders(customer) {
      //customer delegates the resolution of orders to another graph
      return { __typename: "Order", customerId: customer._id };
    }
  }
};
const orderResolvers = {
  Order: {
    __resolveReference(object) {
      //order can resolve itself
      return orders.find((order) => order.customerId === object.customerId);
    }
  }
};

In this case, both types are in the sabe subgraph, they are not external refs. Currently apollo schema first SDL supports this kinds of operation.
The question is, how can we do it using pothos? Documentation doesn't provide an example of this use case.

I have the same issue!

Can you share what the SDL version of this looks like?  I can't really understand what this is supposed to look like with just the resolvers.

We can use this example to propagate the __typename of the graph entity and delegate it to be resolved by some of the graphs:
https://gist.github.com/Oxyaction/bbe9f4915d00e98344574a12e22ac9ee#file-index-ts
There is also a blog post about this:
https://medium.com/@oxyaction/apollo-federation-v2-by-example-72bba5bd5cdb

In the blog post example, Product is just defined as an entity in both SubGraphs.  They don't explain it that way, but federation v2 allows entities to be defined in multiple sub-graphs, so long as their keys are compatible.  An entity is just an object type with a key directive.  I don't think the article is correct that your resolver needs to a return a __typename field unless your field is an interface/union.   What actually happens there is that the gateway will resolve the id + __typename fields in it's query to you service.
Eg it might query reviews with:
query {
  reviews { id, product { __typename, id } }
}

Then it can get more details through the entities query
query {
  entities(keys: [{ __typename: "Product", id: 123 }]) {
      ...on Product {
      id
      __typename
      name
      price
    }
}

Basically, you would define Product in the reviews schema like:
const Product = builder.objectRef<{ id: string }>(Product').implement({
  fields: (t) => ({
    id: t.exposeID('id'),
    reviews: t.field({
      type: [Review],
      resolve: (product) => find reviews(product.id)
  }),
});

builder.asEntity(Product, {
  key: builder.selection<{ id: string }>('id'),
  resolveReference: (product) => product
});

Can you elaborate please what this find function should come from since reviews is declared in another subgraph?
resolve: (product) => find reviews(product.id)

I tried to apply the example from the federation plugin tests (link).
What I can see is that pothos complains about having duplicate types, even if I define the external ref on the it's typings.

The fact is that I have Reviews and Product on the same subgraph, but for separation of concerns purposes, I wouldn't like to import reviews module services inside product modules services, instead, I wish to resolve it but just propagating the typename or some similar solution. (which is possible using the __typename strategy).
So I am missing something here?

Can you please elaborate what this find function should come from since reviews is declared in another subgraph? resolve: (product) => find reviews(product.id)

This was showing what would be implemented in the Reviews SubGraph.   The products sub graph wouldn't have the reviews field defined

The fact is that I have Reviews and Product on the same subgraph, but for separation of concerns purposes, I wouldn't like to import reviews module services inside product modules services, instead, I wish to resolve it but just propagating the typename or some similar solution. (which is possible using the __typename strategy).

This doesn't make sense to me, if you aren't implementing these in different sub graphs, this wouldn't be related to federation at all.   Are you just trying to define the resolvers on separate files?  That's pretty straight forward if so, but I suspect I don't understand what your trying to do.  What does "modules services" mean?
Fundamentally pothos is just providing a type-safe way to define the directives and resolveReference methods.   It doesn't change or implement the federation logic itself.  Anything that works in SDL based federation works exactly the same in Pothos, the only difference is where you define the resolvers and directives.  The execution all uses the exact same code under the hood

heres a working implementation of whats described in the article you linked: https://github.com/hayes/pothos/compare/mh--federation-product-review-example?expand=1

Closing this since I haven't heard back.  Hope you got this figured out, but feel free to re-open if not


Fix typo, explicitely -> explicitly

:partying_face: :partying_face: :partying_face: :partying_face: :partying_face:


Always attach URL to network errors

Due to the enduring problems with #8144 and related issues, I've opted for a more systemic approach and switched all reqwest errors to not use the implicit-try-fallthrough #[from], but an explicit #[source] with a URL attached (except for when there is only one or no URL). This guarantees that we get the URL that failed, and helps identifying the responsible code path.

It's a bit of a bummer that in all the snapshot changes here we just end up repeating the URL.

I'd prefer it if reqwest would always include the URL or otherwise have a switch to turn the optional URL off from duplication in error display, but lacking that it's better to repeat the URL than to end up with errors like https://github.com/astral-sh/uv/issues/8144#issuecomment-2426912260 that we can't trace anymore.

For just the reqwest error messages and given the opaque reqwest error type, it doesn't make sense to optimize this too much, so we accept the slight regression in the error trace for being able to fix bugs like #8144 and ensuring that we show the user the error URL.


Trailing slash discrepancy with micromatch

Please describe the minimum necessary steps to reproduce this issue:
const micromatch = require('micromatch'); // version must be >= 4.0.1
console.log(micromatch(['/test/t/'], ['**/t/']));
// [ '/test/t/' ]
console.log(micromatch(['/test/t/'], ['**/t']));
// []

const nm = require('nanomatch');
console.log(nm(['/test/t/'], ['**/t/']));
// [ '/test/t/' ]
console.log(nm(['/test/t/'], ['**/t']));
// [ '/test/t/' ]

What is happening:
micromatch takes into account the trailing slash and do an exact match
nanomatch doesn't take it into account and match even without trailing slash in the pattern
What should be happening instead?
Both libraries should be aligned on this behaviour. From this previous issue on micromatch about trailing slashes, I believe we will want the fix to be done here in nanomatch.
Additional info
As micromatch switched from nanomatch to picomatch in v4.x (during this refactor), micromatch's behaviour has actually changed between v3.1.10 and v4.0.1. It was previously behaving like nanomatch.
Again, after reading the discussion about the trailing slashes linked above, I believe we want to keep its new behaviour, so an additional unit test could be added in micromatch to be sure to stay consistent in the future.

Both libraries should be aligned on this behaviour

Why?

Oh, I assumed that because in the description it states to be "Similar to micromatch", and because they have been aligned until last week (as micromatch was depending on it, I imagine).
Also it's a matter of having consistent behaviours inside the lib itself actually. If I take an example similar to the one from the linked discussion, I get this behaviour:
const nm = require('nanomatch');
console.log(nm(['t/'], ['t/']));
// [ 't/' ]
console.log(nm(['t/'], ['t']));
// []


[BUG]Using the Azure sdk for java to store images in blobs and then download them will produce gray bars.

Using the Azure sdk for java to store images in blobs and then download them will produce gray bars.

Hi @ArtistLL123 ,
could you share some code or tell us how to reproduce it? Thanks.

import com.azure.storage.blob.BlobServiceClientBuilder;
import com.azure.storage.blob.sas.BlobSasPermission;
import com.azure.storage.blob.sas.BlobServiceSasSignatureValues;
import com.azure.storage.common.StorageSharedKeyCredential;
import java.time.OffsetDateTime;
import java.util.UUID;
public class AzureStorageBlobClient {
public static void main(String[] args) {
StorageSharedKeyCredential credential = new StorageSharedKeyCredential("blobtestlmc", "2uJmR5GfK7xzYIif/a6K/EaZwmFeAveUF0RoImmXG/Pspe68Gpgh8T8/rnzQ/NeZqFOb1zrCL0ev+AStHpORlQ==");
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder().endpoint("https://blobtestlmc.blob.core.chinacloudapi.cn/").credential(credential).buildClient();
BlobContainerClient blobContainerClient = blobServiceClient.getBlobContainerClient("blob");
    for (int i = 0; i < 10; i++) {
        String uuid = UUID.randomUUID().toString();
        String response = blobContainerClient.getBlobClient("imagetwo/" + uuid + ".jpeg").copyFromUrl("https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epZASYWskSmkdyld8bQpsq3OVM3ibuXcx5USB757e3LYNWy75ibgj2lRm5zlAoAqy5GBl8DNibWr6yBw/132");
        System.out.println(uuid + "已生成: " + response);
    }
}

}

Hi @fangjian0423
Thanks for your support!
I follow @ArtistLL123 's sample code to reproduce, actually for @ArtistLL123 , he/she upload same pic to blob for ten times, but you can see the 10 pics do not have same file size, please help check:

And I also try to use Azure portal to upload same pic for ten times, but can not reproduce this issue, so I think this issue is from SDK side.

@ibrahimrabab could you look at this?

@ArtistLL123  could you please rotate the storage access key - it seems you accidentally exposed it in the sample.

@lmolkova Thank you for reminding me, I have rotated the storage access key.

Hi @ArtistLL123 and @zhangyunbo1994
I tried reproducing the issue using your provided code snippet and source URL and was able to see inconsistent sizes in blobs like you mentioned.
I then tried to reproduce your code snippet using a different static image URL, and saw the same image size being uploaded (as expected):

I ran the following powershell script on your copy source URL to see if your image's length was changing or not:
$url = '[https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epZASYWskSmkdyld8bQpsq3OVM3ibuXcx5USB757e3LYNWy75ibgj2lRm5zlAoAqy5GBl8DNibWr6yBw/132'](https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epZASYWskSmkdyld8bQpsq3OVM3ibuXcx5USB757e3LYNWy75ibgj2lRm5zlAoAqy5GBl8DNibWr6yBw/132%27) for ($i = 0; $i -lt 10; $i++) {    $res = wget $url    Write-Host $res.RawContentLength }
result:
4019
4020
4020
4019
4020
4019
4018
4019
4018
4020
This shows the image data at your source URL seems to be changing. Can you confirm whether the image data is static or dynamic? Or if there is another process causing it to be altered while uploading?
Can you also provide the SDK version you're using, as well as request IDs so that we can further investigate on the service side to see if there are any issues with your uploads?
Thanks!

Hi @ibrahimrabab thanks for your support!
Here is SDK version we are using:
        <dependency>
            <groupId>com.azure</groupId>
            <artifactId>azure-storage-blob</artifactId>
            <version>12.20.1</version>
        </dependency>

        <dependency>
            <groupId>com.azure</groupId>
            <artifactId>azure-sdk-bom</artifactId>
            <version>1.2.8</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

We have some findings:

We found jpeg can open by VS code Hex editor, so if we download this image by using curl :  'image'](https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83epZASYWskSmkdyld8bQpsq3OVM3ibuXcx5USB757e3LYNWy75ibgj2lRm5zlAoAqy5GBl8DNibWr6yBw/132') , you can see that no matter how you download it, use the Hex editor to view the pictures, the pictures end with FF D9（FF D9 is an end identifier for jpeg files）.

But if you using copyFromUrl method to copy image to Blob, when you finish copying and uploading the pictures, and then download the uploaded pictures from the blob, you will find that some pictures will be missing FF D9.

I found what seemed to be an anomalous problem by scraping network packets. As shown in the screenshot below, it seems that the SDK sent a request, then encountered a 500 exception, and then uploaded successfully after a retry, but the uploaded JPEG file encountered a problem with FF D9. Then I experimented a few times, and the 500 error will be accompanied by the loss of FF D9.

You can get request ID in following screenshot:
x-ms-client-request-id: 4d9b136d-7992-45ff-81e7-dcf135a815f4

x-ms-request-id: 30bdf5c0-901e-0068-6d7f-251b52000000
x-ms-client-request-id: 4d9b136d-7992-45ff-81e7-dcf135a815f4

x-ms-client-request-id: 4d9b136d-7992-45ff-81e7-dcf135a815f4

Are we using error SDK method? Because I saw another API: https://learn.microsoft.com/en-us/rest/api/storageservices/put-block-list
Should we call Put Blob List again to commit our transaction？ 🤔

@zhangyunbo1994
Thank you for providing all the details! Based on the network requests you've posted, this definitely looks like an issue on the server side. Can you file an Azure Support Ticket? That way we can work alongside the service team to further investigate the loss of data during the upload. Let me know if you need help with this step.

Hi @ibrahimrabab
Thanks for your support, I have opened an IcM ticket for the team, do I need to post the ticket here? Thanks！

@zhangyunbo1994
Yes you may go ahead and post the ticket here so we can track it :)

Hi @ibrahimrabab here is the ticket ID: 359884397
If you have any questions, please let me know.

Closed, it was determined in the ICM that the source image was changing.


Unkown Error v1.1

after I try to log in I get this Error Message

cloudscraper.exceptions.CloudflareChallengeError: Detected a Cloudflare version 2 Captcha challenge, This feature is not available in the opensource (free) version.

#67


Allow to pass a custom sampler instance

I think it could be useful to allow to pass a custom doc instance as discussed also for the StatsD client.

is this closed?

No it isn't , I forgot to remove it from the milestone. Apologies .


disable trivia in aether legacy

Blocked, appears to be bug.
https://github.com/Gilded-Games/The-Aether-Archived/issues/122

Aether code has been archived, looks like they're not supporting this anymore.


Add Kibana-Keptn Integration Provider

This PR adds a Kibana-Keptn integration provider that allows:

Querying metrics from Kibana/Elasticsearch
Formatting metrics for Keptn
Sending metrics to Keptn

Includes:

Provider implementation
Example usage
Documentation
Requirements file

done


Integer division results in floats

123456 / 10 will result in 12345.6, which is unexpected when working with ints.
Worse, if I make an explicit function:
let div (x : int) (y : int) : int = x / y
This compiles, when it really shouldn't, since the javascript division will result in a float.

This is tricky and we already had a similar discussion in the past (#74). I know integer division is one of the most common examples but if we want to keep the full semantics for primitive values we'll have to solve also many other issues (overflows for byte and short, compile char as a number, etc...) which would force us to have a "runtime" to coerce the results of any arithmetic operation, something Fable tries to avoid by design.
In the docs is stated that all numeric primitives compile to JS Number so the programmer should be aware of these potential issues when compiling to JS.
How important is this for your app? We could open a discussion to ask users if they want to a type checker wrapping all divisions. In the last case, a plugin can be created for the specific needs of a user, as it was done with the byte arithmetics.

Thanks for the info, and I can see the difficulty you're having.
I'm not sure what the answer should be. But I think at the very least, the compiler should catch the sample I had above and give me some way of knowing that the type expectations I have won't be realized.
Just brainstorming, but since it seems that you're not really implementing CLR number types, would it make sense to simply introduce a Number type and encourage people to use that rather than ints and floats?
Sorry if this is all ridiculously naive. I'm relatively new to F#, and very new to Fable. But I love it so far!

I see your point, @jsayres, and I already had the exactly same thoughts when I was starting with Fable (I'm the original poster of #74, BTW :) )
However, as we discussed in #74, the overhead to make this change would be immense. And it would benefit only some very specific use cases, to the detriment of general usage.
To put it simply: It's just not the Fable objective to keep the full F# semantics when generating the JS code. I understand it could be a surprise for new users (which didn't read the docs :wink: ), but a compiler warning in this case would be a no-go, since this is the expected behavior.
In my particular scenario, I solved the problem (to keep byte arithmetic working) with a plugin. This way, I can get my (very peculiar) code working without annoying other Fable users ;)
What do you think? Would this work for you? If you need some help please make a Gist with some expected use cases from your code and I will be glad to help you.

Thanks for the feedback, @fdcastel. I'm going to push back a bit, but I sincerely appreciate it. :)
I actually did read the docs, but the behavior was still surprising to me. To be clear, I'm not suggesting that Fable actually implement all the CLR F# int semantics in the compiled javascript. Rather, I would simply expect the compiler to let me know what's supported and what's not. You stated that a even a compiler warning in the example I provided would be a no-go. Can you explain why? If the division does not in fact return an int, aren't my type expectations wrong in that case? If the compiler lets that through, doesn't it introduce a very subtle bug in my program?
Consider how purescript handles this same situation: https://github.com/purescript/purescript/wiki/Differences-from-Haskell (See the Numbers section.) It uses Int where it makes sense and supports it to a reasonable degree, but then it uses a Number type otherwise to match javascript expectations. If the goal of Fable is to be a "javascript F#", and not a "CLR F#-to-javascript", wouldn't that make sense?
As I mentioned in my previous comment, maybe this viewpoint is uninformed and naive, which is entirely possible! Nevertheless, I just can't see how allowing let div (x : int) (y : int) : int = x / y  to compile is a good idea, and I think it will ultimately inhibit adoption by front-end devs looking for a type-safe functional language to replace the "everything goes" javascript they're currently stuck with.

Thanks for the insightful discussion. I just introduced the warning system recently (though it doesn't emit any warning quite yet) so a warning could be a good compromise for this case. I think @fdcastel didn't know that yet, that's why the said it'd be a no-go :)
PureScript is a great example to show the frictions in the difficult balance Fable tries to keep: it doesn't want to create a new language (like PureScript, Dart, Elm, TypeScript...) but at the same time it wants to be as close as possible to JS. I think the best selling point of F# is the compiler and editor tools and trying to force a non-CLR numeric type, while possible, will make programming much less pleasant (e.g., the F# compiler automatically infers let f x y = x + y to be of type int and this cannot be easily prevented).
So, if you agree, I'll just add a compiler warning when you try to divide integer types. However, I don't know if it's because it's still early in the morning but right now I'm thinking that wrapping integer divisions with Math.floor may not be a bad idea after all :) So if you want to push for the wrapping, this is your opportunity... until it becomes late in the evening, I get tired and I start rejecting changes again ;)

Sorry for the delayed reply.
Your explanation makes things clearer, thanks! I can see how working with type inference makes things problematic.
A warning might be enough for now, as long as you don't think it would be a major annoyance to existing users. Same with actually truncating the result for an integer division. It would work great for me, since that would be what I would expect, but I don't want to cause issues for others. You would understand the ramifications of such a change far better than me.
Again, thanks to you and @fdcastel for helping me understand the issue better. Whatever you decide to do in the end, I should be able to work with it.

I just woke up and I recently found out about the ~~ trick to floor JS numbers so at the end I'm wrapping all integer divisions 😸  Please update to v0.3.14 to get change.
Thanks a lot for pointing this out and being so understanding with my (sometimes seemingly capricious) changes of opinion!


fix(SequenceFormula): Allow formulas whose parse tree has only one node

Resolves #65.

Looks good!


[BEAM-3357] Add generated pb2 files to mvn clean.

R: @aaltay

LGTM. (This looks unrelated to the issue in mentioned in the title.)

If you tried to build in a repo affected by the issue and it generated pb2 files, then you'd still get an error until you forced their regeneration.

Is the Java failure related to this change?

jenkins: retest this please

I am 95% sure that these Java failures are unrelated.
%5 unsure because I haven't seen these Java failures before.

LGTM. I will merge. (For the 5% please pay attention to mailing list, in case this merge causes for failures for others.)


Suggestion: Add headless-chromium topic to the project description for better discoverability

Are you requesting a feature or reporting a bug?
A minor change in Project description (feature request ?)
What is the current behavior?
The project is hard to find on Github search.
What is the expected behavior?
I can find the project by clicking on #headless-chromium topic on Github description.
example:
https://github.com/search?q=topic%3Aheadless-chromium&type=Repositories
Provide the test code and the tested page URL (if applicable)
Test page URL: https://github.com/search?q=topic%3Aheadless-chromium&type=Repositories
Specify your

operating system: any
testcafe version: any
node.js version: any

Thanks for the idea. We've investigated it and it seems the headless-chromium topic is too specific (I found only 5 repos with it). We've decided to don't add it.


Add New West Schools

@kokofixcomputers Thank you for your patience while waiting for a review and processing your request. Pull request merged. Please start applying for JetBrains educational subscription at https://www.jetbrains.com/shop/eform/students in an hour, to allow the changes to propagate through JetBrains systems.


[Javascript] Tech Quiz not working.

User can't enter tap the answer and enter it for the "Tech Quiz". I think this means that there is a issue with the JS?
Please debug and fix at the earliest.
@TechStudent10 can you have a look?

I recommend looking at the DevTools before coming to me or others.

Looks like this has come from #1

I recommend looking at the DevTools before coming to me or others.

Looks like this has come from #1

I forgot to do it this time, sorry. But actually, it isn't even showing up in my DevTools now, I use Chrome, idk why.

@TechStudent10 What is the issue though? Can you make a PR?

But actually, it isn't even showing up in my DevTools now, I use Chrome, idk why.

Lol, the quiz is working now for 1 question but stops after and then only do I get the error. Will see if I can fix it.


Supporting gcp workload identity federation?

Support gcp workload identity federation with this package ?
https://cloud.google.com/iam/docs/workload-identity-federation

I haven't tried it, but presumably we do if you explicitly pass in a credentials object and/or set the credentials in pandas_gbq.context.credentials.

tested it with python and its working with identity federation. setting GOOGLE_APPLICATION_CREDENTIALS is enough.
Client libraries for Python support identity federation if they use version 1.27.0 or later of the google-auth package.
google page
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = json_credentials_path
credentials = google.auth.default()


Training data too large to continue to store on Github

Hitting up to 2GB file sizes
Don't want to inconvenience so going to open a public DropBox

https://www.dropbox.com/sh/flivyzvg45p6b67/AAC3KMtIGvRUiw-8NfFeAyy3a?dl=0


Samle not working on firefox

The sample isn't running on Firefox, the sounds play but the screen is black.
On Chrome and Epiphany (WebKit) it works fine.
Error message in the forefox web console:
[Fatal] :  Error: The attribute named: a_screenuv size 2 not found in the shader source code:
 #version 300 es
in vec2 a_position;

in vec2 a_uv;
out vec2 v_uv;

in vec2 a_screenuv;
out vec2 v_screenuv;

uniform mat4 u_matrix;
uniform mat4 u_transform;

void main() {
  // Set the vertex position using the ortho & transform matrix
  gl_Position = u_matrix * u_transform * vec4(a_position, 0.0, 1.0);

  // Pass through the UV coord to the fragment shader
  v_uv = a_uv;
  v_screenuv = a_screenuv;
}
    initialize https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:360
    set shader https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:360
    draw https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:743
    flush https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:744
    _draw https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:841
    _mainloop https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:841
    update https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
    t https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825
 initialize@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:360:1607
set shader@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:360:1261
draw@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:743:4258
flush@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:744:4128
_draw@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:841:4849
_mainloop@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:841:6385
update@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9021
t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9376
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
FrameRequestCallback*t@https://excaliburjs.com/sample-jelly-jumper/assets/index-zEAVlOe_.js:825:9346
index-zEAVlOe_.js:309:34775

Screenshot:

@JumpLink Thanks for the issue!
Seems to work on windows FF for me, you wouldn't happen to be on a linux platform?
I've seen linux FF behave differently with shaders before with uniforms so I wouldn't be surprised ☹

I'm booting up an Ubuntu VM to poke around now

I can reproduce on Ubuntu!

Okay v0.29.3 fixes the issue! I'll push a fix to the sample soon soon

Interesting, I've never had a JavaScript error under Firefox only under Linux before. Thank you!

@JumpLink it's super wild. My theory is that shader compilation is delegated to a graphics driver in the browser in FF which is why the behavior is different.