Streamdiffusion compatibility?

In Streamdiffusion, TAESD is used like this:
stream.vae = AutoencoderTiny.from_pretrained("madebyollin/taesd").to(device=pipe.device, dtype=pipe.dtype)
then, the actual usage
x_output = stream(input_image)

output_image = postprocess_image(x_output, output_type="pil")[0]
output_image= np.array(output_image)
#the rest of the code

But TAESDV is different from TAESD and cannot work like this
for instance, Streamdiffusion's pipeline.py contains this:
    def decode_image(self, x_0_pred_out: torch.Tensor) -> torch.Tensor:
        output_latent = self.vae.decode(
            x_0_pred_out / self.vae.config.scaling_factor, return_dict=False
        )[0]
        return output_latent

but taesdv.py contains this
    def decode_frame(self, x, mem=None):

        assert x.ndim == 4 and x.shape[1] == 4, f"Could not decode frame of shape {x.shape}"
        out_mem, in_mem = [], None if mem is None else list(mem)
        for b in self.decoder:
            if isinstance(b, MemBlock):
                out_mem.append(x)
                x = b(x, x * 0 if in_mem is None else in_mem.pop(0))
            else:
                x = b(x)
        return DecoderResult(x, out_mem)

Streamdiffusion calls the decode method but TAESDV has decode_frame , and there is also the added 'mem' argument
I am investigating how to make TAESDV work with Streamdiffusion, can anyone help?

I think you can probably solve this by wrapping TAESDV to make it behave more like an AutoencoderTiny
import torch.nn as nn
from taesdv import TAESDV
import torch

class DotDict(dict):
    def __getattr__(self, name):
        if name in self:
            return self[name]
        raise AttributeError()
    __setattr__ = dict.__setitem__

class DiffusersStyleStatefulTAESDVWrapper(nn.Module):
    def __init__(self):
        super().__init__()
        self.dtype = torch.float16
        self.taesdv = TAESDV().to(self.dtype).eval().requires_grad_(False)
        self.mem = None
        self.config = DotDict(scaling_factor=1.0)
    def encode(self, x):
        return DotDict(latents=self.taesdv.encode_frame(x.mul(0.5).add(0.5)))
    def decode(self, x, return_dict=None):
        print("decoding frame with taesdv")
        frame, self.mem = self.taesdv.decode_frame(x, mem=self.mem)
        return (frame.mul(2).sub_(1),)

stream.stream.vae = DiffusersStyleStatefulTAESDVWrapper().to("cuda")

(This assumes that the decode calls will happen in per-frame order, which I think is the case for most StreamDiffusion workflows? But if not, you'd need to manage the mem more carefully)

Thank you, this seems to work, I am using Streamdiffusion with my webcam , so it is indeed working with one frame at a time
Now the output video stream is marginally less flickery when there is movement in the webcam , compared to using TAESD...
But the consistency is still very poor for moving objects on camera
Is it possible to do a sort of 'motion blur' for the latent image to maintain as much consistency as possible?

@ccarmatic I think https://github.com/Jeff-LiangF/streamv2v may reduce flickering (at least for mostly-static scenes), and there are some other works like https://live2diff.github.io which also claim improvement.
I have been waiting for someone to just finetune a proper causal video diffusion model (like a "previous-frames controlnet" for SD or something) which should be the real solution, but AFAICT no one has done so yet :/

The ultimate solution would be a model trained on actual videos , which not only takes the video frames as training data, but also the motion vectors as well
So during the inference, it will take 2 inputs... The current frame from the video feed, as well as the motion vectors calculated between the current and previous frames ....The motion vectors can be generated by i.e. one of OpenCV's optical flow solutions
Modern Nvidia GPU's have dedicated hardware for calculating motion vectors , accessible by i.e. cv2.cuda.NvidiaOpticalFlow_2_0 which is what I use in my Python script and it can calculate a dense optical field basically instantly compared to how long it takes the diffuser to finish one frame
But failing that, my other idea was that, based on my understanding, currently the diffuser is making a whole new frame every time from scratch... What if it can re-use some data from the previous frame, this would save some processing as well as maintain consistency across frames

But more relevant to TAESDV, is there a way we can increase the 'weight' or the 'influence' of the mem object? Such that the previous frame will have a bigger influence on the next frame
Also in my Python script, in my attempt to reduce the flickering of the output video feed, I am blending the output frame back into the input frame at a controllable ratio using cv2.addWeighted  ... What I found was that this created a feedback loop where alternate frames are diverging from one another , causing even greater flickering across the whole frame... So the solution was to blend across 2 previous frames, basically creating a rudimentary 'motion blur' input which creates a flicker-free output from the diffuser
Perhaps the same can hold true for for the mem object? To hold 2 previous frame's worth of 'residual' data, and because they are not direct image data, you can do more than simply calculate their weighted average - they can be applied at different points in the denoising process, which should lead to some interesting results...


How to deserialize from JSON?

Say you are exposing some REST endpoint and the client POSTs you a modified entity, is it possible to deserialize it directly in a Ktorm object? If so, can you update the entity on the database as well?

Ktorm provides a Jackson extension that supports serializing entity objects into JSON format and parsing JSONs as entity objects. You need to add it to your dependencies:
compile "me.liuwj.ktorm:ktorm-jackson:${ktorm.version}"

Then create an ObjectMapper and register the extension to it:
val objectMapper = ObjectMapper()
objectMapper.registerModule(KtormModule())

Now you can use this mapper to deserialize entity objects from JSONs:
val employee = objectMapper.readValue(json, Employee::class.java)

However, updating the deserialized entity to the database is not supported. That's because Ktorm only saves entities’ property values when serialization, any other data that used to track entity status are lost (marked as transient). So we can not obtain an entity object from one system, then flush its changes into the database in another system.
If you try to call the flushChanges function on a deserialized entity, you will get an exception:
java.lang.IllegalStateException: The entity is not associated with any table yet.

Is there any way to automate the recovery of the entity by id and update its fields accordingly to the JSON and return the object?

That would be amazing for REST repositories, espiacially for ktor

Sorry, I can't get your point. Could you explain it in detail?

Here's what i have in mind. Given a JSON string containing at least the ID:

fetch the entity from the database
update all fields present in the JSON string
return the already updated object

That would turn the very act of JSON deserialization a convenient way to update data on the database. That's basically what Spring does when creating a rest repositories.

I wrote an extension function which might help you:
fun <E : Entity<E>> Table<E>.updateColumnsByEntity(entity: E): E {
    val primaryKey = this.primaryKey ?: error("Table $tableName doesn't have a primary key.")

    val primaryKeyName = (primaryKey.binding as NestedBinding).properties[0].name
    val primaryKeyValue = entity[primaryKeyName] ?: error("The value of the primary key is absent.")

    val entityFromDb = this.findById(primaryKeyValue) ?: error("Entity not found for id: $primaryKeyValue")

    for ((name, value) in entity.properties) {
        if (name != primaryKeyName && value != null) {
            entityFromDb[name] = value
        }
    }

    entityFromDb.flushChanges()
    return entityFromDb
}

Assuming we have a Departments table which is given as follows:
interface Department : Entity<Department> {
    val id: Int
    var name: String
    var location: String
}

object Departments : Table<Department>("t_department") {
    val id by int("id").primaryKey().bindTo { it.id }
    val name by varchar("name").bindTo { it.name }
    val location by varchar("location").bindTo { it.location }
}

The usage of that extension function is simple (using Spring MVC):
@RestController
class DepartmentController {

    @PostMapping(path = ["/departments"])
    fun updateDepartment(@RequestBody department: Department): Department {
        return Departments.updateColumnsByEntity(department)
    }
}

You can copy that function to your project. Hope this might help you.

我觉得你写的根据主键update这个扩展方法应该可以框架层面包装下，insert也可以这么包装。spring在json接收为entity对象后可以直接操作确实很方便

Then create an ObjectMapper and register the extension to it:
val objectMapper = ObjectMapper()
objectMapper.registerModule(KtormModule())
Now you can use this mapper to deserialize entity objects from JSONs:
val employee = objectMapper.readValue(json, Employee::class.java)
我按照你的这个方式
报错了。原因是因为 我的这个json里面的时间是特出处理过的，

请教下 我可以怎么能针对这种的时间字符串自定义parse逻辑吗？

@vincentlauvlwj ti be sure I understood correctly, I can deserialize the entity using jackson, then feed the entity to the extension method to update its fields on his respective table and return it. Right?

@lamba92 Yes, you are right.

@yuzd 同学，你这题超纲了。。。
理论上你这个问题与 Ktorm 无关，应该去找找 Jackson 的相关文档，或者在 Jackson 的社区上提问，我只是顺手回答一下：
val deserializer = object : JsonDeserializer<LocalDateTime>() {
    override fun deserialize(p: JsonParser, ctxt: DeserializationContext): LocalDateTime {
        val str = p.valueAsString // Date(1565089204000-0000)
        TODO("在这里把你的字符串解析成 LocalDateTime")
    }
}

objectMapper.registerModule(object : SimpleModule() {
    init {
        addDeserializer(LocalDateTime::class.java, deserializer)
    }
})

上面这段代码在 objectMapper 中注册了一个简单的插件，这个插件只包含了一个针对 LocalDateTime 的反序列化器，你把它 copy 到你的项目中，然后在 TODO 的地方按照你的格式自己把字符串解析成 LocalDateTime 对象就好了

非常感谢大神教育，膜拜膜拜。谢谢


Set the HTTPS server variables as lower case since .NET Framework expects this

[x] You've read the Contributor Guide and Code of Conduct.
[x] You've included unit tests for your change, where applicable.
[x] You've included inline docs for your change, where applicable.
[x] There's an open issue for the PR that you are making. If you'd like to propose a new feature or change, please open an issue to discuss the change or find an existing issue.

PR Title
Set the HTTPS server variables as lower case since .NET Framework expects this
PR Description
System.Web.WorkerRequest checks if the HTTPS server variable equals "on" to determine if a request IsSecure. This check is case sensitive. When this check fails the Request.Url is returned without https.
https://referencesource.microsoft.com/#System.Web/Hosting/IIS7WorkerRequest.cs,abb2c5b4bea0c0aa
Addresses #125

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


Heap Sort

Overview

Write code for Heap Sort in C++.
Add that code into a directory named "Sorting", if the directory doesn't exist, create one and add the code file.

Please take care of these things while creating the pull request.

The code file was added to the correct directory.
Code quality looks good.
The programming language used is the same as mentioned in the issue.

please assign me this issue

Hey @vashuteotia123, I am interested to contribute to this task. Can you please assign me this issue?

Hey @vashuteotia123, I have raised the PR for this issue. Kindly review my PR and please merge the same if you find it appropriate. Please provide your valuable feedback:)

#62


doc: add doc writing guides w/common usages

I've collected some of the common issues encountered with doc reviews
into a new contributing document, and included use of the
Zephyr-specific extension for generating code building examples.
Updated conf.py and created an external list of substitutions making it
easier to manage them without editing the sphinx conf file (and
documented this).
Tweaked the comments in the application.py extension python code to
render better in the generated doc that extracts these comments (keeps
the documentation in the python code too to ease maintenance when
updates are made).
Updated the sample template to mention use of this sphinx extension.
fixes: #6831
fixes: #6811
Signed-off-by: David B. Kinder<EMAIL_ADDRESS>

