FIRESTORE INTERNAL ASSERTION FAILED: QueryComparator needs to have a key ordering. (expected has_key_ordering)

[REQUIRED] Step 1: Describe your environment

Xcode version: 12.4
Firebase SDK version: 6.32.2
Installation method: CocoaPods
Firebase Component: Firestore

[REQUIRED] Step 2: Describe the problem
Fatal Exception: NSInternalInconsistencyException

FIRESTORE INTERNAL ASSERTION FAILED: QueryComparator needs to have a key ordering. (expected has_key_ordering)
Fatal Exception: NSInternalInconsistencyException

0  CoreFoundation                 0x186369654 __exceptionPreprocess
1  libobjc.A.dylib                0x18608bbcc objc_exception_throw
2  CoreFoundation                 0x18626c6ec +[_CFXNotificationTokenRegistration keyCallbacks]
3  Foundation                     0x186700584 -[NSAssertionHandler handleFailureInFunction:file:lineNumber:description:]
4  iSharing                       0x100900180 firebase::firestore::util::ObjcThrowHandler(firebase::firestore::util::ExceptionType, char const*, char const*, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) + 59 (exception_apple.mm:59)
5  iSharing                       0x1008ffe34 firebase::firestore::util::Throw(firebase::firestore::util::ExceptionType, char const*, char const*, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) + 90 (exception.cc:90)
6  iSharing                       0x10094e0d4 firebase::firestore::util::internal::FailAssertion(char const*, char const*, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const*) + 42 (hard_assert.cc:42)
7  iSharing                       0x10094e174 firebase::firestore::util::internal::FailAssertion(char const*, char const*, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, char const*) + 49 (hard_assert.cc:49)
8  iSharing                       0x10098c35c firebase::firestore::core::Query::Comparator() const + 295 (query.cc:295)
9  iSharing                       0x1009c9e4c firebase::firestore::core::View::View(firebase::firestore::core::Query, firebase::firestore::immutable::SortedSet<firebase::firestore::model::DocumentKey, firebase::firestore::util::Comparator<firebase::firestore::model::DocumentKey> >) + 89 (view.cc:89)
10 iSharing                       0x1009b4008 firebase::firestore::core::SyncEngine::InitializeViewAndComputeSnapshot(firebase::firestore::core::Query const&, int) + 98 (sorted_map.h:98)
11 iSharing                       0x1009b377c firebase::firestore::core::SyncEngine::Listen(firebase::firestore::core::Query) + 435 (vector:435)
12 iSharing                       0x1008fce04 firebase::firestore::core::EventManager::AddQueryListener(std::__1::shared_ptr<firebase::firestore::core::QueryListener>) + 60 (event_manager.cc:60)
13 iSharing                       0x10092562c std::__1::__function::__func<firebase::firestore::core::FirestoreClient::ListenToQuery(firebase::firestore::core::Query, firebase::firestore::core::ListenOptions, std::__1::shared_ptr<firebase::firestore::core::EventListener<firebase::firestore::core::ViewSnapshot> >&&)::$_10, std::__1::allocator<firebase::firestore::core::FirestoreClient::ListenToQuery(firebase::firestore::core::Query, firebase::firestore::core::ListenOptions, std::__1::shared_ptr<firebase::firestore::core::EventListener<firebase::firestore::core::ViewSnapshot> >&&)::$_10>, void ()>::operator()() + 4211 (memory:4211)
14 iSharing                       0x1008e1598 firebase::firestore::util::AsyncQueue::ExecuteBlocking(std::__1::function<void ()> const&) + 957 (atomic:957)
15 iSharing                       0x1009c0330 firebase::firestore::util::Task::ExecuteAndRelease() + 1859 (functional:1859)
16 libdispatch.dylib              0x18602f524 _dispatch_client_callout
17 libdispatch.dylib              0x185fdb8a4 _dispatch_lane_serial_drain$VARIANT$mp
18 libdispatch.dylib              0x185fdc294 _dispatch_lane_invoke$VARIANT$mp
19 libdispatch.dylib              0x185fe578c _dispatch_workloop_worker_thread
20 libsystem_pthread.dylib        0x186080b74 _pthread_wqthread
21 libsystem_pthread.dylib        0x186083740 start_wqthread

Steps to reproduce:
Occurring on lots of customer devices. Don't know how to reproduce it.
Relevant Code:
- (void)getChatMessages:(NSString*)room
                 token:(NSString *)token
                 source:(FIRFirestoreSource)source
            completion:(void(^)(NSError * _Nullable error, NSArray<ChatMessage *> * _Nonnull messageList, NSString * _Nullable nextToken))completion
{
    const NSUInteger FETCH_COUNT = 30;
    FIRCollectionReference *ref = [[[self.db collectionWithPath:SCHEMA_CHAT_MESSAGES]
                                               documentWithPath:room]
                                             collectionWithPath:COLLECTION_MESSAGES];

    FIRQuery *query = [ref queryOrderedByField:@"timestamp" descending:YES];
    if (token) {
        NSInteger startTimestamp = [token integerValue];
        query = [query queryStartingAtValues:@[@(startTimestamp)]];
    }
    query = [query queryLimitedTo:FETCH_COUNT];

    [query getDocumentsWithSource:source
                       completion:^(FIRQuerySnapshot * _Nullable snapshot,
                                    NSError * _Nullable error) {
        if (snapshot == nil) {
            ELog(@"ClientAPIFS Error fetching document: %@", error);
            return;
        }

        NSMutableArray *messageList = [[NSMutableArray alloc] init];
        for (FIRQueryDocumentSnapshot *doc in snapshot.documents) {
            ChatMessage *message = [[ChatMessage alloc] initWithKey:doc.documentID data:doc.data];
            message.room = room;
            [messageList addObject:message];
        }

        NSString *nextToken = nil;
        if (snapshot.documents.count >= FETCH_COUNT) {
            FIRQueryDocumentSnapshot *doc = [snapshot.documents lastObject];
            NSNumber *timestamp = doc.data[@"timestamp"];
            nextToken =  [timestamp stringValue];
        }

        completion(nil, messageList, nextToken);
    }];
}

- (void)listenChatMessageChangeFor:(sw_id_t)friendId room:(NSString *) room onReceive:(void(^)(ChatMessage *data))callback
{

    const NSInteger DELAY_THRESHOLD = 60;
    const NSInteger now = [[NSDate date] timeIntervalSince1970] - DELAY_THRESHOLD;

    FIRCollectionReference *ref = [[[self.db collectionWithPath:SCHEMA_CHAT_MESSAGES]
                                               documentWithPath:room]
                                             collectionWithPath:COLLECTION_MESSAGES];

    if (_messageChangedListener){
        [_messageChangedListener remove];
    }
    _messageChangedListener = [ref addSnapshotListener:^(FIRQuerySnapshot * _Nullable snapshot,
                                                         NSError * _Nullable error) {

        if (snapshot == nil) {
            ELog(@"ClientAPIFS Error fetching document: %@", error);
            return;
        }

        for (FIRDocumentChange *diff in snapshot.documentChanges) {
            if (diff.type == FIRDocumentChangeTypeAdded) {
                ChatMessage *message = [[ChatMessage alloc] initWithKey:diff.document.documentID data:diff.document.data];
                message.room = room;

                if (message.timestamp >= now) {
                    self.callbackMessageAdded(message);
                }
            }

            if (diff.type == FIRDocumentChangeTypeModified) {
                ChatMessage *message = [[ChatMessage alloc] initWithKey:diff.document.documentID data:diff.document.data];
                message.room = room;
                callback(message);
            }
        }
    }];

}

Can you enable logging in your app and share the contents from a crashing device?

Can you enable logging in your app and share the contents from a crashing device?

No, I can't. the crash comes from customer devices. It is not reproduced on my device.

Can you provide more context on what is happening in the application when the crash occurs?

@isharing0726 looks like you're using an older major version of Firebase, can you try updating to the latest version to see if the crash has already been fixed since then?

Can you provide more context on what is happening in the application when the crash occurs?

The above functions (listenChatMessageChangeFor and getChatMessages) might be called right before the crash.
When the crash occurred, there was a thread executing the following.
com.google.firebase.firestore.rpc 0  libsystem_kernel.dylib         0x1bf6c2b5c poll + 8 1  grpc                           0x103be9548 pollset_work(grpc_pollset*, grpc_pollset_worker**, long long) + 1172 2  grpc                           0x103beb3e0 pollset_work(grpc_pollset*, grpc_pollset_worker**, long long) + 72 3  grpc                           0x103bdd738 cq_next(grpc_completion_queue*, gpr_timespec, void*) + 520 4  grpcpp                         0x103f67550 grpc_impl::CompletionQueue::AsyncNextInternal(void**, bool*, gpr_timespec) + 60 5  iSharing                       0x100836f9c firebase::firestore::remote::Datastore::PollGrpcQueue() + 135 (datastore.cc:135) 6  iSharing                       0x100910330 firebase::firestore::util::Task::ExecuteAndRelease() + 1859 (functional:1859) 7  libdispatch.dylib              0x1933ba280 _dispatch_client_callout + 16 8  libdispatch.dylib              0x193362dcc _dispatch_lane_serial_drain$VARIANT$mp + 612 9  libdispatch.dylib              0x1933638a8 _dispatch_lane_invoke$VARIANT$mp + 424 10 libdispatch.dylib              0x19336d338 _dispatch_workloop_worker_thread + 712 11 libsystem_pthread.dylib        0x1dbfa55a4 _pthread_wqthread + 272 12 libsystem_pthread.dylib        0x1dbfa8874 start_wqthread + 8

As @morganchen12 was saying, can you upgrade to the latest version of the SDKs ad try again?

As @morganchen12 was saying, can you upgrade to the latest version of the SDKs ad try again?

ok, I'll update to the latest and let you know.

@isharing0726 Do you know if this crash occurs with or without the  query = [query queryStartingAtValues:@[@(startTimestamp)]]; call?

@isharing0726 Do you know if this crash occurs with or without the  query = [query queryStartingAtValues:@[@(startTimestamp)]]; call?

I don't know. I can't verify it because the crash is occurring in customer devices.

@isharing0726 is this still an issue with the latest SDK version?

@isharing0726 is this still an issue with the latest SDK version?

It is resolved. We're using 7.3.0.


upgrade dashboard version

Codecov Report

Merging #302 (d1c6b48) into master (46c74a3) will decrease coverage by 0.01%.
The diff coverage is 0.00%.

@@            Coverage Diff             @@
##           master     #302      +/-   ##
==========================================
- Coverage   72.71%   72.69%   -0.02%
==========================================
  Files          43       43
  Lines        8582     8584       +2
==========================================
  Hits         6240     6240
- Misses       1685     1686       +1
- Partials      657      658       +1

Impacted Files
Coverage Δ

master/rest.go
55.28% <0.00%> (-0.20%)
: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 46c74a3...d1c6b48. Read the comment docs.


add infer_type for regression ops, fix issues#9847

Description
fix https://github.com/apache/incubator-mxnet/issues/9847
Checklist
Essentials

