Persist IOU data in Onyx

Details
This PR adds a new API command for GetIOUReport and starts persisting the IOUReport collection in Onyx.
Fixed Issues
Fixes https://github.com/Expensify/Expensify/issues/157104
Tests

On web, log out of e.cash and open the console (cmd + option + j)

Open the Application tab and select localhost:8080 under Local Storage

Log into an account without an IOU and check the LocalStorage keys, confirm there is nothing shown if you filter by reportIOU

Use the CreateIOUTransaction Curl request from https://github.com/Expensify/Expensify/issues/157104#issue-829068854 to create an IOU transaction. Ensure the debtorEmail is different from the email/accountID/authToken you set in the cookie field

Log into cash as the account of the person who created the IOU. Confirm that you see a value in localStorage for reportIOU_ that contains the IOU reportID. For an example of the full data, see https://github.com/Expensify/Expensify/issues/157104#issuecomment-799886417

Log out, and log into cash using the debtorEmail value you used in step 4, confirm you see a value in localStorage for reportIOU_ that contains the IOU reportID

Create an IOUTransaction from an account A that has been the only one to comment on a chat report and User B is the debtor.

Confirm that when logging in with UserA, the reportIOU collection contains that report.

Additionally, confirm that there are no regressions with sending messages to other accounts
Tested On

[x] Web
[ ] Mobile Web
[x] Desktop
[x] iOS
[x] Android

Screenshots
N/A

Updated, https://github.com/Expensify/Expensify.cash/pull/1785#discussion_r595296484 is the only unresolved thread at the moment

https://github.com/Expensify/Expensify.cash/pull/1785#discussion_r595296484 has been resolved, this is ready for review again!

Looking good, but I noticed two issues when running the test:

I'm seeing an extra undefined 'actorEmail' in otherParticipants

This makes the (otherParticipants.length > 1) condition true, preventing the getIOUReport request. Once I added .without(undefined), I was able to verify that the data was persisted to Onyx. Didn't look further into why this occurs or a better fix.

I'm only seeing IOU data when logged into the account of the IOU creator
I think this is because we're using actorEmail, which is the same value for both users. Perhaps we should use managerEmail or ownerEmail (whichever does not match the current user). These will swap depending on who owes who at the current point in time, but both emails should be available this way.

I'm seeing an extra undefined 'actorEmail' in otherParticipants
I'm unable to reproduce this, what is the account setup you have for IOU testing?

I'm only seeing IOU data when logged into the account of the IOU creator
I'm also unable to reproduce this, I see the IOU data get populated when logged in as both the IOU creator and the debtor. I will try testing with some additional cases (no report_actions from the debtor, create a report with IOUs from both parties) to try to reproduce.

That testing brings up a good point however, since we're using the actorEmail to build the list of participants we may not be able to get the debtorEmail if the only person who has chatted on the report is the requestor. I'll have a look at that test case and if it is a problem, look into getting the debtorEmail another way.

After some testing, I confirmed the issues above exist if the requestor is the only one with chats on a chat report. Therefore, using the actorEmail values in the reportHistory isn't enough to get the participants on a report.

Perhaps we should use managerEmail or ownerEmail (whichever does not match the current user)

The problem with this is that we don't have a managerEmail or ownerEmail in the response from getHistory. Additionally, fetching actions happens separately from where we fetch the rest of the report data, so we don't have access to the participants inside getActions where we're filtering by the "IOU" actionName.
I looked into creating a local object that keeps track of the participants of each report, similar to how we keep track of lastReadSequenceNumbers or reportMaxSequenceNumbers. Then, in handleReportChanged, I tried setting the value of chatReportParticipants[report.reportID] = report.participants. However, there is still a race condition here since the actions can fetch before the participants are updated.
Forcing the reportActions to wait until we are finished fetching the reportData is one way to fix this, but I'd rather not add that limitation unless we need to. Alternatively, we can make updates to the API to include participant data in one of the other API calls (GetHistory?). Bringing this to slack to chat about alternatives.

I've created https://github.com/Expensify/Web-Expensify/pull/30506 and updated this PR so that GetIOUReport now takes reportID instead of debtorEmail. I've also updated the tests to account for the failing case as well as the Web branch required for testing.
In slack we agreed that the ideal solution would be to have Auth or the API handle figuring out the participants for a chat report, and to return all the necessary data, which will be handled in https://github.com/Expensify/Expensify/issues/157722.
This is ready for review, but now requires https://github.com/Expensify/Web-Expensify/pull/30506 to work properly

Thanks for all the comments and discussion! Updated this based on the discussion in slack. Since we're already fetching reportActions as part of fetchChatReportsByIDs when we call GetReportStuff, we can grab the participants and reportActionList there, which is all that is required to call GetReportIOU.
I've also added some error handling for non-200 errors, empty reportList responses, and reportIDs of 0. I ran through the tests again and confirmed everything is working. This is ready for review again.

@iwiznia @tgolen Updated

Updated and re-tested

:hand: This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release.

Sorry about not merging it! I was waiting for a test to finish... and apparently the GH page never updated when it was done.

No worries! Those tests take a while!

@Jag96 Hello! This one looks like it's internal QA. If so, can you go ahead with the testing? When done please let me know so I check the PR of the list.

Checked this off 👍

This morning @trjExpensify and I noticed a potential regression with the Onyx changes:
The iou loading state values that we initialize here are returned null here when opening the IOUModal. The data is valid within local storage and this is only reproducible about 1 in 4 attempts.
While the simple solution would be to add a conditional check to confirm the iou object is valid, we need to confirm whether this requires a fix, or is now expected behavior.
CC @kidroca
https://user-images.githubusercontent.com/10736861/121342044-2e1dc380-c919-11eb-9670-fac9b03046e2.mov

It looks like the cleanup PR supposedly resolved this issue. But as far as I can tell, these commits are also on the staging build. So it seems to me that the issue is still occurring:

Tim's PR bumps the Onyx commit to 4ff94b6c068582a75f50c6e159d3ff69fa123138
Commit 4ff94b6 is more recent than the onyx cache fix
Tim's PR was deployed to staging

Moving this discussion to the PR, so that @kidroca can participate


privacy

It should be clear in the readme that data is going to be sent to https://www.plantuml.com if you use this plugin. It's be good if there was an option to use your own server if you have one.

Thanks for pointing out that problem, and sorry for late reply.
For now, I have no time to deal with that, I will appreciate if you could post a PR about it, thanks.


API failure, binary data decompression failed

old api：https://globe.adsbexchange.com/data/globe_{id}.binCraft
new api：https://globe.adsbexchange.com/re-api/?binCraft&zstd&box=-90,90,-180,180

You need to add some meat to this PR to make it clearer.
First, where/how does this occur exactly.  Create a better PR next time. Closing


TOR Relay Info - SpeedUp

Hello,
is it possible to display statistics about which nodes and which addresses are used for downloading in a particular request? This is necessary to optimize the configuration in order to speed up the download of files.
Thanks!

Hey there,
Yeah, I know what you mean. Had the same issue, just waited until something's stuck for too long and then flush connections. It would be cool to be able to e.g. delete a single circuit and keep the rest. So yes, it is possible, it is definitely a great idea, but the amount of work is considerable and I currently have no business in pushing this project any further. I'll keep this ticket open however, perhaps I'll find a good reason to continue.

https://github.com/Sir-Arthur56537/Tor-Circuits/blob/main/tor.py
#!/usr/bin/python3
import stem
from stem import CircStatus
from stem.control import Controller

with Controller.from_port(port = 9051) as controller:
  controller.authenticate()

  for circ in sorted(controller.get_circuits()):
    if circ.status != CircStatus.BUILT:
      continue

    print("")
    print("Circuit %s (%s)" % (circ.id, circ.purpose))

    for i, entry in enumerate(circ.path):
      div = '+' if (i == len(circ.path) - 1) else '|'
      fingerprint, nickname = entry

      desc = controller.get_network_status(fingerprint, None)
      address = desc.address if desc else 'unknown'

      print(" %s- %s (%s, %s)" % (div, fingerprint, nickname, address))

It would be enough to measure the performance of downloading streams and display information on the node. All this can be automatically logged into a log file. The rest of the configuration is easy to do through the configuration file.

This option works for me, but in this case, all analysis will need to be done manually ...
OnionView
https://github.com/hectormartin42/onionview
OnionView displays the circuits and streams which Tor creates to service requests.
The display is a Graphical User Interface (GUI) using the Python Tk library and shows each circuit as it is created and each stream using that circuit. The excellent Stem library is used to interface with the running Tor process via the Control Port.


Can't install at all

Hi,
This plugin is unusable. I couldn't make it work, it make a different kind of error for every solution that I thought could have worked. That's really a shame ! :(

What version of webpack are you using?


feat(interactive): update links for developer lab

Updates a few links after Interactive Studio + OAuth Apps were combined.

@EthanWaite,
Thanks for your contribution as a Microsoft full-time employee or intern. You do not need to sign a CLA.
Thanks,
Microsoft Pull Request Bot


pinStatus

after Locked screen goes away, password not resetted and have unlimited length.
I dont use handler, only required props.
iPhone X simulator.
by the way, why so bad customization? awesome component :)

Hi.
I fixed the password not resetting but I don't understand the unlimited length issue.
I'll work on making style props over the weekend :).
Cheers

@Haskkor  also ur package cause error on my device

:(

I can't reproduce it. I tried with several devices and it's working.
Can you think of a way to help me reproduce it?
Also I'm working on the style props, should be ready soon :)


[Feature] Video component needs to support HLS

Video
HLS supports would be great.

I think you should to report to the Flowbite issue


[BEAM-11904] Remove PrettyPrint from job definition

Please add a meaningful description for your change here. I would like to remove the PrettyPrint from the output. This decreases the size of the job definition:
With the PR:

-rw-r--r--  1 fdriesprong  wheel    45M Mar  1 22:27 /tmp/pubsub-to-bigquery.json

With 2.28.0:

-rw-r--r--  1 fdriesprong  wheel    47M Mar  1 22:30 /tmp/pubsub-to-bigquery.json

Thank you for your contribution! Follow this checklist to help us incorporate your contribution quickly and easily:

[x] Choose reviewer(s) and mention them in a comment.
[x] Format the pull request title like [BEAM-11904] Fixes bug in ApproximateQuantiles, where you replace BEAM-XXX with the appropriate JIRA issue, if applicable. This will automatically link the pull request to the issue.
[ ] Update CHANGES.md with noteworthy changes.
[ ] If this contribution is large, please file an Apache Individual Contributor License Agreement.

See the Contributor Guide for more tips on how to make review process smoother.

GitHub Actions Tests Status (on master branch)

See CI.md for more information about GitHub Actions CI.

R: @pabloem
I don't know if this would affect anything in the dataflow backend? But AFAICT this would result in more compressed JSON and fewer user jobs over the limit.
@Fokko, I don't know that this solves your issue. Even after this change, your job graph size is still over the limit (20 MiB IIUC?) https://cloud.google.com/dataflow/docs/guides/common-errors#job-graph-too-large
It might be good to look at what is in the serialized JSON payload for your job, see if there's any multi-MiB blobs of data that you shouldn't be serializing?

right - often closures with larger-than-intended context can explode the job graph size

We're writing data from PubSub to BigQuery, and there are Avro messages that we know upfront, and that we decode from PubSub. I don't see anything huge, but the serialized_source and the serialized_fn are rather large (not big). I think the schema is represented multiple times in the graph, each time it is being passed to the next stage ((de)serializing).
@dpcollins-google Thanks for the quick reply. I'm iterating towards a <20MB job, which is indeed the limit. I noticed that it was pretty printed, so that was a quick win of around 5%.

Can you try using --experiments=upload_graph?

let me know if that works, and if so, I can get it on stackoverflow / documentation for others

Run Java PostCommit

@pabloem Thanks for the pointer. It looks good at first glance. The UI seems to become unresponsive: Graph monitoring data exceeded maximum allowable size. Some monitoring data including counters may be incomplete. But if it works, that would be okay for now. :)