Codecov Report

Merging #7353 into master will not change coverage.
The diff coverage is n/a.

@@           Coverage Diff           @@
##           master    #7353   +/-   ##
=======================================
  Coverage   55.11%   55.11%
=======================================
  Files         474      474
  Lines       51767    51767
  Branches     9930     9930
=======================================
  Hits        28530    28530
  Misses      19285    19285
  Partials     3952     3952

Continue to review full report at Codecov.

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

@mbolivar I shouldn't do documentation in a rush :)  Thanks for all the comments.  I found a few more issues when I went back through it again at a slower pace.


OUser.hasRole() does not work correctly  in case of child ORole class

OrientDB Version: 2.2.30, 3.0.3
There is such line in code: https://github.com/orientechnologies/orientdb/blob/develop/core/src/main/java/com/orientechnologies/orient/core/metadata/security/OSecurityShared.java#L319
  public ORole getRole(final OIdentifiable iRole) {
    final ODocument doc = iRole.getRecord();
    if (doc != null && "ORole".equals(doc.getClassName()))
      return new ORole(doc);

    return null;
  }

As you can see, there is explicit check for className - it should be equal ORole. But if you extend ORole and use for your project child class: it will lead to bug when hasRole doesn't work.

Hi @PhantomYdn
Thank you for reporting, I'm fixing it now
Thanks
Luigi

Hi @PhantomYdn
I just pushed a fix, now it should be OK.
The fix will be released with v 2.2.37 and v 3.0.3
Thanks
Luigi


[Recording Oracle] - Fixed lint errors

Description
Fixed lint errors.
Summary of changes
yarn lint --fix was applied.
How test the changes
yarn lint

@eugenvoronov I would create a new PR from develop, you have many conflicts here. If you do it have in mind this https://github.com/humanprotocol/human-protocol/pull/734#pullrequestreview-1554301084


fix(ci): repository tokens do not have access to open pull requests

Background
Our manual CI job to update import paths is failing because it does not have permissions to push and open a pull request:
https://github.com/osmosis-labs/osmosis/runs/7642666405?check_suite_focus=true
This started happening after updating our tokens for security reasons:
https://github.com/osmosis-labs/osmosis/pull/2115#issuecomment-1187956054
We need to make sure that COMMIT_TO_BRANCH token has permissions to push and open a PR.
Acceptance Criteria

COMMIT_TO_BRANCH has permissions to push and open a PR
https://github.com/osmosis-labs/osmosis/actions/workflows/import_paths.yml passes

@ValarDragon could you look into this please

This is fixed


Fill in the namespace for all resource specs.

The use case for this is subtle, but the authn/authz APIs that can be
customized for any given Kubernetes cluster, are only given the
resource object's spec as-is. If the namespace is not provided in the
spec, the model sent around to these authentication endpoints won't know
what the namespace is on the resource, which can be critical information
for them to make decisions in admission control. The API server itself
knows the namespace since it's encoded in the request URI,but other
components that receive the resource object model need this information
to be provided in the spec.
(cherry picked from commit 388dfc7fd9b14812cf05a42e33ed39a65df2312f)

Worked around this internally


[BUG]Rancher2.7.0 manages downstream clusters ClusterInformation: connection is unauthorized: Unauthorized

Rancher Server Setup

Rancher version:
Installation option (Docker install/Helm Chart):Helm Chart

If Helm Chart, Kubernetes Cluster and version (RKE1, RKE2, k3s, EKS, etc):RKE2

Proxy/Cert Details:

Information about the Cluster

Kubernetes version:
Cluster Type (Local/Downstream):Downstream

If downstream, what type of cluster? (Custom/Imported or specify provider for Hosted/Infrastructure Provider):Imported RKE2

User Information

What is the role of the user logged in? (Admin/Cluster Owner/Cluster Member/Project Owner/Project Member/Custom)

If custom, define the set of permissions:Admin

Describe the bug

Downstream cluster rotation certificate updated kubeconfig, rancher operation downstream cluster appears

the downstream cluster is REK2 created in advance, and the cluster is imported through rancher cluster management
what do I need to do to get rancher back in control of the downstream cluster

I found a reason:
/etc/cni/net.d/calico-kubeconfig
is not updated after RKE2 cluster certificate rotation

@winterallen Having the same problem. Did you find a workaround?

Yes, I successfully updated "/etc/cni/net.d/calico-kubeconfig" by upgrading the downstream RKE2 cluster version to v1.24.7+rke2r1, and the cluster returned to normal, but RancherUI prompts "Failed to communicate with API server during namespace check: Unauthorized", you can try to just upgrade the calico version in the test environment, and observe whether "/etc/cni/net.d/calico-kubeconfig" is updated

@winterallen Having the same problem. Did you find a workaround?

Yes, I successfully updated "/etc/cni/net.d/calico-kubeconfig" by upgrading the downstream RKE2 cluster version to v1.24.7+rke2r1, and the cluster returned to normal, but RancherUI prompts "Failed to communicate with API server during namespace check: Unauthorized", you can try to just upgrade the calico version in the test environment, and observe whether "/etc/cni/net.d/calico-kubeconfig" is updated

RKE2 version v1.21.5+rke2r2 when not upgraded


Pause or Stop YouTube Video on Modal Close

I'm having a really hard time getting this done. Can you point me in the right direction?

You can do that by defining what to do in the onClose handler. Check the documentation here: https://micromodal.now.sh/#configuration

If anyone needs to stop videos from playing on modal close:
MicroModal.init({
  onClose: modal => {
      modal.querySelectorAll('.d3-youtube-iframe').forEach(iframe => {
          iframe.setAttribute('src', iframe.getAttribute('src'));
      });
  },
});


EmbedThumbnailPPError in youtube-dl-2021-02-10

Checklist

[x] I'm reporting a broken site support
[x] I've verified that I'm running youtube-dl version 2021.02.10
[x] I've checked that all provided URLs are alive and playable in a browser
[x] I've checked that all URLs and arguments with special characters are properly quoted or escaped
[x] I've searched the bugtracker for similar issues including closed ones

Verbose log

[debug] System config: []
[debug] User config: []
[debug] Custom config: []
[debug] Command-line args: ['--embed-thumbnail', '-o', '%(title)s-%(uploader)s.%(ext)s', '-x', '-f', 'bestaudio[ext=m4a]/bestaudio[ext=opus]', '--audio-quality', '0', 'https://www.youtube.com/watch?v=vQVHlfgwYv8', '-v']
[debug] Encodings: locale UTF-8, fs utf-8, out utf-8, pref UTF-8
[debug] youtube-dl version 2021.02.10
[debug] Python version 3.8.6 (CPython) - Linux-5.8.0-26-lowlatency-x86_64-with-glibc2.32
[debug] exe versions: ffmpeg 4.3.1, ffprobe 4.3.1
[debug] Proxy map: {}
[youtube] vQVHlfgwYv8: Downloading webpage
[youtube] vQVHlfgwYv8: Downloading thumbnail ...
[youtube] vQVHlfgwYv8: Writing thumbnail to: Kegare Naki Yume - Asriel-AlonE illuioN.webp
[debug] Invoking downloader on 'https://r4---sn-8xgp1vo-ab5l.googlevideo.com/videoplayback?expire=1613359671&ei=15UpYKHYFeHkgwOMurvIDA&ip=2600%3A1002%3Ab12b%3Ac0ba%3A60ef%3Ab5e7%3A6550%3Abeb3&id=o-AGgsPlK6Eqlao9htxeMOp4xP-p7uuALyg12XAP3wt5DJ&itag=140&source=youtube&requiressl=yes&mh=Mz&mm=31%2C29&mn=sn-8xgp1vo-ab5l%2Csn-p5qlsnrl&ms=au%2Crdu&mv=m&mvi=4&pl=44&initcwndbps=427500&vprv=1&mime=audio%2Fmp4&ns=s_Plxu95rd6RXm1Hp6lK2qQF&gir=yes&clen=4830716&dur=304.111&lmt=1471545385593192&mt=1613337636&fvip=4&keepalive=yes&c=WEB&n=rukBTkDhsa5lLT4fDm&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&sig=AOq0QJ8wRAIgDo8aUJr-bDVVM-BKW79IApxhErvDIx24YGFMZypQP28CIFsti73JLBlJR6F4LeP0vkjFAEBLJGvw2lKKrfhxRBJg&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AG3C_xAwRQIhAN5r-lNRCFvmyc8eqhsM10of2oYHrC8moiAnnzHO3IjRAiANYc1veWVFK1G46MW4gVWVOs08luqT0QpEg0UBlp_OSw%3D%3D'
[download] Destination: Kegare Naki Yume - Asriel-AlonE illuioN.m4a
[download] 100% of 4.61MiB in 00:03
[debug] ffmpeg command line: ffprobe -show_streams 'file:Kegare Naki Yume - Asriel-AlonE illuioN.m4a'
[ffmpeg] Post-process file Kegare Naki Yume - Asriel-AlonE illuioN.m4a exists, skipping
[ffmpeg] Converting thumbnail "Kegare Naki Yume - Asriel-AlonE illuioN.webp" to JPEG
[debug] ffmpeg command line: ffmpeg -y -loglevel repeat+info -i 'file:Kegare Naki Yume - Asriel-AlonE illuioN.webp' -bsf:v mjpeg2jpeg 'file:Kegare Naki Yume - Asriel-AlonE illuioN.jpg'
[atomicparsley] Adding thumbnail to "Kegare Naki Yume - Asriel-AlonE illuioN.m4a"
[debug] AtomicParsley command line: AtomicParsley 'Kegare Naki Yume - Asriel-AlonE illuioN.m4a' --artwork 'Kegare Naki Yume - Asriel-AlonE illuioN.jpg' -o 'Kegare Naki Yume - Asriel-AlonE illuioN.temp.m4a'
ERROR:
Traceback (most recent call last):
  File "/home/silver/.local/pipx/venvs/youtube-dl/lib/python3.8/site-packages/youtube_dl/YoutubeDL.py", line 2102, in post_process
    files_to_delete, info = pp.run(info)
  File "/home/silver/.local/pipx/venvs/youtube-dl/lib/python3.8/site-packages/youtube_dl/postprocessor/embedthumbnail.py", line 112, in run
    raise EmbedThumbnailPPError(msg)
youtube_dl.postprocessor.embedthumbnail.EmbedThumbnailPPError

Description

when trying to download youtube video with thumbnail, i can not download it with the thumbnail in the newer youtube-dl, it worked with the older youtube-dl.(i am running youtube-dl using pipx incase that is of any help)

after trying out different versions of youtube-dl it seems the problem happens after version 2<IP_ADDRESS> as 2<IP_ADDRESS> can still embed images