[ ] Passed code style checking (make lint)
[ ] Changes are complete (i.e. I finished coding on this PR)
[ ] All changes have test coverage:
Unit tests are added for small changes to verify correctness (e.g. adding a new operator)
Nightly tests are added for complicated/long-running ones (e.g. changing distributed kvstore)
Build tests will be added for build configuration changes (e.g. adding a new build option with NCCL)
[ ] Code is well-documented:
For user-facing API changes, API doc string has been updated.
For new C++ functions in header files, their functionalities and arguments are documented.
For new examples, README.md is added to explain the what the example does, the source of the dataset, expected performance on test set and reference to the original paper if applicable
[ ] To the my best knowledge, examples are either not affected by this change, or have been fixed to be compatible with this change

Changes

[ ] Feature1, tests, (and when applicable, API doc)
[ ] Feature2, tests, (and when applicable, API doc)

Comments

If this change is a backward incompatible change, why must this change be made.
Interesting edge cases to note here

How did unit test test_operator.py test_regression() test work without the error?

Yes, please track down why the test did not catch this issue

Unittest is written in symbolic mode while the issue is in imperative mode. In symbolic mode, infer_type pass has a default infer function SameType https://github.com/apache/incubator-mxnet/blob/master/src/executor/infer_graph_attr_pass.cc#L403-L408, but in imperative mode, there is no default infer type function https://github.com/apache/incubator-mxnet/blob/master/src/imperative/imperative_utils.h#L123. So this is an inconsistent behaviour between symbolic mode and imperative mode. Should we correct it? cc @reminisce @eric-haibin-lin

By the way, L2NormalizationOp and InstanceNormOp don't have an infer_type function.

Makes sense.

Very nice catch, @ZiyueHuang! Sounds like a good idea.

Please feel free to add infer type for the other ones if you like (not required for this PR, however).

Is this good to merge? @piiswrong

@piiswrong any special reason for missing default inference function in imperative mode?

We can add a default for imperative later


Javascript errors when adding service into stack

Rancher Version:
v1.2.0-pre4-rc7
Docker Version:
Docker 1.11
OS and where are the hosts located? (cloud, bare metal, etc):
AWS EC2, Ubuntu 16
Setup Details: (single node rancher vs. HA rancher, internal DB vs. external DB)
Simple Docker (:v1.2.0-pre4-rc7)
I am using Google Chrome on MacOS.
Environment Type: (Cattle/Kubernetes/Swarm/Mesos)
Cattle
Steps to Reproduce:
Create service into an existing Stack.
Results:
Javascript errors:

component.js:68Uncaught TypeError: Cannot read property 'sort' of undefined
ember.prod.js:12611Uncaught TypeError: Cannot read property 'outlets' of undefined

Click on any tab (Volume, Security ...) will reload the page.
Expected:
No Javascript error, no page reload (especially when you are almost done..... grrrrrrr)

I am having the same issue.
Cattle + 1.2.0-pre4-rc7. Located on CentOS.

@ebuildy @TheDeadCode are you still seeing this in current RC?

Closing due to inactivity.


Icons are not aligned on MacOS.

The Setting Icon is not aligned with other icons in the right.
Idea Version: 2023.2.3
MacOS Version: MacOS Senoma
Other third-party themes has same issus. Not knowing whether this was a compatibility issue with lates idea version. Official Thems has no such problem.

Duplicate to #15. I will keep previous issue and close this one.


Load zip files

