Some image sizes created as 0 byte files

Issue Summary
I've published 100+ articles on my self hosted Ghost instance and this is the first time I've encountered this issue. Not sure how to easily reproduce it, nor have I managed to find any logged errors to indicate what went wrong.
The ultimate culprit is that something went wrong during the publication process that resulted in SOME of the image versions (at certain sizes) being created as 0 byte files:
# ls -la /var/www/ghost/content/images/size/w1600/2023/07/
total 664
drwxr-xr-x 2 ghost ghost   4096 Jul 15 14:57 .
drwxr-xr-x 4 ghost ghost   4096 Jul 15 14:56 ..
-rw-r--r-- 1 ghost ghost      0 Jul 15 14:58 buried_seed_vault.jpg
-rw-r--r-- 1 ghost ghost      0 Jul 15 14:58 clean_seed_vault.jpg
-rw-r--r-- 1 ghost ghost 448178 Jul 15 14:57 dirty_seed_vault.jpg
-rw-r--r-- 1 ghost ghost      0 Jul 15 14:58 opened_seed_vault.jpg
-rw-r--r-- 1 ghost ghost 219594 Jul 15 14:56 seed_plates.jpg
-rw-r--r-- 1 ghost ghost      0 Jul 15 14:58 tamper_evident_bag.jpg

I was able to manually resolve the issue by copying the original files over the 0 byte versions. But I haven't been able to find the root cause of this failure.
Steps to Reproduce
Here's what happened today:

I had a ~1,000 word article with half a dozen fairly large images uploaded into it
I hit the publish button and it sent the newletter out to several thousand subscribers
Immediately upon publishing, the CPU usage on the machine spiked to 100% and nginx / the web site became unresponsive
This continued for 15 - 20 minutes before the issue resolved itself and the site came back online