I think that I have the same issue on 2021.06.06 running against mixcloud - should I raise a new issue or track it here?
Ran:
youtube-dl -v --add-metadata --embed-thumbnail https://www.mixcloud.com/Dizzyuk/dj-grooverider-united-dance-impact-records-showcase-stevenage-arts-leisure-centre-021294/
Error:
[atomicparsley] Adding thumbnail to "DJ Grooverider - United Dance Impact Records Showcase - Stevenage Arts & Leisure Centre - 02.12.94-Dizzyuk_dj-grooverider-united-dance-impact-records-showcase-stevenage-arts-leisure-centre-021294.m4a"
[debug] AtomicParsley command line: AtomicParsley 'DJ Grooverider - United Dance Impact Records Showcase - Stevenage Arts & Leisure Centre - 02.12.94-Dizzyuk_dj-grooverider-united-dance-impact-records-showcase-stevenage-arts-leisure-centre-021294.m4a' --artwork 'DJ Grooverider - United Dance Impact Records Showcase - Stevenage Arts & Leisure Centre - 02.12.94-Dizzyuk_dj-grooverider-united-dance-impact-records-showcase-stevenage-arts-leisure-centre-021294.jpg' -o 'DJ Grooverider - United Dance Impact Records Showcase - Stevenage Arts & Leisure Centre - 02.12.94-Dizzyuk_dj-grooverider-united-dance-impact-records-showcase-stevenage-arts-leisure-centre-021294.temp.m4a'
ERROR:
Traceback (most recent call last):
  File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 2115, in post_process
    files_to_delete, info = pp.run(info)
  File "/usr/local/bin/youtube-dl/youtube_dl/postprocessor/embedthumbnail.py", line 116, in run
    raise EmbedThumbnailPPError(msg)
youtube_dl.postprocessor.embedthumbnail.EmbedThumbnailPPError

Not a same problem.
I manually ran AtomicParsley command line in the debug log and got this:
image file is not jpg/png and cannot be embedded.
AtomicParsley doesn't seem to recognize this file. Though file and identify commands say it's JPEG.
I don't know how to solve this. Maybe try this fork: https://github.com/wez/atomicparsley


OpenUPM release discovery issues

https://github.com/openupm/openupm/issues/4790#issuecomment-1994261396

Thanks. I'm currently working on actions for releases.
It is expected that this will lead to an update of the package.json before creating the tag and release.


Box and UIEditor improvements

The main purpose of this pull request is to allow plugs to be dragged and dropped into nested sections within the UIEditor, but it includes a lot of other supporting work that was necessary to make it happen.

Box.promotePlug() always creates promoted plugs directly under the node, and never under the user plug as it used to. The rationale for this is explained at length in #801, but basically it's so that the user plug can be free for use on Reference nodes and Gizmos. We also need to be able to parent plugs directly under the box so that plugs can be placed in custom tabs rather than only in collapsible sections below the User tab.
Nodule::create() now uses a new "nodule:type" metadata item to determine how the plug is represented in the NodeGraph. Previously for Boxes we created nodules for plugs under the box, and didn't create them for plugs under the user plug, so we needed a new way to distinguish the two. This also moves us further along to our goal of all UI being defined by metadata.
StandardNodeGadget now updates the entire nodule layout when metadata changes, and supports the removal of nodules based on metadata changes. This was necessary to ensure the NodeGraph view was correct when boxes were cut+pasted and referenced.
Metadata now provides instance information in its signals, so the UI can avoid a lot of unnecessary updates.
Lots of miscellaneous supporting enhancements and fixes.

Note that old Boxes and References should continue to work as before, but that editing them by promoting new plugs is going to be awkward, because they'll be promoted in the new style, and the UIEditor only edits either the user plugs or the plugs directly beneath the box. If necessary, I can look into creating a config file which overrides the UI such that plugs continue to promote as user plugs for old shows to avoid this confusion.
This is building on top of #1345, because both branches needed to modify signal bindings, and I didn't fancy having to deal with the conflicts in a rebase. If for any reason you don't want to merge #1345 then I'll rejig things.

So if we merge this, will the old registerNodule calls still work? Or do we need to update all other projects to match this format (branch them for gaffer 0.14+)?

The old calls will still work for the nodes they're registered with - the metadata takes precedence if it exists, but then it all falls back to the old registrations. But if you've suppressed nodule creation in the old way (by registering lambda plug : None), then that suppression won't work on the Box if you promote that plug (because we can only mirror metadata, not those registerNodule(). So it'd be good to get things updated fairly soon - no need for a branch though, the new and old styles should sit happily side by side.


message delivery in pubsub sns/sqs w/o subscribers

What content needs to be created or modified?

Users should be aware that allowing the pubsub sns/sqs component to provision SNS topics, SQS queues and the subscription thereof behaves differently in situations where the component is operating on behalf of a message producer, when no subscriber app is deployed, than in situations where a subscriber app is present and no publisher is deployed
Describe the solution you'd like

it should be communicated, in publisher only setup, that due to how SNS works without SQS subscription, it behaves as a "classic" pub/sub system that relies on having subscribers listening to topic messages and without those, messages cannot be passed onwards and are effectively dropped, and also are not available for future subscribers (no replay of message when the subscriber finally subscribes).
Where should the new material be placed?

AWS pubsub SNS/SQS component
The associated pull request from dapr/dapr, dapr/components-contrib, or other Dapr code repos

Additional context

@amimimor - Would you be able to submit a doc PR for this, given you understanding and clarity on this?


[Web] Add PS3 gamepad mapping for FF+Linux.

As reported by @nyxkn here https://github.com/godotengine/godot/pull/45078#issuecomment-1265272813

Cherry-picked for 3.6.

Cherry-picked for 3.5.2.


Add godoc badge, update OWNERS

OWNERS files are going to be updated across the org to use teams instead following the biweekly meeting last week. This updates the OWNERS file here to match others first, though.
Also adds a godoc badge and tweaks the README because why not!

/test pull-cert-manager-csi-lib-verify
again obviously not related to my changes that haven't changed code

I'm going to manually add the approved label so this merges, since it's been LGTM'd and because it's working towards fixing the current situation with OWNERS files.
Note that my last force push was to remove Joakim (jahrlin) from the owners since he's not in the github org any more and jetbot was (understandably) complaining. I'll talk more about that in #cert-manager-dev on slack.
Thanks for the review!


Improve plots

Codecov Report

Merging #66 (d76b1fd) into master (7d839c7) will increase coverage by 0.92%.
The diff coverage is 45.71%.

@@            Coverage Diff             @@
##           master      #66      +/-   ##
==========================================
+ Coverage   42.56%   43.48%   +0.92%
==========================================
  Files           5        6       +1
  Lines         585      568      -17
==========================================
- Hits          249      247       -2
+ Misses        312      297      -15
  Partials       24       24

Impacted Files
Coverage Δ

cmd/dnspyre/plot.go
0.00% <0.00%> (ø)

cmd/dnspyre/report.go
56.49% <ø> (+0.31%)
:arrow_up:

cmd/dnspyre/result.go
68.18% <68.18%> (ø)

cmd/dnspyre/benchmark.go
68.02% <100.00%> (-0.35%)
:arrow_down:

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.


Add an array query string parameter example

Greetings!
This PR is the result of a question that popped up on Slack yesterday. It tweaks documentation for CEL syntax regarding multi-value query string parameters and adds an example that checks for a value in the array via CEL. It assumes array query string parameters follow the form ?foo[]=bar&foo[]=baz but also includes a note on how to handle the ?foo=bar&foo=baz use case.
Let me know what you think. I'm happy to change it up if you need it. Thanks!

I wouldn't have explained it better.
Thanks!


fix: Fix security vulnerabilities CVE-2021-{3711,3712} in azuredisk-csi:v2.0.0lapha.1 image

What type of PR is this?
/kind bug

What this PR does / why we need it:
Fixes security vulnerabilities CVE-2021-3711 & CVE-2021-3712 by upgrading the base image to alpine:3.14.2.
Which issue(s) this PR fixes:

Fixes #210
Requirements:

[x] uses conventional commit messages

[ ] includes documentation
[ ] adds unit tests
[ ] tested upgrade from previous version

Special notes for your reviewer:
$ trivy --severity CRITICAL,HIGH ejreed/azuredisk-csi:v2.0.0-alpha.1
2021-10-04T11:01:37.881-0700    INFO    Detected OS: alpine
2021-10-04T11:01:37.882-0700    INFO    Detecting Alpine vulnerabilities...
2021-10-04T11:01:37.883-0700    INFO    Number of language-specific files: 1
2021-10-04T11:01:37.883-0700    INFO    Detecting gobinary vulnerabilities...

ejreed/azuredisk-csi:v2.0.0-alpha.1 (alpine 3.14.2)
===================================================
Total: 0 (HIGH: 0, CRITICAL: 0)

azurediskplugin (gobinary)
==========================
Total: 0 (HIGH: 0, CRITICAL: 0)

Release note:
none

Pull Request Test Coverage Report for Build<PHONE_NUMBER>

0 of 0   changed or added relevant lines in 0 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage remained the same at 42.721%

Totals

Change from base Build<PHONE_NUMBER>:
0.0%

Covered Lines:
179

Relevant Lines:
419

💛  - Coveralls


Add Login and Signup page to website

@tushargupta1504 assign me

@tushargupta1504 i have previous experience in designing backend for login and signup routes , you can assign me this

I would like to work on this issue. Could you please assign me this task


[BUG] canSurvive method takes as argument its own blockstate not the block below

as you can see in BlockStateBase::canSurvive as well as most block member method all take as first arguments their own blockstate. You cant just give it another block as stateholder checks will fail as its violating a contract

Infact you should never call Block member function directly and call the Blockstate ones instead

Fixed the crashes for Minecraft 1.19.4 versions. Fixed by using FakePlayer API provided by the loaders.

No fix for the 1.19.2 Versions?

No as FakePlayer for fabric isn't available in 1.19.2 so can't fix it.

while using fake player api is definitely the most compatible way to do such a thing, old issue was bad not because it didnt work in some cases but because it was using some vanilla methods incorrectly resulting in crashes so the fix for that just required to not pass those invalid parameters there while keeping the old implementation for 1.19 / just using fake player for forge


UWP Automated build fails " mismatch between the processor architecture of the project being built "AMD64"

I am building my application using VSTO online with the latest release and I am getting the following build error:

There was a mismatch between the processor architecture of the project being built "AMD64" and the processor architecture of the reference "C:\agent_work\1\s\MyApp\MyApp\Packages\octane.xam.videoplayer\3.1.0\lib\uap10.0\Octane.Xamarin.Forms.VideoPlayer.UWP.dll", "x86". This mismatch may cause runtime failures. Please consider changing the targeted processor architecture of your project through the Configuration Manager so as to align the processor architectures between your project and references, or take a dependency on references with a processor architecture that matches the targeted processor architecture of your project. [C:\agent_work\1\s\MyApp\MyApp\MyApp.UWP.DeviceImplementions\MyApp.UWP.DeviceImplementions.csproj]

Any idea what might be causing this?

