Crash when clicking on any img preview

Steps to reproduce

Open Grabber
Search anything with default website and tag
left click on any img preview
grabber crashes

Context
main.log
[02:29:23.636][Info] Temp directory purged of 0/0 files (0 failed)
[02:29:23.905][Info] Software version: 7.5.1.
[02:29:23.906][Info] Software CPU architecture: x64.
[02:29:23.907][Info] Computer CPU architecture: x86_64.
[02:29:23.907][Info] Qt CPU architecture: x86_64.
[02:29:23.907][Info] Computer platform: Windows 10 Version 2004.
[02:29:23.907][Info] Path: `D:/Program Files/Grabber`
[02:29:23.908][Info] Loading preferences from `C:/Users/Administrator/AppData/Local/Bionus/Grabber/settings.ini`
[02:29:23.908][Info] Temporary path: `C:/Users/Administrator/AppData/Local/Temp\Grabber`
[02:29:23.909][Info] Sources found: 21
[02:29:23.909][Info] SSL libraries: OpenSSL 1.1.1j  16 Feb 2021
[02:29:23.917][Info] Setting language to '' (`D:\Program Files\Grabber\languages\.qm`)...
[02:29:23.918][Info] 21 sources found: anime-pictures.net (Anime pictures), api.twitter.com (Twitter), behoimi.org (Danbooru), danbooru.donmai.us (Danbooru (2.0)), derpibooru.org (Philomena), e-hentai.org (E-Hentai), e621.net (E621), exhentai.org (E-Hentai), gelbooru.com (Gelbooru (0.2)), hijiribe.donmai.us (Danbooru (2.0)), konachan.com (Moebooru), nhentai.net (NHentai), rule34.paheal.net (Shimmie), rule34.xxx (Gelbooru (0.2)), safebooru.org (Gelbooru (0.2)), sonohara.donmai.us (Danbooru (2.0)), tentaclerape.net (Shimmie), www.deviantart.com (DeviantArt), www.pixiv.net (Pixiv), www.zerochan.net (Zerochan), yande.re (Moebooru)
[02:29:23.933][Warning] It seems that Imgbrd-Grabber hasn't shut down properly last time.
[02:29:25.366][Info] Updating checkboxes.
[02:29:25.369][Info] Updating checkboxes.
[02:29:25.371][Info] Monitoring starting
[02:29:25.407][Info] Monitoring tick
[02:29:25.407][Info] Monitoring finished
[02:29:29.224][Info] Loading results...
[02:29:29.225][Info] [danbooru.donmai.us][Html] Loading page `https://danbooru.donmai.us/posts?limit=20&page=1&tags=`
[02:29:29.225][Info] [danbooru.donmai.us][Xml] Loading page `https://danbooru.donmai.us/posts.xml?limit=20&page=1&tags=`
[02:29:29.663][Info] [danbooru.donmai.us][Xml] Receiving page `https://danbooru.donmai.us/posts.xml?limit=20&page=1&tags=`
[02:29:29.675][Info] [danbooru.donmai.us][Xml] Parsed page `https://danbooru.donmai.us/posts.xml?limit=20&page=1&tags=`: 20 images (20), 0 tags (301), -1 total (-1), -1 pages (-1)
[02:29:30.381][Info] [danbooru.donmai.us][Html] Receiving page `https://danbooru.donmai.us/posts?limit=20&page=1&tags=`
[02:29:30.384][Info] [danbooru.donmai.us][Html] Parsed page `https://danbooru.donmai.us/posts?limit=20&page=1&tags=`: 0 images (0), 25 tags (25), -1 total (-1), -1 pages (-1)
[02:34:28.863][Error] [Qt][default] Cannot mix incompatible Qt library (5.9.7) with this library (5.15.1)

settings.ini
[General]
last_check_for_updates=@DateTime(\0\0\0\x10\0\0\0\0\0\0%\x86\xa6\0nY\x92\0)
crashed=true
whitelistedtags=
add=
globalPostFilter=
globalPostFilterExplicit=false
whitelist_download=never
limit=20
columns=1
source_1=xml
source_2=json
source_3=regex
source_4=rss
tagsautoadd=10
start=restore
hidefavorites=20
autodownload=false
hideblacklisted=false
showtagwarning=true
showwarnings=true
getunloadedpages=false
invertToggle=false
confirm_close=true
send_usage_data=true
check_for_updates=86400
tempPathOverride=
preloadAllTabs=false
downloadblacklist=false
ignoredtags=
resizeInsteadOfCropping=true
thumbnailUpscale=1
autocompletion=true
useregexfortags=true
infiniteScroll=disabled
infiniteScrollRememberPage=false
theme=Default
tagsposition=top
preload=0
slideshow=0
resultsScrollArea=true
resultsFixedWidthLayout=false
imageCloseMiddleClick=true
imageNavigateScroll=true
imagePositionImageV=center
imagePositionImageH=left
imagePositionAnimationV=center
imagePositionAnimationH=left
imagePositionVideoV=center
imagePositionVideoH=left
imageBackgroundColor=
serverBorder=0
serverBorderColor=#000000
borders=3
language=
firstload=false
reverse=false
sites=danbooru.donmai.us

[GAnalytics]
cid=b8be0ae7-3688-4b82-8e53-0f8dc60f346f

[Save]
path=F:\\boorudownload
filename=%artist%_%copyright%_%character%_%md5%.%ext%
automaticretries=0
downloadoriginals=true
samplefallback=true
replaceblanks=false
keepDate=true
headerDetection=true
separator=" "
noJpeg=true
path_real=F:\\boorudownload
path_favorites=
md5Duplicates=save
md5DuplicatesSameDir=save
keepDeletedMd5=false
multiple_files=copy
filename_real=%artist%_%copyright%_%character%_%md5%.%ext%
filename_favorites=
artist_empty=anonymous
artist_sort=original
artist_useall=true
artist_multiple_limit=1
artist_multiple_keepN=1
artist_multiple_keepNThenAdd_keep=1
artist_multiple_keepNThenAdd_add=" (+ %count%)"
artist_sep=+
artist_value=multiple artists
artist_multiple=keepAll
copyright_empty=misc
copyright_sort=original
copyright_useall=true
copyright_multiple_limit=1
copyright_multiple_keepN=1
copyright_multiple_keepNThenAdd_keep=1
copyright_multiple_keepNThenAdd_add=" (+ %count%)"
copyright_sep=+
copyright_value=crossover
copyright_multiple=keepAll
copyright_useshorter=true
character_empty=unknown
character_sort=original
character_useall=true
character_multiple_limit=1
character_multiple_keepN=1
character_multiple_keepNThenAdd_keep=1
character_multiple_keepNThenAdd_add=" (+ %count%)"
character_sep=+
character_value=group
character_multiple=keepAll
model_empty=unknown
model_sort=original
model_useall=true
model_multiple_limit=1
model_multiple_keepN=1
model_multiple_keepNThenAdd_keep=1
model_multiple_keepNThenAdd_add=" (+ %count%)"
model_sep=+
model_value=multiple
model_multiple=keepAll
photo_set_empty=unknown
photo_set_sort=original
photo_set_useall=true
photo_set_multiple_limit=1
photo_set_multiple_keepN=1
photo_set_multiple_keepNThenAdd_keep=1
photo_set_multiple_keepNThenAdd_add=" (+ %count%)"
photo_set_sep=+
photo_set_value=multiple
photo_set_multiple=keepAll
species_empty=unknown
species_sort=original
species_useall=true
species_multiple_limit=1
species_multiple_keepN=1
species_multiple_keepNThenAdd_keep=1
species_multiple_keepNThenAdd_add=" (+ %count%)"
species_sep=+
species_value=multiple
species_multiple=keepAll
meta_empty=none
meta_sort=original
meta_useall=true
meta_multiple_limit=1
meta_multiple_keepN=1
meta_multiple_keepNThenAdd_keep=1
meta_multiple_keepNThenAdd_add=" (+ %count%)"
meta_sep=+
meta_value=multiple
meta_multiple=keepAll
MetadataPropsysExtensions=jpg jpeg mp4
MetadataPropsys\size=0
MetadataExiftoolExtensions=jpg jpeg png gif mp4
MetadataExiftool\size=0
limit=0
simultaneous=1

[Sources]
Types=icon
Letters=3

[Log]
show=true

[Monitoring]
startupDelay=0
enableTray=false
minimizeToTray=false
closeToTray=false

[Batch]
end=0

[ImageSize]
maxWidth=1000
maxWidthEnabled=false
maxHeight=1000
maxHeightEnabled=false

[WebServices]
1\name=IQDB
1\url="https://iqdb.org/?url={url}"
1\order=1
2\name=SauceNAO
2\url="https://saucenao.com/search.php?db=999&url={url}"
2\order=2
3\name=Google
3\url="https://www.google.com/searchbyimage?image_url={url}"
3\order=3
4\name=TinEye
4\url="https://www.tineye.com/search/?url={url}"
4\order=4
5\name=Yandex
5\url="https://yandex.ru/images/search?rpt=imageview&img_url={url}"
5\order=5
6\name=waifu2x
6\url="http://waifu2x.udp.jp/index.html?url={url}"
6\order=6

[Zoom]
singleWindow=false
showTagCount=false
viewSamples=false
scaleUp=false
useVideoPlayer=true
showVideoPlayerControls=true
showGifPlayerControls=true
tagOrder=type

[Coloring]
Colors\artists=#aa0000
Colors\circles=#55bbff
Colors\copyrights=#aa00aa
Colors\characters=#00aa00
Colors\species=#ee6600
Colors\metas=#ee6600
Colors\models=#0000ee
Colors\generals=#000000
Colors\favorites=#ffc0cb
Colors\keptForLater=#000000
Colors\blacklisteds=#000000
Colors\ignoreds=#999999
Fonts\artists="SimSun,9,-1,5,50,0,0,0,0,0"
Fonts\circles="SimSun,9,-1,5,50,0,0,0,0,0"
Fonts\copyrights="SimSun,9,-1,5,50,0,0,0,0,0"
Fonts\characters="SimSun,9,-1,5,50,0,0,0,0,0"
Fonts\species="SimSun,9,-1,5,50,0,0,0,0,0"
Fonts\metas="SimSun,9,-1,5,50,0,0,0,0,0"
Fonts\models="SimSun,9,-1,5,50,0,0,0,0,0"
Fonts\generals="SimSun,9,-1,5,50,0,0,0,0,0"
Fonts\favorites="SimSun,9,-1,5,50,0,0,0,0,0"
Fonts\keptForLater="SimSun,9,-1,5,50,0,0,0,0,0"
Fonts\blacklisteds="SimSun,9,-1,5,50,0,0,0,0,0"
Fonts\ignoreds="SimSun,9,-1,5,50,0,0,0,0,0"

[Margins]
main=10
horizontal=6
vertical=6

[Proxy]
use=false
useSystem=false
type=http
hostName=
port=0
user=
password=

[Exec]
tag_before=
image=
tag_after=
SQL\driver=
SQL\host=
SQL\user=
SQL\password=
SQL\database=
SQL\before=
SQL\tag_before=
SQL\image=
SQL\tag_after=
SQL\after=

System information

OS: Windows 10
Grabber version: 7.5.1

Additional context
It seems like a Qt library version problem. Maybe it can be fixed by installing some libraries on my system? But I don't know how.

