[Meta] Release note generation & versioning

Ideally, we should have the same process for automatically generating release notes in each repository. We can use the existing process in the front end on all three repositories, or a new approach/format if preferred.
After this is standardized, we should make a release of each repository, to use with our initial deployment.
I also think we should switch the frontend back to SemVer instead of CalVer, so it uses the same versioning scheme as the other two repositories.
CC: @dhruvkb @obulat @krysal

👍  for switching to SemVer for consistency with other repos.

Closing as all relevant PRs have been merged.


[Builtins] Implement parsing of polymorphic data

#4689 and #4719 stuck together in a reviewable fashion.

Weren't we going to discuss what the syntax should actually be?

Michael: [complains about being asked to do too many reviews]
Also Michael: [reviews stuff without being asked]
:p

Comments addressed.


Support Bunny Object Storage

What would you like to be added:
https://github.com/jamesponddotco/bunnystorage-go
https://bunny.net/storage/
Happy to provide a test Endpoint if needed.

I woud be interested in working on it. You can track my progress whipping up a POC in my fork: https://github.com/l0wl3vel/juicefs

I would call the code good enough for now and it works for me. I would really appreciate if you could test it.

On build (from your fork):
pkg/sync/config.go:24:2: missing go.sum entry for module providing package github.com/urfave/cli/v2 (imported by github.com/juicedata/juicefs/cmd); to add:
        go get github.com/juicedata/juicefs/cmd
make: *** [Makefile:24: juicefs] Error 1

That is normal. Just run go get before running make. You will get an error about a yanked dependency with a command to run to fix it.

Another error
# git.sr.ht/~jamesponddotco/recache-go
/root/go/pkg/mod/git.sr.ht/~jamesponddotco/recache-go@v1.0.1/entry.go:18:19: undefined: atomic.Uint64
/root/go/pkg/mod/git.sr.ht/~jamesponddotco/recache-go@v1.0.1/entry.go:31:21: undefined: atomic.Uint64
note: module requires Go 1.20
# github.com/golang/glog
/root/go/pkg/mod/github.com/golang/glog@v1.1.2/glog_file_other.go:27:6: abortProcess redeclared in this block
        /root/go/pkg/mod/github.com/golang/glog@v1.1.2/glog_file_linux.go:33:6: other declaration of abortProcess
note: module requires Go 1.19
make: *** [Makefile:27: juicefs.lite] Error 2

You seem to have a Go version lower than 1.20. You will have to update your go runtime to 1.20 or 1.21

But juicefs requires 1.18?
https://github.com/juicedata/juicefs/blob/892a3ccb8c763a430b079bb54b3117e467579583/go.mod#L3
As i'm not a Go developper, i'll just wait for maintainers to review your PR, thanks 👍

You can build it with a newer version. I bumped the go runtime version in my fork.