I see you have set up Azure pipelines (which is what I'm also using) and set the build platforms to x86|x64 you will end up with an error.
I think the build architecture of the uwp library needs to be set to ANY CPU


split-paired-reads.py has nonstandard behavior with orphaned reads

By default, split-paired-reads.py mixes orphaned reads into their respective .1 / .2 files, which is a nonstandard behavior -- orphaned reads should be put into their own files. Tools like bowtie and Trinity fail when they encounter orphaned reads mixed into split paired files.

We talked about this in person, and the conclusion was that we cannot alter this until khmer 2.0; but the -p was added in #818 to force the expected behavior.
Two thoughts -

shall we update the documentation to make this clear?
@mr-c, what's the right way to punt these kinds of issues to khmer 2.0 release?

For 2.0,

[ ] make -p default;
[ ] upgrade extract-paired-reads to properly handle streaming input and specification of output files;
[ ] in the error message that results from -p, mention that extract-paired-reads can be used to fix;

@camillescott @mr-c the alternative here is to add an option to split-paired-reads to sideline or trash orphans. I think this makes the script too complicated so am -0 on it but would appreciate your thoughts.

Closed by #1164.


Fix bug in users.SetUserPhoto

SetUserPhoto was calling itself recursively instead of passing through to SetUserPhotoContext.

lgtm


update the gorilla/websocket version

The current version of the gorilla/websocket version being used is: V1.4.0 which has a vulnerability.
https://github.com/gorilla/websocket/security/advisories/GHSA-jf24-p9p9-4rjh
This is fixed in the version: V1.4.1 as described here - https://github.com/gorilla/websocket/releases

@vsadineni1 thank you for contribution!

I am glad that my PR is taken 👍


Show balance

Can anyone make a code that shows balance?
There is evm_scan_wallets
But I don't know how to use it,can anyone please make a online version of this to show balance of the entropy

This is not an online wallet. Cannot even sign transactions. It is just a "calculator", just for looooong secret numbers. And this is a security feature, not just a missing one. There are so many good online BIP39 compatible wallets out there, why do not use them? You can even export an extended public key and import it watch-only into some of those other wallets if you just want to see the balance on your cold wallet.

I'm trying to find a wallet with balance to get some money,I'm really poor
man, working 17 hours a day but can't buy enough food,I have tried many
phrase from your tool but haven't found any active wallet,I just need money
to keep my family alive
On Tue, 14 Jun 2022, 01:35 wigy, @.***> wrote:

This is not an online wallet. Cannot even sign transactions. It is just a
"calculator", just for looooong secret numbers. And this is a security
feature, not just a missing one. There are so many good online BIP39
compatible wallets out there, why do not use them? You can even export an
extended public key and import it watch-only into some of those other
wallets if you just want to see the balance on your cold wallet.
—
Reply to this email directly, view it on GitHub
https://github.com/iancoleman/bip39/issues/600#issuecomment-1154438442,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AZPRU7AYZZQXZKN5VT6R3B3VO6PCHANCNFSM5YU4BNYQ
.
You are receiving this because you authored the thread.Message ID:
@.***>

Do you know how to use (evm_scan_wallets)?
I have tried to use it but I can't,will you help me to figure it out how
it's work?
It's on GitHub . thanks man,I really need to find some money,I can't keep
living like this anymore, I'm 30 years old and doesn't have even 1 day of
happiness,I just wanna be able to buy enough food and new clothes, nothing
more
On Tue, 14 Jun 2022, 01:39 Milad Rezaie, @.***> wrote:

I'm trying to find a wallet with balance to get some money,I'm really poor
man, working 17 hours a day but can't buy enough food,I have tried many
phrase from your tool but haven't found any active wallet,I just need money
to keep my family alive
On Tue, 14 Jun 2022, 01:35 wigy, @.***> wrote:

This is not an online wallet. Cannot even sign transactions. It is just a
"calculator", just for looooong secret numbers. And this is a security
feature, not just a missing one. There are so many good online BIP39
compatible wallets out there, why do not use them? You can even export an
extended public key and import it watch-only into some of those other
wallets if you just want to see the balance on your cold wallet.
—
Reply to this email directly, view it on GitHub
https://github.com/iancoleman/bip39/issues/600#issuecomment-1154438442,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AZPRU7AYZZQXZKN5VT6R3B3VO6PCHANCNFSM5YU4BNYQ
.
You are receiving this because you authored the thread.Message ID:
@.***>

I'm trying to find a wallet with balance to get some money,I'm really poor man, working 17 hours a day but can't buy enough food,I have tried many phrase from your tool but haven't found any active wallet,I just need money to keep my family alive
…

The chances of you finding an active wallet with your method used here is about the same chance of of finding 1 particular grain of sand on entire planet.  You will be much more successful by getting a job and then investing into some good projects.
here is a few to guide you.
RavenCoin (RVN)
HederaHashgraph (HBAR)
Algorand (ALGO)
IOTA
WAVES
Gooodluck! Now goto work!!!

I have a job,I work 17 hours a day for 170$ in month,with this salary I
can't afford to buy enough food,,that's why I'm doing that, cause I don't
have any way,our country inflation is 300 percent,,you haven't experienced
a life like hell that's why you think I should find a job and begin to
invest,in my country you can't buy more than 1 clothes in 2 years,you can't
buy food every night,you can't buy any cars ot House All of your life,you
can't have a vacation or go to trip ever,that's why I wanna find an active
wallet, because it's just a good dream,I know it's not gonna happen,but
that's just hope to keep me alive
On Tue, 14 Jun 2022, 02:29 cryptopivot, @.***> wrote:

I'm trying to find a wallet with balance to get some money,I'm really poor
man, working 17 hours a day but can't buy enough food,I have tried many
phrase from your tool but haven't found any active wallet,I just need money
to keep my family alive
… <#m_-2903952551395610260_>
The chances of you finding an active wallet with your method used here is
about the same chance of of finding 1 particular grain of sand on entire
planet. You will be much more successful by getting a job and then
investing into some good projects.
here is a few to guide you.
RavenCoin (RVN)
HederaHashgraph (HBAR)
Algorand (ALGO)
IOTA
WAVES
Gooodluck! Now goto work!!!
—
Reply to this email directly, view it on GitHub
https://github.com/iancoleman/bip39/issues/600#issuecomment-1154480929,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AZPRU7CCHK2GP6VWE2EM5WDVO6VNFANCNFSM5YU4BNYQ
.
You are receiving this because you authored the thread.Message ID:
@.***>

Have you ever worked 17 hours a day?
Can you even imagine that?
No you can't,you know why?
Just because you have born in a good country,you don't have any big
problems,with a normal job you can have house,car,phone,clothes,food and
everything else,
Cheapest car here is 10k
My salary is 2k in year,
If I'd don't spend even 1 dollar it takes 5 year to buy a car but mate,I
can't even save 1 dollar in year cause all of my salary goes to food,to say
alive
So be grateful that you're living in a good country and all you need to do
is have a job and invest in good project
On Tue, 14 Jun 2022, 02:29 cryptopivot, @.***> wrote:

I'm trying to find a wallet with balance to get some money,I'm really poor
man, working 17 hours a day but can't buy enough food,I have tried many
phrase from your tool but haven't found any active wallet,I just need money
to keep my family alive
… <#m_-2903952551395610260_>
The chances of you finding an active wallet with your method used here is
about the same chance of of finding 1 particular grain of sand on entire
planet. You will be much more successful by getting a job and then
investing into some good projects.
here is a few to guide you.
RavenCoin (RVN)
HederaHashgraph (HBAR)
Algorand (ALGO)
IOTA
WAVES
Gooodluck! Now goto work!!!
—
Reply to this email directly, view it on GitHub
https://github.com/iancoleman/bip39/issues/600#issuecomment-1154480929,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AZPRU7CCHK2GP6VWE2EM5WDVO6VNFANCNFSM5YU4BNYQ
.
You are receiving this because you authored the thread.Message ID:
@.***>

I have a job,I work 17 hours a day for 170$ in month,with this salary I can't afford to buy enough food,,that's why I'm doing that, cause I don't have any way,our country inflation is 300 percent,,you haven't experienced a life like hell that's why you think I should find a job and begin to invest,in my country you can't buy more than 1 clothes in 2 years,you can't buy food every night,you can't buy any cars ot House All of your life,you can't have a vacation or go to trip ever,that's why I wanna find an active wallet, because it's just a good dream,I know it's not gonna happen,but that's just hope to keep me alive
…

I have and do indeed work days which are very long and at times very taxing on my body.  I am sorry to hear that your initiatives are not paying you more than it is.
I will say that finding an active wallet by random seed words will not be fruitful for you.
What country are you in?
What is your BTC address?

Why did you ask my BTC address?
Help me if you can,I don't know what else can I do
I'm thinking about hurting people for money,I'm going crazy, please help me
if you can,I just have 2 options,kill myself or kill other people and take
their money, please help me
On Tue, 14 Jun 2022, 21:42 cryptopivot, @.***> wrote:

I have a job,I work 17 hours a day for 170$ in month,with this salary I
can't afford to buy enough food,,that's why I'm doing that, cause I don't
have any way,our country inflation is 300 percent,,you haven't experienced
a life like hell that's why you think I should find a job and begin to
invest,in my country you can't buy more than 1 clothes in 2 years,you can't
buy food every night,you can't buy any cars ot House All of your life,you
can't have a vacation or go to trip ever,that's why I wanna find an active
wallet, because it's just a good dream,I know it's not gonna happen,but
that's just hope to keep me alive
… <#m_7508348731504406255_>
I have and do indeed work days which are very long and at times very
taxing on my body. I am sorry to hear that your initiatives are not paying
you more than it is.
I will say that finding an active wallet by random seed words will not be
fruitful for you.
What country are you in?
What is your BTC address?
—
Reply to this email directly, view it on GitHub
https://github.com/iancoleman/bip39/issues/600#issuecomment-1155478900,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AZPRU7FJF6DN37NCLECNR3LVPC4RDANCNFSM5YU4BNYQ
.
You are receiving this because you authored the thread.Message ID:
@.***>

I wish to help you, though you saying you will kill yourself is not going to help you become a better man.  God is more concerned with our character than he is our comfort.


[ZF3] Update to standard language code

The standard: http://www.w3.org/International/articles/language-tags/#region
Language Subtag Lookup
pt_BR: http://people.w3.org/rishida/utils/subtags/index.php?check=pt_BR&submit=Check
Result:
`Language subtag pt_br not found.`

pt-BR http://people.w3.org/rishida/utils/subtags/index.php?check=pt-BR&submit=Check
Result:
Language Codes
pt Portuguese
Geographic Regions
BR Brazil

or view source code of this url: https://www.google.com/preferences?hl=en#languages
Changes
resources\languages\ pt_BR to  resources\languages\ pt-BR
resources\languages\ zh to  resources\languages\ zh-CN (Simplified Chinese)
resources\languages\ zh_TW to  resources\languages\ zh-TW (Traditional Chinese)

This issue has been moved from the zendframework repository as part of the bug migration program as outlined here - http://framework.zend.com/blog/2016-04-11-issue-closures.html
New issue can be found at: https://github.com/zendframework/zend-i18n/issues/49


Add breakpoint command to Phinx recipe

Also, update corresponding documentation.
Just thought it'd be helpful to add another method to the phinx recipe, as I need the ability to set a breakpoint before I run the latest migrations as a precaution, so I may roll back any incomplete migrations.

Nice


[SPARK-36729][BUILD] Upgrade Netty from 4.1.63 to 4.1.68

What changes were proposed in this pull request?

This PR upgrades Netty from 4.1.63 to 4.1.68.
All the changes from 4.1.64 to 4.1.68 are as follows.

4.1.64 and 4.1.65

https://netty.io/news/2021/05/19/4-1-65-Final.html

4.1.66

https://netty.io/news/2021/07/16/4-1-66-Final.html

4.1.67

https://netty.io/news/2021/08/16/4-1-67-Final.html

4.1.68

https://netty.io/news/2021/09/09/4-1-68-Final.html

Why are the changes needed?

Recently Netty 4.1.68 was released, which includes official M1 Mac support.

Add support for mac m1

https://github.com/netty/netty/pull/11666

4.1.65 also includes a critical bug fix which Spark might be affected.

JNI classloader deadlock with latest JDK version

https://github.com/netty/netty/issues/11209

Does this PR introduce any user-facing change?

No.
How was this patch tested?

CIs.

Test build #143178 has started for PR 33970 at commit e92acf4.

Kubernetes integration test starting
URL: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder-K8s/47681/

Kubernetes integration test status failure
URL: https://amplab.cs.berkeley.edu/jenkins/job/SparkPullRequestBuilder-K8s/47681/

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder-K8s/47681/

cc @gengliangwang

Test build #143178 has finished for PR 33970 at commit e92acf4.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/143178/

Late +1


Script is adding the string "Range" to the first cell of each Sheet being pulled / multiple ranges not updating

I noticed this after I updated the Google Sheets script to version 20, and redeployed it.  For each range being pulled once a successful request has happened it, changes the first cell contents of the sheet the range is being pulled from to the string "Range".  pictures below

I pull 9 ranges from one workbook, with the last update I am noticing it will not pull each range every time leaving an error message to make sure script is set to Anyone which it is and each range will pull every now and then so I know its setup correctly.  It seems like it is timing out.  I am playing with the requestDelay but cant seem to find the sweet spot.  wasn't sure if you may have some insight

WOW! thanks for such a quick response.
google sheet is: https://docs.google.com/spreadsheets/d/1tQi6RkOLgI4V-NFU9cAXnYosY5xlUaWRUTqnVtxpQUM/edit?gid=1883657074#gid=1883657074
config.js:
config.zip

I also have edited the css file not sure if that matters but i am adding an updated config with the version 21 script and my main.css file.
config and css.zip

@Jdwilcox211 thanks for sending those over. I was able to reproduce the issue.
I'm not entirely sure what is causing the issue. There seems to be something very strange happening with the socket communication when multiple instances of a module are added. I've added a fix for now but I'm going to continue to explore to see if it's something going on in the MM core.
Can you please verify it's working for you now so I can close?

Yup it seems to be working, thank you

For future reference: second issue was caused by https://github.com/MagicMirrorOrg/MagicMirror/pull/3523.


[Feature Request] Apple Watch Client with Offline Playback

Native watch clients for music apps are a must if you want to leave your phone behind while exercising.
Some like myself regularly run, bike, and hike in areas with poor/no cell reception and only bring their watch. Offline playback enables me to listen to music even when there is no cell service. Additionally even in areas with good reception, offline playback significantly reduces battery drain.
The most common implementation of offline playback on watches is syncing individual playlists and albums. Auto caching songs makes less sense on a device with low storage capacity.
In the selfhosted music server space the only app that I know of that offers offline watch playback capability is AVSub.

Hey @davmin, thanks for the input! I understand your use case very well, and I support it fully. Any forthcoming Apple Watch integrations for Fintunes are bound by the following constraints:

React Native (which Fintunes is based on) has no support for Apple Watch. Future support is not expected nor likely.
A fully custom implementation must thus be made in Swift. This is not unfeasibly, but it is a lot of work.
I do not own an Apple Watch, so I cannot test any implementations myself.

I wish to see this happen, but I am very unlikely to make this happen myself. If you (or anyone else) would like some pointers on where to get started, I am more than happy to help this effort on the way.

Thanks for the response! I'll have to consider whether it's worth picking up swift for this.

you would be a hero if you did, sir.

Hi, I'm considering getting an Apple Watch and am interested in how well it fits with my self-hosted services. I'm experienced with Swift/SwiftUI and would love to create a watchOS JellyFin client if one doesn't exist. @davmin, if you're still interested, I'd like to collaborate, as I also want phone-less playback during workouts and I understand the need for this client.
For those who haven't seen it, SwiftFin is a native Swift client for iOS, iPadOS, and tvOS. It might make more sense to work alongside that project, rather than this one, as building a Swift app alongside React Native might not be ideal.

In addition, I have an Apple Silicon Mac available to me which I can run a watchOS emulator on - so testing shouldn't be an issue.

I wish you the best in your endeavors. If there is anything I can do to help let me know.

Thank you @jameschubbuck, much appreciated. I strongly believe this will be a great feature to contribute to the Jellyfin Project.


Improve github build caching behavior

The github cache is limited to 10GB.
We have caching enabled for the cargo build dependencies, but the entire collection of dependencies is cached with a single key.
Each cache is 1 - 1.5 GB and we end up with different caches for lint, maturin, wasm, linux, windows, etc.
The net result is we are constantly dropping items from the cache and ending up with lengthy builds as a result.
It could be worth looking into https://github.com/mozilla/sccache
There's some good info / suggestions in this post: https://www.infinyon.com/blog/2021/04/github-actions-best-practices/
An additional idea we might consider would be leveraging the docker-container to always seed the sccache with the latest contents from the Cargo.lock file. This way even in a case where the cache key gets dropped we would likely do a lot better than starting over from scratch.

We are now using sccache


Adding first support to responsive tables

Just making the tables responsive on issue #346, is not a "beautiful" solution, but it works 👍
The solution working is here
I got the solution from https://sitesforprofit.com/responsive-table-plugins-and-patterns
They have good ideas too here

Awesome! Do you mind adding an example of a responsive table to the "Pixyll in Action" post?


[Bug]: Request textDocument/codeAction failed VSCode

Is there an existing issue for this?

[X] I have searched the existing issues and my issue is unique
[X] My issue appears in the command-line and not only in the text editor

Description Overview

When I add code to .eslintrc.json it crashes and gives an error

env: {
browser: true,
es2021: true
},
extends: [
'plugin:react/recommended',
'standard-with-typescript'
],
overrides: [
],
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
project: './tsconfig.json'
},
plugins: [
'react'
],
settings: {
react: {
version: 'detect'
}
},