[x] Loads vti file from within zip (from data here https://kitware.github.io/vtk-js-datasets/list/volume_lidc_small.html)
[x] Loads nested zips
[ ] Loads other formats
[ ] Loads nested directories

Hmmm this package-lock.json change is suspiciously large. I'll see if that can be cut down.

You have a good overall approach! We will need to address the "file detection" approach, since we cannot rely on name/extension alone.

const [zips, rest] = partitionArray(fileList, isZip);
const extractedFiles = await extractAllFilesFromZips(zips) // flatten zipped files into single array
const allFiles = [...rest, ...extractedFiles]


Dynamic color code escapes for foreground/background

Saw https://github.com/jwilm/alacritty/issues/2497 and decided to take a crack at it
Recursively causes os dispatch to parse the next
parameters, as if they were entered with their
own escape codes
Not too familiar with rust but seems like this
would be tail recursive
before:

after:

Got it, thanks for the helpful explanation. Checked out some behaviors on xterm; this revision should have similar behavior.
Given a starting escape code, you can get (via ?) or set (via color); this uses the ordering in NamedColor. I added cursor support since that case was similar; had to switch the order of Cursor and CursorText.
since only fg, bg, and cursor were available and NamedColors started to go into the dim colors, there is an explicit check to end set/get at the Cursor value.
Examples:
querying fg, bg
bash-3.2$ echo -e '\033]10;?;?\007'

bash-3.2$ 10;rgb:c5/c8/c610;rgb:31/35/38

set fg, get bg, verify fg is different
bash-3.2$ echo -e '\033]10;#4eeeee;?\007'

bash-3.2$ 10;rgb:31/35/38

bash-3.2$ echo -e '\033]10;?\007'

bash-3.2$ 10;rgb:4e/ee/ee

on xterm, malformed colors were just skipped, similar behavior:
skip fg, get bg
bash-3.2$ echo -e '\033]10;blah;?\007'

bash-3.2$ 10;rgb:31/35/38

setting cursor...
bash-3.2$ echo -e '\033]12;?\007'
bash-3.2$ 12;rgb:0/0/0
bash-3.2$ echo -e '\033]12;#4eeeee\007'
bash-3.2$ echo -e '\033]12;?\007'
bash-3.2$ 12;rgb:4e/ee/ee

all three...
bash-3.2$ echo -e '\033]10;?;?;?\007'
bash-3.2$ 10;rgb:c5/c8/c610;rgb:31/35/3810;rgb:4e/ee/ee
bash-3.2$ echo -e '\033]10;#ffffff;#000000;#000000\007'

Those commands work as it is right now on my end (bash in OSX) - what are you using where it doesn't work?
# Start with white foreground, black background
printf '\e]10;rgb:ff/ff/ff;rgb:00/00/00\007'

# Should print escape for setting first color and set the second
printf '\e]10;?;rgb:ff/00/00\007'   # Sets background to red
^[]10;rgb:ff/ff/ff^G       # Returns escape code for foreground

# Reset
printf '\e]10;rgb:ff/ff/ff;rgb:00/00/00\007'

# Should print escape for setting second color and set the first
printf '\e]10;rgb:ff/00/00;?\007'         # Sets foreground to red
^[]10;rgb:0/0/0^G      # Escape code for background

# Reset (also set third color)
printf '\e]10;rgb:ff/ff/ff;rgb:00/00/00;rgb:ee/ee/ee\007'

# Should print escape for setting first and third color and set the second
printf '\e]10;?;rgb:ff/00/00;?\007'
^[]10;rgb:ff/ff/ff^G^[]10;rgb:ee/ee/ee^G # Escapes for first and third color

used this script to capture output with character representations of escape/bell codes
#!/bin/sh
oldstty=$(stty -g)

# What to query?
query=$1

stty raw -echo min 0 time 0
printf "$1"

sleep 0.00000001

read -r answer
echo $answer | cat -v
stty $oldstty

Take a look at the output of your commands:
# Should print escape for setting second color and set the first
printf '\e]10;rgb:ff/00/00;?\007'         # Sets foreground to red
^[]10;rgb:0/0/0^G      # Escape code for background

This should start with the escape '\e]11', not '\e]10'. Your example would just return the escape for setting the first color again.
Same here, the escapes should start with 10 and 12:

# Should print escape for setting first and third color and set the second
printf '\e]10;?;rgb:ff/00/00;?\007'
^[]10;rgb:ff/ff/ff^G^[]10;rgb:ee/ee/ee^G # Escapes for first and third color

Ah, thanks. This should work now
printf '\e]10;rgb:ff/00/00;?\007'
^[]11;rgb:0/0/0^G                          # Second color

printf '\e]10;rgb:ff/00/00;?\007'
^[]10;rgb:ff/ff/ff^G^[]12;rgb:0/0/0^G  # First, third color


CertifyVuln should be scanner/db-agnostic

Currently CertifyVuln and IsVulnerability are somewhat intertwingly and presume a closed-world existing of OSV, CVE and GHSA.
While OSV ultimately is backed by many other datasources, GUAC should either explicitly support zero ecosystems, or absolutely every ecosystem.
Instead of maintaining an every-increasing set of unioned types for every new scanner/db/ecosystem that provides vulnerability information, move towards using Vulnerability URLs or vURLs (invented here, not an industry term).
Collectors could exist and connect via collectsub-like facilities, handling any recognizable vURL that choose to.
General format could be vuln://<general-type>/<specific-details>. I suspect we could forbid qualifiers/parameters, and require exactly a path.
Examples:
CVE, using path separator: vuln://cve/2023/8675
OSV, representing its knowledge of a GHSA: vuln://osv/GHSA-205hk
Random vendor: vuln://snyk/SN-whatever

Thanks @bobmcwhirter for opening the issue. This is a good start for the vURLs format. For the <specific-details>, I think we should make it a standard format that all can follow. Just having it be the vulnerability ID (or vendor vulnerability ID) would make sense. Leaving it ambiguous might bite us later when we want to parse.
This could follow the similar "trie" representation that we use for packages and sources. Allowing for various types to be created in the future without having to create new node types.

Yah, I only mentioned year for CVE due to the fact GUAC is already treating it special, somewhat.

Yeah, I don't recall the use case we had for adding year as a separate field to the CVE node. Can be removed as there is nothing it is currently used for.

+1 to having a purl-like schema for vulnerabilities.
I think we wanted to be able to retrieve all CVEs within a single year at some point (for statistics maybe?) but I think this should be pushed out to the user code

It should be a vURI not vURL.
https://hachyderm.io/@bobmcwhirter/110772282108669965

You rock, thanks!

work has started for this and will go into https://github.com/guacsec/guac/tree/vuln-gql-change branch for the time being (as it is a breaking change)


Any code to get Pose Estimation image?

Thanks for your nice work.
I have read your paper, but I could not find any code to generate Fig. 9 and Fig. 10 in this repo.
Could you please give me any hints? Thanks a lot.

Hi, sorry for the very late response.
``
The code is in MATLAB, and it is a bit ad-hoc to the keypoint structure we employ.  If you use other keypoints, like the ones provided here  you might need to change the code.
I've tried to simplify the code, because it uses many structures to automatically generate the code.
First of all, I rearranged the original keypoints to fit this "corners.mat" structure.
Next, for reach image, I obtain the image locations of the corners, based on the predicted (or ground-truth) quaternion and position.
corners1_im = world_to_image(corners1, data.cam, quat, pos);
corners2_im = world_to_image(corners2, data.cam, quat, pos);
corners3_im = world_to_image(corners3, data.cam, quat, pos);
corners4_im = world_to_image(corners4, data.cam, quat, pos);
corners5_im = world_to_image(corners5, data.cam, quat, pos);

where,
function [corners_im] = world_to_image(corners, cam ,quat, pos)
k  = cam.cameraMatrix;
dcm  = quat2dcm(quat);
pos_r  = dcm*pos;
corners_cam = dcm'*(corners+pos_r);
corners_im  = k*(corners_cam./corners_cam(3,:));
corners_im   = corners_im(1:2,:);
end

Finally, we plot it employing a imshow and overlaying lines of the corners

linestyle = '--';
linewidth= 5;
colorcode1 = '#64B5F6';
markersize = 8;

imshow(img)
hold on
plot(corners1_im(1,:),corners1_im(2,:),'Color',colorcode1,'LineStyle',linestyle,'LineWidth',linewidth,'Marker','o','MarkerFaceColor',colorcode1,'MarkerSize',markersize)
plot(corners2_im(1,:),corners2_im(2,:),'Color',colorcode1,'LineStyle',linestyle,'LineWidth',linewidth,'Marker','o','MarkerFaceColor',colorcode1,'MarkerSize',markersize)
plot(corners3_im(1,:),corners3_im(2,:),'Color',colorcode1,'LineStyle',linestyle,'LineWidth',linewidth,'Marker','o','MarkerFaceColor',colorcode1,'MarkerSize',markersize)
plot(corners4_im(1,:),corners4_im(2,:),'Color',colorcode1,'LineStyle',linestyle,'LineWidth',linewidth,'Marker','o','MarkerFaceColor',colorcode1,'MarkerSize',markersize)
plot(corners5_im(1,:),corners5_im(2,:),'Color',colorcode1,'LineStyle',linestyle,'LineWidth',linewidth,'Marker','o','MarkerFaceColor',colorcode1,'MarkerSize',markersize)

Hope it helps.
Btw, I'm planning to post a tutorial soon with some simple, base code for spacecraft pose estimation. I plan to include some easier to use code to plot images. So please stay tuned

Thank you very much for your response and share the code with me.


Added new rules

I have added two new rules ; After and Before

$rules = [
   'y' => 'after:tomorrow',
   'z' => 'before:yesterday
]

Instead of tomorrow, you can also pass in anything that can be converted to a date timestamp by strtotime

That's good. Thanks


Will not compile

Makefile.am:78: error: CPPFLAGS_FOR_BUILD must be set with '=' before using '+='
Makefile.am:79: error: CFLAGS_FOR_BUILD must be set with '=' before using '+='

Please read manual:
https://github.com/CriptoReal/Criptoreal/blob/master/doc/build-unix.md#dependency-build-instructions-ubuntu--debian
You have dependencies issues.


merge from template-sync/template-arlac77-github

.github/workflows/ci.yml

chore: add linux (jobs.release.runs-on)

.github/workflows/codeql_analysis.yml

chore: (jobs.analyze.steps)
chore: add git checkout (jobs.analyze.steps.name)
chore: (jobs.analyze.steps)
chore: (jobs.analyze.steps)
chore: (jobs.analyze.steps)
chore: (jobs.analyze.steps)

.github/workflows/update_package_lock.yml

chore: (jobs.update_package_lock.steps)
chore: (jobs.update_package_lock.steps)
chore: (jobs.update_package_lock.steps)
chore: (jobs.update_package_lock.steps)
chore: (jobs.update_package_lock.steps)

.github/workflows/update_readme_api.yml

chore: (jobs.update_readme_api.steps)
chore: (jobs.update_readme_api.steps)
chore: (jobs.update_readme_api.steps)

Pull Request Test Coverage Report for Build<PHONE_NUMBER>5
Warning: This coverage report may be inaccurate.
This pull request's base commit is no longer the HEAD commit of its target branch. This means it includes changes from outside the original pull request, including, potentially, unrelated coverage changes.

For more information on this, see Tracking coverage changes with pull request builds.
To avoid this issue with future PRs, see these Recommended CI Configurations.
For a quick fix, rebase this PR at GitHub. Your next report should be accurate.

Details

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

Totals

Change from base Build<PHONE_NUMBER>0:
0.0%

Covered Lines:
279

Relevant Lines:
322

💛  - Coveralls


Missing a parameter -lrc in the tutorial

Hi, I am trying to follow the tutorial to train the DeepHiC model but met the following error:
python data_generate.py -hr 10kb -lr 40kb -s
all -chunk 40 -stride 40 -bound 201 -scale 1 -c GM12878_primary
usage: data_generate.py -c CELL_LINE -hr
{5kb,10kb,25kb,50kb,100kb,250kb,500kb,1mb} -lr LOW_RES
-lrc LR_CUTOFF [-s {all,train,valid}] -chunk CHUNK
-stride STRIDE -bound BOUND -scale SCALE
[-type {max,avg}] [--help]
data_generate.py: error: the following arguments are required: -lrc
Could you provide your default lrc parameter? Thanks ahead!
Gang

Hello, Sorry for forgetting to update the README file.
For Rao's Hi-C, we used 100 for 1/16 downsampled data, 80 for 1/25 downsampled data, 50 for 1/50 downsampled data and 25 for 1/100 downsampled data.
Thanks for you feedback!

Thanks for your quick response and the clarification! Gang


Unable to sync main data via flow

I am using the syncMainData flow but mainData doesn't update the torrents list. If I remove a torrent from the client, it works and updates the torrentsRemoved list.
I also tried using the getTorrents() method with asFlow(), it also did not give any updates to the list of torrents in qbit app.
Not sure what am I doing wrong here. Any help would be appreciated!
client.syncMainData().collect { mainData ->
            _uiState.update { state -> state.copy(dataLoading = false, data = mainData) }
            Log.i("syncData", mainData.toString())
        }

Same issue happens with the categories list also. Also on which API version is this client based on?

Thanks for the report, please try version 0.5.2.  syncMainData() and torrentFlow(hash) are the only methods which will provide updated models.

Thanks for the report, please try version 0.5.2. syncMainData() and torrentFlow(hash) are the only methods which will provide updated models.

I'll try the new version and report back, thanks for the quick response!

torrents and tags are syncing perfectly now! Also, when I'm adding a category it's still not updating the categories array in mainData (Deletion of category gets updated in the categoriesRemoved array).

Sorry, missed a bit for merging new category items.  Try 0.5.3 which will be available shortly, or 0.5.4-SNAPSHOT is available now.

Sorry, missed a bit for merging new category items. Try 0.5.3 which will be available shortly, or 0.5.4-SNAPSHOT is available now.

Yup, it's working fine now. Thank you for the quick fixes!

Hey @DrewCarlson,
When I'm collecting the syncMainData() flow, I am unable to catch the exceptions thrown by the Flow.
When the data is loaded through the client once and if I close the qbit server, it throws an exception.
E/AndroidRuntime: FATAL EXCEPTION: DefaultDispatcher-worker-6
    Process: dev.yashgarg.qbit, PID: 3092
    qbittorrent.QBittorrentException: io.ktor.client.network.sockets.ConnectTimeoutException: Connect timeout has expired [url=http://<IP_ADDRESS>:55455/api/v2/sync/maindata?rid=15, connect_timeout=3000 ms]
        at qbittorrent.ErrorTransformer$install$2.invokeSuspend(ErrorTransformer.kt:33)
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
        at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:141)
        at io.ktor.util.pipeline.SuspendFunctionGun.access$resumeRootWith(SuspendFunctionGun.kt:14)
        at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:58)
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
        at io.ktor.util.pipeline.SuspendFunctionGun.resumeRootWith(SuspendFunctionGun.kt:141)
        at io.ktor.util.pipeline.SuspendFunctionGun.access$resumeRootWith(SuspendFunctionGun.kt:14)
        at io.ktor.util.pipeline.SuspendFunctionGun$continuation$1.resumeWith(SuspendFunctionGun.kt:58)
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:46)
        at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
        at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:570)
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:749)
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677)
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664)
    	Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [StandaloneCoroutine{Cancelling}@7cf63d0, Dispatchers.Default]
    Caused by: io.ktor.client.network.sockets.ConnectTimeoutException: Connect timeout has expired [url=http://<IP_ADDRESS>:55455/api/v2/sync/maindata?rid=15, connect_timeout=3000 ms]
        at io.ktor.client.plugins.HttpTimeoutKt.ConnectTimeoutException(HttpTimeout.kt:209)
        at io.ktor.client.engine.android.AndroidURLConnectionUtilsKt.timeoutAwareConnection(AndroidURLConnectionUtils.kt:62)
        at io.ktor.client.engine.android.AndroidURLConnectionUtilsKt$timeoutAwareConnection$1.invokeSuspend(Unknown Source:13)
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
        at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
        at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:42)
        at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95)
        	... 4 more
     Caused by: java.net.SocketTimeoutException: failed to connect to /<IP_ADDRESS> (port 55455) from /<IP_ADDRESS> (port 36402) after 3000ms
        at libcore.io.IoBridge.connectErrno(IoBridge.java:236)
        at libcore.io.IoBridge.connect(IoBridge.java:180)
        at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
        at java.net.Socket.connect(Socket.java:621)
        at com.android.okhttp.internal.Platform.connectSocket(Platform.java:182)
        at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:145)
        at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:116)
        at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:186)
        at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:128)
        at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:97)
        at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:289)
        at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:232)
E/AndroidRuntime:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:465)
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:411)
        at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:542)
        at io.ktor.client.engine.android.AndroidClientEngine$execute$2.invoke(AndroidClientEngine.kt:91)
        at io.ktor.client.engine.android.AndroidClientEngine$execute$2.invoke(AndroidClientEngine.kt:90)
        at io.ktor.client.engine.android.AndroidURLConnectionUtilsKt.timeoutAwareConnection(AndroidURLConnectionUtils.kt:57)
        at io.ktor.client.engine.android.AndroidClientEngine.execute(AndroidClientEngine.kt:90)
        at io.ktor.client.engine.HttpClientEngine$executeWithinCallContext$2.invokeSuspend(HttpClientEngine.kt:99)

I tried doing the following:
client.syncMainData()
      .onEach { data -> updateData(data) }
      .catch { err -> emitException(err) }
      .collect()

Also tried adding a CoroutineExceptionHandler, but got no success!

Try v0.6.0 and let me know how it works for your application.
The original mechanism for transforming Ktor/HTTP errors was built for Ktor v1 and no longer produces the desired results.  I've reworked all error handling and the syncing flows now throw errors to use with operators like catch and retry.

Try v0.6.0 and let me know how it works for your application.
The original mechanism for transforming Ktor/HTTP errors was built for Ktor v1 and no longer produces the desired results. I've reworked all error handling and the syncing flows now throw errors to use with operators like catch and retry.

Thank you so much! I'll test and let you know.

Or try v0.6.1.  I've added support for uploading torrent files:
client.addTorrent {
    torrents.add("~/Downloads/my.torrent")
    // Or read files manually:
    // rawTorrents["my.torrent"] = getFileBytes()
}

Note that file paths in torrents are not validated, expect QBittorrentExceptions with a 400 status if you do not check existence and readability.

Try v0.6.0 and let me know how it works for your application.
The original mechanism for transforming Ktor/HTTP errors was built for Ktor v1 and no longer produces the desired results. I've reworked all error handling and the syncing flows now throw errors to use with operators like catch and retry.

The app doesn't crash like earlier now, the data sync just stops. But no error is shown in Log through the Flow catch block or with a CoroutineExceptionHandler.

Try v0.6.2, I've fixed and added tests for the sync flow.  There is also a workaround for a KTOR bug that caused authentication to loop until the session token was alphanumeric.

Try v0.6.2, I've fixed and added tests for the sync flow. There is also a workaround for a KTOR bug that caused authentication to loop until the session token was alphanumeric.

It works fine now!

I am facing an issue when I am trying to reconnect the client after it fails once using a SwipeRefreshLayout. After refreshing, I get the client version successfully from client but it still throws a CancellationException which is not catchable as it is wrapped inside QbittorrentException.
I/ClientManager: Client App Version - v<IP_ADDRESS>
E/ClientManager: qbittorrent.QBittorrentException: java.util.concurrent.CancellationException: Engine failed