After everything came back online I thought the post was fine because it rendered as expected in my laptop browser. However, I later noticed that half of the images were broken when viewing the email or viewing the site in a mobile browser.
Ghost Version
5.44.0
Node.js Version
14.21.3
How did you install Ghost?
Ubuntu, v22.04.2 LTS
Database type
MySQL 8
Browser & OS version
Vanadium & Android, Safari & iOS
Relevant log / error output
{"name":"Log","hostname":"localhost","pid":2452,"level":30,"version":"5.44.0","msg":"Adding one-off job to queue with current length = 0 called 'sendWebmentions'","time":"2023-07-15T14:56:51
.636Z","v":0}
{"name":"Log","hostname":"localhost","pid":2452,"level":30,"version":"5.44.0","msg":"[Webmention] Sending all webmentions for https://blog.lopp.net/how-bury-bitcoin-seed-phrase-backup/","tim
e":"2023-07-15T14:56:51.662Z","v":0}
{"name":"Log","hostname":"localhost","pid":2452,"level":30,"version":"5.44.0","msg":"Adding one-off job to queue with current length = 0 called 'batch-sending-service-job'","time":"2023-07-1
5T14:56:51.700Z","v":0}
{"name":"Log","hostname":"localhost","pid":2452,"level":30,"version":"5.44.0","msg":"Starting email job for email 64b2b3b38e3d8d0994477ef4","time":"2023-07-15T14:56:51.712Z","v":0}
{"name":"Log","hostname":"localhost","pid":2452,"level":30,"version":"5.44.0","req":{"meta":{"requestId":"9899fbe3-920f-4f7a-801e-d05a249a1d93","userId":"1"},"url":"/posts/64a2fc448e3d8d0994477cf4/?formats=mobiledoc%2Clexical&newsletter=default-newsletter&email_segment=all","method":"PUT","originalUrl":"/ghost/api/admin/posts/64a2fc448e3d8d0994477cf4/?formats=mobiledoc%2Clexical&newsletter=default-newsletter&email_segment=all","params":{"id":"64a2fc448e3d8d0994477cf4"},"headers":{"x-forwarded-for":"<IP_ADDRESS>","x-forwarded-proto":"https","x-real-ip":"<IP_ADDRESS>","host":"blog.lopp.net","connection":"close","content-length":"14456","sec-ch-ua":"\"Not.A/Brand\";v=\"8\", \"Chromium\";v=\"114\", \"Brave\";v=\"114\"","dnt":"1","sec-ch-ua-mobile":"?0","app-pragma":"no-cache","user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/<IP_ADDRESS> Safari/537.36","content-type":"application/json; charset=UTF-8","accept":"application/json, text/javascript, */*; q=0.01","x-requested-with":"XMLHttpRequest","x-ghost-version":"5.44","sec-ch-ua-platform":"\"Linux\"","sec-gpc":"1","origin":"https://blog.lopp.net","sec-fetch-site":"same-origin","sec-fetch-mode":"cors","sec-fetch-dest":"empty","referer":"https://blog.lopp.net/ghost/","accept-encoding":"gzip, deflate, br","accept-language":"en-US,en;q=0.9","cookie":"**REDACTED**"},"query":{"formats":"mobiledoc,lexical","newsletter":"default-newsletter","email_segment":"all"}},"res":{"_headers":{"x-powered-by":"Express","content-version":"v5.44","vary":"Accept-Version, Origin, Accept-Encoding","cache-control":"no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0","access-control-allow-origin":"https://blog.lopp.net","x-cache-invalidate":"/*","content-type":"application/json; charset=utf-8","etag":"W/\"6f61-1X2mHp3ZWSs8ZR4AiFAYIE7WRRo\"","content-encoding":"gzip"},"statusCode":200,"responseTime":"203ms"},"msg":"","time":"2023-07-15T14:56:51.724Z","v":0}
{"name":"Log","hostname":"localhost","pid":2452,"level":30,"version":"5.44.0","msg":"Sending email 64b2b3b38e3d8d0994477ef4","time":"2023-07-15T14:56:51.737Z","v":0}
{"name":"Log","hostname":"localhost","pid":2452,"level":30,"version":"5.44.0","msg":"Getting batches for email 64b2b3b38e3d8d0994477ef4","time":"2023-07-15T14:56:51.746Z","v":0}
{"name":"Log","hostname":"localhost","pid":2452,"level":30,"version":"5.44.0","msg":"Creating batches for email 64b2b3b38e3d8d0994477ef4","time":"2023-07-15T14:56:51.756Z","v":0}
{"name":"Log","hostname":"localhost","pid":2452,"level":30,"version":"5.44.0","msg":"Creating batches for email 64b2b3b38e3d8d0994477ef4 segment null","time":"2023-07-15T14:56:51.765Z","v":0}
{"name":"Log","hostname":"localhost","pid":2452,"level":30,"version":"5.44.0","msg":"Fetching members batch for email 64b2b3b38e3d8d0994477ef4 segment null, lastId: 64b2b3b38e3d8d0994477ef4","time":"2023-07-15T14:56:51.765Z","v":0}
{"name":"Log","hostname":"localhost","pid":2452,"level":30,"version":"5.44.0","msg":"Creating batch for email 64b2b3b38e3d8d0994477ef4 segment null with 1000 members","time":"2023-07-15T14:56:51.785Z","v":0}
{"name":"Log","hostname":"localhost","pid":2452,"level":30,"version":"5.44.0","msg":"Inserting 1000 recipients for email 64b2b3b38e3d8d0994477ef4 batch 64b2b3b38e3d8d0994477ef5","time":"2023-07-15T14:56:51.800Z","v":0}
{"name":"Log","hostname":"localhost","pid":2452,"level":30,"version":"5.44.0","msg":"Fetching members batch for email 64b2b3b38e3d8d0994477ef4 segment null, lastId: 632478cbdecba4a2cdd609d7","time":"2023-07-15T14:56:52.213Z","v":0}
{"name":"Log","hostname":"localhost","pid":2452,"level":30,"version":"5.44.0","msg":"Creating batch for email 64b2b3b38e3d8d0994477ef4 segment null with 1000 members","time":"2023-07-15T14:56:52.228Z","v":0}
{"name":"Log","hostname":"localhost","pid":2452,"level":30,"version":"5.44.0","msg":"Inserting 1000 recipients for email 64b2b3b38e3d8d0994477ef4 batch 64b2b3b48e3d8d09944782de","time":"2023-07-15T14:56:52.238Z","v":0}
{"name":"Log","hostname":"localhost","pid":2452,"level":30,"version":"5.44.0","msg":"Fetching members batch for email 64b2b3b38e3d8d0994477ef4 segment null, lastId: 61759424d6f63073c231b2e9","time":"2023-07-15T14:56:52.651Z","v":0}
{"name":"Log","hostname":"localhost","pid":2452,"level":30,"version":"5.44.0","msg":"Creating batch for email 64b2b3b38e3d8d0994477ef4 segment null with 273 members","time":"2023-07-15T14:56:52.660Z","v":0}
{"name":"Log","hostname":"localhost","pid":2452,"level":30,"version":"5.44.0","msg":"Inserting 273 recipients for email 64b2b3b38e3d8d0994477ef4 batch 64b2b3b48e3d8d09944786c7","time":"2023-07-15T14:56:52.666Z","v":0}
{"name":"Log","hostname":"localhost","pid":2452,"level":30,"version":"5.44.0","msg":"Created 3 batches for email 64b2b3b38e3d8d0994477ef4 with 2273 recipients","time":"2023-07-15T14:56:52.807Z","v":0}
{"name":"Log","hostname":"localhost","pid":2452,"level":30,"version":"5.44.0","msg":"Sending 3 batches for email 64b2b3b38e3d8d0994477ef4","time":"2023-07-15T14:56:52.808Z","v":0}
{"name":"Log","hostname":"localhost","pid":2452,"level":30,"version":"5.44.0","msg":"Sending batch 64b2b3b38e3d8d0994477ef5 for email 64b2b3b38e3d8d0994477ef4","time":"2023-07-15T14:56:52.808Z","v":0}
{"name":"Log","hostname":"localhost","pid":2452,"level":30,"version":"5.44.0","msg":"Sending batch 64b2b3b48e3d8d09944782de for email 64b2b3b38e3d8d0994477ef4","time":"2023-07-15T14:56:52.808Z","v":0}
{"name":"Log","hostname":"localhost","pid":2452,"level":30,"version":"5.44.0","msg":"Sent message (569ms)","time":"2023-07-15T14:56:55.318Z","v":0}
{"name":"Log","hostname":"localhost","pid":2452,"level":30,"version":"5.44.0","msg":"Sending batch 64b2b3b48e3d8d09944786c7 for email 64b2b3b38e3d8d0994477ef4","time":"2023-07-15T14:56:55.422Z","v":0}
{"name":"Log","hostname":"localhost","pid":2452,"level":30,"version":"5.44.0","msg":"Sending email to 273 recipients","time":"2023-07-15T14:56:55.521Z","v":0}
{"name":"Log","hostname":"localhost","pid":2452,"level":30,"version":"5.44.0","msg":"Sent message (575ms)","time":"2023-07-15T14:56:55.534Z","v":0}

Errors seen when trying to request certain sizes of the images:

{"name":"Log","hostname":"localhost","pid":2452,"level":30,"version":"5.44.0","req":{"meta":{"requestId":"fef17c04-8cc1-4dd9-a581-9340af6a7345","userId":null},"url":"/content/images/size/w1600/2023/07/tamper_evident_bag.jpg","method":"GET","originalUrl":"/content/images/size/w1600/2023/07/tamper_evident_bag.jpg","params":{},"headers":{"x-forwarded-for":"<IP_ADDRESS>","x-forwarded-proto":"http","x-real-ip":"<IP_ADDRESS>","host":"blog.lopp.net","connection":"close","accept":"image/*,application/octet-stream;q=0.8,*/*; q=0.01","user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)","accept-language":"en-US,en;q=0.8,ru;q=0.6"},"query":{}},"res":{"_headers":{"x-powered-by":"Express","cache-control":"public, max-age=31536000","location":"https://blog.lopp.net/content/images/size/w1600/2023/07/tamper_evident_bag.jpg","vary":"Accept, Accept-Encoding","content-type":"text/plain; charset=utf-8","content-length":"112"},"statusCode":301,"responseTime":"1ms"},"msg":"","time":"2023-07-15T14:56:58.819Z","v":0}

Code of Conduct

[X] I agree to be friendly and polite to people in this repository

I used to manage a site that had 36 million images. One of them was of an innocent looking dog named Mindy. Mindy ruined my weekend.
Every time someone uploaded a photo of Mindy, the server would enter a death spiral and eventually crash. But I did not know someone was trying to repeatedly post Mindy. I only new the web site keep death spiraling.
It took hours, over the weekend, to track down that this wasn't a normal coding problem, but ultimately a bug in the ImageMagick library triggered by invalid JPEG data in Mindy's photo file. ( The fix: use the GraphicsMagick fork ).
Maybe you've encountered a variation of the Mindy bug. You can test to see if specific photos reliably trigger it. If you find one, try running it through a photo processing app that rewrites the file-- any app would do. I'll recommend https://squoosh.app/
This laundering might clean out any triggering corruption inside the original image.  If you can /still/ trigger the issue, I'll wager that either:

Ghost has some kind of validation failure and should be rejecting the image earlier (too big?)
Indeed, Ghost as an image processing bug, or more likely the upstream image processing library it uses.

Unfortunately I haven't been able to reproduce this issue, even if I publish another article with the same images. The only difference is that I'm not emailing out the post when I publish.

Zero-byte files might also happen  if the disk filled up, and that could explain when it's not reproducible now. Even if you check the disk now and it's not full, it's possible the some logs got rotated, the system was rebooted or something else happened to recover disk space.
If you have monitoring setup on the disk space, this could help to observe trends. For example, you might see that a disk is coming close to filling up each day, and the automatic log rotation happens and recovers enough disk space.

Don't think it's a disk space issue; this dedicated machine has 20 GB of free space and doesn't run any other software; looks like it only writes ~50MB of logs per day and logs get compressed once they're 2 weeks old, so a total of less than 1 GB of uncompressed logs.

@jlopp Does it have two partitions like "/" and "/home" or a single partition? If Ghost happens to write to  /tmp was mounted in memory as a RAM disk, that could fill up if a temp file was larger than memory. (I haven't checked Ghost if it caches uploads in tmp).

@markstos only a single partition for /

@jlopp You mentioned at the time you sent your post that it had several images in it-- presumably you could see them before they were published and they looked fine. This indicates that the image were successfully uploaded and, at least then, not-zero-byte.
Because this issue is not reproducible and because it has some indications of a "disk full" scenario, I recommend the issue be closed as Ghost bug.
Sometimes disks can run out of inodes even when they have disk space or there can be "phantom" disk space filling up a disk if log rotation isn't configured correctly.
Having graphs of the disk space and CPU could help better diagnosis an issue like this in the future.

Yes, and I've published several posts since then without seeing the issue re-appear. Will re-open if it happens again and I can surface any commonalities.


Support for Ground End of Day Close API

Would love to see support for Ground End of Day Close API
As a person working with FedEx team with bulk pickups, the end of the day manifest is critical to business operations as well as FedEx operations.
Manifest created by this API enables the pickup driver to scan the barcode on the manifest which logs all the packages being picked up for the given day. This is especially helpful in bulk pickup as the pickup driver is required to scan each package. If you have 100s of packages a day -- scanning each package is just not feasible. This manifest acts like a one barcode for the day linking all the shipments created that day.

Thank you for the suggestion! We appreciate your detailed explanation of how the Ground End of Day Close API would benefit both FedEx and businesses handling bulk pickups. It’s clear that this feature would streamline the pickup process, especially when dealing with a high volume of shipments.
We’ll certainly consider adding support for this API in future updates, but we may need to assess its implementation and ensure it fits well within the current scope of the project. Contributions and PRs are always welcome, so if you or anyone else has experience with this API and would like to contribute, that would definitely help move this forward.
Thanks again for bringing this up!


error when combining merge and sort with pipe

Hi, dear Derek:
I am using bamtools utility programs to merge multiple files and then sort them by coordinates. I can do it in two separated steps without any problem.   However, if I put them in one step as:
bamtools merge -in in_file1 -in in_file2 | bamtools sort -out out_file,
I got many error messages as:
BgzfStream ERROR: unable to open file .sort.temp.0
BamReader ERROR: Could not open BGZF stream for .sort.temp.0
BamMultiReader WARNING: Could not open .sort.temp.0, ignoring file
BgzfStream ERROR: unable to open file .sort.temp.1
BamReader ERROR: Could not open BGZF stream for .sort.temp.1
BamMultiReader WARNING: Could not open .sort.temp.1, ignoring file
....
BgzfStream ERROR: read block failed - invalid block header
BgzfStream ERROR: read block failed - invalid block header
BgzfStream ERROR: read block failed - invalid block header
BgzfStream ERROR: read block failed - invalid block header
BgzfStream ERROR: could not decompress block - zlib::inflate() failed
BgzfStream ERROR: read block failed - could not decompress block data
BgzfStream ERROR: could not decompress block - zlib::inflate() failed
BgzfStream ERROR: read block failed - could not decompress block data
Could you please check it?
Thanks.
Fan

With those error messages, it looks like an older version of BT. If so, can you update and try again? Then let me know how it looks.

Dear Derek:
Thank you so much for the quick reply. The problem I reported before is from version 1.0.6.  I just compiled v2.0.0 and it generated a single error message:
bamtools sort ERROR: could not open BamMultiReader for merging temp files... Aborting.
I guess these errors from 1.0.6 or 2.0.0 are related to the temp files used in sorting algorithm when piping is used.  If either the merged BAM file is small, or the input for sort is from a BAM file instead of a pipe, the sorting is OK.
Thanks.
Fan

Try using a large value for the -n option. If the sort tool is generating a lot of temp files (>1K), you can hit a OS-defined file handle limit (often 1024). Setting a large -n value will up the number of alignments per temp file, reducing the number of those, and you may be OK.
Let me know how this goes.

ps - I plan to add a multi-pass system for merging later on in these large-file cases, which should alleviate the need for users guessing at the -n value until it works. Unfortunately, I just haven't gotten around to implementing it.

Dear Derek:
I tried -n option and it worked with high memory used (~30GB) if n is large enough. So, I have to try different value to avoid the error or hard drive swapping since some node do not have enough physical memory.  The samtools sort function does not have such problem.
Thanks.
Fan

The problem for me is avoided by modifying bamtools to use a tmpnam library (maybe after setenv TMP to '.') to a) create files in the current dir (not tmp), and b) guarantee uniqueness.   Bamtools is the only bam sorter that works within a pipeline... instead of using double the disk space with samtools sort.   So it's good to get it to work.


techer sorting issue

Observed issue

Assumed solution

this closes (#873)

fck, how many issues we have...


scan other kinds of barcodes?

Great job with this plug in!
Do you have any interest in making the plug in work with other kinds of barcodes?
Thinking that it would be relatively straight forward :) & would widen it's appeal.

Thanks for opening this issue, I was going to open it myself as a reminder.
Yes, scanning other codes is definitely in my plans, and as you said it should be quite easy. An enum in the dart interface and a handler (a for loop that adds the accepted types to an array) for that in each platform code should do the trick.
Let me know if you would like to send a pull request for this, if not, I'll try to tackle this during the week.
If you have other suggestions feel free to open issues!

I've already implemented this, but I don't have an iPhone to test it at the moment. I will push it to Github so you can give it a try. After I tested it I will publish to pub.dartlang.org.

Ok, I fixed the iOS scanning and pushed everything.
Now you have to pass an array of CodeFormat when the controller is initialized. The reason why I chose to do this instead of just scanning everything is because it's faster. If I had just let it scan everything, things would be much slower for people who just wants to scan one or two code formats.


Moved LanguageCode from PaperLanguages.txt to PaperUrls.txt

Docs Build status updates of commit a29bb40:
:white_check_mark: Validation status: passed

File
Status
Preview URL
Details

academic-services/graph/media/erd/entity-relationship-diagram-thumbnail.png
:white_check_mark:Succeeded

academic-services/graph/media/erd/entity-relationship-diagram.png
:white_check_mark:Succeeded

academic-services/graph/reference-data-schema.md
:white_check_mark:Succeeded

For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


kola/packet: override EM region for ARM64 server

Equinix Metal ARM server are not yet hourly available in the default sv15 region
so we override the PACKET_REGION to Dallas since it's available in this region.
We do not override PACKET_REGION for both board on top level because we need to keep proximity
for PXE booting.
Signed-off-by: Mathieu Tortuyaux<EMAIL_ADDRESS>To be merged with https://github.com/flatcar-linux/mantle/pull/257

cherry-picked to:

flatcar-3033
flatcar-3066


Request for searching all texts or references

VSCode Version: 1.5.1
OS Version: Windows 10 / Ubuntu

Steps to Reproduce:

Open C/C++ or other language folder
Open a file
Right click on a variable/function/class name

No option is for finding all texts or references.
Currently, Visual Studio Code supports "Change All Occurrences". Finding references or texts support in Visual Studio edition or eclipse, but not in Visual Studio Code.

From VS Code Docs

It comes with built-in support for JavaScript, TypeScript and Node.js and has a rich ecosystem of extensions for other languages (such as C++, C#, Python, PHP) and runtimes

You need to install extensions to get support for C/C++.
You can find these extensions in the marketplace

None of C/C++ extensions work for searching all texts. I just don't see Visual Studio Code supports a searching feature as we have in either Visual Studio or eclipse. I am disappointed the issue was closed.

@kamtungc Below is the feature "Find all References" implemented by the Go Extension for the Go language. I assumed this is what you were referring to and so closed the issue. The APIs for these have been supported by VSCode for a long time. You are always welcome to re-open an issue if you feel your concerns have not been addressed.

If the C/C++ extension does not support "Find all References", then please log an issue in the repo for that extension
For searching just the text, you can always select the word/words and hit Ctrl+Shift+F which will open the Find across Files widget.

Will Ctrl+Shift+F give you the same result as "Search/Find Text" ?

Visual Studio Community 2015 has "Find References", but it supports to find the same file (xxx.h or xxx.c) only. eclipse shows correct entries in the "whole" workspace.

To search a word/set of words in the "whole" workspace you can use Ctrl+Shif+F or click on the search icon in the side bar and use the Find widget. This is a VSCode feature agnostic of extensions/languages/filetype.
For issues with "Find All References", you will have to log an issue with the extension owner in the repo for the C/C++ extension.
Does this help?

ok. let me try it. so, I may not need to install 3rd party extension from marketplace if Visual Studio Code supports for searching texts. I don't want to "replace" all occurrences. I just want to find all occurrences.

@kamtungc Did that work?

ok. It works now. I've also uninstalled "C++ Intellisense" extension. This extension does not work. Thanks for your help.

@kamtungc Glad you are unblocked. Feel free to log an issue for the extension in the repo for the extension so that it can be made better :)


bugfix/label_sliced_way_ends

osm_to_pq.py clips OSM .pbf files of ways to a bounding box and converts the ways to GeoDataFrames of edges, split at junctions. It also tries to label which edges have termini (starts or ends) resulting from being clipped.
An OSM way may be split into several segments, where nodes from other ways intersect the way in question. Previously, it was assumed that any segment ending in a node that wasn't 'shared', i.e. degree >= 2, must have been clipped. In fact, this also includes dead ends and so erroneously labelled many edges as having been clipped.
This PR reworks the script, using an index of all nodes (not just shared ones) to check if a segment end is new (and therefore resulting from a clip operation). It also hopefully improves the readability (although it's still a bit hard to follow).
Fixing this is a step towards network component labeling at scale, i.e. on sections of networks, before joining the sections on the clipped boundaries later.

Should close #114


Suggestion: Auto Page Speed Set to Duration When Autoplaying Videos

When auto playing videos it would make sense to have an option to play the entire video before proceeding.
Currently, depending on your set auto paging speed and the duration of a video, a video will either be cut off or looped several times. If it is possible to change the interval to the currently playing video I believe the experience would be much better.

added


Update build to also work with Fedora 27

Describe what this PR does and why we need it:
Changes the build command in the RPM spec. We have been getting an error due to using -tags, but it has not been fatal until Fedora 27.
Changes proposed in this pull request

On the related bug the suggestion if using any other flag besides -o is to use the go build command directly rather than %gobuild, so I am doing that.
https://bugzilla.redhat.com/show_bug.cgi?id=1409931

Does this PR depend on another PR (Use this to track when PRs should be merged)
depends-on
N/A
Which issue this PR fixes (This will close that issue when PR gets merged)
fixes <issue_number>
N/A

ACK

ACK


flutter run fails while attempting to run on iOS 9 device with Xcode 8

Steps to Reproduce
$ flutter create hello-world
[...]
[✓] Flutter is fully installed. (on Mac OS, channel master)
[✓] Android toolchain - develop for Android devices is fully installed. (Android SDK 23.0.1)
[✓] iOS toolchain - develop for iOS devices is fully installed. (Xcode 8.0)
[✓] Atom - a lightweight development environment for Flutter is fully installed.
[✓] Connected devices is fully installed.

$ cd hello-world
$ flutter run -v
[...]

   0 ms • ------ Debug phase ------
 229 ms • Starting debug of iPhone 6 Plus 'Brett's iPhone' (698b4da3275b3613ea0785a4b0718ce3ebf9bb38) connected through USB...
 156 ms • [  0%] Looking up developer disk image
 548 ms • [ 95%] Developer disk image mounted successfully
   0 ms • [100%] Connecting to remote debug server
  18 ms • -------------------------
   0 ms • (lldb) command source -s 0 '/tmp/fruitstrap-lldb-prep-cmds-698b4da3275b3613ea0785a4b0718ce3ebf9bb38'
   0 ms • Executing commands in '/tmp/fruitstrap-lldb-prep-cmds-698b4da3275b3613ea0785a4b0718ce3ebf9bb38'.
   0 ms • (lldb)     platform select remote-ios --sysroot '/Users/brett/Library/Developer/Xcode/iOS DeviceSupport/9.3.5 (13G36)/Symbols'
   0 ms •   Platform: remote-ios
   0 ms •  Connected: no
   0 ms •   SDK Path: "/Users/brett/Library/Developer/Xcode/iOS DeviceSupport/9.3.5 (13G36)/Symbols"
 447 ms • (lldb)     target create "/Users/brett/flutter-apps/hello-world/build/ios/Release-iphoneos/Runner.app"
   0 ms • Current executable set to '/Users/brett/flutter-apps/hello-world/build/ios/Release-iphoneos/Runner.app' (arm64).
   0 ms • (lldb)     script fruitstrap_device_app="/private/var/containers/Bundle/Application/573DAE5E-BB2D-475F-8A10-5430B0726A6E/Runner.app"
   0 ms • (lldb)     script fruitstrap_connect_url="connect://<IP_ADDRESS>:49557"
   2 ms • (lldb)     command script import "/tmp/fruitstrap_698b4da3275b3613ea0785a4b0718ce3ebf9bb38.py"
   0 ms • (lldb)     command script add -f fruitstrap_698b4da3275b3613ea0785a4b0718ce3ebf9bb38.connect_command connect
   0 ms • (lldb)     command script add -s asynchronous -f fruitstrap_698b4da3275b3613ea0785a4b0718ce3ebf9bb38.run_command run
   0 ms • (lldb)     command script add -s asynchronous -f fruitstrap_698b4da3275b3613ea0785a4b0718ce3ebf9bb38.autoexit_command autoexit
   0 ms • (lldb)     command script add -s asynchronous -f fruitstrap_698b4da3275b3613ea0785a4b0718ce3ebf9bb38.safequit_command safequit
  25 ms • (lldb)     connect
   0 ms • (lldb)     run
   0 ms • Traceback (most recent call last):
   0 ms •   File "/tmp/fruitstrap_698b4da3275b3613ea0785a4b0718ce3ebf9bb38.py", line 35, in run_command
   0 ms •     lldb.target.Launch(lldb.SBLaunchInfo(shlex.split(args[1] and args[1] or '--enable-checked-mode')), error)
   0 ms • IndexError: list index out of range

Flutter Doctor
$ flutter doctor
[✓] Flutter (on Mac OS, channel master)
    • Flutter at /Users/brett/github/flutter
    • Framework revision c27b03b823 (5 hours ago), 2016-09-23 17:40:16
    • Engine revision 3551e7a48e
    • Tools Dart version 1.20.0-dev.5.0

[✓] Android toolchain - develop for Android devices (Android SDK 23.0.1)
    • Android SDK at /Users/brett/Library/Android/sdk
    • Platform android-24, build-tools 23.0.1
    • Java(TM) SE Runtime Environment (build 1.8.0_92-b14)

[✓] iOS toolchain - develop for iOS devices (Xcode 8.0)
    • XCode at /Applications/Xcode.app/Contents/Developer
    • Xcode 8.0, Build version 8A218a

[✓] Atom - a lightweight development environment for Flutter
    • flutter plugin version 0.2.5
    • dartlang plugin version 0.6.39

[✓] Connected devices
    •  • 698b4da3275b3613ea0785a4b0718ce3ebf9bb38 • ios

I'm not sure what fruitstrap is or why lldb is involved in launching.  @chinmaygarde would know.  FYI @danrubel

Turns out I missed a warning from brew install that I didn't have Xcode command line tools installed for Xcode 8. Installed the command line tools, and this error went away. Got another error tho, so raising a new bug...


Added tool to normalize intensities of an image.

Yes sure, I didn't know that, sorry! I'll also check the style regarding the flake8 again.

@qgao-hd Oo did I miss here something?

@bgruening No, you didn't miss anything. My colleague simply did a trial integration of new tools into Galaxy before I left the BMCV group.


Hyprland Crashes on single finger touch and edge swipe

I tried the gestures and sometimes Hyprland crashes, but Hyprland crashes every time if its just a single touch interaction (aka touching something on screen), also happens on edge swipe.
Here I have attached the crash log, from just using the touch screen normally (single finger touch), if that helps:
hyprlandCrashReport9655.txt
Config:
plugin {
    touch_gestures {
      sensitivity = 4.0
      workspace_swipe_fingers = 4
    }
}

bind =,edge:d:u,exec,/usr/bin/kill -s 34 $(pidof wvkbd-mobintl) #crashes
bind =,swipe:3:u,exec,/usr/bin/notify-send hi                   #works
bind =,edge:u:d,exec,$term --class dropdownterm                 #crashes

I have not looked into this in any detail and won't be able to look at it, but I wanted to report this here (maybe others have the same experience).
Also thank you for creating this plugin to bringing gesture support to Hyprland.

possibly a mismatched version, rebuild hyprgrass.
If that doesn't work, check if you have /usr/local/include/hyprland, if so, remove remove /usr/include/hyprland, /usr/local/include/hyprland, /usr/share/pkgconfig/hyprland.pc and /usr/local/share/pkgconfig/hyprland.pc, then reinstall Hyprland and hyprgrass

Has not worked for me yet, but I will keep trying.
It's only edge swipe and normal touch interactions.
Workspace swipe and multi finger gestures do work perfectly.
I will test it this WE on another machine just in case.

hyprland commit: 5b8cfdf
hyprgrass commit: 878bcda
In both debug and release builds:

Single touch inputs can crash hyprland
Log message [wlr] [types/seat/wlr_seat_touch.c:190] could not create touch point appears during a single touch input if it does not crash hyprland.
Bound gestures (swipe etc.) do not crash hyprland

However the crash frequency between debug and release builds is different.

Release build: single touch input crashes hyprland 9/10 times
Debug build: single touch input crashes hyprland 1/20 times

Debug crash log:
hyprlandCrashReport587496.txt

hyprlandd.log

This happens to me as well

Issue has been resolved for me with PR #60. See https://github.com/horriblename/hyprgrass/issues/45#issuecomment-1811624812 for more information.

it seems the problem is fixed for most people, feel free to reopen if not


Missing docs

Thanks for the client implementation! I am trying to make this example work https://defold.com/2021/03/02/Creating-online-games-using-Nakama-and-Defold/ but I was not able to use the same matchmaking function. It seems to have been renamed to matchmaker_add. Now I'm trying to make that work. https://heroiclabs.com/docs/nakama/concepts/multiplayer/matchmaker/ would probably have been helpful but docs are missing there. Would it be possible to restore them?

https://heroiclabs.com/docs/nakama/concepts/multiplayer/matchmaker/ would probably have been helpful but docs are missing there. Would it be possible to restore them?

@tomglenn is working on updated Defold documentation. I do not know the status of this.

I am trying to make this example work https://defold.com/2021/03/02/Creating-online-games-using-Nakama-and-Defold/ but I was not able to use the same matchmaking function. It seems to have been renamed to matchmaker_add. Now I'm trying to make that work.

Yeah, that article (and accompanying example project) will have to be updated at some point to match the new Nakama release.
What you want to do now is to call the matchmaker_add() function on the client socket:
local client = nakama.create_client(config)
local socket = client.create_socket()
local result = socket.matchmaker_add(2, 2, "*")

Thanks @britzl. Then I would syspect there is something wrong implementaiton of the function perhaps? Passing just 2 of those values will result in assertion error as nil values for other parameters are not allowed?

Also was meant to mention, log statements across lua files don't do anything, were we supposed to call log.print() in each file to make debugging work?

Hi @SamsTheGreatest, we do not currently have an ETA on when the full Defold Client SDK docs will be updated to the latest 3.0 release, however it is something we are actively working on. I apologise I do not have a more concrete answer than this at this time.

Passing just 2 of those values will result in assertion error as nil values for other parameters are not allowed?

Ah, hmm, yes, maybe we should accept nil for any value. There is however nothing in the API spec which says if an argument is required or optional.
@tomglenn do the other engine APIs accept null values for function arguments?

Also was meant to mention, log statements across lua files don't do anything, were we supposed to call log.print() in each file to make debugging work?

The log is silent by default. You can call log.print() once to switch to using print() logging.

There is a parameter count_multiple which is not mentioned in any docs

https://github.com/heroiclabs/nakama-common/blob/master/rtapi/realtime.proto#L378

Hi @SamsTheGreatest, we do not currently have an ETA on when the full Defold Client SDK docs will be updated to the latest 3.0 release, however it is something we are actively working on. I apologise I do not have a more concrete answer than this at this time.

Thanks for clarifications. Would it be possible for me to refer to something apart from source code when waiting for docs from your side? I am trying to assemble a match-based game and have some questions regarding the development. Would be very cool to have updated docs and more examples ;)
Btw, when trying to test matchmaker API, what is the best practice? Do I have to clone the project manually and then run another client, simulating a new user trying to join the match? Or is there something more neat to test if I can create a match? I have some more devices at hand, could this be helpful? Maybe you could give some tips :)

@SamsTheGreatest For this function specifically yes, the .NET client does allow null values for example (https://github.com/heroiclabs/nakama-dotnet/blob/master/Nakama/Socket.cs#L202).

I am not sure if I can propose changes to your code, but check the snippet above, worked for me:)

Btw, when trying to test matchmaker API, what is the best practice? Do I have to clone the project manually and then run another client, simulating a new user trying to join the match? Or is there something more neat to test if I can create a match? I have some more devices at hand, could this be helpful? Maybe you could give some tips :)