My error:
Request textDocument/codeAction failed.
Message: Request textDocument/codeAction failed with message: Range#create called with invalid arguments[[object Object], [object Object], undefined, undefined]
Code: -32603

Expected Behavior

I can't find the cause of the breakage

eslint-plugin-react version
v7.32.2
eslint version
v8.40.0
node version
v16.14.2

What happens on the real command line? (not the terminal in vscode)


Made Arash's page redirect to about

Redirects were excluded before (not sure why).

We should get it out of the sitemap too.


Status of this project?

Hello there,
I am interested in Yew, particularly for SSR and SSG applications and am currently researching how a Gatsby-like platform can be built. I found your repository and it seems interesting and useful; are you still interested in maintaining it and keeping up with the latest Yew/Actix releases? If not, do you know of anything else that would be worth looking into?
Thanks,
Philip

Hello, Philips.
I’m glad that you are interested in this bleeding edge project.
I do have been improving this framework privately for many personal projects and one of them was recently proved to be working nicely with 150+ users simultaneously online on a SBC. It was presumed to be working fluently until 4000+ connections.
Those improvements also includes PWA manifest, service workers, rust feature based library sharing between all three of server/admin client/user client, yew-mdc/yew-route integration, etc..
Since you’ve got interested, I’ll apply them on this repo soon.
Thanks.

Great, looking forward to it. Thanks!


Update apigee-edge.yaml

Correct script base path

Closing this as will send more updates together.


Export: / character in album name not handled properly when album name used as directory

When exporting with these options :
$ osxphotos export . --update --folder "2019" --directory "{album,NoAlbum}"  --person-keyword --keyword-template "{label}" --skip-original-if-edited --exiftool  --filename "{created.strftime,%Y-%m-%d-%H%M%S}"
I have an album in the 2019 folder called "2019-10/11 Paris Clermont"
The export succeeds but this album content gets exported in the following directory:
./2019-10/11 Paris Clermont
Notice the extra directory created because of the / in the middle of the name.
I guess the proper way to handle this would be to issue a warning and to replace the "/" character, for example by ":", as the finder does when you create a file with a / in it from the finder... It is not perfect as it would still appear as a ":" in the shell via ls...

@garz75 yep, definitely a bug.  I do check for valid filepaths:
https://github.com/RhetTbull/osxphotos/blob/eb00ffd73737ef4832229e4e6fd8dc4ccb0b8539/osxphotos/__main__.py#L2417-L2424
but didn't anticipate this issue.  Because I use os.makedirs to make the output directory, it happily creates the "extra" folder.  I think your suggestion of replacing the / with another character is likely the best bet.  This may require changes to the --update code as well...I'll investigate.

In Catalina, Finder does show the "/" in place of the ":"
Finder:

Terminal:

@garz75 I've released a quick fix in v0.34.2.  This fix changes "/" to ":" in album names.  However, a more complete fix will take additional time as I'll have to refactor the template code.  Currently the code that generates the template doesn't know if the template is for a directory (--directory) or to be used in a keyword, etc.  To do this right, the template code will have to replace "/" and any other "illegal" path characters only for directory templates and not for others.  It will have to do this for all possible template substitutions, not just albums. For example, Photos lets you use "/" in Folder names, keywords, etc. that could be used in --directory.

In Catalina, Finder does show the "/" in place of the ":"

Woah, crazy that Finder blindly replaces : in a directory name with / for display. Guess this originates from the pre-OSX days which was before I switched to macs.

I've refactored the template code to fix this, not only for album names, but also for other substitutions such as keywords and description.


If I call  stored procedures  which has out @totalpage what should I do

set @totalpage = 0;
call xiaoya.sp_common_pager('suppliers', 'name, logo, innerid', 'createdtime desc', '', '', 10, 1, '1000', 1, @totalpage);
select @totalpage;

You gave the correct response. The only issue you might face is trying to run those 3 queries in 1 call. You need to enable multipleStatements (docs) or make 3 separate queries.


Cannot run hypervisor

After executing cargo xtask bochs-amd  the program is stuck.  Am I doing something wrong?

Please post full console log in text (not screenshot). Thanks.