hm right, because the UI also passes the job graph in an API call...
I guess a good next-step is to change how we include schemas in the graph to have a dictionary of some sort...

@pabloem Seems like I'm unable to see the stacktrace of the failed test, can you confirm?

that's correct - though the failed test is broken on the main branch: https://ci-beam.apache.org/job/beam_PostCommit_Java/lastCompletedBuild/testReport/

Run Java PostCommit

@pabloem Do you think this is something that we can move forward?

Thanks @pabloem


Don't add nil errors to the error stack

I'm not entirely sure how the errhandling code ever worked as written.
Using the bundled minecraft-rcon client code I was not able to
successfully send commands to a server.
What I observed was that the errs.Add() calls in client.go
createPayloadFromPacket were all running successfull (with nil error
values returned) but those nil values were being added to the error
stack.
This caused errs.Empty() to return false, because len() on the stack
returns 3 for the value errors:[<nil> <nil> <nil>].
I revised the stack.Add() function so that it declines to add a nil
error to the stack.  An alternative approach would be for
Stack.Empty() to walk the stack and ignore nil values, but this
approach seemed simpler.

Thanks for this, I've not touched this for a long time - I actually just made it on a whim one evening to mess around with it. I may revisit it in the future to tidy it up a lot, this error handling code is very old, and I've been working on a new error utility library that actually includes this type (but improved quite a lot). I was quite new to Go when I first made this!


will ArrayDeque used in Dispatcher cause concurrent issue in multi-thread environment

In Dispatcher implement, ArrayDeque were used for readyAsyncCalls, runningAsyncCalls, runningSyncCalls. But in multi-thread environment, there were only synchronized method in code, which did not protect ConcurrentModificationException case, like one request was enqueuing, another request was finished and removing from the queue.
in finished(), synchronized (this) only can avoid concurrently remove().

Send a PR? I think we’re already synchronizing where we need to be.
  private <T> void finished(Deque<T> calls, T call, boolean promoteCalls) {
    int runningCallsCount;
    Runnable idleCallback;
    synchronized (this) {
      if (!calls.remove(call)) throw new AssertionError("Call wasn't in-flight!");
      if (promoteCalls) promoteCalls();
      runningCallsCount = runningCallsCount();
      idleCallback = this.idleCallback;
    }

    if (runningCallsCount == 0 && idleCallback != null) {
      idleCallback.run();
    }
  }

@swankjesse only remove() was in synchronizing. does it need to synchronize both add() and remove() for ArrayDeque

When applied to a non-static method, the synchronized keyword is the same as synchronized (this) { }.

got it, thanks.


Replace readme with project setup information

Current readme is about the initial gsoc project. It is no longer relevant for this project. We can provide more useful information on the readme file

Can I work on this?

Go ahead

@disha1202 are you still working on this?

Yes @niladrix719


Add files via upload

Adding CIS - Cedar International School

@ahmadzoul87 First stage of verification passed, official domain is cedarinternationalschools.com as far as I verified. This is just an informational note. Pull request is still in the review. I appreciate your patience while waiting for the final decision. Proof of domain ownership: https://cedarinternationalschools.com/career/

مدارس سدر العالمية
the above is the arabic name of cedar international school

@ahmadzoul87  Thank you for the clarifications. Pull request merged.

well noted thanks


Specifying associations to inherited factory with FactoryGirl

I've just started using FactoryGirl for my tests, and I've run into some issues.
I have user, qualification and user_qualification models. For qualifications, I have two inherited factories, namely qualification_ba and qualification_phd. Now, I'm trying to generate a qualification that includes either qualification_ba or qualification_phd factories by running:
create(:user_qualification_ba_bad_marks).
This returns:
NoMethodError: undefined method 'qualification_ba='.
However, when running:
create(:qualification_ba)
it successfully creates the object as expected. Is there perhaps a limit on how deep you can nest factories?
  	factory :user do
  		to_create {|instance| instance.save(validate: false) }

  		full_name				Faker::Name.name
  		email					Faker::Internet.email
  		password				Faker::Internet.password(8)

  	    factory :user_ba_candidate do
  			before(:create) do |user|
        			create_list(:user_qualification_ba_bad_marks, 1, user: user)
      		end
	  	end

	  	factory :user_phd_candidate do
	  		before(:create) do |user|
        			create_list(:user_qualification_phd_good_marks, 1, user: user )
      		end
	  	end

  	end
  	factory :qualification do
  		user_selectable true
  		factory :qualification_ba do
  			name 					"Bachelors"
  			qualification_level 	2
  		end
  		factory :qualification_phd do
  			name 					"Masters"
  			qualification_level 	5
  		end
  	end

  	factory :user_qualification do
  		to_create {|instance| instance.save(validate: false) }
  		factory :user_qualification_ba_bad_marks do
  			qualification_ba
  			aggregate (30..50).to_a.sample
  		end
  		factory :user_qualification_phd_good_marks do
  			qualification_phd
  			aggregate (70..90).to_a.sample
  		end
  		user
	end

I think the issue here is that factory_girl doesn't know that qualificatino_ba is not an actual method on the model. You can specify the association like this to allow it to know:
association(:qualification, factory: qualification_ba)

I would also recommend using traits over nested factories, it makes things easier to compose in multiple scenarios. You can read more about that here: https://robots.thoughtbot.com/remove-duplication-with-factorygirls-traits
Hope that helps!


[ Fix ] Fix android build error with meson @open sesame 07/26 12:11

This commit includes,
. Fix android build issues
: openblas link and download
Self evaluation:

Build test:	 [X]Passed [ ]Failed [ ]Skipped
Run test:	 [X]Passed [ ]Failed [ ]Skipped

Signed-off-by: jijoong.moon<EMAIL_ADDRESS>

:memo: TAOS-CI Version: 1.5.20200925. Thank you for submitting PR #1434. Please a submit 1commit/1PR (one commit per one PR) policy to get comments quickly from reviewers. Your PR must pass all verificiation processes of cibot before starting a review process from reviewers. If you are new member to join this project, please read manuals in documentation folder and wiki page. In order to monitor a progress status of your PR in more detail, visit http://nnstreamer.mooo.com/.

:octocat: cibot: @jijoongmoon, A builder checker could not be completed because one of the checkers is not completed. In order to find out a reason, please go to http://nnstreamer.mooo.com/nntrainer/ci/repo-workers/pr-checker/1434-202107261102140.017499923706055-ea70a9d1859d35d0181b02781ecf8238951252b6/.

:octocat: cibot: @jijoongmoon, A builder checker could not be completed because one of the checkers is not completed. In order to find out a reason, please go to http://nnstreamer.mooo.com/nntrainer/ci/repo-workers/pr-checker/1434-202107261211460.966392993927-ea70a9d1859d35d0181b02781ecf8238951252b6/.

:octocat: cibot: @jijoongmoon, A builder checker could not be completed because one of the checkers is not completed. In order to find out a reason, please go to http://nnstreamer.mooo.com/nntrainer/ci/repo-workers/pr-checker/1434-202107261322090.6672990322113-c8d94e15fe770612ff6e4fac902562e96aa6466a/.


Completely remove dependency on global variables, grid, dataview, columns, filters, etc.

Can you build an example that shows you can put two grids side by side with two grids, dataviews and separate filters while including your core grid functionality in a .js file so we can use the grid multiple times on view or share across pages in our app.  The examples today are difficult to push to a common .js file that contain the base functionality we need across two or more grids for example.
thanks
Marty

https://github.com/mleibman/SlickGrid/issues/1100#issuecomment-177512028


Three user stories: How does wallet3 address those?

An exchange backend / payment processor written in golang

The exchange backend is written in golang and needs to sync many wallets at once. The wallets are view only. The goal is to fetch the blocks only once from the node (that is hosted on a different server) and use the data to sync many different wallets in parallel. The Monero related code should be directly integrated into the go binaries for ease of deployment and maintenance.

A decentralized exchange developed by a community funded team:

The team decided to target wasm because it means the code will be platform independent. In this way they can rest assured their code will run on many different operating systems like Mac, Windows and Linux. So even with a small team they are able to service a wide range of users on many different systems. They can focus most of their development efforts on crafting a great UX, because they dont run into many build issues and platform specific bugs. Their protocol also requires the simultaneous syncing of many public view only wallets.
While wasm is a single threaded target without garbage collection (the memory can only grow). They never run into memory overflow issues because they have very small pieces of wasm that get orchestrated by a javascript codebase (that uses webworkers for threading and fetch to retrieve the blocks from the daemon)

A mobile wallet written in flutter

A widely used mobile wallet that focuses on reliability and an easy to use user interface. Many users depend on their software so the most important goal is having a robust architecture. They take extra care to make sure there are no concurrency bugs in the wallet. They don't want the user interface to ever become unresponsive under any circumstances. Even if there is a connection loss or the power saving features of the mobile operating system kick in: the user experience should not be degraded.
How does wallet3 address these user stories?
Which API calls would the respective developer use?
How can all of these different use cases with different targets and languages be addressed without a C ABI?

I maintain a payment processor in Golang. It's not possible to link with C++. Currently we have to deploy monero-wallet-rpc server to use wallet functions but it sometimes let's us down when it comes to availability and threading. It is also harder for the user to get monero-wallet-rpc running. What would be ideal for our project is a library that safely implements wallet functions in C.
This linking problem isn't unique to Golang. Rust, C and other languages also do not support calling C++ but they do support C.