Ok i've build it, but objbench seems to fail.
# ./juicefs.lite objbench --storage bunny --access-key jfstest --secret-key f85a6f2c-4fa0-dd13-4311 storage.bunnycdn.com
Start Functional Testing ...
+----------+---------------------+--------------------------------------------------+
| CATEGORY |         TEST        |                      RESULT                      |
+----------+---------------------+--------------------------------------------------+
|    basic |     create a bucket |                                             pass |
|    basic |       put an object |                                             pass |
|    basic |       get an object | failed to get an object: expect "hello", but ... |
|    basic |       get non-exist | get not existed object should failed: %!s(<ni... |
|    basic |  get partial object | failed to get the first byte:, expect "h", bu... |
|    basic |      head an object |              failed to head object not supported |
|    basic |    delete an object |                                             pass |
|    basic |    delete non-exist |                                             pass |
|    basic |        list objects | list failed: json: cannot unmarshal object in... |
|    basic |         special key | put encode file failed: parse "https://storag... |
|     sync |    put a big object |                                             pass |
|     sync | put an empty object |                                             pass |
|     sync |    multipart upload |                                      not support |
|     sync |  change owner/group |                                      not support |
|     sync |   change permission |                                      not support |
|     sync |        change mtime |                                      not support |
+----------+---------------------+--------------------------------------------------+

Start Performance Testing ...
2024/01/09 22:37:55.347964 juicefs[1389694] <ERROR>: smallget test failed: the downloaded content is incorrect [objbench.go:495]
2024/01/09 22:38:05.207803 juicefs[1389694] <ERROR>: get test failed: the downloaded content is incorrect [objbench.go:495]

Thanks for bringing this to my attention. I hope I can work out most of those kinks out tomorrow

Ok, I fixed most of the problems from the objbench side.
Start Functional Testing ...
+----------+---------------------+--------------------------------------------------+
| CATEGORY |         TEST        |                      RESULT                      |
+----------+---------------------+--------------------------------------------------+
|    basic |     create a bucket |                                             pass |
|    basic |       put an object |                                             pass |
|    basic |       get an object |                                             pass |
|    basic |       get non-exist |                                             pass |
|    basic |  get partial object |                                             pass |
|    basic |      head an object |              failed to head object not supported |
|    basic |    delete an object |                                             pass |
|    basic |    delete non-exist |                                             pass |
|    basic |        list objects |       list should not return anything, but got 1 |
|    basic |         special key | put encode file failed: parse "https://storag... |
|     sync |    put a big object |                                             pass |
|     sync | put an empty object |                                             pass |
|     sync |    multipart upload |                                      not support |
|     sync |  change owner/group |                                      not support |
|     sync |   change permission |                                      not support |
|     sync |        change mtime |                                      not support |
+----------+---------------------+--------------------------------------------------+

Start Performance Testing ...
2024/01/10 13:27:34.171426 juicefs[286295] <ERROR>: head test failed: not supported [objbench.go:495]
put small objects: 100/100 [==============================================================]  97.9/s    used: 1.021526697s
get small objects: 100/100 [==============================================================]  193.5/s   used: 516.934515ms
   upload objects: 256/256 [==============================================================]  51.1/s    used: 5.005692399s
 download objects: 256/256 [==============================================================]  103.9/s   used: 2.463638138s
     list objects: 100/100 [==============================================================]  177.3/s   used: 564.038317ms
     head objects: 100/100 [==============================================================]  64141.6/s used: 1.634281ms
   delete objects: 100/100 [==============================================================]  121.9/s   used: 820.550407ms
Benchmark finished! block-size: 4096 KiB, big-object-size: 1024 MiB, small-object-size: 128 KiB, small-objects: 100, NumThreads: 4
+--------------------+--------------------+-----------------+
|        ITEM        |        VALUE       |       COST      |
+--------------------+--------------------+-----------------+
|     upload objects |       204.60 MiB/s | 78.20 ms/object |
|   download objects |       415.76 MiB/s | 38.48 ms/object |
|  put small objects |     97.9 objects/s | 40.85 ms/object |
|  get small objects |    194.0 objects/s | 20.62 ms/object |
|       list objects | 17751.48 objects/s |     22.53 ms/op |
|       head objects |             failed |          failed |
|     delete objects |    122.0 objects/s | 32.79 ms/object |
| change permissions |        not support |     not support |
| change owner/group |        not support |     not support |
|       update mtime |        not support |     not support |
+--------------------+--------------------+-----------------+

Test have been run on Hetzner from the Nürnberg DC to the Bunny PoP in Falkenstein. Performance looks amazing and much better than I could have ever dreamed of
The remaining warnings can probably not be fixed properly, since they are limitations of the Bunny Object Storage

Head Operations are not supported natively by Bunny, but could be emulated by wrapping ListAll, if necessary. But JFS apparently does not need them to work or emulates them internally anyway.
List Objects: I am not sure why this happens, but I think it looks like a problem with delete consistency on Bunny's side
Special Keys: Bunny does not support special characters in the file name. Not sure if this warning can even be fixed or is even relevant, since JFS uses Hash-Adressed-Storage anyway.

Please correct me if I am wrong about any of this

Thanks for your work!
I don't know if it has any implications, but please can you test enabling Multi-Geo replication (so have at least 2 sites, like Falkenstein and London) of the bucket and test against it once enabled?

Bunny seems to use asynchronous replication from the main storage zone to all replication zones.  According to the support document you can only access the write API via the main zone, which should eliminate all race conditions. This implementation can not use multiple endpoints or the Bunny CDN, so there won't be any concurrency issues anyway.
Might be interesting for some users who need read access far away from the main zone, though.
I tested it and it worked just fine.

I gave it a try agains you last commit, but errors poped out:
# ./juicefs.lite objbench --storage bunny --access-key jfstest --secret-key <redacted> storage.bunnycdn.com
Start Functional Testing ...
+----------+---------------------+--------------------------------------------------+
| CATEGORY |         TEST        |                      RESULT                      |
+----------+---------------------+--------------------------------------------------+
|    basic |     create a bucket |                                             pass |
|    basic |       put an object |              put object failed: invalid argument |
|    basic |       get an object |              put object failed: invalid argument |
|    basic |       get non-exist | get not existed object should failed: %!s(<ni... |
|    basic |  get partial object |              put object failed: invalid argument |
|    basic |      head an object |              put object failed: invalid argument |
|    basic |    delete an object |              put object failed: invalid argument |
|    basic |    delete non-exist |                                             pass |
|    basic |        list objects |              put object failed: invalid argument |
|    basic |         special key | put encode file failed: parse "https://storag... |
|     sync |    put a big object |                                 invalid argument |
|     sync | put an empty object |                                 invalid argument |
|     sync |    multipart upload |                                      not support |
|     sync |  change owner/group |                                      not support |
|     sync |   change permission |                                      not support |
|     sync |        change mtime |                                      not support |
+----------+---------------------+--------------------------------------------------+

Start Performance Testing ...
2024/01/10 18:07:42.996567 juicefs[1395565] <ERROR>: smallput test failed: invalid argument [objbench.go:495]
2024/01/10 18:07:43.698651 juicefs[1395565] <ERROR>: smallget test failed: the downloaded content is incorrect [objbench.go:495]
2024/01/10 18:07:46.452825 juicefs[1395565] <ERROR>: put test failed: invalid argument [objbench.go:495]

@l0wl3vel can you post the full command and the result of a juicefs objbench using you own library as per https://github.com/juicedata/juicefs/pull/4325#issuecomment-1902057792?

Sure thing
# ./juicefs objbench --storage bunny https://storage.bunnycdn.com/<redacted> --secret-key <redacted>
Start Functional Testing ...
2024/01/20 14:59:53.872412 WARN RESTY parse "__juicefs_benchmark_1705762793173351124__/测试编码文件{\"name\":\"juicefs\"}\x1f%uFF081%uFF09.jpg": net/url: invalid control character in URL, Attempt 1
2024/01/20 14:59:53.872483 ERROR RESTY parse "__juicefs_benchmark_1705762793173351124__/测试编码文件{\"name\":\"juicefs\"}\x1f%uFF081%uFF09.jpg": net/url: invalid control character in URL
ERRO[0000] Put Request Failed: parse "__juicefs_benchmark_1705762793173351124__/测试编码文件{\"name\":\"juicefs\"}\x1f%uFF081%uFF09.jpg": net/url: invalid control character in URL
2024/01/20 14:59:53.872527 WARN RESTY parse "__juicefs_benchmark_1705762793173351124__/测试编码文件{\"name\":\"juicefs\"}\x1f%uFF081%uFF09.jpg": net/url: invalid control character in URL, Attempt 1
2024/01/20 14:59:53.872535 ERROR RESTY parse "__juicefs_benchmark_1705762793173351124__/测试编码文件{\"name\":\"juicefs\"}\x1f%uFF081%uFF09.jpg": net/url: invalid control character in URL
ERRO[0000] Delete Request Failed: parse "__juicefs_benchmark_1705762793173351124__/测试编码文件{\"name\":\"juicefs\"}\x1f%uFF081%uFF09.jpg": net/url: invalid control character in URL
+----------+---------------------+--------------------------------------------------+
| CATEGORY |         TEST        |                      RESULT                      |
+----------+---------------------+--------------------------------------------------+
|    basic |     create a bucket |                                             pass |
|    basic |       put an object |                                             pass |
|    basic |       get an object |                                             pass |
|    basic |       get non-exist |                                             pass |
|    basic |  get partial object |                                             pass |
|    basic |      head an object |              failed to head object not supported |
|    basic |    delete an object |                                             pass |
|    basic |    delete non-exist |                                             pass |
|    basic |        list objects |       list should not return anything, but got 1 |
|     sync |         special key | put encode file failed: parse "__juicefs_benc... |
|     sync |    put a big object |                                             pass |
|     sync | put an empty object |                                             pass |
|     sync |    multipart upload |                                      not support |
|     sync |  change owner/group |                                      not support |
|     sync |   change permission |                                      not support |
|     sync |        change mtime |                                      not support |
+----------+---------------------+--------------------------------------------------+

Start Performance Testing ...
2024/01/20 15:00:15.105911 juicefs[426116] <ERROR>: head test failed: not supported [objbench.go:495]
put small objects: 100/100 [==============================================================]  93.9/s    used: 1.064711356s
get small objects: 100/100 [==============================================================]  201.7/s   used: 495.755644ms
   upload objects: 256/256 [==============================================================]  48.8/s    used: 5.246249462s
 download objects: 256/256 [==============================================================]  102.1/s   used: 2.507397907s
     list objects: 100/100 [==============================================================]  188.9/s   used: 529.459547ms
     head objects: 100/100 [==============================================================]  85327.6/s used: 1.229762ms
   delete objects: 100/100 [==============================================================]  114.7/s   used: 872.315057ms
Benchmark finished! block-size: 4096 KiB, big-object-size: 1024 MiB, small-object-size: 128 KiB, small-objects: 100, NumThreads: 4
+--------------------+--------------------+-----------------+
|        ITEM        |        VALUE       |       COST      |
+--------------------+--------------------+-----------------+
|     upload objects |       195.21 MiB/s | 81.96 ms/object |
|   download objects |       408.53 MiB/s | 39.16 ms/object |
|  put small objects |     94.0 objects/s | 42.57 ms/object |
|  get small objects |    202.0 objects/s | 19.80 ms/object |
|       list objects | 18907.33 objects/s |     21.16 ms/op |
|       head objects |             failed |          failed |
|     delete objects |    114.8 objects/s | 34.84 ms/object |
| change permissions |        not support |     not support |
| change owner/group |        not support |     not support |
|       update mtime |        not support |     not support |
+--------------------+--------------------+-----------------+

Same setup as before. Test have been run on Hetzner from the Nürnberg DC to the Bunny Edge SSD PoP in Falkenstein
I additionally enabled checksum generation in my implementation for those tests.
I would say the small performance hit is worth it for having a much more manageable library.  Also did some profiling during running objbench which shows that checksumming during upload take approximately 7% blocking time. I found a drop-in replacement for crypto/sha256sum https://pkg.go.dev/github.com/minio/sha256-simd, which uses hardware accelerated instructions to calculate the checksums, which I will try out.
Both Upload and Download also spend significant time allocating and moving memory. I don't know yet what causes them, but suspect that resty does some array growing during receive especially that my code could use some more passing buffers by reference/readers to reduce the overhead. Also, replacing resty with fasthttp might be an idea, but I don't know if i want to do that due to the different interface.
Flamegraph:

My guess is that during non-objbench workloads networking is the bottleneck. I think reducing CPU overhead is a good idea, since I observed  0.5-1.5 cpu cores CPU utilized during objbench. I am not sure if that is a lot, but if it is posssible to lower this by 10-20% by switching the sha256 and http lib, it is probably worth it.

Using sha256-simd
+--------------------+--------------------+-----------------+
|        ITEM        |        VALUE       |       COST      |
+--------------------+--------------------+-----------------+
|     upload objects |       210.55 MiB/s | 75.99 ms/object |
|   download objects |       408.02 MiB/s | 39.21 ms/object |
|  put small objects |     97.2 objects/s | 41.16 ms/object |
|  get small objects |    193.1 objects/s | 20.72 ms/object |
|       list objects | 18753.92 objects/s |     21.33 ms/op |
|       head objects |             failed |          failed |
|     delete objects |    120.9 objects/s | 33.08 ms/object |
| change permissions |        not support |     not support |
| change owner/group |        not support |     not support |
|       update mtime |        not support |     not support |
+--------------------+--------------------+-----------------+
Ok, ~5% throughput for uploads by changing one line. I take it.

Thanks!
Not possible to get rid of those WARN/ERRORs?
I don't see maintainers merge it with those... 🤔

The "additional" errors are from me having additional logging in my library compared to the old library.
As for the cause of the logs, I am not sure what else should happen if you try to access an url that the net/url package cant parse.
I assume that the CTS has been designed around S3 compatibility. I tested R2 and B2 previously and remember that those back ends also had warnings in objbench, so it should be fine. I would really like to have some concrete information on this from maintainers though.

As expected the B2 backend also has warnings on list and special key.
[root@juicefs-test ~]# ./juicefs objbench --storage b2 bucketname --secret-key --- --access-key ---
Start Functional Testing ...
2024/01/20 23:07:23.105216 juicefs[432280] <ERROR>: The keys are out of order: marker "put_test_file", last "put_test_file" current "put_test_file" [sharding.go:119]
+----------+---------------------+--------------------------------------------------+
| CATEGORY |         TEST        |                      RESULT                      |
+----------+---------------------+--------------------------------------------------+
|    basic |     create a bucket |                                             pass |
|    basic |       put an object |                                             pass |
|    basic |       get an object |                                             pass |
|    basic |       get non-exist |                                             pass |
|    basic |  get partial object | failed to get object with the offset out of r... |
|    basic |      head an object |                                             pass |
|    basic |    delete an object |                                             pass |
|    basic |    delete non-exist |                                             pass |
|    basic |        list objects | put object failed: service_unavailable: no to... |
|     sync |         special key | put encode file failed: bad_request: File nam... |
|     sync |    put a big object |                                             pass |
|     sync | put an empty object |                                             pass |
|     sync |    multipart upload |                                      not support |
|     sync |  change owner/group |                                      not support |
|     sync |   change permission |                                      not support |
|     sync |        change mtime |                                      not support |
+----------+---------------------+--------------------------------------------------+

So we are probably fine

Done by #4325 and #4719


Added notes for cache request hostnames

Added notes - Do not use dynamic or invalid hostnames in cache requests. This can cause DNS cache failures and latency.

@mikenomitch @irvinebroque Thank you for the feedback! I updated the note with the details from Mike. An example could also be included if you think that's necessary to show it more explicitly? Let me know your thoughts.


Allow parsing pawn promotion without the equal sign (again)

Fix for https://github.com/jhlywa/chess.js/issues/78

Thanks for the PR and tests


New Language: Jai

Language name
Jai
URL of example repository
https://github.com/search?q=path%3A*.jai&type=code
5.2k files
Projects using the language:
https://github.com/focus-editor/focus
https://github.com/SogoCZE/Jails
Wiki showing how the language works. Might be useful:
https://github.com/Jai-Community/Jai-Community-Library/wiki
URL of syntax highlighting grammar
https://github.com/krig/jai-mode (emacs highlighting)
https://github.com/rluba/jai.vim (vim highlighting)
https://github.com/onelivesleft/the-language (VS Code highlighting)
Most popular extensions

.jai

Detected language
none

Working on this right now.

@johnmays, looks like Jails has a syntax highlighting file marked as MIT in https://github.com/SogoCZE/Jails/tree/parser/vscode_extension/syntaxes. then, it could be used, but that still leaves the sample code to be written.

@funkkiy I can certainly give it a try when I have some free time.  I'll keep you posted.

I'm also interested in this. The syntax of Jai is not yet final, and it's still in private beta, so it's not super important to have support immediately, but it would be cool to support it since there are more and more public repos popping up with .jai files in them.

The LICENSE has been now added to the original syntax repo: https://github.com/onelivesleft/the-language/commit/11160a470c67e083d7a83f5ee85070e49063640e.

Any update on this? Would be nice to already support Jai syntax highlighting in the current syntax.


Buttons Bug

Describe the bug
Buttons in the landing page are not properly aligned as per the page width
To Reproduce
Steps to reproduce the behavior:

Go to '...'
Click on '....'
Scroll down to '....'
See error

Expected behavior
They should be perfectly aligned and placed right at the center
Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

OS: [MACOs]
Browser [chrome]
Version [e.g. 22]

Additional context
Add any other context about the problem here.

@HarshCasper this is a small fix. Can I raise a PR for this ?


Addon setup - ponzu get github.com etc

Just thinking out loud as I to get grips with Ponzu features - would  a go get style install of addons be useful - something like this?
ponzu get github.com/etc

Many code editors offer auto import and code completion. Addons need calling from a content struct to work with, but auto import and code completion will not work, since the addon is not in the go path, if it has only been copied to the /addons folder.
This is not a big deal, but it struck me that ponzu get could wrap go get adding the addon to the gopath and then additionally copying it to the /addons directory.
With a flag it could be also auto installed in Ponzu project, by writing the import to a file with a prefixed underscore, so you see the admin/addons interface first, before adding any calling code from a content struct file - which is more intuitive. I maybe don't understand the practicalities/side effects of this.
Just wanted to log my ideas as I go, if there is a better way than in an issue please say.

@olliephillips - I like the idea, and agree it would probably be very helpful for quickly getting addons and integrating them into the project.
Hows this for a modified version of your proposal:
# this would run: go get -u github.com/bosssauce/fbscheduler
# and copy that package into ./addons
$ ponzu add github.com/bosssauce/fbscheduler

This way the code completion will work straight away and the addon becomes vendored upon the next build.
I'm concerned that automatically adding _ imports to some file is a fix for behavior that I'm not sure we want to encourage.. will have to get more feedback on what the downside of this could be. My worry is that without explicitly importing the addon package somewhere, we open up ourselves to having to somehow determine if the _ import should be made (and is safe to do so), or add more API & documentation so the developer knows how to trigger this auto import..
I guess its a question of how much "magic" is going on which could end up causing more hurt than good. There is already one instance of this in cmd/ponzu here: https://github.com/ponzu-cms/ponzu/blob/master/cmd/ponzu/main.go#L19 but it's truly necessary so that the whole system knows about content types - which are fundamental. Addons could have unexpected side-effects, like you mention.
What if we added a package to the top-level of Ponzu, similar to the following, and move the content package import there replacing the _ "content" import in cmd/ponzu with _ "startup" import:
startup/run.go
// Package startup is meant to serve as a place to import packages to trigger
// their initialization, start delayed workers, etc. `startup` is imported by the
// `cmd/ponzu` main package, and is run when the server starts up
package startup

import (
    _ "github.com/ponzu-cms/ponzu/content"
    _ "github.com/bosssauce/fbscheduler"
)

This offers a place to put addon initialization in the event that an addon isn't tied directly to any one content type, but keeps the auto-initialization explicit (and optional), which I have a feeling will avoid potential issues in the future. Upon building, this startup package would be copied into the vendor directory just like content...

Yes, add is better than get. Much better.  I'll have a stab at that feature if you can use - and not time critical?
Re auto-magically importing addons.  Some of what you suggest I will have to digest in the morning - but generally, I think the Addon UX feels a bit odd having to trigger the import in code first, just to see the Addon admin suite in the dashboard.

If you'd like to work on the feature, please go for it! And feel free to loop me in whenever needed. I'm typically in the #ponzu channel on this Slack if you'd like to join and discuss:
https://invite.slack.golangbridge.org
Take note that the CLI code changes should be made to the ponzu-cms/ponzu package itself, not a project that you create with ponzu new - and there are some contribution docs in the README. You'll need to run $ go install ./... from the ponzu-cms/ponzu package or if you fork it, from your own fork (then using the -fork flag as shown in the README) - sorry if this is all obvious, just trying to leave notes wherever possible so others might find them if they are having trouble contributing.
I would also suggest familiarizing yourself with the copyAll func here: https://github.com/ponzu-cms/ponzu/blob/master/cmd/ponzu/options.go#L334, as well as the various places it is called.. I think you'll probably want to use that when copying a go get package into ./addons - the build process should already account for anything added into ./addons, but it will be something you'll want to verify manually.
re: addon auto _ imports.. I agree that it feels odd, and maybe we simply document the Addon API in such a way that strongly suggests addon developers only run the addon.Register func in the addon package's init func - and nothing else (unless they know exactly how it will impact the system). I do plan on creating a generator for addons, much like content, so $ ponzu gen addon .... is a way to standardize this a bit.
If we can do that elegantly and practically, then I would feel much better about doing the auto _ import. Also, we will need to clearly document that the auto _ import only happens when using $ ponzu add ... so there is no expectation of it happening when someone simply copy/pastes a package into ./addons

Thanks, yes I'll look at this. My pleasure.

Merged #87. Thank you!


change branding from NIP-05 to Nostr address

This changes the string values from "NIP-05" to "Nostr address" to reflect a less technical and more user friendly branding for users that wish to edit this field.

Sorry, I just saw this PR now.... :( Closing since it was also implemented here: https://github.com/vitorpamplona/amethyst/commit/64a5071345065c690e1b9e46f3539e519ecffc4c


I hope to increase conversation sharing.

Describe the feature
I hope to increase conversation sharing.
Additional context
No response
Participation

[ ] I am willing to submit a pull request for this feature.

Thanks! It's in roadmap, we will add it soon.


Add confetti to reactions and improve voting screen

https://user-images.githubusercontent.com/19409687/167619764-5c9efc3f-e096-42d0-a8cf-1df2cc62c8b2.mp4
https://user-images.githubusercontent.com/19409687/167488036-184c24e9-64e7-49e0-b30a-dd108e9e64bf.MOV

Looks great!
How about also adding the confetti when other people react? I think it would further emphasize what people are thinking.
For example, as the music hits its climax and the performer is doing great, the screen gets filled with ⭐ confetti.
Others confetti could be smaller so the affect wouldn't be exaggerated and you could still differentiate them from your confetti.


Backspace removes two characters

The backspace key removes two characters instead of one.

I am also observing this behavior.

Yes, I observe the same. It would be interesting to check the behavior on x11 to check if this is ozone-wayland specific

I dug into this a little bit.
It is because in DesktopWindowTreeHostOzone::DispatchEvent, you call SendEventToProcessor(event) for key events. DesktopWindowTreeHostX11 does not. I believe this was just an error in commit 25315fc81890a54e49ea357b4ed0391eff868eb6.
Note in https://codereview.chromium.org/1236923003/diff/140001/ui/views/widget/desktop_aura/desktop_window_tree_host_x11.cc that they not only started calling GetInputMethod()->DispatchKeyEvent, but they also stopped calling SendEventToProcessor for key events.

Thx for looking into this. Will check this, do you have a patch already ?

Seems to be the same problem I bumped into in https://github.com/01org/ozone-wayland/issues/453
So this issue and https://github.com/01org/ozone-wayland/issues/453 are very likely to be duplicates.

Is this fixed?

As far as I know, it is not fixed yet @liveopp
Is this patch fixing the issue for you : https://github.com/jbrianceau/ozone-wayland/commit/ec897cd2e98722aa143166ff36c214214a238149 ?

Should be fixed in master branch now : https://github.com/01org/ozone-wayland/commit/607abb6913f761e3cb7dfccfd72e30173e4bc4ea


After clicking addStorate and addPlugin action, the entered page needs to add loading

Describe the Bug
A clear and concise description of what the bug is.

For UI issues please also add a screenshot that shows the issue.
Versions Used
Kubernetes:
Kubeclipper:
Environment
How many nodes and their hardware configuration:
For example: CentOS 7.5 / 3 masters:  8cpu/8g; 3 nodes: 8cpu/16g
(and other info are welcomed to help us debugging)
How To Reproduce
Steps to reproduce the behavior:

Go to '...'
Click on '....'
Scroll down to '....'
See error

Expected behavior
A clear and concise description of what you expected to happen.

/milestone v1.1.1


Solution containers don't change color depending on their solution

Transparent solution containers like beakers or glass bottles should change color and appearance depending on the solution they contain and how much of it they contain. This would provide visual information for containers about what they contain and how much of it is left.
SolutionComponent already has a color value SubstanceColor that it updates as it's contents change. To do this the entity sprite for the solution needs to change depending on the solution color/volume.
I'm not entirely sure how this should be implemented. My initial thought is that you'd have a different sprite for each fill level of the container. On that sprite you'd have some preset color for the solution that would be replaced by a shader with the solutions SubstanceColor whenever the solution changes. It'd be ideal if this was a reuseable component with it's fill level sprites specified in it's prototype. That way it could be used on various containers (beakers, drinking glasses, water bottles, etc).

assign me 😎


Rewrite README.md

Update README with more details about our project, add installation guide.

Also added MIT Licence. Please check name spelling


Switch to using the black formatter

copy check/format-incremental from Cirq (one minor edit to remove an unnecessary exclude line)
copy black version pin from Cirq so our open-source dev environments are mildly in sync.

Instead of formatting everything all at once, I plan on just letting the formatting change slowly over time as PRs format only their changed files. cc @ncrubin @fdmalone @tanujkhattar

Why not format everything in one go?

cirq did this all in one go right, with some git-blame-ignore-revs?

cirq did this all in one go right, with some git-blame-ignore-revs?

Yes

With that being said, I'd rather switch to black in one way or another. Can follow up with a bulk reformat.

xref #835


Enable noImplicitAny in tsconfig

We need to set noImplicitAny to true in tsconfig.json.  This will require adding a lot of types...

Fixed in #145


Remove hardcoded black text, default color works in light and dark mode

The title text in Community News was hardcoded to black. This was difficult to read in dark mode. The default color when no color was set is better.
But on a different note, the "Community News" gets extremely infrequent updates. A single news item in 2023 should it be removed? Or should we make an effort to make more news announcements?
Description / Motivation
Improve Readability in dark mode.
How Has This Been Tested?
Visual
Types of changes

[X] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to change)
[ ] Documentation update (non-breaking change; modified files are limited to the /data directory or other markdown files)

Checklist:

[X] I have read the Contributing guide.
[X] My code/comments/docs fully adhere to the Code of Conduct.
[X] My change is a code change.
[ ] My change is a documentation change and there are NO other updates required.
[ ] My change has new or updated images which are stored in the /public/images folder that need to be migrated to Sitecore DAM

Before:

After:


Call to undefined method MongoDB\Driver\ReadConcern::isDefault()

I really don't know what the problem is!


It takes 44 seconds from pressing F5 to hitting the breakpoint at main()

cargo build only takes 0.4s
Then I have to wait 44s
It takes me, as a beginner, too long to learn coding.
I want to know if this is normal. Does everyone experience this, or is it just me?
launch.json:
{
"type": "lldb",
"request": "launch",
"name": "Debug executable 'ord'",
"cargo": {
"args": [
"build",
"--bin=ord",
"--package=ord",
"--locked"
],
"filter": {
"name": "ord",
"kind": "bin"
}
},
"args": [],
"cwd": "${workspaceFolder}"
},
IDE: vs code
os: Windows 10
cpu: R5 3600

I try this on my laptop, ubuntu virtual machine, it takes only 5 seconds from pressing F5 to hitting the breakpoint at main(). So maybe it is about os or antivirus on windows?

Maybe it's hard to reproduce.


Upgraded target frameworks to net5;net461 to fix MacOS bug

On MacOS Big Sur 11.6 when using the plugin you end up with an error:
Failed to initialize CoreCLR, HRESULT: 0x80004005
/usr/local/share/dotnet/sdk/6.0.100-rc.2.21505.57/NuGet.targets(130,5): error : Problem starting the plugin '/Users/.../.nuget/plugins/netcore/CredentialProvider.Microsoft/CredentialProvider.Microsoft.dll'. Plugin 'CredentialProvider.Microsoft' failed within 0.245 seconds with exit code 137. [/Users/...../Source/....../src/.....sln]

Meanwhile the following SDKs and runtimes are installed on my computer:
% dotnet --list-sdks
2.1.805 [/usr/local/share/dotnet/sdk]
3.0.101 [/usr/local/share/dotnet/sdk]
3.1.101 [/usr/local/share/dotnet/sdk]
3.1.200 [/usr/local/share/dotnet/sdk]
3.1.302 [/usr/local/share/dotnet/sdk]
3.1.413 [/usr/local/share/dotnet/sdk]
3.1.414 [/usr/local/share/dotnet/sdk]
5.0.103 [/usr/local/share/dotnet/sdk]
5.0.203 [/usr/local/share/dotnet/sdk]
5.0.302 [/usr/local/share/dotnet/sdk]
5.0.401 [/usr/local/share/dotnet/sdk]
5.0.402 [/usr/local/share/dotnet/sdk]
6.0.100-rc.1.21463.6 [/usr/local/share/dotnet/sdk]
6.0.100-rc.2.21505.57 [/usr/local/share/dotnet/sdk]

% dotnet --list-runtimes
Microsoft.AspNetCore.App 3.0.1 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 3.1.19 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 3.1.20 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 5.0.10 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 5.0.11 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 6.0.0-rc.1.21452.15 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.AspNetCore.App 6.0.0-rc.2.21480.10 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 2.1.23 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 3.0.1 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 3.1.19 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 3.1.20 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 5.0.10 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 5.0.11 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Microsoft.NETCore.App 6.0.0-rc.2.21480.5 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]

After upgrading the target framework and building the plugin from sources I was able to fix the error.

We already updated the CredProvider to net 6


Is the height restricted to two meters in AltHold mode?

The quadcopter can't go any higher after reaching an altitude of two meters in AltHold mode,Is there a way to raise that limit?

Well, there is no restriction of 2 meters actually, but everything depends on the setup and configuration.
I suggest to write to https://t.me/COEXHelpdesk Telegram chat to get more support.


Data directive support

Just a quick question: Are there any plans to support py::data: or data: directive?
(example: https://stackoverflow.com/a/26863265)

Yes. This is included in sphinx and is already added.

Correction. This isn't supported right now. I'll add support for it soon.


Any chance of adding a global setup/global teardown

VI Tester had a global setup/teardown that would execute once per test case.
Any plans to implement something similar?
Barring that, is there some sort of workaround?

Hey,
I am not sure I understand completely what you are requesting. In xUnit terminology, a "test case" is one test, it is implemented as an instance of a test case class at runtime. So each class would contain many test methods and when the tests are run for all methods in the class, one instance of the test case class is created for each method. So using this terminology, the setup/teardown VI:s would be global.
But I assume you would like some additional setup/teardown running for each test execution? Or what would be the chunk size: at the beginning of and end of each execution of all tests belonging to a specific test case class? Something like this:
global setup
setup
test case 1
tear down
setup
test case 2
tear down
global teardown
Could you explain your use case a bit more? If you are working on tooling, there could be better hooks for you to use and many of the features in LUnit are actually plugins, although I've never documented how it works,
In general it feels like an antipattern to spread out the test logic over many different files as the tests get very obscure to read. I tend to prefer using helper methods in my tests explicitly over setup/teardown, but there are cases where setup/teardown fits better.

Maybe this helps.

Ok, thanks. That explains a lot.
LUnit follows a slightly different model, something like this:
http://xunitpatterns.com/Testcase Class.html
So here it is not clear when a global setup/teardown would execute. It does not really fit the model.
Could you explain your use case? There might be other hooks you can use.

Meszaros would refer to that as a test fixture.
http://xunitpatterns.com/SuiteFixture Setup.html
PyTest does something similar.
My understanding is this is a pretty common unit testing and xunit pattern.
My use case is that I have some code (for scripting) that traverses a directory hierarchy and parses some information. I would like to create a directory hierarchy for all my tests to parse in a temp directory. I've got several tests for this code. It is non-destructive, so they can all share the same test directory hierarchy. I'd like to create the hierarchy just once instead of having to create it for each test.
It seems like a rather common scenario - many tests share setup code that is the same between each test. Yes you could do that as a utility method that runs at the beginning of each test method.
I can agree that moving test code out of the test methods can obscure things.
However there are 2 issues with the utility method idea:

you have to remember to add it to the beginning of every test method.
you end up running that code multiple times. In this case it touches the file system so it is expensive and it doesn't need to be run every time, yes I guess I could add a check to see if it already exists, but that feels cumbersome.

Having a predefined hook to run this type of code seems to be the norm in other testing libraries. Putting in the predefined place should make it obvious what is going on and make it less obscure.

actually I take back part of that.
Looking closer at the link I shared, Meszaros would call that an Implicit setup - executes once per test case,  versus an explicit setup that exercise once per test method.
He refers to a fixture as something that executes once per suite.
The terminology is rather cumbersome.
Pytest just refers to them all as fixtures, regardless of when the execute. Each has a scope which determines when it executes.

I would be happy with taking the pytest approach. Not sure how best to do that. Caraya somewhat resembles Pytest, not sure how they implement any of this - not sure that Caraya does.

Actually its been a while since I read that book and the terminology is very confusing.
Perhaps by inline he means part of the 4 part test defined in the method?
I need to pull out the book and look at it again.
That thing is a beast!

The terminology is a bit of a mess and seems to be diverging a lot depending on the language and test framework.
The key point is that in LUnit there is no such thing as a test method at run time. You have a test case class, which has member VIs. It then acts as a factory producing a suite of test case objects which are executed by the runner. Essentially the command pattern.
You thus have a set of test case objects, called a test suite, and these suites may be nested. When executed, suites are distributed to test runners which run each suite in parallel.
So to have a vi tester style global setup for a test case would translate to having a setup for a test suite created from a test case class. Or something similar?
I see how this could be useful and anything making tests run faster is a big win in my book. I'll do some prototyping to see where would be a good place to add a hook.
Touching the file system is always messy in testing and I see why you would not want blow it away and recreate for each test. As long as the tests are not mutating anything you could get away with creating it once, maybe you could just keep it static as part of the test? If it is mutated, it gets more messy..

Yeah that was my thought as a workaround just have a test directory as part of my repo and use that.
Just want to make sure i understand though, the setup and teardown in LUnit - when and how often do they execute?
Do they execute once per test class? or once for each individual test method?
I had assumed they behaved similar to VITester (ie once before and after each test) but it sounds like they execute once for the entire test class.

Sorry for the confusion, it works exactly as you have assumed. See link below. (I noticed that I am not completely consistent in the terminology in the documentation either, partly because the implementation details and my understanding have changed historically)
https://lunit.astemes.com/10_Basics/#using-the-setup-and-teardown-methods
To clarify, what you call a test method would be the same as what I mean by a test case. So the setup would run before each test case, which is a single test as defined in a test*.vi. In LUnit the entities are test case and test suite, there is no test method.
Also, a test case class is never executed. It contains the test*.vi:s and at runtime produces a test suite (factory method), which is a set of test case objects. The test case objects are executed (command pattern) by the runner and the results are collected.
This is why I'm struggling a bit to figure out where to slap on a global setup.

Hey,
I made some refactoring in LUnit and it is now possible (v1.4.x ->) to implement global fixtures. It still is not natively supported (it might get integrated later if there are users).
I made a reference implementation which can be found here:
https://github.com/Astemes/astemes-lunit-global-fixture/
LUnit v1.4.10 is available here:
https://github.com/Astemes/astemes-lunit/releases/tag/v1.4.10
Let me know what you think.

I'll close off this issue for time being.
The reference implementation of global fixtures should provide the needed functionality and we'll consider officially integrating it if there are users.


Add debug & dry-run and fixed #4

Hi @peymanmortazavi
This pull request contains:

Update readme
Add debug & dry-run
Kubectl latest stable release
Fixed https://github.com/peymanmortazavi/eks-helm-deploy/issues/4

Let me know if any issues.
Thanks
Eric

Thanks for the quick reaction @yunpengeric. I was about to open a PR to address #4, much in the same way you did.

Perfect thanks for the PR! I appreciate this!


Moving the overlay networks to vlan aware bridge in leaf1

Moving the overlay networks from traditional linux bridge to vlan aware bridge in leaf1.
Removed L3VNI for blue VRF since blue VRF is used for asymmetric IRB demo. Modified the L3VNI ids for green and yellow vrfs accordingly. opi-test (host which is connected to Leaf1) now has 2 interfaces. First interface tagged in VLANs 10, 20 and 40. Second interface tagged in VLAN 50. VLAN/VNI 10 is used to demonstrate L2 VXLAN.
VLAN/VNI 20 and 30 are used to demonstrate L3 VXLAN Asymmetric IRB. VLAN/VNI 40 and 50 are used to demonstrate L3 VXLAN Symmetric IRB. Added all the leaf1 configs as manual configs for now. Eventually these will be moved to grpc-test container as grpc calls.

can you attach latest picture as well, instead of existing ones ?

It's part of https://github.com/opiproject/opi-evpn-bridge/pull/77

can you attach latest picture as well, instead of existing ones ?
Updated pictures are in the below PR
#77

Please close this PR, the changes have been merged as part of https://github.com/opiproject/opi-evpn-bridge/pull/102


To China user, site will redirect zh.airbnb.com, this's solution

For china user, you need add some code to set locale to en, avoid auto redirect.
    # Now make the request
    cookies = dict(sticky_locale='en')
    response = requests.get(url, params, timeout=timeout,
                            headers=headers, cookies=cookies)

Otherwise, you will get bedrooms is null

how about this issue?

I had missed this. I've made the change but would like to run it for a few days to check that it makes no difference to other searches. I'll update this issue on the weekend.


THRIFT-3521 : TSimpleJSONProtocolTest is not deterministic (fails when run on JDK 8)

This PR removes fields that cause TSimpleJSONProtocolTest to fail when run using different version of the Java standard library.

@bgould, thanks for looking into this.
Would it be tedious and/or complicate the code if we match against regex instead of removing them ?

I thought about that too but didn't have time to do it this morning and just wanted to get a working build.  I think that perhaps better than a regex might be to actually parse the JSON string and check the values.  I'll see if I can get that working.

I was mainly concerned about completely losing map/set tests.
Of course preserving all tests for those element types is great, but I think it's fine to unset most of them, as long as some/one of tests for both map and set is retained.

I see... in that I think that the tests should be ok as they are because there still exist maps and sets in the testSanePartsOfCompactProtoTestStruct test method.

You're right, you were already keeping those which still work for JDK8.


Same API, different return results

Hello, everyone. I want to ask a question, why do you call const blockinfo = await api tendermint. Blockinfo (height) does not return the latest block?

For the same SDK, the version is the same, but the results are different on the local and server. The local returns the latest height, but the server does not

I printed out the API information，

I printed out the API information, and the results were the same, but by calling const blockinfo = await api tendermint. Blockinfo (height) returns different results, one locally and the other on the server I can't imagine why the information printed by the API is the same, but the blockinfo obtained by calling the same method is different?

my code is

you mean difference between public LCD and your own node? maybe your own node isn't fully synchronized.

you mean difference between public LCD and your own node? maybe your own node isn't fully synchronized.

I use public official nodes, servers refer to cloud servers, and local refers to my own dotcom, but I use official nodes https://phoenix-lcd.terra.dev/ For foreign servers, the intelligent access to the height reached a month ago, and domestic machines are normal. I don't know if there are any restrictions. The public nodes that apply for access to the latest height information are normal

my code is

await this.terra # Invalid. await should be used when calling a function, but it's trivial...
For you question, I think your local node is not synchronized. Try to query your local node e.g. curl localhost:1317/blocks/latest | jq .block.header


new firmware version 04.00.00 of Bosch Termostat CT200

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
Describe the solution you'd like
A clear and concise description of what you want to happen.
Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.
Additional context
Add any other context or screenshots about the feature request here.

The same issue. I also tried to run bosch.debug_scan, but it finish with message "Error rendering data template: Result is not a Dictionary".

There is a new release:
https://github.com/bosch-thermostat/home-assistant-bosch-custom-component/releases/tag/v0.21.0


Example usage with hyper?

Hello!
Sorry for my ignorance - I'am newby in Rust.
I want to use hyper with bb8 and tokio-postgres. In every request I want to acquire new connection from pool. Please, can you provide me some example for this scenario?
Currently I do it like this:
fn main() {
    let addr = "<IP_ADDRESS>:3000".parse().unwrap();

    let pg_mgr =
        PostgresConnectionManager::new("postgresql://auth:auth@localhost:5433/auth", NoTls);

    rt::run(future::lazy(move || {
        Pool::builder()
            .build(pg_mgr)
            .map_err(|e| eprintln!("Database error: {}", e))
            .and_then(move |pool| {
                let service = || service_fn(|req| router(req, pool.clone()));

                let server = Server::bind(&addr)
                    .serve(service)
                    .map_err(|e| eprintln!("Server error: {}", e));

                println!("Listening on http://{}", addr);
                server
            })
    }))
}

fn router(
    _req: Request<Body>,
    _pool: Pool<PostgresConnectionManager<NoTls>>,
) -> Result<Response<Body>, hyper::Error> {
    // do some staff with pool
}

But it won't compile:
error[E0597]: `pool` does not live long enough
  --> src/main.rs:22:63
   |
22 |                 let service = || service_fn(|req| router(req, pool.clone()));
   |                               -- -----------------------------^^^^----------
   |                               |  |                            |
   |                               |  |                            borrowed value does not live long enough
   |                               |  returning this value requires that `pool` is borrowed for `'static`
   |                               value captured here
...
30 |             })
   |             - `pool` dropped here while still borrowed