spu_deploy@deploymachine1:~/Hypervisor-101-in-Rust$ cargo xtask bochs-amd
Finished dev [unoptimized + debuginfo] target(s) in 0.02s
Running target/debug/xtask bochs-amd
Finished dev [unoptimized + debuginfo] target(s) in 0.02s
telnet: Unable to connect to remote host: Connection refused
0: Trying <IP_ADDRESS>...
00000000000i[      ] LTDL_LIBRARY_PATH not set. using compile time default '/usr/local/lib/bochs/plugins'
00000000000i[      ] debugger using rc file './bochs/dbg_command.txt'.
00000000000i[      ] BXSHARE not set. using compile time default '/usr/local/share/bochs'
00000000000i[      ] lt_dlhandle is 0x5646174cd590
00000000000i[PLUGIN] loaded plugin libbx_parallel.so
00000000000i[      ] lt_dlhandle is 0x5646174cf240
00000000000i[PLUGIN] loaded plugin libbx_unmapped.so
00000000000i[      ] lt_dlhandle is 0x5646174cfa80
00000000000i[PLUGIN] loaded plugin libbx_iodebug.so
00000000000i[      ] lt_dlhandle is 0x5646174d0270
00000000000i[PLUGIN] loaded plugin libbx_gameport.so
00000000000i[      ] lt_dlhandle is 0x5646174d0ad0
00000000000i[PLUGIN] loaded plugin libbx_extfpuirq.so
00000000000i[      ] lt_dlhandle is 0x5646174d1270
00000000000i[PLUGIN] loaded plugin libbx_biosdev.so
00000000000i[      ] lt_dlhandle is 0x5646174d1b90
00000000000i[PLUGIN] loaded plugin libbx_speaker.so
00000000000i[      ] lt_dlhandle is 0x5646174d3bf0
00000000000i[PLUGIN] loaded plugin libbx_serial.so
00000000000i[      ] reading configuration from ./bochs/linux_amd.bxrc
00000000000e[      ] ./bochs/linux_amd.bxrc:13: ataX-master/slave CHS set to 0/0/0 - autodetection enabled
00000000000i[      ] Ignoring magic break points
00000000000i[      ] lt_dlhandle is 0x5646174d1b90
00000000000i[PLUGIN] loaded plugin libbx_textconfig.so
00000000000i[      ] lt_dlhandle is 0x5646174d2320
00000000000i[PLUGIN] loaded plugin libbx_nogui_gui.so
00000000000i[      ] installing nogui module as the Bochs GUI
[      ]i| Bochs x86 Emulator 2.7.svn
[      ]i|   Built from SVN snapshot after release 2.7
[      ]i|   Compiled on Nov  9 2023 at 17:13:21
[      ]i| System configuration
[      ]i|   processors: 1 (cores=1, HT threads=1)
[      ]i|   A20 line support: yes
[      ]i| IPS is set to 20000000
[      ]i| CPU configuration
[      ]i|   SMP support: yes, quantum=16
[      ]i|   Using pre-defined CPU configuration: ryzen
[      ]i| Optimization configuration
[      ]i|   RepeatSpeedups support: yes
[      ]i|   Fast function calls: yes
[      ]i|   Handlers Chaining speedups: no
[      ]i| Devices configuration
[      ]i|   PCI support: i440FX i430FX i440BX
[      ]i|   Network devices support: NE2000 E1000
[      ]i|   Sound support: SB16 ES1370
[      ]i|   USB support: UHCI OHCI EHCI xHCI
[      ]i|   VGA extension support: vbe cirrus voodoo
[IMG   ]i| Disk image modules
[IMG   ]i|   flat concat sparse dll growing undoable volatile vbox
[IMG   ]i|   vvfat vpc vmware3 vmware4
[NETCTL]i| Networking modules
[NETCTL]i|   null tuntap socket vde vnet linux slirp
[SNDCTL]i| Sound drivers
[SNDCTL]i|   dummy file oss
[USBCTL]i| Pluggable USB devices
[USBCTL]i|   floppy disk cdrom printer mouse tablet keypad keyboard
[USBCTL]i|   hub
[MEM0  ]i| allocated memory at 0x7ff45a747010. after alignment, vector=0x7ff45a748000, block_size = 128K
[MEM0  ]i| 1024.00MB
[MEM0  ]i| mem block size = 0x00020000, blocks=8192
[MEM0  ]p| >>PANIC<< ROM: couldn't open ROM image file '/usr/share/ovmf/OVMF.fd'.
[CPU0  ]i| WARNING: RDRAND would not produce true random numbers !
[CPU0  ]i| WARNING: RDSEED would not produce true random numbers !
[DEV   ]i| will paste characters every 100 iodev timer ticks
[      ]i| lt_dlhandle is 0x564617bf1eb0
[PLUGIN]i| loaded plugin libbx_pci.so
[      ]i| lt_dlhandle is 0x564617bf28e0
[PLUGIN]i| loaded plugin libbx_pci2isa.so
[      ]i| lt_dlhandle is 0x564617bf33d0
[PLUGIN]i| loaded plugin libbx_usb_uhci.so
[      ]i| lt_dlhandle is 0x564617bf5800
[PLUGIN]i| loaded plugin libbx_acpi.so
[      ]i| lt_dlhandle is 0x564617bf6310
[PLUGIN]i| loaded plugin libbx_hpet.so
[      ]i| lt_dlhandle is 0x564617bf7150
[PLUGIN]i| loaded plugin libbx_cmos.so
[      ]i| lt_dlhandle is 0x564617bf7a80
[PLUGIN]i| loaded plugin libbx_dma.so
[      ]i| lt_dlhandle is 0x564617bf83b0
[PLUGIN]i| loaded plugin libbx_pic.so
[      ]i| lt_dlhandle is 0x564617bf8bc0
[PLUGIN]i| loaded plugin libbx_pit.so
[      ]i| lt_dlhandle is 0x564617bf9530
[PLUGIN]i| loaded plugin libbx_vga.so
[      ]i| lt_dlhandle is 0x564617bf9d50
[PLUGIN]i| loaded plugin libbx_floppy.so
[      ]i| lt_dlhandle is 0x564617bfa8a0
[PLUGIN]i| loaded plugin libbx_ioapic.so
[      ]i| lt_dlhandle is 0x564617bfb190
[PLUGIN]i| loaded plugin libbx_keyboard.so
[      ]i| lt_dlhandle is 0x564617bfba20
[PLUGIN]i| loaded plugin libbx_harddrv.so
[      ]i| lt_dlhandle is 0x564617bfda80
[PLUGIN]i| loaded plugin libbx_pci_ide.so
[PLUGIN]i| init_dev of 'pci' plugin device by virtual method
[DEV   ]i| i440FX PMC present at device 0, function 0
[PLUGIN]i| init_dev of 'pci2isa' plugin device by virtual method
[DEV   ]i| PIIX3 PCI-to-ISA bridge present at device 1, function 0
[PLUGIN]i| init_dev of 'cmos' plugin device by virtual method
[CMOS  ]i| Using local time for initial clock
[CMOS  ]i| Setting initial clock to: Fri Nov 10 11:19:35 2023 (time0=1699586375)
[PLUGIN]i| init_dev of 'dma' plugin device by virtual method
[DMA   ]i| channel 4 used by cascade
[PLUGIN]i| init_dev of 'pic' plugin device by virtual method
[PLUGIN]i| init_dev of 'pit' plugin device by virtual method
[PLUGIN]i| init_dev of 'vga' plugin device by virtual method
[MEM0  ]i| Register memory access handlers: 0x0000000a0000 - 0x0000000bffff
[VGA   ]i| interval=200000, mode=realtime
[VGA   ]i| VSYNC using standard mode
[MEM0  ]i| Register memory access handlers: 0x0000e0000000 - 0x0000e0ffffff
[BXVGA ]i| VBE Bochs Display Extension Enabled
[MEM0  ]i| rom at 0xc0000/38400 ('/usr/local/share/bochs/VGABIOS-lgpl-latest')
[PLUGIN]i| init_dev of 'floppy' plugin device by virtual method
[DMA   ]i| channel 2 used by Floppy Drive
[FLOPPY]i| Using boot sequence disk, none, none
[FLOPPY]i| Floppy boot signature check is enabled
[PLUGIN]i| init_dev of 'acpi' plugin device by virtual method
[DEV   ]i| ACPI Controller present at device 1, function 3
[PLUGIN]i| init_dev of 'hpet' plugin device by virtual method
[HPET  ]i| initializing HPET
[MEM0  ]i| Register memory access handlers: 0x0000fed00000 - 0x0000fed003ff
[PLUGIN]i| init_dev of 'ioapic' plugin device by virtual method
[IOAPIC]i| initializing I/O APIC
[MEM0  ]i| Register memory access handlers: 0x0000fec00000 - 0x0000fec00fff
[IOAPIC]i| IOAPIC enabled (base address = 0xfec00000)
[PLUGIN]i| init_dev of 'keyboard' plugin device by virtual method
[PLUGIN]i| init_dev of 'harddrv' plugin device by virtual method
[HD    ]i| HD on ata0-0: 'samples/bochs_disk.img', 'flat' mode
[IMG   ]i| hd_size:<PHONE_NUMBER>
[HD    ]i| ata0-0: autodetect geometry: CHS=4161/16/63 (sector size=512)
[HD    ]i| translation on ata0-0 set to 'large'
[PLUGIN]i| init_dev of 'pci_ide' plugin device by virtual method
[DEV   ]i| PIIX3 PCI IDE controller present at device 1, function 1
[PLUGIN]i| init_dev of 'parallel' plugin device by virtual method
[PAR   ]i| parallel port 1 at 0x0378 irq 7
[PLUGIN]i| init_dev of 'unmapped' plugin device by virtual method
[PLUGIN]i| init_dev of 'iodebug' plugin device by virtual method
[PLUGIN]i| init_dev of 'gameport' plugin device by virtual method
[PLUGIN]i| init_dev of 'extfpuirq' plugin device by virtual method
[PLUGIN]i| init_dev of 'biosdev' plugin device by virtual method
[PLUGIN]i| init_dev of 'serial' plugin device by virtual method
com1: waiting for client to connect (host:localhost, port:14449)
client connected
0: Trying <IP_ADDRESS>...
[SER   ]i|    0: Connected to localhost.
com1 - inet server - socket_id: 6, ip:localhost, port:14449
0: Escape character is '^]'.
[SER   ]i| com1 at 0x03f8 irq 4 (mode: socket-server)
[PLUGIN]i| init_dev of 'usb_uhci' plugin device by virtual method
[DEV   ]i| USB UHCI present at device 1, function 2
[UHCI  ]i| USB UHCI initialized
[PLUGIN]i| register state of 'pci' plugin device by virtual method
[PLUGIN]i| register state of 'pci2isa' plugin device by virtual method
[PLUGIN]i| register state of 'cmos' plugin device by virtual method
[PLUGIN]i| register state of 'dma' plugin device by virtual method
[PLUGIN]i| register state of 'pic' plugin device by virtual method
[PLUGIN]i| register state of 'pit' plugin device by virtual method
[PLUGIN]i| register state of 'vga' plugin device by virtual method
[PLUGIN]i| register state of 'floppy' plugin device by virtual method
[PLUGIN]i| register state of 'parallel' plugin device by virtual method
[PLUGIN]i| register state of 'unmapped' plugin device by virtual method
[PLUGIN]i| register state of 'iodebug' plugin device by virtual method
[PLUGIN]i| register state of 'gameport' plugin device by virtual method
[PLUGIN]i| register state of 'extfpuirq' plugin device by virtual method
[PLUGIN]i| register state of 'biosdev' plugin device by virtual method
[PLUGIN]i| register state of 'serial' plugin device by virtual method
[PLUGIN]i| register state of 'usb_uhci' plugin device by virtual method
[PLUGIN]i| register state of 'acpi' plugin device by virtual method
[PLUGIN]i| register state of 'hpet' plugin device by virtual method
[PLUGIN]i| register state of 'ioapic' plugin device by virtual method
[PLUGIN]i| register state of 'keyboard' plugin device by virtual method
[PLUGIN]i| register state of 'harddrv' plugin device by virtual method
[PLUGIN]i| register state of 'pci_ide' plugin device by virtual method
[SYS   ]i| bx_pc_system_c::Reset(HARDWARE) called
[CPU0  ]i| cpu hardware reset
[APIC0 ]i| allocate APIC id=0 (MMIO enabled) to 0x0000fee00000
[CPU0  ]i| CPU[0] is the bootstrap processor
[CPU0  ]i| CPUID[0x00000000]: 0000000d 68747541 444d4163 69746e65
[CPU0  ]i| CPUID[0x00000001]: 00800f11 00010800 76d8320b 178bfbff
[CPU0  ]i| CPUID[0x00000002]: 00000000 00000000 00000000 00000000
[CPU0  ]i| CPUID[0x00000003]: 00000000 00000000 00000000 00000000
[CPU0  ]i| CPUID[0x00000004]: 00000000 00000000 00000000 00000000
[CPU0  ]i| CPUID[0x00000005]: 00000040 00000040 00000003 00000000
[CPU0  ]i| CPUID[0x00000006]: 00000004 00000000 00000001 00000000
[CPU0  ]i| CPUID[0x00000007]: 00000000 209c01a9 00000000 00000000
[CPU0  ]i| CPUID[0x00000008]: 00000000 00000000 00000000 00000000
[CPU0  ]i| CPUID[0x00000009]: 00000000 00000000 00000000 00000000
[CPU0  ]i| CPUID[0x0000000a]: 00000000 00000000 00000000 00000000
[CPU0  ]i| CPUID[0x0000000b]: 00000000 00000000 00000000 00000000
[CPU0  ]i| CPUID[0x0000000c]: 00000000 00000000 00000000 00000000
[CPU0  ]i| CPUID[0x0000000d]: 00000007 00000240 00000340 00000000
[CPU0  ]i| CPUID[0x80000000]: 8000001f 68747541 444d4163 69746e65
[CPU0  ]i| CPUID[0x80000001]: 00800f11 20000000 35c223ff 2fd3fbff
[CPU0  ]i| CPUID[0x80000002]: 20444d41 657a7952 2037206e 30303731
[CPU0  ]i| CPUID[0x80000003]: 67694520 432d7468 2065726f 636f7250
[CPU0  ]i| CPUID[0x80000004]: 6f737365 20202072 20202020 00202020
[CPU0  ]i| CPUID[0x80000005]: ff40ff40 ff40ff40 20080140 40040140
[CPU0  ]i| CPUID[0x80000006]: 26006400 66006400 02006140 00808140
[CPU0  ]i| CPUID[0x80000007]: 00000000 0000001b 00000000 00006599
[CPU0  ]i| CPUID[0x80000008]: 00003028 00000001 00000000 00000000
[CPU0  ]i| CPUID[0x80000009]: 00000000 00000000 00000000 00000000
[CPU0  ]i| CPUID[0x8000000a]: 00000001 00008000 00000000 0000044f
[CPU0  ]i| CPUID[0x8000000b]: 00000000 00000000 00000000 00000000
[CPU0  ]i| CPUID[0x8000000c]: 00000000 00000000 00000000 00000000
[CPU0  ]i| CPUID[0x8000000d]: 00000000 00000000 00000000 00000000
[CPU0  ]i| CPUID[0x8000000e]: 00000000 00000000 00000000 00000000
[CPU0  ]i| CPUID[0x8000000f]: 00000000 00000000 00000000 00000000
[CPU0  ]i| CPUID[0x80000010]: 00000000 00000000 00000000 00000000
[CPU0  ]i| CPUID[0x80000011]: 00000000 00000000 00000000 00000000
[CPU0  ]i| CPUID[0x80000012]: 00000000 00000000 00000000 00000000
[CPU0  ]i| CPUID[0x80000013]: 00000000 00000000 00000000 00000000
[CPU0  ]i| CPUID[0x80000014]: 00000000 00000000 00000000 00000000
[CPU0  ]i| CPUID[0x80000015]: 00000000 00000000 00000000 00000000
[CPU0  ]i| CPUID[0x80000016]: 00000000 00000000 00000000 00000000
[CPU0  ]i| CPUID[0x80000017]: 00000000 00000000 00000000 00000000
[CPU0  ]i| CPUID[0x80000018]: 00000000 00000000 00000000 00000000
[CPU0  ]i| CPUID[0x80000019]: f040f040 00000000 00000000 00000000
[CPU0  ]i| CPUID[0x8000001a]: 00000003 00000000 00000000 00000000
[CPU0  ]i| WARNING: Instruction Based Sampling is not implemented
[CPU0  ]i| CPUID[0x8000001b]: 000003ff 00000000 00000000 00000000
[CPU0  ]i| CPUID[0x8000001c]: 00000000 00000000 00000000 00000000
[CPU0  ]i| CPUID[0x8000001d]: 00004121 01c0003f 0000003f 00000000
[CPU0  ]i| CPUID[0x8000001e]: 00000000 00000000 00000000 00000000
[CPU0  ]i| CPUID[0x8000001f]: 00000007 0000016f 0000000f 00000000
[CPU0  ]i| CPU Features supported:
[CPU0  ]i|              x87
[CPU0  ]i|              486ni
[CPU0  ]i|              pentium_ni
[CPU0  ]i|              p6ni
[CPU0  ]i|              mmx
[CPU0  ]i|              debugext
[CPU0  ]i|              vme
[CPU0  ]i|              pse
[CPU0  ]i|              pae
[CPU0  ]i|              pge
[CPU0  ]i|              pse36
[CPU0  ]i|              mtrr
[CPU0  ]i|              pat
[CPU0  ]i|              legacy_syscall_sysret
[CPU0  ]i|              sysenter_sysexit
[CPU0  ]i|              clflush
[CPU0  ]i|              clflushopt
[CPU0  ]i|              sse
[CPU0  ]i|              sse2
[CPU0  ]i|              sse3
[CPU0  ]i|              ssse3
[CPU0  ]i|              sse4_1
[CPU0  ]i|              sse4_2
[CPU0  ]i|              popcnt
[CPU0  ]i|              mwait
[CPU0  ]i|              mwaitx
[CPU0  ]i|              longmode
[CPU0  ]i|              lm_lahf_sahf
[CPU0  ]i|              nx
[CPU0  ]i|              1g_pages
[CPU0  ]i|              cmpxhg16b
[CPU0  ]i|              rdtscp
[CPU0  ]i|              ffxsr
[CPU0  ]i|              xsave
[CPU0  ]i|              xsaveopt
[CPU0  ]i|              xsavec
[CPU0  ]i|              xsaves
[CPU0  ]i|              aes_pclmulqdq
[CPU0  ]i|              movbe
[CPU0  ]i|              fsgsbase
[CPU0  ]i|              avx
[CPU0  ]i|              avx2
[CPU0  ]i|              avx_f16c
[CPU0  ]i|              avx_fma
[CPU0  ]i|              altmovcr8
[CPU0  ]i|              sse4a
[CPU0  ]i|              misaligned_sse
[CPU0  ]i|              lzcnt
[CPU0  ]i|              bmi1
[CPU0  ]i|              bmi2
[CPU0  ]i|              svm
[CPU0  ]i|              rdrand
[CPU0  ]i|              adx
[CPU0  ]i|              smap
[CPU0  ]i|              rdseed
[CPU0  ]i|              sha
[CPU0  ]i|              xapic
[CPU0  ]i|              xapicext
[CPU0  ]i|              smep
[CPU0  ]i|              clzero
[PLUGIN]i| reset of 'pci' plugin device by virtual method
[PLUGIN]i| reset of 'pci2isa' plugin device by virtual method
[PLUGIN]i| reset of 'cmos' plugin device by virtual method
[PLUGIN]i| reset of 'dma' plugin device by virtual method
[PLUGIN]i| reset of 'pic' plugin device by virtual method
[PLUGIN]i| reset of 'pit' plugin device by virtual method
[PLUGIN]i| reset of 'vga' plugin device by virtual method
[PLUGIN]i| reset of 'floppy' plugin device by virtual method
[PLUGIN]i| reset of 'acpi' plugin device by virtual method
[PLUGIN]i| reset of 'hpet' plugin device by virtual method
[PLUGIN]i| reset of 'ioapic' plugin device by virtual method
[PLUGIN]i| reset of 'keyboard' plugin device by virtual method
[PLUGIN]i| reset of 'harddrv' plugin device by virtual method
[PLUGIN]i| reset of 'pci_ide' plugin device by virtual method
[PLUGIN]i| reset of 'parallel' plugin device by virtual method
[PLUGIN]i| reset of 'unmapped' plugin device by virtual method
[PLUGIN]i| reset of 'iodebug' plugin device by virtual method
[PLUGIN]i| reset of 'gameport' plugin device by virtual method
[PLUGIN]i| reset of 'extfpuirq' plugin device by virtual method
[PLUGIN]i| reset of 'biosdev' plugin device by virtual method
[PLUGIN]i| reset of 'serial' plugin device by virtual method
[PLUGIN]i| reset of 'usb_uhci' plugin device by virtual method
[      ]i| set SIGINT handler to bx_debug_ctrlc_handler
                  Bochs x86 Emulator 2.7.svn
           Built from SVN snapshot after release 2.7
              Compiled on Nov  9 2023 at 17:13:21