How should I handle this?

Can you share what http engine you are using and what the request code looks like?  All exceptions from the client will be a QBittorrentException containing either the cause exception or a failed http response.
For the sync endpoints, you can use retry/catch to handle the exceptions:
client.observeMainData()
        .retry { throwable ->
            (throwable as? QBittorrentException).code != 401
        }
        .collect()

Can you share what http engine you are using and what the request code looks like? All exceptions from the client will be a QBittorrentException containing either the cause exception or a failed http response.
For the sync endpoints, you can use retry/catch to handle the exceptions:
client.observeMainData()
        .retry { throwable ->
            (throwable as? QBittorrentException)?.response?.status?.code != 401
        }
        .collect()

Sorry for the late response! Not getting much time these days, I'll try the retry functionality and get back to you. Thanks

Is there any method through which I can get the trackers list? Like the one mentioned in the WebAPI.

There is now, I've added client.getTrackers(hash) in v1.0.0-alpha02

There is now, I've added client.getTrackers(hash) in v1.0.0-alpha02

Thank you for the fast changes! Appreciate it.

Is there any method for getting the peers data too? Reference

Try observeTorrentPeers(hash) in v1.0.0-alpha03

When I'm trying to log the exception in observeTorrent() flow, I am not getting anything in the logs. I am removing the file from the server and checking in app to see if it throws an exception for file not found.
client.observeTorrent(hash)
    .catch { throwable ->
        Log.e(this::class.simpleName, throwable.toString())
        _uiState.update { state ->
            state.copy(
                error = FileNotFoundException(throwable.message),
                loading = false,
            )
        }
    }
    .collect { info ->
        // ui state updates here
    }

When the torrent hash you subscribe to does not exist on the server or is removed while subscribed, the Flow completes normally with no error.  You should only get error messages when something is not working correctly: i.e. the QBTClient is sending bad data or the server is unable to handle requests.
Seems like you want something like this to handle when the torrent is removed unexpectedly from the server/a different client:
client.observeTorrent(hash)
    .onEach { info ->
       // TODO: Handle ui state updates here
    }
    .catch { /* Optionally handle exception here or do nothing, ensuring `collect()` never throws. */ }
    .onComplete { throwable ->
       if (throwable == null) {
           // The file has been removed
       } else {
           // Process throwable, add error to ui state
       }
    }
    .collect()

If you're seeing exceptions related to the syncing API requests thrown that are not caught in a flow like above, let me know but you can try an alternative Ktor client engine like CIO or OkHttp.

👍  FYI this behavior for removed torrents was just the obvious approach to keep the syncing logic simple (and free of too much HTTP handling code).  If you find it hard to get the desired result as is, I'm open to adding a TorrentNotFoundException : QBittorrentException for this case.

👍 FYI this behavior for removed torrents was just the obvious approach to keep the syncing logic simple (and free of too much HTTP handling code). If you find it hard to get the desired result as is, I'm open to adding a TorrentNotFoundException : QBittorrentException for this case.

No issues, I used the onCompletion { ... } block for managing the torrent not found case. It works fine with that, I am just passing a custom exception when throwable is null in onCompletion to the ui state.

Try observeTorrentPeers(hash) in v1.0.0-alpha03

I tried this method but I am not getting any data in the flow.

Can you try adding the Ktor client logger and sharing the logs after collecting the peers flow?
I originally only tested the new method in the demo program which worked as intended, I've since added a basic test which passes https://github.com/DrewCarlson/qBittorrent-Kotlin/commit/68f702f8234e9cc03fb6d04690b53ebaaaefb628

Can you try adding the Ktor client logger and sharing the logs after collecting the peers flow?
I originally only tested the new method in the demo program which worked as intended, I've since added a basic test which passes 68f702f

It works fine, my bad. The flow didn't start that's why it wasn't getting the data!

Can you share what http engine you are using and what the request code looks like? All exceptions from the client will be a QBittorrentException containing either the cause exception or a failed http response.
For the sync endpoints, you can use retry/catch to handle the exceptions:
client.observeMainData()
        .retry { throwable ->
            (throwable as? QBittorrentException)?.response?.status?.code != 401
        }
        .collect()

I am trying to retry the connection with main data flow, but it keeps showing retrying and does not connect with the client.

Do you have any idea how can I possibly solve this? Thanks!
Code Reference

It would be helpful to have the Ktor logging feature enabled and share the complete logs for your scenario.

Try the latest snapshot build, your existing code should work.

Try the latest snapshot build, your existing code should work.

Okay, will try. Thanks!

@DrewCarlson I am unable to use HTTPS domains for connection, I think the code below might be an issue regarding that. It will always connect with HTTP even if it's an HTTPS domain.
https://github.com/DrewCarlson/qBittorrent-Kotlin/blob/8a89af102a03b91262033ea8179f537f61d1d03c/client/src/commonMain/kotlin/QBittorrentClient.kt#L95

I'm getting "Engine Failed" error, probably it's failing to parse some JSON data. Using the latest SNAPSHOT build.
lb.y: java.util.concurrent.CancellationException: Engine failed
	at lb.w.d(SourceFile:320)
	at lb.e.f(Unknown Source:12)
	at da.a.s(Unknown Source:8)
	at q9.j.h(SourceFile:69)
	at q9.j.g(SourceFile:16)
	at q9.i.s(SourceFile:23)
	at da.a.s(Unknown Source:31)
	at q9.j.h(SourceFile:69)
	at q9.j.g(SourceFile:16)
	at q9.i.s(SourceFile:23)
	at da.a.s(Unknown Source:31)
	at q9.j.h(SourceFile:69)
	at q9.j.g(SourceFile:16)
	at q9.i.s(SourceFile:23)
	at da.a.s(Unknown Source:31)
	at q9.j.h(SourceFile:69)
	at q9.i.s(SourceFile:18)
	at da.a.s(Unknown Source:31)
	at q9.j.h(SourceFile:69)
	at q9.i.s(SourceFile:18)
	at da.a.s(Unknown Source:31)
	at q9.j.h(SourceFile:69)
	at q9.i.s(SourceFile:18)
	at da.a.s(Unknown Source:31)
	at q9.j.h(SourceFile:69)
	at q9.i.s(SourceFile:18)
	at da.a.s(Unknown Source:31)
	at kotlinx.coroutines.l0.run(Unknown Source:102)
	at android.os.Handler.handleCallback(Handler.java:938)
	at android.os.Handler.dispatchMessage(Handler.java:99)
	at android.os.Looper.loopOnce(Looper.java:201)
	at android.os.Looper.loop(Looper.java:288)
	at android.app.ActivityThread.main(ActivityThread.java:7870)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
	Suppressed: kotlinx.coroutines.j0: [x1{Cancelling}@663d3a4, Dispatchers.Main.immediate]
Caused by: java.util.concurrent.CancellationException: Engine failed
	at z9.k.a(Unknown Source:2)
	at w8.k.a(SourceFile:19)
	at w8.k.W(SourceFile:17)
	at kotlinx.coroutines.p0.t(SourceFile:42)
	at kotlinx.coroutines.n1.H(SourceFile:97)
	at kotlinx.coroutines.n1.J(SourceFile:168)
	at kotlinx.coroutines.k1.t(SourceFile:25)
	at kotlinx.coroutines.n1.H(SourceFile:97)
	at kotlinx.coroutines.n1.J(SourceFile:168)
	at kotlinx.coroutines.n1.j0(SourceFile:220)
	at kotlinx.coroutines.n1.a0(SourceFile:5)
	at kotlinx.coroutines.a.s(SourceFile:14)
	at da.a.s(Unknown Source:31)
	at kotlinx.coroutines.l0.run(Unknown Source:102)
	at kotlinx.coroutines.internal.e.run(Unknown Source:12)
	at kotlinx.coroutines.scheduling.i.run(Unknown Source:2)
	at kotlinx.coroutines.scheduling.a.run(SourceFile:77)
Caused by: j9.f: Illegal input
	at k9.d.a(SourceFile:193)
	at j9.b.d(Unknown Source:73)
	at kotlinx.coroutines.flow.j.a(SourceFile:97)
	at j9.c.a(Unknown Source:13)
	at y9.p.S(SourceFile:73)
	at kotlinx.coroutines.d0.P(SourceFile:78)
	at q8.a.f(SourceFile:531)
	at q8.a.h(SourceFile:23)
	at q8.a.N(SourceFile:49)
	at q9.j.g(SourceFile:36)
	at q9.j.c(SourceFile:26)
	at q8.b.f(SourceFile:180)
	at q8.b.N(SourceFile:34)
	at q9.j.g(SourceFile:36)
	at q9.j.c(SourceFile:26)
	at q9.j.e(SourceFile:8)
	at w8.m.f(SourceFile:64)
	at w8.m.N(SourceFile:27)
	at q9.j.g(SourceFile:36)
	at q9.j.c(SourceFile:26)
	at q9.j.a(SourceFile:24)
	at q9.d.a(SourceFile:184)
	at r8.c.a(SourceFile:166)
	at kotlinx.coroutines.d0.C(SourceFile:76)
	at mb.i.a(SourceFile:279)
	at mb.f.f(Unknown Source:11)
	at da.a.s(Unknown Source:8)
	... 4 more
Caused by: db.i: Unexpected JSON token at offset 4289: Failed to parse int for input '2792450048' at path: $.peers['<IP_ADDRESS>:1031'].downloaded
JSON input: .....eed":0,"downloaded":2792450048,"files":"","flags":"d u I H X.....
	at y9.p.i(Unknown Source:32)
	at y9.p.h(Unknown Source:34)
	at db.z.o(SourceFile:62)
	at db.z.p(Unknown Source:12)
	at db.w.k(Unknown Source:35)
	at qa.p.D(Unknown Source:5)
	at nb.a0.e(SourceFile:151)
	at db.w.t(SourceFile:67)
	at qa.p.r(SourceFile:11)
	at db.w.r(SourceFile:49)
	at bb.r0.n(SourceFile:83)
	at bb.r0.k(Unknown Source:2)
	at bb.a.j(SourceFile:38)
	at bb.a.e(Unknown Source:5)
	at db.w.t(SourceFile:67)
	at qa.p.r(SourceFile:11)
	at db.w.r(SourceFile:49)
	at nb.d0.e(SourceFile:75)
	at db.w.t(SourceFile:67)
	at cb.b.b(SourceFile:25)
	at k9.d.a(SourceFile:102)
	... 30 more

I am facing an issue with the banPeers() method, I am passing a single peer in the format of ip:port but it keeps saying "Not Found" (I checked on the WebUI also and the peer is there).
I tried banning on the WebUI and inspecting the request, it also passes some hash in the parameters
curl 'https://my.domain/api/v2/transfer/banPeers?l9eimlmv' \
  ...
  --data-raw 'hash=b08752c972c90ec0ab2844629273908a178973ca&peers=<IP_ADDRESS>%3A62184' \
  --compressed

Below is the function I am using:
fun banPeer(peer: TorrentPeer) {
    val peerAddr = "${peer.ip}:${peer.port}"

    viewModelScope.launch {
        when (val result = runCatching { client.banPeers(listOf(peerAddr)) }) {
            is Ok -> _status.emit("Successfully banned $peerAddr")
            is Err -> _status.emit(result.error.message ?: "Failed to ban peer")
        }
    }
}