Waht am I doing wrong? How to make my case work correctly?

This is a contrived example but it should help you.
9213704cdd1345f1b98643c15cf4ea56d389d34d

Your particular problem is that you need something like
let service = move || {
    let pool = pool.clone();
    service_fn(move |req| router(req, pool));
}

In other words you're cloning too late.

Please, can you help me understand your example?
I don' understand why you need to use mutex. In other words why your example looks harder then my?)

Mine needs a Mutex because the order I create things in is different. Yours is simpler.

What am I doing wrong?
rt::run(future::lazy(move || {
    Pool::builder()
        .build(pg_mgr)
        .map_err(|_| eprintln!("kek"))
        .and_then(move |pool| {
            let service = move || {
                let pool = pool.clone();
                service_fn(move |req| router(req, pool))
            };

            let server = Server::bind(&addr)
                .serve(service)
                .map_err(|e| eprintln!("Server error: {}", e));

            println!("Listening on http://{}", addr);
            server
        })
}))

error[E0507]: cannot move out of captured variable in an `FnMut` closure
  --> src/main.rs:24:55
   |
23 |                     let pool = pool.clone();
   |                         ---- captured outer variable
24 |                     service_fn(move |req| router(req, pool))
   |                                                       ^^^^ cannot move out of captured variable in an `FnMut` closure