I am a mobile wallet written in flutter user/developer and will be involved in implementing Seraphis testnet in Dart for Flutter and will contribute input to the project with regards to how Serpahis/wallet3 enables or hinders that usecase

On the server: it remains an open question if a light wallet server implementation will be included in the reference monero binaries or shipped/maintained separately as they are today (see monero-lws, openmonero).

Implementing a light wallet server is a good example. It is similar to story 1 and 2. The syncing function will be different from what we would typically expect from a mobile wallet for example. It should be possible to sync many wallets at once with the data supplied by one daemon connection.
So the API would need to provide a function for processing one block at a time. And there needs to be a clear description of what the syncing algorithm needs to do in the case of reorgs. We need a detailed description of what to look out for there. Or do you think it would be possible to provide a helper function that takes care of the pitfalls and can encapsulate this piece of complexity?
Because there are so many different circumstances under which wallet software needs to run, it seems like the syncing functions should not be hard coded in the library. It should be modular enough so that the different wallets can adapt to their use cases.

Or do you think it would be possible to provide a helper function that takes care of the pitfalls and can encapsulate this piece of complexity?

@UkoeHB has written helper functions that handle reorgs here: https://github.com/UkoeHB/monero/blob/99b15c2a2c29c7a4163bbbe4512aa451a5edb776/src/seraphis/tx_enote_scanning.cpp

It should be modular enough so that the different wallets can adapt to their use cases.

These functions seem to be written with the modularity you want (and I agree that they would ideally have) in mind. Example: notice how process_ledger_for_full_refresh_onchain_pass returns ScanStatus, which indicates to the caller how they should proceed if the scanner detects a reorg.

These functions seem to be written with the modularity you want (and I agree that they would ideally have) in mind.

I am not so sure about this. Here is the part in the presentation where this topic is covered: https://www.youtube.com/watch?v=aAvSpfll9z4&t=6203s  It seems like everything is tightly coupled and even networking and concurrency is interwoven into the code.
I also sincerely don't understand the aversion to providing a C ABI to this. As mentioned earlier all the other languages can not interface with CPP. So they need to implement custom wrappers and make their own build processes for the Monero codebase.
All of this increases software supply chain security risk unnecessarily. And makes life for wallet developers harder.

I also sincerely don't understand the aversion to providing a C ABI to this.

All of this is work - work for C++ devs who don't actually like C (at least I don't). You are welcome to propose a rewrite that is pure C. I'd actually be interested to see an alternative to the balance recovery framework currently used, because I don't know a cleaner way to do it - would be great to learn a new way.

All of this is work - work for C++ devs who don't actually like C (at least I don't).

This is not about what you like or not. This is about what is needed: a C ABI.
Not providing one means that every single project needs to have a custom build of Monero and create this extern "C" wrapper that you don't want to provide.
Here is cake wallet for example: https://github.com/cake-tech/cake_wallet/blob/50fd6accef4cdc63e7f8a172129bfad734110f18/cw_monero/ios/Classes/monero_api.h#L7

This is not about what you like or not. This is about what is needed: a C ABI.

Sure it is, I have been doing what I like for years and don't plan to stop any time soon :). In any case, if you want a C ABI then by all means go for it.

Sure it is, I have been doing what I like for years and don't plan to stop any time soon :).

You get paid by this project to solve a problem. This is not your personal pet project "to have fun". I am astonished that you want to move a project with a 2 billion dollar marketcap to a new unproven protocol with this attitude.

Is having fun mutually exclusive with improving a major cryptocurrency? Please, instead of this drama and trying to boss me around (??), go review all the seraphis material and find some specific low-quality thing I produced, some example of me disrespecting Monero core design principles, whatever you like.

@spirobel spare the histrionics, there's a whole cohort of researchers outside of Koe that set the direction of development.  This isn't code done on a lark
Just a strategic/tactical note, be nice and say please or else people are like as not to tell you to code it yourself.

Because there are so many different circumstances under which wallet software needs to run, it seems like the syncing functions should not be hard coded in the library. It should be modular enough so that the different wallets can adapt to their use cases.

Now that I've had some time to work with the lib, I can say with certainty it is written modularly and can be adapted to various use cases.
Check out this code I wrote: https://github.com/j-berman/monero-cpp/blob/9f788b40c60d469381d8b9790a0d50aee917f59e/test/scratchpad.cpp#L27-L73
It's using the Seraphis lib to identify a user's spends and receives, reading a mock response to /getblocks.bin. Because of how cleanly the Seraphis lib's code is written, it's relatively simple to plug and play its various functions to accomplish this. The lib does not handle network requests, nor does it handle threading. I can see pretty clearly how to optimally structure my calling code to achieve performance on par with (or perhaps even better than) wallet2, and how to easily implement an efficient multi-wallet view-only scanner using the lib.
Notice how with the Seraphis lib, there is a scanning util sp::try_find_legacy_enotes_in_tx that identifies received enotes per tx, and then expects the caller to call a process_chunk function after. This should enable a caller to parallelize calls to sp::try_find_legacy_enotes_in_tx, and then process any few received enotes and identify spends in a much quicker second pass (which for a multi-wallet view-only scanner, can also be parallelized easily).
Compare this to wallet2's process_parsed_blocks which does everything in one pass, and handles threading internally in a fine-grained fashion.
The Seraphis lib is a clear upgrade. I think it's also worth noting I had an enjoyable experience using and reading the Seraphis lib code to write this code, which is something I generally can't say the same for when I try to do something with or in wallet2. I think the most bothersome thing to me was type conversion, which may have some room for improvement.
As far as exposing a C ABI, perhaps some external lib could be written that does something like what Cake Wallet does, exposing functions from within the Seraphis lib via a C wrapper, and includes instructions/examples on how to build the code for use with various languages? Perhaps there is a middle ground on this front compared to rewriting huge sections of the code in C?
Bonus: also check out the identify_receives function I implemented that shows how a view-only scanner could utilize the lib.

Because there are so many different circumstances under which wallet software needs to run, it seems like the syncing functions should not be hard coded in the library. It should be modular enough so that the different wallets can adapt to their use cases.

Now that I've had some time to work with the lib, I can say with certainty it is written modularly and can be adapted to various use cases.
Check out this code I wrote: https://github.com/j-berman/monero-cpp/blob/9f788b40c60d469381d8b9790a0d50aee917f59e/test/scratchpad.cpp#L27-L73
It's using the Seraphis lib to identify a user's spends and receives, reading a mock response to /getblocks.bin. Because of how cleanly the Seraphis lib's code is written, it's relatively simple to plug and play its various functions to accomplish this. The lib does not handle network requests, nor does it handle threading. I can see pretty clearly how to optimally structure my calling code to achieve performance on par with (or perhaps even better than) wallet2, and how to easily implement an efficient multi-wallet view-only scanner using the lib.
Notice how with the Seraphis lib, there is a scanning util sp::try_find_legacy_enotes_in_tx that identifies received enotes per tx, and then expects the caller to call a process_chunk function after. This should enable a caller to parallelize calls to sp::try_find_legacy_enotes_in_tx, and then process any few received enotes and identify spends in a much quicker second pass (which for a multi-wallet view-only scanner, can also be parallelized easily).
Compare this to wallet2's process_parsed_blocks which does everything in one pass, and handles threading internally in a fine-grained fashion.
The Seraphis lib is a clear upgrade. I think it's also worth noting I had an enjoyable experience using and reading the Seraphis lib code to write this code, which is something I generally can't say the same for when I try to do something with or in wallet2. I think the most bothersome thing to me was type conversion, which may have some room for improvement.
As far as exposing a C ABI, perhaps some external lib could be written that does something like what Cake Wallet does, exposing functions from within the Seraphis lib via a C wrapper, and includes instructions/examples on how to build the code for use with various languages? Perhaps there is a middle ground on this front compared to rewriting huge sections of the code in C?
Bonus: also check out the identify_receives function I implemented that shows how a view-only scanner could utilize the lib.

As far as exposing a C ABI, perhaps some external lib could be written that does something like what Cake Wallet does, exposing functions from within the Seraphis lib via a C wrapper, and includes instructions/examples on how to build the code for use with various languages?

Currently every single wallet and project needs to build these wrappers themselves. Take a look at this for example:
https://www.reddit.com/r/Monero/comments/zfjh9t/25_xmr_bounty_crosscompile_flutter_libmonero_for/
which was later increased to 10xmr https://www.reddit.com/r/Monero/comments/zr65zq/bounty_for_libmonero_windows_crosscompile/
It is time for Monero to provide pre compiled libraries with a C ABI so that other projects dont need to write their own custom wrappers anymore!
It is not a good idea to spread this out over many different projects! It increases supply chain risk and makes building things with Monero so much harder!

Compare this to wallet2's process_parsed_blocks which does everything in one pass, and handles threading internally in a fine-grained fashion.

yes the use of threading in this functions makes it a non starter to compile this directly to wasm (which does not have threading) It is a good example of what should be avoided.

Bonus: also check out the identify_receives function I implemented that shows how a view-only scanner could utilize the lib.

great to see monero-cpp (which is used as a basis for monero-javascript.)
I use monero-javascript to build an alternative to the wallet-rpc:
https://github.com/spirobel/monerochan-merchant-rpc
I had to do this because the wallet-rpc stalls if the daemon connection fails. The concurrency does not work right in this program. It is one of these half abandoned broken tools in the monero core repo.
monero-javascript is a step forward. I managed to build a browser wallet similar to metamask on top of it: https://www.youtube.com/watch?v=4DLcsQ45zoE (doing a stagenet transaction in the video that automatically shares the tx_proof with the website after the transaction is done)
But because it is still just a monolithic cpp library that is compiled to wasm with emscripten it still crashes sometimes.
What we need is either:

precompiled libraries for all important targets: linux, macOS, android, ios, windows, wasm.
Or at least a way to get there. Why is it so hard to understand that CPP functions cant be interfaced with?

It is not that big of a deal to make sure the code has a C ABI. But only for the people that are in charge of the code. if core does not provide this, nobody else can. There is no way to keep up with the ever growing pile of CPP. Especially for outsiders that have no say in the direction of the project.

Because of how cleanly the Seraphis lib's code is written, it's relatively simple to plug and play its various functions to accomplish this. The lib does not handle network requests, nor does it handle threading.

Do the functions have side effects or shared global state? I saw the monero_wallet_full.cpp  still depends heavily on wallet2. There are references to the  m_w2 object everywhere.
How does the seraphis library avoid this situation?

Sorry I'm taking so long between responses :/

Do the functions have side effects or shared global state? I saw the monero_wallet_full.cpp still depends heavily on wallet2. There are references to the m_w2 object everywhere.