The problem is that you can't launch multiple instances of your project from the editor. What I usually do is to drop a Defold engine binary in the root of my project and use that to launch additional instances:

Launch game client number one from the Defold editor (Project->Build)
Launch game client number two+ from a terminal/command prompt by running a copy of dmengine from the project root (download from http://d.defold.com/stable/)

@britzl so if I do open -n -a defold and open the same project there its not the same? Could you clarify how to run a copy of dmengine the way you describe? I have one defold app in my Applications folder. dmengine shall be placed in the folder of the project itself? is it different from defold.app?

dmengine shall be placed in the folder of the project itself? is it different from defold.app?

dmengine is the game engine itself. Defold.app is the editor, build tools etc

@britzl what would be the right dmengine file I need to download from there? And how do I use it afterwards?

@britzl works like a charm! But then I need to make changes to the Nakama plugin (due to corrupted code). I can do it within the editor but changes will not be saved. I downloaded it manually and store it in the same fashion as the defold does by "default" (hehe). That seems to have worked, but now websocket extension is complaining (only! when running via ./dmengine), specifically DEBUG:SCRIPT: nakama/engine/defold.lua:152: attempt to index global 'websocket' (a nil value) - guess it refers to that it cant find connect method in the table?. I did not download it in the same fashion, just provided as a dependency in the project file. I still don't understand the mechanics of how websocket is being loaded in the code without require("websocket") statement tbh...

Thanks I am able to run it now! :)
Just trying to make the basics work..
So now I am able to create amultiple instances of clients. I do authetication by email, and i generate a random email and username for each client. Server dashboard shows 4 active sessions when I have 4 clients (happy times I guess?).. Aight so when I then do
local result = socket.matchmaker_add(2, 2,"*")
pprint(result)