error: aborting due to previous error

For more information about this error, try `rustc --explain E0507`.

Ah, perhaps you need pool.clone() for both.

So, this is correct usage, well?
fn main() {
    let addr = "<IP_ADDRESS>:3000".parse().unwrap();

    let pg_mgr =
        PostgresConnectionManager::new("postgresql://auth:auth@localhost:5433/auth", NoTls);

    rt::run(future::lazy(move || {
        Pool::builder()
            .build(pg_mgr)
            .map_err(|_| eprintln!("kek"))
            .and_then(move |pool| {
                let service = move || {
                    let pool = pool.clone();
                    service_fn(move |req| router(req, pool.clone()))
                };

                let server = Server::bind(&addr)
                    .serve(service)
                    .map_err(|e| eprintln!("Server error: {}", e));

                println!("Listening on http://{}", addr);
                server
            })
    }))
}

fn router(
    _req: Request<Body>,
    pool: Pool<PostgresConnectionManager<NoTls>>,
) -> impl Future<Item = Response<Body>, Error = hyper::Error> + Send {
    pool.run(move |mut connection| {
        // do some staff
    })
    .or_else(|e| {
        Ok(Response::new(Body::from(format!("Internal error {:?}", e))))
    })
    .map_err::<_, hyper::Error>(|_: bb8::RunError<tokio_postgres::Error>| unreachable!())
}