The functions I wrote and referenced above have no side effects nor shared global state. They are purely functional. There is no code path to wallet2; they don't use the m_w2 object. The specific code I linked isn't re-using any other code from monero-cpp.
I'm working in a contained WIP scratchpad within monero-cpp to get a better feel for the Seraphis lib while simultaneously trying to put myself in the shoes of a dev re-using this code in an external lib. This has helped me think deeper on the API + consider your points while I work, though you've made a pretty convincing argument it makes more sense to switch over to working from a C ABI for this sort of work instead. Here's the latest I've got to help continue this discussion:
identify_receives
Identifies enotes (outputs) the user received in a chunk of blocks.

Params

a chunk of blocks returned from the daemon's /getblocks.bin endpoint
public spend key
private view key

Returns

vector of received enotes

tx hash
block height
stealth address (output public key)
key image

always comes back as "unknown" since spend key isn't known (this is gross, I know, it's just a scratchpad)

subaddress major index
subaddress minor index
amount

identify_spends_and_receives
Identifies enotes the user spent and received in a chunk of blocks

Params

a chunk of blocks returned from the daemon's /getblocks.bin endpoint
private spend key
vector of key images from past received enotes

Returns

vector of received enotes (same as above, except with the key image set)
vector of spent enotes

tx hash
block height
key image

How does the seraphis library [help you] avoid [side effects and shared global state in these functions]?

The Seraphis lib offers a number of reusable powerful functions that themselves have no side effects nor rely on shared global state. There are 3 main helper scanning utils the Seraphis lib exposes that are doing the heavy lifting in the functions above:

try_find_legacy_enotes_in_tx

synchronously finds received enotes (outputs) in a tx, taking in params: pub spend key + priv view key + subaddresses + tx data

In identify_receives, process_chunk_intermediate_legacy

synchronously decrypts received amounts
references only what is passed into the function

In identify_spends_and_receives, process_chunk_full_legacy

synchronously decrypts received amounts and identifies spent enotes
references only what is passed into the function

These 3 pure functional scanning utils made my life easier writing this code. They are fairly simple to utilize correctly.
The analagous wallet2 functions are:

process_parsed_blocks

multithreaded finds received outputs in a chunk of blocks, referencing the wallet's keys via the wallet's m_account.get_keys()
also does reorg handling referencing the wallet's known scanned blocks via m_blockchain

process_new_transaction (554 lines of code)

takes in param of received outputs from step 1 (which are optional) via the param tx_cache_data

if not provided, the function will do all finding over again

if spend key is accessible, generates key images via scan_output and decrypts amounts
updates the wallet's global state while processing

updates global transfers container (e.g. here and here), relying on the assumption it's ordered by outputs received in chronological order
updates the unconfirmed and confirmed received "payments" containers
updates the unconfirmed and confirmed outgoing txs containers (here and here)
I could keep going, it leans on global state all over...

I think when comparing code side-by-side, it's clear wallet2 does not have nice reusable functions to work with for scanning. And this is because the code wasn't and isn't written with reusability top of mind, whereas the Seraphis lib clearly is/was from the bottom up (across a C++ code base).

A path forward
Generally, I think it could be a good idea to have utility functions a dev can plug and play to scan efficiently in different contexts (plus functions to generate addresses, construct txs, etc.), that are supported and maintained in the core repo, and yea perhaps exported via a C ABI. And caveats such as handling reorgs, lock times, and the burning bug well documented.

Why is it so hard to understand that CPP functions cant be interfaced with?

I think there have been some misunderstandings/confusion in this thread stemming from the intended scope of your request. To me, it sounds like at the minimum, you would like to see a C wrapper maintained in the core repo like Cake Wallet's, so that people who want to make Monero software don't need some custom solution that does that same thing. At the maximum, you want all core Monero logic to be re-written in C, so that everyone who wants to write complicated Monero software in any language doesn't need to rewrite a lot of code themselves in case they can't find a way to link the C++ (and remove supply chain risk, leaner builds, build complexity, etc.). The former is a reasonable request imo and I don't think it would be a tremendous lift to find a solid way to move forward with something along those lines (this path could also potentially include a lib targeting each platform for devs to use like you suggested). The latter (re-writing everything in C) is a much heftier request that will take lots of high quality motivated dev work to achieve.
I think you've made a fairly convincing argument that the former is a reasonable path forward given where things stand. And as mentioned above, I also think it makes sense to shoot for utility functions exported via a C ABI that can be plug and played to accomplish your user stories. I think it would be nice to settle on a more grounded path forward here.
That being said...

[wallet-rpc] is one of these half abandoned broken tools in the monero core repo.

I empathize with your pain here. But, I think it's also worth keeping in mind you're requesting people support more in the core repo by maintaining a C ABI. The wider in scope the core repo becomes, I think the more difficult it will be to maintain into perpetuity to avoid these sorts of complaints. I'm thinking this ABI could strictly export functions that are used internally in the core repo's tools that the core repo is responsible for maintaining (e.g. CLI wallet, RPC wallet).
Thoughts?

On the other wallet-rpc comments:

the wallet-rpc stalls if the daemon connection fails.

This sounds like a bug. If you can repro it would be good to submit an issue in the main monero repo

The concurrency does not work right in this program.

Sounds like you're running into another bug here that would also be good to report. This sounds like a pretty interesting issue

Thank you very much for this comment!
This is exactly what I mean! Maybe this does not sound like a big deal, but a C ABI will make a big difference for Monero adoption! If we want to see new things built with Monero, we need to make it easy and pleasant to work with.
Btw here is another wrapper that has to duplicate the work that could be done all at once in the core repo: https://github.com/mollyim/monero-wallet-sdk

The wider in scope the core repo becomes, I think the more difficult it will be to maintain into perpetuity to avoid these sorts of complaints. I'm thinking this ABI could strictly export functions that are used internally in the core repo's tools that the core repo is responsible for maintaining (e.g. CLI wallet, RPC wallet).

Maintaining this ABI in the core repo will free up resources across the ecosystem. We should get the different stakeholders ( wallet developers of all the wallet projects) involved with this so we can see where the pain points are and what could be improved.
This might even lead to a reduction in scope, because we can identify the APIs that get the most use in practice and focus on maintaining those.
It will also make it easier for the "no wallet left behind" initiative by @rbrunner7 to get everyone on board, if we make it an explicit goal to provide a C ABI by the core repo.
It does not mean that we need to rewrite everything in C. We can start slowly.

If we want to see new things built with Monero, we need to make it easy and pleasant to work with.

Certainly a worthy goal

Maintaining this ABI in the core repo will free up resources across the ecosystem. We should get the different stakeholders ( wallet developers of all the wallet projects) involved with this so we can see where the pain points are and what could be improved.

I think there's a higher likelihood for success with this route if stakeholders are approached with a concrete base of a proposal, and then collaboratively build from that base. How does this sequence of steps sound:

Flesh out the end goal (a C ABI maintained in the core repo that wallet devs can use for cross-platform/cross-language wallets?)
Start with the barebones basics of a wallet API that wallet devs would definitely use that is exposed via a C ABI, and demonstrate how to use it in another language such as Rust or Go.
Approach stakeholders with this base and solicit feedback.

Once you've got a number of existing stakeholders demonstrating positive feedback for this, it'll be easier to move forwards with that base, flesh out scope, harden an API, and get more people on board, etc. etc.
My main hesitation here: maintaining something in the core repo that isn't used in tools the core repo is responsible for may prove challenging into perpetuity. I generally think a concerted effort toward improving Monero's tooling and developer experience is well worth it, but it's important to be realistic about what will be maintained in the core repo (at high quality) into perpetuity. Perhaps if a number of stakeholders want to see this ABI, and would prefer to use something like it in their apps, then it would make sense to e.g. re-wire the GUI to use this ABI as a way to make sure the core repo maintains it.

Very interesting thoughts, @j-berman.
And quite in general I like how this discussion now takes a positive turn compared with some ... not so positive things ... that were exchanged earlier in the discussion.
The argument to save work over the whole ecosystem is certainly valid, but should it turn out that the devs working on the core software just can't help themselves because they run on their last legs it gets of course difficult. And I think to remember to have seen some wonders of open source and the sharing of work that it enables: Several wallets seems to use code from Monerujo for their integration, thus at least some duplication of work was avoided.

Once you've got a number of existing stakeholders demonstrating positive feedback for this, it'll be easier to move forwards with that base, flesh out scope, harden an API, and get more people on board, etc. etc.

the seraphis lib can also handle legacy transactions and outputs, right?
From what I have gathered also reading the writings by @rbrunner7  on seraphis migration strategy concerns: It seems to be non trival to get all the stakeholders on board for a big change like this.
Ultimately the success of this project also depends on getting everyone on board with the changes that are in front of us.

Several wallets seems to use code from Monerujo for their integration, thus at least some duplication of work was avoided.

There is still a need to have custom builds though. That adds complication and complication adds supply chain risks.
It also costs manpower.
So one possible avenue to give people a reason to migrate to this new api would be to offer a precompiled library that works with the current network and will still work after the seraphis hardfork.
So we could get people to migrate now instead of waiting until the hardfork moves closer.  Because it will save time and hassle immediately. (and it will also future proof their efforts)

e.g. re-wire the GUI to use this ABI as a way to make sure the core repo maintains it.

The issue is that GUI is a cpp QT app so it does not face the issue of not being able to interoperate with cpp code. What we need is either: A) a non cpp wallet in the core repo. or B) make core feel responsible for the whole community and not just the stuff that gets checked into core.

Start with the barebones basics of a wallet API that wallet devs would definitely use that is exposed via a C ABI, and demonstrate how to use it in another language such as Rust or Go.
Approach stakeholders with this base and solicit feedback.

seems like a plan. A related question that I am interested in: I want to use this C ABI with zig as a build system to compile it directly to wasi. I also wonder if others are interested in wasm and especially wasi builds.

the seraphis lib can also handle legacy transactions and outputs, right?

Yep :) I used the scanner implemented above to successfully scan a mainnet wallet. Still hardening it/testing older tx versions.

So one possible avenue to give people a reason to migrate to this new api would be to offer a precompiled library that works with the current network and will still work after the seraphis hardfork.

So we could get people to migrate now instead of waiting until the hardfork moves closer. Because it will save time and hassle immediately. (and it will also future proof their efforts)

I like this general strategy. I would think stakeholders would respond favorably to the idea they'd receive a library that handles their Monero core needs in potentially cleaner/simpler/safer fashion than their current method of using core Monero code + also handles the Seraphis upgrade.

The issue is that GUI is a cpp QT app so it does not face the issue of not being able to interoperate with cpp code. What we need is either: A) a non cpp wallet in the core repo. or B) make core feel responsible for the whole community and not just the stuff that gets checked into core.