========================================================================
Next at t=0
(0) [0x0000fffffff0] f000:fff0 (unk. ctxt): (invalid)                 ; ffff
[DEV   ]e| read from port 0x0000 with len 2 returns 0xffff
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]e| prefetch: EIP [00010000] > CS.limit [0000ffff]
[CPU0  ]i| math_abort: MSDOS compatibility FPU exception
[CPU0  ]i| math_abort: MSDOS compatibility FPU exception
[CPU0  ]i| math_abort: MSDOS compatibility FPU exception
[CPU0  ]i| math_abort: MSDOS compatibility FPU exception
[CPU0  ]i| math_abort: MSDOS compatibility FPU exception
[CPU0  ]i| math_abort: MSDOS compatibility FPU exception
[CPU0  ]i| math_abort: MSDOS compatibility FPU exception
[CPU0  ]i| math_abort: MSDOS compatibility FPU exception
[CPU0  ]i| math_abort: MSDOS compatibility FPU exception
[CPU0  ]i| math_abort: MSDOS compatibility FPU exception
[CPU0  ]i| math_abort: MSDOS compatibility FPU exception
[DEV   ]e| read from port 0x0000 with len 2 returns 0xffff
[CPU0  ]i| math_abort: MSDOS compatibility FPU exception

[MEM0  ]p| >>PANIC<< ROM: couldn't open ROM image file '/usr/share/ovmf/OVMF.fd'.

Did you install ovmf?

Closing this for a housekeeping purpose. If the issue is not resolved, feel free to reopen.


airship_balloon_ratio=0.0 sometimes doesent work?

Hi,
first of all, i use:

davincisvessels-1.12-6.340-full.jar
movingworld-1.12-6.342-full.jar
1.12.2-forge1.12.2-<IP_ADDRESS>87

I changed the config to airship_balloon_ratio=0.0 (local and on the Server)
My ship is about 3000 Blocks, but often it just drops out of the sky to the ground. If i try to lift it up again, it starts bouncing like hell, but, it lifts. Very very slowly. But i can not release the lifing key, until i disassemble the ship back into the world. Otherwise, it will drop to the ground immediately.
I love the mod, thank for your work.
Last question: Is there any progress with the tileentity problem? The issue, that big parts disappear, if there is a thermaleypansion pipe on board.

Problem solved. ONE litle Block was inside the assembled ship, causing a colision.


Question about gorilla-core version