Yeah I think that should work.

As I see I should not use Arc - pool cloned correctly without it, well?

The Arc is there to allow cloning the Mutex. Pool clones just fine on its own.

Cool! Thanks a lot!


Kate - SOCIETIES WHERE THE RECORDING WAS MADE OUTSIDE THE SOCIETY'S HOMELAND

Kate's notes:
This is something that would be good to have a clearly stated policy on (and maybe it already exists!). I know Stella and I discussed it a couple of time.
There seem to be two types of cases:
A. Diaspora cultures: Cases where this is obvious from the society name (e.g., Scandinavian Americans, German Americans) -- here, the recording was made somewhere in the US, but the music etc. is presumably meant to represent the music of the homeland.
  e.g., Song ID 9199 - German Americans (30136) - in the song metadata this society has a clearly distinguished local lat/lon vs. homeland lat/lon; in the culture metadata it has only a society lat/lon (which places it in the US).
B. Opportunistic/convenience recording at a location different from home location: Cases where the ethnomusicologist recorded one or more performers, who perhaps still lives in their 'home' culture at a different location.
   e.g., Song ID 2994 - Pashtun (23497) - the song metadata notes: "Khyber Pakhtunkhwa Province, Pakistan [Recorded at Alan Lomax's apartment, New York, New York]"; only the homeland lat/lon is given in the song/culture metadata sheets
  e.g., [I can't find an example right now...] in some cases recordings were done in a regional hub (e.g., mid-sized town), and the lat/lon given for the song seem to be for the recording location as opposed to the homeland
In the short-term, the simplest solution might be to add a "homeland" lat lon to the culture metadata (not just the song metadata), and to fill that in when it differs from the recording lat lon AND is important to know (so, maybe not in the Pashtun example, but yes in the German American example)?

When implementing the suggested solution (adding homeland lat lon to culture metadata where relevant), should I use the average homeland lat long from the song metadata? --Stella

I added homeland lat and homeland lon columns on the society metadata sheet and filled them in for the societies that currently have songs with homeland lat-lons. Just for sake of time, I did not add homeland lat-lons for societies that are diasporic but don't have any songs in our datasets (like Finnish American and Scandinavian American). We can always add them later if needed but since they don't have any data on the GJB currently it didn't seem necessary.


Debugger: do not render expansion control on debug session when there are no children

Forked from https://github.com/microsoft/vscode/issues/79121.
As seen in the screenshot, session is expandable, yet has no children. Probably due to the elements' being identified as session, not thread.

@isidorn

@pavelfeldman yes, good point. The issue was that the element is a session, and for sessions we were always rendering the expando. Now we are more strict and this case should work fine.
Try it out and let me know if it is good now.


Expose black box function solvers into TS

Problem
Suggested by @Savio-Sou.
Developers who are making use of ACVM.js are often going to want to make use of the blackbox functions inside of their business logic. For instance pedersen commitments are used in applications such as mastermind-noir and must be calculated in TS to feed into the circuit while matching a value calculated inside the circuit.
It's then important to provide an implementation which is guaranteed to be consistent with ACVM.
Proposed solution
The ACVM.js can expose the implementations of black box functions as helper functions to allow developers query the result of these will be. They can then easily calculate any black box function like hashes (e.g. pedersen, keccak256) and verify signatures (schnorr, ecdsa).
This will be guaranteed to match the ACVM and prevent developers from having to hunt down TS implementations.
Alternatives considered
No response
Additional context
No response
Submission Checklist

[ ] Once I hit submit, I will assign this issue to the Project Board with the appropriate tags.

Should we also provide helper functions for Noir stdlib functions?
For example: EdDSA where a Noir dev mentioned on Discord how difficult it is to compute it in a format compatible with the implementation in Noir stdlib.
Not sure if this should spin out into a separate issue / repo. Happy to hear thoughts!

Exposing Noir stdlib functions is outside of the scope of this package as it's purely concerned with ACIR/ACVM. i.e. A change in the Noir stdlib shouldn't require ACVM to change.
That said, a Noir package can compile down its stdlib functions into ACIR snippets and act as a wrapper around acvm_js to execute and decode the return values.


⚠ Bofrost.gr has degraded performance

In 3419934, Bofrost.gr (https://www.bofrost.gr) experienced degraded performance:

HTTP code: 200
Response time: 8159 ms

Resolved: Bofrost.gr performance has improved in 6e9fb87.


Update google_sheet_update dependencies to maintained/w3f sources

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


Run tests with different languages

Description
I can´t figure out a way to change the language in the device when running tests.
It would nice to have:
 device.setLanguage('es')

Detox: 7.1.0

Thanks

Just leaving these here as pointers for the implementation:

iOS: https://stackoverflow.com/questions/27855664/how-to-set-ios-simulator-language-when-launching-via-simctl?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
Android: https://stackoverflow.com/questions/21712205/change-device-language-via-adb?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa

@ismaelocaramelo Do you feel like making a PR? I could guide you through the process 👍


add allow_async_write_back property for lake table

Signed-off-by: Kevin Xiaohua Cai<EMAIL_ADDRESS>What type of PR is this：

[ ] bug
[X] feature
[ ] enhancement
[ ] refactor
[ ] others

[FE PR Coverage Check]
:heart_eyes: pass : 16 / 19 (84.21%)
file detail

path
covered_line
new_line
coverage
not_covered_line_detail

:large_blue_circle:
com/starrocks/common/proc/PartitionsProcDir.java
0
3
00.00%
[96, 97, 293]

:large_blue_circle:
com/starrocks/lake/StorageCacheInfo.java
4
4
100.00%
[]

:large_blue_circle:
com/starrocks/lake/LakeTable.java
3
3
100.00%
[]

:large_blue_circle:
com/starrocks/server/LocalMetastore.java
6
6
100.00%
[]

:large_blue_circle:
com/starrocks/lake/StorageInfo.java
1
1
100.00%
[]

:large_blue_circle:
com/starrocks/analysis/SingleRangePartitionDesc.java
2
2
100.00%
[]

[FE PR Coverage Check]
:disappointed: fail : 18 / 23 (78.26%)
file detail

path
covered_line
new_line
coverage
not_covered_line_detail

:large_blue_circle:
com/starrocks/common/proc/PartitionsProcDir.java
0
3
00.00%
[96, 97, 293]

:large_blue_circle:
com/starrocks/analysis/SingleRangePartitionDesc.java
3
4
75.00%
[175]

:large_blue_circle:
com/starrocks/server/LocalMetastore.java
7
8
87.50%
[1929]

:large_blue_circle:
com/starrocks/lake/StorageCacheInfo.java
4
4
100.00%
[]

:large_blue_circle:
com/starrocks/lake/LakeTable.java
3
3
100.00%
[]

:large_blue_circle:
com/starrocks/lake/StorageInfo.java
1
1
100.00%
[]

[FE PR Coverage Check]
:heart_eyes: pass : 19 / 23 (82.61%)
file detail

path
covered_line
new_line
coverage
not_covered_line_detail

:large_blue_circle:
com/starrocks/common/proc/PartitionsProcDir.java
0
3
00.00%
[96, 97, 293]

:large_blue_circle:
com/starrocks/analysis/SingleRangePartitionDesc.java
3
4
75.00%
[175]

:large_blue_circle:
com/starrocks/lake/StorageCacheInfo.java
4
4
100.00%
[]

:large_blue_circle:
com/starrocks/lake/LakeTable.java
3
3
100.00%
[]

:large_blue_circle:
com/starrocks/server/LocalMetastore.java
8
8
100.00%
[]

:large_blue_circle:
com/starrocks/lake/StorageInfo.java
1
1
100.00%
[]

run starrocks_admit_test


Add the ability to peek in from the left, right, or both

Like in this design

Another use case:

Some other use case examples


Added byteswap (from C++23)

Hello :wave:
First of all, I really like the project, and I'd like to help a little when I have the time to.
I added byteswap function (from <bit> header since C++23), and I used __bit/bit_cast.h as a reference to be consistent.
I have no warning and all tests (bit_14, 17, 20 and 23) pass.
Please tell me if more tests are needed, I used values from cppreference (values were slightly modified for signed integers to avoid overflow).

Hello @Chi-Iroh 👋
Thank you so much for your contribution! I'm glad to hear that you like the project, and I really appreciate you taking the time to help out. Your addition of the byteswap function looks great, and it's reassuring to know that all the tests are passing.
I just need to figure out how to run GitHub Actions on the repository before merging your PR. Once I have that set up, I'll proceed with merging your changes.
Please feel free to contribute anytime you have the time—your help is always welcome!

I just updated my byteswap branch to your main, so you should be able to run your actions now.

Using static_assert allows byteswap to participate in the overload resolution.
Oops, I saw that but forgot it and put the static_assert anyway to give an explicit message. I'll remove it.

byteswap must return T
Obviously. I forgot to convert it back to a signed type after calling byteswap_impl<UnsignedT>.

Invoking function must specify it's full namespaces to prevent ADL and some compilation error on old compilers
Honestly, I hadn't thought about that as I have never had to deal with this kind of errors, but that's good to know.

Notes about dispatching under namespace detail (A.K.A impl)
No problem, thank you for the link about tag dispatching, I'll see what it is.

Notes about formatting
Alright. It would be relevant to mention the styleguide in the README to inform potential contributors.

I'll reopen the PR once all the changes you mentioned will be done.

I think it's better now, but feel free to correct me if I'm still wrong.
I didn't make byte_mask unsigned char, because unsigned char << unsigned yields an int, so byte_mask << upper_shift would result in an int and static_cast<T>(byte_mask) would be needed to avoid overflow.
Without adding the static_cast, 64 bits tests fail.

@Chi-Iroh
Ternary operator can be evaluated at compile-time, but it is not a compile-time dispatching. Try something like below to get more optimized and compile-time dispatching code:)
template<typename T, std::size_t Size>
constexpr T byteswap_unsigned_impl(T n, std::integral_constant<Size>) { return /* generic method */; }
template<typename T>
constexpr T byteswap_unsigned_impl(T n, std::integral_constant<1>) { return n; /* unchanged */ }
template<typename T>
constexpr T byteswap_unsigned_impl(T n, std::integral_constant<2>) { return ...; /* specialized method */ }

template<typename T>
constexpr T byteswap_unsigned(T n) { return byteswap_unsigned_impl(n, std::integral_constant<sizeof(T)>{}); }

Note: explicit template parameter is not required when calling byteswap_impl.

Thanks for the example, I understand now.
My commits are marked as unverified, don't worry, it's just because I didn't import my GPG key on my Windows for now.

It seems like clang tester is somehow not working. I'll merge after fixing it

Nice, so I guess the code suits you better now ?


🐛 BUG: typing error in astro components after updating to version 2.6.0 vscode extension

Describe the Bug
After updating to the latest version, typing errors are occurring:
Error in astro component
https://github.com/withastro/language-tools/assets/6271023/07cb48fb-e216-4df0-98c5-82576ca224c4

Type '{ children: Element[]; class: string; }' is not assignable to type 'DetailedHTMLProps<HTMLAttributes, HTMLDivElement>'.>   Property 'class' does not exist on type 'DetailedHTMLProps<HTMLAttributes, HTMLDivElement>'. Did you mean 'className'?ts(2322)

Type '{ children: Element; title: string; }' is not assignable to type 'IntrinsicAttributes & Props'.
Property 'children' does not exist on type 'IntrinsicAttributes & Props'.ts(2322)

Steps to Reproduce

npm init astro using template
...
...
...
Error! Describe what went wrong (and what was expected instead)...

Could you share a reproduction?

@maqueise FYI I had the same issue.
I tried to make a reproduction, or to trace back what package caused the issue. I was not able to unfortunately.
But, a clean install did fix the issue.
Hope it helps

Same here.

Without a repro I unfortunately cannot do much 😅 Is there any chances all of you are on versions of Astro older than 4.0.6?

Fixed in 2.6.1. Sorry for the inconvenience!

This is not fixed for me in 2.6.1

This is not fixed for me in 2.6.1 Downgrading to 2.5.6 does fix the issue though.

Me too. I‘m use<EMAIL_ADDRESS>I'll try to make a reproduction link.

Hmm, that's very weird. I cannot reproduce the issue anymore on 2.6.1, but I'll admit I didn't try every Astro version, just 4.0.0.

This is not fixed for me in 2.6.1 Downgrading to 2.5.6 does fix the issue though.

Me too. I‘m use<EMAIL_ADDRESS>I'll try to make a reproduction link.

Sadly, Can not reproduce this issue with a newly created mini project, so I will try to delete some files from my own project to provide a minimal reproduction.

I found the issue, I couldn't reproduce it because it only happens in the deployed version and not the dev version I was using. Will release another patch shortly, sorry for the inconvenience!

Thanks for your work, it looks like I don't need to prepare a minimal reproduction anymore.

Just released 2.6.2 that seems to work for me locally, let me know how that works!

Its works pretty for me. Thanks again.

Issue resolved, errors do not occur in v2.6.2, thank you.


Reduced code reuse for lockdown method

#61 I tried to clean up a little bit, let me know if this is what you had in mind. I can make more changes if required.

Assuming that this works, this looks like a great start.
The next thing I'd do is move all the shell command strings into a dictionary, instead of having the string literals in the codebase twice.


run the example workflow_by_code.ipynb, caused MlflowException: Invalid experiment ID: '.ipynb_checkpoints'

🐛 Bug Description
when I run the code below in qlib-main/examples/workflow_by_code.ipynb，it caused MlflowException: Invalid experiment ID: '.ipynb_checkpoints'
###################################
train model
###################################
data_handler_config = {
"start_time": "2008-01-01",
"end_time": "2020-08-01",
"fit_start_time": "2008-01-01",
"fit_end_time": "2014-12-31",
"instruments": market,
}
task = {
"model": {
"class": "LGBModel",
"module_path": "qlib.contrib.model.gbdt",
"kwargs": {
"loss": "mse",
"colsample_bytree": 0.8879,
"learning_rate": 0.0421,
"subsample": 0.8789,
"lambda_l1": 205.6999,
"lambda_l2": 580.9768,
"max_depth": 8,
"num_leaves": 210,
"num_threads": 20,
},
},
"dataset": {
"class": "DatasetH",
"module_path": "qlib.data.dataset",
"kwargs": {
"handler": {
"class": "Alpha158",
"module_path": "qlib.contrib.data.handler",
"kwargs": data_handler_config,
},
"segments": {
"train": ("2008-01-01", "2014-12-31"),
"valid": ("2015-01-01", "2016-12-31"),
"test": ("2017-01-01", "2020-08-01"),
},
},
},
}
model initiaiton
model = init_instance_by_config(task["model"])
dataset = init_instance_by_config(task["dataset"])
start exp to train model
with R.start(experiment_name="train_model"):
R.log_params(**flatten_dict(task))
model.fit(dataset)
R.save_objects(trained_model=model)
rid = R.get_recorder().id
=====================
The whole error message is below：
[2607:MainThread](2022-04-06 17:38:12,377) INFO - qlib.timer - [log.py:113] - Time cost: 18.919s | Loading data Done
[2607:MainThread](2022-04-06 17:38:12,737) INFO - qlib.timer - [log.py:113] - Time cost: 0.147s | DropnaLabel Done
/Users/yzwu/DevEnv/miniconda3/envs/quant_py38_arm/lib/python3.8/site-packages/qlib/data/dataset/processor.py:310: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
df[cols] = df[cols].groupby("datetime").apply(self.zscore_func)
[2607:MainThread](2022-04-06 17:38:14,387) INFO - qlib.timer - [log.py:113] - Time cost: 1.650s | CSZScoreNorm Done
[2607:MainThread](2022-04-06 17:38:14,387) INFO - qlib.timer - [log.py:113] - Time cost: 2.010s | fit & process data Done
[2607:MainThread](2022-04-06 17:38:14,388) INFO - qlib.timer - [log.py:113] - Time cost: 20.930s | Init data Done
[2607:MainThread](2022-04-06 17:38:14,399) INFO - qlib.workflow - [expm.py:315] - <mlflow.tracking.client.MlflowClient object at 0x2859099a0>
[2607:MainThread](2022-04-06 17:38:14,402) WARNING - qlib.workflow - [expm.py:195] - No valid experiment found. Create a new experiment with name train_model.
MlflowException                           Traceback (most recent call last)
File ~/DevEnv/miniconda3/envs/quant_py38_arm/lib/python3.8/site-packages/qlib/workflow/expm.py:391, in MLflowExpManager._get_exp(self, experiment_id, experiment_name)
390 try:
--> 391     exp = self.client.get_experiment_by_name(experiment_name)
392     if exp is None or exp.lifecycle_stage.upper() == "DELETED":
File ~/DevEnv/miniconda3/envs/quant_py38_arm/lib/python3.8/site-packages/mlflow/tracking/client.py:462, in MlflowClient.get_experiment_by_name(self, name)
432 """
433 Retrieve an experiment by experiment name from the backend store
434
(...)
460     Lifecycle_stage: active
461 """
--> 462 return self._tracking_client.get_experiment_by_name(name)
File ~/DevEnv/miniconda3/envs/quant_py38_arm/lib/python3.8/site-packages/mlflow/tracking/_tracking_service/client.py:167, in TrackingServiceClient.get_experiment_by_name(self, name)
163 """
164 :param name: The experiment name.
165 :return: :py:class:mlflow.entities.Experiment
166 """
--> 167 return self.store.get_experiment_by_name(name)
File ~/DevEnv/miniconda3/envs/quant_py38_arm/lib/python3.8/site-packages/mlflow/store/tracking/abstract_store.py:76, in AbstractStore.get_experiment_by_name(self, experiment_name)
67 """
68 Fetch the experiment by name from the backend store.
69 This is a base implementation using list_experiments, derived classes may have
(...)
74 :return: A single :py:class:mlflow.entities.Experiment object if it exists.
75 """
---> 76 for experiment in self.list_experiments(ViewType.ALL):
77     if experiment.name == experiment_name:
File ~/DevEnv/miniconda3/envs/quant_py38_arm/lib/python3.8/site-packages/mlflow/store/tracking/file_store.py:261, in FileStore.list_experiments(self, view_type, max_results, page_token)
259 try:
260     # trap and warn known issues, will raise unexpected exceptions to caller
--> 261     experiment = self._get_experiment(exp_id, view_type)
262     if experiment:
File ~/DevEnv/miniconda3/envs/quant_py38_arm/lib/python3.8/site-packages/mlflow/store/tracking/file_store.py:337, in FileStore._get_experiment(self, experiment_id, view_type)
336 self._check_root_dir()
--> 337 _validate_experiment_id(experiment_id)
338 experiment_dir = self._get_experiment_path(experiment_id, view_type)
File ~/DevEnv/miniconda3/envs/quant_py38_arm/lib/python3.8/site-packages/mlflow/utils/validation.py:267, in _validate_experiment_id(exp_id)
266 if exp_id is not None and _EXPERIMENT_ID_REGEX.match(exp_id) is None:
--> 267     raise MlflowException(
268         "Invalid experiment ID: '%s'" % exp_id, error_code=INVALID_PARAMETER_VALUE
269     )
MlflowException: Invalid experiment ID: '.ipynb_checkpoints'
The above exception was the direct cause of the following exception:
ValueError                                Traceback (most recent call last)
File ~/DevEnv/miniconda3/envs/quant_py38_arm/lib/python3.8/site-packages/qlib/workflow/expm.py:189, in ExpManager._get_or_create_exp(self, experiment_id, experiment_name)
187 try:
188     return (
--> 189         self._get_exp(experiment_id=experiment_id, experiment_name=experiment_name),
190         False,
191     )
192 except ValueError:
File ~/DevEnv/miniconda3/envs/quant_py38_arm/lib/python3.8/site-packages/qlib/workflow/expm.py:397, in MLflowExpManager._get_exp(self, experiment_id, experiment_name)
396 except MlflowException as e:
--> 397     raise ValueError(
398         "No valid experiment has been found, please make sure the input experiment name is correct."
399     ) from e
ValueError: No valid experiment has been found, please make sure the input experiment name is correct.
During handling of the above exception, another exception occurred:
MlflowException                           Traceback (most recent call last)
Input In [6], in <cell line: 51>()
48 dataset = init_instance_by_config(task["dataset"])
50 # start exp to train model
---> 51 with R.start(experiment_name="train_model"):
52     R.log_params(**flatten_dict(task))
53     model.fit(dataset)
File ~/DevEnv/miniconda3/envs/quant_py38_arm/lib/python3.8/contextlib.py:113, in _GeneratorContextManager.enter(self)
111 del self.args, self.kwds, self.func
112 try:
--> 113     return next(self.gen)
114 except StopIteration:
115     raise RuntimeError("generator didn't yield") from None
File ~/DevEnv/miniconda3/envs/quant_py38_arm/lib/python3.8/site-packages/qlib/workflow/init.py:69, in QlibRecorder.start(self, experiment_id, experiment_name, recorder_id, recorder_name, uri, resume)
25 @contextmanager
26 def start(
27     self,
(...)
34     resume: bool = False,
35 ):
36     """
37     Method to start an experiment. This method can only be called within a Python's with statement. Here is the example code:
38
(...)
67         whether to resume the specific recorder with given name under the given experiment.
68     """
---> 69     run = self.start_exp(
70         experiment_id=experiment_id,
71         experiment_name=experiment_name,
72         recorder_id=recorder_id,
73         recorder_name=recorder_name,
74         uri=uri,
75         resume=resume,
76     )
77     try:
78         yield run
File ~/DevEnv/miniconda3/envs/quant_py38_arm/lib/python3.8/site-packages/qlib/workflow/init.py:125, in QlibRecorder.start_exp(self, experiment_id, experiment_name, recorder_id, recorder_name, uri, resume)
84 def start_exp(
85     self,
86     *,
(...)
92     resume=False,
93 ):
94     """
95     Lower level method for starting an experiment. When use this method, one should end the experiment manually
96     and the status of the recorder may not be handled properly. Here is the example code:
(...)
123     An experiment instance being started.
124     """
--> 125     return self.exp_manager.start_exp(
126         experiment_id=experiment_id,
127         experiment_name=experiment_name,
128         recorder_id=recorder_id,
129         recorder_name=recorder_name,
130         uri=uri,
131         resume=resume,
132     )
File ~/DevEnv/miniconda3/envs/quant_py38_arm/lib/python3.8/site-packages/qlib/workflow/expm.py:339, in MLflowExpManager.start_exp(self, experiment_id, experiment_name, recorder_id, recorder_name, uri, resume)
337 if experiment_name is None:
338     experiment_name = self._default_exp_name
--> 339 experiment, _ = self._get_or_create_exp(experiment_id=experiment_id, experiment_name=experiment_name)
340 # Set up active experiment
341 self.active_experiment = experiment
File ~/DevEnv/miniconda3/envs/quant_py38_arm/lib/python3.8/site-packages/qlib/workflow/expm.py:202, in ExpManager._get_or_create_exp(self, experiment_id, experiment_name)
200 if pr.scheme == "file":
201     with FileLock(os.path.join(pr.netloc, pr.path, "filelock")):  # pylint: disable=E0110
--> 202         return self.create_exp(experiment_name), True
203 # NOTE: for other schemes like http, we double check to avoid create exp conflicts
204 try:
File ~/DevEnv/miniconda3/envs/quant_py38_arm/lib/python3.8/site-packages/qlib/workflow/expm.py:362, in MLflowExpManager.create_exp(self, experiment_name)
360     if e.error_code == ErrorCode.Name(RESOURCE_ALREADY_EXISTS):
361         raise ExpAlreadyExistError() from e
--> 362     raise e
364 experiment = MLflowExperiment(experiment_id, experiment_name, self.uri)
365 experiment._default_name = self._default_exp_name
File ~/DevEnv/miniconda3/envs/quant_py38_arm/lib/python3.8/site-packages/qlib/workflow/expm.py:358, in MLflowExpManager.create_exp(self, experiment_name)
356 # init experiment
357 try:
--> 358     experiment_id = self.client.create_experiment(experiment_name)
359 except MlflowException as e:
360     if e.error_code == ErrorCode.Name(RESOURCE_ALREADY_EXISTS):
File ~/DevEnv/miniconda3/envs/quant_py38_arm/lib/python3.8/site-packages/mlflow/tracking/client.py:507, in MlflowClient.create_experiment(self, name, artifact_location, tags)
464 def create_experiment(
465     self,
466     name: str,
467     artifact_location: Optional[str] = None,
468     tags: Optional[Dict[str, Any]] = None,
469 ) -> str:
470     """Create an experiment.
471
472     :param name: The experiment name. Must be unique.
(...)
505         Lifecycle_stage: active
506     """
--> 507     return self._tracking_client.create_experiment(name, artifact_location, tags)
File ~/DevEnv/miniconda3/envs/quant_py38_arm/lib/python3.8/site-packages/mlflow/tracking/_tracking_service/client.py:182, in TrackingServiceClient.create_experiment(self, name, artifact_location, tags)
179 _validate_experiment_name(name)
180 _validate_experiment_artifact_location(artifact_location)
--> 182 return self.store.create_experiment(
183     name=name,
184     artifact_location=artifact_location,
185     tags=[ExperimentTag(key, value) for (key, value) in tags.items()] if tags else [],
186 )
File ~/DevEnv/miniconda3/envs/quant_py38_arm/lib/python3.8/site-packages/mlflow/store/tracking/file_store.py:321, in FileStore.create_experiment(self, name, artifact_location, tags)
319 def create_experiment(self, name, artifact_location=None, tags=None):
320     self._check_root_dir()
--> 321     self._validate_experiment_name(name)
322     # Get all existing experiments and find the one with largest numerical ID.
323     # len(list_all(..)) would not work when experiments are deleted.
324     experiments_ids = [
325         int(e.experiment_id)
326         for e in self.list_experiments(ViewType.ALL)
327         if e.experiment_id.isdigit()
328     ]
File ~/DevEnv/miniconda3/envs/quant_py38_arm/lib/python3.8/site-packages/mlflow/store/tracking/file_store.py:303, in FileStore._validate_experiment_name(self, name)
299 if name is None or name == "":
300     raise MlflowException(
301         "Invalid experiment name '%s'" % name, databricks_pb2.INVALID_PARAMETER_VALUE
302     )
--> 303 experiment = self.get_experiment_by_name(name)
304 if experiment is not None:
305     if experiment.lifecycle_stage == LifecycleStage.DELETED:
File ~/DevEnv/miniconda3/envs/quant_py38_arm/lib/python3.8/site-packages/mlflow/store/tracking/abstract_store.py:76, in AbstractStore.get_experiment_by_name(self, experiment_name)
66 def get_experiment_by_name(self, experiment_name):
67     """
68     Fetch the experiment by name from the backend store.
69     This is a base implementation using list_experiments, derived classes may have
(...)
74     :return: A single :py:class:mlflow.entities.Experiment object if it exists.
75     """
---> 76     for experiment in self.list_experiments(ViewType.ALL):
77         if experiment.name == experiment_name:
78             return experiment
File ~/DevEnv/miniconda3/envs/quant_py38_arm/lib/python3.8/site-packages/mlflow/store/tracking/file_store.py:261, in FileStore.list_experiments(self, view_type, max_results, page_token)
258 for exp_id in rsl:
259     try:
260         # trap and warn known issues, will raise unexpected exceptions to caller
--> 261         experiment = self._get_experiment(exp_id, view_type)
262         if experiment:
263             experiments.append(experiment)
File ~/DevEnv/miniconda3/envs/quant_py38_arm/lib/python3.8/site-packages/mlflow/store/tracking/file_store.py:337, in FileStore._get_experiment(self, experiment_id, view_type)
335 def _get_experiment(self, experiment_id, view_type=ViewType.ALL):
336     self._check_root_dir()
--> 337     _validate_experiment_id(experiment_id)
338     experiment_dir = self._get_experiment_path(experiment_id, view_type)
339     if experiment_dir is None:
File ~/DevEnv/miniconda3/envs/quant_py38_arm/lib/python3.8/site-packages/mlflow/utils/validation.py:267, in _validate_experiment_id(exp_id)
265 """Check that experiment_idis a valid string or None, raise an exception if it isn't."""
266 if exp_id is not None and _EXPERIMENT_ID_REGEX.match(exp_id) is None:
--> 267     raise MlflowException(
268         "Invalid experiment ID: '%s'" % exp_id, error_code=INVALID_PARAMETER_VALUE
269     )
MlflowException: Invalid experiment ID: '.ipynb_checkpoints'
To Reproduce
Steps to reproduce the behavior:

just rerun the code in my envirment

Expected Behavior

Screenshot

Environment
Note: User could run cd scripts && python collect_info.py all under project directory to get system information
and paste them here directly.
Darwin
arm64
macOS-12.2.1-arm64-arm-64bit
Darwin Kernel Version 21.3.0: Wed Jan  5 21:37:58 PST 2022; root:xnu-8019.80.24~20/RELEASE_ARM64_T6000
Python version: 3.8.11 (default, Jul 29 2021, 14:57:32)  [Clang 12.0.0 ]
Qlib version: <IP_ADDRESS>
numpy==1.22.3
pandas==1.4.2
scipy==1.8.0
requests==2.25.1
sacred==0.8.2
python-socketio==5.5.2
redis==4.2.2
python-redis-lock==3.7.0
schedule==1.1.0
cvxpy==1.1.18
hyperopt==0.1.2
fire==0.4.0
statsmodels==0.13.2
xlrd==2.0.1
plotly==5.6.0
matplotlib==3.5.1
tables==3.7.0
pyyaml==6.0
mlflow==1.24.0
tqdm==4.61.2
loguru==0.6.0
lightgbm==3.3.2
tornado==6.1
joblib==1.1.0
fire==0.4.0
ruamel.yaml==0.17.21
Additional Notes
I installed qlib from source, and my conda env is the version for arm64

And, I tried this, failed

name: Unit tests with Pytest
run: |
cd tests
python -m pytest . --durations=10

The error message:
======================================= test session starts ========================================
platform darwin -- Python 3.8.11, pytest-7.1.1, pluggy-1.0.0
rootdir: /Users/yzwu/Programming/Python-yz/quant_arm64/qlib-main
plugins: anyio-3.5.0
collected 42 items
test_all_pipeline.py Fatal Python error: Bus error
Thread 0x0000000179007000 (most recent call first):
File "/Users/yzwu/DevEnv/miniconda3/envs/quant_py38_arm/lib/python3.8/threading.py", line 302 in wait
File "/Fatal Python error: USegmentation faults
ers/yzwu/DevEnv/miniconda3/e[2]    66519 bus error  python -m pytest . --durations=10

I tried to reproduce the problem on my Mac, I installed the latest version of qlib in a clean environment, ran pytest . /tests and found everything works fine. I suggest you try it again after comparing your environment.
By the way, my MacOS version is 12.2.1, which is the same as your system version.
Thank you for the issue.


MongoDB ReplicaSet TLS support

Hey there,
How can we add TLS support via secrets to the MongoDB replicaset chart?
Or is it actually possible?
Best,
Sascha

It would certainly be possible. I'll be happy to review a PR for this.

Hm, I had a look at the implementation and I guess we need to create the certs for the hosts during the init of the replicaset. I will see what I can do here.


5218 Software Robot Tuning

Beginning tuning on 5218 software robot for the season.

9/21/24 On Saturday we integrated imu into Mecanum drive and will begin to continue TuningOpModes on Monday


Would like to change the folder name collage to college and extras

would add some more colleges to the list, specially engineering colleges

Go ahead @JotiradityaB

Thanks


Delete extraneous SigmaMigration method

See https://github.com/AlgebraicJulia/Catlab.jl/issues/903

I will go ahead and merge since we haven't heard back from the OP. If problems persist we can revisit.


Mark scheme option config as required

Scheme actions require a config value.
https://github.com/search?utf8=✓&q=path%3ASources%2FProjectSpec+repo%3Ayonaskolb%2FXcodeGen+"atKeyPath+config"&type=Code

I agree that it should not be mandatory to define each build action.
I think both this change should happen, and the change of wording you suggest.
I see that it is strange to have a required field within an optional field, but there is sort of precedent for this. The top level schemes field is optional, but the build field within it is marked required. My recent addition of pre- and post-actions mark the script field as required even though it's within optional fields.
The reason I opened this pull request is because on a couple occasions recently I have had to debug why my build actions weren't showing up in the generated Xcode project, and in those cases it was because I had left out the config fields.
Perhaps the solution is making this a runtime warning or error, like:

Ignoring (build|run|test|...) action in  scheme because it's missing a config field.

Yeah I think both those changes should be made 👍

make config optional
make description All build actions can be set to use a certain config. If a config, or the build action itself, is not defined the first configuration found of a certain type will be used, depending on the type:

I agree it's strange to have a required field in a optional property. JSONUtilities doesn't help there either because optional properties ignore their internal errors (which is why you weren't seeing any errors in your case). The move to Decodable which has an explicit decodeIfPresent will solve that issue, as it will still throw errors if the property is present but malformed.
The other cases you mentioned are slightly different as they are either lists of things, or don't have defaults. (you need assign a script to an action). In this case config has a default (the first found config of the required type) which is a good default for people who have just debug and release (or don't even define any configs and get the defaults)

make config optional

so change the code so that it's optional and finds the default as you've described?

Yep. All that’s needed in the generator side should be an extra ?

I updated the code and documentation. Let me know if this looks like what you expected.


adds default date and time to new distribution form to fix 3466

Resolves #3466
Description
Adds a default Time.now day and time to the new distributions form to fix the bug where the wrong date is saved if a time is not entered
Also changes the label wording
Type of change

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

How Has This Been Tested?

@cielf I changed the label, but I'm not sure if that's the best wording, seems a little clunky
I'm not sure of a good test to add for this or if it needs one?
Thank you for your guidance

Well, the original problem is that if you gave a date (that wasn't now) in a new distribution, it did not persist.   That's definitely testable-for.

Hi @cielf! yes, I can but I'm not sure if this is what you want. The problem is that if the distribution is created with a date and no time it saves the current date and time. I wasn't able to figure out where that was happening. This solution just auto fills the time in the form so the user doesn't choose a date without a time. Basically keeping the user from creating the bug rather than fixing it. If that works for you I can write a test to make sure the time is loaded in to the form and it should be good to go.

It appears to me that issued_at is getting set to created_at in "initialize_issued_at" in the module IssuedAt,  because the issued_at is not being passed as a parameter if it doesn't have the time!
( I know  -- WHAT !!??)

I can see two plausible ways to approach fixing this -- one would be to have the issued_at be the date, and have a separate pickup time -- and the other is to default a time.   If we were to default the time,  the question would be -- current time or midnight -- I think midnight makes a lot of sense for people who really just want a date -- who don't have specific times set for each pickup -- indeed, I think we have some specific code here and there for the midnight case.
@dorner  Do you have something to add from a technical point of view?

It's very odd that if no time is given that the date isn't sent to the backend. My first instinct would be to debug to try and see where and why that's happening. Having said that, yes, I would probably say let's default to midnight if no time is provided.

Yes, very odd -- I don't think the use case of people not providing the time is weird, and that it should be taken care of.   @cotabas -- are you up for the adventure of figuring out why that is happening?

yeah @cielf I'll try to figure it out

Ok, I've figured out what is happening but I'm not sure the best way to fix it, maybe you have a good idea? @cielf
There is an issued_at concern app/models/concerns/issued_at.rb that checks if issued_at exists and if it doesn't, it sets issued_at to the created_at time.
In the form issued_at is a datetime and if a time isn't chosen it sends nothing (then the concern sets it to the created_at/current time)
So I'm not sure where to apply logic to this since the date isn't sent if a time isn't chosen
I think setting the issued_at form field in the new distribution view to midnight would be an easy solution

Yeah,  I'm still puzzled as to why  it sends nothing if a time isn't chosen -- I think that it should default to midnight!  But since it doesn't, let's default it to midnight in new ourselves and see if that carries through.

@cotabas Yeah, I'm still puzzled as to why it sends nothing if a time isn't chosen -- I think that it should default to midnight! But since it doesn't, let's default it to midnight in new ourselves and see if that carries through.

Sorry -- I've been buried -- will try to get to this RSN.

Hello @cielf
Well, it looks like I set the default to today at midnight..
I'll change it to tomorrow and it should be working correctly

Alas, no.

by which I mean if you actually blank out the time it doesn't work

There's an issued_at concern, it sets issued_at to created_at if issued_at doesn't exist..
I'm not sure what I was thinking the first time I looked at this, I even mentioned the issued_at concern above..
I'm sorry for making this harder than it needed to be..
I think this is good now, let me know @cielf

I pushed a commit that changes my method of setting the default so that it fits with the current tests, and passes all the tests
I'm not sure why it isn't showing up here, I can see it on my fork. I'll check back later today, hopefully it'll just show up

Ok, sorry for all the commits.
Apparently there are a lot of tests that create distributions without issued_at and expect them to be the same day.
I changed the default to end of day (11:59:59) instead of the beginning of the next day (12:00:00)
Let me know if this works for you @cielf

Hey @cielf , Sorry for the slow reply, it's been a weird week.
If you look in the logs the form sends issued_at as nil in the params if there's no time. I don't know how to change it before that.
It's nil if you check it in the model, controller, or concern
This "solution" just makes it so the user would have to go out of their way and delete the time before they see this unexpected behavior

Is there a language/framework in which working with dates and times isn't just a right royal pain? g    From a functional point of view, I'm at the point of  "ok.  This is better than what we have.  Let's move on"     However,  I'm also going to put something in our inbox of things to look at that will point at this for investigation.

Thanks for the contribution!