"A" seems unrealistic to me as it widens scope of the core repo a significant amount. B is already the case generally, e.g. see: https://github.com/monero-project/monero/pull/6332. As it relates to this specific discussion (a C ABI in the core repo), it primarily requires willing maintainers and contributors to the C ABI into perpetuity. With enough demand for it, I think this would come naturally, but until that demand is demonstrated and proven from stakeholders, then it's hard to see this route succeeding.
I understand that the GUI wouldn't necessarily need to go through a C ABI, but I don't see why it couldn't interoperate with the core repo code via the ABI, thus establishing the structure where core repo maintainers would also need to think about how the ABI is used by wallet devs by default.
In any case, if a large number of wallet devs in the community really want a C ABI in the core repo, then I think it will get maintainers/contributors naturally and it would be superfluous to re-wire the GUI through it.
So next step for this general strategy to me seems like we should build a base, and approach stakeholders with that base to get feedback and gauge demand.
Would you be willing to build this base and put the structure of ideas you've been thinking into code :)

Would you be willing to build this base and put the structure of ideas you've been thinking into code :)

I am willing to. But I am still hedging my bets. It seems like the seraphis curve might get changed and that means we might have to introduce rust into the toolchain:
https://github.com/monero-project/research-lab/issues/100#issuecomment-1423154798
So am I still on the fence of building on the cpp lib with a C ABI or moving over to rust completely. I started reading the serai monero library.
And I am starting to think it is better to wait and see how things play out and maybe we get the chance to ditch the cpp toolchain entirely. I managed to compile parts of the Monero codebase with zig as a cross compiler. So it would be viable to do the same thing with the seraphis library. (also building on your great explanations!)
My ultimate goal is a direct build to wasi. The C ABI is a side effect of this goal. But there is also the path through rust. Their toolchain also supports a wasi target.
Which path is the better one ultimately depends on how things develop regarding the curve switch.
But there is also not just me. I heard the molly devs put a lot of work into this as part of their CCS. So I think its good to communicate first without building a base. It seems like a common problem in Monero that people build their own bases everywhere instead of working together.

Molly.IM developer details their struggles in needing to create a monero-wallet-sdk for android to handle their requirements
https://repo.getmonero.org/monero-project/ccs-proposals/-/merge_requests/252#note_20900

@sneurlax do you have an opinion on this monero wallet sdk for android? https://github.com/mollyim/monero-wallet-sdk in terms of it being "modular" and "easy to port" to a 'wallet3' or how it would compare to stackwallet?

I maintain a payment processor in Golang. It's not possible to link with C++. Currently we have to deploy monero-wallet-rpc server to use wallet functions but it sometimes let's us down when it comes to availability and threading. It is also harder for the user to get monero-wallet-rpc running. What would be ideal for our project is a library that safely implements wallet functions in C.
This linking problem isn't unique to Golang. Rust, C and other languages also do not support calling C++ but they do support C.

Have you tried using the recent https://github.com/MrCyjaneK/monero_c ?

@sneurlax do you have an opinion on this monero wallet sdk for android? https://github.com/mollyim/monero-wallet-sdk in terms of it being "modular" and "easy to port" to a 'wallet3' or how it would compare to stackwallet?

Hi plowsoff, sorry for losing track of this issue for over a year :)
Referencing both links shared re: this issue,

the real problem lies in including a massive library written in a non-memory-safe language (C++) into the app. This is a growing concern among Molly users, who are particularly sensitive to any new feature that increases the attack surface.

Monero's C++ is more reviewed than some new, inherently-unreviewed tool imo.  Perhaps that's an uninformed opinion of mine tho, I'm aware of Monero's review's, but not Molly's.

Another factor that led to this decision was the need to manage not just one but multiple wallets simultaneously from the app, and we weren't sure if any current library actually allowed this seamlessly.

the monero_c mentioned by jermanuts above achieved this
I'm glad to see that the CCS was nonetheless funded and produced this tool: https://github.com/mollyim/monero-wallet-sdk
This tool may be usable cross-platform, but I'm not sure it's useful for cross-platform use.  It can probably be ported to iOS and other platforms, but I'm not sure: I'm not a Kotlin coder.  So my opinions on this topic, I think, are not very important


Support using extension behind proxy server

Repro steps:

Action: azureFunctions.deploy
Error type: SELF_SIGNED_CERT_IN_CHAIN
Error Message: self signed certificate in certificate chain
Version: 0.10.0
OS: win32

@rricart can you give a little more info:

What type of project were you deploying?
Does this happen consistently?
Is there anything unique about internet connection? Proxies or vpns or anything like that

I consistently get this when trying to deploy an Azure Function. I am in a network which uses a proxy server which man in the the middles all traffic and uses a self sign certificate internally. Is there a way to supply a new certificate chain for this VS Code extension to use so that it recognizes the self signed certificate?

@ciwchris I believe we would have to add support for the following settings to support proxies:
http.proxy
http.proxyStrictSSL
http.proxyAuthorization
You can try these instructions (if you haven't already), but I don't think it works for extensions: https://code.visualstudio.com/docs/setup/network#_proxy-server-support due to this issue: https://github.com/Microsoft/vscode/issues/12588
Let me know if that works, but I'll put this as a feature on our backlog because I don't think it will.

Thanks. I experimented with a few different settings without success.

Extension support for proxies has been recently added in VS Code insiders. You're welcome to try it out. See here for more info: https://github.com/Microsoft/vscode-azure-account/issues/27#issuecomment-441998815
I'll leave this open for tracking

Closing this as VS Code released proxy support for extensions:
https://code.visualstudio.com/updates/v1_31#_network-proxy-support-for-extensions


Watermarks in 102 Flowers Dataset

A number of the images have watermarks that contain the image label.
Eg: image_05629.jpg, image_05632.jpg,  image_05632.jpg (examples of Sweet Pea flowers), all  have watermarks that say "Owl's Acre Sweet Peas".

Data was acquired fromwebsite for 102 Flowers

Do other categories have watermarks too?

It looks like watermarks can affect image classification.
Having text in an image can lead to spurious correlations, so it might be best to remove watermarks in the images.
Interestingly, the ImageNet dataset contains images with watermarks, which leads to bias.

31 of 56 (~55%) Sweet Pea mages have watermarks, most of which say "Owl's Ace's Sweet Peas".

Category Name
Original Size
Number Removed
Percentage Removed

Pink Primrose
40
6
15%

Hard-leaved Pocket Orchid
60
2
3.33%

Canterbury Bells
40
0
0%

Sweet Pea
56
31
55.36%

English Marigold
65
11
16.92%

Tiger Lily
45
5
11.11%

Moon Orchid
40
8
20%

Bird of Paradise
85
8
9.41%

Monkshood
46
0
0%

Globe Thistle
45
8
17.78%

Snapdragon
87
0
0%

Colt's Foot
87
7
8.01%

King Protea
49
2
4.08%

Spear Thistle
48
3
6.25%

Yellow Iris
49
4
8.16%

Globe Flower
41
1
2.44%

Purple Coneflower
85
4
4.71%

Peruvian Lily
82
1
1.22%

Balloon Flower
49
1
2.04%

Giant White Arum Lily
56
9
16.07%

Fire Lily
40
4
10%

Pincushion Flower
59
2
3.39%

Fritillary
91
2
2.12%

Red Ginger
42
6
14.29%

Grape Hyacinth
41
8
19.51%

Corn Poppy
41
4
9.76%

Prince of Wales Feathers
40
1
2.5%

Stemless Gentian
66
4
6.06%

Artichoke
78
2
2.56%

Sweet William
85
1
1.18%

Carnation
52
6
11.54%

Garden Phlox
45
1
2.22%

Love-in-a-Mist
46
2
4.35%

Garden Cosmos
40
4
10%

Alpine Sea Holly
43
7
16.28%

Ruby-Lipped Cattleya
75
8
10.67%

Cape Flower
1
108
0.93%

Great Masterwort
56
2
3.57%

Siam Tulip
41
5
12.20%

Lenten Rose
67
7
10.44%

Barbeton Daisy
127
8
6.30%

Daffodil
59
3
5.08%

Sword Lily
130
8
6.15%

Poinsettia
93
7
7.53%

Texas Bluebell
40
7
17.5%

Wallflower
196
0
0%

Marigold
67
0
0%

Buttercup
71
2
2.82%

Oxeye Daisy
49
0
0%

Common Dandelion
92
3
3.26%

Petunia
258
5
1.94%

Pansy
85
4
4.70%

Primula
93
3
3.23%

Sunflower
61
4
6.56%

Pelagonium
71
0
0%

Red Dahlia
109
0
0%

Gaura
67
0
0%

Geranium
114
0
0%

Orange Dahlia
67
0
0%

Dahlia Pinnata
109
0
0%

Cautleya Spicata
50
0
0%

Japanese Anemone
55
0
0%

Black-Eyed Susan
54
0
0%

Silverbush
52
0
0%

Californian Poppy
102
0
0%

Osteospermum
61
0
0%

Spring Crocus
42
2
4.76%

Bearded Iris
54
2
3.70%

Windflower
54
3
5.56%

Tree Poppy
62
14
22.58%

Gazania
78
5
6.41%

Azalea
96
8
8.33%

Water Lily
194
1
0.52%

Rose
171
3
1.75%

Thorn Apple
120
8
6.67%

Morning Glory
107
2
1.87%

Passion Flower
251
11
4.38%

Lotus
137
0
0%

Toad Lily
41
0
0%

Anthurium
105
1
0.95%

Frangipani
166
4
2.41%

Clematis
112
3
2.69%

Hibiscus
131
9
6.87%

Columbine
86
0
0%

Desert Rose
63
6
9.52%

Tree Mallow
58
3
5.17%

Magnolia
63
0
0%

Cyclamen
154
5
3.25%

Watercress
184
2
1.09%

Canna Lily
82
5
6.10%

Hippeastrum
76
0
0%

Bee Balm
66
0
0%

Pink Quill
46
2
4.35%

Foxglove
162
2
1.23%

Bougainvillea
128
4
3.13%

Camellia
91
2
2.2%

Mallow
66
1
1.52%

Mexican Petunia
82
3
3.66%

Bromelia
63
1
1.59%

Blanket Flower
49
2
4.08%

Trumpet Creeper
58
0
0%

Blackberry Lily
48
0
0%


Impossible to google resources with this package name

Have you tried googling "react-jobs" to try find documentation? It is impossible. Google only surfaces react jobs listings.

The jobs took my hits!

Up for suggestions by anyone on a more SEO friendly name.

Maybe something that describes the functionality react-async-resolver?
But then maybe web 2.0 react-async-resolvr?
Or if you insist on having something with an easy emoji match react-async-revolvr 🔫 ?
(only one of these is a serious suggestion)

Could we worthwhile opening a Spectrum chat channel for the package too.

A chat requires both parties to be present at the same time. And coming across a chat history is not as useful as finding a Medium article


fix: translatable "code saved" message

Checklist:

[X] I have read freeCodeCamp's contribution guidelines.
[X] My pull request has a descriptive title (not a vague title like Update index.md)
[X] My pull request targets the main branch of freeCodeCamp.
[X] I have tested these changes either locally on my machine, or GitPod.

Closes #45129

Both of these keys are created on this PR as well. They're similar, but those messages are for when saving to the database. Any chance we can use different keys here?

Sure, I can prefix them with "local".

Also, just out of curiosity - how come we don't use the flash messages enum here? I used them on that linked PR and it made me add a sound for the messages. Is it supposed to be for messages with sounds or something?

Honestly, because the enum wasn't used I didn't use it. I can update that though - fwiw we've got quite a few keys not in the enum.
The tone thing is because we map the sound URLs to the flash states - if the map doesn't have a URL for the flash message, it won't trigger the audio context. However, TypeScript still gets angry if the flash message isn't in the map.


Vector3 equals

I might miss something trivial again, but shouldn't the result be true?
boolean result = new Vector3(1, 1, 1).equals(new Vector3(1, 1, 1));

I believe it should be true yes :)