Please use a new issue for future problems, github becomes significantly less usable after about 10 comments.
So I'm not sure what the value of the hash parameter is, it's not documented https://github.com/qbittorrent/qBittorrent/wiki/WebUI-API-(qBittorrent-4.1)#ban-peers
I see that I've got an incorrect fragment in the peer URLs resulting in the 404. Will fix shortly.

Please use a new issue for future problems, github becomes significantly less usable after about 10 comments.
So I'm not sure what the value of the hash parameter is, it's not documented https://github.com/qbittorrent/qBittorrent/wiki/WebUI-API-(qBittorrent-4.1)#ban-peers
I see that I've got an incorrect fragment in the peer URLs resulting in the 404. Will fix shortly.

Sure, I'll create a new issue next time onwards.
Okay, I'll try checking after your fix if it works.

I've pushed the URL fix (snapshots take ~10 minutes to publish), let me know if it works without the hash.  The API docs have some conflicting/missing information so there may be other endpoints that need updates, I'll look at qBittorrent source code and confirm things later.

I've pushed the URL fix (snapshots take ~10 minutes to publish), let me know if it works without the hash.  The API docs have some conflicting/missing information so there may be other endpoints that need updates, I'll look at qBittorrent source code and confirm things later.

Sure, I'll update if it works.

I've pushed the URL fix (snapshots take ~10 minutes to publish), let me know if it works without the hash. The API docs have some conflicting/missing information so there may be other endpoints that need updates, I'll look at qBittorrent source code and confirm things later.

It's working now with the updated endpoint.


External DNS for cloudflare doesn't create records for all ingress addresses

Steps to reproduce:

Start a kubernetes cluster with 3 nodes.
Run cloudflare yaml with RBAC

apiVersion: v1
kind: ServiceAccount
metadata:
  name: external-dns
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: external-dns
rules:
- apiGroups: [""]
  resources: ["services"]
  verbs: ["get","watch","list"]
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get","watch","list"]
- apiGroups: ["extensions"]
  resources: ["ingresses"]
  verbs: ["get","watch","list"]
- apiGroups: [""]
  resources: ["nodes"]
  verbs: ["list"]
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: external-dns-viewer
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: external-dns
subjects:
- kind: ServiceAccount
  name: external-dns
  namespace: default
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: external-dns
spec:
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: external-dns
    spec:
      serviceAccountName: external-dns
      containers:
      - name: external-dns
        image: registry.opensource.zalan.do/teapot/external-dns:latest
        args:
        - --source=ingress # ingress is also possible
        - --domain-filter=binbashtheory.com # (optional) limit to only example.com domains; change to match the zone created above.
        - --provider=cloudflare
        - --cloudflare-proxied # (optional) enable the proxy feature of Cloudflare (DDOS protection, CDN...)
        env:
        - name: CF_API_KEY
          value: "xxxxxx"
        - name: CF_API_EMAIL
          value: "xxxx@xxxx"

Create a deployment,service,ingress

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx
spec:
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx
        name: nginx
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-ingress
  annotations:
    external-dns.alpha.kubernetes.io/hostname: test5.binbashtheory.com
    external-dns.alpha.kubernetes.io/ttl: "120" #optional
spec:
  rules:
  - http:
      paths:
      - path: /nginx
        backend:
          serviceName: nginx
          servicePort: 80

Results:
I can see that external dns picked up the domain test5.binbashtheory.com and created A record for it:
time="2019-02-01T22:58:41Z" level=info msg="Changing record." action=CREATE record=test5.binbashtheory.com ttl=120 type=A zone=5878027aaf0088c8e10fc402fc1ce0e6
time="2019-02-01T22:58:41Z" level=info msg="Changing record." action=CREATE record=test5.binbashtheory.com ttl=1 type=TXT zone=5878027aaf0088c8e10fc402fc1ce0e6
time="2019-02-01T22:59:41Z" level=info msg="Changing record." action=UPDATE record=test5.binbashtheory.com ttl=120 type=A zone=5878027aaf0088c8e10fc402fc1ce0e6
time="2019-02-01T22:59:41Z" level=info msg="Changing record." action=UPDATE record=test5.binbashtheory.com ttl=1 type=TXT zone=5878027aaf0088c8e10fc402fc1ce0e6
time="2019-02-01T23:00:41Z" level=info msg="Changing record." action=UPDATE record=test5.binbashtheory.com ttl=120 type=A zone=5878027aaf0088c8e10fc402fc1ce0e6
time="2019-02-01T23:00:42Z" level=info msg="Changing record." action=UPDATE record=test5.binbashtheory.com ttl=1 type=TXT zone=5878027aaf0088c8e10fc402fc1ce0e6
time="2019-02-01T23:01:41Z" level=info msg="Changing record." action=UPDATE record=test5.binbashtheory.com ttl=120 type=A zone=5878027aaf0088c8e10fc402fc1ce0e6

however it only created one A record and not 3 as expected:
kubectl get ingress
NAME            HOSTS     ADDRESS                                    PORTS     AGE
nginx-ingress   *         <IP_ADDRESS>,<IP_ADDRESS>,<IP_ADDRESS>   80        10m