output - > DEBUG:SCRIPT:  { --[[0x11af6fae0]]
  cid = "1",
  matchmaker_ticket = { --[[0x11af6fbb0]]
    ticket = "8314f4eb-902c-4b0f-bc1c-8b3465a58496"
  }
}

Happy times again?
additionally, before calling matchmaker_add I registered events:
socket = client.create_socket()

socket.on_matchmaker_matched(function(message)
  log('We are matching')
  local matched = message.matchmaker_matched -- make sure we got matched
  if matched then
    print(matched.match_id)
    print(matched.token)
  end
end)

socket.on_match_presence_event(function(message)
  log("on_match_presence_event:",message)
end)

socket.on_match_data(function(message)
  log("on_match_data:",message)
end)

local ok, err = socket.connect()

And on the server I have main.lua with:
function matchmaker_matched(context, matched_users)
  log('hello world')
end
nk.register_matchmaker_matched(matchmaker_matched)

When I start the server it says Registered Lua runtime Matchmaker Matched function invocation, but the function matchmaker_matched never seems to be called, when clients are connected.
Am I missing something?

And on the server I have main.lua with:
function matchmaker_matched(context, matched_users)
  log('hello world')
end
nk.register_matchmaker_matched(matchmaker_matched)

When I start the server it says Registered Lua runtime Matchmaker Matched function invocation, but the function matchmaker_matched never seems to be called, when clients are connected. Neither there is any print statement on the client..

I can't remember the details of the server I'm afraid. The snippet of code you shared for main.lua, is that actually all you have in the file or did you extract only that bit? Make sure you have a structure similar to this:
https://github.com/defold/game-xoxo-nakama-server/blob/main/main.lua

It worked after upgrading server to 3.11.0, praise the lord

Happy to hear you got it working!

Could I ask another thing. When authenticated does it make sense to store a session as a variable? For example I have a file client_nakama.lua that I then import into main.script
In client_nakama.lua:
local client
local session
local socket
local account

M = {}
function M.create_client()
  local config = {}
  config.host = sys.get_config("nakama.host", "<IP_ADDRESS>")
  config.port = tonumber(sys.get_config("nakama.port", "7350"))
  config.use_ssl = (config.port == 443)
  config.username = sys.get_config("nakama.server_key", "defaultkey")
  config.password = ""
  config.engine = defold
  config.timeout = 10
  client = nakama.create_client(config)
end

function M.authenticate_email()
  local email =<EMAIL_ADDRESS>  local password = "batsignal"
  nakama.sync(function()
    session = client.authenticate_email(email, password) --client table is accessible from here
    pprint(session) -- prints session
    nakama.set_bearer_token(client, session.token)
  end)

  pprint(session) -- no print!!!!
end

return M

in main.script in init (I guess we only must do it in init?) I import client.lua and then do
local nakama_client = require 'main/client_nakama'
nakama_client.create_client()
nakama_client.authenticate_email()

The first print statement of the session is executed. The second one gives session->nil as we set on top of the lua script. So I have to do everything in a single sync call?
Imagine I have an app, launch it, do login via email, and get my session (which is only accessible in coroutine). Can I use this session somehow during other stages of the game? Like when a player tries to join a match, or do I have to get a new session (reauthenticate)? Do I save the session token and then restart the session when a player wants to join a match? Whats the right workflow?

Can I use this session somehow during other stages of the game? Like when a player tries to join a match, or do I have to get a new session (reauthenticate)? Do I save the session token and then restart the session when a player wants to join a match? What's the right workflow? Guess all via callbacks as in your xoxo example?

The recommended way is to:

Authenticate the user using one of the way to authenticate (email, faccebook etc)
Set the session using nakama.set_bearer_token()
Call as many Nakama APIs as you want! No need to reauthenticate each time

To allow for relogin for a returning user you can also store the token and check if it has expired and only re-authenticate if the token has expired.
All of this is mentioned in the Sessions section of the readme:
https://github.com/heroiclabs/nakama-defold#sessions
Also a note on your example:
function M.authenticate_email()
  local email =<EMAIL_ADDRESS>  local password = "batsignal"
  nakama.sync(function()
    session = client.authenticate_email(email, password) --client table is accessible from here
    pprint(session) -- prints session
    nakama.set_bearer_token(client, session.token)
  end)

  pprint(session) -- no print!!!!
end

The reason why the pprint() at the end of the authenticate_email() function is nil is because the code inside the nakama.sync() block is asynchronous and involves server communication etc. The pprint() below the nakama.sync() will run immediately and before the code inside the sync has finished.