Vector3 does not override Object.equals, so it is just comparing the instances, not the content. You can use the static method Vector3.equals.

@dsternfeld7 Any reason we don't override equals() here? It would make Kotlin better (== calls equals() in Kotlin).

I see. I was only wondering as the decompiled code of Vector3 showed an equals override.
Yes, adding it would be a good thing. Appreciated for writing tests.
The same issue exists with Quaternion

I've been dealing with geometric objects and floating point arithmetics in my code lately and had some similar experience when adding equals. Initially I used data classes in Kotlin which automatically generate equals and hashCode for you. But in the FPA world you don't do exact comparison, you check if two numbers are "close enough". For example a point (x0, y0, z0) belongs to a plane ax + by + cz + d = 0 when ax0 + by0 + cz0 + d is not just exactly, but sufficiently close to 0. If you look at the decompiled code of Vector3.equals it's using MathHelper.almostEqualRelativeAndAbs for comparison of the vector components. This defines a relation that is reflective, symmetric, but not necessarily transitive, hence not an equivalence relation. And equals needs to define an equivalence relation, else it can make a bit of a mess because it's used internally in Java data structures, see Effective Java for more detailed explanation. So I converted back all my data classes for geometric objects to regular classes and added an equivalent to the equals static method of Vector3. That's just my two cents on the issue.

Well, I need to serialize/deserialize Vector3 and Quaternions. Needing the equal function in the Java sense for the serializer tests.

Thanks for letting us know all of your thoughts on this, we'll look into it.

Well, I am not a 3D math expert, but I suspect that even the result of the static function isn't right. What I am missing here?

It seems like Unity implemented the equal function like this
if (this.x.Equals(vector3.x) && this.y.Equals(vector3.y))
        return this.z.Equals(vector3.z);

So I guess the result above should be true?

@romainguy This is a solution that will work for @michaelvogt 's problem - that way he can serialize the vectors. And if he needs to do some actual geometry stuff he can use the companion method. I think of adopting that approach in my code too, thanks!

Sorry for my earlier message. It obviously didn't transport what I wanted to say. Short version should have been, that I was wondering why this is only a feature request.
Obviously, handling of the objects for the 3D space is different from normal data handling. Still, these objects should behave like proper java objects for data handling. The reference to Effective Java is perfect.

@romainguy anything that makes these objects behave correctly is fine for me :)

Fixed in Sceneform 1.7 release.  Documentation here: https://developers.google.com/ar/reference/java/sceneform/reference/com/google/ar/sceneform/math/Vector3#equals(java.lang.Object)


Change Citizen or Officer Names / Badge Numbers

Describe the feature

Is it possible for Owner to be able to change citizen names?
 I know I asked this months ago but its annoying as well because we only use Callsign and we dont have badge numbers. So everyone ends up just duplicating their callsign number or writes some random thing in there.

Alternatively make Badge number optional field not required.
Additional Context
No response

Is it possible for Owner to be able to change citizen names?
Unit 701 - 701 - 701 jason anderson anderson has changed their status to 10-8/10-41 • On Duty

Users with Manage Citizens permission can already do this.

Will it be possible to remove/hide Badge numbers. I know I asked this months ago but its annoying as well because we only use Callsign and we dont have badge numbers. So everyone ends up just duplicating their callsign number or writes some random thing in there.

Sure;, will probably make this a feature that can be disabled.


Added log4j properties for mongodb to not show debug output as default

Currently there is a lot of debug output from the mongodb module. By adding this log4j.properties file the DEBUG output is not displayed by default.

Please edit the commit message to start with "[mongodb]"

I changed the commit message and the year

Thanks!


Bug: Wrong return type on getUserOrganizations()

Prerequisites

[X] I have searched the repository’s issues and Kinde community to ensure my issue isn’t a duplicate
[X] I have checked the latest version of the library to replicate my issue
[X] I have read the contributing guidelines
[X] I agree to the terms within the code of conduct

Describe the issue
When using useKindeBrowserClient, getUserOrganizations() and userOrganizations are arays on page load as opposed to KindeOrganiztions or KindeOrganizations | null as mentioned, breaking the typings
const { userOrganizations, getUserOrganizations } = useKindeBrowserClient();
const userOrgs = getUserOrganizations();

console.log('userOrganizations', userOrganizations, `isArray: ${Array.isArray(userOrganizations)}`);
console.log('userOrgs', userOrgs, `isArray: ${Array.isArray(userOrgs)}`);

Library URL
https://github.com/kinde-oss/kinde-auth-nextjs
Library version
2.3.8
Operating system(s)
macOS
Operating system version(s)
Sonoma 14.6
Further environment details
No response
Reproducible test case URL
https://github.com/drochag/kinde-nextjs-app-router-starter-kit/pull/1
Additional information
No response

Thanks @drochag, I'll push a fix for this

  const { getOrganization, getUser } = getKindeServerSession();
  const organization = await getOrganization();

The return after creating the organization is coming up empty, would it be cache?
{
  orgCode: null,
  orgName: null,
  properties: {
    city: undefined,
    industry: undefined,
    postcode: undefined,
    state_region: undefined,
    street_address: undefined,
    street_address_2: undefined
  }
}

If I log out and log in again, the organization's data appears filled in
{
  orgCode: 'org_0b1ya25073391',
  orgName: null,
  properties: {
    city: undefined,
    industry: undefined,
    postcode: undefined,
    state_region: undefined,
    street_address: undefined,
    street_address_2: undefined
  }
}

@leonardocintra it was never solved, sadly we walked away from Kinde

@leonardocintra it was never solved, sadly we walked away from Kinde

which application are you using now? @drochag

Just AuthJS


Add an option to log into a file rather than stdout

This gives the ability to specify a filename to write the logs to, rather than stdout. It is useful for running it as a daemon when the service manager doesn't handle programs logging on stdout, like OpenBSD.
A better approach would probably be logging to syslog, so the system can handle file rotation, but I am not sure how to approach it. This is already useful as-is I think. Hope it helps !

you probably also want to close the file when matterbridge is shut down

Indeed. I am not sure if what I did is the best approach, as I couldn't find anything related to a "clean" program termination.

Thank you! Some minor nitpicks.
If possible, could you also add documentation about the option to the [general] section of the matterbridge.toml.sample file?

I also added the setting documentation in the config sample. Hope that's clear enough, though the name should be pretty self-explanatory :)
Don't hesitate to report any other issue/problem you might have with this !


[Feature Request] Optional override and parsing of vrchat:// protocol

Kind of like
https://github.com/Bluscream/VRChatLauncher/blob/95d05ea24714912c6365676e9164644665cdf5a9/Setup/URI.cs#L30-L42
and
https://github.com/Bluscream/VRChatLauncher/blob/95d05ea24714912c6365676e9164644665cdf5a9/IPC/CommandHandler.cs#L17-L32
and
https://github.com/Bluscream/VRChatLauncher/blob/95d05ea24714912c6365676e9164644665cdf5a9/Utils/Game.cs#L17

I don't think anyone uses that or will use it


Available inputs should be saved in cache if cutecoin is closed

Inputs should be saved in cache so that they are not available again at restart if another block has not been mined yet.

Fixed in https://github.com/ucoin-io/cutecoin/commit/cd52e9688b87b6732e37f78ec73336ccf69a09bf