Well, after struggling for an hour to update Qt version on my windows 10 with no result (it's really painful to find a way to do that for Qt, I even installed a whole Qt creator), I finally find that Grabber 7.4.3 can work properly on my computer while 7.5.0 will also crash.

[Qt][default] Cannot mix incompatible Qt library (5.9.7) with this library (5.15.1)

Weird, could it be that you once added files to the install directory manually?
If you install Grabber in a new location (or totally delete the previous install before the new one) does this still happen?
All the files in the installer are taken from a single Qt install so they definitely shouldn't be mixed.
Also, Grabber uses Qt 5.15 since 7.3.2 so it's weird that you're having the issue with Grabber 7.5.0 but not  7.4.3.

Well, after struggling for an hour to update Qt version on my windows 10 with no result (it's really painful to find a way to do that for Qt, I even installed a whole Qt creator),

You absolutely don't need to install Qt, the DLL provided with the installer should be enough. Installing it might actually cause issues if they're added to your %PATH%  (which they shouldn't by default).

Had this exact issue. Yesterday it was working fine and today it was not.
The only change I did on my system was trying to add miniconda3 to user PATH. I've just confirmed that removing these lines from user PATH worked for me:
%USERPROFILE%\MiniConda3
%USERPROFILE%\MiniConda3\Scripts
%USERPROFILE%\MiniConda3\Library\bin

There was some Qt files from a different version within "%USERPROFILE%\MiniConda3\Library\bin", hence the conflict.
Open Advanced System Settings > Environment Variables... and remove all PATH entries with Qt files within and the issue is solved - for Grabber at least. Some program that needs that PATH entry might stop working.

Had this exact issue. Yesterday it was working fine and today it was not.
The only change I did on my system was trying to add miniconda3 to user PATH. I've just confirmed that removing these lines from user PATH worked for me:
%USERPROFILE%\MiniConda3
%USERPROFILE%\MiniConda3\Scripts
%USERPROFILE%\MiniConda3\Library\bin

There was some Qt files from a different version within "%USERPROFILE%\MiniConda3\Library\bin", hence the conflict.
Open Advanced System Settings > Environment Variables... and remove all PATH entries with Qt files within and the issue is solved - for Grabber at least. Some program that needs that PATH entry might stop working.

Exactly! The problem is solved after I remove all the Anaconda related settings in my PATH.
@Bionus Maybe the problem now is  to checkout why Grabber's Qt is conflicting with Anaconda's starting from 7.5.0? It is still annoying if I need to disable my Anaconda (as well as many python scripts depending on it) to use new version Grabber.
Anyway, thanks for you two's help!

Hijacking this issue because I'm having a similar problem (incompatible qt versions), is there any way to check where would the incompatible qt version be located? I've searched through all the items in my path variable and found nothing

Hijacking this issue because I'm having a similar problem (incompatible qt versions), is there any way to check where would the incompatible qt version be located? I've searched through all the items in my path variable and found nothing

This also happens to me, removing anaconda is not really an option

I found out the problem after a couple of days, another software I had also used Qt and was throwing a tantrum (I can't remember the software though). What I did was search my entire computer for the Qt dlls (check the log file for the name), find out the offending program and then either uninstalling or finding a newer version

Had the exact same issue and solved it by borrowing the Qt5Svg.dll from another program.


Consider making Spanner libraries v2 only target netstandard2.0

This is similar to #2959, but for Spanner.
Currently we have the following targeting:

Spanner.Data: netstandard1.5;netstandard2.0;net45
Spanner.Common.V1: netstandard1.5;net45
Spanner.V1: netstandard1.5;netstandard2.0;net45
Spanner.Admin.Database.V1: netstandard1.5;net45
Spanner.Admin.Instance.V1: netstandard1.5;net45

Proposal: make all of these just target netstandard2.0.
This makes it simpler to reason about and simpler to test.
cc for input:
@FransBouma
@tomerpeled
@alyaros
@jerarl
@SurferJeffAtGoogle
@chrisdunelm
@amanda-tarafa
We may well want to change to make this the target for anything that hasn't already gone GA...

PR #2989 is a speculative PR about what this would look like, but this is still just under consideration. I'm running tests now.

I use Google.Cloud.Spanner.Data (2.0 beta 8) in our designer on .NET 4.5.2 (as the minimum .NET version). Our customers should be able to run it on .net 4.5.2. Using netstandard2.0 would make it fail I think, as .net 4.5.2 isn't 100% compatible with ns20 (AFAIK). If not, then I don't mind.

That would indeed mess things up - so I'm glad I asked for the input :)
I can make it target netstandard2.0 and net45 though, which still avoids the conditional code.
Thanks!

Oh that would be great! 😄 👍

Should  work on our side.
Thanks!

@FransBouma: We're currently planning a major version bump for all libraries, primarily due to Grpc.Core taking a major version bump, and as part of that we'd like to move from net45 to net461. That's the minimum version supported by Microsoft.Bcl.AsyncInterfaces, which we'd like to depend on. Are you still targeting net452 in your designer? I'd be very happy to discuss this in more detail by email (or a video conference) if you have the time. Please let me know how you'd like us to proceed.

I am, but I'm shipping the Spanner ADO.NET provider with the designer so it's not a big deal at the moment (the only requirement we have is that spanner works on .net framework by a direct target, not through ns20 as that would tie it to 4.7.2). We're busy with our new version, v5.7, which we can bump to a higher .NET version and with that ship a newer ADO.NET provider for spanner, e.g. the one which bumps the minimal .net version to 4.6.1.
So in the period till that release our users work with the ADO.NET provider we ship with the designer, and when we ship 5.7, we'll bump the minimal required version to 4.6.1 and ship the latest spanner ADO.NET provider with that. I think that would solve it. So I don't see any problems with you moving to 4.6.1.
The reason I posted my post above was that a requirement of 'netstandard 2.0 only' would be problematic so a dual targeting on .net framework would solve that and I think with a newer version being dual targeting ns2.0 and net461 would be OK.
Would that be sufficient for you to proceed as planned?

@FransBouma: That's really good to know, thanks. Completely understand how netstandard2.0 would be a problem for you, and it's really great to get direct customer feedback like this - thank you!
Now I need to look at our stats to try to work out how many other customers might be disrupted by a move to net461... (It may well be "disruptive but still the best thing to do" - we'll see...)


Updated to 3.70

After installing, and rebooting, now i seem to be on 3.70, but homebrew apps run, and they act like i'm in safe mode.
w u t
and now it acts like i have no internal storage
maybe it's because i either:

Forgot to enter recovery mode after rebooting, so I rebooted again
Signed in to PSN after setting it up

Nevermind, used h-encore to reinstall enso.


Convert project structure into Maven structure

I'd like to be able to include this library into my code without adding it's source directly, so I think moving towards a maven structure and maybe even publishing it to maven central is a usefull thing.

Hi, thank you for the request, Maven support is a good idea.
Commit 6d973ca5cda3a3feb759ae579501f38a0685d6f0 includes a .gitignore file, is it necessary for Maven? I think it contains some redundant thing.

Yes, I normally put in the ignore list for my IDEs so that the IDE files don't get checked in.

@adamheinrich Could you publish to Maven central? It would be nice to be able to use Gradle instead of downloading and building a jar.

@sid9102 Yes, I only need some time to read and understand the instructions :-)


Question about sensor use in Hyperdog

Hey there, I am sorry for asking so many questions...
I just read the papers for Hyperdog. In it you write that the IMU Sensor is used to detect the orientation of the robot. Also there is a current sensor as well as joint encoders. Are those sensors only used in the real Robot (as the microcontroller collects and uses their values) or is it also used in Gazebo?
Also I wanted to ask about the servo motor placement:
In Hyperdog, the servo motors are placed in the main body of the robot. Do you need some kind of conversion to make the joint angles correct? Or is it designed such that for example 10° rotation in the motor equals to 10° rotation in the joint?
Sorry again for the amount of questions, I hope that's okay for you?
Have a nice evening!

Hi,
Yeah, current sensors and imu is only is the real robot. Not yet implemented in simulation.
And for the second question. No need any converts.

Alright. Can I ask you how this was done? Are the joint angle encoders mounted on the actual joint or at the actuators? It's a nice way to reduce leg inertia! :)

Sensors are embedded to the servo motors


Compiling with with Scala 2.12.4 and JavaFX 11 modules

This PR is for a release that works with scalaVersion := 2.12.4, and uses JavaFX 11 modules.
I am not adding new functionality, I just updated the dependencies.
All tests are passing.

For Java > 9, OpenJFX requires a separate installation, and the build must be able to find the additional jars.
It is possible that the travis build doesn't consider that, and that it is assuming Java 8.


CHAOS-3254 Mention support for wildcard

docs to specify chaosguard new features

Please check the Execution Link of the Pipeline for the Website Draft URL. This is located in the Preview Step behind the Harness VPN and also is available in #hdh_alerts. E.g Website Draft URL: https://unique-id--harness-developer.netlify.app. Current Draft URL is: https://65bb4eea3aab6049b3b91e18--harness-developer.netlify.app

Please check the Execution Link of the Pipeline for the Website Draft URL. This is located in the Preview Step behind the Harness VPN and also is available in #hdh_alerts. E.g Website Draft URL: https://unique-id--harness-developer.netlify.app. Current Draft URL is: https://65c0fe7df9ebfe2e840d2463--harness-developer.netlify.app


Helidon's MP Config implementation in 2.0 does not support dynamic config sources

Environment Details

Helidon Version: 2.0.0-M2
Helidon MP
JDK version: 11
OS: any

Problem Description
The implementation of MP Config in Helidon 2.0 broke our CoherenceConfigSource in a major way — it is basically impossible to get value from it, even though it is configured with the higher priority than any other config source (500), and regardless of whether I disable caching by specifying caching.enabled=false in meta-config.properties or not.
If I try to override an existing config property, the override does not take effect and the property value from a lower priority config source (sys prop, in my case) is returned
It’s even worse if I try to access a property that is only present in my config source, but was only added to it after Helidon config machinery was initialized:
java.util.NoSuchElementException: Requested value for configuration key 'coherence.value' is not present in the configuration.
	at io.helidon.config.AbstractConfigImpl.getValue(AbstractConfigImpl.java:176)
	at com.oracle.coherence.mp.config.CoherenceConfigSourceTest.testDiscovery(CoherenceConfigSourceTest.java:96)

Now, CoherenceConfigSource is somewhat special. It is basically inactive until Coherence member is up and running (has to be, as the cache that backs it is not ready for use), and any calls to ConfigSource.getProperties() and ConfigSource.getValue() will return Collections.emptyMap() and null respectively.
However, once activated, it will return the set of configuration properties it manages, as well as the values for them, as expected, using the priority/ordinal that can be configured (500 by default). The values can also change at runtime (that's kinda the point, as it allows you to reconfigure all members of the cluster easily by changing config property in one place, and without having to restart anything), and the new values/overrides could be added.
This all worked perfectly fine in 1.4, so it is definitely a regression in 2.0, and in my opinion failure to implement the spec correctly (afaik, the spec never states that the config source must be static and that its contents cannot change at runtime)
Steps to reproduce
Try using any dynamic config source in MP.

Per discussion with @tomas-langer, we may be able to "hack" around this issue by supporting something similar to Helidon SE EventConfigSource in MP.
The trick is that we can't implement Helidon-specific interface, as it would prevent our config source from working with other MP Config implementations, so we agreed to do something along these lines:
// in Helidon
@Override
public void onChange(BiConsumer<String, ConfigNode> change) {
    // register changes in case the source implements
    // registerChangeListener(BiConsumer<String, String> changeListener)
    // TODO the value may be null - to remove value
}

// in Coherence
class CohereConfigSource implements ConfigSource {
   // provide method Helidon can find and call via reflection
    public void registerChangeListener(BiConsumer<String, String> changeListener) {
         // save change listener injected by Helidon
         m_changeListener = changeListener;
    }

    // notify Helidon whenever config property is inserted/updated/deleted
    void onMapEvent(MapEvent<String, String> event) {
        m_changeListener.accept(event.getKey(), event.getNewValue());
    }
}


tech debt: use lookup table for creating substitution formatters

Commit Message:
Created lookup table for substitution formatters.
Additional Description:
PR addresses the comment: https://github.com/envoyproxy/envoy/blob/main/source/common/formatter/substitution_formatter.cc#L689
Lookup table provides more uniform time to create a formatter, instead of traversing long if .. else .. if .. else
statement.
Risk Level: Low
Testing: No changes (code reformat only)
Docs Changes: No
Release Notes: No
Platform Specific Features: No

/assign-from @envoyproxy/senior-maintainers

@jmarantz I need your another approval on this PR. Modified just a comment and lost 'Approved' status. Thanks!


EG Lifepower (Narada battery that uses Tianpower BMS) - Multi battery setup problems

Describe the problem
Good day everyone,
I have 4x Narada 48NPFC50 batteries that use a TianPower ND1502 BMS, so this uses the lifepower BMS driver
I have 2 problems:
problem 1: The driver only works if the battery DIP switches are set on address 0x01
problem 2: Getting the driver to communicate with multiple batteries
I have tried both the stable branch and the nightly build with no luck.
Problem 1:
If I set the battery DIP switches to address 0x01, then the driver correctly detects and communicates with the battery.
In the code, I found that the 0x01 address is the default for the lifepower BMS, so to test communication with different addresses, I changed the address to 0x00 and 0x02. But if I change the battery DIP switches to 0x00 or 0x02 the driver reads the serial number correctly, but then communication fails, see the extract from the log file below:
2024-08-04 18:39:15.868081500 INFO:SerialBattery:Testing EG4_Lifepower at address "\x02"
2024-08-04 18:39:15.921082500 INFO:SerialBattery:Hardware Version:BA01A77I06230168t
2024-08-04 18:39:16.186051500 ERROR:SerialBattery:>>> ERROR: No reply - returning
2024-08-04 18:39:16.451566500 ERROR:SerialBattery:>>> ERROR: No reply - returning
This was tested with only one battery connected.
Problem 2:
It appears that the Lifepower batteries use a master/slave setup to communicate, then the driver only talks to the master BMS. In the Narada manual it also describes a similar master slave setup, but with the master set to address 0x00. However, I have the Tianpower PC software, and if I set it to communicate with multiple batteries, it just talks directly to the different batteries by changing the address, and not through the master.
If I can get the driver to communicate with the batteries at all 4 addresses, then the code can be adapted to communicate with each battery separately at different addresses. Alternatively I can use x4 USB-RS485 converters and a USB hub and all the battery DIP switches on address 0x01, but that is not a very elegant solution, I would rather take some time to implement a better solution.
I am not sure if the master/slave type setup is possible with my batteries and I don't have an easy way to test it at the moment.
Any advice would be appreciated, thanks
Driver version
1.4.20240721dev
Venus OS device type
Raspberry Pi
Venus OS version
v3.33
BMS type
Life/Tian Power
Cell count
15
Battery count
4
Connection type
Serial USB adapter to RS485
Config file
[DEFAULT]

; If you want to add custom values/settings, then check the values/settings you want to change in "config.default.ini"
; and insert them below to persist future driver updates.

; Example (remove the semicolon ";" to uncomment and activate the value/setting):
; MAX_BATTERY_CHARGE_CURRENT = 50.0
; MAX_BATTERY_DISCHARGE_CURRENT = 60.0

Relevant log output
2024-08-04 18:42:46.574533500 INFO:SerialBattery:Testing EG4_Lifepower at address "\x01"
2024-08-04 18:42:46.637733500 INFO:SerialBattery:Hardware Version:BA01A77I06230168v
2024-08-04 18:42:46.787743500 INFO:SerialBattery:Firmware Version:3LM-M01A-ND577-21.B2.00-180611
2024-08-04 18:42:46.938351500 INFO:SerialBattery:Connection established to EG4_Lifepower
2024-08-04 18:42:47.506375500 INFO:SerialBattery:Found existing battery with DeviceInstance = 3
2024-08-04 18:42:47.701746500 INFO:SerialBattery:DeviceInstance = 3
2024-08-04 18:42:47.702901500 INFO:SerialBattery:PID file created successfully: /var/tmp/dbus-serialbattery_3.pid
2024-08-04 18:42:47.703344500 INFO:SerialBattery:Used DeviceInstances = ['1', '2', '3', '4']
2024-08-04 18:42:47.703818500 INFO:SerialBattery:com.victronenergy.battery.ttyUSB0__0
2024-08-04 18:42:47.739347500 INFO:SerialBattery:publish config values = False
2024-08-04 18:42:47.752725500 INFO:SerialBattery:Polling data every 2.000 s
2024-08-04 18:42:47.752731500 INFO:SerialBattery:Battery EG4 Lifepower connected to dbus from /dev/ttyUSB0
2024-08-04 18:42:47.752736500 INFO:SerialBattery:========== Settings ==========
2024-08-04 18:42:47.752739500 INFO:SerialBattery:> Connection voltage: 50.04 V | Current: 0.0 A | SoC: 100.0%
2024-08-04 18:42:47.752744500 INFO:SerialBattery:> Cell count: 15 | Cells populated: 15
2024-08-04 18:42:47.752747500 INFO:SerialBattery:> LINEAR LIMITATION ENABLE: True
2024-08-04 18:42:47.752864500 INFO:SerialBattery:> MIN CELL VOLTAGE: 2.900 V | MAX CELL VOLTAGE: 3.450 V| FLOAT CELL VOLTAGE: 3.375 V
2024-08-04 18:42:47.752946500 INFO:SerialBattery:> MAX BATTERY CHARGE CURRENT: 50.0 A | MAX BATTERY DISCHARGE CURRENT: 60.0 A
2024-08-04 18:42:47.754807500 INFO:SerialBattery:> CVCM:     True
2024-08-04 18:42:47.754812500 INFO:SerialBattery:> CCCM CV:  True  | DCCM CV:  True
2024-08-04 18:42:47.754816500 INFO:SerialBattery:> CCCM T:   True  | DCCM T:   True
2024-08-04 18:42:47.754819500 INFO:SerialBattery:> CCCM SOC: False | DCCM SOC: False
2024-08-04 18:42:47.756365500 INFO:SerialBattery:> CHARGE FET: None | DISCHARGE FET: None | BALANCE FET: None
2024-08-04 18:42:47.756372500 INFO:SerialBattery:Serial Number/Unique Identifier: BA01A77I06230168v_54.04Ah

2024-08-04 18:39:15.868081500 INFO:SerialBattery:Testing EG4_Lifepower at address "\x02"
2024-08-04 18:39:15.921082500 INFO:SerialBattery:Hardware Version:BA01A77I06230168t
2024-08-04 18:39:16.186051500 ERROR:SerialBattery:>>> ERROR: No reply - returning
2024-08-04 18:39:16.451566500 ERROR:SerialBattery:>>> ERROR: No reply - returning

Any other information that may be helpful
No response

The driver has to be the master and the batteries the slave. Once you are successful in connecting single batteries with different addresses you can try it by daisy chain it. I hope this can help you.

Makes sense, I will focus on communication with different addresses. Do you have any suggestions on what I can try? I have spent a few days fiddling with the code and trying different branches. I would expect the only change I have to make is to the lifepower address in the dbus-serialbattery.py file?
{"bms": Lifepower, "baud": 9600, "address": b"\x02"},
But then I only get the hardware version as shown in the snippet above.
Thank you

Yes that is correct. You could check, if there is a error somewhere in the protocol (https://github.com/mr-manuel/venus-os_dbus-serialbattery__additional-info) and ask the manifacturer for help.

I have tested some additional addresses and found that all uneven addresses work: 0x01, 0x03, 0x05, 0x07.
For now, I will use this this as a workaround to get a solution running.
The next step is to get the driver to communicate with multiple batteries. Currently the driver stops searching for new batteries after the first one has been found. Does such an implementation exist yet? If not, how would you recommend I implement this, create x4 battery objects that each connect to a specific battery?

Just check the config.default.ini.

Hello, I have a similar problem with Narada 48NPFC100 batteries when modifying this part of the code:
; --------- Modbus (multiple BMS on one serial adapter) ---------
; Description:
;     Specify the modbus addresses as hexadeximal number for which a dbus-serialbattery instance should be started.
;     If left empty, the driver will connect only to the default address specified in the driver.
; Example:
;     MODBUS_ADDRESSES = 0x30, 0x31, 0x32, 0x33
MODBUS_ADDRESSES =
and wanting to put the addresses, the gx cerbo is giving alarms of loss of communication with bms.
try with 0x01, 0x02, 0x03, 0x04.
I also tried the Narada ones
0x01, 0x10x 0x11, 1x00
and I can't solve the problem, but if I leave it blank it recognizes only 1 module

I just got mine to work, I just have to sort out some bugs with the battery aggregator
I believe your addresses are incorrect.
0x means hexadecimal number format (base 16)
and the dip switches are in binary (backwards).
so for dip switches 1000 (which is sortof binary for 1), relates to 0x01
0100 means 2, so address 0x02
and so on:
1100 -> 0x03
0010 -> 0x04
1010 -> 0x05
0110 -> 0x06
1110 -> 0x07
0001 -> 0x08
for my setup, I used the following dip switches and addresses:
1000 -> 0x01
1100 -> 0x03
1010 -> 0x05
1110 -> 0x07
These addresses are also in the Narada manual.
Here is an online calculator for binary to hex, just note that the dip switch positions are flipped:
https://www.rapidtables.com/convert/number/binary-to-hex.html
Hope this helps

@Gerno082 may it be, that the first dip switch is not working and therefore only odd numbers work? Have you tried to set 4, but connect to 5? Would be curious, if it's a "mechanical" or software issue.

I will play around with the DIP switches and test that theory, but i tested address 0x02 on 3 of my 4 batteries.
I can connect my PC directly to each battery with the Tianpower software to test all the different addresses to see if the dip switches work.

It could also be, that the first dip switch is for something other. The other three could be used for 8 addresses. Can you post a picture of the dip switches and the manual for others?

In my case I have the dips like this in that sequence in the same order from battery 1 to 4

I just got mine to work, I just have to sort out some bugs with the battery aggregator
I believe your addresses are incorrect.
0x means hexadecimal number format (base 16) and the dip switches are in binary (backwards).
so for dip switches 1000 (which is sortof binary for 1), relates to 0x01 0100 means 2, so address 0x02 and so on: 1100 -> 0x03 0010 -> 0x04 1010 -> 0x05 0110 -> 0x06 1110 -> 0x07 0001 -> 0x08
for my setup, I used the following dip switches and addresses: 1000 -> 0x01 1100 -> 0x03 1010 -> 0x05 1110 -> 0x07
These addresses are also in the Narada manual.
Here is an online calculator for binary to hex, just note that the dip switch positions are flipped: https://www.rapidtables.com/convert/number/binary-to-hex.html
Hope this helps

With the configuration you made it worked for me and it recognized the 4 batteries, but now the GX cerbo in the vrm portal disconnects it due to overload.
real-time connection disabled due to overload of the GX device

Hello, good afternoon, in the meantime, trial and error when checking each battery in an odd way and putting it in the cerbo, they all come out like this and marking the error:

please help

@oabarzua your problem is not related to this issue. Open a new one and provide all requested data.

Not yet, I was working on the rest of the system to have it running within the next few week.
I see there is another issue that is related, Ican try to get some additional debug information from the driver if that will help. Where would you suggest I start debugging/what information would you like to see.

Would be interesting, if this commands match: https://github.com/mr-manuel/venus-os_dbus-serialbattery/blob/60eca4c86a0e86debbd8e7c0a2a898d87e9735a5/etc/dbus-serialbattery/bms/eg4_lifepower.py#L16-L18
Maybe the lenght for even addresses is different.

I will have a look when I get home later today.

I got mine to work on addresses 0x00 and 0x02. I read the output of the Tianpower software for different addresses. The commands are diferent for even addresses:
0x00: 7E 01 01 00 00 0D
0x02: 7E 02 01 00 FC 0D
0x04: 7E 04 01 00 F8 0D
0x06: 7E 06 01 00 FC 0D
0x08: 7E 08 01 00 F0 0D
0x0A: 7E 0A 01 00 FC 0D
0x0C: 7E 0C 01 00 F8 0D
0x0E: 7E 0E 01 00 FC 0D
for uneven addresses up to 15 is always 7E (address) 01 00 FE 0D
I don't see a definitive pattern. The Tianpower software also doesn't request the hardware and firmware versions until a connection is established, so those might also be different. I can test this at a later stage if necessary.
@mr-manuel  I can send you the Tianpower software if you would like to look at the output.
Hope this helps

The checksum does not make any sense to me, which should be the 5th byte.

What if you set the 5th byte to \x00? Could you try that?
Change this code
https://github.com/mr-manuel/venus-os_dbus-serialbattery/blob/60eca4c86a0e86debbd8e7c0a2a898d87e9735a5/etc/dbus-serialbattery/bms/eg4_lifepower.py#L16-L18
to
        self.command_general = b"\x7E" + address + b"\x01\x00\x00\x0D"
        self.command_hardware_version = b"\x7E" + address + b"\x42\x00\x00\x0D"
        self.command_firmware_version = b"\x7E" + address + b"\x33\x00\x00\x0D"

Ok, I will try that when I get home
Here is the software if you would like probe the output in the meantime
ND1502  2020-11-04 -V1.1.634-32-17.zip

I tried your suggestions on battery addresses 0x00 and 0x02 by changing the 5th byte of the general, hardware and firmware commands to either 0x00, 0xFF or the corresponding value I got from the Tianpower software
For address 0x00 the 5th byte had to be 0x00 (0xFF did not work)
For address 0x02 the 5th byte had to be 0xFC (0x00 and 0XFF did not work)

The initial version of this driver is looking for the unit to be on address 01 via the dips switches, it also did not support reading from more then one BMS unit.
I have been working on adding these features to this driver, I have a few more items I would like to address prior to pushing back into this main release, but do have a stable  driver.
https://github.com/tuxntoast/eg4-ll/blob/main/egll.py
You would need to just replace /data/etc/dbus-serialbattery/bms/eg4_ll.py with that file above. re-run the install by calling /data/etc/dbus-serialbattery/reinstall-local.sh
Line 66 of that file above is where you enter in the BMS ID that are present in your chain. Presently this driver only supports the master being 16 and the rest between 1-15. I am working to extend this to support up to address 64.

@Gerno082 @Zeezichtje could you test the latest version of the eg-lifepower-test branch? Please check the logs, if the hardware and firmware versions are read correctly for all batteries. Probably the command for the hardware version is also different for the single battery addresses and we need to change that as well.
The default command is 7E 01 42 00 FC 0D. Could you check if the FC part changes for the different addresses?

No problem, I will test the new branch. My system is finally running, for just over a week now, so it is much easier to test changes now.
I had to hardcode the "allowed to charge" and "allowed to discharge" variables in the driver file to get the system to use the battery
And I get occasional internal calculation errors
But I believe these are unrelated bugs/changes, I will investigate them further at some stage

I have tested the eg-lifepower-test, it appears that everything works.
When first installing the new branch, my setup was still on addresses 0x01, 0x03, 0x05, 0x07, which still worked.
I then changed the addresses and DIP switches to 0x00, 0x02, 0x04, 0x06, which also worked. All batteries had unique serial numbers, I could read the cell voltages of all the batteries etc.
So my setup currently uses addresses 0x00, 0x01, 0x02, 0x03, I will keep it on these addresses to test for the next few days.

I have tested the eg-lifepower-test, it appears that everything works.
When first installing the new branch, my setup was still on addresses 0x01, 0x03, 0x05, 0x07, which still worked.
I then changed the addresses and DIP switches to 0x00, 0x02, 0x04, 0x06, which also worked. All batteries had unique serial numbers, I could read the cell voltages of all the batteries etc.
So my setup currently uses addresses 0x00, 0x01, 0x02, 0x03, I will keep it on these addresses to test for the next few days.

I have the same experience. I am currently running on 0x01, 0x02, 0x03, 0x04, 0x05 and 0x06 and it works.

Can you confirm that this documentation is correct?
https://mr-manuel.github.io/venus-os_dbus-serialbattery_docs/next/general/connect#eg4-lifepower

Can you confirm that this documentation is correct?
https://mr-manuel.github.io/venus-os_dbus-serialbattery_docs/next/general/connect#eg4-lifepower

EG4 has only 4 dipswitches. The first four dipswitches of table are correct.
See the manual page 9 https://eg4electronics.com/wp-content/uploads/2024/04/EG4-Lifepower4-48V-Manual.pdf

The Narada battery has 6 DIP switches, but the right two switches are unused. So I aggree that the documentation is correct.

Thanks


default files and settings -- nothing happens (black screen)

I tried to use the default and I don't see anything happening other than 503. Am I doing something wrong?
ffmpeg-streamer ver: 0.0.12
ffmpeg ver: 2.8.15-0ubuntu<IP_ADDRESS>
-loglevel info -progress pipe:3 -hwaccel auto -analyzeduration 10000000 -probesize 1048576 -re -f hls -i http://commondatastorage.googleapis.com/gtv-videos-bucket/CastVideos/hls/TearsOfSteel.m3u8 -c:a aac -c:v copy -f mp4 -movflags +dash+negative_cts_offsets pipe:1 -c mjpeg -q 10 -r 7 -vf scale=trunc(iw*0.75/2)*2:-2 -f image2pipe pipe:4
anand@ubulap2:~/ffmpeg-streamer$ npm run dev

<EMAIL_ADDRESS>dev /home/anand/ffmpeg-streamer
node --trace-warnings app 3000 development

Listening on port 3000.
 You could have visited your server address and put "/install" added on to url to get option to install ffmpeg, too.

Hi,
thank you for replying.
The OS i am using is Ubuntu 16.04 which is connected to a private network which consists of IP cameras connected to that network. And I started the process by providing the rtsp url of the IP camera in the UI on localhost:3000
When I proceeded after giving the rtsp url, The console had error as mentioned above by  @saket424
Since the IP cam is not publicly accessible, it didn't work in the test app.

I just tried ffmpeg-streamer on my ubuntu, mac, and windows machines and it still works for me, so there must be some setting that is making ffmpeg crash.
Did you ever try to run it with the default parameters and video stream that is pre-populated, assuming that your ubuntu box has internet access?


Cast v10.2.2 crashes on Windows 10, non-Qt project

My software crashes in cast.dll after upgrading the cast to v10.2.2. It was a memory access violation at 0x000000000.
The crash occurred after cusCastConnect was successfully invoked.
I tested the example and got another error at cusCastInitialize. Belows is the console output of cast_qt example:

Development environment when compiling the cast_qt example:

Cast v10.2.2
Windows 10 Pro 22H2
Qt 6.3.1
Visual Studio 2019

Regards.

According to the documentation of SetProcessDpiAwarenessContext():

Return value: ERROR_ACCESS_DENIED if the default API awareness mode for the process has already been set (via a previous API call or within the application manifest).

This call is performed by the Qt Windows platform plugin, it is out of our control so ensure your app does not set the DEPI mode via previous API call or application manifest.

Thank Julien. I am using WPF for the GUI. I will check whether I can disable Dpi Awareness on my app's site.
I hope this error can be eliminated at the API site as the library should be independent of the app's GUI.
Anyway, I will update you later on how it is going.

Hi Julien,
Did the example work on your computer?
The screenshot of the error that I sent is generated by the example cast_qt of Clarius.

please see the release note here: https://github.com/clariusdev/cast/releases, known issue in this version

Thank Kris. I have changed the example to accept 0 as success when calling cusCastInit.
However, it crashes after receiving a few images. You might want to give it a look.

Currently, our devices have been accidentally upgraded to v10.2.2, and couldn't use our software anymore due to this issue.
Do you have any suggestions on how to solve this? We have a clinic next week :(.
Thank you.

Hi @julien-l ,

You were right. That is a bug of the Clarius' example. I have temporally fixed it and it is working.

However, it seems there is a breaking change in the Cast API v10.2.2 that makes my software crash. I can see there is an access violation to memory address 0x00000000 thrown by cast.dll.
To make sure this is not false. I have created a tiny software that just calls cusCastInit and cusCastConnect and it shows the same symptom.

Could you please take a look? You can download the code from my GitHub. It is a Visual Studio 2019 C++ project with only 100 lines of code. I suspect the cast.dll is access something that is not available in Non-Qt environment.
https://github.com/nguyenvuduc/ClariusCastDllClientTestVsCpp/blob/main/ClariusCastDllClientTestVsCpp.cpp

Regards,

Thank Kris. That will work. I really appreciate it.
Where can get the APK files? I couldn't find it on GitHub or Clarius' website. Regards,

we have some APKs here, latest is 10.1.1, we can probably make a new repository to host all the major releases next week as well.

Thank Kris

Hi @nguyenvuduc  @clariusk,
I have been working with caster_qt example for a while now end these Debug Errors have always been there. From what I've learned you can just "ignore" them when running on debug mode, or run your code either on release or straight from .exe, so that they don't appear at all.
As for the access violation exception, I also have encountered this issue after updating cast.dll to v10.2.2. For me the exception is being thrown after calling cusCastUserFunction (for example after calling it with Freeze command, image is being frozen on the mobile device and exception stops desktop app from working).
Ss from VS:

Hope this helps and that this issue could be resolved in the nearest future.

@J-Olejnik thanks, this is helpful

hi, I found the issue, there was an issue when calling freeze or any user parameter, this will be fixed for 10.3 coming soon!


saving json file does not appear to be working when game is exported (on OSX and WebAssembly at least)

Operating system or device, Godot version, GPU Model and driver (if graphics related):
Tested issue on OSX and WebAssembly, Godot 3.0 alpha 2
Issue description:
During my game I track performance data and save it as a JSON when it changes. The data from this JSON is parsed when the player enters the menu screen and is able to view there performance data. Much like a save game to be honest. This is working when ran from the editor but when exported (on mac and webassembly, these are the only mediums I have to test on) the data does not update and is stuck as the json that is loaded with the initial game (i.e. blank with some formatting for the various keys). Below is the code I use to save the JSON:
func save_JSON(saveFile):
    var performance = File.new()
    performance.open("res://JSON_files/performance.json", File.WRITE)
    performance.store_line(to_json(saveFile))
    performance.close()

As I say works fine from godot editor, but does not appear to work when exported. I seem to get the following error on exported version when the above code is intended to be ran as well:
**ERROR**: **ERROR**: Condition ' !f ' is true. **ERROR**:    At: core/bind/core_bind.cpp:1680:store_line() - Condition ' !f ' is true.

That's not a bug, res:// is read only in an exported game (it's your data.pck). You should write files to user://.

Oh sorry. Thanks!

So my code just has to be:
func save_JSON(saveFile):
    var performance = File.new()
    performance.open("user://JSON_files/performance.json", File.WRITE)
    performance.store_line(to_json(saveFile))
    performance.close()

can the code still access the JSON_files folder?

No, user:// is a platform specific folder for your game unrelated to your project files. So if you have a JSON_files folder in your project data pack that you want to modify, you could copy it to user:// on the first launch of the game and do modifications there.

Awesome thanks I understand now!


Enhancement: HTTP/2 Cleartext (h2c) support

Is it possible to enable HTTP/2 Cleartext support?
I would like to enable HTTP2 in a Google Cloud Run service; it looks like h2c support is required for this.  Is this something that you think is feasible?
HTTP/2 in Cloud Run
HTTP2 FAQ

Granian supports HTTP/2 without TLS as soon as you manually specify the --http 2 option.
Granian won't ever support upgrades from HTTP/1.1 to HTTP/2 without alpn, though.

Thanks!  I guess I need to do some testing to see how far this functionality will get me.  I'll post any updates here.

I'm closing this as is currently supported. You can check it locally running Granian with --http2 and using the test command GCP documentation provides:
curl -i --http2-prior-knowledge http://localhost:PORT

Feel free to comment again on this in case you find any issues, I'll reopen.


Fix usb-detect tests

PR removes non existing keywords and fixes Enter Tianocore And Return Menu keyword.
Also test to check if test should fail was moved inside try/except block to Fail test immediately when number of failed tries goes above some threshold (no need to wait for 5 fails if test would fail anyway after first one)
Related to https://github.com/Dasharo/open-source-firmware-validation/pull/312

@m-iwanicki Any logs and / or details on how it was tested?

@macpijan Yes, in the issue: https://github.com/Dasharo/open-source-firmware-validation/issues/279#issuecomment-2206059601


redirect_back method

This is a 🙋♂ feature or enhancement.

[ ] I've added tests (if it's a bug, feature or enhancement)
[ ] I've adjusted the documentation (if it's a feature or enhancement)
[x] The test suite passes (run bundle exec rspec to verify this)

Summary
Add redirect_back controller method.
Context
https://github.com/tongueroo/jets/issues/352

Released in v2.1.3


Is it possible to use srcset for responsive images ?

Hi,
I've tried a lot of gallery/slider libraries and Spotlight could be the best I've found.
But I'm missing the capability to use srcset for the linked images.
Right now, we have to choose a unique size, which is not good with the multiple screen sizes out there.
Is there a way to use srcset or do you plan to add it ?
Thanks in advance.

Generally it is planned to provide to something like srcset with also the logic behind to get the optimal image by:

current screen size
maximum viewport
pixel ratio
internet connection speed

I already implemented those logic for a project, because any default srcset/picture as well as its polyfills could not handle all this attributes perfectly. I need to transfer this logic into spotlight. Surely that's a good feature for the upcoming version.

Hi ..How to give the extrenal link for the title , could you please help me, i am trying but not getting

@ts-thomas do you have any example or code snippets from the project you referenced about that you could share for srcset support?

Any update on this?

Adaptive responsive images is a part of the upcoming version :)

"Adaptive Responsive Images" is now a core feature of Spotlight. And let me say, it is a way better than using srcset but works similar. The full documentation is on the road. Thanks for your patience.


Catch AWS Service Exceptions when initializing appeneder

One example:
ERROR in ch.qos.logback.core.joran.spi.Interpreter@33:24 - RuntimeException in Action for tag [appender] com.amazonaws.AmazonServiceException:
User: arn:aws:sts::123123123:assumed-role/ is not authorized to perform: firehose:DescribeDeliveryStream on resource: arn:aws:firehose:eu-west-1:....
(Service: AmazonKinesisFirehose; Status Code: 400; Error Code: AccessDeniedException; Request ID: 782f1dbb-10c7-11e8-bde6-991f2376efb2)

Same like for validating empty stream name or missing stream, the error should reported but the app should not be prevented to boot

Thanks @vvondra. Definite improvement to the messaging and behaviour.

Hello,
We are also facing this issue with our applications having trouble booting sometimes, would be great to have this PR merged upstream.

This is released in 1.4.4.


Build fails with SDL2 on macOS 10.15.6

[X] I have read the FAQ.
[X] I have searched in existing issues.

Environment

OS: macOS Catalina 10.15.6 (19G2021)
scrcpy version: current dev branch (acc65f8c9dc477e978d438a2f2a3501e49230211) or current master branch (c136edf09d54b4f61e27577622e7ba93f72acb0f)
installation method: manual build
device model: N/A
Android version: N/A

Describe the bug
I've followed the steps for setting up my macOS environment and building from source, but it appears that my SDL2 dependency is somehow incompatible with the build configuration.
Configuration appears to be okay:
$ meson x --buildtype release --strip -Db_lto=true
The Meson build system
Version: 0.55.3
Source dir: /Users/plammer/StudioProjects/scrcpy
Build dir: /Users/plammer/StudioProjects/scrcpy/x
Build type: native build
Project name: scrcpy
Project version: 1.16
C compiler for the host machine: cc (clang 12.0.0 "Apple clang version 12.0.0 (clang-1<IP_ADDRESS>)")
C linker for the host machine: cc ld64 609
Host machine cpu family: x86_64
Host machine cpu: x86_64
Found pkg-config: /usr/local/bin/pkg-config (0.29.2)
Run-time dependency libavformat found: YES 58.45.100
Run-time dependency libavcodec found: YES 58.91.100
Run-time dependency libavutil found: YES 56.51.100
Run-time dependency sdl2 found: YES 2.0.12
Configuring config.h using configuration
Program ./scripts/build-wrapper.sh found: YES
Build targets in project: 3

Found ninja-1.10.1 at /usr/local/bin/ninja

Building fails with the following error (this is output from the dev branch; master branch yields a bit more output with 3 warnings and 3 errors):
$ ninja -Cx
ninja: Entering directory `x'
[11/26] Generating scrcpy-server with a custom command

> Task :server:compileReleaseJavaWithJavac
Note: /Users/plammer/StudioProjects/scrcpy/server/src/main/java/com/genymobile/scrcpy/Workarounds.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.3/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 6s
25 actionable tasks: 25 executed
[12/26] Compiling C object app/scrcpy.p/src_sys_unix_command.c.o
FAILED: app/scrcpy.p/src_sys_unix_command.c.o
cc -Iapp/scrcpy.p -Iapp -I../app -I../app/src -I/usr/local/Cellar/ffmpeg/4.3.1_1/include -I/usr/local/include/SDL2 -flto -Xclang -fcolor-diagnostics -pipe -Wall -Winvalid-pch -Wextra -std=c11 -O3 -D_THREAD_SAFE -MD -MQ app/scrcpy.p/src_sys_unix_command.c.o -MF app/scrcpy.p/src_sys_unix_command.c.o.d -o app/scrcpy.p/src_sys_unix_command.c.o -c ../app/src/sys/unix/command.c
In file included from ../app/src/sys/unix/command.c:24:
In file included from ../app/src/util/log.h:4:
In file included from /usr/local/include/SDL2/SDL_log.h:40:
/usr/local/include/SDL2/SDL_stdinc.h:426:5: error: implicit declaration of function 'memset_pattern4' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    memset_pattern4(dst, &val, dwords * 4);
    ^
1 error generated.
[24/26] Compiling C object app/scrcpy.p/src_screen.c.o
ninja: build stopped: subcommand failed.

/usr/local/include/SDL2/SDL_stdinc.h:426:5: error: implicit declaration of function 'memset_pattern4' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
   memset_pattern4(dst, &val, dwords * 4);
   ^

#ifdef __APPLE__
    memset_pattern4(dst, &val, dwords * 4);

https://github.com/spurious/SDL-mirror/blob/498a440ad2025a709e08c27179802e18e6b69500/include/SDL_stdinc.h#L425-L426
On Apple, memset_pattern4() requires to include string.h, which is done (if HAVE_STRING_H):
https://github.com/spurious/SDL-mirror/blob/498a440ad2025a709e08c27179802e18e6b69500/include/SDL_stdinc.h#L60
Where does your SDL installation come from?

(this is output from the dev branch; master branch yields a bit more output with 3 warnings and 3 errors)

Yes, see #1726. Does this specific error belong to these 3 errors on master?

Thanks for the insightful response, Romain!

Where does your SDL installation come from?

I installed it via brew install sdl2. I had some difficulties previously through Xcode that I didn't think were related, but truthfully I don't recall the specific error I was encountering or how to resolve it.

see #1726. Does this specific error belong to these 3 errors on master?

Yes, it appears that I'm getting the precise same output:
plammer-macbookpro:scrcpy plammer$ ninja -Cx
ninja: Entering directory `x'
[0/3] Generating scrcpy-server with a custom command

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.3/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 905ms
25 actionable tasks: 1 executed, 24 up-to-date
[1/3] Compiling C object app/scrcpy.p/src_sys_unix_command.c.o
FAILED: app/scrcpy.p/src_sys_unix_command.c.o
cc -Iapp/scrcpy.p -Iapp -I../app -I../app/src -I/usr/local/Cellar/ffmpeg/4.3.1_1/include -I/usr/local/include/SDL2 -flto -Xclang -fcolor-diagnostics -pipe -Wall -Winvalid-pch -Wextra -std=c11 -O3 -D_THREAD_SAFE -MD -MQ app/scrcpy.p/src_sys_unix_command.c.o -MF app/scrcpy.p/src_sys_unix_command.c.o.d -o app/scrcpy.p/src_sys_unix_command.c.o -c ../app/src/sys/unix/command.c
In file included from ../app/src/sys/unix/command.c:24:
In file included from ../app/src/util/log.h:4:
In file included from /usr/local/include/SDL2/SDL_log.h:40:
/usr/local/include/SDL2/SDL_stdinc.h:426:5: error: implicit declaration of function 'memset_pattern4' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    memset_pattern4(dst, &val, dwords * 4);
    ^
../app/src/sys/unix/command.c:31:12: error: implicit declaration of function 'strdup' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    path = strdup(path);
           ^
../app/src/sys/unix/command.c:31:12: note: did you mean 'strcmp'?
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/string.h:77:6: note: 'strcmp' declared here
int      strcmp(const char *__s1, const char *__s2);
         ^
../app/src/sys/unix/command.c:31:10: warning: incompatible integer to pointer conversion assigning to 'char *' from 'int' [-Wint-conversion]
    path = strdup(path);
         ^ ~~~~~~~~~~~~
../app/src/sys/unix/command.c:38:22: error: implicit declaration of function 'strtok_r' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
    for (char *dir = strtok_r(path, ":", &saveptr); dir;
                     ^
../app/src/sys/unix/command.c:38:22: note: did you mean 'strtok'?
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/string.h:90:7: note: 'strtok' declared here
char    *strtok(char *__str, const char *__sep);
         ^
../app/src/sys/unix/command.c:38:16: warning: incompatible integer to pointer conversion initializing 'char *' with an expression of type 'int' [-Wint-conversion]
    for (char *dir = strtok_r(path, ":", &saveptr); dir;
               ^     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../app/src/sys/unix/command.c:39:17: warning: incompatible integer to pointer conversion assigning to 'char *' from 'int' [-Wint-conversion]
            dir = strtok_r(NULL, ":", &saveptr)) {
                ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3 warnings and 3 errors generated.
ninja: build stopped: subcommand failed.

OK, so I think you should report either to the brew package maintainer or to SDL (at least to get more information).

Will do, thanks for the help.

For posterity, there appears to be this related issue:
https://bugzilla.libsdl.org/show_bug.cgi?id=5222
The suggestion was to comment out the line in question from SDL_stdinc.h:
    // memset_pattern4(dst, &val, dwords * 4);

This worked for me.

For posterity, there appears to be this related issue

Thank you

https://bugzilla.libsdl.org/show_bug.cgi?id=5222

Crash when running with -DHIDAPI=ON?

The suggestion was to comment out the line in question from SDL_stdinc.h

I can't find that suggestion in this issue :confused:

I have no idea how I gathered that from the completely unrelated issue. Let me file a proper bug.

"brew reinstall sdl2"


Rename Properties Schema fails during tuple-resorting

Version: (e.g. 0.4.1-SNAPSHOT)
Module: (e.g. quill-jdbc)
Database: (e.g. mysql)
The RenameProperties normalization builds up a schema based on applicative inner-joins yielding nested tuples etc... in order to know what to replace. The problem is since Tuples can be the output, arbitrary re-shuffling of elements can occur inside of a sub-map making the schema wrong. For example:
Here is a log from RenameProperties
case class Ent(name: String)
case class Foo(fame: String)
case class Bar(bame: String)

implicit val entSchema = schemaMeta[Ent]("TheEnt", _.name -> "theName")

val q = quote {
  query[Foo]
    .join(query[Ent]).on((f, e) => f.fame == e.name) // (Foo, Ent)
    .distinct
    .join(query[Bar]).on((fe, b) => (fe._1.fame == b.bame)) // ((Foo, Ent), Bar)
    .distinct
    .map(feb => (feb._1._2, feb._2))      // feb: ((Foo, Ent), Bar)
    .distinct
    .map(eb  => (eb._1.name, eb._2.bame)) // eb: (Ent, Bar)
}

run(q)

Log:
Finding Replacements for f.fame == e.name inside (f, e) using schemas (EntitySchema(querySchema("Foo")), EntitySchema(`querySchema`("TheEnt", _.name -> "theName"))) :
> List((e.name, e.`theName`))
Replaced f.fame == e.name with f.fame == e.`theName`

Finding Replacements for
|  fe._1.fame == b.bame
|inside
|  (fe, b)
|using schemas
|  (
|    TupleSchema(Map(0 -> EntitySchema(querySchema("Foo")), 1 -> EntitySchema(`querySchema`("TheEnt", _.name -> "theName")))),
|    EntitySchema(querySchema("Bar"))
|  )
|:
> List((fe._2.name, fe._2.`theName`))

Finding Replacements for
|  (feb._1._2, feb._2)
|inside
|  feb
|using schema
|  TupleSchema(
|    Map(
|      0 -> TupleSchema(Map(0 -> EntitySchema(querySchema("Foo")), 1 -> EntitySchema(`querySchema`("TheEnt", _.name -> "theName")))),
|      1 -> EntitySchema(querySchema("Bar"))
|    )
|  )
|:
> List((feb._1._2.name, feb._1._2.`theName`))

// *******************************************************************
//      THE SCHEMA IS WRONG: 'e' (i.e. Ent) IS NOW THE 1st ELEMENT!
// *******************************************************************
Finding Replacements for
|  (eb._1.name, eb._2.bame)
|inside
|  eb
|using schema
|  TupleSchema(
|    Map(
|      0 -> TupleSchema(Map(0 -> EntitySchema(querySchema("Foo")), 1 -> EntitySchema(`querySchema`("TheEnt", _.name -> "theName")))),
|      1 -> EntitySchema(querySchema("Bar"))
|    )
|  )
|:
> List((eb._1._2.name, eb._1._2.`theName`))

The RenameProperties is created with a key assumption that is very problematic. Namely, that the order of hiearchical elements will never be changed within a sub-select. As soon as that assumption is violated, RenameProperties no longer functions correctly. In some cases, it could even rename the wrong table's column.
@getquill/maintainers

Here's how I can even manipulate the incorrect behavior of RenameProperties to even rename the wrong column!
case class Ent(name: String)
case class WrongEnt(name: String)
case class Bar(bame: String)

implicit val entSchema = schemaMeta[Ent]("TheEnt", _.name -> "theName")

val q = quote {
  query[WrongEnt]
    .join(query[Ent]).on((f, e) => f.name == e.name) // (WrongEnt, Ent)
    .distinct
    .join(query[Bar]).on((we, b) => (we._1.name == b.bame)) // ((WrongEnt, Ent), Bar)
    .distinct
    .map(web => ((web._1._2, web._1._1), web._2)) // web: ((WrongEnt, Ent), Bar) -> ((Ent, WrongEnt), Bar)
    .distinct
    .map(ewb => (ewb._1._2.name, ewb._2.bame)) // ewb: ((WrongEnt, Ent), Bar)
}

run(q)

The log reads roughly the same:
Finding Replacements for f.name == e.name inside (f, e) using schemas (EntitySchema(querySchema("WrongEnt")), EntitySchema(`querySchema`("TheEnt", _.name -> "theName"))) :
> List((e.name, e.`theName`))
Replaced f.name == e.name with f.name == e.`theName`

Finding Replacements for
|  we._1.name == b.bame
|inside
|  (we, b)
|using schemas
|  (
|    TupleSchema(Map(0 -> EntitySchema(querySchema("WrongEnt")), 1 -> EntitySchema(`querySchema`("TheEnt", _.name -> "theName")))),
|    EntitySchema(querySchema("Bar"))
|  )
|:
> List((we._2.name, we._2.`theName`))

Finding Replacements for
|  ((web._1._2, web._1._1), web._2)
|inside
|  web
|using schema
|  TupleSchema(
|    Map(
|      0 -> TupleSchema(Map(0 -> EntitySchema(querySchema("WrongEnt")), 1 -> EntitySchema(`querySchema`("TheEnt", _.name -> "theName")))),
|      1 -> EntitySchema(querySchema("Bar"))
|    )
|  )
|:
> List((web._1._2.name, web._1._2.`theName`))

//*************************************************************************************
//  WE SWAPPED THE ORDER OF WrongEnt and Ent but it still things _1_2 is Ent!!!!!
//*************************************************************************************
Finding Replacements for
|  (ewb._1._2.name, ewb._2.bame)
|inside
|  ewb
|using schema
|  TupleSchema(
|    Map(
|      0 -> TupleSchema(Map(0 -> EntitySchema(querySchema("WrongEnt")), 1 -> EntitySchema(`querySchema`("TheEnt", _.name -> "theName")))),
|      1 -> EntitySchema(querySchema("Bar"))
|    )
|  )
|:
> List((ewb._1._2.name, ewb._1._2.`theName`))
Replaced (ewb._1._2.name, ewb._2.bame) with (ewb._1._2.`theName`, ewb._2.bame) A

What is happening here is that because the order of the joins, the RenameProperties schema things that _1._2 is the Ent element despite the fact that we flipped them! Since WrongEnt has a name property, RenameProperties will happily rename WrongEnt.name to theName despite the fact that it is wrong entity!

The unfortunate but imminent conclusion of this reasoning is that RenameProperties is completely broken and needs to be seriously re-examined.

Fixed by #1613


Crash on "Internal error, cycle detected:"

Rust analyzer crashes on rust-analyzer analysis-stats . with:
thread 'main' panicked at 'Internal error, cycle detected:

__SalsaDatabaseKey { kind: DefDatabaseStorage(crate_def_map_query(CrateId(221))) }
', <::std::macros::panic macros>:5:6
stack backtrace:
   0: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt
   1: core::fmt::write
   2: std::io::Write::write_fmt
   3: std::panicking::default_hook::{{closure}}
   4: std::panicking::default_hook
   5: std::panicking::rust_panic_with_hook
   6: rust_begin_unwind
   7: std::panicking::begin_panic_fmt
   8: <T as ra_hir_def::db::DefDatabase>::crate_def_map_query
   9: <T as ra_hir_def::db::DefDatabase>::crate_def_map
  10: ra_hir_def::nameres::collector::collect_defs
  11: ra_hir_def::nameres::CrateDefMap::crate_def_map_query
  12: salsa::runtime::Runtime<DB>::execute_query_implementation
  13: salsa::derived::slot::Slot<DB,Q,MP>::read_upgrade
  14: salsa::derived::slot::Slot<DB,Q,MP>::read
  15: <salsa::derived::DerivedStorage<DB,Q,MP> as salsa::plumbing::QueryStorageOps<DB,Q>>::try_fetch
  16: <T as ra_hir_def::db::DefDatabase>::crate_def_map_query
  17: <T as ra_hir_def::db::DefDatabase>::crate_def_map
  18: ra_hir_def::nameres::collector::collect_defs
  19: ra_hir_def::nameres::CrateDefMap::crate_def_map_query
  20: salsa::runtime::Runtime<DB>::execute_query_implementation
  21: salsa::derived::slot::Slot<DB,Q,MP>::read_upgrade
  22: salsa::derived::slot::Slot<DB,Q,MP>::read
  23: <salsa::derived::DerivedStorage<DB,Q,MP> as salsa::plumbing::QueryStorageOps<DB,Q>>::try_fetch
  24: <T as ra_hir_def::db::DefDatabase>::crate_def_map_query
  25: <T as ra_hir_def::db::DefDatabase>::crate_def_map
  26: ra_hir_def::nameres::collector::collect_defs
  27: ra_hir_def::nameres::CrateDefMap::crate_def_map_query
  28: salsa::runtime::Runtime<DB>::execute_query_implementation
  29: salsa::derived::slot::Slot<DB,Q,MP>::read_upgrade
  30: salsa::derived::slot::Slot<DB,Q,MP>::read
  31: <salsa::derived::DerivedStorage<DB,Q,MP> as salsa::plumbing::QueryStorageOps<DB,Q>>::try_fetch
  32: <T as ra_hir_def::db::DefDatabase>::crate_def_map_query
  33: <T as ra_hir_def::db::DefDatabase>::crate_def_map
  34: ra_hir_def::nameres::collector::collect_defs
  35: ra_hir_def::nameres::CrateDefMap::crate_def_map_query
  36: salsa::runtime::Runtime<DB>::execute_query_implementation
  37: salsa::derived::slot::Slot<DB,Q,MP>::read_upgrade
  38: salsa::derived::slot::Slot<DB,Q,MP>::read
  39: <salsa::derived::DerivedStorage<DB,Q,MP> as salsa::plumbing::QueryStorageOps<DB,Q>>::try_fetch
  40: <T as ra_hir_def::db::DefDatabase>::crate_def_map_query
  41: <T as ra_hir_def::db::DefDatabase>::crate_def_map
  42: ra_hir_def::nameres::collector::collect_defs
  43: ra_hir_def::nameres::CrateDefMap::crate_def_map_query
  44: salsa::runtime::Runtime<DB>::execute_query_implementation
  45: salsa::derived::slot::Slot<DB,Q,MP>::read_upgrade
  46: salsa::derived::slot::Slot<DB,Q,MP>::read
  47: <salsa::derived::DerivedStorage<DB,Q,MP> as salsa::plumbing::QueryStorageOps<DB,Q>>::try_fetch
  48: <T as ra_hir_def::db::DefDatabase>::crate_def_map_query
  49: <T as ra_hir_def::db::DefDatabase>::crate_def_map
  50: ra_hir::code_model::Crate::root_module
  51: rust_analyzer::cli::analysis_stats::analysis_stats
  52: rust_analyzer::main
  53: std::rt::lang_start::{{closure}}
  54: std::panicking::try::do_call
  55: __rust_maybe_catch_panic
  56: std::rt::lang_start_internal
  57: main
  58: __libc_start_main
  59: _start
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

Repository: https://github.com/paritytech/substrate

@matklad any idea how can I help on this? I tried to look into the code, but got lost really fast. (I know that we have cyclic dependencies via dev-dependencies, however I would expect that rust-analyzer like cargo is able to resolve this anyway)

@flodiebold any idea maybe?

@bkchr the npos-elections crate has a direct dependency on itself. Is that intentional?

Ty for fixing this! :heart:
And not, it should not depend on itself: https://github.com/paritytech/substrate/pull/6444

If that actually works and has an effect though, we might need to handle it differently...

I think the main problem is that we have other cyclic dependencies as well. But the other ones don't depend on themself directly. You just end up with a reference to your own crate because you import some different crate as dev dependency.
[ERROR ra_project_model] cyclic dependency node-testing -> node-executor
[ERROR ra_project_model] cyclic dependency frame-system -> frame-support
[ERROR ra_project_model] cyclic dependency substrate-test-runtime-client -> sc-block-builder
[ERROR ra_project_model] cyclic dependency sc-service -> sc-block-builder
[ERROR ra_project_model] cyclic dependency sc-service -> sc-chain-spec
[ERROR ra_project_model] cyclic dependency sc-service -> sc-finality-grandpa
[ERROR ra_project_model] cyclic dependency sc-service -> sc-informant
[ERROR ra_project_model] cyclic dependency sc-service -> sc-network
[ERROR ra_project_model] cyclic dependency sc-service -> sc-offchain
[ERROR ra_project_model] cyclic dependency sc-service -> sc-rpc
[ERROR ra_project_model] cyclic dependency sc-service -> sc-transaction-pool
[ERROR ra_project_model] cyclic dependency sc-service -> substrate-test-runtime-client
[ERROR ra_project_model] cyclic dependency sp-runtime-interface -> sp-core
[ERROR ra_project_model] cyclic dependency sp-runtime-interface -> sp-runtime-interface-test-wasm
[ERROR ra_project_model] cyclic dependency sp-runtime-interface -> sp-state-machine
[ERROR ra_project_model] cyclic dependency pallet-balances -> pallet-transaction-payment
[ERROR ra_project_model] cyclic dependency sp-runtime -> sp-state-machine
[ERROR ra_project_model] cyclic dependency sc-client-db -> substrate-test-runtime-client
[ERROR ra_project_model] cyclic dependency sp-io -> sp-core
[ERROR ra_project_model] cyclic dependency sp-io -> sp-runtime-interface
[ERROR ra_project_model] cyclic dependency sp-io -> sp-state-machine
[ERROR ra_project_model] cyclic dependency sp-io -> sp-trie
[ERROR ra_project_model] cyclic dependency substrate-test-runtime -> frame-executive
[ERROR ra_project_model] cyclic dependency substrate-test-runtime -> frame-support
[ERROR ra_project_model] cyclic dependency substrate-test-runtime -> frame-system
[ERROR ra_project_model] cyclic dependency substrate-test-runtime -> pallet-babe
[ERROR ra_project_model] cyclic dependency substrate-test-runtime -> pallet-timestamp
[ERROR ra_project_model] cyclic dependency substrate-test-runtime -> sc-block-builder
[ERROR ra_project_model] cyclic dependency substrate-test-runtime -> sc-executor
[ERROR ra_project_model] cyclic dependency substrate-test-runtime -> sc-service
[ERROR ra_project_model] cyclic dependency substrate-test-runtime -> substrate-test-runtime-client


Start using test matrix for different Unity versions

Waiting for https://github.com/Unity-CI/docker/issues/46 and https://github.com/webbertakken/unity-test-runner/pull/77 to be resolved before continuing with this.


fix: revert support implementation for Node16/NodeNext

Summary

See commit
Fixes #4468
Fixes #4473
Test plan

Green CI
Does this PR introduce a breaking change?

[ ] Yes
[x] No

Other information
N.A.

Pull Request Test Coverage Report for Build<PHONE_NUMBER>4
Details

11 of 11 (100.0%)  changed or added relevant lines in 1 file are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+0.06%) to 95.311%

Totals

Change from base Build<PHONE_NUMBER>9:
0.06%

Covered Lines:
4759

Relevant Lines:
4937

💛  - Coveralls


Implemented pending refunds functionality

@andrii-onufriichuk are we also updating the refund webhook to handle the logic within the webhook instead of doing it in the queue, as discussed?


feat: add printfn/fend

printfn/fend: Arbitrary-precision unit-aware calculator
$ aqua g -i printfn/fend

How to confirm if this package works well
Reviewers aren't necessarily familiar with this package, so please describe how to confirm if this package works well.
Please confirm if this package works well yourself as much as possible.
Command and output
$ fend --help
For more information on how to use fend, please take a look at the manual:
https://printfn.github.io/fend/documentation/

Version: 1.1.5
Config file: /Users/lars/.config/fend/config.toml
History file: /Users/lars/.local/state/fend/history
Cache directory: /Users/lars/.cache/fend

Thank you always!

Released. https://github.com/aquaproj/aqua-registry/releases/tag/v3.144.0


How to load cmp sources lazily

Currently, I do something like:
local M = {
	'hrsh7th/nvim-cmp',
	dependencies = {
		'L3MON4D3/LuaSnip',
		'saadparwaiz1/cmp_luasnip',
		'rafamadriz/friendly-snippets',
		'hrsh7th/cmp-nvim-lsp',
		'hrsh7th/cmp-cmdline',
		'hrsh7th/cmp-path',
		'JosefLitos/cmp-calc',
	},
  config=...
}
return M

But sometimes I get an error when loading luasnip, because it requires cmp to register the source.
Doing something like
local M = {
	'hrsh7th/nvim-cmp',
	dependencies = {
		{ 'L3MON4D3/LuaSnip', dependencies = 'nvim-cmp' },
		{ 'saadparwaiz1/cmp_luasnip', dependencies = 'nvim-cmp' },
		{ 'rafamadriz/friendly-snippets', dependencies = 'nvim-cmp' },
		{ 'hrsh7th/cmp-nvim-lsp', dependencies = 'nvim-cmp' },
		{ 'hrsh7th/cmp-cmdline', dependencies = 'nvim-cmp' },
		{ 'hrsh7th/cmp-path', dependencies = 'nvim-cmp' },
		{ 'JosefLitos/cmp-calc', dependencies = 'nvim-cmp' },
	},
}

seems quite quirky, not even sure if that works.

If you load nvim-cmp for example on event = "InsertEnter", then all the dependencies of nvim-cmp will also be loaded on that event just before nvim-cmp.

exactly, and that is my issue, because they are the ones requiring cmp, not the other way around, but because lazy doesn't have after, like packer does, it is impossible to express that.

You asked how to lazy load cmp sources.  There's no need to complicate things. It has also been asked in the past and this is the maintainer's answer to that request.

I suppose the name of the issue isn't really fitting to the actual issue, yes.
Initially I created this because (as described) sources would try to load before cmp was fully loaded, leading to:
Error ... InsertEnter autocmd for "*":
Error executing lua callback: ...l/share/nvim/lazy/cmp-nvim-lsp/lua/cmp_nvim_lsp/init.lua:102: loop or p
revious error loading module 'cmp'
stack traceback:
        [C]: in function 'require'
        ...l/share/nvim/lazy/cmp-nvim-lsp/lua/cmp_nvim_lsp/init.lua:102: in function <...l/share/nvim/la
zy/cmp-nvim-lsp/lua/cmp_nvim_lsp/init.lua:101>

I managed to solve that issue though, so the only question I had left was why can the sources load cmp immediately after/plugin/<themselves>.lua if they are loaded before cmp. My only guess is that the files of all are added first and only after they get actually loaded (pack.add, call config...).

@litoj, how did you solve this? I have encountered a similar problem where I need to read sources from CMP, but if the CMP is lazy-loaded with "InsertEnter" or any other event, the first thing that is loaded is the default config without sources, so it basically doesn't load user sources at first.

@Jezda1337 IIRC the issue was caused by my plugin that was registering as a module preloader for cmp. But the preloading functions must return the loaded plugin anyway, so I loaded it using the default loaders. However they do not load anything if it thinks something has already been loaded. The solution for me was to clear the loaded module cache for cmp and then load it: https://github.com/litoj/nerdcontrast.nvim/commit/0715f22c20e0f20ee3d51cc6a9043193976354b2#diff-4286852b62af817b68b6dda70c12e66f922df9f5d3e7f18fff53820ba66d5c51L162-R164


Set channels to run a command along with message

On my server, we have a plugin that allows all staff members to chat. To send a message to the staff channel, you have to run /a . We should be able to set a command to run before sending the message, so you can easily use features like this.

It would be a better idea to run a command when a tab is opened. e.g. /ch a
In the meantime, you should see if the plugin supports quick messaging. /ch qm a
These commands are from herochat.

It's already possible to do this (at least with the version for 1.10.2), you just change the message prefix for an existing channel. I have a similar feature on my server (Staff Chat) that uses /sc <message>. It's possible to enable staff chat and send all messages in there when I leave out the message portion of the command, but this works just fine since it's really easy to type directly into the staff chat tab I have configured. It's important to note that you'd need to set this up as a tab with "PM" enabled, so you can change the command prefix.


Documentation outdated

Heya,
I've tried neogma today following the examples on README and docs, and couldn't get it to work.
For example await Users.createOne({...}) from the example wont accept the object as first param:
Argument of type '{ id: string; name: string; age: number; }' is not assignable to parameter of type 'CreateDataI<Neo4jSupportedProperties, Object>'.
  Types of property 'constructor' are incompatible.
    Type 'Function' has no properties in common with type 'RelationshipTypePropertyForCreateI<unknown, unknown>'.ts(2345)

Main page also suggest neogma.getDriver().close() which doesnt exist anymore.
I couldn't find any working code in the docs to get started, but it seems that the repo is active, am I missing something?

Hey there,
I'm a bit busy these days, but reading the error message maybe you haven't defined the appropriate types?
Following the docs, you are following the Typescript tab, right?

Thanks about the close note, I'll take a look.

Ahh I see, I was missing the generics setup, makes sense.
I was on the javascript tab, had a feeling I'm missing something :)

Yeah this isn't the first time it happens. I should put the Typescript tab first!


PLAT-50331: Add voice control feature

VoiceControl: communicate to voice framework
VoiceControlDecorator: add voice control feature to legacy component
Enact-DCO-1.0-Signed-off-by: Changgi Lee<EMAIL_ADDRESS>Issue Resolved / Feature Added
Resolution
Additional Considerations
Links
Comments

Closing out as jira associated with this is closed.


feat(QTREES-337): New branding

This PR adds the new Logo to the interface.

:tada: This PR is included in version 1.0.0-staging.1 :tada:
The release is available on GitHub release
Your semantic-release bot :package::rocket:


feat(rules): implements "date_after_node" rule

Hi, everyone
This PR introduce a new validation to be used with date fields.
The proposal is be able to use validation="date_after_node:someOtherNode" in the rules, I faced a problem with it recently and this inspired me to bring a solution that could be used by everyone

Great! thank you


Plugin is not Registered

Hi, in Nornir 3.0.0 some plugins must be registered in order to be used. https://nornir.readthedocs.io/en/3.0.0/plugins/index.html
So I have excpetion while running simple get_prompt:
In [109]: print(prompt_result["nord-pre-lf1"].result) Traceback (most recent call last):   File "/usr/local/lib/python3.8/site-packages/nornir/core/task.py", line 98, in start     r = self.task(self, **self.params)   File "/home/ubuntu/PycharmProjects/tscrapli/venv/lib/python3.8/site-packages/nornir_scrapli/tasks/get_prompt.py", line 19, in get_prompt     scrapli_conn = task.host.get_connection("scrapli", task.nornir.config)   File "/usr/local/lib/python3.8/site-packages/nornir/core/inventory.py", line 440, in get_connection     self.open_connection(   File "/usr/local/lib/python3.8/site-packages/nornir/core/inventory.py", line 481, in open_connection     plugin = ConnectionPluginRegister.get_plugin(conn_name)   File "/usr/local/lib/python3.8/site-packages/nornir/core/plugins/register.py", line 75, in get_plugin     raise PluginNotRegistered(f"plugin {name!r} is not registered") nornir.core.exceptions.PluginNotRegistered: plugin 'scrapli' is not registered
Installed modules in my environment:
nornir==3.0.0
nornir-napalm==0.1.1
nornir-netbox==0.1.1
scrapli==2021.1.30
nornir-scrapli==2021.1.30
scrapli-netconf==2021.1.30
I collect my inventory by NetBoxInventory2 (nornir_netbox) and set credentials by transform_function. How should I define the ConnectionOptions for scrapli/scrapli_netconf to be used by nornir?

The examples dir contains working examples to use (for both "regular" ssh and netconf) you can find them here.
Out of an abundance of caution I retested the examples just now and they work as expected, so I'm going to close this as it is almost certainly not a bug.
If you do find a bug feel free to re-open, but please use discussions (preferred. here) or slack for general questions. If you do open a discussion/slack comment we will need more information (inventory files, and a minimum reproducible example) in order to see see what's going on. Thanks!
Carl

Thank you for your feedback! I hope your documentation will get a little bigger over time. Nice work!


Updating Animated text

Description
Largely refactor Animated text so it looks better and fit our needs!

Thanks @philipperolet !


multiple RTMPMuxer issues

I created multiple RTMPMuxer objects, open different url, but only the last RTMPMuxer object will be normal broadcaster. why?

This issues is fixed in latest version. Closing this issue. Please re-open it if you are still having this problem.


[Request] --playlist-site-order

Feature request to add a boolean command-line switch --playlist-site-order (or other preferred name, such as perhaps --playlist-forward for symmetry with --playlist-reverse) which would explicitly restore the default YoutubeDL behavior of downloading videos in sequential order, i.e., the unmodified order as reported by the provider.
This would allow the user to restore the default behavior in specific cases where the --playlist-reverse or --playlist-random switch is specified in a lower-priority configuration location. In other words, to override those options if specified elsewhere.

I'm not sure what the merit of downloading videos in random order would be,
but I can see a good argument for downloading in reverse order.
Sometimes Youtube playlists are created in reverse order for some reason, so downloading in reverse would rectify that mistake and allow end users to download in the 'correct' order as it were (thus allowing the user to watch videos while the rest download).
I'd like to add that the more complex approach of --download-order <order> is also more flexible in that it allows new orders to be introduced with relative ease, and is perhaps easier to script.
Perhaps it would be best to support --download-order, but to start with only support default, forward and reverse, thus allowing other modes to be considered as part of a separate future issue.


Add "try" in the code samples

Add try mark to .code-samples.meilisearch.yml where it's needed:
example:
let client = MeiliSearch(host: "http://localhost:7700", apiKey: "apiKey")

new:
let client = try MeiliSearch(host: "http://localhost:7700", apiKey: "apiKey")

because the MeiliSearch constructor can throw an error if the host is invalid.

Hi.  I would like to work on this.  If I'm understanding correctly, you would like try added wherever there is a connection attempt within the .yml file?

Yes, @mgregoire254
The MeiliSearch() constructor can throw errors if there is some error, and in the .code-samples.meilisearch.yml, we have multiple places where the try keyword is missing. The idea is really simple just the keyword should solve the issue :)


[Table] TableRowColumn not handling long text well

Problem description
0.15.4

0.16

Steps to reproduce
Provide a very long text to <TableRowColumn />: http://www.webpackbin.com/VkzfhMPRW
Seems to have been introduced by https://github.com/callemall/material-ui/commit/252449d48007e1abe9f043166b0c9121fe25065c.
Versions

Material-UI: 0.16.0
React: 15.3.2
Browser: Chrome 53.0.2785.143 (64-bit)

If we remove the whiteSpace: nowrap, it will allow multiple lines, any idea on how we can fix this, @oliviertassinari ?

I'm fine with reverting 252449d48007e1abe9f043166b0c9121fe25065c. The Tooltip should most likely be render outside of the current DOM hierarchy.

I wish that multiline was an option, not the default perse, but to give a TableRow the multiLine option like a TextField, so that the whole row will be as high as the highest row, i.e. to add whiteSpace: 'normal' to it, but also add an extra padding (about 12px?), because it doesn't look good without it.


feat: update err-check cond, add method for create unstructured resou…

What type of PR is this?
/kind feature

What this PR does / why we need it:

add api for create unstructured object
opt error check for delete  unstructured object, notfound error for delete scenario is expected, not really an error.
corresponding api invoke in the ui
Which issue(s) this PR fixes:
Fixes #

Special notes for your reviewer:
Does this PR introduce a user-facing change?:

NONE

/assign @RainbowMango @samzong


Installation strategies

Make cli tool available for installation via both Pypi and Homebrew.

@njgheorghita Do you have any thoughts about also publishing a docker image of this? Solidity, Vyper and Geth all do this and it's made them pretty straightforward to consume in the JS build pipeline tools.
Happy to look into this and open a PR here if it's something you think worth doing...

@cgewecke Yup, that's a great thought, thanks. A pr would be great, but you might want to wait until some kind of stable alpha is released? Which should hopefully be in the very near future.

@njgheorghita Yes sounds good!

Hijacking this issue to update that we should also have a distribution via apt for linux users.


Add permission of pos file

link from https://github.com/reevoo/fluent-plugin-systemd/issues/29

Nice thanks


[Feature] Select where the extra fee is taken from when doing an RBF

There are privacy and convenience reasons,
Take from change
Take from recipient, (when pay to many take evenly per output)
Add another UTXO
Privacy benefits because the standard heuristic is to take from change.
Convenient because sometime it's the recipient who's willing to pay extra to get it faster.

Good suggestion.
Taking from change is a sensible default - this is normally the intention.
It is a good suggestion to be able to subtract fee from the address funds are being sent to, and split this fee if sending a batch.
I am not clear why you would ever add another output

FYI, a common use case for taking from amount is when a market taker buys bitcoin OTC, The fees are paid by them, so would be the RBF


NameError

I'm trying to run the code from the website, but I keep getting this error:
mymidi.add_track(midinotes)
NameError: name 'midinotes' is not defined

Hmm, this ticket has been open for a long time and I apologize for the delay. I cannot replicate this error using the example code in the readme, which works fine for me:
from miditime.miditime import MIDITime

# Instantiate the class with a tempo (120bpm is the default) and an output file destination.
mymidi = MIDITime(120, 'myfile.mid')

# Create a list of notes. Each note is a list: [time, pitch, velocity, duration]
midinotes = [
    [0, 60, 127, 3],  #At 0 beats (the start), Middle C with velocity 127, for 3 beats
    [10, 61, 127, 4]  #At 10 beats (12 seconds from start), C#5 with velocity 127, for 4 beats
]

# Add a track with those notes
mymidi.add_track(midinotes)

# Output the .mid file
mymidi.save_midi()

Please let me know if this is still an issue.


Invoke gas estimate does not work if I use AccountInterface object received from get-starknet

Describe the bug
If I create Account object using private key invoke gas estimate works fine without any issues, but if I try to use account object (AccountInterface) received from get-starknet, it fails.
To Reproduce
Connect wallet using get-starknet.
Try to estimate invoke gas estimate.
It fails with error:
Jy: Execution was reverted; failure reason: [0x496e70757420746f6f2073686f727420666f7220617267756d656e7473

Expected behavior
Invoke gas estimate should be returned for speicified calls array.
Screenshots
N/A
Desktop (please complete the following information):

Browser & version: Chrome Version 119.0.6045.159 (Official Build) (64-bit)
Node version: v16.17.0
Starknet.js: 5.19.5
Network: mainnet

Additional context
I tried to use latest version of Starknet.js as well (pre-release) and it still fails.

I also tried just now to create new Account object using signer instead of private key, and this is the error I get:
LibraryError: RPC: starknet_estimateFee with params {"request":[{"type":"INVOKE","sender_address":"0x5295882956890bb9c05e54c1e7efa903a4a21083ebd6a3c175507f74e549574","calldata":["0x2","0xda114221cb83fa859dbdb4c44beeaa0bb37c7537ad5ae66fe5e0efd20e6eb3","0x219209e083275171774dab1df80982e9df2096516f06319c5c6d71ae0a8480c","0x3","0x5c4676bcb21454659479b3cd0129884d914df9c9b922c1c649696d2e058d70","0xde0b6b3a7640000","0x0","0x5c4676bcb21454659479b3cd0129884d914df9c9b922c1c649696d2e058d70","0x2f0b3c5710379609eb5495f1ecd348cb28167711b73609fe565a72734550354","0x3","0x5295882956890bb9c05e54c1e7efa903a4a21083ebd6a3c175507f74e549574","0xde0b6b3a7640000","0x0"],"version":"0x100000000000000000000000000000001","signature":["0x4a556e7b2738022a03c18d9795214adaa4ce2e81943842b2baf8133e37dc469","0x320510cb1df7dbd45708582a19b7d9bdc2a9434b6161842c29ae6798f34cc3b"],"nonce":"0x47","max_fee":"0x0"}],"block_id":"pending"}
 -32603: Internal error: {"error":"Internal error: Execution failed. Failure reason: \"argent/invalid-owner-sig\"."}

More info, I just noticed that account.signer.pk is different after every page refresh when using ArgentX, and it's always 0x0 when using bravoos, I guess that's why I get argent/invalid-owner-sig error when trying to use signer.

hello!
Without checking too much, this could be a problem with the get-starknet library itself

Yeah, Starknet.js works when I use private key, but window.starknet_argentX.account does not work. So it seems it's extension problem. I'm speaking with ArgentX team, will post update here if we manage to resolve the issue.

can you try to skip the validation with the window object?
As an alternative, I think you should load your own rpc provider to do these requests, see wallet/provider split, like in viem
https://viem.sh/docs/faq.html#why-doesn-t-wallet-client-support-public-actions

How can I skip validation?

Even if I use 'skipValidate' it still fails with error "argent/invalid-owner-sig\"

I can see that event if i use account.estimateInvokeFee, under the hood, it uses RPC to estimate the fee, but it needs to pass signature to estimate, so that's why it needs account.
    const response = await super.getInvokeEstimateFee(
      { ...invocation },
      { version, nonce },
      blockIdentifier,
      skipValidate
    );

As I said you should split between publicClient (read) and walletClient (write)
If you dont want to do that, you should be able to estimate with the walletClient too, by using skipValidate. I remember RPC may not support that flag yet, or just supports it on simulate or sth. Please check the code

Yeah, you are right, it seems because starknet.js uses RPC under the hood to send estimate request, and RPC does not support skipValidate, this flag is not passed. And sequencer is getting deprecated for public reads starting december, so I can't use it.

I think this will be possible with RPC v0.5, when all node operators support it (I'm not sure which ones do currently tbh, have to check). Your version of sn.js (the latest official - 5.19.5) still works with rpc 0.4... The next official release will work with v0.5!

It works with sequencer provider + validate flag. Hopefully RPC v0.5 gets supported before starknet deprecates sequencer.

yes yes, that is the point of RPC v0.5, to reach feature parity with the sequencer

Thanks for the help guys, I will close the ticket now.


AKCallbackInstrument more usable

Changed callbacks into callback? :

an array is unnecessary and less efficient.
make it optional avoid some tricky things (egg-and-chicken dilemma
with callback definition and instrument init)

Hi !
please just change line 24:
public init(callback: AKMIDICallback? = nil) {
(forgot to do it before pull request)

Your commit with the fix is already in the PR. ;)


Sort out dataVersion in ConcreteDataAttributePath

I assume this was the result of discussion with @mrjerryjohns but I am not sure this makes sense.  ConcreteDataAttributePath is used for both writes and read responses.  And while a read response always has a data version (except not, if there is an error!), a write might not.  And we don't have provisions for indicating "no data version" here.
Are we just ignoring this member (but still paying its cost) in the write code?  That's a little confusing, and why are we passing the data version in the path for reads and out-of-band for writes (but still have this thing in the path for writes)?
Not going to block the PR on this, but please make sure a followup is filed to fix this.  Maybe we need to have separate path representations for read responses and writes (e.g. the one for read responses could inherit from ConcreteDataAttributePath) but also include a dataversion.
Or maybe this should in fact be an Optional, since for reads this value may not be available either?  And then we should just use it from the path in the write case?
Originally posted by @bzbarsky-apple in https://github.com/project-chip/connectedhomeip/pull/14711#discussion_r803315602

https://github.com/project-chip/connectedhomeip/pull/16602#discussion_r839160650, prefer having have a ConcreteDataWriteAttributePath (optional dataversion) and a ConcreteDataReadAttributePath (non-optional data version).


crowdstrike bypasses latest program reporting

Hello, the attacker used a new technique to bypass CrowdStrike, as customers and users hope to update the generic countermeasures as soon as possible to stop his bypass!
https://github.com/helviojunior/hookchain

This isn't the place to report these kind of issues. Please reach out to<EMAIL_ADDRESS>


Narrow the focus of sonarqube quality analysis

What happened:

Right now, the sonarqube quality gate is determined based on analysis against all python source code in the repo
This needs to be narrowed down to the functionality specific code while excluding (custom/modified) dependencies

What you expected to happen:
How to reproduce it (as minimally and precisely as possible):
Anything else we need to know?:

Fixed by #1090


Dynamic styling example in docs (still) doesn't work

Hi! Sorry in advance if you find this confusing, my first ever issue on platform.
I came across your project from this dicussion and i love Stitches but sadly they're no longer maintained.
So, i don't find this issue #36 (this one to be specific) as a solved issue. Because you state that style={assignInlineVars({ [colorVar]: val })} was exported in v1.2.0. But still can't find that in import option and so the dynamic docs is still broken to me.
Maybe you have some tutorial or example for the usage of createVar() in action? or updated docs for this case. That would be great! Thanks!

Hey! Sorry, just saw this. This is exported by macaron from @macaron-css/core/dynamic entrypoint (https://github.com/macaron-css/macaron/blob/main/packages/core/src/dynamic.ts). Can you try using this?

Hello! Sorry just check in.
Sweet, it worked beautifully, thanks!


provisioning does not find correct mong-php-driver

vagrant up shws the following message:
==> default: TASK: [phpmongo | Download php_mongo] *****************************************
==> default: failed: [vagrant] => {"changed": true, "cmd": "wget https://github.com/mongodb/mongo-php-driver/archive/1.5.2.tar.gz", "delta": "0:00:00.947712", "end": "2016-04-16 11:33:05.273539", "rc": 8, "start": "2016-04-16 11:33:04.325827"}
==> default: stderr: --2016-04-16 11:33:04--  https://github.com/mongodb/mongo-php-driver/archive/1.5.2.tar.gz
==> default: Resolving github.com (github.com)... <IP_ADDRESS>
==> default: Connecting to github.com (github.com)|<IP_ADDRESS>|:443... connected.
==> default: HTTP request sent, awaiting response... 302 Found
==> default: Location: https://codeload.github.com/mongodb/mongo-php-driver/tar.gz/1.5.2 [following]
==> default: --2016-04-16 11:33:04--  https://codeload.github.com/mongodb/mongo-php-driver/tar.gz/1.5.2
==> default: Resolving codeload.github.com (codeload.github.com)... <IP_ADDRESS>
==> default: Connecting to codeload.github.com (codeload.github.com)|<IP_ADDRESS>|:443... connected.
==> default: HTTP request sent, awaiting response... 404 Not Found
==> default: 2016-04-16 11:33:05 ERROR 404: Not Found.
==> default:
==> default: FATAL: all hosts have already failed -- aborting
==> default:
==> default: PLAY RECAP ********************************************************************
==> default:            to retry, use: --limit @/root/main.retry
==> default:
==> default: vagrant                    : ok=47   changed=17   unreachable=0    failed=1
The SSH command responded with a non-zero exit status. Vagrant
assumes that this means the command failed. The output for this command
should be in the log above. Please read the output to determine what
went wrong.

it seems to me as if the correct mongo-php-driver is not found. Any suggestions how to solve the problem?

Try to change 1.5.2 to 1.1.6
here https://github.com/iJackUA/try-yii2/blob/master/provisioning%2Froles%2Fphpmongo%2Fvars%2Fmain.yml#L1


Throw errors instead of silently failing

In progress

Does the response have a status code by any chance?

Updated to use error codes

:+1:
—
Bradley Priest
On Tue, Sep 29, 2015 at 12:35 PM, tradeweeyoung<EMAIL_ADDRESS>wrote:

Updated to use error codes
Reply to this email directly or view it on GitHub:
https://github.com/lcpriest/bigcommerce_api/pull/3#issuecomment-143941768

LGTM, Merge now

Can we please cleanup the whitespace in this file, it's all over the place