@britzl Looking at your example here https://github.com/defold/game-xoxo-nakama-client/blob/main/main/xoxo_nakama.lua I was trying to implement something similar. I have a game.script where I do all drawing, spawning objects and such, as well as recording player inputs. I have added middle-layer client.lua which handles all nakama-related things. I then import this module into all other defold scipts such as game.script.
Now, in game.script I call client.lua module, I am able to log in, and add event hooks (guess that's what you call them). I reached the stage when the server adds us to a match and sends back game states, I am able to receive them no problem.
Now I am trying to send inputs from game.script to client.lua somehow. You did it in reverse, you import game.script into client.lua and then hook an input event using game.on_player_input(callback).
Do you think I would be able to communicate with game.script with my setup in any way? Specifically, I am trying to send match state to game.script and send user inputs to client.lua.
client.lua to game.script:
nakama.sync(function()

  local socket = nakama_socket.create(client)
  ...
  socket.on_matchmaker_matched(function(message)
        local match_id = message.matchmaker_matched.match_id   <-- match_id is only available within sync call right?
        ...
  end)

  socket.on_match_data(function(message)
        local data = json.decode(message.match_data.data)
        local op_code = tonumber(message.match_data.op_code)
        if op_code == 1 then
          msg.post('game#game', 'update_state', data)     <-- will this send the match state to game.script?
  end)

end)

game.script to client.lua:
function on_input(self, action_id, action)
	if action_id == hash("jump") then
              msg.post('client', 'jump')     <-- will this send the input to client.lua?
        end

I need match_id to be able to send inputs to nakama, but its locked inside the nakama.sync, so I need to define some function in the nakama.syncscope just like you did in your code.
Is it possible to implement this with my setup? I don't think doing it in reverse like in your script is good for my case as I import client.lua in a lot of script files over game lifecycle.
All those nested callbacks look like spaghetti to me for now 🤪. Wonder if its possible to bring some structure to it.

msg.post('client', 'jump')     <-- will this send the input to client.lua?

You can't post messages to Lua modules. I think I'd create a client.lua module and let that handle communication with Nakama and let it receive and send user input/actions:

-- client.lua
local M = {}

-- these are values that you need access to from all functions in this module
local current_match_id = nil
local client = nil
local socket = nil

-- send a message to game.script on the game object game
local function send_to_game(message_id, message)
	msg.post("game#game", message_id, message or {})
end

local function on_matchmaker_matched(message)
	current_match_id = message.matchmaker_matched.match_id
	send_to_game("matchmaker_matched")
end

local function on_match_data(message)
	local data = json.decode(message.match_data.data)
	local op_code = tonumber(message.match_data.op_code)
	if op_code == 1 then
		send_to_game.post('update_state', data)
	end
end

-- login
-- create client and socket
-- set up event handlers
function M.login(email, password)

	nakama.sync(function()

		-- create and authenticate client
		client = nakama.create_client(config)
		local session = client.authenticate_email(email, password)
		-- handle client connect errors
		...
		nakama.set_bearer_token(client, session.token)

		-- create and connect socket
		socket = nakama_socket.create(client)
		local ok, err = socket.connect()

		-- handle socket connect errors
		...

		-- set up socket event handlers
		socket.on_matchmaker_matched(on_matchmaker_matched)
		socket.on_match_data(on_match_data)
	end)
end

function M.jump()
	-- buffer and or send here
end

return M

@britzl  thank you, I made it work your way! However when sending an encoded message to the server though, I get:
on server:
nakama_1       | {"level":"warn","ts":"2022-05-18T16:25:43.463Z","caller":"server/session_ws.go:239","msg":"Received malformed payload","uid":"8fe7bfbe-613e-4e28-8d8b-13e716e63776","sid":"21a1a0a4-d6c7-11ec-89a6-7106fdcb5b46","data":"eyJtYXRjaF9kYXRhX3NlbmQiOnsib3BfY29kZSI6MiwiZGF0YSI6IntcImxlZnRcIjpmYWxzZSxcImp1bXBcIjp0cnVlLFwicmlnaHRcIjpmYWxzZX0iLCJtYXRjaF9pZCI6ImFlZTMzMDdhLTUwZmQtNGJkOS1iZTI3LTM0M2ZlZDA0YmEwYi5uYWthbWExIn0sImNpZCI6IjMifQ=="}

decoding data gives:
{"match_data_send":{"op_code":2,"data":"{\"left\":false,\"jump\":true,\"right\":false}","match_id":"aee3307a-50fd-4bd9-be27-343fed04ba0b.nakama1"},"cid":"3"}

original message before encoding:
action = {jump = true,left = false,right = false}

The only error message in Defold logs is ERROR:WEBSOCKET: Failed to setup callback
Were those quotes \" supposed to be there? Does it make sense or am I doing something wrong again? 😅

There seems to be a typo either in socket_send or match_data_send of socket.lua, when composing a message there is match_data_send but socket_send wants just match_data. I am not sure which one was intended to be used here.

Tested, all stuff in socket_send shall be renamed to match_data_send.

Good catch!


test(mempool): refactor test_add_tx_with_identical_tip to use mempool…

… state

This change is

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 83.14%. Comparing base (ba6056d) to head (23b3947).

Additional details and impacted files
@@                            Coverage Diff                             @@
##           ayelet/mempool/mempool-state-compare-func     #445   +/-   ##
==========================================================================
  Coverage                                      83.14%   83.14%
==========================================================================
  Files                                             37       37
  Lines                                           1732     1732
  Branches                                        1732     1732
==========================================================================
  Hits                                            1440     1440
  Misses                                           215      215
  Partials                                          77       77

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


Bugfix: Updated the AlphaFold notebook to make it compatible with newer versions of Google Colab (fixes the jax_experimental_name_stack error)

Since the newest Release of Google Colab(reference: https://colab.research.google.com/notebooks/relnotes.ipynb) the notebook has moved from Jax 0.3.17 to 0.3.25 which has Deleted the jax_experimental_name_stack config option(reference: https://jax.readthedocs.io/en/latest/changelog.html) This is causing the notebook to crash at the "5. Run AlphaFold and download prediction" step by throwing a config error as shown below:

This pull request solves the issue by downgrading the Jax and Jaxlib to 0.3.17 and 0.3.15[cuda] in the first stage of running the notebook and thus making the notebook functional

Hi thanks for providing this PR. Its no longer needed as we have updated Jax and Haiku, so I will close this.


Redact Password Fields?

From the Ecto Documentation:

A field marked with redact: true will display a value of redacted when inspected in changes inside a Ecto.Changeset and be excluded from inspect on the schema unless the schema module is tagged with the option @ecto_derive_inspect_for_redacted_fields false.

Does it make sense for Pow to be redacting password fields?
Thanks!

Yes, this is great, thanks!

Thanks for taking this across the finish line!


Add additional scrape config params to PodMonitoring

Could you rebase this as well? I missed this was the child in a PR chain.

Done


Binary data file as input

Love this Godot add-on.
I'm working on a project to render visuals from data produced by physics simulation.  The data of interest right now is scalar field data, output as a binary file.  The files produced by the type of simulation I am running can be quite large, but I am using GPU accelerated laptop and PC computers rather than supercomputers, so I tailor the simulation accordingly, and the output files are up to around 500 MB in size.  Your ReadMe text describes creating a packed file of .png images for input.  Is that the only option for input?  The Online Converter website that you mention limits the input file to less than 200 MB, so I may be out of luck there.  Are there other converter applications, or could I format the output myself to make if readable by your add-on?
Keep up the good work!
Thanks,
Kim

I used the converter because it seemed to be the easiest way to convert MRI scan data into something Godot could process.  If you're a programmer, you could dump the vector data into your own file format and then write a custom loader for that format in the addon.  I've not touched it in a while, but if I recall correctly it can use any Texture3D as data, so if you write your own class which extends Texture3D, it should be able to use that.

Thank you for responding.  This is just what I need to know.
I'm not a programmer myself, but I have had assistance from a number of very skilled programmers from time to time during the course of this project.
You suggest that I might save my simulation output in a custom file format and then modify Godot to be able to input that file format.  Well, could I just save the output in a file format that is already able to be input to Godot?  If so, can you recommend a format that would be appropriate for me to use?  I see ImageTexture3D in the VolumeLayers texture dropdown menu.  Would that work?
Thanks again for your help here.  I believe we are almost done.
Kim

Got 'er done.  My son wrote the code to convert raw output from my simulation into a set of .png files.  Your shader reads that just fine, and I now have it running in VR:

and a boring video of the image in VR:
(https://www.youtube.com/watch?v=Qrib7G82E34)
Closing the issue.  Thanks for the help, and thanks especially for the volume_layers add in.
Kim

I'm not sure if you'd find this useful, but I also have another project that uses marching cubes to turn density fields into geometric meshes: https://youtu.be/6LETzlfixK8

Thanks for the info regarding construction of a custom data input capability.  I will be able to put that to use in due time. For now, I am pressing on with implementing output of a .png dataset directly from the simulation, and using that to demonstrate the ability to show a visualization as the simulation is running.
I am indeed interested in the marching cubes visualization.  I have it running on my Linux machine and plan to have it working in VR on the Windows machine in the next couple of weeks as time allows.

and a short video, at (https://youtu.be/KUBadU9UaF4)
Thanks again for the capabilties!

Just a note: retrieving both the Volume Shader and the Marching Cubes from the Releases page does not include the art.  The art folder is present but no Iguana or other .zip files.  In both cases I had to go back to the main repository page and download the repo as a zip file to get the art files.

The iguana model should be there.  It should be under /godot/art/iguana.  I don't want to check in more than that because the files are large and I don't own the copyright.
https://github.com/blackears/godot_volume_layers/tree/master/godot/art/iguana


#342 Fix to allow tablesaw to work properly if loaded after the DOMContentLoaded event has fired (dist files removed)

Not sure why it’s not linking to travis automatically but the tests passed for this, I’m going to merge: https://travis-ci.org/filamentgroup/tablesaw/builds/465111267


Detecting Enter+Modifier

Hey,
I am currently trying to write a small text editor component for a chat. In order to insert a newline, you are supposed to hit Shift+Enter, sadly tcell always returns 0 no matter which modifier I hit in combination with Enter, except for Alt.
Is it possible to fix this behaviour?
I am on linux x64 and I am using a vte-based terminal.

:+1: For this.  Key combinations would be helpful, has anyone tried this?

Generally Linux and Unix terminal emulators don't support sending modifiers with Enter. If you have evidence otherwise (escape sequences) please let me know.


Expose CommandPermission in NoPermissionException

Not quite sure how I feel about the new method being fluent, while the other exceptions don't use fluent getters. This seemed like the best name though given what there is to work with.

i believe i'll need to update the exception handlers of each platform to not use the deprecated method - i'll do so asap if this change is accepted


MH-13161, Simplify log statements

This patch reduces the complexity of some log statements, in particular
by replacing the use of ExceptionUtils#getStackTrace by the same
functionality built into the logger used by Opencast.

Fixed merge conflicts


.Net Adaptive card not rendering with large data in Teams

Copied bug from: https://github.com/microsoft/AdaptiveCards/issues/3797
Details from original post:
Hi,
I am using Adaptive cards version v.1.2.4.
When I am trying to post Weather report Today , 24 Hour and 5 Day  in single message using Adaptive card in Teams channel using json. But it giving below error
Operation returned an invalid status code 'RequestEntityTooLarge'   at Microsoft.Bot.Connector.Conversations.ReplyToActivityWithHttpMessagesAsync(String conversationId, String activityId, Activity activity, Dictionary`2 customHeaders, CancellationToken cancellationToken)
Is there any limitation of  size of the data that can be posted in teams using Adaptive card.
Please help me.
Document Details
⚠ Do not edit this section.It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 3fb4394d-25b1-8752-3996-fe3a2934732d
Version Independent ID: 6d391381-89d0-117c-27cc-00043bd26a36
Content: Cards reference - Teams
Content Source: msteams-platform/task-modules-and-cards/cards/cards-reference.md
Product: msteams
GitHub Login: @surbhigupta12
Microsoft Alias: surbhigupta12

@nagavamsi777
Maximum allowed length of MS Teams message is only 28 KB based on following doc.
https://docs.microsoft.com/en-us/microsoftteams/limits-specifications-teams#teams-and-channels
The feature for increasing the size limit is currently in dev state and there is no ETA to share

We are closing this issue for now, Please feel free to reopen it, if required.


Branch ideas

Here are a few of the branch ideas I would like to have implemented:

[ ] glamor
[x] jest (w/enzyme)
[ ] mocha (w/enzyme)
[ ] mobx
[ ] preact
[ ] postcss (seems like an easy one to trip over, so may be useful to have a working branch)

I might take the mobx + postcss.
I've already got a project using it. Basically, I used the redux branch as a start, and worked my way from there.

What about a mix between jest (w/enzyme) and style-components?

I'm using jest w/ enzyme in my personal projects. Hell, I've even been using Jest to test my Node APIs

@streus wow! Jest plays nicely with the nodejs side too? That is awesome. I definitely need to give it a bash! :-)

@lucianlature I would prefer if we didn't mix concerns in the branches. That way a styled-components/css-modules/glamor branch could be merged with a jest/mocha branch quite easily when required. :-)

It works really nicely. I was surprised. Got rid of all the mocha, mocha-chai, sinon-chai, etc and now am slowly migrating all of my tests to just using jest.

This https://github.com/adriantoine/enzyme-to-json allows you to even use Jest snapshots with Enzyme. Glorious.

I would love it if you added a branch here 😇

Not a problem. I'll get to it tonight over a beer or two.

Jest w/ Enzyme https://github.com/ctrlplusb/react-universally/tree/feature/jest-enzyme

React Toolbox branch example: #149

Thanks @strues!

Koa instead of Express is an idea.
Another idea is a more plug-and-play / mix-and-match with plugins and loaders.

Some solid ideas.
I'm also considering removing the mocha option out of respect to the awesomeness that is Jest. 😆

@strues: I have an working example of using koa2. Interested?

Sure @lucianlature.
@ctrlplusb Im going to play around with Redis caching the server rendered pages. Ive heard performance gained can be quite massive

Ive got styled-components working flawlessly. I can create a branch if you'd like.

Awesome man!  Yes please!
Been meaning to speak to you about naming strategies for the branches.  We have a disconnect between your git-flow styled "feature/x" branch names, and the others which are standalone.  I don't really have a preference for one or the other, but we should probably all decided on a standard moving forward.
@carsonperrotti is pretty much the master of the apollo branch, so would be good to coordinate with him.
I'll leave this coordination up to the two of you in my absence. :)
Chat again after the 26th.
Peace.

Go ahead and rename the two branches with feature/ in them? I'll drop the habit for this project ;)

What about a Branch using the Found lib for routing?
Found is designed to work with Relay (found-relay), so in the longer run my aim will be to get that working.
For now, I've created a WIP PR that implements Client Side Rendering with Found. SSR isn't working with Found, yet, but support will hopefully follow soon.

Closing in favour of #201


Hi， is there a bug in Video-LLaVA-main/videollava/model/multimodal_encoder/builder.py?

I want to do finetune based on native llama and languagebind.
In principle, if the model is downloaded locally, it will take the first "if" (because if is_absolute_path_exists is True), but this will cause it to a misalign error.

But if I manually switch to the second branch, it says imagetower and videotower's hiddendim are different.
But I think my configuration files are all pulled from huggingface, there should be no configuration errors? So what causes such a strange phenomenon？

What is your "image tower"? The assertion function enforces the encoder's output dimension to be 1024. It appears that 768 is the dimension for a base version of the image encoder.

I have the same problem in local computer, but  it works in https://colab.research.google.com/.
error like:
RuntimeError: Error(s) in loading state_dict for CLIPVisionModel:
size mismatch for vision_model.embeddings.class_embedding: copying a param with shape torch.Size([1024]) from checkpoint, the shape in current model is torch.Size([768]).

save issue

Hi everyone, what is your "image_tower"? is there a minimal runtime code to help me reproduce the error?

config file:
"intermediate_size": 11008,
"max_position_embeddings": 4096,
"mm_hidden_size": 1024,
"mm_image_tower": "/home/demi/model_lib/LanguageBind_Image",
"mm_projector_type": "mlp2x_gelu",
"mm_use_x_patch_token": false,
"mm_use_x_start_end": false,
"mm_video_tower": "/home/demi/model_lib/LanguageBind_Video_merge",
"mm_vision_select_feature": "patch",
"mm_vision_select_layer": -2,
"model_type": "llava",
"num_attention_heads": 32,

If you want to run model locally, maybe you can refer to this issue.
https://github.com/PKU-YuanGroup/Video-LLaVA/issues/57#issuecomment-1880367313

I sovled! I changed the code just like
def build_image_tower(image_tower_cfg, **kwargs):
    image_tower = getattr(image_tower_cfg, 'mm_image_tower', getattr(image_tower_cfg, 'image_tower', None))
    is_absolute_path_exists = os.path.exists(image_tower)
    # if is_absolute_path_exists or image_tower.startswith("openai") or image_tower.startswith("laion"):
    #     return CLIPVisionTower(image_tower, args=image_tower_cfg, **kwargs)
    if image_tower.startswith("openai") or image_tower.startswith("laion"):
        return CLIPVisionTower(image_tower, args=image_tower_cfg, **kwargs)
    if image_tower.endswith('LanguageBind_Image'):
        return LanguageBindImageTower(image_tower, args=image_tower_cfg, cache_dir='./cache_dir', **kwargs)
    if 'mae' in image_tower:
        print('maemaemaemaemaemaemaemae')
        print('maemaemaemaemaemaemaemae')
        print('maemaemaemaemaemaemaemae')
        print('maemaemaemaemaemaemaemae')
        print('maemaemaemaemaemaemaemae')
        return MAEVisionTower(image_tower, args=image_tower_cfg, cache_dir='./cache_dir', **kwargs)
    raise ValueError(f'Unknown image tower: {image_tower}')

In fact, if you choose running locally, and you should choose the second "if".
I haven't changed anything else, but the "mismatch" error disappear, so it's still weird, but anyway, it works now！

I sovled! I changed the code just like
def build_image_tower(image_tower_cfg, **kwargs):
    image_tower = getattr(image_tower_cfg, 'mm_image_tower', getattr(image_tower_cfg, 'image_tower', None))
    is_absolute_path_exists = os.path.exists(image_tower)
    # if is_absolute_path_exists or image_tower.startswith("openai") or image_tower.startswith("laion"):
    #     return CLIPVisionTower(image_tower, args=image_tower_cfg, **kwargs)
    if image_tower.startswith("openai") or image_tower.startswith("laion"):
        return CLIPVisionTower(image_tower, args=image_tower_cfg, **kwargs)
    if image_tower.endswith('LanguageBind_Image'):
        return LanguageBindImageTower(image_tower, args=image_tower_cfg, cache_dir='./cache_dir', **kwargs)
    if 'mae' in image_tower:
        print('maemaemaemaemaemaemaemae')
        print('maemaemaemaemaemaemaemae')
        print('maemaemaemaemaemaemaemae')
        print('maemaemaemaemaemaemaemae')
        print('maemaemaemaemaemaemaemae')
        return MAEVisionTower(image_tower, args=image_tower_cfg, cache_dir='./cache_dir', **kwargs)
    raise ValueError(f'Unknown image tower: {image_tower}')

In fact, if you choose running locally, and you should choose the second "if". I haven't changed anything else, but the "mismatch" error disappear, so it's still weird, but anyway, it works now！

Great! Congrats


Where is the source code of reading and parsing  the song-name.json?

What is your question?
Where is the source code of reading and parsing  the song-name.json?
assets\data\song-name\song-name.json
assets\data\song-name\song-name-easy.json
assets\data\song-name\song-name-hard.json

Be more specific because i'm confused on what you're trying to look for

coolUtil.hx if that's what you meant


[UN-526] Performance Metrics - FE tracking requirements Blog and media component

Ticket URL: https://national-archives.atlassian.net/browse/UN-526
About these changes
Updates data-component-name to use component title rather than component name.
How to check these changes

Review record revealed page locally (e.g. http://localhost:8000/explore-the-collection/a-letter-by-the-women-workers-at-fords-of-dagenham/)
Inspect Promoted pages component and check that the data attribute is pulling through the component title correctly

Before assigning to reviewer, please make sure you have

[x] Checked things thoroughly before handing over to reviewer.
[x] Checked PR title starts with ticket number as per project conventions to help us keep track of changes.
[x] Ensured that PR includes only commits relevant to the ticket.
[ ] Waited for all CI jobs to pass before requesting a review.
[ ] Added/updated tests and documentation where relevant.

Merging PR guidance
Follow docs\developer-guide\contributing.md
Deployment guidance
Follow docs\infra\environments.md

Actually @janehughes, there's some conflicts come up, but once that's done I'm happy to accept 😄


{qbittorrent, qbirttorent-nox, qbittorrent-qt5}: added mainProgram

Description of changes
closes https://github.com/NixOS/nixpkgs/issues/322456
adds mainProgram field based upon the same logic used to determine the pname which will allow nix run to work across all 3 variants of the package in nixpkgs.
precommit actions also ran nixfmt on the file.

Things done

Built on platform(s)

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

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

[ ] sandbox = relaxed
[ ] sandbox = true

[ ] Tested, as applicable:

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

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

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

[x] Fits CONTRIBUTING.md.

Add a :+1: reaction to pull requests you find important.

Result of nixpkgs-review pr 322548 run on x86_64-linux 1

Result of nixpkgs-review pr 322548 run on x86_64-linux 1

This pull request has been mentioned on NixOS Discourse. There might be relevant details there:
https://discourse.nixos.org/t/prs-ready-for-review/3032/4474


Properties handling should be unified across layers

🚀 Feature
We have a bunch of layers with properties now, including points, labels, tracks, and (I think?) shapes. Really any layer with unique IDs could have properties, with rows corresponding to IDs. (ie vectors should also have properties.)
Currently, each layer's properties were implemented independently and share almost no code/infrastructure. This has resulted in weird layer-specific bugs and also unexpected behaviour where things that work in one layer (e.g. points.face_color = 'property-name') don't work in another (labels.color = 'property-name' doesn't work, iirc). Long story short, we should make a big lift to unify all property handling for all layers.
Some random comments about what to do here. I've made them tick boxes as many of them can be separate tasks.

[ ] We should have a unified selection model as well. Currently labels only allow the selection of one label at a time. This could be super nice in combination with linked layers — you could have e.g. object centroids (points) + labels (full segmentation), do a filter selection based on the labels and get a subset of points selected.
[ ] Mesh "values" in the Surface layer could also have/be generated from properties.
[ ] We should probably add a dependency on pandas: they are the library/API for tabular data in the Python ecosystem and we would get a lot of optimised operations such as row/column indexing and categorical data types for free.
[ ] Having said that, using pandas might conflict with the API envisioned in https://github.com/napari/napari/issues/2592#issuecomment-824576248. I don't know how to do "multidimensional columns" in pandas nicely. But perhaps it can be done. I think probably this is a case of having multiple tables, or a pandas GroupBy object? Dunno, this is possibly the trickiest bit.
[ ] When dealing with properties tables and visual properties (e.g. face_color, size), I would very much like to keep in mind principles of declarative data visualisation, visual channels, encodings, and transformations. Some good introductions to these concepts can be found in this UW/Altair tutorial, and this visual encoding design slide deck. If we stick to these design principles, clearly separating the data, the channels, and the transformation/encoding steps in between, then tools like @lukasz-migas and @brisvag's cross-visualisation and filtering can become much easier and more natural to develop, and to apply across all layers.

Related issues (list should be updated as we come across more): #2755 #2756.

Other related issue: #2756.
On dataframes: xarray advertises its DataSet object as an N-dimensional alternative to pandas DataFrames, and heavily inspired by it. I never used them, but mayeb they are worth taking a look at, if this can help with point number 4.

On dataframes: xarray advertises its DataSet object as an N-dimensional alternative to pandas DataFrames, and heavily inspired by it. I never used them, but mayeb they are worth taking a look at, if this can help with point number 4.

Worth exploring! I don't know whether that analogy goes further than skin deep though — ie if I pass in a DataSet to functions expecting DataFrames, I expect bad things to happen. 😂 But we should investigate, absolutely. 👍

While there is some unification effort underway (@andy-sweet @brisvag) I'll add a discussion point here
Currently, if you add points onto a points layer which is coloured by property the new point will 'inherit' the properties of the last added point. Here's an example you can play with
import napari
import numpy as np

n = 200
points = np.random.normal(size=(n, 2))
properties = {k: np.random.normal(size=n) for k in ('prop1', 'prop2')}

v = napari.Viewer()
layer = v.add_points(points, properties=properties, face_color='prop1', size=0.1)

# add some points manually then look at layer.properties['prop1'] and layer.properties['prop2']

This is not always wanted and makes it hard to tell what was added and what is from the data - it would be nice to be able to define what happens for newly added points e.g. provide a NaN type value or a per-column default

it would be nice to be able to define what happens for newly added points

I think that's controlled by layer.current_properties. Of course, there is no way to access those from the UI, because that opens up hard design issues, and who needs those? 😂 Also, if I remember correctly, even if you update them from the console, they will get updated back if you change the selection or the last point's properties. So that's definitely something to consider. We definitely went with "let's think more about this later" back when @kevinyamauchi was first implementing this. 😅
But, yes, absolutely hear you, and again, this would be made easier by unified handling across layers — currently, you would have to fix this issue for each layer type individually.

Great discussion everyone!

I think that's controlled by layer.current_properties. Of course, there is no way to access those from the UI, because that opens up hard design issues, and who needs those? 😂 Also, if I remember correctly, even if you update them from the console, they will get updated back if you change the selection or the last point's properties. So that's definitely something to consider. We definitely went with "let's think more about this later" back when @kevinyamauchi was first implementing this. 😅

I agree that this behavior needs to be re-visited! As @jni said, the behavior was meant to be a proposal that was then revisited after some user testing. I have a listed a few thoughts below that might give some context for the decision:

@jni is correct, new points are given the colors/properties from Points.current_*_color and Points.current_properties respectively.
The Points.current_* values are set by either the API or by the selecting a point in the viewer. The rationale at the time for updating Points.current_* was that we wanted users to be able to add new points that have the same colors/properties as existing points.
Over time, there has been some back and forth over whether newly added shapes/points should be: (a) selected and/or (b) set the new layer.current_* properties. I am not sure which is the best behavior, but whatever we go with, we should probably make sure it is uniform across all of the layers and well-documented.
As noted above, there isn't currently a way to set the layer.current_properties via the UI except for selecting an existing point/shape. We had considered adding some sort of UI to the layer controls to do this, but it felt cluttered - especially considering that users may have a ton of columns in their property table. Maybe this is best handled as a dock widget?

We have a bunch of layers with properties now, including points, labels, tracks, and (I think?) shapes. Really any layer with unique IDs could have properties, with rows corresponding to IDs. (ie vectors should also have properties.)

@jni, I believe the Vectors layer has properties and colors can be set by those properties (see this example). Now, whether the behavior is perfectly consistent with the other layers is another question 😆
Documentation
Another thing I would like to add to the "task list" is improving the documentation around properties. We have some tutorials on napari.org and some examples in the repo that show the usage of properties, but I believe we are missing documentation that explains how properties work (i.e., the "Explanation" type of documentation from the "four types of documentation"). I would be happy to help with this!

I've made a lot of notes on this topic so far, but they mostly unintelligible. One thing I can share now that might serve as a useful reference is the following table that tells us what property related values are stored in various layers.

The vectors layer does not have a current_properties attribute, but it does make them when needed for ColorManager.
This doesn't include more specific properties (e.g. Points.face_color), but maybe it should. I see Labels.label_index as a specific implementation/optimization detail of the Labels layer, but it does relate to some shared code already, so thought it was worth listing.

Looks like I never added what I think should be the canonical reference here:
Tamara Munzner (2014) Visualization Analysis & Design
It's a reasonably thick book for a semester-long course, but everything is nicely summarised in this blog post:
https://maelfabien.github.io/machinelearning/Dataviz/

Here's a doc I've been working on that is my understanding of the behavior, implementation, and API of properties and related concepts: https://docs.google.com/document/d/1ZSlUPmGop6wuVEPTVC_DCb49E0orhyplrEyV302-sdU/edit?usp=sharing
It doesn't include any proposals or plans, but feel free to comment on any misunderstandings or anything that's missing.
I'm also thinking about converting the doc to Markdown and hosting on hackmd instead.

Hi Andy, thanks for creating this issue.
I agree with most of the points from your pitch.
Some additional thoughts:

the remove(indices) should also remove the rows from the data.
the update(data, indices, *, features=None) could have indices=None so when they are not provided it changes the whole data but keeps the features the same, but they must match in length. I can see this being useful when you translate some points, for example. Maybe even data could be optional, for when you just want to update the features. I commenting on this because the Tracks return a view of the properties, so you can just change it in place.
the indices could support slice, ArrayLike, int.

Posting here to make sure this work/progress isn't lost.
The latest hackmd doc is probably the best way to consume the altair/vega-style style encoding proposal: https://hackmd.io/IOuBuY11QtS56dyrdH85aQ?view
That is in the form of a NAP, but didn't actually go through the NAP process. So the Accepted status is just to indicate that there was some more informal consensus around this approach.
We did the work to define string and color encodings, but we only use them in TextManager right now. I did draft a PR for using them in Points, but that's the effort paused.

That is in the form of a NAP, but didn't actually go through the NAP process. So the Accepted status is just to indicate that there was some more informal consensus around this approach.

Would be great to retroactively add it to the NAPs :)


New version: Google.Chrome.Canary version 101.0.4920.0

Auto-updated by vedantmgoyal2009/winget-pkgs-automation in workflow run 135
Microsoft Reviewers: Open in CodeFlow

Probably, i need to see if it can overwrite an open PR if a new update is available before PR merge.


@conda-forge-admin, please add bot automerge

@conda-forge-admin, please add bot automerge

Hi! This is the friendly automated conda-forge-webservice.
I just wanted to let you know that I added bot automerge in conda-forge/geant4-data-emlow-feedstock#12.


Implement js function in compiler

Work done

Implemented the js function task in the compiler.
Renamed in the process compiler instanceHash by instanceId. Also, change the type to UUID.
Fixed in the process compiler the output of instance. Now only instance OR instanceId are sent to the API.
Put the preProcess functions as async.
Deployed the js-function on prod backend and use its instance id in the CLI.

How to test
The task is using the handler parameter to specify the js file to execute:
name: function
steps:
  - type: trigger
    endpointKey: function
  - type: task
    handler: ./foo.js
    inputs:
      key: body

with foo.js:
module.exports = (inputs) => {
  if (inputs.a === undefined || isNaN(inputs.a))
    throw new Error("input a is not defined or is not a number")
  if (inputs.b === undefined || isNaN(inputs.b))
    throw new Error("input b is not defined or is not a number")
  return parseFloat(inputs.a) + parseFloat(inputs.b)
}

Make sure the file can be run by Node v12 with a simple node foo.js. If no error is returned, then Node can interpret the js code.
Deploy the app like any other app.
Execute the process with:
curl -XPOST -H "Content-Type: application/json" --data '{"a":2,"b":"30"}' https://gateway.liteflow.com/XXXX

# to make the function throw an error:
curl -XPOST -H "Content-Type: application/json" --data '{"a":2,"b":"foo"}' https://gateway.liteflow.com/XXXX

Future todo (to move to issues)

[ ] use vm2 with all default module except fs in js service
[ ] add top 100 npm modules
[ ] upload source online instead of the task
[ ] allow user to run a command to build the source before uploading them

One last thing to do as well, update the node version of the service. It is not even the one we use in the template 10.x vs 12.x. Let's use the same dockerfile we have in the template

I update the js function service and push it directly to master by mistake. Here is the commit: https://github.com/liteflow-services/js-function/commit/102b43ba2c89cf6a7cb01bad14db672b3cc0ba4c


Development middleware improvements to leverage Mendel v2

With Mendel v2, development middleware does not have to rely on FS for anything. Explore and see what needs to be done.

I'll work on this next week. Let me know how much this is a dependency to you so I adjust.


futures-core 0.3.7 is breaking

The following chain of events can lead to futures-util failing to build despite none of the steps being individually abnormal:

Add futures-util 0.3.6 as a dependency.
Later, add a dependency depending on a newer version of futures-core.

Here's a repo demonstrating this (check the commit history): https://github.com/leo60228/futures-test
error[E0432]: unresolved import `futures_core::core_reexport`
  --> /home/leo60228/.cargo/registry/src/github.com-1ecc6299db9ec823/futures-util-0.3.6/src/lib.rs:55:9
   |
55 | pub use futures_core::core_reexport;
   |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^ no `core_reexport` in the root

This is because futures-core 0.3.7 removed core_reexport. This seems like it should be fine, since it's only used internally by futures, but mismatched subcrate versions can cause this issue.

Fixed by https://github.com/rust-lang/futures-rs/pull/2233 (0.3.7) that removing the dependency on private API.


Vibisility change event not triggered when focus switched to different application

I have the following code:
        this.listener = Visibility.change(function (e, state) {
            console.debug("Visibility: " + Visibility.state());
        });

The change function is only triggered in Chrome Version 46.0.2490.86 (64-bit) (OSX) when I change tabs. If I switch to another application or take focus away from the page, e.g. to the developer tools, the event isn't triggered.

@stodge it is how Page Visibility API works. By some reason browsers check only tabs. Even if you lock screen, they didn’y fire a hidden state :(.

Ok - thanks. :)

@stodge http://codepen.io/jonathan/pen/sxgJl


Create mailer modul

Add Mailer Interface
Refactor register method with token and link who sending by email
Add Validation method with sending email with generation of token
Add Forgot password method with sending email with generation of token
Refactor update Password method with token and link who sending by email
Create forgot token form view
Refactor update password form view

Done


Documentation> Tabs> Blank page is appearing when clicks on "View Component API" button

Describe the bug
Blank page is appearing when clicks on "View Component API" button.
To Reproduce
Steps to reproduce the behavior:

Go to https://react-magma.cengage.com/version/2.5.7/design/tabs/
Click on "View Component API" button
Verify the blank page

Expected behavior
COMPONENT API Tabs" page should appear when clicks on "View Component API" button.
Screenshots
https://somup.com/c3nQIdZNJ4
Desktop:

OS: [Win 10]
Browser [chrome]
Version [Chrome version: Version 98.0.4758.81 (Official Build) (64-bit)]

The issue is fixed.
See screen-cast: https://www.screenpresso.com/=502Gd
Hence, Closing the ticket.
Thanks!


Adding e2e test for outbound listener conflicts

@nmittler: The following test failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

prow/e2e-dashboard.sh
af93979280b0d3197bfdd4b2d494a4a1400551a5
link
/test e2e-dashboard

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.


Mess detection for unintentonal assigments in foreach

It's not the first time I encounter something like the following.
So far this is a special case:
php > $children = [[1, 2, 3, 4]];
php > $otherChildren = [[1, 2]];
php > foreach ($children as &$child) {
php {     $child[] = 5;
php { }
php > $returnArray = $children;
php > foreach ($otherChildren as $child) {
php {     //do something
php { }
php > print_r($returnArray);
Array
(
    [0] => Array
        (
            [0] => 1
            [1] => 2
        )

)

@blurayne could you please reformat your code for better readability? Please don't paste the REPL output or whatever this is.
In what situations would you emit a PHPMD violation?
Would you like to create a PR to implement such a rule?

Closing because we didn't get the feedback for this issue.


[WIP] Add Firefox support

Fixes #215

Should be good to merge, I haven't tested though.

Alright, just tested. The title appears but nothing shows on the actual window.

Alright so adding --start-debugger-server did nothing apparently, I will have to do further investigation

Alright, so it should work with Firefox Nightly, I can't confirm though. If anyone can test, that'd be helpful

So I took another look, and it appears to be navigating to networkservice,networkserviceinprocess.com???

Well, turns out that networkserviceinprocess happens to be a flag passed to Firefox, but this raises another question... does Firefox not support this flag? If so, disabling this flag which appears to be there by default could fix our problems

Upgrading to Puppeteer 3 fixed the title, but it still doesn't display

Showing the browser window shows that the weird navigation problem I mentioned here is solved, which is progress I guess?

Using -wait-for-browser allows navigation to work fully, we're getting close!


Function/ method level searching is missing. like in netbeans or geany

VSCode Version:
OS Version:

Steps to Reproduce:

Please add a screenshot.

duplicate of #5605

yeap. but it's not working... when i press Ctrl+Shift+O and Ctrl+T. it shows no symbol information for the file.

and thanks aeschli for your feedback.

You need to install a PHP extension that offers document symbols. For example https://marketplace.visualstudio.com/items?itemName=felixfbecker.php-intellisense


Merge master into feature/lparrott/payment-allocations-page

This pull request was automatically generated because an automated merge hit a merge conflict

Will manually fix.


Fundación Universitaria Tecnológico Comfenalco

@J0SE-ANDRES I am sorry, the domain tecnocomfenalco.edu.co is removed from our trusted domains list because it was abused in the past. If you are the student of this school, please enroll to GitHub Student Developer Program. Then apply for JetBrains educational subscription with your GitHub account (GitHub tab at https://www.jetbrains.com/shop/eform/students).


fix(datadog) change KONG_DATADOG_AGENT_* and schema load order

Reverse order that items get loaded for host and port variable in the Datadog Plugin.  This will allow the environment to override the chart/schema.

Summary
The way the logic is currently the environment variable will never be used. This change is will reverse the logic and use the environment variable first, if not set then use the conf.* value which always has a default.
Full changelog

Change logic so that KONG_DATADOG_AGENT_* variable are use if present followed by schema settings

Issue reference

Didn't see one.

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

Changelog has been updated.

Would this not be a breaking change?

Since the env_datadog_agent_host variable already exists, but it is never used (it can never override the default "localhost") I think this is a bug.
@jeffscelza: I would like to make the fact that this plugin uses an environment variable more obvious by just looking at the source code. Do you think you could implement these changes:

Move the lines

local env_datadog_agent_host = os.getenv 'KONG_DATADOG_AGENT_HOST'
local env_datadog_agent_port = tonumber(os.getenv 'KONG_DATADOG_AGENT_PORT' or "")

from statsd_logger.lua to schema.lua

Set the defaults in the schema like so:

{ host = typedefs.host({ default = env_datadog_agent_host or "localhost" }), },
{ port = typedefs.port({ default = env_datadog_agent_port or 8125 }), },

Change the lines in statsd_logger.lua to only use conf.host and conf.port

Sure. I can look at it this weekend
On Tue, Jan 10, 2023, 3:19 AM Enrique García Cota @.***>
wrote:

Would this not be a breaking change?
Since the env_datadog_agent_host variable already exists, but it is never
used (it can never override the default "localhost") I think this is a bug.
@jeffscelza
https://urldefense.com/v3/__https://github.com/jeffscelza__;!!OaIjtfQ!KnBiqgDf1AQMlI2MOC2IMd7MV6wHTPJQppSodGAaVQ4aTcuT3e6PBu5F_po8L5Yv9Y4uZzPVnF6MxtDoXxaXkG_h3A41CQ$:
I would like to make the fact that this plugin uses an environment variable
more obvious by just looking at the source code. Do you think you could
implement these changes:

Move the lines

local env_datadog_agent_host = os.getenv 'KONG_DATADOG_AGENT_HOST'
local env_datadog_agent_port = tonumber(os.getenv 'KONG_DATADOG_AGENT_PORT' or "")
from statsd_logger.lua to schema.lua

Set the defaults in the schema like so:

{ host = typedefs.host({ default = env_datadog_agent_host or "localhost" }), },
{ port = typedefs.port({ default = env_datadog_agent_port or 8125 }), },

Change the lines in statsd_logger.lua to only use conf.host and
conf.port

—
Reply to this email directly, view it on GitHub
https://urldefense.com/v3/__https://github.com/Kong/kong/pull/8773*issuecomment-1377029051__;Iw!!OaIjtfQ!KnBiqgDf1AQMlI2MOC2IMd7MV6wHTPJQppSodGAaVQ4aTcuT3e6PBu5F_po8L5Yv9Y4uZzPVnF6MxtDoXxaXkG8P6M5ZDA$,
or unsubscribe
https://urldefense.com/v3/__https://github.com/notifications/unsubscribe-auth/ANNUEZEHY6BHPGO2LGPJB6TWRUZSPANCNFSM5VP2GTIA__;!!OaIjtfQ!KnBiqgDf1AQMlI2MOC2IMd7MV6wHTPJQppSodGAaVQ4aTcuT3e6PBu5F_po8L5Yv9Y4uZzPVnF6MxtDoXxaXkG-VwY2nEg$
.
You are receiving this because you were mentioned.Message ID:
@.***>

Sorry I got caught up on a personal thing, so I will be working on it this
week.
On Tue, Jan 10, 2023 at 2:31 PM Jeff Scelza @.***>
wrote:

Sure. I can look at it this weekend
On Tue, Jan 10, 2023, 3:19 AM Enrique García Cota <
@.***> wrote:

Would this not be a breaking change?
Since the env_datadog_agent_host variable already exists, but it is never
used (it can never override the default "localhost") I think this is a bug.
@jeffscelza
https://urldefense.com/v3/__https://github.com/jeffscelza__;!!OaIjtfQ!KnBiqgDf1AQMlI2MOC2IMd7MV6wHTPJQppSodGAaVQ4aTcuT3e6PBu5F_po8L5Yv9Y4uZzPVnF6MxtDoXxaXkG_h3A41CQ$:
I would like to make the fact that this plugin uses an environment variable
more obvious by just looking at the source code. Do you think you could
implement these changes:

Move the lines

local env_datadog_agent_host = os.getenv 'KONG_DATADOG_AGENT_HOST'
local env_datadog_agent_port = tonumber(os.getenv 'KONG_DATADOG_AGENT_PORT' or "")
from statsd_logger.lua to schema.lua

Set the defaults in the schema like so:

{ host = typedefs.host({ default = env_datadog_agent_host or "localhost" }), },
{ port = typedefs.port({ default = env_datadog_agent_port or 8125 }), },

Change the lines in statsd_logger.lua to only use conf.host and
conf.port

—
Reply to this email directly, view it on GitHub
https://urldefense.com/v3/__https://github.com/Kong/kong/pull/8773*issuecomment-1377029051__;Iw!!OaIjtfQ!KnBiqgDf1AQMlI2MOC2IMd7MV6wHTPJQppSodGAaVQ4aTcuT3e6PBu5F_po8L5Yv9Y4uZzPVnF6MxtDoXxaXkG8P6M5ZDA$,
or unsubscribe
https://urldefense.com/v3/__https://github.com/notifications/unsubscribe-auth/ANNUEZEHY6BHPGO2LGPJB6TWRUZSPANCNFSM5VP2GTIA__;!!OaIjtfQ!KnBiqgDf1AQMlI2MOC2IMd7MV6wHTPJQppSodGAaVQ4aTcuT3e6PBu5F_po8L5Yv9Y4uZzPVnF6MxtDoXxaXkG-VwY2nEg$
.
You are receiving this because you were mentioned.Message ID:
@.***>

--
Jeffrey Scelza | Staff SRE | Checkr, Inc.
phone:<PHONE_NUMBER> email: @.**
@.***> *

Alternate solution being persued in #10398


Modify warning msgs: add debug output message header

This PR should print a message header to stdout with the first validation message that gets printed.  Looking for wording changes to the error/warn/perf warn definitions in particular.

Fixed up ERROR definition per @tobine and pushed to Master.


Incorporate machine learning content into the workshop repository

It would be good if the content from the January 2016 machine learning workshop could be incorporated into this repository for further development and reuse. Doing so will mean reorganising the structure of the repository slightly, perhaps moving notebooks into separate subfolders by topic.

connection to db host mimic3-1.coh8b3jmul4y.us-west-2.rds.amazonaws.com fails. mlcc_mortality_prediction.ipynb attempts to connect to DB instance and the connection fails.


ES2016 short version of binding context of function is not supported

VSCode Version: 1.16.1
OS Version: MacOS 10.12.6

Steps to Reproduce:

Write function similar to mine on the screen
Colons will be highlighted red

Reproduces without extensions: Yes

Tracked upstream by: https://github.com/Microsoft/TypeScript/issues/3508

It's not quite clear why the typescript are here?

VS Code Version: 1.17.2
OS Version: Windows 10

We use TypeScript behind the scenes to power both our JavaScript and TypeScript language support


Change cmdlet name - Get-MsIdUnmanagedExternalUsers

Describe the bug
Get-MsIdUnmanagedExternalUsers needs to be changed to Get-MsIdUnmanagedExternalUser to adhere with nest practice
To Reproduce
N/A
Expected behavior
Cmdlet noun should not be plural
Screenshots
N/A
Environment (please complete the following information):
ALL
Additional context
Add any other context about the problem here.

@merill - done now, no?


Filter list of acceptable headers; use default if the client accepts everything

Added a priorities member variable, which allows the dev to filter the list of acceptable headers.
Usage:
//Code
Middleware::FormatNegotiator()
    ->setPriorities(['json', 'zip'])
    ->defaultFormat('json')

//Request header
Accept: application/pdf, application/zip

//Result:
FormatNegotiator::getFormat($request) === "zip"

getFromHeader will return null if the accept header is either missing, or set to accept everything. This will allow the default to be used instead.
Usage:
//Code
Middleware::FormatNegotiator()
    ->defaultFormat('json')

//Request header
Accept: */*

//Result:
FormatNegotiator::getFormat($request) === "json"

The PSR-15 version of this middeware accept a list of formats in the constructor:
https://github.com/middlewares/negotiation#contenttype
This allows to define not only the formats but also the priority. I think it's a more simple and elegant solution.

Hi Oscar, I might just use the PSR-15 one instead.
I've just updated this PR to make $priorities a constructor parameter, bringing that newer version's functionality into this version. Do you still want it?

Quick note: I've given up on trying to retrofit PSR-15 middlewares into Slim (the framework I'm using). Apparently support will be in a later version. So I will need to use this PSR-7 FormatNegotiator.

Hi, @mlambley
What I meant was the constructor argument were the available formats, not the priorities. For example, if you only want to support json:
Middleware::FormatNegotiator([
    'json' => [['json'], ['application/json', 'text/json', 'application/x-json']],
])

This prevent the situation where you customize the desired priorities but the formats are not available, which would be confused.
In addition to that, the defaultFormat could be always the first format provided.

I figure that you would want to keep the existing addFormat and defaultFormat functions, to not introduce a breaking change, even though the functionality is replicated.
I have not set the default format to be the first item in the list, on the assumption that we will not be removing the defaultFormat function.

Yes, I don't want to introduce breaking changes here. addFormat and defaultFormat functions will continue to exist. What I suggested is:

Modify __construct to include the desired formats. The first value of the array is the default value. Example:$this->defaultFormat = key($this->formats);

Because the first value of the default formats is html, the default value is html, as it works now. So, no breaking changes here.
addFormat just add more formats at the end of the array. Nothing changes here
defaultFormat just change the value of the default format. Additionally, I think the default format should be moved to the first place. For example, for json:$default = $this->formats['json'];
$this->formats = ['json' => $default] + $this->formats;

In this way, * or */* would return the first format (the default) by the headers negotiation.

Hi Oscar, I've introduced an option for it to generate a 406 Not Acceptable response in order for it to work with my server. Please let me know if this, and the other changes you requested, are ok.

I think it's good. In fact, I have a similar feature in the PSR-15 version
Thanks 👍


FancyZones wont cross monitor

Microsoft PowerToys version
0.83.0
Installation method
Microsoft Store
Running as admin
No
Area(s) with issue?
FancyZones
Steps to reproduce
*have Override Windows Snap enabled for relative position and move between monitors
here is a display of how i have my zones setup on my two monitors:

now, i snap a window into the left column of the right monitor.
press Win+Left
✔ Expected Behavior
i would expect it to snap to the bottom row of the left monitor.
❌ Actual Behavior
it snaps to the small pip area at the bottom left of the right monitor.
Other Software
No response

*also I'm using windows 11 (this should be an option in the issue template)


Feature/ci workflow

Create an automated workflow to check if a project builds successfully for now. More actions can be added to feature i.e automate the process of releasing a feature to Jitpack.

Great Job! @Breens-Mbaka 👏👏👏