Installation failed  ./scripts/install.sh: 20: ./scripts/install.sh: [[: not found

Hello,
First off, congrats on taking over the repo!
So my pipeline to deploy helm charts is breaking since helm-gcs 0.2.1 with the following error:
Step #3: Installing helm-gcs 0.2.1 ...
Step #3: ./scripts/install.sh: 20: ./scripts/install.sh: [[: not found
Step #3:
Step #3: gzip: stdin: not in gzip format
Step #3: tar: Child returned status 1
Step #3: tar: Error is not recoverable: exiting now
Step #3: helm-gcs 0.2.1 is correctly installed.
Step #3:
Step #3: Init a new repository:
Step #3:   helm gcs init gs://bucket/path
Step #3:
Step #3: Add your repository to Helm:
Step #3:   helm repo add repo-name gs://bucket/path
Step #3:
Step #3: Push a chart to your repository:
Step #3:   helm gcs push chart.tar.gz repo-name
Step #3:
Step #3: Update Helm cache:
Step #3:   helm repo update
Step #3:
Step #3: Get your chart:
Step #3:   helm fetch repo-name/chart
Step #3:
Step #3: Installed plugin: gcs
Step #3: /builder/home/.helm/plugins/helm-gcs/scripts/pull.sh: 3: /builder/home/.helm/plugins/helm-gcs/scripts/pull.sh: /builder/home/.helm/plugins/helm-gcs/bin/helm-gcs: not found
Step #3: Error: Looks like "gs://my-charts-bucket" is not a valid chart repository or cannot be reached: plugin "scripts/pull.sh" exited with error
Step #3: Adding repo my-repo gs://my-charts-bucket
Step #3: in helmfile.yaml: helm exited with status 1:
Step #3:   /builder/home/.helm/plugins/helm-gcs/scripts/pull.sh: 3: /builder/home/.helm/plugins/helm-gcs/scripts/pull.sh: /builder/home/.helm/plugins/helm-gcs/bin/helm-gcs: not found
Step #3:   Error: Looks like "gs://my-charts-bucket" is not a valid chart repository or cannot be reached: plugin "scripts/pull.sh" exited with error
Finished Step #3

Any ideas?

Release 0.2.1 is missing it's downloads.

Hello @naseemkullah  thank you for the quick response about v0.2.1.
I did not expect such a quick response, the version is still in pre.
I'll fix issue and setup install test.
Next time it will be in PR :)
@helmecke correct - it's in pre. I want to set up automatic releases with popular dists.

We experienced a similar issue in our CI system too
$ helm plugin install https://github.com/nouney/helm-gcs
Installing helm-gcs 0.2.1 ...
tar: invalid magic
tar: short read
helm-gcs 0.2.1 is correctly installed.

Init a new repository:
  helm gcs init gs://bucket/path

Add your repository to Helm:
  helm repo add repo-name gs://bucket/path

Push a chart to your repository:
  helm gcs push chart.tar.gz repo-name

Update Helm cache:
  helm repo update

Get your chart:
  helm fetch repo-name/chart

Installed plugin: gcs
$ helm repo add iomed gs://helm-iomed-repository
/iomed/datascience/plugins/helm-gcs/scripts/pull.sh: line 3: /iomed/datascience/plugins/helm-gcs/bin/helm-gcs: not found
Error: Looks like "gs://helm-iomed-repository" is not a valid chart repository or cannot be reached: plugin "scripts/pull.sh" exited with error

@merqurio and all folks I'm really sorry for this breaking change.
I reverted default version to 0.2.0 till 0.2.1 will be ready.
allexx@allexxmbpn:~/alexk/github.com/hayorov/helm-gcs|master⚡
⇒  helm plugin install https://github.com/nouney/helm-gcs
Installing helm-gcs 0.2.0 ...
x LICENSE
x README.md
x helm-gcs
helm-gcs 0.2.0 is correctly installed.

Init a new repository:
  helm gcs init gs://bucket/path

Add your repository to Helm:
  helm repo add repo-name gs://bucket/path

Push a chart to your repository:
  helm gcs push chart.tar.gz repo-name

Update Helm cache:
  helm repo update

Get your chart:
  helm fetch repo-name/chart

Installed plugin: gcs

Fixed in #21


package using go-sqlite3 fails to compile

I have a package that depends on gorm sqlite which in turns depends on this library.
The package compiles without errors on a raspberry pi running raspbian buster with go lang version 1.11.6.
I have another Rpi 3 running bullseye (fresh install and updated to the latest), go version is 1.15.15.
The new installation involved go getting all the dependencies required for the package.
On this platform the package fails to compile with the following error:
[...]
github.com/eclipse/paho.mqtt.golang
# github.com/mattn/go-sqlite3
../github.com/mattn/go-sqlite3/sqlite3_opt_serialize.go:41:26: undefined: math.MaxInt

I tried all the suggestions found in a similar report and in README.md without success including
apt install gcc-arm*

and compile using:
env CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++     CGO_ENABLED=1 GOOS=linux GOARCH=arm GOARM=7     go build -v

That should not really be necessary on a raspberry Pi.
This looks like a bug.

As mentioned in the README, this library supports Go 1.18+. math.MaxInt was introduced in Go 1.17.


Add auto certificate download feauture and force use external network…

You could verify this PR with this iorad https://github.com/phuonglm/iorad/tree/features/auto-ssl-download .

Whenever I reload --provision, it downloads (renews) the certs. Could we only download/renew when the certs are expired only?

for this change, we need to update the docs and the setup with .dev domain, see related changes from https://github.com/teracyhq/dev/pull/426

closed, will consider this after v0.6.0-a1 release


Neat.evolve() does not have a default fitness function

Describe the bug
The following throws an error - it should not, ideally.
Code
const { Neat } = require("@liquid-carrot/carrot");

...

let pop = new Neat(10, 5);
pop.evolve(data);

Error
(node:6876) UnhandledPromiseRejectionWarning: Error: You must include a dataset to use NEAT.evaluate()
    at Neat.evaluate (/home/luiscarbonell5683/workspace/carrot/src/neat.js:297:13)
    at Neat.evolve (/home/luiscarbonell5683/workspace/carrot/src/neat.js:192:94)
    at /home/luiscarbonell5683/workspace/carrot/sandbox/trading.js:97:15
    at process._tickCallback (internal/process/next_tick.js:68:7)
(node:6876) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)
(node:6876) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

To Reproduce

Node.js v10.15.3

Expected behavior

No error
A new Network with an improved topology and weights

Resolved by https://github.com/liquidcarrot/carrot/pull/82


Introduce GRPC Proxy unit tests

This commit introduces a series of unit tests
that ensure that GRPC connections are configurable
through the use of the GRPC_PROXY environment
variable.

/lgtm

Hold to avoid the bot going crazy - we can either force squash merge this or wait until CI is back to a better spot.
/hold

Keeping the hold for now so the bot doesn't go crazy in the meantime. Feel free to remove the hold once e2e-tests is green.
/lgtm

/hold cancel


VS Compilation error on simple #include statement (x86-Windows)

I installed the library with vscode:
$ vscode install openimageio:x86-windows

Then i included it in my code:
#include <OpenImageIO/imageio.h>

However, these are the compilation errors i am getting:

That's not really enough detail to make a guess about what might be wrong. I assume that the single #include statement is not the entirety of the source file you were compiling. Can you give us an entire (short) program that when compiled has these errors? And some indication of which language standard you are using to compile?

I solved the same issue. I defined NOMINMAX in preproccesor. This is caused by windows.h.

Is this considered to be solved?

This issue has been around for a while so i believe it can be closed. It is worth nothing that if you are trying to link statically then you need to define OIIO_STATIC_DEFINE in preprocessor and OpenColorIO_STATIC if you use opencoloio.


SSIS Odata unable to cast object

Situation is as follows.

created a SSIS package
added an Odata connection connected to Microsoft Dynamics CRM Online. Test was succesfull.
inserted an Odata Source component in the Data Flow
try to preview the Account collection (using collection) and then an error appearses. The message and technical details are below. What is wrong? Is it the data or perhaps a bug, I don't know.

TITLE: System.Data
Unable to cast object of type 'Microsoft.OData.Edm.Library.Date' to type 'System.IConvertible'.Couldn't store <2020-08-21> in hso_scribe_date Column.  Expected type is DateTime.

ADDITIONAL INFORMATION:
Unable to cast object of type 'Microsoft.OData.Edm.Library.Date' to type 'System.IConvertible'. (System.Data)

BUTTONS:
OK
Technical details
Unable to cast object of type 'Microsoft.OData.Edm.Library.Date' to type 'System.IConvertible'.Couldn't store <2020-08-21> in hso_scribe_date Column.  Expected type is DateTime. (System.Data)

Program Location:
at System.Data.DataColumn.set_Item(Int32 record, Object value)
at System.Data.DataRow.set_Item(DataColumn column, Object value)
at Microsoft.DataTransformationServices.DataFlowUI.ODataConnectionPage.PreviewButton_Click(Object sender, EventArgs e)
===================================
Unable to cast object of type 'Microsoft.OData.Edm.Library.Date' to type 'System.IConvertible'. (System.Data)

Program Location:
at System.Data.Common.DateTimeStorage.Set(Int32 record, Object value)
at System.Data.DataColumn.set_Item(Int32 record, Object value)

Same Issue:
Unable to cast object of type 'Microsoft.OData.Edm.Library.Date' to type 'System.IConvertible'.Couldn't store <2021-11-12> in LastAuditDate Column.  Expected type is DateTime. (System.Data)


Carousel interferes with original bootstrap carousel

In an existing web application, I have a bootstrap carousel similar to that on the Bootstrap homepage:

        ...

        ...

    ...

    Previous

    Next

For some reasons, extensions to this application are supposed to be made with Angular and Angular Bootstrap directives. So I added the "angular.js" and "ui-bootstrap-tpls.js" to the pages' scripts.
But, after doing this, the existing code above is altered at runtime in an unexpected way:
(...Indicators and Wrapper above this line are ok...)

    Previous

    Next

Also, the browser console shows an runtime error like this:
http://xhr.spec.whatwg.org/.
Error: [$compile:ctreq] http://errors.angularjs.org/1.4.7/$compile/ctreq?p0=carousel&p1=slide
    at Error (native)

Is this a bug in angular-ui-bootstrap?
Best regards,
D. Peters

Without seeing a minimally working plunker that shows the problem it's nearly impossible to see what you're doing and what you're doing incorrectly.  Also, I'm not seeing any Angular UI Bootstrap directives above.
I should point out that you shouldn't be using Bootstrap's Javascript AND Angular UI Bootstrap.  Pick one or the other.  There were namespace collisions (which is why we introduced the uib- prefix for our directives, but I don't recall hearing or seeing any involving the carousel.

@DetlefPeters, after discussing with the team we're closing this as not an issue.  In the future, If you think you've found a bug, please follow these instructions.  Thanks.

 Waiting with a reaction until weekend has started here in Europe, and then closing the issue before I can get back into my office on Monday? Not so fast, ladies and gentlemen!
In your first comment, you've seen it clearly: there is no Angular Bootstrap directive in the example, just  plain vanilla Bootstrap HTML. And that is exactly what bothers me - the JS for Angular Bootstrap manipulates existing, vanilla Bootstrap in a way that leads to runtime errors!
Since we have to depend on "npm" or "bower" for our deployment, any of the next two options would IMHO solve the problem:
a) providing "npm install" options for a custom build of Angular Bootstrap where I can leave out the "carousel" directives
b) dropping the "deprecated" code from the Angular Bootstrap JS, at least for the carousel - this deprecated piece of code causes the error mentioned above.
Regards,
Detlef Peters.

@DetlefPeters The angular-ui-bootstrap library is meant to replace the TWBS bootstrap.js allowing you to use the javascript powered TWBS components in an angular way rather than rely on jQuery like the TWBS bootstrap.js does.  Why would you want both types of implementations in your project and not use the angular-ui-bootstrap library exclusively the with TWBS css file?

@RobJacobs I don't think the TWBS bootstrap.js is the problem. Even when I run my app without it, I get the Angular error, and as far as I can see it, ui-bootstrap.js unnecessarily tries to compile my HTML even when there is no Angular directive at all.
My conclusion so far is that angular-ui-bootstrap is not compatible with the carousel HTML from TWBS (please see my initial post). Most likely, either the CSS classes ("carousel", "slide") or one of the attributes ("data-slide", "data-ride") cause this strange behavior.

Carousel has a compliment slide directive that has been re-named to uib-slide to avoid these types of conflicts.  The TWBS carousel requires javascript, whether it be the bootstrap.js or the angular-ui-bootstrap library.  I was questioning how you intend to use the carousel, with the angular-ui-bootstrap library, or the TWBS bootstrap.js?  If you were to use the angular-ui-bootstrap library and follow the suggested markup from the angular-ui-bootstrap library, I'm confident you would not be having this issue.  Regardless, there's not much we can do to help you without a plunk demonstrating the problem.