I'm currently using a recent gorilla-core (<IP_ADDRESS>), and it looks like some issues depending on the gorilla-core version.
Can you share which version you use for gorilla-core? These are the errors that I got.
 Traceback (most recent call last):   File "train.py", line 192, in <module>     start_iter=start_iter)   File "/home/miruware/workspace/IST-Net/utils/solver.py", line 25, in __init__     logger=logger)   File "/home/miruware/anaconda3/envs/istnet/lib/python3.6/site-packages/gorilla/solver/base_solver.py", line 39, in __init__     self.optimizer = build_optimizer(model, cfg.optimizer)   File "/home/miruware/anaconda3/envs/istnet/lib/python3.6/site-packages/gorilla/solver/build.py", line 68, in build_optimizer     return build_single_optimizer(model, _optimizer_cfg)   File "/home/miruware/anaconda3/envs/istnet/lib/python3.6/site-packages/gorilla/solver/build.py", line 45, in build_single_optimizer     return _build_optimizer(optimizer_cfg)   File "/home/miruware/anaconda3/envs/istnet/lib/python3.6/site-packages/gorilla/core/registry.py", line 163, in build_from_cfg     raise KeyError("cfg or default_args must contain the key " KeyError: "cfgordefault_argsmust contain the key 'type', but got {'name': 'Adam', 'lr': 0.01, 'betas': [0.5, 0.999], 'eps': 1e-06, 'weight_decay': 0, 'params': [{'params': <filter object at 0x7f15bb53c710>}]}\nNone"

Thanks for your reply. I have solved changing the config file name to type temporarily.
https://github.com/CVMI-Lab/IST-Net/blob/169e1cf7ee2d2a56fdeee4a0d755b85df2330e7a/config/ist_net_default.yaml#L5
ex) type : Adam

Thanks for your reply. I have solved changing the config file to temporarily.name``type
https://github.com/CVMI-Lab/IST-Net/blob/169e1cf7ee2d2a56fdeee4a0d755b85df2330e7a/config/ist_net_default.yaml#L5
ex) type : Adam

how to fix it？I also meet this problem. my gorilla-core version is <IP_ADDRESS>
File "C:\Users\user.conda\envs\DPDN\lib\site-packages\gorilla\core\registry.py", line 148, in build_from_cfg
f"cfg or default_args must contain the key 'type', "
KeyError: "cfg or default_args must contain the key 'type', but got {'name': 'Adam', 'lr': 0.01, 'betas': [0.5, 0.999], 'eps': 1e-06, 'weight_decay': 0, 'params': [{'params': <filter object at 0x000001C0B1DAF4A8>}]}\nNone"


Support private IPFS networks (via swarm.key)

Is your feature request related to a problem? Please describe.
Yes! Private IPFS networks, which are supported in kubo, are not currently enabled in IPFS Desktop.
#950 mentions this, but was closed because swarm.key is not supported.
Additionally, the "this feature is not supported" error message showed in that first issue seems to be broken:

Describe the solution you'd like
I would like IPFS Desktop to allow users to connect to a private IPFS network using the configured swarm.key file stored at $IPFS_PATH/swarm.key (following the instructions here: https://github.com/ahester57/ipfs-private-swarm#2-generate-swarmkey)
Describe alternatives you've considered
The alternative is to use kubo CLI to run a private network, which is not viable becuase it is not user friendly for non technical users of IPFS.
Additional context
I work on the Social Impact team at the Filecoin Foundation, and some of our projects are looking to run private archival networks using IPFS. While the swarm key approach will allow technical users to manage a private network that replicates data, for smaller community archives and art galleries without strong in house technical support, being able to access the data on this private network via a friendly user interface is a critical requirement.

Good questions! Let me start off with some general background, and then I can go into more specifics.
Background
The primary project I am working with right now is HistoryPin, run by Shift Collective. They are looking to create a prototype decentralized storage backend to support their community archives based on the product requirements and user research they performed last year.
They are mostly interested in using private networks to create redundant archives of potentially sensitive community data, however, deletion is one of their core requirements. So instead of using the public network we are aiming to create a network of private nodes run by trusted institutions (i.e. universities, museums, libraries, etc) that will respond to deletion requests in a timely manner. It would be nice if we could also facilitate access to this network by the less technical community archives themselves (not just by the institutional network of node providers), which is where IPFS Desktop comes in.
Questions

It is difficult to tell how much work this feature request implies, mind elaborating on how end user's experience is expected to work? User has swarm.key, and selects it via UI. What happens next?
So I think they might have to configure more than just the swarm key, probably at least a bootstrap node, and maybe some additional settings (like the IPNI stuff mentioned below). My expectation of the user journey is that they would download IPFS Desktop, edit some configuration settings, and then connect to the private network associated with that swarm key. From there, they would be able to do all the normal IPFS stuff (i.e. fetch files by CID, pin files locally to store a redundant copy, and add some files from their local filesystem to provide to the private network. I expect one of the larger institutions involved would be responsible for running the bootstrap node(s) for this private network. Search and discovery of CIDs would happy through the HistoryPin site, though perhaps IPNS could also be used to publish an up to date list of the files in each community archive to the private swarm.

We will be leaking metadata (user IP and the CID they try to fetch from private swarm) to IPNI at https://cid.contact/, and results will not be useful;
Do we disable IPNI when PNet is set?
I think disabling IPNI is the right approach for this use case, as folks would not care about fetching data from the public network. Leaking metadata about what folks are searching for would not be acceptable (for example, one of the archives is an LGBTQ archive in the south and those requesting data could be targeted if that information was leaked). Doxxing is one of the primary concerns for these community archives, and why they want a private network where data can easily be deleted.

Public bootstrappers won't work with swarm.key present.
Do we detect there are no peers when swarm.key is set, and ask user to provide multiaddr to bootstrap with?
Yes, please! Our plan is to have one of the institutional networks run a bootstrap node, and we would distribute that along with the swarm key to community archives.

What happens when user removes swarm.key?
What if user only wanted to test this feature, and wants to go back to public swarm?
Should there be UI warning user that entire repository is now exposed to the public swarm? Do we give option to export everything to a CAR and then purge the blockstore to avoid data exfiltration?
The data should definitely not get immediately published or provided to the public network if the swarm key is disabled.
I think maybe a separate blockstore per swarm key? It would be nice if users could toggle back and forth between networks, but that is very much a nice to have feature not a requirement. If that is infeasible, exporting the data and purging the blockstore would be the next best approach.

Ok, there are things which are time-consuming to implement, and some which we can cheese a little by reusing existing abstractions, such as the fact everything in Kubo (swarm keys, peer identity, configuration, data) is stored in a swappable .ipfs repository.
With that in mind, I think a realistic MVP would be based on three things:

[ ] Ability to enable "private swarm" feature via tray menu

[ ] first step, file picker for selecting swarm.key from disk  + enter "pet name" for the private swarm

We don't implement "generate swarm key" – for now this would be done by someone technical,  who also sets up a private bootstrapper

[ ] second step, asking user to provide optional bootstrapper multiaddr (or option to continue without bootstrapper)

I assume LAN-only private swarms based on MDNS works, so bootstrapper would be optional, if not, then we can make this step mandatory.

[ ] Explicitly isolate pnet repository at filesystem level

[ ] before enabling pnet, move old .ipfs to .ipfs.public

this ensures we dont mix public and private data, and allow user to switch back and forth

[ ] generate new .ipfs.private-swarm-{id} where {id} is based on swarm.key (e.g. 7 first characters of sha2 etc, or just the pet name user provided)
[ ] tray menu to allow user to switch between private swarm(s) and public one

I suspect supporting multiple private swarms implemented and isolated this way will be very inexpensive to support

[ ] Ability for ipfs-webui to detect and show "private swarm mode"

[ ] Some indicator in the left side menu, always visible (e.g. "Private IPFS swarm {pet name}" under IPFS cube)

How to signal?

localStorage key could be set by Electron app (doable, no need for change in Kubo)
or /api/v0/id could have additional PNet key info field present (trivial, but requires kubo release)

[ ] Disable features that depend on public swarm, such as remote pinning, IPLD examples (which would not work anyway) etc.

It is bare-bones, but could be delivered without sinking too much dev time, and not blocked by external dependencies.
@ianconsolata Thoughts? Would this MVP be enough?

That would be a fantastic MVP, and I think would support our needs for now. Let me share this issue with a couple of the partners we are working with and let them weigh in with their thoughts, just in case there are other needs I have forgotten about.

This sounds amazing, and would be a huge step forward for community archives that want to get started with collaborative file sharing using IPFS.
Being able to have multiple private swarms could also allow community archives to participate in more than one trust network, which we don't currently have any use cases for at the moment, but I think would be interesting to explore.

The MVP hard limitation of 'only one swarm at a time' is what makes its implementation with preexisting Kubo feasible, but yes, in the future we could explore multi-swarm use case, if there is enough need. But that would be way bigger scope than MVP.

Connecting to multiple swarms at once is interesting, but I still think it would be safer from a UX perspective to have folks actively switch from one swarm to another, rather than allowing both swarms to operate simultaneously. Having someone close IPFS Desktop (or shut down the ipfs daemon) and relaunch it with a different config gives clear separation between public and private networks with little chance someone would accidentally share or re-provide data to the wrong network.
I like that this MVP approach allows for that very easily, since the block store and other settings stored in .ipfs get copied for each new network configured. It would result in some duplication if the same data is being provided to multiple networks, but I think that is an acceptable tradeoff for now.


Wrong directory for previews

Describe the bug
preview directory is not valid.
it is defined as '/preivews'
but there is '/dataprep' in code
To Reproduce
Steps to reproduce the behavior:

create new dataset
see the details of dataset
you can get the message 'invalid filekey'

Desktop (please complete the following information):
OS: MacOS
Browser: Chrome
Version: 68.0.3440.106

Aborted. This will be done by another issue in a better way.


create a dedicated NamedTuple to dbsync UTxO data

The new datastructure was added to cardano-node-tests where it is needed in https://github.com/input-output-hk/cardano-node-tests/pull/1304


Fix contrast issue

What
There is an issue, where all elements provided by the govuk-frontend will
have a yellow background set on :focus. It's particularly affecting links,
buttons and summary boxes. These elements also have a blue text in them,
which could cause difficulty to our users when it comes to reading the
content. It means we don't meet the required WCAG 2 AA standard 1.
Design system team thinks the roll out may take a long time, due to the
nature of it being used in the wide government and have no issues with
us overriding it with the provided black colour.
This is only a temporary solution and should be reverted back once the
issue upstream is resolved. 2
How to review

See if change makes sense
Run the application and play around to see if nothing is negatively affected
Run a standards check with the colours

Nice touch, love it. Id be vary of adding new colours to the palette though. Before I go ahead changing it, don't you think we should stick to "3 colour" rule? :D
Happy either way.

I think the three colour rule came from consolidating colours, and at one point there were more colours.  I think too, that patterns are meant to evolve and the current ones aren't meeting our needs.  If we call the colour variable something sensible and we have the explanation next to it, it should be okay.

Addressed.
I didn't make it a variable, as I hear naming things makes it harder to get rid of the thing. People get attached and stuff.

Haha, I think naming it would be better as otherwise we are more likely to end up with arbitrary colours.

Fine. Readability - I'm all up for it.

Thanks :).


Fix Modrinth download badge

v1 of Modrinth's API has been deprecated since January 2022 and is scheduled to begin breaking in February, with a complete breakage being done by March. This pull request has been created as a courtesy to update it to use the dedicated shields.io badge rather than manually constructing the API request.
After merging this PR, please also update any usages on other pages, for example a CurseForge and/or Modrinth project description, and also cherry-pick/copy these changes to any other branches you might have.

leaving in my notes that triphora is a real one


fix(ciscospark): Do not display device joins/leaves in message widget 1:1

no other concerns from me except what @adamweeks mentioned about commit messages!