For info support for multiple targets was never introduced for the Cloudflare provider (amongst others). Currently, just one target endpoint is selected (deterministically) to be set in the record (https://github.com/kubernetes-incubator/external-dns/blob/master/provider/cloudflare.go#L319)

@Evesy is there a plan to add support for more than one record?

I may be speaking out of term (I'm not a maintainer) but I believe the Cloudflare provider (amongst others) are considered community maintained, so support for more than one record will only exist if someone contributes it (I believe it was initially added only for the Google provider by a community member for example).
I did try to tackle it myself but it appeared that there were further changes needed in the core codebase (rather than just in the provider), and it was beyond my currently limited Go knowledge, so I'd need to pair with someone to guide me if I were to get it done.
cc/ @njuettner for maybe a more official answer

@Evesy thanks for responding 👍 , this basically sums up what I would say. Cloudflare as a provider was started written by me and was only used for my personal things which I run on Cloudflare. The first implementation was already enough for my use case.
If someone from the community is willing to contribute this we can have a look and see if we can merge it 🙂. However core changes are difficult and would probably affect other providers so here we have to be really careful.


Storage mount tweaks

Removes mount helper functions that were in the storage package and copies them into both main and storage/drivers packages as unexported functions.
This was needed as the new storage/drivers drivers need access to these functions, but we do not want to export them when the only external users is the old storage layer.
The exception to this is TryMount and TryUnmount which is used from the patches.go file and will need to remain after the old storage layer is removed, so these are left as exported in storage/drivers pkg.

jenkins: test this please

Testsuite passed


Review final names for each Resource Model

Decide where to remove prefix "BC Fossil" - some need to retain the word fossil such as "Fossil Site", not just "Site"

Duplicated by #505


Why the trajectory in three dimension drifts a lot?

Hi
I apologize to open an issue here. I have a question rather than an issue.
If you plot the 3D pose, the trajectory starts to drift sooner in Z direction very quickly! Could you help me to understand why it happens and how to solve it?
I am attaching a file that shows ground truth vs estimated trajectory. The line in orange is ground truth and the line in blue is trajectory.

Hi mitul93,
You are welcome to post it here. I also noticed that the z-direction estimation has more drift, it might due to the FOV in the z-direction is narrower.  I will look into some other reported results to see if this is a general problem or it is my code specific.
Thanks!

HiI run this code on the 00 sequence of KITTI dataset.

Hi
I run this code on the 00 sequence of KITTI dataset. And I found that the Y-direction estimation also has more drift.I am attaching a picture that shows ground truth vs estimated trajectory. The line in green is ground truth and the line in blue is estimated trajectory.

Hi weiningwei,
The y-direction "error" seems more due to your 3D view. Try to project the trajectory onto the x-y plane and plot to see if it gets better.
Best,
Zhenghao

Hi
I run this code on the 00 sequence of KITTI dataset. And I found that the Y-direction estimation also has more drift.I am attaching a picture that shows ground truth vs estimated trajectory. The line in green is ground truth and the line in blue is estimated trajectory.

Hi weiningwei,
The y-direction "error" seems more due to your 3D view. Try to project the trajectory onto the x-y plane and plot to see if it gets better.
Best,
Zhenghao

Hi, Zhenghao.
Thank you for the reply.I project the trajectory onto the x-y plane and plot it. It also drifts a lot.
To save the trajectory,I add some code on your original code.

Best,
weiningwei

Update :
I'm writing a master's thesis related to this topic. Hence, I opened up the issue in the first place.
I implemented a VO algorithm using descriptor-based feature tracking instead of optical flow.
I have observed high drift on Z in both cases. I have solved the drift problem by using ORB extractor function from ORB-SLAM2 github repository (https://github.com/raulmur/ORB_SLAM2).
The ORB extractor from ORB-SLAM2 uses 30x30 grid to extract features evenly. This means that the tracked features are distributed evenly across the image. cv::ORB does not use grid and I've observed that the ORB feature points are clustered which are far from the camera. The depth estimation in stereo camera for far features have more uncertainty in depth estimation. This is the explanation that makes sense to me.
** cv::ORB() vs ORB_SLAM2::ORBextractor()**
The following image shows feature points by cv::ORB()

The following image shows feature points by ORB_SLAM2::ORBextractor().

Hi
I run this code on the 00 sequence of KITTI dataset. And I found that the Y-direction estimation also has more drift.I am attaching a picture that shows ground truth vs estimated trajectory. The line in green is ground truth and the line in blue is estimated trajectory.

Hi weiningwei,
The y-direction "error" seems more due to your 3D view. Try to project the trajectory onto the x-y plane and plot to see if it gets better.
Best,
Zhenghao

Hi, Zhenghao.
Thank you for the reply.I project the trajectory onto the x-y plane and plot it. It also drifts a lot.
To save the trajectory,I add some code on your original code.

Best,
weiningwei

Hi weiningwei,
It looks like you are actually projecting to x-z plane (lets say z is the up-down in the real-world). Also you can check mitul93 's approach to use a more evenly distributed feature to get better results.
Best,
Zhenghao

Hi
I run this code on the 00 sequence of KITTI dataset. And I found that the Y-direction estimation also has more drift.I am attaching a picture that shows ground truth vs estimated trajectory. The line in green is ground truth and the line in blue is estimated trajectory.

Hi weiningwei,
The y-direction "error" seems more due to your 3D view. Try to project the trajectory onto the x-y plane and plot to see if it gets better.
Best,
Zhenghao

Hi, Zhenghao.
Thank you for the reply.I project the trajectory onto the x-y plane and plot it. It also drifts a lot.
To save the trajectory,I add some code on your original code.

Best,
weiningwei

Hi weiningwei,
It looks like you are actually projecting to x-z plane (lets say z is the up-down in the real-world). Also you can check mitul93 's approach to use a more evenly distributed feature to get better results.
Best,
Zhenghao

Update :
I'm writing a master's thesis related to this topic. Hence, I opened up the issue in the first place.
I implemented a VO algorithm using descriptor-based feature tracking instead of optical flow.
I have observed high drift on Z in both cases. I have solved the drift problem by using ORB extractor function from ORB-SLAM2 github repository (https://github.com/raulmur/ORB_SLAM2).
The ORB extractor from ORB-SLAM2 uses 30x30 grid to extract features evenly. This means that the tracked features are distributed evenly across the image. cv::ORB does not use a grid and I've observed that the ORB feature points are clustered which are far from the camera. The depth estimation in stereo camera for far features has more uncertainty in-depth estimation. This is the explanation that makes sense to me.
cv::ORB() vs ORB_SLAM2::ORBextractor()
The following image shows feature points by cv::ORB()

The following image shows feature points by ORB_SLAM2::ORBextractor().

The pose estimation result comparison
These results are from my thesis. They are not from this repository. I'm attaching the results just to give you an idea.
The blue and green lines are with cv::ORB() function and the purple and pink lines are with ORB_SLAM2::ORBextractor(). Redline shows the ground truth. Note how the latter has a really good estimation in Z direction.

I the issue I opened in this repository can be solved by using ORB_SLAM2::ORBextractor() class. I have not verified it and I don't think I will have time to verify it. I'm just pointing this out as a suggestion.

Thanks a lot Mitul Vekariya! The evenly distributed ORB feature does improve the results a lot. The idea is similar to bucketing for an more even spatial feature distribution.


WinUI 3 VS Overview Page not as Helpful

Describe the bug
When you create a new WinUI 3 Desktop app, the landing page that Visual Studio opens isn't as helpful as the previous UWP app based one.
The WinUI 3 one is much more focused on the MSIX packaging project vs. the app development aspect of creating a WinUI 3 app. It's missing links to tutorials/docs about building with WinUI 3 as well as other helpful projects like Windows Template Studio and the Windows Community Toolkit.
Steps to reproduce the bug
Steps to reproduce the behavior:

Open Visual Studio
Start a new WinUI 3 Packaged Desktop App

Expected behavior
Links to resources useful to creating a new Windows App SDK App.
Screenshots
File New WinUI 3 Desktop Project Overview:

Previous UWP Overview:

Version Info

NuGet package version: Windows App SDK 0.8.1
VS 2019 16.9.8

Windows app type:

UWP
Win32

Yes

Windows 10 version
Saw the problem?

21H1 (19043)
Yes

October 2020 Update (19042)

May 2020 Update (19041)

November 2019 Update (18363)

May 2019 Update (18362)

October 2018 Update (17763)

April 2018 Update (17134)

Fall Creators Update (16299)

Creators Update (15063)

Device form factor
Saw the problem?

Desktop
Yes

Xbox

Surface Hub

IoT

@alwu-msft  and @anawishnoff FYI

Thanks for the feedback! This is definitely an area we'd like to improve.


Docker does not conform to the Docker registry spec wrt token auth

$ docker version | sed -n '/Server:/,$p'
Server:
 Engine:
  Version:      18.05.0-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.10.2
  Git commit:   f150324782
  Built:        Wed May 16 22:28:17 2018
  OS/Arch:      linux/amd64
  Experimental: false

I'm running docker push keppel.example.com/demo/alpine:test1 against the above Docker server, and observing what it does with mitmproxy. (The registry implementation is my own work-in-progress, Keppel as of commit https://github.com/sapcc/keppel/commit/5c52a007eebc44f3018295e041f2565362f20e06.)
First, it checks that the host named in the repository supports the Registry API (uninteresting request/response headers omitted for brevity):
> GET https://keppel.example.com/v2/
< 401 Unauthorized
< Www-Authenticate: Bearer<EMAIL_ADDRESS>
Then it does the following request for a token:
> GET<EMAIL_ADDRESS>> Authorization: Basic <base64-of-credentials>

This is in violation of the token auth spec. The spec does not allow the client to just make up scopes, and it also does not mention that the client is allowed to assume that realm and service stay the same across one registry.
Since ossification is a thing, I suggest that the spec be amended to reflect what Docker actually does (which is why I'm opening this issue here rather than on Docker).

I believe dockerd is trying to verify if your registry supports v2 protocol by doing a simple GET on /v2/ as per https://docs.docker.com/registry/spec/api/#api-version-check. Since it is not receiving a 200 it is falling back to v1 protocol which has been deprecated long time ago. I would suggest returning 200 on GET /v2/ and seeing how it behaves.

Are you sure? By that standard, Docker Hub does not support the v2 API:
$ curl -i https://registry-1.docker.io/v2/
HTTP/1.1 401 Unauthorized
Content-Type: application/json; charset=utf-8
Docker-Distribution-Api-Version: registry/2.0
Www-Authenticate: Bearer realm="https://auth.docker.io/token",service="registry.docker.io"
Date: Tue, 07 Aug 2018 08:39:06 GMT
Content-Length: 87
Strict-Transport-Security: max-age=31536000

{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":null}]}

I believe dockerd checks the Docker-Distribution-API-Version response header as per following statement from the spec:

When a 200 OK or 401 Unauthorized response is returned, the “Docker-Distribution-API-Version” header should be set to “registry/2.0”. Clients may require this header value to determine if the endpoint serves this API. When this header is omitted, clients may fallback to an older API version.

I thought about this, and added the header to my 401 response, but it doesn't help. Also, as I said above, Docker behaves the same when pushing to Docker Hub, which also returns the API version header on all responses (incl. 401).

Hmm. I am not sure why it is not working after setting the header. I am not familiar with moby code. Maybe have a look at https://github.com/moby/moby/blob/master/distribution/push.go to find out? Sorry.

The behavior is defined here: https://docs.docker.com/registry/spec/api/#api-version-check

If 404 Not Found response status, or other unexpected status, is returned, the client should proceed with the assumption that the registry does not implement V2 of the API.

You should return either 401 or 200, depending on your access control setup.

Yes, I'm doing so.

I see. Apologies, I had skimmed and misread.

The spec does not allow the client to just make up scopes

What do you mean by this? What do you expect the behavior to be here?
Some relevant discussion here: https://github.com/containerd/containerd/issues/1318#issuecomment-327277368
tl;dr there are situations where the registry can't possibly know what scopes are required for the client (the operation is ambiguous), but the client does know, so it should synthesize them appropriately.

I suggest that the spec be amended to reflect what Docker actually does

I think the spec should probably be amended (it felt rather under-specified when I implemented it), but there are many clients other than docker, so I don't think "exactly what docker does" is the right end-state.


memory warning.

/tmp/OCL1776T5.cl:475:30: warning: passing 'const uint8_t *' (aka 'const unsigned  char *') to parameter of type 'void *' discards qualifiers
memcpy( S->buf + left, in, inlen );

We are aware of this warnings, there should not be any problems. But will be fixed soon.

duplicate https://github.com/nginnever/zogminer/issues/10


"use 1" command does not work with DiscreteMovementCommand

If I try to send the "use 1" action command to the agent while the agent is set to use the DiscreteMovementCommand. This question has been asked earlier also here: https://github.com/microsoft/malmo/issues/850 , but has not been answered so I have raised a new issue. As stated in the linked issue, the command does work with ContinuousMovenmentCommands, but not with the discrete ones.

Hi, I am facing the same issue where I am not able to send "use" command to the agent when the agent is set to use DicreteMovementCommand. Is this issue resolved?


Prevent Operator star/stop procedure be performed twice

As today the Operator start/stop methods do not have any barrier to avoid the methods to be invoked more than once and as example, since the introduction of the PR here https://github.com/quarkiverse/quarkus-operator-sdk/blob/main/runtime/src/main/java/io/quarkiverse/operatorsdk/runtime/StartupListener.java, I've observed that my operator did invoke start twice because I also had a startup listener to implement the same functionality.
I have now fixed my code so id does not happen anymore but I feel a barrier on the start/stop methods could be useful in any case.

@metacosm pr #491 may address this issues


EmonESP fork

It appears there are specific changes to a snapshot copy of upsteam EmonESP. I presume this is a snapshot (from 17 moths ago?) of this fork https://github.com/CircuitSetup/EmonESP?
It appears there is active work on https://github.com/CircuitSetup/EmonESP/commits/v3.0_merge presumably to move from the current EmonESP v2.6 to v3.x. Can you confirm this is the location being used to merge from upstream?
Thanks for the complete solution (hardware, software and docs!)

Glad you noticed! Yes, I'm currently merging some changes for the most recent version of EmonESP. The calibration fields still have to be added to the gui, which is completely new.

If I want the latest and greatest, should I build and flash "master" on EmonESP? I see it was mentioned in #27


All users channel / group chat

First off, thanks for creating this great library! I was ecstatic to find a chat package that was actively maintained.
Is your feature request related to a problem?
I have a multi-tenant app and I want to create a chat room (like a slack channel) for all the users of a given tenant.
Currently there doesn't seem to be a way to create a channel for all users. There's also no way to set the room ID.
I see there is a RoomType.channel, but it doesn't seem to be used anywhere.
There also seems to be no way to get messages without first getting the room. This seems unnecessary since messages should be reachable via the path {roomId}/messages
What solution would you suggest?
I'd like to have a way to set the room ID, and a way to retrieve messages by room ID alone, instead of having to first get the room object.
I'd also like to see Room.users as an optional parameter, with the default value being all users in the users collection. That is, all users should be able to see the room and interact with it, so long as the userIds list is empty
Is there any additional solution to that?
I've fiddled around with dynamically adding users to the group room but haven't really had any luck. I'm open to suggestions though!
Code snippets 📝
I'm using Riverpod, so I'm building my ChatPage as a ConsumerStatefulWidget. The upshot being that certain methods must be called in the build method (like how I get my organization ID).
  @override
  Widget build(BuildContext context) {
    FirebaseChatCore firebaseChatCore = FirebaseChatCore.instance;
    String organizationId = organizationIdProvider(ref);
    FirebaseChatCoreConfig firebaseChatCoreConfig = FirebaseChatCoreConfig(
        Firebase.apps.first.name,
        'organizations/$organizationId/rooms',
        'organizations/$organizationId/users');
    firebaseChatCore.setConfig(firebaseChatCoreConfig);
    }

Related issues/PRs
Not that I can see.
Thanks for your time and keep up the great work!

Hey @gradycsjohnson thanks for the detailed explanation. Chat UI itself (not a Firebase counterpart, those are unrelated) supports channel mode, that's why you see it in types. This one is pretty behind what Chat UI can do, because developing a UI is one thing, and developing a backend counterpart for every case out there - almost impossible. Like in your case, you have something specific, and others have something different. Since I am mostly alone right now (also I maintain React Native implementation) and I work full-time - I can't physically do anything about it. My best advice would be for you to fork this and re-do for your needs, or create something from scratch, you can use the code as a reference, you can also use types package, since it should contain everything you need (feel free to ask there to add anything you think is missing) and it will work with Chat UI. This way you will be able to achieve something, otherwise waiting for me to do it, well, I wouldn't count on that tbh.

Hey Alex! Thanks for getting back to me so quickly! I'll see what I can do :)

@gradycsjohnson Were you able to address your issue above? I have the same problem and would like to know how you proceed.


Document how to send OpenSearch Alerts to Microsoft Teams

Describe the bug
This page does not explain how to send OpenSearch Alerts to Microsoft Teams. Please provide a step-by-step instructions and/or a copy-paste-able code snippet.
Additional context
Microsoft Teams is a popular communication platform, so it will be beneficial to have clear instruction how to integrate it with Compliant Kubernetes.

Any update on this? :)

Hi @C-mil3-Man . Thanks for getting in touch. Alerting to Microsoft Teams is not currently our focus.
However, if this is important to you, then we'd love to get a PR from you.
Thanks!


Do not abstract requirements.in files any more

requirements.in files are intended to be used with pip-compile, so they should be used as-is when auto-filling a missing install_requires= in setup.py

Codecov Report

Merging #72 (dcbe93f) into master (83cab72) will not change coverage.
The diff coverage is 100.00%.

@@            Coverage Diff            @@
##            master       #72   +/-   ##
=========================================
  Coverage   100.00%   100.00%
=========================================
  Files            8         8
  Lines         2091      2092    +1
=========================================
+ Hits          2091      2092    +1

Impacted Files
Coverage Δ

setupmeta/__init__.py
100.00% <100.00%> (ø)

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 83cab72...dcbe93f. Read the comment docs.


🪸 Remove feature flags for topic overview

Description
Once we've done our testing and (potential) PRs to update text (or other findings in tests), we have to remove the feature flags we're hiding the topic overview feature behind right now:

FEATURE_FLAG_TOPIC_OVERVIEW
FEATURE_FLAG_PROMOTE_TOPIC
FEATURE_FLAG_EDIT_TOPIC

Just in case we forget, this should also take care of removing possible alternative states of the UI dependening on those flags, like this link in TopicTable: https://github.com/aiven/klaw/blob/efa83218145b2339d240e296d70f6bf0da99c63a/coral/src/app/features/topics/browse/components/TopicTable.tsx#L41-L47

prep branch: 1518-remove-feature-flags-for-topic-overview


Dragon's Crown: No required Vita3K version specified anywhere. Not working with v0.1.9 3443

HintMachine version: 1.2.0-rc1
Game: Dragon's Crown
Game / Emulator version: Vita3K v0.1.9 3443
Bug description
Hint Machine shows as connected but quests don't update. My assumption is I have the wrong Vita3K version, but I can't really tell since the required version is not documented and there is no executable hash checking in place. The connector should probably be updated to use BinaryTarget and also provide image hashing for the supported versions of the game.

I just remembered I did it on the updated version of the game.

Can you try it on the 1.06 version of Dragon's Crown ?
I'll update the description

Same issue with 1.06

Okay so weird thing : I Installed the 1.06 patch, but in the menu it shows 1.09

Yup. 1.09 works!

To be clear, even though the issue was the game update version, should we avoid Vita3K auto-updates going forward?

I updated the supported version with the Vita3K  v0.1.9 3443 | US ROM 1.09
I added a check on the Vita3K Hash, but since the roms are installed and updated on the console I don't know how to manage them.

#84


Issue12: Add support for notifcations of CI results

I have added support for notifications of the CI results and added a test for it that runs and is accepted.

All good, As a note : in the main you might want to call your function with two different status failure (one for compilation one for tests) depending on the value of TestAndCompileResult. Not sure if that would make sense so feel free to keep your implementation if you think it is better to have just "failure" status for both cases :)

Thanks for the review! And I agree this would be nice to have but when using GitHubs REST API the only choices of states were failure, error, pending and success so I thought out of these failure and success were the only ones we probably needed. However the description I send with the status code describes which type of failure it is.


add debian jessie to release platforms for kinetic

This will allow us to turn it on in the future.

lgtm

This did not have any effect when I released genmsg. bloom still only created stuff for wily, xenial, 23 and 24. I assume that is not sufficient?

I talked with @tfoote off-line, and we need to change the default rules in bloom. Here are some links for reference:

https://github.com/wjwwood/rviz-release/blob/master/tracks.yaml#L53-L54
https://github.com/ros-infrastructure/bloom/blob/master/bloom/config.py#L194-L206
https://github.com/ros-infrastructure/bloom/blob/master/bloom/generators/debian/generator.py#L526-L527
https://github.com/ros-infrastructure/bloom/blob/master/bloom/generators/debian/generator.py#L534-L540

I'll help with merging and releasing bloom to get that out there asap.


NIFI-14048 Add fallback to RSA for Framework Application Tokens

Summary
NIFI-14048 Adjusts the framework web application security configuration to support fallback to the RSA key algorithm and the PS512 JSON Web Signature algorithm when the runtime Java Security Provider does not support the Ed25519 key algorithm.
NiFi versions prior to 2.0.0 used RSA with PS512 for signing and verifying Application Bearer Tokens. NiFi 2.0.0 changed the implementation to use Ed25519 with EdDSA for smaller key and signature sizes providing similar or better security than RSA.
At the time of this writing, Java Security Providers that enforce Federal Information Processing Standards do not include Ed25519 in the list of approved algorithms. FIPS 186-5 published in February 2023 adds Ed25519 to the list of approved algorithms, and FIPS providers such as Bouncy Castle have submitted versions for approval that include Ed25519.
Although the project does not provide official support for operating in a mode compatible with FIPS providers, enabling fallback support for RSA enables a transitional upgrade path for current deployments. Instead of introducing a new framework configuration property, changes in this pull request use java.security.Security to determine whether Ed25519 is supported on startup. In absence of support for Ed25519, the framework selects RSA for rotating JWT key pair generation and PS512 for token signing. The framework logs a message indicating the selected algorithm. This approach also provides the opportunity for subsequent removal when support for Ed25519 is incorporated in providers such as Bouncy Castle.
Tracking
Please complete the following tracking steps prior to pull request creation.
Issue Tracking

[X] Apache NiFi Jira issue created

Pull Request Tracking

[X] Pull Request title starts with Apache NiFi Jira issue number, such as NIFI-00000
[X] Pull Request commit message starts with Apache NiFi Jira issue number, as such NIFI-00000

Pull Request Formatting

[X] Pull Request based on current revision of the main branch
[X] Pull Request refers to a feature branch with one commit containing changes

Verification
Please indicate the verification steps performed prior to pull request creation.
Build

[X] Build completed using mvn clean install -P contrib-check

[X] JDK 21

Licensing

[ ] New dependencies are compatible with the Apache License 2.0 according to the License Policy
[ ] New dependencies are documented in applicable LICENSE and NOTICE files

Documentation

[ ] Documentation formatting appears as expected in rendered files

These changes can be tested at runtime using a standard Java runtime with a custom Java security properties configuration.

Create java.security.properties in the NiFi conf directory
Add the following line to java.security.properties:

security.provider.3=SunJCE

Add the following line to bootstrap.conf in the NiFi conf directory:

java.arg.securityProperties=-Djava.security.properties=./conf/java.security.properties

Start NiFi and view the nifi-user.log for the selected Key Pair Algorithm, which should be RSA

Configured Key Pair Algorithm [RSA] for JSON Web Signatures

This configuration replaces the default security provider in the third position with SunJCE. The default security provider in the third position is SunEC, which implements the Ed25519 algorithm. With the SunEC provider removed from the configuration, the Key Pair Generator Configuration will fall back to RSA instead of the default Ed25519 algorithm.


Update README.md

I hereby agree to the terms of the CLA available at: https://yandex.ru/legal/cla/?lang=ru
Description of changes:

"An unexpected error has occurred, could you please contact admins. Your RequestID: b5d32a14-8b55-4518-a78a-82d475c88e4d"


add solid beets vault - fix fail build SOLID image

wantToken = "0xf2b2103e1351c4d47b27efc8100bb264364fa92c"
wantPoolId = "0xf2b2103e1351c4d47b27efc8100bb264364fa92c00020000000000000000025a"
inputSwapPoolId = "0xcde5a11a4acb4ee4c805352cec57e236bdbc3837000200000000000000000019"
nativeSwapPoolId = "0xcde5a11a4acb4ee4c805352cec57e236bdbc3837000200000000000000000019"
chefPoolId = 59
strategist = "0xCbd4082a6057a01217bAd206708ACDf1dC4bba41"
input = "0xF24Bcf4d1e507740041C9cFd2DddB29585aDCe1e"
output = "0xF24Bcf4d1e507740041C9cFd2DddB29585aDCe1e"
native = "0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83"

fix: fetched upstream


Basic scaling

Here's a basic scaling option added to the drag gizmo function. Will update once I refine.

Thank you @paxsethorld. I don't have the bandwidth for a review, but don't hesitate to refine this PR, we will almost certainly want to merge this eventually. 🙂

Closing, as this is very out of date.


Integration Installation Failed in HA 2024.6.1

Integration failed to install in HA 2024.6.1.
Error log detail:
Logger: homeassistant.util.package
Source: util/package.py:123
First occurred: 4:43:22 PM (3 occurrences)
Last logged: 4:43:56 PM
Unable to install package requests==2.31.0: ERROR: Cannot install requests==2.31.0 because these package versions have conflicting dependencies. ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts

Same error here.

Yeap, same here.

Sorry for that. I will publish a new release tomorrow. In the meantime please edit the manifest.json file and set the version of "requests" to 2.32.3 and restart home assistant. I just did it and it is ok.

Thanks @kcofoni
Working from my side.

Thanks @kcofoni
It works!

Thank you @kcofoni

Please migrate to version 1.2.1 for compatibility with HA 2024.6.1


Update precompile metadata mainnet

Description of proposed changes

This pr tries to merge testnet changes into mainnet and additionally include updated precompile metadata json file for mainnet. This pr will additionally require a version bump.

Practical tips for PR review & merge:

[ ] All GitHub Actions report PASS
[ ] Newly added code/functions have unit tests

[ ] Coverage tools report all newly added lines as covered
[ ] The positive scenario is exercised
[ ] Negative scenarios are exercised, e.g. assert on all possible errors
[ ] Assert on events triggered if applicable
[ ] Assert on changes made to storage if applicable

[ ] Modified behavior/functions - try to make sure above test items are covered
[ ] Integration tests are added if applicable/needed

https://github.com/gluwa/creditcoin3/actions/runs/11683355803/job/32532535295?pr=519 crashed with:

Error: Input("Error opening spec file main: No such file or directory (os error 2)")

I think thit error is fine on this branch because we don't have the mainnet spec file here (file was too large and we decided to keep it only on the main branch. It will be able to find that file as soon as this pr is merged to main

file was too large and we decided to keep it only on the main branch

FTR this decision breaks runtime upgrade testing which will not be executed against mainnet data.


How to build this. No source library path set

The only thing you have in include_dirs is for the nan module. How did you get this to build the dlib source, where is it included from? I tried moving the source into the path while it was installing but didn't work.

you need install dlib
and
sudo apt install libgif-dev libpng-dev libjpeg-dev


Hashicorp (Terraform Cloud)

What is the vendor's name?
Hashicorp (Terraform Cloud)
What is the vendor's pricing site?
https://www.hashicorp.com/products/terraform/pricing
What is the base pricing? Use the lowest tier that looks sane for a small business customer, not free or personal tiers.
$20 user/month
What is the minimum pricing for SSO support?
more than $70 per user/month
Does this pricing info come from a quote or other non-public source?
$70 is the per user price for the highest non SSO pricing tier.
Are there any caveats we should list in the footnotes?

Looks like SSO is now free tier


Support model "buffers"

Basically these are parameters that aren't updated via gradient descent (but would be serialized - a good example that already exists here is the running mean or running variance in batch normalisation); they could also be completely fixed.
The current working solution is to just add Variables that don't need gradients within initialize_parameters. We need to also make sure optimizers skips anything with requires_grad=false.

Note that you can serialize custom data in your model by implementing a custom serialize or load/save function.


After reboot still complains about group membership

That may be a CRC issue but as I'm testing the Podman Desktop workflow, I'll let you move it if you think so.
I tested the whole workflow on a brand new Win10Pro machine.
After CRC is downloaded and installed, I reboot the machine but if I try to initialize, I have a dialog that tells me that group membership is still missing.
So just after reboot I looked at my group membership and I noticed my user was in the crc-users group but not in the Hyper-v Administrator's group (also reported by crc setup --check-only). I'm running a French edition of Win10 Pro.

@jeffmaury Could you provide the logs from the MSI installation, adding the user to groups happens in the MSI, run with msiexec.exe /i crc-windows-amd64.msi /l* installer.log
(moving to crc-org/crc as this is installer issue)


CI conflict with code

What happened?
1· pipeline workflow always download<EMAIL_ADDRESS>2. ci staticcheck error with not changed code  pkg/storage/internalstorage/config.go#L8
What did you expect to happen?
pipeline succeed
How can we reproduce it (as minimally and precisely as possible)?
as what happened
Anything else we need to know?
No response
Clusterpedia Version

# replace the pod name of clusterpedia apiserver
$ kubectl -n clusterpedia-system exec {clusterpedia-apiserver-pod-name} -- apiserver --version=raw
# paste output here

# replace the pod name of clusterpedia clustersynchro-manager
$ kubectl -n clusterpedia-system exec {clustersynchro-manager-pod-name} -- clustersynchro-manager --version=raw
# paste output here

Host Kubernetes version

$ kubectl version
# paste output here

@Iceber

ci staticcheck error with not changed code pkg/storage/internalstorage/config.go#L8

It will check all the code, but the version hasn't been modified, and the problem wasn't reported before, which is a strange behavior
It looks like updating the package dependencies would be fine, would you like to do it?

1· pipeline workflow always download<EMAIL_ADDRESS>
It doesn't look like caching is being used? I still need to take a look

ci staticcheck error with not changed code pkg/storage/internalstorage/config.go#L8

It will check all the code, but the version hasn't been modified, and the problem wasn't reported before, which is a strange behavior
It looks like updating the package dependencies would be fine, would you like to fix it?

1· pipeline workflow always download<EMAIL_ADDRESS>
It doesn't look like caching is being used, I still need to take a look

I can fix it tomorrow and I want have a test before commit the code.  Can you wait for it ?

I can fix it tomorrow and I want to have a test before commit the code. Can you wait for it ?

It's okay.


SukiWindow adds TitleBarAnimationEnabled

When SukiWindow is started, if IsTitleBarVisible is False, the animation of closing TitleBar will be played.

Can you remove the commit 175e693 so I can merge only the titlebaranimationenabled ?


record path dynamically base on stream name

recording is so awesome..
but can the recorded file save in different path? let say the dynamic path base on stream name, something like this :
application {
    live on;
    # default recorder
    record all;
    record_path /var/rec;

    recorder audio {
        record audio;
        record_suffix .audio.flv;
    }

    recorder chunked {
        record all;
        record_interval 15s;
        record_path /var/rec/**%streamname**;
    }

I want this because I have many rtmp publisher from different location, and I want each publisher record file save in their folder path in server
thank you

Have you found a solution?

You could do as I do and use exec_record_done to fire a script in the language of your choice to manage recordings as soon as they complete... Using this I create any needed directories on the fly, convert the flv's to mp4, and generate thumbnails... The script then check the mp4 exists, and if so deletes the flv version.

can u share with us ?

i create a shell like this:
#!bin/sh
today=$(date +%Y%m%d)
array=(${2//-/ })
streamname=${array[0]}
echo today
echo streamname
mkdir -p /usr/local/nginx/html/record/$today/$streamname
#trans to mp4
/opt/ffmpeg-git-20200211-amd64-static/ffmpeg -y -i $1 -vcodec copy -acodec copy /usr/local/nginx/html/record/$today/$streamname/$2.mp4
#create thumbnails
/opt/ffmpeg-git-20200211-amd64-static/ffmpeg -i $1 -y -f mjpeg -t 1 -ss 3 -s 463x285 /usr/local/nginx/html/record/$today/$streamname/$2.jpg
#notify
curl "http://<IP_ADDRESS>:5020/record_done?uri=record/$today/$streamname&fileBaseName=$2"
modify nginx.conf
exec_record_done sh /opt/ffshells/test.sh $path $basename;


noinit doesn't know about nil slices

I tried to use noinit with a []byte slice, but the parser complained that field must be a pointer to have noinit. It seems a bit unnecessary to insist on having a pointer to a slice, since a slice in itself can be nil. Consider the following code:
package main

import "fmt"

type Lala struct {
	Blah []byte
}

func main() {
	lala := Lala{}
	if lala.Blah == nil {
		fmt.Println("Blah is nil")
	}
	lala.Blah = []byte{}
	if lala.Blah != nil {
		fmt.Println("Blah is not nil")
	}
}

The result is:
Blah is nil
Blah is not nil

https://github.com/sethvargo/go-envconfig/pull/83
Note this isn't possible with Arrays, because Arrays must be allocated (enforced by the compiler).


Add support to stake in testnets

This PR will add the possibility to test delegation and withdraw rewards while using nightly or in development.

do users ever want to stake in testnet? do we expose this to users? or is this solely for developers?
can this be moved to some sort of testing screen?

Firstly we will expose it for devs (testing delegation in mobile was requiring a complicated procedure), later we will be exposing it use in nightly to our beta testers.


Move message content up when keyboard pops up.

Alternative for #1424
Works on both Android & iOS :).

Updated, tested on both iOS and Android emulator. Ready for review :)
@borisyankov

I followed the commits while you wrote them. Good job!
From coding perspective I am satisfied with the final result.
Merging it. 👍


Bug: Command not working

ISSUE DETAILS
This command "kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml" is not working even my internet is working.
ERROR SCREENSHOT

@PranitRout07  It work perfectly fine for me by deleting  clusterrolebinding  kubernetes-dashboard kubectl delete clusterrolebinding kubernetes-dashboard
Can you try with by deleting it ?

Hey @niranjandarshann thanks for the help. It works now.


chore Add error code to response msg

Proposed changes
Issue Number: close #xxx

Further comments
If this is a relatively large or complex change, kick off the discussion at<EMAIL_ADDRESS>by explaining why you chose the solution you did and what alternatives you considered, etc...

run buildall

run buildall


robust to different level of noise

Does the network have to be trained with different level of noise？looking forward to the "train" code.

yes, it has to be trained with different noise levels and so does most of the deep learning based methods.


CLI: update dialoguer and fix breaking changes

Closed by https://github.com/iotaledger/iota-sdk/pull/1333


Implement the MinMaxStack. Fixes #3

Pull Request Test Coverage Report for Build e325d48031f0ddd2ff3603cdb1e04789de73a419-PR-4

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

Totals

Change from base Build dad3d5be5a3f146cba10b5f37916d7d79e03d573:
1.1%

Covered Lines:
198

Relevant Lines:
218

💛  - Coveralls


fix return Status when error in RowsetWriter::build

Proposed changes
Currently RowsetWriter::build returns nullptr when failure. The cause of the failure is unknown to the caller.
This change proposed to change RowsetWriter::build to return Status when failure (return OK if success).
Further comments
If this is a relatively large or complex change, kick off the discussion at<EMAIL_ADDRESS>by explaining why you chose the solution you did and what alternatives you considered, etc...

run buildall

run buildall

run buildall


fix: ensure jit_test timings are as expected

PR Type
Closes #470

Bugfix
Code style update (formatting, local variables)
Tests

Description
Updates the call
How Has This Been Tested?
Relevant tests have been updated to accommodate the new call signature for jit_test.
Does this PR introduce a breaking change?
The call signature for jit_test has changed.
Checklist before requesting a review

[x] I have made sure that my PR is not a duplicate.
[x] My code follows the style guidelines of this project.
[x] I have commented my code, particularly in hard-to-understand areas.
[x] I have performed a self-review of my code.
[x] I have made corresponding changes to the documentation.
[x] My changes generate no new warnings.
[x] I have added tests that prove my fix is effective or that my feature works.
[x] New and existing unit tests pass locally with my changes.
[x] Any dependent changes have been merged and published in downstream modules.

I am happy with all of the changes, however I do not think we should disable black at any point in the codebase. I understand that it does impact the look of the dictionary structure here, but I'd be more in favor of having a consistent style (black) and disabling the pylint check (as we have done elsewhere). @tp832944 - do you agree with this or would you prefer we pause black on this subsection of code?

I'd prefer to let Black do it's job, as trusting it is how to gain most benefit. If pylint is still moaning, share how Black formats the code and we can decide an appropriate strategy.

I've refactored the dictionary. The value is first assigned to a variable and then to the dict. This way neither Black nor Pylint take issue.


Update README.md

Coverage decreased (-0.4%) to 79.412% when pulling c20a188da88113b5c591d78d004ab059419fe22a on typos into f56670fa89b5150f42538abf7104dfc111726d10 on master.


Add unit tests for the components

The following services / validators / components / ... need to get unit tested:
First implement coverage, see :
https://github.com/samvloeberghs/protractor-gherkin-cucumberjs-angular2/issues/31

[ ] authentication service
[ ] email.validator
[ ] forgotPassword.component
[ ] login.component
[ ] register.component
[ ] setNewPassword.component
[ ] app.component
[ ] speakerRegistrationStepOne.component
[ ] speakerRegistrationStepTwo.component
[ ] speakerRegistrationStepThree.component

@samvloeberghs I have started adding unit tests to the pieces listed above. I have added istanbul to my project too so #31 is also covered. It would be useful if you could review the angular 4 version I have given you access to on bitbucket before I proceed any further :)

@Fiontan received the invite.. looking for time to allocate :) probably this weekend

not in scope of this project..


Add the repository to package.json

When consuming Scut directly from NPM it generates a warning about the repository missing. This makes that go away. :smile:

Thanks!


Bad condition in NFTokenCancelOffer preflight

https://github.com/XRPLF/rippled/blob/0ce15e0e358996b5371d2adc83e911cc7a3a7225/src/ripple/app/tx/impl/NFTokenCancelOffer.cpp#L75
Should be false. Looks like it can result in tefBAD_LEDGER in production

Actually I think it is correct afterall


Option for h264 presets

Presets like veryfast in ffmpeg can truly increase the speed for encoding. Could you please add a preset option? Thank you.

I have implemented this in PR #25. Testing would be appreciated if you like.


Option to disable grpc server

Is there an existing issue for this?

[X] I have searched the existing issues

Feature description
When running cerbos in a lambda, I get errors spinning up the gRPC server. I want startup times to be as fast as possible, and I only use HTTP.  Is it possible to disable starting of the gRPC server? I don't see any config options, and both servers fail to start if I use a port like 0000.
What would the ideal solution look like to you?
A config option for enabling/disabling gRPC.
Anything else?
No response

Hi. Cerbos is a gRPC server. The HTTP service is just a wrapper around gRPC. So, it can't be disabled. You can set the listening address to <IP_ADDRESS>:0 to make it listen just on the local loopback address at a random available port though.
What is the error you see when you start Cerbos? We have users running Cerbos in lambda and hadn't had an issue before.