Instruction pdfs are in French

The only datasheets/pdfs that are in English are the ones in bags. Almost every pdf that loads onto the table is in French, is there a way to fix that in the options somewhere?

Well, that's amusing. They're in English for me - I guess there must be some cleverness on the WarCom site that redirects the link to the version in "your" language based on where it understands you to be.
There's a tablet on the table - try navigating to https://www.warhammer-community.com/warhammer-40000-downloads/ on the tablet and changing the download language to English, then reloading the table.

Interesting! I'm having some trouble finding the tablet on the table, is
there a way to search for it?
I was under the impression that since the pdfs are listed as "custom pdf"
when you open them in the scripting editor they were just pics of the
French-language version of the documents.
I suppose it's also possible that these Combat Patrol mods from the Steam
Workshop I'm using are just using your base as an overlay for their own
thing, assuming you're not the listed poster of these mods ("Tera_Pudding"
is the UID in the Workshop).
Just in case it helps/adds clarity, here's a screenshot of what I'm seeing
on the table when the mod loads:
[image: image.png]
On Mon, Nov 20, 2023 at 9:10 AM Chris Paterson @.***>
wrote:

Well, that's amusing. They're in English for me - I guess there must be
some cleverness on the WarCom site that redirects the link to the version
in "your" language based on where it understands you to be.
There's a tablet on the table - try navigating to
https://www.warhammer-community.com/warhammer-40000-downloads/ on the
tablet and changing the download language to English, then reloading the
table.
—
Reply to this email directly, view it on GitHub
https://github.com/ThePants999/tts-comp-ftc-base-lua-scripts/issues/29#issuecomment-1819133156,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/BEEFIPWTF4TFI6NAO2WALA3YFNQETAVCNFSM6AAAAAA7S7CM22VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMJZGEZTGMJVGY
.
You are receiving this because you authored the thread.Message ID:
@.***
com>

If you're not seeing the tablet, it's likely that whatever you're using has diverged enough from this mod that I'll be unable to help and you'll need to engage the author of the actual mod you're using. Unfortunately, your screenshot didn't upload so I can't confirm, perhaps you could try again via GitHub rather than email?

Found Tera_Pudding's mods - I don't think they have anything to do with mine at all, I'm afraid.


Feature/adv search page in selection session

Checklist

[x] the [contributor license agreement][] is signed
[x] commit message follows [commit guidelines][]
[x] tests are included
[x] screenshots are included showing significant UI changes
[ ] documentation is changed or added

Description of change
This PR adds the support for displaying the new Advanced search page in Selection Session.
There is one line change on server. But on client, the major changes are

Update how to build a link to access an Advanced search in Selection Session;
Update how to exit Advanced search mode in Selection Session;
How to support external MIME types.

I have also tested scripting and Wizard controls in Selection Session and they all work nicely.
https://user-images.githubusercontent.com/47203811/145311985-5208a3e0-05d9-4177-afe5-7b7e161d93d1.mp4

Wow, still flaking onBulkMetadataEditTest sometimes @edalex-yinzi .
But for this PR, let's merge. :grin:


Heartbeat Pong Message (why not Ping?)

Hello,
I am curious why in Heartbeat context manager  you send PongControlMessage ?
https://github.com/Lawouach/WebSocket-for-Python/blob/master/ws4py/websocket.py#L55
for me more logically to send PingControlMessage ?
Thanks in advance!

I think I ought to implement a "pinged()" handler indeed.

Hi,
We're using ws4py and need finer grained control over ping/pong handling. We really could use a 'pong_received' event handler and a method to manually trigger the sending of a ping message. This, in addition to regular periodic ping requests being automatically generated by ws4py.
that is, we need to know when the remote end has responded to our ping request, to manually initiate a ping request and to have a regular ping request sent.
bonus if we also could have a ping_received event as well.
thanks


No events on versions 1.2.x

Hello, thanks for great plugin, really love it.
I have a problem after upgrading to newer versions of the package.
I have N48PAW (V4.71.000) NVR from Annke (Hikvision OEM), everything was working fine until version 1.1.22.
After upgrading, there is no event fired ever. Node Camera or Camera RAW is in the "Waiting for event" but nothing happens.

I think in previous version I saw "heartbeat message' which never occurs in 1.2.5.
Enabling debug mode in config does not provide any additional information, just no entries in debug window.
I have node red 3.1.0.
Any tips what I can check would be helpful :)

Hi
if you haven't rebooted, try rebooting.
Also please enable debug log and append it here. It could be helpful anyway.
If you need, you can downgrade to the previous working version again, by cd into your .node-red folder and issue this command: npm install<EMAIL_ADDRESS>

Hi,
Rebooted, but nothing happened.
I enabled debug, but nothing in the debug window:

I know how to downgrade, but wanted to try new version if possible. Maybe node red version is too old?

The log is not that in the right window.
From a command prompt, type node-red-log -n 1000
I need this log.

Below is the log:
`Started Node-RED graphical event wiring tool.
13 May 12:37:25 - [info]
Welcome to Node-RED
13 May 12:37:25 - [info] Node-RED version: v3.1.0
13 May 12:37:25 - [info] Node.js  version: v20.8.1
13 May 12:37:25 - [info] Linux 6.1.21-v7+ arm LE
29 Dec 17:45:15 - [info] Loading palette nodes
29 Dec 17:45:31 - [info] Settings file  : /root/.node-red/settings.js
29 Dec 17:45:31 - [info] Context store  : 'default' [module=memory]
29 Dec 17:45:31 - [info] User directory : /root/.node-red
29 Dec 17:45:31 - [warn] Projects disabled : editorTheme.projects.enabled=false
29 Dec 17:45:31 - [info] Flows file     : /root/.node-red/flows.json
29 Dec 17:45:31 - [warn]
Your flow credentials file is encrypted using a system-generated key.
If the system-generated key is lost for any reason, your credentials
file will not be recoverable, you will have to delete it and re-enter
your credentials.
You should set your own key using the 'credentialSecret' option in
your settings file. Node-RED will then re-encrypt your credentials
file using your chosen key the next time you deploy a change.
29 Dec 17:45:31 - [info] Server now running at http://<IP_ADDRESS>:1880/
29 Dec 17:45:31 - [info] Starting flows
6af28779409df856
mqtt://localhost:1883
Topic: ampio/from/C28F/state/a/2
29 Dec 17:45:33 - [info] Started flows
29 Dec 17:45:33 - [info] [mqtt-broker:a76601b9fe861e63] Connected to broker: mqtt://<IP_ADDRESS>:1883
29 Dec 17:45:34 - [info] [ampioconfig:6af28779409df856] Ampio Node instance connected to MQTT on: mqtt://localhost:1883 with client id: AmpioNode_5a26429e.f8232c
set temperature = 24
set power = off
set setfanspeed = 0
set temperature = 25
set power = off
set setfanspeed = 0
set temperature = 26
set power = off
set setfanspeed = 0
set temperature = 25
set power = off
set setfanspeed = 0
29 Dec 17:45:34 - [error] [esphome-out:Rekuperacja poziom] Entity<PHONE_NUMBER>) not found on device
set temperature = 25
set power = off
set setfanspeed = 0
set temperature = 24
set power = off
set setfanspeed = 0
set temperature = 26
set power = off
set setfanspeed = 0
set temperature = 25
set power = off
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
29 Dec 17:47:53 - [info] Stopping flows
29 Dec 17:47:53 - [info] [ampioconfig:6af28779409df856] ! Ampio Node instance disconnected from MQTT on: mqtt://localhost:1883 with client id: AmpioNode_5a26429e.f8232c
29 Dec 17:47:53 - [info] [mqtt-broker:a76601b9fe861e63] Disconnected from broker: mqtt://<IP_ADDRESS>:1883
29 Dec 17:47:55 - [info] Stopped flows
29 Dec 17:47:55 - [info] Updated flows
29 Dec 17:47:55 - [info] Starting flows
6af28779409df856
mqtt://localhost:1883
Topic: ampio/from/C28F/state/a/2
29 Dec 17:47:55 - [info] Started flows
29 Dec 17:47:55 - [info] [mqtt-broker:a76601b9fe861e63] Connected to broker: mqtt://<IP_ADDRESS>:1883
29 Dec 17:47:56 - [info] [ampioconfig:6af28779409df856] Ampio Node instance connected to MQTT on: mqtt://localhost:1883 with client id: AmpioNode_abe22298.3323b
29 Dec 17:47:56 - [error] [esphome-out:Rekuperacja poziom] Entity<PHONE_NUMBER>) not found on device
set setfanspeed = 0
set setfanspeed = 0
set temperature = 24
set power = off
set setfanspeed = 0
set temperature = 25
set power = off
set setfanspeed = 0
set temperature = 25
set power = off
set setfanspeed = 0
set temperature = 26
set power = off
set setfanspeed = 0
set temperature = 25
set power = off
set setfanspeed = 0
set temperature = 26
set power = off
set setfanspeed = 0
/ampio/6af28779409df856/devices/list
null
/ampio/6af28779409df856/devices/list
null
Get descriptions
Error loading descriptions data from MSERV.
29 Dec 17:48:27 - [info] Stopping flows
29 Dec 17:48:28 - [info] [ampioconfig:6af28779409df856] ! Ampio Node instance disconnected from MQTT on: mqtt://localhost:1883 with client id: AmpioNode_abe22298.3323b
29 Dec 17:48:28 - [info] [mqtt-broker:a76601b9fe861e63] Disconnected from broker: mqtt://<IP_ADDRESS>:1883
29 Dec 17:48:29 - [info] Stopped flows
29 Dec 17:48:29 - [info] Updated flows
29 Dec 17:48:30 - [info] Starting flows
6af28779409df856
mqtt://localhost:1883
29 Dec 17:48:30 - [info] Started flows
29 Dec 17:48:30 - [info] [mqtt-broker:a76601b9fe861e63] Connected to broker: mqtt://<IP_ADDRESS>:1883
29 Dec 17:48:31 - [error] [esphome-out:Rekuperacja poziom] Entity<PHONE_NUMBER>) not found on device
set temperature = 26
set power = off
set setfanspeed = 0
set temperature = 25
set power = off
set setfanspeed = 0
set temperature = 24
set power = off
set setfanspeed = 0
set temperature = 25
set power = off
set setfanspeed = 0
set temperature = 24
set power = off
set setfanspeed = 0
set temperature = 25
set power = off
set setfanspeed = 0
set temperature = 26
set power = off
set setfanspeed = 0
set temperature = 25
set power = off
set setfanspeed = 0
29 Dec 17:48:45 - [info] Stopping flows
29 Dec 17:48:45 - [info] [mqtt-broker:a76601b9fe861e63] Disconnected from broker: mqtt://<IP_ADDRESS>:1883
29 Dec 17:48:47 - [info] Stopped flows
29 Dec 17:48:47 - [info] Updated flows
29 Dec 17:48:47 - [info] Starting flows
6af28779409df856
mqtt://localhost:1883
29 Dec 17:48:47 - [info] Started flows
29 Dec 17:48:48 - [info] [mqtt-broker:a76601b9fe861e63] Connected to broker: mqtt://<IP_ADDRESS>:1883
29 Dec 17:48:48 - [error] [esphome-out:Rekuperacja poziom] Entity<PHONE_NUMBER>) not found on device
set temperature = 26
set power = off
set setfanspeed = 0
set temperature = 24
set power = off
set setfanspeed = 0
set temperature = 25
set power = off
set setfanspeed = 0
set temperature = 25
set power = off
set setfanspeed = 0
set temperature = 25
set power = off
set setfanspeed = 0
set temperature = 24
set power = off
set setfanspeed = 0
set temperature = 26
set power = off
set setfanspeed = 0
set temperature = 25
set power = off
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
set setfanspeed = 0
`
Also adding screenshot for config node:

There is absolutely no log at all. There must be something wrong.
Revert back to older version. Yet i’ve no time to investigate, sorry!


C# implementation

Do you have any schedule for C# interface?
If it does not publish in this month, could u please guide us through implementing our own C# interface?

I wrote a sample code in this commit, But I don't know it works fine in this way or not!

C# binding (will be released soon)
When? Is there any schedule?

We currently testing it in different environments. It is likely to be released till the end of the month.

@levlam Will it be compatible with .NET Core 2.0?

@Anonymphous, No. .NET Core 2.0 lacks support of using native C++-code directly, so TDLib can be used there only as a shared library. TDLib JSON interface is perfectly suitable for that usage, but intermediate conversion to/from JSON will be required.

@levlam according to https://github.com/dotnet/docs/blob/master/docs/standard/native-interop.md dotnet core supports P/Invoke if I'm not wrong isn't that the way people write bindings?
can you please elaborate on this? I want to know is the possibility to use TDLib in Linux using C#?

@alizx it's probably about C++/CLI support: https://github.com/dotnet/coreclr/issues/659
@levlam Will it be compatible with Mono?

P/Invoke is a very convenient way to call С code from a shared library from C#, but this is not enough to be able to pass C++ and C# objects between C and C# code. We will provide C++/CLI / C++/CX interface which provides a way to communicate with TDLib using C# objects, which isn't supported in .NET Core.
But TDLib anyway can be used through P/Invoke without any additional interface. TDLib JSON interface is created exactly for this purpose.

@x2bool It looks like Mono also doesn't support C++/CLI unless it is used under Windows.

There's CppSharp which helps in interoperability between C# and C++ libraries. As an example, QtSharp (C#/.NET bindings for Qt) is implemented with CppSharp.

@hadi77ir We haven't tried it, but I doubt that it will be able to generate bindings which will be more convenient or more efficient than TDLib JSON interface. Nevertheless, it would be interesting to see what can be generated using CppSharp.

@levlam Most likely, so you say. But this will need to be checked.
One thing I can say for sure at this time: cppsharp does not start with a pleasant.
https://github.com/mono/CppSharp/blob/master/docs/GettingStarted.md

So we will not ably to use TDLib with .net core 2 anyway?

Preston can

@OleksiyMoroz You will not be able to use C++/CLI / C++/CX native TDLib interface with .Net Core, but you are able to use TDLib JSON interface.
It is also possible to generate converters between TDLib JSON objects and C# classes to simplify usage of JSON interface.

@levlam Thank you! Seems need to work with JSON wrapper

@OleksiyMoroz what is your use case?
I generated JSON API to C# bindings (.NET Standard 2.0) from this: https://github.com/tdlib/td/blob/master/td/generate/scheme/td_api.tl. I might consider opensourcing it if that would help anyone.

An interrupt was caused 😶
@levlam Thanks

@OleksiyMoroz Show please how to do it

@x2bool Do you have working examples usign JSON interface? Do you try to save media?

Here you go guys: https://github.com/x2bool/tdsharp

And where is the code? I was waiting for something grand, but it would also work.

@x2bool How did you manage to do that? Is it possible to convert field names to snake case?

Do you mean CamelCase, because fields are already in snake_case?

Sorry, you are right, I mean CamelCase, it is more convenient in C#

Sorry for the delay. C# native bindings have been released as part of TDLib 1.2.0 release. See README for build instructions and usage example.

Hi! Thanks for C# bindings. I opened an issue about .NET Core support since it is now an important platform for many developers. And also because of the fact that JSON serialization/deserialization creates significant overhead.


Optional argument is listed as mandatory

If an option has a default value and a transformation it is not listed as optional but as mandatory instead.
ArgumentParser version: 0.0.2
Swift version: Apple Swift version 5.1.3 (swiftlang-1100.0.282.1 clang-1<IP_ADDRESS>)
Target: x86_64-apple-darwin19.3.0
Checklist

[X] I've reproduced the issue using the master branch of this package
[X] I've searched for existing GitHub issues

Steps to Reproduce
import ArgumentParser
import Foundation

enum Mode {
    case mac
    case linux

    public static func mode(from: String) -> Mode? {
        switch from {
        case "mac":
            return .mac
        case "linux":
            return .linux
        default:
            return nil
        }
    }
}

struct Example: ParsableCommand {
    static let defaultMode: Mode = .mac
    static func toMode(_ string: String) throws -> Mode {
        Mode.mode(from: string)!
    }

    @Option(default: defaultMode, help: "Set mode, either linux or mac.",
            transform: toMode)
    var mode: Mode
}

Example.main()

Produces output:
USAGE: example --mode <mode>

OPTIONS:
  --mode <mode>           Set mode, either linux or mac.
  -h, --help              Show help information.

Program ended with exit code: 0

Expected behavior
I would expect the following USAGE line:
USAGE: example [--mode <mode>]

Actual behavior
I get:
USAGE: example --mode <mode>

@fappelman This issue is fixed. :+1:


Alert has an unrecognized area

System Health details
homeassistant    | 2024-09-15 11:28:43.516 ERROR (MainThread) [custom_components.oref_alert] Alert has an unrecognized area: מיני ישראל - נחשון
Checklist

[X] I have enabled debug logging for my installation.
[X] I have filled out the issue template to the best of my ability.
[X] This issue only contains 1 issue (if you have multiple issues, open one issue for each issue).
[X] This issue is not a duplicate issue of any previous issues..

Describe the issue
homeassistant    | 2024-09-15 11:28:43.516 ERROR (MainThread) [custom_components.oref_alert] Alert has an unrecognized area: מיני ישראל - נחשון
I leave near netanya
Reproduction steps

...
Debug logs
homeassistant    | 2024-09-15 11:28:43.516 ERROR (MainThread) [custom_components.oref_alert] Alert has an unrecognized area: מיני ישראל - נחשון

Diagnostics dump
No response

The log entry is correct since there is not such an area of "מיני ישראל - נחשון", yet Pikud HaOref reports and alert in this nonexistent area:

However, there was an issue of flooding the log with the same entry over and over again. v2.12.1 fixed that.

thanx

Is there a recommended way to deal with new/unknown areas? I see other apps have the data, but not sure the HFC is providing it? As an example: מלון פרא


Introduce list of datastores IDs for fallback download

This is an attempt to introduce a new field for the ContentTree message: ds_ids_list. This field will be used by the controller to list datastores, which can be used for fallback download if download from the main datastore has been failed.
A new field 'DatastoreIDList' is added to the following run-time structures:
   ContentTreeConfig
   ContentTreeStatus
   DownloaderConfig
   DownloaderStatus
   BlobStatus

so that eventually list of fallback datastores reaches the 'downloader', which tries to download from each datastore if an attempt to download from the main one has been failed.
It is worth to mention, that OCI registries in fallback datastores are not supported. The whole logic with async sha resolving gets complicated and for now it is left untouched.

Oops, I wanted to mark a file as reviewed, not the whole PR, sorry.

@rouming So far LGTM, no objections on your approach from my side.

It is worth to mention, that OCI registries in fallback datastores are not supported. The whole logic with async sha resolving gets complicated and for now it is left untouched.

Are OCI registries not supported at all, or is it the resolution of a tag to a sha which is not supported? (The image pulled from an OCI registry can include the complete sha256 string in which case there is no resolution.)

It is worth to mention, that OCI registries in fallback datastores are not supported. The whole logic with async sha resolving gets complicated and for now it is left untouched.

Are OCI registries not supported at all, or is it the resolution of a tag to a sha which is not supported? (The image pulled from an OCI registry can include the complete sha256 string in which case there is no resolution.)

The OCI registries are not supported at all if "fallback" datastores list is not empty.
The list of fallback datastores is handled at the bottom of the path, in the downloader, which gives us the freedom to fail-and-fallback synchronously in the loop. The "tag-resolving" logic is located in the middle of the download path, specifically in the doUpdateContentTree() function, so that each datastore in the list has to be resolved asynchronously, because we can't reach the downloader with unresolved tags in datastores. This asynchronous tag resolution for each datastore is not a big deal, but requires refactoring in the updatestatus.go,  the doUpdateContentTree() function. Since the whole approach of this fallback datastore list is a bit hacky, I tend to be conservative and keep myself away from useless refactoring, unless really needed. So yes, OCI registries are not supported.

Would it make sense to refactor the existing code to make it possible to fit in the oci SSD support?

Would it make sense to refactor the existing code to make it possible to fit in the oci support?
@eriknordmark
If I'm not mistaken, OCI support is not widely used, and since this fallback mechanism will be used only in the specific "air gap" environment (thus fallback datastores), it seems to me does not make a lot of sense to do that right now. Anyway the OCI support can be done in a separate patchset, not related to this work.

@rouming Can we please create separate PR for proto changes?

@rouming Can we please create separate PR for proto changes?

Sure, will do.

Difference to the previous version:

A couple of fixes noted by @giggsoff
The whole list of datastores instead of fallback list
'DatastoreIDsList' instead of 'DatastoreID' in all the internal structures
(see the following commit: https://github.com/lf-edge/eve/pull/2983/commits/133a5065fc06c743a7ed365aab7744519db2ffca, which explains why still refactoring should  be done in order not to be dependent on the first entry of the datastore list)

Difference to the previous version:

Code fixes according to the @giggsoff comments
Concatenate datastore list in a string in order to use for log objects modifications (only resolver still uses the first element from the datastore list)
s/DatastoreIDsList/DatastoreIDList/g

@rouming this developped some conflicts. Can you rebase it on current master (and look at the yetus complaints)?

Difference to the previous master:

Tested on the controller and fixed accordingly
Rebased on latest master

Difference to the previous version:

Tested on the controller and fixed accordingly
Rebased on latest master
Yetus fixes

Run eden

Eden, please, run, I beg you

magic does not work :(

I tried to be polite, Eden! I'm losing my patience

count to 10, come to your senses Eden, resistance is useless

Difference to the previous version:

Rebased on latest master, resolved conflicts in syncop.go


http://builds.dockyard.com/ 404

Hi,
My project is bower to install easyForm:
"ember-easyForm": "http://builds.dockyard.com.s3.amazonaws.com/ember-easyForm/canary/ember-easyForm.js"
But looks it has been removed?

What version?

Not sure about the version. The url that is 404 is in the README. Looks like the s3 bucket has been removed.

I managed to install it using npm. But you probably need to the README.

Closing in favor of #229


Schema list does not display

Hi,
Just upgraded to 5.1.4 and suddenly I can't view the list of schemas in the database navigator or database properties page. Reverting to 5.1.3 restores the expected schema list.
additional information:
database connection type: vertica
os: macOS High Sierra 10.13.6

Same for Win10.
Double checked my account using Tableau Desktop to confirm it wasn't an access issue on the source.

Same Win10, also vertica 8.1.1-18 client .

Thanks for bug report


Adding report template

Please verify that this bug has NOT been raised before.

[x] I checked and didn't find a similar issue

Describe the bug*
when trying to add a new stock location template I get server error 500
attached is the error report.
Steps to Reproduce

go to "/platform/settings/admin/reports"
click the + sign and fill the form
link to the html template you created
try to save

Expected behaviour
I want to add a new html with added features to the report options
Deployment Method

[x] Docker
[ ] Package
[ ] Bare metal
[ ] Other - added info in Steps to Reproduce

Version Information
Version Information:
InvenTree-Version: 0.16.4
Django Version: 4.2.15
Commit Hash: 83be1b8
Commit Date: 2024-09-30
Database: postgresql
Debug-Mode: False
Deployed using Docker: True
Platform: Linux-<IP_ADDRESS>-microsoft-standard-WSL2-x86_64-with
Installer: DOC
Active plugins: [{'name': 'InvenTreeBarcode', 'slug': 'inventreebarcode', 'version': '2.1.0'}, {'name': 'InvenTreeCoreNotificationsPlugin', 'slug': 'inventreecorenotificationsplugin', 'version': '1.0.0'}, {'name': 'InvenTreeCurrencyExchange', 'slug': 'inventreecurrencyexchange', 'version': '1.0.0'}, {'name': 'InvenTreeLabel', 'slug': 'inventreelabel', 'version': '1.1.0'}, {'name': 'InvenTreeLabelMachine', 'slug': 'inventreelabelmachine', 'version': '1.0.0'}, {'name': 'InvenTreeLabelSheet', 'slug': 'inventreelabelsheet', 'version': '1.0.0'}, {'name': 'DigiKeyPlugin', 'slug': 'digikeyplugin', 'version': '1.0.0'}, {'name': 'LCSCPlugin', 'slug': 'lcscplugin', 'version': '1.0.0'}, {'name': 'MouserPlugin', 'slug': 'mouserplugin', 'version': '1.0.0'}, {'name': 'TMEPlugin', 'slug': 'tmeplugin', 'version': '1.0.0'}]
Please verify if you can reproduce this bug on the demo site.

[ ] I can reproduce this bug on the demo site.

Relevant log output
Traceback (most recent call last):

File "/root/.local/lib/python3.11/site-packages/django/db/backends/utils.py", line 89, in _execute

return self.cursor.execute(sql, params)

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/root/.local/lib/python3.11/site-packages/psycopg/cursor.py", line 732, in execute

raise ex.with_traceback(None)

psycopg.errors.NotNullViolation: null value in column "attach_to_model" of relation "report_reporttemplate" violates not-null constraint

DETAIL: Failing row contains (11, {}, location report with name, report/report/inventree_report_location_names.html, location report with name, 2, A4, f, output.pdf, t, stocklocation, , null).

The above exception was the direct cause of the following exception:

Traceback (most recent call last):

File "/root/.local/lib/python3.11/site-packages/rest_framework/views.py", line 506, in dispatch

response = handler(request, *args, **kwargs)

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/root/.local/lib/python3.11/site-packages/rest_framework/generics.py", line 242, in post

return self.create(request, *args, **kwargs)

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/home/inventree/src/backend/InvenTree/InvenTree/mixins.py", line 22, in create

self.perform_create(serializer)

File "/root/.local/lib/python3.11/site-packages/rest_framework/mixins.py", line 24, in perform_create

serializer.save()

File "/home/inventree/src/backend/InvenTree/InvenTree/serializers.py", line 295, in save

super().save(**kwargs)

File "/root/.local/lib/python3.11/site-packages/rest_framework/serializers.py", line 212, in save

self.instance = self.create(validated_data)

^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/home/inventree/src/backend/InvenTree/InvenTree/serializers.py", line 309, in create

return super().create(initial_data)

^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/root/.local/lib/python3.11/site-packages/rest_framework/serializers.py", line 962, in create

instance = ModelClass._default_manager.create(**validated_data)

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/root/.local/lib/python3.11/site-packages/django/db/models/manager.py", line 87, in manager_method

return getattr(self.get_queryset(), name)(*args, **kwargs)

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/root/.local/lib/python3.11/site-packages/django/db/models/query.py", line 658, in create

obj.save(force_insert=True, using=self.db)

File "/home/inventree/src/backend/InvenTree/report/models.py", line 145, in save

super().save()

File "/home/inventree/src/backend/InvenTree/InvenTree/models.py", line 156, in save

super().save(*args, **kwargs)

File "/home/inventree/src/backend/InvenTree/InvenTree/models.py", line 119, in save

super().save(*args, **kwargs)

File "/root/.local/lib/python3.11/site-packages/django/db/models/base.py", line 814, in save

self.save_base(

File "/root/.local/lib/python3.11/site-packages/django/db/models/base.py", line 877, in save_base

updated = self._save_table(

^^^^^^^^^^^^^^^^^

File "/root/.local/lib/python3.11/site-packages/django/db/models/base.py", line 1020, in _save_table

results = self._do_insert(

^^^^^^^^^^^^^^^^

File "/root/.local/lib/python3.11/site-packages/django/db/models/base.py", line 1061, in _do_insert

return manager._insert(

^^^^^^^^^^^^^^^^

File "/root/.local/lib/python3.11/site-packages/django/db/models/manager.py", line 87, in manager_method

return getattr(self.get_queryset(), name)(*args, **kwargs)

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/root/.local/lib/python3.11/site-packages/django/db/models/query.py", line 1805, in _insert

return query.get_compiler(using=using).execute_sql(returning_fields)

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/root/.local/lib/python3.11/site-packages/django/db/models/sql/compiler.py", line 1822, in execute_sql

cursor.execute(sql, params)

File "/root/.local/lib/python3.11/site-packages/django/db/backends/utils.py", line 67, in execute

return self._execute_with_wrappers(

^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/root/.local/lib/python3.11/site-packages/django/db/backends/utils.py", line 80, in _execute_with_wrappers

return executor(sql, params, many, context)

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/root/.local/lib/python3.11/site-packages/django/db/backends/utils.py", line 84, in _execute

with self.db.wrap_database_errors:

File "/root/.local/lib/python3.11/site-packages/django/db/utils.py", line 91, in __exit__

raise dj_exc_value.with_traceback(traceback) from exc_value

File "/root/.local/lib/python3.11/site-packages/django/db/backends/utils.py", line 89, in _execute

return self.cursor.execute(sql, params)

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File "/root/.local/lib/python3.11/site-packages/psycopg/cursor.py", line 732, in execute

raise ex.with_traceback(None)

django.db.utils.IntegrityError: null value in column "attach_to_model" of relation "report_reporttemplate" violates not-null constraint

DETAIL: Failing row contains (11, {}, location report with name, report/report/inventree_report_location_names.html, location report with name, 2, A4, f, output.pdf, t, stocklocation, , null).

@hagai-biton thanks for the report. I am not able to reproduce this, but the error message seems to indicate that the database has not been correctly migrated after an update to InvenTree.
Can you please run the following command, and then test again:
docker compose run --rm inventree-server invoke update

(as per the documentation )

Hi Oliver. This solved my problem.
Thank you for the input.
On Sun, 6 Oct 2024 at 13:30, Oliver @.***> wrote:

@hagai-biton https://github.com/hagai-biton thanks for the report. I am
not able to reproduce this, but the error message seems to indicate that
the database has not been correctly migrated after an update to InvenTree.
Can you please run the following command, and then test again:
docker compose run --rm inventree-server invoke update
(as per the documentation
https://docs.inventree.org/en/stable/start/docker_install/#updating-inventree
)
—
Reply to this email directly, view it on GitHub
https://github.com/inventree/InvenTree/issues/8238#issuecomment-2395384513,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/A47DWBZOPWRKUHWPUZOMJU3Z2EGLLAVCNFSM6AAAAABPLZ27PCVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGOJVGM4DINJRGM
.
You are receiving this because you were mentioned.Message ID:
@.***>

--
תודה
חגי ביטון


Routines are not generic

We are currently limited to working with float arrays. Often we need to work with other native types such as int, long, double, etc. Can we make these routines generic?

Waiting for tools to support generics with arithmetic operations.  See this thread.


Let the app load its intents/slots/… from a file

Let the app load its intents/slots/… from a file and re-train Rhasspy on installation/startup of the app.
See https://github.com/rhasspy/rhasspy-hermes/issues/12

One thing to keep in mind with this, is that it should only retrain when there was a change (either to the files or some other settings like e.g. the language) and not on each restart, since training can take very long when a lot of sentences need to be generated.

Good point. So we should compare the locally defined intents and slots with the ones known/trained by Rhasspy then, and only trigger Rhasspy to re-train when they differ?

I think it would be hard to compare them to the trained ones, since this would require generating them aswell.
Reasons to retrain from the top of my head:

rhasspy settings change that require a retrain
skill files change
probably when the skill has a new version aswell, since following something like #13 e.g. the skill name might have changed

One more thing is that when skills retrain by sending their intents + slots we do want them to do this at the same time. It would be a complete mess when:

skill A sends the intents
-> rhasspy starts to retrain
skill B sends the intents
-> rhasspy has to retrain again

I am currently not sure how to implement this in an optimal way.


remove text about changing data

The text above the submit button to provide changes via email is confusing.
As a customer you are just signing up so asking for changes is just confusing. As well people expect a login area.
We can show this message when they login or send it to them in a confirmation message

As this text was a request by @Anna91lena lets discuss this here.


Move AnsibleTowerJobTemplateDialogService class to core from UI

We want to migrate Create service dialog from job template  to generic React component. There is a number of similar forms which are creating dialog based on specific entity(job template, orchestration template, ansible playbook, etc.) For all of these there are classes which will create the dialog structure based on the specific entity.
Most of these classes (we may find more of them as we go through the ui) are located in manageiq but for some reason AnsibleTowerJobTemplateDialogService is defined in ui-classic.
Here is an example:

for orchestration template in core: https://github.com/ManageIQ/manageiq/blob/33d994ae207105a508d9e214d39d9ec66ac066dd/app/models/dialog/orchestration_template_service_dialog.rb
for ansible job templates in ui classic: https://github.com/ManageIQ/manageiq-ui-classic/blob/master/app/services/ansible_tower_job_template_dialog_service.rb

We want to move the AnsibleTowerJobTemplateDialogService (and others if we find them in ui) code to manageiq to have it in one place.
Also we want to make the create_dialog method static as it is in others.
cc @martinpovolny @rvsia @gtanzillo

:+1:
Seeing all the other create_dialog methods, it seems that this one should live in core too. Especially if we want to access it through the API.

First phase of PRs:
Move from UI https://github.com/ManageIQ/manageiq-ui-classic/pull/5765
To core https://github.com/ManageIQ/manageiq/pull/18932

Second phase:
Edit the endpoint to make it generic https://github.com/ManageIQ/manageiq-api/pull/616
edit current orchestration form (https://github.com/ManageIQ/manageiq-ui-classic/pull/5627) to use that endpoint TBD
Third phase:
make the form generic and use it on jobTemplate page TBD

make form reusable https://github.com/ManageIQ/manageiq-ui-classic/pull/5842
use it on jobTemplate: TBD

ultimately it should probably live in the ansible tower plugin instead of core, but I think then we'd need to make all of services pluggable.

All PRs referencing this issue are merged and the issue is successfully solved. So I am closing this
@miq-bot close_issue


[Proposal] - Decouple Functional and Custom Property WebDriver Tests

Issue
WebDriver tests contain both functional test steps and custom property theme tests within the same spec file. When tests are shared across libraries, specifically theming libraries, it is not possible to skip tests that are applying a mock theme. This introduces a risk of generating unnecessary and inaccurate screenshots.
Tests that contain both functional steps and custom property alteration steps generate a screenshot that includes a mock theme and inaccurately represents the component during that step.
Proposal
Decouple functional and custom property WebDriver tests by separating them into different files and moving the custom property tests into a unique directory. This enables explicit control over which set of tests consumers want to run and makes each spec file's intention more clear.
Functional Tests:
/wdio/test-name.spec

WDIO Tests:
        ↓ Directory
/wdio/theme/test-name.spec

Caveats
Custom Property tests may need to recreate their own set of functional steps when required to present the targeted custom properties.
Component Checklist

[ ] terra-abstract-modal
[ ] terra-action-footer
[ ] terra-action-header
[ ] terra-alert
[ ] terra-arrange
[ ] terra-avatar
[ ] terra-badge
[ ] terra-base
[ ] terra-button
[ ] terra-button-group
[ ] terra-card
[ ] terra-collapsible-menu-view
[ ] terra-content-container
[ ] terra-date-picker
[ ] terra-date-time-picker
[ ] terra-demographics-banner
[ ] terra-dialog
[ ] terra-divider
[ ] terra-doc-template
[ ] terra-dynamic-grid
[ ] terra-embedded-content-consumer
[ ] terra-form-checkbox
[ ] terra-form-field
[ ] terra-form-fieldset
[ ] terra-form-input
[ ] terra-form-radio
[ ] terra-form-select
[ ] terra-form-textarea
[ ] terra-grid
[ ] terra-heading
[ ] terra-hyperlink
[ ] terra-i18n
[ ] terra-icon
[ ] terra-image
[ ] terra-legacy-theme
[ ] terra-list
[ ] terra-markdown
[ ] terra-menu
[ ] terra-mixins
[ ] terra-overlay
[ ] terra-paginator
[ ] terra-profile-image
[ ] terra-progress-bar
[ ] terra-props-table
[ ] terra-responsive-element
[ ] terra-scroll
[ ] terra-search-field
[ ] terra-section-header
[ ] terra-show-hide
[ ] terra-signature
[ ] terra-slide-group
[ ] terra-spacer
[ ] terra-status
[ ] terra-status-view
[ ] terra-table
[ ] terra-tabs
[ ] terra-tag
[ ] terra-text
[ ] terra-time-input
[ ] terra-toggle
[ ] terra-toggle-button
[ ] terra-toggle-section-header
[ ] terra-visually-hidden-text

+1
Would the use of pageObjects alleviate the caveat of rewriting functional steps? http://webdriver.io/guide/testrunner/pageobjects.html

+1 on the proposal.

Is this issue still needed?

It would be worth discussing whether or not we want to continue with these changes. I think there is some value in separating out theme tests from functional tests, but with the changes in toolkit many of the previous issues are mitigated.
This may be a case of "The juice isn't worth the squeeze" -- Anon
That said, there is one test that might require a directory change. It's somewhat of a special case, but because of how the signature component reads the styles they must be set before drawing. As far as I can tell the only way to skip this test is to move it into another directory.
https://github.com/cerner/terra-core/blob/master/packages/terra-signature/tests/wdio/signature-spec.js#L26-L37


Q about distance matrix and surfaces

Hi there,
I'm very new to neuroimaging analysis - I apologize for the silly questions.
I've conducted a spin test (i.e. Alexander-Bloch and colleagues) on surface-based neuroimaging data. I'm looking to localize the regions where there is the highest correspondence across the brain maps, which is where CLEAN-R looks super useful.
I'm not sure how to:
a) read in my data (these are in surface-based format, .mgh - does it need to be read in as xifti format using ciftitools?)
b) organize the data matrix (what should this look like?)
b) calculate geodesic distances (between which points?).
Thank you kindly for your help.
Best,
Bec

Hi Bec,
Thanks for your interest in CLEAN-R. Let me clarify your questions.

CLEAN and CLEAN-R do not require any particular format (e.g. xifti) of the data as long as you have vertex-level neuroimaging data obtained for every subject. If you use FreeSurfer, you may extract each subject's imaging modality and make it a matrix format (e.g. X: a V times N matrix for the first modality, Y: a V times N matrix for the second modality, where V is the number of vertices and N is the number of subjects). The row and column indices should match between X and Y.

In R, you can load the freesurferformats package to read mgh files using read.fs.mgh() function.
An easy way to obtain X and Y, which we used in our study, is to name the file in order, such as

Xnames=c("X_subj1.mgh", "X_subj2.mgh", ..., "X_subj20.mgh")
Ynames=c("Y_subj1.mgh", "Y_subj2.mgh", ..., "Y_subj20.mgh")

Then, you may use the following to obtain the data in the format for CLEAN-R.
library(freesurferformats)
Xmat=do.call("cbind", lapply(Xnames, read.fs.mgh))
Ymat=do.call("cbind", lapply(Ynames, read.fs.mgh))

Computing Geodesic distances is an important step that I believe is not supported well by R software.

We currently use PyGeodesic in Python to compute geodesic matrix.
The input should be available within FreeSurfer based on the surface you are using. For example, if you use pial surface, the file should be available as pial.lh and pial.rh.
After you obtain Geodesic distances, we recommend removing non-cortical vertices to make sure these vertices are removed from both the distance matrix and the data matrices (X and Y). The indices can be found in Freesurfer as cortex.lh and cortex.rh.
FYI: you can read these surface files in R by using read.fs.surface() in R (freesurferformats)

Lastly, if you have subject-level covariates including age or sex, these can be adjusted in CLEAN and CLEAN-R.

We comment that the spin test and CLEAN-R are slightly different from their hypotheses. Therefore, we recommend running CLEAN-R to test and localize coupling regions at the same time.

Thanks again for your interest and please let us know anytime if you have any follow-up issues!
Jun

Hi Jun,
Thank you so much for your reply! This is extremely helpful. I'm familiar with the freesurferformats package so that's really easy. Thank you also for adding the code. I truly appreciate your helpful and comprehensive answer!
Best,
Bec

Hi Bec,
Glad to hear that! Please let me know if any issues come up with the implementation!
Jun

Hi @junjypark,
I apologise, I have more questions! I notice that the Pygeodesic code shows you how to calculate distances between source and target vertices in a single mesh - but I understand we want to create a pairwise distance matrix. How would I do this using the Pygeodesic package?
With thanks,
Bec

Hello, In Python you may manually generate a V times V matrix and fill in each row. I am also sharing Python codes that might help.
num_vts = len(vts)
dismat = np.zeros((num_vts, num_vts))

target_indices = np.array(range(num_vts))
for i in range(num_vts):
    dists, best_source = geoalg.geodesicDistances(np.array([i]), None)
    dismat[i, :] = dists

Hi @junjypark,
Thanks so much! This helps a lot. Sorry to continually ask more questions! If I may ask one last question: How did you extract the faces and vertices from your surface files? Stackoverflow is not particularly helpful here.
Thank you kindly for your time.
Warm regards,
Bec

Hi Bec,
No worries, this information is directly available from your FS surface (e.g. lh.pial). For example,
library(freesurferformats)
surf = read.fs.surface("Downloads/lh.pial")
surf$vertices
surf$faces

Please note that, when you use the code above, indices for faces in R begin with 1, ..., V (not from 0, if it matters).
Choice of surfaces can be critical, as you already noticed, because a misspecified surface would give you a distorted geodesic distance. I used pial surface because I thought it would be most representative. Please see the paper below that points out a related issue.

Spencer, D., Yue, Y. R., Bolin, D., Ryan, S., & Mejia, A. F. (2022). Spatial Bayesian GLM on the cortical surface produces reliable task activations in individuals and groups. NeuroImage, 249, 118908.


"Macroeconomic Elasticities" dynamic analysis is broken

The "Macroeconomic Elasticities" dynamic analysis does not work.
When I specify a pop-the-cap reform beginning in 2018, the static results look sensible.
But then when I specify a 0.36 elasticity in the box titled Elasticity of GDP wrt 1 - AMTR, I get the following error message:
Sorry! Your calculation failed. Please re-enter parameters and try again :(.

Error: key=2017 in reform is not an integer calendar year

@MattHJensen @PeterDSteinberg @brittainhard

Issue #474 is identical to issue #473, which was being posted while I was preparing this issue #474.

Resolution expected in next hour.

Resolved.


Add model name, service and id validation

Codecov Report

Merging #64 (cc35c69) into main (694dc0d) will decrease coverage by 0.16%.
The diff coverage is 60.00%.

@@            Coverage Diff             @@
##             main      #64      +/-   ##
==========================================
- Coverage   82.31%   82.15%   -0.17%
==========================================
  Files          14       14
  Lines         690      695       +5
==========================================
+ Hits          568      571       +3
- Misses         87       88       +1
- Partials       35       36       +1

Impacted Files
Coverage Δ

internal/prometheus/model.go
69.41% <60.00%> (-0.59%)
:arrow_down:

Continue to review full report at Codecov.

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


Some touchups

This project is looking great.  I thought I would help out some.

This is a great work, do you mind add credit to the font used in the authors screen?
If you don't have time just tell me I would modify your pr myself.
Is there some way to exit the full screen mode? We can open an issue for this if not.
Thank you!

I added the font credit to the READ.ME file and you can toggle full-screen with F11 now.

Great job thank you I will soon merge.


Streaming an udp h264 from port 5000 to RTSP

Which version are you using?
0.15.0
Question
I have an udp h264 stream arriving on port 5000 of a raspberry that is running simple server, i would like to restream it on RTSP, is it possible? If so, anybody would be kind enough to let me know gstreamer pipeline please.
I don't need audio, just video and i can make an sdp file if needed if someone could help me out.
Thanks in advance.

Solution found, thanks


add groups to homepage

It doesn't have to be in this pr, but it would be nice if the rows in the tables were clickable and took you to the detail of that item/activity


Clipboard or JS Bug

I had an issue where only the first time something was copied to clipboard would work, and all subsequent copies would keep pasting the original value. I was using this code:
new Clipboard(".copy-data", {
      text: function(trigger) {
        console.log(trigger);//1
        console.log($(trigger).data('clipboard-text'));//2
        console.log('end');
        return $(trigger).data('clipboard-text');
      }
    });

So triggering this 3 times gives me the following output:
class="clickable copy-data" data-clipboard-text="35924">Copy Ticket ID#
35924
end
class="clickable copy-data" data-clipboard-text="35925">Copy Ticket ID#
35924
end
class="clickable copy-data" data-clipboard-text="35926">Copy Ticket ID#
35924
end
Basically, the trigger is showing the correct data, but when I retrieve the attribute, it's incorrect.
I'm not really sure if this is related to clipboard, or just JS.

Please share a JSFiddle so we can debug it properly.


Broken link that redirects to a nonexistent page

Nintendo Wi-Fi Connection / Wiimmfi
https://wii.hacks.guide/wiimmfi
If you click on "If you want to see how to use the WiiWare Patcher, click here!" it redirects you to a nonexistent page.
The page it tries to redirect you is https://wii.hacks.guide/wiiwarepatcher

fixed https://github.com/hacks-guide/Guide_Wii/commit/b0f51377651938af6b11d475a0b3c0353f9a393f


requiring iban.js from hardcoded path

ng-iban.js has
this.IBAN = require("./..\bower_components\iban\iban.js");
but this for sure doesn't work in every environment.
Everyone might not use bower_components for example.

I used grunt-browserify; browserify means you can use NPM modules in the browser. But since iban.js is a Bower package and not an NPM module; I have to use de debowerify transformation. This is defined in the Gruntfile:
browserify: {
  dist: {
    options: {
      transform: ['debowerify']
    },
    files: {
      '.tmp/ng-iban.js': '.tmp/ng-iban.js'
    }
  }
}

If you check the output ng-iban.js you see the following:
this.IBAN = require("./..\\bower_components\\iban\\iban.js");

which is actually a reference to ng-iban.js on line 70: https://github.com/mmjmanders/ng-iban/blob/master/dist/ng-iban.js#L70
Therefore this works


Added clamping of Binance quantity and prices

Binance has limitations on the amount of decimals provided for quantity and price. Each coin has its own settings of how many decimals both can have which are defined in the market metadata. This adds clamping to the quantity and prices if a quantity or price with more decimals than accepted by Binance is provided.

To make sure I understand this change, this is all based off of "StepSize" right? If someone sends in 1.2345678 and the step size is 0.001, the number will be changed to 1.234? If the stepsize is 0.005, it will become 1.23?
Is it worth doing min/maxprice clamping if stepsize isn't provided?

Yes it's based on stepsize for quantity and ticksize for price. Your sample is correct, because if you would give 1.2345678 into a Binance order it will return an errorcode. Since stepsize and ticksize were already in the project as nullable decimals I was hesitant to change those. There is probably a good reason they're nullable.

Thanks for the back and forth on this. Let me know when you feel it is ready to merge and I will have a look over.

I wrapped it in a lock as described 👍

I changed the clamp method to not call round down, it produced invalid results given the step size provided. They all pass now.


Upgrade com.amazonaws.aws-java-sdk-cloudwatch (1.11.232 => 1.11.233)

Close as to not pull in all flow model dependencies


External Id is not required but cognito.UserPoolClientAnalyticsConfiguration.externalId is not optional

This was fixed in the latest version of the provider.


merge CTEST2 into CTEST, use CTEST only

User has to pay extra attention since setup/teardown would not work for CTEST.

Yes, that's called reading the manual :)
There is no way to prevent this.


KRecyclerView built using IndexMatcher could not match children.

Steps to reproduce:

I have a TabLayout with 2 tabs. Both contain RecyclerView with the same id.
I match the RecyclerView in the second tab using withIndex(1) { withId(R.id.recyclerView) }
Now if I try to do any child matching with the RecyclerView inside second tab, it fails. (childAt, childWith, etc).

Observed Results:
androidx.test.espresso.NoMatchingViewException: No views in hierarchy found matching: view holder at 0 position of recycler view: (1th view with: (view.getId() is <2131363464/com.package.name.debug:id/recyclerView>))
Expected Results:
I am expecting it to match the children of the RecyclerView inside the second tab.
Note that matching child items of the RecyclerView inside the first tab (withIndex(0)) works properly.
Relevant Code:
This is how I match my RecyclerViews.
// First tab RecyclerView
KRecyclerView(
  builder = {
      withIndex(0) {
          withId(R.id.recyclerView)
      }
  },
  itemTypeBuilder = {
      itemType(::Item)
  }
)

// Second tab RecyclerView
KRecyclerView(
  builder = {
      withIndex(1) {
          withId(R.id.recyclerView)
      }
  },
  itemTypeBuilder = {
      itemType(::Item)
  }
)

// Item
private class Item(parent: Matcher<View>) : KRecyclerItem<Item>(parent) {
      val moreOptionsIcon = KImageView(parent) { withId(R.id.moreIcon) }
}

Is there something wrong with how it is set up? Please help.

@jermainedilao could you create a Pull Request to reproduce your issue. By sample provided by you - it looks definitely incorrect. For issues like that I can suggest you use support chat in Telegram. Link can be found in repo README


Update dependencies

Sorry but I'm afraid you're not allowed to do this.

This looks like a dependabot commit and a semicolon removal.
There is no added value in this PR.


Use volume buttons as trigger

Is there any way to use Volume buttons as triggers on iOS?

I found https://stackoverflow.com/a/70815088 but I don't know if it still works on modern versions of iOS...

I was going with at least B for volume down, not sure what volume up should be. I was trying to figure out a way to rotate the gyroscope and stuff, so it could be used sideways for Wii Bowling

I coded that for android phone if you have android phone you can try my project，Volume Down=A，Volume Up=B
https://github.com/PlayXboxtion963/WiiMoteAndroid-DSU


⚠ Bofrost.de has degraded performance

In 71956c9, Bofrost.de (https://www.bofrost.de) experienced degraded performance:

HTTP code: 200
Response time: 1441 ms

Resolved: Bofrost.de performance has improved in 44b1c23 after 20 minutes.


Genesis needs human-interaction when it is not needed.

First off, i love genesis. I am a senior developer, and having an automation tool to setup the pipeline infrastructure is a fantastic move imo. Well done.
However, i am having a bit of an issue with it, as in my scenerios gensis needs constant babying. What do i mean:
The genesis outputs files such as:
<!-- instructions.md -->
# Plant Intelligence Agent (PIA) Instructions

You are tasked with the identification of plants, and the detection of diseases and pests using advanced machine learning techniques within the GardenGenius agency. Utilize the Retrieval Augmented Generation (RAG) workflow integrated with both real-time and historical data.

### Primary Instructions:
1. Use advanced machine learning toolkits for image and pattern recognition to analyze plant health.
2. Leverage databases for long-term memory that helps to track and understand user preferences and plant health history.
3. Communicate findings effectively to the Director of Garden Operations (DGO) for appropriate actions.
4. Stay updated with the latest advancements in AI and plant sciences to improve detection and identification processes.

# __init__.py
# These first two are correct and modified by me, the human
from DirectorOfGardenOperations import DirectorOfGardenOperations
from EnvironmentAnalysisAgent import EnvironmentAnalysisAgent

# This is the format for all newly created agents, before human intervention
from .plantintelligenceagent import PlantIntelligenceAgent

As you can see, the name for the agents containing folder is derived from the markdown instructions - however there are spaces in the name in the markdown but not in the python file or folder names (as it should be). This causes genesis to fail to discover the agent directory and create a false import statement. After resolving the import and the name formatting for the containing folder - I can proceed by telling genesis that the directory issue is solved. However, in multi-tenant applications with lots of agents, this is not a sustainable or automated workflow and requires constant babying.
Here is the project folder structure for reference, as generated by genesis:

I also have this issue:

You can clearly see that the Agent is not populating the agency_manifesto.md file contexts and has not included this file in it's file sources. Not exactly sure what's going on here - but i can surmise that a relative path as raw text in the instructions is not the ideal behaviour.

Thank you for opening this. Could you please test again and let me know if it works? I prefer folder names for agents in CamelCase without spaces.

Hey! Thanks for responding so quickly. I will test this and get back to you :)

It seems to be working, but now all of my projects fail to create tools:
CreateTool ⚙ Function Output
Error: Request timed out.

Then it continues to try until i get this:
Traceback (most recent call last):
  File "/workspaces/verdant_virtuoso/.venv/lib/python3.11/site-packages/agency_swarm/threads/thread.py", line 142, in get_completion
    self._submit_tool_outputs(tool_outputs, event_handler)
  File "/workspaces/verdant_virtuoso/.venv/lib/python3.11/site-packages/agency_swarm/threads/thread.py", line 254, in _submit_tool_outputs
    with self.client.beta.threads.runs.submit_tool_outputs_stream(
  File "/workspaces/verdant_virtuoso/.venv/lib/python3.11/site-packages/openai/lib/streaming/_assistants.py", line 444, in __enter__
    self.__stream = self.__api_request()
                    ^^^^^^^^^^^^^^^^^^^^
  File "/workspaces/verdant_virtuoso/.venv/lib/python3.11/site-packages/openai/_base_client.py", line 1232, in post
    return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspaces/verdant_virtuoso/.venv/lib/python3.11/site-packages/openai/_base_client.py", line 921, in request
    return self._request(
           ^^^^^^^^^^^^^^
  File "/workspaces/verdant_virtuoso/.venv/lib/python3.11/site-packages/openai/_base_client.py", line 1012, in _request
    raise self._make_status_error_from_response(err.response) from None
openai.BadRequestError: Error code: 400 - {'error': {'message': 'Runs in status "expired" do not accept tool outputs.', 'type': 'invalid_request_error', 'param': None, 'code': None}}

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/workspaces/verdant_virtuoso/.venv/bin/agency-swarm", line 8, in <module>
    sys.exit(main())
             ^^^^^^
  File "/workspaces/verdant_virtuoso/.venv/lib/python3.11/site-packages/agency_swarm/cli.py", line 51, in main
    agency.run_demo()
  File "/workspaces/verdant_virtuoso/.venv/lib/python3.11/site-packages/agency_swarm/agency/agency.py", line 554, in run_demo
    self.get_completion_stream(message=text, event_handler=TermEventHandler, recipient_agent=recipient_agent)
  File "/workspaces/verdant_virtuoso/.venv/lib/python3.11/site-packages/agency_swarm/agency/agency.py", line 175, in get_completion_stream
    res = self.main_thread.get_completion_stream(message=message,
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspaces/verdant_virtuoso/.venv/lib/python3.11/site-packages/agency_swarm/threads/thread.py", line 54, in get_completion_stream
    return self.get_completion(message,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspaces/verdant_virtuoso/.venv/lib/python3.11/site-packages/agency_swarm/threads/thread.py", line 161, in get_completion
    tool_outputs[i]["tool_call_id"] = tool_call.id
    ~~~~~~~~~~~~^^^
IndexError: list index out of range

Ive tried multiple times, my openai account is fine, i havent reached any rate limits and i have credits on the account.

It seems to be working, but now all of my projects fail to create tools:
CreateTool ⚙ Function Output
Error: Request timed out.

Then it continues to try until i get this:
Traceback (most recent call last):
  File "/workspaces/verdant_virtuoso/.venv/lib/python3.11/site-packages/agency_swarm/threads/thread.py", line 142, in get_completion
    self._submit_tool_outputs(tool_outputs, event_handler)
  File "/workspaces/verdant_virtuoso/.venv/lib/python3.11/site-packages/agency_swarm/threads/thread.py", line 254, in _submit_tool_outputs
    with self.client.beta.threads.runs.submit_tool_outputs_stream(
  File "/workspaces/verdant_virtuoso/.venv/lib/python3.11/site-packages/openai/lib/streaming/_assistants.py", line 444, in __enter__
    self.__stream = self.__api_request()
                    ^^^^^^^^^^^^^^^^^^^^
  File "/workspaces/verdant_virtuoso/.venv/lib/python3.11/site-packages/openai/_base_client.py", line 1232, in post
    return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspaces/verdant_virtuoso/.venv/lib/python3.11/site-packages/openai/_base_client.py", line 921, in request
    return self._request(
           ^^^^^^^^^^^^^^
  File "/workspaces/verdant_virtuoso/.venv/lib/python3.11/site-packages/openai/_base_client.py", line 1012, in _request
    raise self._make_status_error_from_response(err.response) from None
openai.BadRequestError: Error code: 400 - {'error': {'message': 'Runs in status "expired" do not accept tool outputs.', 'type': 'invalid_request_error', 'param': None, 'code': None}}

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/workspaces/verdant_virtuoso/.venv/bin/agency-swarm", line 8, in <module>
    sys.exit(main())
             ^^^^^^
  File "/workspaces/verdant_virtuoso/.venv/lib/python3.11/site-packages/agency_swarm/cli.py", line 51, in main
    agency.run_demo()
  File "/workspaces/verdant_virtuoso/.venv/lib/python3.11/site-packages/agency_swarm/agency/agency.py", line 554, in run_demo
    self.get_completion_stream(message=text, event_handler=TermEventHandler, recipient_agent=recipient_agent)
  File "/workspaces/verdant_virtuoso/.venv/lib/python3.11/site-packages/agency_swarm/agency/agency.py", line 175, in get_completion_stream
    res = self.main_thread.get_completion_stream(message=message,
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspaces/verdant_virtuoso/.venv/lib/python3.11/site-packages/agency_swarm/threads/thread.py", line 54, in get_completion_stream
    return self.get_completion(message,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspaces/verdant_virtuoso/.venv/lib/python3.11/site-packages/agency_swarm/threads/thread.py", line 161, in get_completion
    tool_outputs[i]["tool_call_id"] = tool_call.id
    ~~~~~~~~~~~~^^^
IndexError: list index out of range

Ive tried multiple times, my openai account is fine, i havent reached any rate limits and i have credits on the account.

Having same issue. Had a few successfully created but haven't been able to complete a full agency.

Thanks for the feedback, guys. This can happen if you are creating or running an extremely complex agency where a runt timeout occurs before agents have finished execution. I added some error handling for this; let me know if it helps. Hopefully, openai will add controls for the timeout later.

Will take a look! Thanks for the quick response.

I have tested, the same issue still persists - however it is happening less often. I can now create tools again - as long as I keep the scope barebones and extremely simple. Which is a shame, but understandable.
As a side note - something like plandex.ai is honestly performing better than Genesis and Devid at this point in time. I have switched over to plandex for the time being when I need to generate projects and code (Devid is unusable in its current state), I then use Plandex to generate my tools for Agency Swarm.
Perhaps there is something in the code-base that is making it more stable and reliable? I took a peruse through it and it seems to have much more robust strategies and error handling mechanisms. It even uses a summary feature to chunk messages to the AI when a file/task is too long for the context window/stream response of the LLM. It summarizes and chunk to and from the AI. This feature alone has totally eliminated the request-time issue, as well as being able to modify files it has already created.

Dear All,
First you should know I am no coding expert, not at all, so be nice with the way I present things! Second, I find Genesis an incredibly clever idea and I will persist until it works. I will. Persist.
Now, in my way, I believe I encounter the same problem as mentioned by the others:
a) I have been able to run up to the end some agency examples such as MetaMarkAgency.
b) When I try to build my own agency, it crashes 100% of the time. And I tried numerous times. And I tried very simple agencies. Open ai API correct and everything.
Based on the following, it seems to me that it has to do with the Create Tool function that should imperatively create tools in a sequential way. Look below for an example:
CreateTool ⚙ Function Output
Error: Function CreateTool is already called. You can only call this function
once at a time. Please wait for the previous call to finish before calling it
again.
ToolCreator 🗣 @AgentCreator
The PDFAnalysisTool for the AnalysisAgent has been successfully created. It can
open and read PDF files, extract text, as well as identify important information
such as tables and headings.
However, there was an issue with creating the TextExtractionTool and the
DataAnalysisTool simultaneously with the PDFAnalysisTool. I will now initiate
the creation of these remaining tools one by one.
ToolCreator 🗣 @AgentCreator
It appears that there are persistent issues with the system timing out when
attempting to create the tools for the AnalysisAgent. I will escalate this issue
for further assistance to resolve the system timeouts and ensure the tools are
created successfully. Please bear with us as we address this matter.
Then what happens is a long series of timeouts (of course I do not know if it is related to the above), then it crashes.
Basically the same problem appears, whatever tools the ToolCreator is processing, in every attempt I make, of course not only related to an AnalysisAgent using PDFs. So my non-expert point of view is that there is something to be adapted within the ToolCreator script.
Your opinion?
With my best regards!

There was a small bug with the message history inside this tool, which could have been causing the timeout issue. Please install from the main branch and try again, @Stavros963

There was a small bug with the message history inside this tool, which could have been causing the timeout issue. Please install from the main branch and try again, @Stavros963

Thank you for your quick answer!... As I mentioned, I am no coding specialist. Would you be so kind to indicate what you mean by "main branch"?... Please do not laugh at this candid question. And then, I can tell you, I will use it and share, and provide feedback.
All the best on your side!

Thank you David,
I will find a way as a non-specialist to install from the branch again and make it work. To me, coming from a totally different environment and industry, the experiment is not to install agency-swarm but to use it as to build applicable and lucrative solutions, beyond the « usual » SEO, Website builder et al. I will keep you posted if you agree!
With my best regards from Switzerland,
Stavros

Le 7 mai 2024 à 08:44, Arsenii Shatokhin @.***> a écrit :
There was a small bug with the message history inside this tool, which could have been causing the timeout issue. Please install from the main branch and try again, @Stavros963 https://github.com/Stavros963
—
Reply to this email directly, view it on GitHub https://github.com/VRSEN/agency-swarm/issues/115#issuecomment-2097564035, or unsubscribe https://github.com/notifications/unsubscribe-auth/BDD7GWQAF2HY4AHYF5V4BWTZBBZ4TAVCNFSM6AAAAABG6D345CVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDAOJXGU3DIMBTGU.
You are receiving this because you were mentioned.


The Polkadot BizDev Bible

In progress...

Merging this for now so its more easily findable. still needs to be completed


Datacontext/UnitOfWork

I am new to MongoDB and am trying to get a grip on best practice..
In that past I would have created a Repository, a DataContext maybe a UnitofWork. At first when I looked at your code I thought the DataContext /UnitOfWork abstraction was missing, but thinking about it, the UnitOfWork can be encapsulated by instantiating a repository and performing some action on it. My question would be around latency in creating a connection to MongoDB every time you create a repository. Is there a heavy burden? Do you have any opinion around UnitOfWork etc?

I think the best regarding connection to db in MongoDB world is you keep your connection opened during the life of application. MongoDB driver handles the connection internally so even if you open 100s it'll keep a pool of fixed connections and return you the same. Also if you keep your connection open, the driver will immediately warn you when one server goes off and will then shifts to you next secondary server.
Since MongoDB doesn't support transactions, so the UnitOfWork pattern has of no use.

That's my point, the MongoRepository constructors take a connection string as a parameter, so I have assumed that a new connection is made every time a MongoRepository is created so...
void DoStuff(){
var repo = new MongoRepository();
repo.Add(newitem);
};
would create a new connection each time the method was invoked.
Can't a Datcontext contain the connection?
Ok about UnitOfWork, I did not know that transactions where not supported.

would create a new connection each time the method was invoked.

It doesn't; MongoDB's C# driver (which we use) handles this internally and simply uses a connectionpool.

I did not know that transactions where not supported

From https://docs.mongodb.org/v3.0/core/write-operations-atomicity/ :

In MongoDB, a write operation is atomic on the level of a single document, even if the operation modifies multiple embedded documents within a single document.

And https://docs.mongodb.org/manual/tutorial/perform-two-phase-commits/ :

Because only single-document operations are atomic with MongoDB, two-phase commits can only offer transaction-like semantics. It is possible for applications to return intermediate data at intermediate points during the two-phase commit or rollback.

In my experience, most likely when you're in need of transactions you're probably using MongoDB as an RDBMS and trying to fit a square peg in a round hole ;)

Thanks Rob that helps. As I stated at the beginning I am trying to grasp how the architecture or my thinking needs to change in order to get the best from NoSQL as opposed to a more conventional BLL/DAL with repository or ORM implementation


Effects screen

The screen itself works, but there are no effects in picamera2 (I think). Make up your own or get rid of it.

Effects screen is temporarily inaccessible


A method to continuously target an angle and RuntimeError: can't start a new thread

Hi, I have a car with an ackermann steering which I would like to control with a ps4 controller. I searched for a way to continuously target the angle delivered by the controller. But I can't find a satisfactory solution with the library at the moment. I hope that someone here can put me on the right track.
I found also a related question https://github.com/RaspberryPiFoundation/python-build-hat/issues/175#issuecomment-1420205833 asked by natikgadzhi:

On a similar note, let's say I'm using a motor for steering and accepting and queueing remote commands. If I queue a command run_for_degrees and it's not yet started executing, but another command run_for_degrees in different direction comes in, I should be able to go to hat.motorqueue[target_port].pop or delete another command from queue, right?
That's unless that command is currently executing. If it's already in progress, any way to see what command is in progress on each port, and interrupt it if needed?

Here is a little program which should simulate the behavior:
from buildhat import Motor, Hat
import time

h = Hat(debug=True)

motor_a = Motor('A')

start_time = time.time()

motor_a.run_to_position(degrees=0, speed=20, blocking=True, direction="shortest")

sleep_time_seconds = 0.05

angles_from_controller = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -20, -40, -40, -39, -40, -35, -38, -35, -30, 0, 20, 40, 35, 35,
                          35, 35, 35, 35, 35, 35, 30, 0, 0, 0]

try:
    while True:
        for angle in angles_from_controller:
            motor_a.run_to_position(degrees=angle, speed=50, blocking=False, direction="shortest")
            time.sleep(sleep_time_seconds)

except RuntimeError as e:
    duration = time.time() - start_time
    print(f"-> Duration: {duration}")
    print(e)

Depending on how the sleep time was chosen, the sooner no more threads can be started.
I know that pybricks has a method https://docs.pybricks.com/en/stable/pupdevices/motor.html#pybricks.pupdevices.Motor.track_target or https://docs.pybricks.com/en/stable/pupdevices/motor.html#pybricks.pupdevices.Motor.run_target which does exactly what I would need.
Questions:

Is there already a way in the library to continuously target an angle of a motor as fast as possible for the given use case and I don't see it actually?
What would be the best way to realize this use case with the functions implemented by the library at the moment?
@chrisruk if there is a concept or existing idea how to implement something like a track_target method for motors in the library, maybe I could try to implement a draft of it - but I would have to know a little more first so that the whole thing would fit into the existing concepts and future development. Maybe there are also changes in a future firmware that would help with it.

A quick idea was to add a method in the library that doesn't start a thread and just sends the command to the build HAT. Because I don't expect any feedback, this would be enough. But I haven't checked this idea further and if this fits with the existing concepts at all.

Currently I'm trying to implement my project directly with the serial protocol of the Build HAT without using the Python library - but of course it would be great to be able to use the library.
Thank you for inputs and ideas

Hi,
Do you mind trying running your example on the 'main' version of buildhat.
It implements a queuing system, so that you shouldn't get an error.
Thanks

Hi,
I ran my example with the 'main' version of buildhat and my first observations are:

The error is gone. I let it run for more than 5 minutes without a problem. Cool! :partying_face: Thanks for the great work!
The memory usage is growing and growing... slowly, but it's growing more and more. :thinking: I think this is the result of the queuing system and resulting growing queue because the commands can not be finished fast enough. But the methods I use are not designed for my use case and everything works as expected.

I tried a little other example:
from buildhat import Motor, Hat
import time

h = Hat(debug=True)

motor_a = Motor('A')

start_time = time.time()

motor_a.run_to_position(degrees=0, speed=20, blocking=True, direction="shortest")

sleep_time_seconds = 0.001

angles_from_controller = [-90, 0, 0, 0, 90, 0, 0, 0]

try:
    while True:
        for angle in angles_from_controller:
            motor_a.run_to_position(degrees=angle, speed=20, blocking=False, direction="shortest")
            time.sleep(sleep_time_seconds)

except RuntimeError as e:
    duration = time.time() - start_time
    print(f"-> Duration: {duration}")
    print(e)

You can see that the angles are [-90, 0, 0, 0, 90, 0, 0, 0]. If I have a controller which should control the steering of the car, I would expect that the -90 and 90 degrees are not reached, the motor should mostly bouncing around 0 degrees in this example. But the actual behavior is that the motor finishes every command in the queue and goes to -90 degrees, then 0, 0, 0 and then to fully 90 degrees and so on... This works as designed. (And fills the queue and the memory continuously. :smile: )
But for my use case I should have a way to delete (or overwrite) an actual command. I think the comment in https://github.com/RaspberryPiFoundation/python-build-hat/issues/175#issuecomment-1420205833 meant the same use case.
 It means if the motor has reached -30 degrees and the second command comes in, it should not go to -90 degrees first and then to 90 degrees, it should stop on -30 and then directly execute the next command to 90 degrees. I know that the method run_to_position is not designed for this behavior.
There comes my third question in:
Is there a possible way or an idea how to implement a track_angle(degrees=x) method where I can throw in angles as fast as possible and the motor tries to reach this angle, but if a new angle comes in and the motor hasn't reached the actual angle, then ignore the actual angle and try to reach directly the new angle. IMHO for this use case, the queuing system will not work and it needs a way to bypass it.
Maybe I should try to implement a draft of such a method and we could discuss about it when I created a pull request.

"If I send a command run_to_position(degrees=-90, blocking=False, ...) and then a millisecond later the command run_to_position(degrees=90, blocking=False, ...) the first command should be overwritten somehow by the second"

That's a good question, I assume provided a command to move the motor hasn't been issued to the hat itself, there should be a way to do that.
It does look to me there aren't ways to alter the synchronised queue though, I can't see any public methods to do this - https://docs.python.org/3/library/queue.html.
I wonder if something like https://docs.python.org/3/library/collections.html#collections.deque may be useful here.
If you've got any suggestions/ideas/pull reqs. though, that'd be cool.
I'm just testing a new firmware currently, but can get back to thinking about this soon.


"local time" seems ambiguous

https://deploy-preview-388--cds2019.netlify.app/devsummit/schedule/workshops/
Feels like "local" could mean either. Open to better names ('your time'?), or maybe just putting the timezone offset in there would make it clear.
@johnrich85

Looks fixed


Fix Null Pointer Exception in vm.rs with_env

I ran into this issue when dropping a Global. When trying to get the env in with_env it would end up dereferencing one step too many and end up with a null pointer exception in the VM's JNI code.
I pictured it like this:
Given
*const JavaVM = *const *const jni_sys::JNIInvokeInterface_;. A valid *const JavaVM would be a pointer A which points to a pointer B which points to the JNIInvokeInterface_. At some point we went one step to far and treated pointer B as *const *const jni_sys::JNIInvokeInterface_;. So when we dereferenced B twice to get JNIInvokeInterface_ we actually end up somewhere random (and leads us into a null ptr exception).
I think the problem is that it would dereference it once when it was accessed via self.0 because of repr(transparent). (it may be something else though, but this stuff is tricky).
I changed VM to hold a VM(*const JavaVM); since that is what you are given in JNI_OnLoad and that made more sense to me. Then I used the as_java_vm helper to make sure I get a valid *mut JavaVM keeping in mind the rear(transparent.

I ran into this issue when dropping a Global. When trying to get the env in with_env it would end up dereferencing one step too many and end up with a null pointer exception in the VM's JNI code.

I'd love a repro case!  Bugs - especially in the undertested Global stuff - are likely, but I'm having a hard time wrapping my head around this fixing things.

Sure thing, I'll make a small repro tomorrow. I'm turning a Local thing into a global thing and letting it go out of scope.
Using this patch for the into_global: https://github.com/MaulingMonkey/jni-bindgen/compare/master...MarcoPolo:into_global?expand=1

Here's a small repo:
diff --git a/jni-glue/src/lib.rs b/jni-glue/src/lib.rs
index 2db593c..6b1a6de 100644
--- a/jni-glue/src/lib.rs
+++ b/jni-glue/src/lib.rs
@@ -88,9 +88,17 @@ pub fn on_unload(vm: *const JavaVM, _reserved: *const c_void) {
 #[no_mangle] #[allow(non_snake_case)] #[cfg(not(feature = "unsafe-manual-jni-load-unload"))]
 pub unsafe extern "system" fn JNI_OnLoad(vm: *const JavaVM, _reserved: *const c_void) -> jint {
     VMS.write().unwrap().on_load(vm);
+    let gen_vm = VMS.read().unwrap().get_gen_vm(vm as *mut JavaVM);
+    VMS.read().unwrap().use_vm(gen_vm, |vm| {
+        vm.with_env(|env| {
+        });
+    });
     JNI_VERSION_1_2
 }

+pub fn something() {
+}
+
 /// **Do not call!**  Automatically invoked by the JVM.  See "unsafe-manual-jni-load-unload" to override this behavior.
 #[no_mangle] #[allow(non_snake_case)] #[cfg(not(feature = "unsafe-manual-jni-load-unload"))]
 pub extern "system" fn JNI_OnUnload(vm: *const JavaVM, _reserved: *const c_void) {

and for some reason I need to call something from my code like so:
#[no_mangle]
pub extern "system" fn Java_io_marcopolo_demo_MainActivity_initRust(
    env: &Env,
    _this: jobject
) {
    jni_glue::something();
}

As an android app in a Nexus 5x API 29 x86 simulator in dev.
After some experimenting this change in vm.rs fixes it.
diff --git a/jni-glue/src/vm.rs b/jni-glue/src/vm.rs
index 36d9818..758670c 100644
--- a/jni-glue/src/vm.rs
+++ b/jni-glue/src/vm.rs
@@ -1,4 +1,5 @@
 use super::*;
+use log::*;

 /// FFI: Use **&VM** instead of *const JavaVM.  This represents a global, process-wide Java exection environment.
 ///
@@ -27,11 +28,11 @@ impl VM {
     where
         F: FnOnce(&Env) -> R,
     {
-        let mut java_vm = self.0;
+        let java_vm: *const JavaVM = &self.0;
         let mut env = null_mut();
-        match unsafe { (*java_vm).GetEnv.unwrap()(&mut java_vm, &mut env, JNI_VERSION_1_2) } {
+        match unsafe { (**java_vm).GetEnv.unwrap()(java_vm as *mut JavaVM, &mut env, JNI_VERSION_1_2) } {
             JNI_OK => callback(unsafe { Env::from_jni_void_ref(&env) }),
-            JNI_EDETACHED => match unsafe { (*java_vm).AttachCurrentThread.unwrap()(&mut java_vm, &mut env, null_mut()) } {
+            JNI_EDETACHED => match unsafe { (**java_vm).AttachCurrentThread.unwrap()(java_vm as *mut JavaVM, &mut env, null_mut()) } {
                 JNI_OK => callback(unsafe { Env::from_jni_void_ref(&env) }),
                 unexpected => panic!("AttachCurrentThread returned unknown error: {}", unexpected),
             },

Although I'm not sure why. I added some logging as well to get an idea what was happening with the pointers, and in the breaking version (what's on master) &mut java_vm has the value of 0xffdc.. when it should have the value of 0xe9f.. to be correct (not the actual value, just what the correct pointer value should be in this case. I got the correct pointer value by looking at what *const JavaVM is in JNI_OnLoad.
Maybe rust is doing something weird with the &mut syntax?? I don't know

Should be fixed on master now, thanks for the repro case and investigation!

Thanks!


[fpv] FPV flow updates

This reworks the FPV flow such that 1) a coverage report is written out each run and 2) only the relevant source files are analyzed and elaborated, which can significantly improve coverage collection runtime.
Note that this PR depends on #1097, which needs to be merged first.

Michael and I had a quick sync up:

right now the FPV new structure does not support fpv_all, but we will work on it soon.
all individual IPs/PRIMs using FPV to verify if not have it, will need to generate their own FPV folders with bind files. This can be done automatically using PR: #1099. I will work on adding the complete FPV TB for the prim_packer.

Thanks for giving this a look, @cindychip!
Indeed, the plan is to switch over to a more explicit build flow. This also allows to include target-specific waiver files if needed, and reduces the runtime for coverage calculations. The fpv_all script still needs to be updated accordingly.


Fix /etc/hostname backward compatibility issue for in-place upgrade.

Fixes https://github.com/containerd/cri/issues/1082.
If people do in-place upgrade, old sandboxes may not have the hostname file. In that case, we shouldn't try to mount it into containers.
Another option is to create the hostname file for the sandbox if it doesn't exist. However, that also causes inconsistency, e.g. for different containers inside a pod, old running ones don't have the hostname file, new restarted ones have it.
Neither of them is a perfect solution, skipping mounting is cleaner, so I implemented that one.
Signed-off-by: Lantao Liu<EMAIL_ADDRESS>

We should cherry-pick this into supported branches. And let's include the fix in 1.2.5 https://github.com/containerd/containerd/pull/3086.


Added image service component

Adds new component for single image services:
import { ImageService } from 'react-iiif-vault';

function App() {
  return (
    <div style={{ width: 500, position: 'relative' }}>
      <ImageService src="https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/info.json"
      />
    </div>
  );
}

@funkydunc Example is found in demo.tsx and a preview here at the bottom:
https://deploy-preview-211--react-iiif-vault-demo.netlify.app/


Make inspection its own library

Scope & Purpose
When developing new features for the inspection library it comes in handy to be able to compile the inspector tests by themselves.
This still has a few more dependency-tentacles into lib than I would like, but it is a start.

Jenkins test failures are unrelated.


Update when deleting css files

I noticed, after installing the extension I don't get any suggestions any more at all (not even the few measly buggy ones).
But after SCANNING I get them all. That's nice, since VS is extremely buggy and inconsistent (I get different suggestions each time I open VS and mostly BS is missing - w/o the extension).
But I noticed, when I delete a .css file, the suggestions stick - even after re-scanning. Only after closing VS, re-open and re-scan, it's correct again.
Also, when re-naming or deleting classes inside a css file, it's the same. RE-scanning w/o closing does not remove invalidated classes from the suggestion.

IDK if this has to do with the extension or with VS, but I found  very peculiar behavior. I get different suggestions, depending on, whether I simply place the caret inside the "" of the <... class="" ...> then I will get only the suggestions from isolated .css files. However, if I am typing the entire attribute 'class' or when I place the caret inside the "" but I delete at least the last letter (like deleting s="  ) and then retyping it (so the for VS the attribute is newly created) then I actually get ONLY the suggestions from the .css in the static wwwroot folder (but not those from the isolated files) ... cheez, wtf is going on, VS is so buggy.

Thank you for your extensive testing, and for using the extension!
I will look at those issues as soon as possible (probably this weekend). I think they all are solvable.
Stay tuned for updates! :)

Issues tracked here:
#4
#5
#6

The issues should be fixed in the latest version 1.1. Thanks for bringing them to my attention @AMUCOMO!


fast-tags doesn't respond to --version

fast-tags is lacking some correct setting to let me run fast-tags --version in bash

Yeah, there's no flag like that.  I guess it's pretty easy to add one :)

Fixed by 6ec7d2f1ccf4ed5db41e8c9e7895a811463cc347


cii badge updated

All Submissions:

[ ] Have you followed the guidelines in our Contributing document?
[ ] Have you read and signed the automated Contributor's License Agreement?
[ ] Have you checked to ensure there aren't other open Pull Requests for the same update/change?

New Feature Submissions:

[ ] Does your submission pass tests?
[ ] Have you lint your code locally prior to submission?

Changes to Core Features:

[ ] Have you added an explanation of what your changes do and why you'd like us to include them?
[ ] Have you written new tests for your core changes, as applicable?
[ ] Have you successfully ran tests with your changes locally?

The project sites (website, repository, and download URLs) MUST support HTTPS using TLS.
This point doesn't pass with our repository url, is it because ours is using SSL, not TLS?


Merge remote-tracking branch 'tien271_wkwebview_fork/master' into wkw…

Merged fork of https://github.com/tien271/cordova-plugin-photo-library-wkwebview

Try fixing metadata in package.json and plugin.xml first.


Improve AboutActivity UI

Feel free to get creative. Add a screenshot of the changes made in comments.

What kind of details you want on about activity app details , developer name , etc  ?

No names required, Add name of the app, put MIT license logo, Inform that its an open source app and add a link to the github repo.

Can i work on this issue?

@AggarwalAditya Thanks for the interest, but this issue is closed now.


Publicly Put Object

In s3cmd, we can use -P options when we put and object, it store objects with ACL allowing read for anyone. Can we do that in minio? Because I want to retrieve an object URL without expire time. I currently use PresignedGetObject but the URL is not permanent.

You should set bucket policies instead. minio-go doesn't support ACLs.

@harkce Closing the issue, as we do not support ACLs. Please feel free to open new issue if you have further questions.


Removed packages that already exist, updated README

Removed packages from build/imagerun.sh that were already added by the Dockerfile.
Added more information to README.
Fixes https://github.com/samsung-cnct/k2-tools/issues/66

@coffeepac  made another pass at it - do I need to delete all the packages if k2-tools is only used for up/down/update? Is there an advantage to removing everything, even though it will just be killed after the process is done. It feels unnecessary, unless I am missing something.

@leahnp the package delete is important because it shrinks the size of the image.  the smaller the image size the faster it downloads to a user's computer.  its purely a user-experience thing.

But it all ultimately is downloaded (meaning all the packages we install at some point during the life of the container  - they must be downloaded to perform other tasks) but then we delete them (which I see as extra work, since we already downloaded them) then we kill the container pretty quickly once the k2 task is done.
I have no problem adding the delete line back in, I just feel like I am missing some information because it logically doesn't make sense to me.

the Dockerfile describes how to build the k2-tools image.  When we build that image we download all packages, install them, clean up the image and then we send the fully built/cleaned image up to quay for hosting.
When we create a container based on the k2-tools image we do not execute the Dockerfile, that work is already done.  So when we create the container we want the image to be as small as possible.  Does that make sense?

@coffeepac thanks for your help with this - build related packages are now removed after use.

Code looks fine but CI is failing.  Looks like openssl isn't being installed?

@coffeepac I am checking out the CI - what makes you think openssl is not being installed?

the error message is:

{"changed": false, "cmd": "openssl genrsa -out /root/kraken/cluster/aws//pr-90-3/certs/ca-key.pem 2048", "failed": true, "msg": "[Errno 2] No such file or directory", "rc": 2}

Which means either the executable, openssl, doesn't exist or the output directory doesn't exist.  I'm assuming its openssl because there is an ansible task right before this error that creates the directory.

Openssl is added on line 45 of the Dockerfile - and I logged into this version of k2-tools and see this output: / # find / -name openssl /usr/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl /usr/lib/python2.7/site-packages/cryptography/hazmat/backends/openssl is that not the correct openssl?

looks fine!  can you execute it?

Seems that was a red herring - it appears that was just a binding for a different python package for openssl. So back to your original theory that openssl is not being installed...even though its in the list of stuff being installed in the Dockerfile. Investigating more.

It seemed that when alpine-sdk was deleted, it was also deleting openssl. Let's see if this passes CI


How to get the dragged position when I grag&move the waveform in AudioFileWaveforms?

How to get the dragged position when I drag&move the waveform in AudioFileWaveforms?
I'd like to get the dragged&moved position from AudioFileWaveforms.

Hello @wann2, Can you please provide more information such as which position you want?

Closing this issue as it's fixed in this issue #384.


doesn't have a multicall contract address defined

I got this error.
after searching. your code does not support almost default network contracts. please tell me am I right?
Error: Network - 97 doesn't have a multicall contract address defined. Please check your network or deploy your own contract on it.

Same here for another network.
I think the problem is that new Ethers uses a BigInt as network ID, and this library uses a switch with numbers to find a match with the enum.
Since switch uses a STRICT equality (=== operator) it doesn't match a number with BigInt.


Remove cypress from the project

cypress.json still present (I can submit PR but figured it made more sense to mention here)


reduced initial loading time

I've approved it, merging is blocked due to conflicts tho. We can merge it once the conflict is resolved.