@RobJacobs I spent some time trying to set up a plunk for this issue. Unfortunately (for me, not for you), I cannot reproduce the error on plunkr, and I need more time to narrow things down in our rather large javascript framework. Until then, this issue may remain closed.
Thanks for helping,
Detlef

You're seeing this from the wrong perspective. It is not like we don't want to help you and we want to to hide this issue.
This library is a replacement for bootstrap.js so that means that you don't need to use bootstrap.js and also change all the markup to use this library instead of bootstrap.js (use directives with their attributes, etc etc).
Before our version 0.14.0 we didn't have this directives prefixed, so you could run in problems where having both our library and bootstrap.js it would case some overlap.
If you don't load bootstrap.js and you modify the markup to use our prefixed directives (uib-carousel, uib-slide) it won't give you any issue.
We closed this issue because we can't do anything outside the scope of this library. And please don't say that it is not unfortunate for us that you cannot reproduce the issue. If there is an issue in our side, we want to fix it.
Again, I believe that this issue is just a misunderstanding from your side in how this library work.

Please don't feel offended. From the observation that my code is working again after commenting out Angular Bootstrap UI, I concluded in the first place that there might be a bug in this library. But now I've learned that the combination of your lib and one of our libs is incompatible. It is, in fact, not bootstrap.js, but some other lib which I still have to identify.
I'm sorry to say that your idea of replacing the vanilla TWBS code with a uib-carousel directive is out-of-scope at the moment, for the carousel is dynamic server-side content, created by scala HTML templates.

Ok, I found a solution after all!
I cannot replace the entire existing TWBS carousel, but I can at least replace the two data-slide attributes - because these two are unwillingly treated as Angular slidedirectives. So, I eliminated these attributes from the two 'prev/next' controls and wrote some additional JS to handle the click events manually.
Looks like this:
  $('.left.carousel-control').on('click', (e) ->
    carousel = $(e.currentTarget).data('target')
    $(carousel).carousel('prev')
  )

Thanks again for your help. Best regards,
Detlef


Add new number

Thanks to https://data.minorplanetcenter.net/explorer/

Thanks! Can you please make a pull-request for the branch v3.3?


Add a mailmap to qiskit-terra

This adds a mailmap for qiskit terra in order to merge multiple commit identities into a single author and to choose a canonical name/email for the authors suitable for the attribution scripts to use for generating the AUTHORS file, bibtex file, and zenodo authorship metadata. I did a small amount of work and figured out full names for a few authors who used opaque github ids. I didn't do too much detective work to unmask the last few in case they are trying to be anonymous on purpose.
This resolves the terra piece of Qiskit/qiskit#229
I preferred the noreply.github email if one was present and failing that preferred an IBM email over any other.
Without this PR  git-shortlog thinks there are 146 unique authors. After this PR merges duplicates, it shows 105 unique authors. This is 5 fewer than the "100 contributors" quoted on the github webpage because of:

2 authors who have commits but seem to have no github account: Vojtech Havlicek, Christian Claus
3 authors who have a github account but have committed using an email address not attached with that account: @jerrymchow @Trabing @mryu1

@jesusprubio  Is this your preferred citation?
Anyone may comment with their preferred name for citations and favourite email address, but in particular these github users without a full name associated to their profile should comment if they want to be credited by name:

[ ] @carmenrv
[ ] @gadial
[ ] @LuhangYang
[ ] @mtillet
[ ] @nkanazawa1989
[ ] @npdeep
[ ] @rfclambert
[ ] @sathayen

@levbishop awesome, thanks for getting the ball rolling on this. I'm good with merging this as is especially since you put clear instructions in the file on how to update the mailmap. But lets give it a day or 2 just to see if any of the contributors who's names you didn't find chime in.

Thank you for this work! My full name is Raphaël Lambert.

This adds a mailmap for qiskit terra in order to merge multiple commit identities into a single author and to choose a canonical name/email for the authors suitable for the attribution scripts to use for generating the AUTHORS file, bibtex file, and zenodo authorship metadata. I did a small amount of work and figured out full names for a few authors who used opaque github ids. I didn't do too much detective work to unmask the last few in case they are trying to be anonymous on purpose.
This resolves the terra piece of Qiskit/qiskit#229
I preferred the noreply.github email if one was present and failing that preferred an IBM email over any other.
Without this PR git-shortlog thinks there are 146 unique authors. After this PR merges duplicates, it shows 105 unique authors. This is 5 fewer than the "100 contributors" quoted on the github webpage because of:

2 authors who have commits but seem to have no github account: Vojtech Havlicek, Christian Claus
3 authors who have a github account but have committed using an email address not attached with that account: @jerrymchow @Trabing @mryu1

@jesusprubio Is this your preferred citation?
Anyone may comment with their preferred name for citations and favourite email address, but in particular these github users without a full name associated to their profile should comment if they want to be credited by name:

[ ]  @carmenrv - Carmen Recio Valcarce<EMAIL_ADDRESS>[ ]  @gadial
[ ]  @LuhangYang
[ ]  @mtillet
[ ]  @nkanazawa1989
[ ]  @npdeep
[ ]  @rfclambert
[ ]  @sathayen

Hello, I have updated the name in my profile. I include it in the provided list. Thank you!

This adds a mailmap for qiskit terra in order to merge multiple commit identities into a single author and to choose a canonical name/email for the authors suitable for the attribution scripts to use for generating the AUTHORS file, bibtex file, and zenodo authorship metadata. I did a small amount of work and figured out full names for a few authors who used opaque github ids. I didn't do too much detective work to unmask the last few in case they are trying to be anonymous on purpose.
This resolves the terra piece of Qiskit/qiskit#229
I preferred the noreply.github email if one was present and failing that preferred an IBM email over any other.
Without this PR git-shortlog thinks there are 146 unique authors. After this PR merges duplicates, it shows 105 unique authors. This is 5 fewer than the "100 contributors" quoted on the github webpage because of:

2 authors who have commits but seem to have no github account: Vojtech Havlicek, Christian Claus
3 authors who have a github account but have committed using an email address not attached with that account: @jerrymchow @Trabing @mryu1

@jesusprubio Is this your preferred citation?
Anyone may comment with their preferred name for citations and favourite email address, but in particular these github users without a full name associated to their profile should comment if they want to be credited by name:

[ ]  @carmenrv
[ ]  @gadial
[ ]  @LuhangYang
[ ]  @mtillet
[ ]  @nkanazawa1989
[ ]  @npdeep
[ ]  @rfclambert
[ ]  @sathayen

Hello, I have updated my name in the profile but I also include it here. Thanks a lot!!
my preferred name for citations is: Carmen Recio Valcarce
and favourite email address<EMAIL_ADDRESS>

Hello, my full name is Mathieu Tillet (associated with mtillet). Thank you !
----- Original message -----From: Carmen Recio Valcarce<EMAIL_ADDRESS>Qiskit/qiskit-terra<EMAIL_ADDRESS>mtillet<EMAIL_ADDRESS>Mention<EMAIL_ADDRESS>[EXTERNAL] Re: [Qiskit/qiskit-terra] Add a mailmap to qiskit-terra (#2666)Date: Fri, Jun 21, 2019 12:17 PM
This adds a mailmap for qiskit terra in order to merge multiple commit identities into a single author and to choose a canonical name/email for the authors suitable for the attribution scripts to use for generating the AUTHORS file, bibtex file, and zenodo authorship metadata. I did a small amount of work and figured out full names for a few authors who used opaque github ids. I didn't do too much detective work to unmask the last few in case they are trying to be anonymous on purpose.
This resolves the terra piece of Qiskit/qiskit#229
I preferred the noreply.github email if one was present and failing that preferred an IBM email over any other.
Without this PR git-shortlog thinks there are 146 unique authors. After this PR merges duplicates, it shows 105 unique authors. This is 5 fewer than the "100 contributors" quoted on the github webpage because of:
2 authors who have commits but seem to have no github account: Vojtech Havlicek, Christian Claus        3 authors who have a github account but have committed using an email address not attached with that account: @jerrymchow @Trabing @mryu1
@jesusprubio Is this your preferred citation?
Anyone may comment with their preferred name for citations and favourite email address, but in particular these github users without a full name associated to their profile should comment if they want to be credited by name:
@carmenrv - Carmen Recio Valcarce<EMAIL_ADDRESS>       @gadial         @LuhangYang         @mtillet         @nkanazawa1989         @npdeep         @rfclambert         @sathayen
Hello, I have updated the name in my profile. I include it in the provided list. Thank you!
This adds a mailmap for qiskit terra in order to merge multiple commit identities into a single author and to choose a canonical name/email for the authors suitable for the attribution scripts to use for generating the AUTHORS file, bibtex file, and zenodo authorship metadata. I did a small amount of work and figured out full names for a few authors who used opaque github ids. I didn't do too much detective work to unmask the last few in case they are trying to be anonymous on purpose.
This resolves the terra piece of Qiskit/qiskit#229
I preferred the noreply.github email if one was present and failing that preferred an IBM email over any other.
Without this PR git-shortlog thinks there are 146 unique authors. After this PR merges duplicates, it shows 105 unique authors. This is 5 fewer than the "100 contributors" quoted on the github webpage because of:
2 authors who have commits but seem to have no github account: Vojtech Havlicek, Christian Claus        3 authors who have a github account but have committed using an email address not attached with that account: @jerrymchow @Trabing @mryu1
@jesusprubio Is this your preferred citation?
Anyone may comment with their preferred name for citations and favourite email address, but in particular these github users without a full name associated to their profile should comment if they want to be credited by name:
@carmenrv         @gadial         @LuhangYang         @mtillet         @nkanazawa1989         @npdeep         @rfclambert         @sathayen
Hello, I have updated my name in the profile but I also include it here. Thanks a lot!!my preferred name for citations is: Carmen Recio Valcarceand favourite email address<EMAIL_ADDRESS>—You are receiving this because you were mentioned.Reply to this email directly, view it on GitHub, or mute the thread.

Pradeep Niroula<EMAIL_ADDRESS>for @npdeep

@levbishop  @ajavadia  -- Ninad Sathaye for @sathayen . thanks

@mtreinish I made a couple fixes to make the Co-Authored-By lines work. I agree to merge it now and let anyone remaining open their own PR now


Add a custom button in the join screen

Is it possible to add a custom button under the JOIN NOW button

to go back to the prvious page or just use the redirectOnLeave url ?

Hey @awsWork currently we do not have this kind of option.

thank you for your reply,is there a chance you can add it?

You can customize this by adding the button JoinScreen Component
https://github.com/videosdk-live/videosdk-rtc-react-prebuilt-ui/blob/main/src/components/joinScreen/MeetingDetailModal.js

I am using the prebuilt-ui that's why

In prebuilt currently, we do not have that option we can add it to the backlog but we are not sure about timeline.