Bad interpreter: No such file or directory

Branch master
Current Behaviour : Running the kalite start reproduce an issue of bad interpreter: No such file or directory
Expected Behaviour : Able to run the kalite executable.
Steps to Reproduce :

Download the latest build installer in the dungeon server.
Go to the /Applications/KA-Lite Monitor.app/Contents/Resources/pyrun-2.7/bin
run  ./kalite start
Notice that kalite executable reproduces an error bad interpreter: No such file or directory.

See the image below as demonstration.

This still fails because all files inside the pyrun-2.7/bin/ folder has the wrong shebang.  It uses the pyrun path of the build server or the computer that made the build.
Re-opening because this is a blocker for 0.14.x.

Fixed in #110


UVI Request

--- UVI JSON ---
{
  "vendor_name": "Linux",
  "product_name": "Kernel",
  "product_version": "versions from v5.13.2 to before v5.13.5",
  "vulnerability_type": "unspecified",
  "affected_component": "unspecified",
  "attack_vector": "unspecified",
  "impact": "unspecified",
  "credit": "",
  "references": [
    "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=09b1f676e2e0bbff67c568672c565c6f31470157",
    "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=70a5a1950cca02c5cd161bb3846b4d983eed97d3"
  ],
  "extended_references": [
    {
      "type": "commit",
      "value": "09b1f676e2e0bbff67c568672c565c6f31470157",
      "note": "introduced"
    },
    {
      "type": "commit",
      "value": "70a5a1950cca02c5cd161bb3846b4d983eed97d3",
      "note": "fixed"
    }
  ],
  "reporter": "joshbressers",
  "reporter_id": 1692786,
  "notes": "",
  "description": "netfilter: nf_tables: Fix dereference of null pointer flow\n\nThis is an automated ID intended to aid in discovery of potential security vulnerabilities. The actual impact and attack plausibility have not yet been proven.\nThis ID is fixed in Linux Kernel version v5.13.5 by commit 70a5a1950cca02c5cd161bb3846b4d983eed97d3, it was introduced in version v5.13.2 by commit 09b1f676e2e0bbff67c568672c565c6f31470157. For more details please see the references link."
}
--- UVI JSON ---

This issue has been assigned UVI-2021-1001183


⚠ ClamAV has degraded performance

In c38f94d, ClamAV (https://spamassassin.apache.org/) experienced degraded performance:

HTTP code: 200
Response time: 89 ms

Resolved: ClamAV performance has improved in 32557cf.


[google_sign_in] Add doc for iOS auth with SERVER_CLIENT_ID

Add documentation for iOS auth with SERVER_CLIENT_ID.
After a long time struggling with a non-working iOS configuration but Android working well, I figured out that firebase was not adding the SERVER_CLIENT_ID field in the Google-info-service.plist file genereated. This can be really long to troubleshoot for someone like me who don't know really much about GoogleAuth with flutter plugin.
Pre-launch Checklist

[x] I read the Contributor Guide and followed the process outlined there for submitting PRs.
[x] I read the Tree Hygiene wiki page, which explains my responsibilities.
[x] I read and followed the relevant style guides and ran the auto-formatter. (Unlike the flutter/flutter repo, the flutter/plugins repo does use dart format.)
[x] I signed the CLA.
[x] The title of the PR starts with the name of the plugin surrounded by square brackets, e.g. [shared_preferences]
[ ] I listed at least one issue that this PR fixes in the description above.
[x] I updated pubspec.yaml with an appropriate new version according to the pub versioning philosophy, or this PR is exempt from version changes.
[x] I updated CHANGELOG.md to add a description of the change, following repository CHANGELOG style.
[ ] I updated/added relevant documentation (doc comments with ///).
[x] I added new tests to check the change I am making, or this PR is test-exempt.
[x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel on Discord.

@Milvintsiss Thanks for sending this PR. ~Although this documentation is good to have, we probably also~ ~want to update the code to make the clientId programmatically configurable from a dart API. I think this~ ~proposal here is valid.~
We actually have already implemented a way to dynamically set up the clientId, which should be petty easily discoverable. :https://github.com/flutter/plugins/blob/main/packages/google_sign_in/google_sign_in/lib/google_sign_in.dart#L186
If we are adding the plist approach for clientId in README, then we should add the programmatic approach too so users can choose the way they want to do it

As per documentation this is only for web. Currently there is no way to programmatically configure this.

serverClientId has currently no way to be programmatically configured, but I can implement it if needed. Maybe this deserves another PR?

I see, I got confused with these 2 IDs. Yes I don't see why it should not be programmatically configurable.
And we should update the documentation about saying the clientId only supports web as well.

@cyanglaz Can you do the primary review here since you've been looking at this the most?

@Milvintsiss There is a PR trying to add the serverClientId https://github.com/flutter/plugins/pull/5250. It is currently being worked on. Maybe we can cooperate the new changes into this doc change after the above PR lands?

@cyanglaz Yes it would be great :+1:

@cyanglaz @Milvintsiss looks like #5250 has landed; what are the next steps on this PR?

@Hixie I think we can close this one, the author has already added documentation in the README.
Maybe we can add a note about configuring the SERVER_CLIENT_ID in the GoogleService-Info.plist, but as the recommended way to configure the server client ID is to configure it programmatically we probably don't need to document this?

Maybe we can add a note about configuring the SERVER_CLIENT_ID in the GoogleService-Info.plist

Yes, we should also add a document for adding SERVER_CLIENT_ID in GoogleService-Info.plist. Would you like to rebase main to your PR and work on it? :)

Hey @cyanglaz can I have a review on this? :)

@cyanglaz Ping on this review from triage.

Why is this issue still open? Changes regarding the doc configuring SERVER_CLIENT_ID in GoogleService-Info.plist is not yet merged. Stumbled upon this ISSUE today and found that setting serverClientId in dart code alone does not work at all. Finally got it working by adding SERVER_CLIENT_ID in GoogleService-Info.plist.


fix: Apply correct translation when text editor overflows when zoom not 100%

Attempt to fix #3220

The wysiwyg jumps when zoomed in:

Moreoever, it doesn't work with rotated text (both in this PR & prod):

So maybe instead of hacking it further, maybe we should do the "nest inside + relative positioning" after all (though it will simply cut off the wysiwyg if it works out).

The wysiwyg jumps when zoomed in:

This should be fixed now

Moreoever, it doesn't work with rotated text (both in this PR & prod):

So maybe instead of hacking it further, maybe we should do the "nest inside + relative positioning" after all (though it will simply cut off the wysiwyg if it works out).

Are you talking about positioning relative to .excalidraw ? That would also not work right since it will then be positioned relative to its actual position and excalidraw takes the whole width/height thats why had made it position absolute.
I have only updated the translateX value in this pr to fix overflow when zoom is not 100%, the rotation issue should also be fixable with position absolute I think given some time. If this fix looks good for overflow then we can merge it.

That would also not work right since it will then be positioned relative to its actual position and excalidraw takes the whole width/height thats why had made it position absolute.

Unclear what you mean by "positioned relative to its actual position".
Anyway, we can merge.


could you add a detailed CHANGELOG.md, please?

could you please add a detailed CHANGELOG.md to this project so we can easily see what has changed/been fixed in each release? i tried looking at your "releases" section here on this github repository but that contains no detail either. thanx.
best,
—  faddah
portland, oregon, u.s.a.

Hi!
There is a changelog in the Readme.md. Will continue update that every time
there is a release.
On Friday, 15 January 2016, Faddah Wolf<EMAIL_ADDRESS>wrote:

could you please add a detailed CHANGELOGmd to this project so we can
easily see what has changed/been fixed in each release? i tried looking at
your "releases" section here on this github repository but that contains no
detail either thanx
best,
— faddah
portland, oregon, usa
—
Reply to this email directly or view it on GitHub
https://github.com/orktes/atom-react/issues/137.

--
Ystävällisin terveisin,
Jaakko Lukkari


Mempool saving feature between restarts

Bitcoin core 0.14 has a mempool saving feature that saves the mempool states between restarts. This is a very useful feature for people who multiboot between O/S's. (and also in the event of a system crash for miners.) I think this would be useful to add to bitcoin classic.
I am not familiar with this part of the code, but I would look to implement the transaction pool in a virtual memory segment using mmap(), msync(), munmap() if possible. This would mean that all transactions are immediately loaded into virtual memory on start up when the memory segment is mapped onto.

A couple of thoughts.

A memory pool in normal situations would not be useful anymore even an hour after the mempool is saved. This is because in normal circumstances practically all of the transactions in a mempool will have been mined by then.
I honestly don't see the benefit for a non-miner, partly because of the previous point.
A miner that runs his full node on a machine or operating system which depends on this kind of features is doing it wrong. They should take a more stable OS and/or hardware.

This sounds like a very intrusive 'feature'. And I put the word "feature" in quotes because it is a rather big change in systems design.
In Classic we are aiming to make the system design more consistent and more robust with the end result that it becomes the most fun-to-hack-on client.
I'm not sold on this "feature".

I'd agree that in normal circumstances, and where blocksize limits are dynamic enough, the mempool should not need to be so persistent. However, there is always the potential for mempool floods (and ways that could be implemented to mitigate any sudden growth).
Core have not yet removed the coin age prioritisation feature. This may mean a mempool with uptime may contain transactions that at some point would be included. I don't know if you intend to follow core in removing this feature.
I have a dislike for forgetful mempools. It destroys the zero confirmation economic risk when block sizes become full, shifting the risk from a disadvantageous double spend propagation attempt, to one where the risk is that the transaction does not confirm at all, due to mempool forgetfulness and selective transaction relay by nodes. People can then double spend once the transaction has been dropped from nodes mempools. I don't believe they should be dropped, they should eventually be confirmed.
I tend to dislike the notion of a mempool. I prefer to call it a transaction pool. Using an lmdb virtual memory database might be a better way to implement this, but performance requirements need to be considered.
I suppose miners have quite robust systems and failover backups, so if one mining node goes down it probably will not have much of a effect on transaction processing, although there is a potential that a miner may produce an empty block. Would such a feature be useful to economic nodes?
I'd be interested to understand why you find this feature 'intrusive'. Also, is the core 0.14 a significant change? If such an approach is desirable, they might not have implemented it in the best way either.

Core have not yet removed the coin age prioritisation feature.

This is an essential feature to avoid the "tragedy of the commons" problem, and as such will not be removed.

I have a dislike for forgetful mempools.

I understand, and this is an area that definitely is in need of more empirical evidence. Core is steadily moving towards the idea that all mempools are the same, essentially making each full node a duplicate instance of the next.
The other extreme is a highly distributed mempool where massive distributed mempool means one mempool dropping a transaction doesn't hurt as there are many others that still have it.
We are at neither extreme, for instance only the originator of a transaction re-broadcasts it periodically. Nodes don't re-broadcast their mempools.
Innovation in this area is needed, but I hope we can do a proper research project with thousands of (virtual) nodes emulating the different methods and finding out how things actually work and thus get some actual empirical evidence which we can use to decide what features we need to benefit the health of the mempool.

I'd be interested to understand why you find this feature 'intrusive'.

Going from a hashmap to a format that can be stored in a memmapped file will have a big impact on a lot of common calls being made to the mempool right now.
Next to that, you need to have a way to identify false data. Half writes, etc.
Personally I doubt the mempool being memmapped makes sense. There are better architectures for that. A log of validated transactions and subsequently invalidated ones is much much easier and at least as effective.

Thank you for your comments and insights. I think I agree that this is probably an area that requires extensive research and innovation.
I have opened similar issues on BU and XT, so it will be interesting to see their thoughts on this matter.
https://github.com/BitcoinUnlimited/BitcoinUnlimited/issues/438
https://github.com/bitcoinxt/bitcoinxt/issues/195

Probably the best way to implement this feature is to add support to the AdminServer for notification of new transactions being added to the mempool.
Then create a separate app that logs the transactions which can then replay the log by adding them to a newly started node using the same admin server.

The NetworkManager, Compact Message Format and AdminServer looks like a good innovation at first glance with my limited in-depth knowledge of the bitcoin software.
Going back to the zero confirmation economic risk transaction, it only works on the condition that they will eventually get confirmed. If transaction pools are forgetful, then there is a reliance on the sender to re-broadcast the transaction. Having all transaction pools re-broadcasting transactions periodically would lead to a lot of network traffic. I'm also wondering if nodes could come to a consensus about the validity of a transaction before a miner includes it in a block. That is, if a user attempts to double spend quickly, nodes could flag the transaction invalid. If the double spend attempt is after a period of time, the original transaction will have propagated the network and so the original transaction would be considered the valid one. If nodes can come up with consensus within a second or two, and a way found so that the transaction is never dropped and  eventually will be confirmed with guarantee, we have solved instant transactions with very little economic risk.

That is, if a user attempts to double spend quickly, nodes could flag the transaction invalid.

This is a feature in FlexTrans. See Double spend proofs.

  If a node is down for any length of time is transaction set is so out of date it's not worth the effort checking what is in a block. In it's downtime, many transactions have been missed. If the node crashes, a vm based solution would need check pointing and transaction logs to be of any use.
If the node network consists of many high up time nodes, then the chance for a double spend to get through is minimal. However, if there are many part time nodes, there is a chance for a double spend to get through between sender and recipient, which may get rejected by the miners.
So perhaps it would be better for a new node to obtain it's transaction pool from it's peers? The idea of perfectly synchronised transaction pools is probably a fruitless endeavor in an asynchronous peer to peer system. But a system where the transaction pools are close enough to synchronisation is probably enough to reduce the chance of a double spend getting through.

gmaxwell as outlined the idea behind this feature.
https://bitcointalk.org/index.php?topic=1864311.0

Thanks for asking there.
I liked gmaxwells conflicting statements;

Without saving the sync would be a massive waste of bandwidth

and just a couple lines lower;

Efficient syncing is also an active area of research, there are techniques to perform the sync in ways which are significantly more efficient than you might guess.

The main reason he states it would be wasteful is because the current p2p protocol is very naive and is not really capable of being optimized.  A AdminServer based sync would be very cheap, however.

Politician or Ambassador?
I'm not entirely convinced about his arguments regarding periodically flushing. Firstly, the file save is written to wallet.dat.new, and then moved to wallet.dat. It could write timestamped wallet.dat files, and then the software could load the last known good file. Not sure if the CAutoFile class provides any from of file validity, e.g. checksumming at this moment in time.
SSD's are also pretty tough these days. My four year old SSD is still running after four years of uptime hammering with only 8 bad sectors. I've had 2 mechanical disks fail in the same timeframe.
I do like your compact message format. It could be possible to build something similar to FIX protocol (Financial Information eXchange) on top of it. Cryptocurrency exhanges have the same problem with https/JSON queries which have to be polled, and a lack of a common standard and behaviour to build solid software that connects to multiple exchanges.

Any closure notes on this?

Sounds like sufficient reason to close this feature request to me...

Fair enough. I suppose as long as the idea that perhaps transaction pools on newly started nodes should efficiently sync from their peers is on peoples thought radar (due to the potential double spending holes or empty block mining that it may cause) then I am happy for it to be closed.


Review: Conv layer

Conv layer implementation detr_layers/conv.py needs to be validated with actual architecture.
Please feel free to submit a PR!

@pranavdurai10, can you assign this issue to me?


FAIL: test_cobyla.test_vector_constraints

With numpy 1.10-dev on 32-bit Linux:
======================================================================
FAIL: test_cobyla.test_vector_constraints
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/rgommers/.local/lib/python2.7/site-packages/nose/case.py", line 197, in runTest
    self.test(*self.arg)
  File "/home/rgommers/Code/bldscipy/build/testenv/lib/python2.7/site-packages/scipy/optimize/tests/test_cobyla.py", line 100, in test_vector_constraints
    assert_allclose(sol, xsol, atol=1e-4)
  File "/home/rgommers/Code/numpy/numpy/testing/utils.py", line 1300, in assert_allclose
    verbose=verbose, header=header)
  File "/home/rgommers/Code/numpy/numpy/testing/utils.py", line 665, in assert_array_compare
    raise AssertionError(msg)
AssertionError:
Not equal to tolerance rtol=1e-07, atol=0.0001

(mismatch 50.0%)
 x: array([ 1.400112,  1.700056])
 y: array([ 1.4,  1.7])

Test precision only needs a small bump it looks like.

On my 64-bit Mac the solution is array([ 1.39991861,  1.69995931]) instead of array([ 1.400112,  1.700056]). I got the latest SciPy from GitHub. From fmin_cobyla's documentation I see that
rhoend : float, optional
Final accuracy in the optimization (not precisely guaranteed). This
is a lower bound on the size of the trust region.
The default value is rhoend=1e-4, same as atol=1e-4 at line 100 in test_cobyla.py. Since it says the precision is not guaranteed, then probably the tests should not be done for the same precision?
So we could decrease rhoend and replace
sol = fmin_cobyla(fun, x0, cons_list, iprint=0)
by
sol = fmin_cobyla(fun, x0, cons_list, iprint=0,  rhoend=1e-5)
in test_cobyla.py.
Do you think there's an actual bug in fmin_cobyla and the solution should have in fact matched for atol=1e-4? Or is it just that we needed rhoend to be small enough?

@Andreea-G I think rhoend (for fmin_cobyla) and tol (for minimize) should indeed be adjusted to 1e-5 in this test (as this is done in other tests actually). Tagging as easy-fix accordingly.


Fix cluster connectivity check when a proxy CA cert is used

The code in git has been broken since its introduction in v1.33.0~6 due to a
c&p typo. This PR improves on what was added in this commit so that this works
both with MITM proxies and https:// proxies

There are still two --proxy options in the command. Not sure why, maybe one of them can be removed with as part of this PR? (this does not cause the error though)

I added a comment for this in this PR. Code could probably be reworked to only have one occurrence

WARN Failed public DNS query from the cluster: ssh command error:
command : curl --head quay.io --proxy http://localhost:8080 --proxy http://localhost:8080 --noproxy <IP_ADDRESS>,localhost,.testing --insecure --proxy-insecure
err     : Process exited with status 7

proxy URL must not use `localhost` as the curl command is going to be run in the VM. If you use <IP_ADDRESS> instead, and allow traffic over ports 3128/3129 between VM and host (not 100% sure this is needed, but see the comment in images/squid/Dockerfile), then the check should work.


Remove browser-plugin-parrable

This PR removes the browser-plugin-parrable from this monorepo. After removing the plugin files and editing the rush build config files I ran the rush update command which made changes in common/config/rush/pnpm-lock.yaml. A local rush build passed.
There are build/changelogs in common/changes/@snowplow/browser-plugin-parrable - should these be removed as well?
Resolves #925

Thanks for your pull request. Is this your first contribution to a Snowplow open source project? Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).
:memo: Please visit https://docs.snowplowanalytics.com/docs/contributing/contributor-license-agreement/ to learn more and sign.
Once you've signed, please reply here (e.g. I signed it!) and we'll verify. Thanks.

I've signed the Software Grant and Corporate Contributor License Agreement v1.0 CLA.

Thanks for the PR @icflournoy
You're right, the change files can also be removed now.
They are used to generate the CHANGELOG on final release but we won't have this in 3.0.0 now so no need for them.

I've merged this in manually, I ended up with a conflict due to a wider change that mean I touched a file within the Parrable plugin.
Thanks again for the PR!
Your commit is now here: https://github.com/snowplow/snowplow-javascript-tracker/pull/905/commits/4239ae3d302e7e755c26d4cb3ec2759b24d187c6
I'll close this PR but I'll leave the issue open until v3 is release.

Thanks, @paulboocock happy to help clear this up.


Getting started example issues compiler error

Description
I created an app with the code shown in the "Readme" of the repository and the "Getting started" section of the documentation and got  compilation error at this part of the reducer:
case .numberFactButtonTapped:
  return .task {
    await .numberFactResponse(TaskResult { try await environment.numberFact(state.count) })
  }

The compiler error is:

Reference to captured parameter 'state' in concurrently-executing code
The solution is to capture the state.count in a local constant:

case .numberFactButtonTapped:
  return .task { [count = state.count] in
    await .numberFactResponse(TaskResult { try await environment.numberFact(count) })
  }

It took me a while to find this solution, so it may be worth to correct this in the documentation.
Checklist

[X] If possible, I've reproduced the issue using the main branch of this package.
[X] This issue hasn't been addressed in an existing GitHub issue.

Expected behavior
No response
Actual behavior
No response
Steps to reproduce
No response
The Composable Architecture version information
No response
Destination operating system
No response
Xcode version information
13.4
Swift Compiler version information
No response

Indeed, the capture was missing. The state is an inout parameter that you can modify freely, and for this reason, it can't enter as it into async context. You can indeed use an explicit capture like you did (the preferred/dedicated approach), or assign the value to a let constant, which has the same effect:
case .numberFactButtonTapped:
  let count = state.count
  return .task {
    await .numberFactResponse(TaskResult { try await environment.numberFact(count) })
  }

In both cases, this creates a snapshot of the count value at the time the Effect.task is emitted/returned by the reducer. This value is then used at a later time when the effect is evaluated and the .task closure executed. You can use either method depending on what is the most convenient in a given context.
I created a Pull-Request with the fix[^1].
[^1]: As an aside, and this is not a reproach at all, submitting a pull-request is something you could have done by yourself, as it would have been less work for you than opening/filing a bug report. For simple edits like this one, you can do this relatively straightforwardly directly from GitHub, by editing the document, and following the proposed steps.
Thanks for reporting it!


Fixed the behavior of validate_user function in validations.py.

Fixed the behavior of validate_user function in validations.py.
Fixes #<issue_number_goes_here>

It's a good idea to open an issue first for discussion.

[ ] Tests pass
[ ] Appropriate changes to README are included in PR

@googlebot I signed it!
вс, 17 янв. 2021 г. в 12:37, google-cla[bot]<EMAIL_ADDRESS>
Thanks for your pull request. It looks like this may be your first
contribution to a Google open source project (if not, look below for help).
Before we can look at your pull request, you'll need to sign a Contributor
License Agreement (CLA).
📝 Please visit https://cla.developers.google.com/
https://cla.developers.google.com/ to sign.
Once you've signed (or fixed any issues), please reply here with @googlebot
I signed it! and we'll verify it.
What to do if you already signed the CLA Individual signers

It's possible we don't have your GitHub username or you're using a
different email address on your commit. Check your existing CLA data
https://cla.developers.google.com/clas and verify that your email is
set on your git commits
https://help.github.com/articles/setting-your-email-in-git/.

Corporate signers

Your company has a Point of Contact who decides which employees are
authorized to participate. Ask your POC to be added to the group of
authorized contributors. If you don't know who your Point of Contact is,
direct the Google project maintainer to go/cla#troubleshoot (Public
version https://opensource.google/docs/cla/#troubleshoot).
The email used to register you as an authorized contributor must be
the email used for the Git commit. Check your existing CLA data
https://cla.developers.google.com/clas and verify that your email is
set on your git commits
https://help.github.com/articles/setting-your-email-in-git/.
The email used to register you as an authorized contributor must
also be attached to your GitHub account
https://github.com/settings/emails.

ℹ Googlers: Go here
https://goto.google.com/prinfo/https%3A%2F%2Fgithub.com%2Fgoogle%2Fit-cert-automation-practice%2Fpull%2F11307
for more info.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/google/it-cert-automation-practice/pull/11307#issuecomment-761761762,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AC6M6UIFLSGKKGXLUHMNT3TS2KVWRANCNFSM4WF66HNA
.

@googlebot I signed it!
вс, 17 янв. 2021 г. в 12:37, google-cla[bot]<EMAIL_ADDRESS>
Thanks for your pull request. It looks like this may be your first
contribution to a Google open source project (if not, look below for help).
Before we can look at your pull request, you'll need to sign a Contributor
License Agreement (CLA).
📝 Please visit https://cla.developers.google.com/
https://cla.developers.google.com/ to sign.
Once you've signed (or fixed any issues), please reply here with @googlebot
I signed it! and we'll verify it.
What to do if you already signed the CLA Individual signers

It's possible we don't have your GitHub username or you're using a
different email address on your commit. Check your existing CLA data
https://cla.developers.google.com/clas and verify that your email is
set on your git commits
https://help.github.com/articles/setting-your-email-in-git/.

Corporate signers

Your company has a Point of Contact who decides which employees are
authorized to participate. Ask your POC to be added to the group of
authorized contributors. If you don't know who your Point of Contact is,
direct the Google project maintainer to go/cla#troubleshoot (Public
version https://opensource.google/docs/cla/#troubleshoot).
The email used to register you as an authorized contributor must be
the email used for the Git commit. Check your existing CLA data
https://cla.developers.google.com/clas and verify that your email is
set on your git commits
https://help.github.com/articles/setting-your-email-in-git/.
The email used to register you as an authorized contributor must
also be attached to your GitHub account
https://github.com/settings/emails.

ℹ Googlers: Go here
https://goto.google.com/prinfo/https%3A%2F%2Fgithub.com%2Fgoogle%2Fit-cert-automation-practice%2Fpull%2F11307
for more info.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/google/it-cert-automation-practice/pull/11307#issuecomment-761761762,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AC6M6UIFLSGKKGXLUHMNT3TS2KVWRANCNFSM4WF66HNA
.


Fixed redirect for index with getServerSideProps

When adding getServerSideProps to index.js, next-on-netlify would add
/_next/data/.../.json  /.netlify/functions/next_index  200

to the out_publish/_redirects file.
I added a fix so that
/_next/data/.../index.json  /.netlify/functions/next_index  200

will be written instead.

Thank you, @jonasbuntinx! Great catch and thank you for the fix :fire: Much appreciated!
PS: If you are building something awesome with next-on-netlify, we would love to feature it in the README :slightly_smiling_face:


issue with nubkey of Hydrocotyle ranunculoides

The nubkey for Hydrocotyle ranunculoides in the checklist (7532688) is that of a heterotypic synonym of Dwergwaternavel Hydrocotyle sibthorpioides Lam. (8418338).
I think we are interested in grote waternavel  Hydrocotyle ranunculoides L.fil. (7978544) which has 15000+ occurrences.
ifnot we should use the accepeted key (8418338) instead of the synonym (7532688). the first has 12000+ occurrence while the second has only 1.
@bramdhondt @timadriaens can you confirm ?

@SanderDevisscher (FYI: @timadriaens ) -- I fully confirm: both on the error, and on your correction !

indeed, and FYI, H. sibthorpioides is another species with only a few records in Belgium (one in Wondelgem near my house).

Hi all! Nice to get back to work and see you guys spot this. Good catch. I will try to tackle this in the mapping to DwC asap and so the GBIF checklist will be updated automatically this night.


Building Android app with SkSL warmup introduces rendering bug

Steps to Reproduce

First, build app (that contains a CustomPainter) without SkSL shader bundle: flutter build apk
Install APK: adb install ...
Verify that the UI looks as expected.

Now, rebuild with a shader file: flutter build apk --bundle-sksl-path flutter_01.sksl.json
Install this new APK: adb install ...
Look at the UI now.

Expected results: Same UI as without the shader warmup performance optimization.
Actual results:

It looks like the shader somehow elides lines. (The grid above is made "roughly drawn" by painting many lines close to each other, in segments.)
I personally find this issue very serious. There's no indication there might be a problem until the app is built. I caught this after submitting the app for review.

Code sample
Sorry, I don't have time to make a completely standalone example, but at least I'm showing the CustomPainter-using widget that seems to have this problem. I'll try to whittle it down later.
Also, feel free to ask for access to the repo of the whole app.
import 'dart:math';

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:tictactoe/src/style/palette.dart';

class RoughGrid extends StatelessWidget {
  final int width;
  final int height;

  const RoughGrid(this.width, this.height, {Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    final palette = context.watch<Palette>();
    final lineColor = palette.ink;

    return Stack(
      fit: StackFit.expand,
      children: [
        // First, "draw" (reveal) the horizontal lines
        TweenAnimationBuilder(
          tween: Tween<double>(begin: 0, end: 1),
          duration: const Duration(milliseconds: 900),
          curve: Curves.easeOutCubic,
          child: RepaintBoundary(
            child: CustomPaint(
              painter: _RoughGridPainter(
                width,
                height,
                lineColor: lineColor,
                paintOnly: Axis.horizontal,
              ),
            ),
          ),
          builder: (BuildContext context, double progress, Widget? child) {
            return ShaderMask(
              // BlendMode.dstIn means that opacity of the linear
              // gradient below will be applied to the child (the horizontal
              // lines).
              blendMode: BlendMode.dstIn,
              shaderCallback: (Rect bounds) {
                // A linear gradient that sweeps from
                // "top-slightly-left-off-center" to
                // "bottom-slightly-right-of-center". This achieves the
                // quick "drawing" of the lines.
                return LinearGradient(
                  begin: const Alignment(-0.1, -1),
                  end: const Alignment(0.1, 1),
                  colors: [
                    Colors.black,
                    Colors.white.withOpacity(0),
                  ],
                  stops: [
                    progress,
                    progress + 0.05,
                  ],
                ).createShader(bounds);
              },
              child: child!,
            );
          },
        ),
        // Same as above, but for vertical lines.
        TweenAnimationBuilder(
          // The tween start's with a negative number to achieve
          // a bit of delay before drawing. This is quite dirty, so maybe
          // optimize later?
          tween: Tween<double>(begin: -1, end: 1),
          // Take longer to draw.
          duration: const Duration(milliseconds: 1200),
          curve: Curves.easeOut,
          child: RepaintBoundary(
            child: CustomPaint(
              painter: _RoughGridPainter(
                width,
                height,
                lineColor: lineColor,
                paintOnly: Axis.vertical,
              ),
            ),
          ),
          builder: (BuildContext context, double progress, Widget? child) {
            return ShaderMask(
              blendMode: BlendMode.dstIn,
              shaderCallback: (Rect bounds) {
                return LinearGradient(
                  begin: const Alignment(-1, -0.1),
                  end: const Alignment(1, 0.1),
                  colors: [
                    Colors.black,
                    Colors.white.withOpacity(0),
                  ],
                  stops: [
                    progress,
                    progress + 0.05,
                  ],
                ).createShader(bounds);
              },
              child: child!,
            );
          },
        ),
      ],
    );
  }
}

class _RoughGridPainter extends CustomPainter {
  final int width;
  final int height;

  final Color lineColor;

  final Axis? paintOnly;

  late final Paint pathPaint = Paint()
    ..colorFilter = ColorFilter.mode(lineColor, BlendMode.srcIn);

  final Random _random = Random();

  _RoughGridPainter(
    this.width,
    this.height, {
    this.lineColor = Colors.black,
    this.paintOnly,
  });

  @override
  void paint(Canvas canvas, Size size) {
    const padding = 10.0;
    const maxCrossDisplacement = 1.5;

    const gridLineThicknessRatio = 0.1;
    final lineThickness =
        size.longestSide / max(width, height) * gridLineThicknessRatio;

    final widthStep = size.width / width;

    // Draw vertical lines.
    if (paintOnly == null || paintOnly == Axis.vertical) {
      for (var i = 1; i < width; i++) {
        _roughLine(
          canvas: canvas,
          start: Offset(i * widthStep, padding),
          direction: Axis.vertical,
          length: size.height - 2 * padding,
          maxLineThickness: lineThickness,
          maxCrossAxisDisplacement: maxCrossDisplacement,
          paint: pathPaint,
          random: _random,
        );
      }
    }

    // Draw horizontal lines.
    final heightStep = size.height / height;
    if (paintOnly == null || paintOnly == Axis.horizontal) {
      for (var i = 1; i < height; i++) {
        _roughLine(
          canvas: canvas,
          start: Offset(padding, i * heightStep),
          direction: Axis.horizontal,
          length: size.width - 2 * padding,
          maxLineThickness: lineThickness,
          maxCrossAxisDisplacement: maxCrossDisplacement,
          paint: pathPaint,
          random: _random,
        );
      }
    }
  }

  @override
  bool shouldRepaint(_RoughGridPainter oldDelegate) {
    return oldDelegate.width != width ||
        oldDelegate.height != height ||
        oldDelegate.paintOnly != paintOnly ||
        oldDelegate.lineColor != lineColor;
  }

  static void _roughLine({
    required Canvas canvas,
    required Offset start,
    required Axis direction,
    required double length,
    required double maxLineThickness,
    required double maxCrossAxisDisplacement,
    required Paint paint,
    Random? random,
  }) {
    const segmentLength = 50.0;
    const brushCount = 7;

    final Offset straightSegment;
    final Offset end;
    if (direction == Axis.horizontal) {
      straightSegment = const Offset(segmentLength, 0);
      end = start + Offset(length, 0);
    } else {
      straightSegment = const Offset(0, segmentLength);
      end = start + Offset(0, length);
    }

    final _random = random ?? Random();
    var angle = _random.nextDouble() * 2 * pi;
    final angleChange = 0.3 + 0.4 * _random.nextDouble();

    // Generate a displacement of "strands" that constitute the whole brush.
    // Each strand will make its own line.
    final strandOffsets = List.generate(brushCount, (index) {
      var angle = _random.nextDouble() * 2 * pi;
      return Offset.fromDirection(
          angle, _random.nextDouble() * maxLineThickness / 3);
    });

    var straightPoint = start;
    final fuzziness = Offset.fromDirection(angle, maxCrossAxisDisplacement);
    var fuzzyPoint = start + fuzziness;

    for (var i = 0; straightPoint != end; i++) {
      angle += angleChange;

      var nextStraightPoint = straightPoint + straightSegment;
      if ((nextStraightPoint - start).distance >= length) {
        nextStraightPoint = end;
      }

      final fuzziness = Offset.fromDirection(angle, maxCrossAxisDisplacement);
      final nextFuzzyPoint = nextStraightPoint + fuzziness;

      if (i == 0 || nextStraightPoint == end) {
        paint.strokeCap = StrokeCap.round;
      } else {
        paint.strokeCap = StrokeCap.butt;
      }

      // Drawing individual "strands" makes the line more natural.
      for (final strandOffset in strandOffsets) {
        paint.strokeWidth = (0.8 + 0.4 * _random.nextDouble()) *
            maxLineThickness /
            brushCount *
            2;
        canvas.drawLine(
            fuzzyPoint + strandOffset, nextFuzzyPoint + strandOffset, paint);
      }

      straightPoint = nextStraightPoint;
      fuzzyPoint = nextFuzzyPoint;
    }
  }
}

Logs

% flutter analyze
Analyzing flutter_game_sample...
No issues found! (ran in 3.3s)

% fvm flutter doctor -v
[✓] Flutter (Channel stable, 2.10.4, on macOS 12.2 21D49 darwin-arm, locale en-US)
    • Flutter version 2.10.4 at /Users/filiph/fvm/versions/stable
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision c860cba910 (5 weeks ago), 2022-03-25 00:23:12 -0500
    • Engine revision 57d3bac3dd
    • Dart version 2.16.2
    • DevTools version 2.9.2

[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0-rc1)
    • Android SDK at /Users/filiph/Library/Android/sdk
    • Platform android-31, build-tools 33.0.0-rc1
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7772763)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 13.3.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • CocoaPods version 1.11.2

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2021.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7772763)

[✓] VS Code (version 1.56.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension can be installed from:
      🔨 https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter

[✓] Connected device (3 available)
    • Pixel 5 (mobile) • 15131FDD4000QY • android-arm64  • Android 12 (API 32)
    • macOS (desktop)  • macos          • darwin-arm64   • macOS 12.2 21D49 darwin-arm
    • Chrome (web)     • chrome         • web-javascript • Google Chrome 100.0.4896.127

[✓] HTTP Host Availability
    • All required HTTP hosts are available

• No issues found!

Here's an actually runnable code. I don't have the time to verify right now that this has the same issue as the whole app but I wanted to put it out there regardless.

Code
import 'package:flutter/material.dart';

import 'dart:math';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  final String title;

  const MyHomePage({
    Key? key,
    required this.title,
  }) : super(key: key);

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: RoughGrid(
          8, 8,
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}

class RoughGrid extends StatelessWidget {
  final int width;
  final int height;

  const RoughGrid(this.width, this.height, {Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    // This is normally provided from above.
    // ignore: prefer_const_constructors
    final lineColor = Color(0x88000000);

    return Stack(
      fit: StackFit.expand,
      children: [
        // First, "draw" (reveal) the horizontal lines
        TweenAnimationBuilder(
          tween: Tween<double>(begin: 0, end: 1),
          duration: const Duration(milliseconds: 900),
          curve: Curves.easeOutCubic,
          child: RepaintBoundary(
            child: CustomPaint(
              painter: _RoughGridPainter(
                width,
                height,
                lineColor: lineColor,
                paintOnly: Axis.horizontal,
              ),
            ),
          ),
          builder: (BuildContext context, double progress, Widget? child) {
            return ShaderMask(
              // BlendMode.dstIn means that opacity of the linear
              // gradient below will be applied to the child (the horizontal
              // lines).
              blendMode: BlendMode.dstIn,
              shaderCallback: (Rect bounds) {
                // A linear gradient that sweeps from
                // "top-slightly-left-off-center" to
                // "bottom-slightly-right-of-center". This achieves the
                // quick "drawing" of the lines.
                return LinearGradient(
                  begin: const Alignment(-0.1, -1),
                  end: const Alignment(0.1, 1),
                  colors: [
                    Colors.black,
                    Colors.white.withOpacity(0),
                  ],
                  stops: [
                    progress,
                    progress + 0.05,
                  ],
                ).createShader(bounds);
              },
              child: child!,
            );
          },
        ),
        // Same as above, but for vertical lines.
        TweenAnimationBuilder(
          // The tween start's with a negative number to achieve
          // a bit of delay before drawing. This is quite dirty, so maybe
          // optimize later?
          tween: Tween<double>(begin: -1, end: 1),
          // Take longer to draw.
          duration: const Duration(milliseconds: 1200),
          curve: Curves.easeOut,
          child: RepaintBoundary(
            child: CustomPaint(
              painter: _RoughGridPainter(
                width,
                height,
                lineColor: lineColor,
                paintOnly: Axis.vertical,
              ),
            ),
          ),
          builder: (BuildContext context, double progress, Widget? child) {
            return ShaderMask(
              blendMode: BlendMode.dstIn,
              shaderCallback: (Rect bounds) {
                return LinearGradient(
                  begin: const Alignment(-1, -0.1),
                  end: const Alignment(1, 0.1),
                  colors: [
                    Colors.black,
                    Colors.white.withOpacity(0),
                  ],
                  stops: [
                    progress,
                    progress + 0.05,
                  ],
                ).createShader(bounds);
              },
              child: child!,
            );
          },
        ),
      ],
    );
  }
}

class _RoughGridPainter extends CustomPainter {
  final int width;
  final int height;

  final Color lineColor;

  final Axis? paintOnly;

  late final Paint pathPaint = Paint()
    ..colorFilter = ColorFilter.mode(lineColor, BlendMode.srcIn);

  final Random _random = Random();

  _RoughGridPainter(
    this.width,
    this.height, {
    this.lineColor = Colors.black,
    this.paintOnly,
  });

  @override
  void paint(Canvas canvas, Size size) {
    const padding = 10.0;
    const maxCrossDisplacement = 1.5;

    const gridLineThicknessRatio = 0.1;
    final lineThickness =
        size.longestSide / max(width, height) * gridLineThicknessRatio;

    final widthStep = size.width / width;

    // Draw vertical lines.
    if (paintOnly == null || paintOnly == Axis.vertical) {
      for (var i = 1; i < width; i++) {
        _roughLine(
          canvas: canvas,
          start: Offset(i * widthStep, padding),
          direction: Axis.vertical,
          length: size.height - 2 * padding,
          maxLineThickness: lineThickness,
          maxCrossAxisDisplacement: maxCrossDisplacement,
          paint: pathPaint,
          random: _random,
        );
      }
    }

    // Draw horizontal lines.
    final heightStep = size.height / height;
    if (paintOnly == null || paintOnly == Axis.horizontal) {
      for (var i = 1; i < height; i++) {
        _roughLine(
          canvas: canvas,
          start: Offset(padding, i * heightStep),
          direction: Axis.horizontal,
          length: size.width - 2 * padding,
          maxLineThickness: lineThickness,
          maxCrossAxisDisplacement: maxCrossDisplacement,
          paint: pathPaint,
          random: _random,
        );
      }
    }
  }

  @override
  bool shouldRepaint(_RoughGridPainter oldDelegate) {
    return oldDelegate.width != width ||
        oldDelegate.height != height ||
        oldDelegate.paintOnly != paintOnly ||
        oldDelegate.lineColor != lineColor;
  }

  static void _roughLine({
    required Canvas canvas,
    required Offset start,
    required Axis direction,
    required double length,
    required double maxLineThickness,
    required double maxCrossAxisDisplacement,
    required Paint paint,
    Random? random,
  }) {
    const segmentLength = 50.0;
    const brushCount = 7;

    final Offset straightSegment;
    final Offset end;
    if (direction == Axis.horizontal) {
      straightSegment = const Offset(segmentLength, 0);
      end = start + Offset(length, 0);
    } else {
      straightSegment = const Offset(0, segmentLength);
      end = start + Offset(0, length);
    }

    final _random = random ?? Random();
    var angle = _random.nextDouble() * 2 * pi;
    final angleChange = 0.3 + 0.4 * _random.nextDouble();

    // Generate a displacement of "strands" that constitute the whole brush.
    // Each strand will make its own line.
    final strandOffsets = List.generate(brushCount, (index) {
      var angle = _random.nextDouble() * 2 * pi;
      return Offset.fromDirection(
          angle, _random.nextDouble() * maxLineThickness / 3);
    });

    var straightPoint = start;
    final fuzziness = Offset.fromDirection(angle, maxCrossAxisDisplacement);
    var fuzzyPoint = start + fuzziness;

    for (var i = 0; straightPoint != end; i++) {
      angle += angleChange;

      var nextStraightPoint = straightPoint + straightSegment;
      if ((nextStraightPoint - start).distance >= length) {
        nextStraightPoint = end;
      }

      final fuzziness = Offset.fromDirection(angle, maxCrossAxisDisplacement);
      final nextFuzzyPoint = nextStraightPoint + fuzziness;

      if (i == 0 || nextStraightPoint == end) {
        paint.strokeCap = StrokeCap.round;
      } else {
        paint.strokeCap = StrokeCap.butt;
      }

      // Drawing individual "strands" makes the line more natural.
      for (final strandOffset in strandOffsets) {
        paint.strokeWidth = (0.8 + 0.4 * _random.nextDouble()) *
            maxLineThickness /
            brushCount *
            2;
        canvas.drawLine(
            fuzzyPoint + strandOffset, nextFuzzyPoint + strandOffset, paint);
      }

      straightPoint = nextStraightPoint;
      fuzzyPoint = nextFuzzyPoint;
    }
  }
}

This can be run in DartPad so that you don't need to visualize in your head what this does.

Hmm, so I can't reproduce if I re-create the SkSL shader file with my Pixel 5 device.
Let me edit the original comment.

Hi @filiph, Thanks for filing the issue. I am able to reproduce the issue on the latest stable channel. The

without shader file / shader file made with Pixel 5
shader file made with Nokia 1.3

I couldn't verify this issue on master channel as the engine hash would vary and the build would fail with below error

Expected Flutter 57d3bac3dd5cb5b0e464ab70e7bc8a0d8cf083ab, but found 10efa195bf1ceea25d2a5a377bbe54234787fdda
The SkSL bundle was produced with a different engine version. It must be recreated for the current Flutter version.

flutter doctor -v (mac)
[✓] Flutter (Channel stable, 2.10.5, on macOS 12.3 21E230 darwin-arm, locale en-IN)
    • Flutter version 2.10.5 at /Users/mahesh/Documents/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 5464c5bac7 (12 hours ago), 2022-04-18 09:55:37 -0700
    • Engine revision 57d3bac3dd
    • Dart version 2.16.2
    • DevTools version 2.9.2

[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    • Android SDK at /Users/mahesh/Library/Android/sdk
    • Platform android-32, build-tools 31.0.0
    • ANDROID_HOME = /Users/mahesh/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7772763)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 13.2.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • CocoaPods version 1.10.2

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2021.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7772763)

[✓] IntelliJ IDEA Community Edition (version 2021.2.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 61.2.4
    • Dart plugin version 212.5080.8

[✓] VS Code (version 1.65.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.39.20220405

[✓] Connected device (4 available)
    • Redmi K20 Pro (mobile) • <IP_ADDRESS>:55555                    • android-arm64  • Android 11 (API 30)
    • iPhone 12 Pro (mobile) • 535317A4-921C-488F-B234-C2CC6D4AE5A1 • ios            • com.apple.CoreSimulator.SimRuntime.iOS-14-5 (simulator)
    • macOS (desktop)        • macos                                • darwin-arm64   • macOS 12.3 21E230 darwin-arm
    • Chrome (web)           • chrome                               • web-javascript • Google Chrome 100.0.4896.88

[✓] HTTP Host Availability
    • All required HTTP hosts are available

• No issues found!

[✓] Flutter (Channel master, 2.13.0-0.0.pre.712, on macOS 12.3 21E230 darwin-arm, locale en-IN)
    • Flutter version 2.13.0-0.0.pre.712 at /Users/mahesh/Documents/flutter_master
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 8c22f5648a (77 minutes ago), 2022-04-25 05:34:07 -0400
    • Engine revision 10efa195bf
    • Dart version 2.18.0 (build 2.18.0-44.0.dev)
    • DevTools version 2.12.2

[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    • Android SDK at /Users/mahesh/Library/Android/sdk
    • Platform android-32, build-tools 31.0.0
    • ANDROID_HOME = /Users/mahesh/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7772763)
    • All Android licenses accepted.

[!] Xcode - develop for iOS and macOS (Xcode 13.2.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    ! CocoaPods 1.10.2 out of date (1.11.0 is recommended).
        CocoaPods is used to retrieve the iOS and macOS platform side's plugin code that
        responds to your plugin usage on the Dart side.
        Without CocoaPods, plugins will not work on iOS or macOS.
        For more info, see https://flutter.dev/platform-plugins
      To upgrade see https://guides.cocoapods.org/using/getting-started.html#installation for
      instructions.

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2021.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7772763)

[✓] IntelliJ IDEA Community Edition (version 2021.2.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 61.2.4
    • Dart plugin version 212.5080.8

[✓] VS Code (version 1.66.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.39.20220405

[✓] Connected device (3 available)
    • Redmi K20 Pro (mobile) • <IP_ADDRESS>:5533 • android-arm64  • Android 11 (API 30)
    • macOS (desktop)        • macos            • darwin-arm64   • macOS 12.3 21E230 darwin-arm
    • Chrome (web)           • chrome           • web-javascript • Google Chrome 100.0.4896.127

[✓] HTTP Host Availability
    • All required HTTP hosts are available

! Doctor found issues in 1 category.

@brianosman Is this a case of there being device specific extensions enabled on the Nokia 1.3 that are being captured in the SkSL?

Yes, I haven't dug into the two warmup bundles, but that would be totally consistent with what's happening here.

I faced the same issue with Redmi 5A. When I compile the same application with Redmi Note 9 using SkSL shader file, this problem does not occur

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.3.3, on macOS 13.0 22A380 darwin-arm, locale tr-TR)
[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 14.0.1)
[✗] Chrome - develop for the web (Cannot find Chrome executable at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome)
    ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
[✓] Android Studio (version 2021.3)
[✓] VS Code (version 1.72.2)
[✓] Connected device (1 available)
[✓] HTTP Host Availability

! Doctor found issues in 1 category.


import/exports/sync user data (dat/git/...)

@todo

[ ] find a way to load a dat in the browser (coding a proof of concept)
[ ] find a way to create a new dat in the browser (coding a proof of concept)
[ ] find a way to publish and pin a dat from the browser to another browser (e.g. mobile phone)
[ ] find a way to pin/publish a browser created in the browser to a public dat server
[ ] find a way to backup all relevant dat keys to control a dat to disk (e.g. import/export key files)
[ ] find a way to deploy a new dat server from the browser
[ ] build a dat management tool for all dats i control or participate in

Use Cases:

Users create all kinds of data while going through the workshops lessons & exercises in the skilltree.
For example:

Writing a smart contract
Deploying a smart contract to a network at a specific address

Users switch devices and might open the workshop app on their phone and on different computers or use different browsers or even clear browser caches or re-install their systems, but they don't want to lose their data and they want to continue smoothly when switching devices.
For example:

A user starts a workshop at home on their laptop and wants to continue later using a tablet

Data:

Users work create and change files and folders during workshops
Users generate many actions or activities that go into some kind of journal

Idea:
Maybe we could try to use git or dat in mainstream browsers like (firefox/chrome/...) to enable users to store their Data and sove the two Use Cases listed above.

Some quick note here

Research how DAT works
Deploy dat-gateway and gonna research on hyperdrive
Try to push a file and save on DAT

cool :-)
I just mentioned on gitter, that a first goal to work towards probably should be a collaboration between you and @alincode to solve the #56 make skilltree/curriculum module issue.
I just mentioned it in the gitter chat here:

https://gitter.im/ethereum/play?at=5c6f0618b6c74f1e2e8cb352

just read through https://ar.al/2019/01/22/hypha-spike-multiwriter-1/ …
looks very very interesting.
Do I understand it correctly?

You run dat in the browser (or in two browsers)
The private dat key is stored locally in each browser
you connect both browsers through a generic signalhub
you make one browser talk to the other via webRTC to (e.g. authorize each other to write to those other dats)

...but essentially this kind of dat network and all the dat data stays in browsers - even though they might possibly sync to a dat client running on my desktop (outside the browser) if i run some kind of bridge ...
Is that how it works?
and also - can dats be used on static websites hosted on different domains?

answer

Heya (sorry, I don’t check DMs often). Yes, in a nutshell. Although you don’t have to store the secret key if you use deterministic keys (e.g., derived from a high-entropy passphrase) and also you can bridge to native clients that replicate over TCP by using the always-on node as a relay via WebSocket.
DATs can be used with static sites. It’s what I’m doing my blog currently (dat://ar.al – open that using Beaker Browser) :) But Hypha is the opposite of that. Everything is client-side and the always-on node (“server” in centralised parlance) is an untrusted/unprivileged node.

@ookangzheng

[ ] https://github.com/beakerbrowser/fritter/issues/14

[ ] https://github.com/isomorphic-git/isomorphic-git/issues/97

[ ] https://github.com/mafintosh/hyperdb

[ ] https://github.com/mafintosh/hyperdrive/#api (Load the file)

[ ] Waiting for dat-multiwriter

Could you publish an empty repository with a github page, which we could start adding code to on your github account and link it here? :-)
It can be an empty git repository - I can then use it to "mount" it in the github page for play-bookmarks and we can slowly add code to your repository, so that it works as a mountable "hard disk" for play-bookmarks :-)


Nightly build should deploy all files after build all shim versions

Describe the bug
Currently in our nightly builds we build each shim version and deploy as we go.  This deploys the integration test jars.  But if one of the shim versions fails, then we stop and don't deploy the final rapids plugin jar.  This means the artifacts deployed are mismatched because the latest rapids plugin jar is older than the integration tests jar.  Our IT builds now check for mismatch and fail.
To prevent this, perhaps we can wait and deploy all files after building everything.

@tgravescs is this still relevant?


Can not access UI on another ip

Hi there!
I try to access the ui, but have some problems .... first: When I start with rclone rcd --rc-web-gui --rc-no-auth -vvv, it looks so far good:
2020/04/19 15:49:53 DEBUG : rclone: Version "v1.51.0" starting with parameters ["rclone" "rcd" "--rc-web-gui" "--rc-no-auth" "-vvv"]
2020/04/19 15:49:53 NOTICE: Web GUI exists. Update skipped.
2020/04/19 15:49:53 INFO  : Cannot run Web GUI without authentication, using default auth
2020/04/19 15:49:53 INFO  : No username specified. Using default username: gui
2020/04/19 15:49:53 INFO  : No password specified. Using random password: M26_LkXtPfYe76kyzhTHdg
2020/04/19 15:49:53 NOTICE: Serving Web GUI
2020/04/19 15:49:53 NOTICE: Serving remote control on http://<IP_ADDRESS>:5572/
2020/04/19 15:49:53 DEBUG : login_token "Z3VpOk0yNl9Ma1h0UGZZZTc2a3l6aFRIZGc="
2020/04/19 15:49:53 ERROR : Failed to open Web GUI in browser: exec: "xdg-open": executable file not found in $PATH. Manually access it at: http://gui:Mxx_LkXtPfYe76kyzhTHdg@<IP_ADDRESS>:5572/?login_token=Z3VpOk0yNl9Ma1h0UGZZZTcxx3l6aFRIZGc%3D

I runned it on my NAS, i setup there a reverse proxy so I can access over :5573 the local running 5572. I took the url, replaces <IP_ADDRESS> with nas IP and port with 5573 and it runs.
Now, next I want run it directly on :5572 so a redirect is not needed. And here starts my problem.... when I call rclone rcd --rc-web-gui-no-open-browser --rc-user=user --rc-pass=pass --rc-addr=<IP_ADDRESS>:5572 -vv, I get the following log
2020/04/19 15:53:58 DEBUG : rclone: Version "v1.51.0" starting with parameters ["rclone" "rcd" "--rc-web-gui-no-open-browser" "--rc-user=user" "--rc-pass=pass" "--rc-addr=<IP_ADDRESS>:5572" "-vv"]
2020/04/19 15:53:58 INFO  : Using --user user --pass XXXX as authenticated user
2020/04/19 15:53:58 NOTICE: Serving remote control on http://<IP_ADDRESS>:5572/

and when I call web ui, I got only a "not found". Even when I start with rclone rcd --rc-user=user --rc-pass=pass --rc-allow-origin=* --rc-serve --rc-addr=<IP_ADDRESS>:5572 -vv, i got that log
2020/04/19 15:55:14 DEBUG : rclone: Version "v1.51.0" starting with parameters ["rclone" "rcd" "--rc-user=user" "--rc-pass=pass" "--rc-allow-origin=*" "--rc-serve" "--rc-addr=<IP_ADDRESS>:5572" "-vv"]
2020/04/19 15:55:14 INFO  : Using --user user --pass XXXX as authenticated user
2020/04/19 15:55:14 NOTICE: Serving remote control on http://<IP_ADDRESS>:5572/

I got a page with the text "List of all rclone remotes." but even not more.
Have I misunderstood the documentation or is here something wrong?

For me adding --rc-addr :5572 fixed it.

@19wolf this helped me save another day wasted.
I want to know if this can be implemented in shared hosting ?

For me adding --rc-addr :5572 (without the ip) fixed it.
My full command was rclone rcd --rc-web-gui --rc-addr :5572 and then I got
2020/04/27 20:54:20 NOTICE: Serving Web GUI
2020/04/27 20:54:20 NOTICE: Serving remote control on http://[::]:5572/
2020/04/27 20:54:20 ERROR : Failed to open Web GUI in browser: exec: "xdg-open": executable file not found in $PATH. Manually access it at: http://gui:upSUkK<snip>73Q@[::]:5572/?login_token=Z3VpOnVw<snip>3M1E%3D

and used that url from the error message (replacing [::] with the server's ip)

it has saved an another day here. thank you

For Linux Cli user
rclone rcd --rc-web-gui-no-open-browser --rc-user=user --rc-pass=pass --rc-addr :5572

rclone rcd --rc-web-gui --rc-addr :5572

I tried this
rclone rcd --rc-web-gui-no-open-browser --rc-no-auth --rc-addr :5572 -vvv
and when I open the browser It gives "Not Found"
I tried on VPS.

rclone rcd --rc-web-gui --rc-addr :5572

I tried this
rclone rcd --rc-web-gui-no-open-browser --rc-no-auth --rc-addr :5572 -vvv
and when I open the browser It gives "Not Found"
I tried on VPS.

try to reinstall rclone

rclone rcd --rc-web-gui --rc-addr :5572

I tried this
rclone rcd --rc-web-gui-no-open-browser --rc-no-auth --rc-addr :5572 -vvv
and when I open the browser It gives "Not Found"
I tried on VPS.

try to reinstall rclone

Same error, "not found" reinstalled rclone. Any other ideas are appreciated :)


Why the JsonSerializerProxy's override PopulateInternal method doesn't call the SetupReader method like its base one

https://github.com/JamesNK/Newtonsoft.Json/blob/0a2e291c0d9c0c7675d445703e51750363a549ef/Src/Newtonsoft.Json/Serialization/JsonSerializerProxy.cs#L265
What I met:
We use JsonConverter to do something when deserializing. But when I debug into the ReadJson method.
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
I found the serializer is actually an instance of JsonSerializerProxy. And its PopulateInternal doesn't call the SetupReader as its base class JsonSerializer.
Base PopulateInternal method:

Override PopulateInternal method:

What we need to do is every time when I write a new JsonConverter I have to manually set the reader's MaxDepth property. It seems easy to forget to do that.

So why not we call SetupReader method in the override PopulateInternal method?

I am a bit confused about your last code screenshot/snippet, which seems to be the origin or motiviation for your question / issue report here.
It looks like you got a JObject instance already. Where did you get the JObject data from? To me, it makes little sense to account for MaxDepth here.
Your real-world situation is probably more complicated than the short last code snippet you have shown here, but take note that MaxDepth's purpose is to provide a mechanism to avoid stack overflows, mitigate DOS and other attack attempts and possibly out-of-memory situations (see here: https://github.com/JamesNK/Newtonsoft.Json/issues/2457). This is quite likely also the reason why the reader created by JToken.CreateReader does not worry about MaxDepth by default, as the critical situations MaxDepth addresses aren't an issue withJToken.CreateReader. The possible critical situations MaxDepth addresses are at the point when (untrusted/unknown) json data is being consumed to create the actual JObject instance, not after the json data has been consumed already.

@elgonzo Thanks for you explanation. I've learned much about the design of MaxDepth setting.

It looks like you got a JObject instance already. Where did you get the JObject data from? To me, it makes little sense to account for MaxDepth here.

I'm not sure it is a correct way to use JsonConverter or not. But during the Json serialization, sometimes we want to do some special things to avoid unexpected deserialization. Just like the following JsonConverter doing.
    public class CommandListConverter : JsonConverter
    {
        public static CommandListConverter Instance { get; set; } = new CommandListConverter();

        public override bool CanConvert(Type objectType)
        {
            return typeof(IEnumerable<Command>).IsAssignableFrom(objectType);
        }

        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            reader.MaxDepth = serializer.MaxDepth;

            var tokenArray = (JArray)JToken.Load(reader);

            var genericType = objectType.GenericTypeArguments.First();

            var listType = typeof(List<>).MakeGenericType(genericType);

            var list = existingValue as IList ?? (IList)Activator.CreateInstance(listType);

            foreach (var childToken in tokenArray)
            {
                if (childToken is JObject objToken)
                {
                    if (objToken.TryGetValue(nameof(Command.Disabled), out var isDisabled) && isDisabled.ToObject<bool>())
                    {
                        continue;
                    }

                    if (objToken.ContainsKey("$type"))
                    {
                        var obj = serializer.Deserialize(childToken.CreateReader());
                        list.Add(obj);
                    }
                    else
                    {
                        var obj = serializer.Deserialize(childToken.CreateReader(), genericType);
                        list.Add(obj);
                    }
                }
            }

            return list;
        }

        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            throw new NotImplementedException();
        }
    }

This converter is doing something to pruning things to avoid unnecessary (in this case it's 'Disabled' property) deserialization. You can see every time when ReadJson, I must set the MaxDepth to avoid the MaxDepth limit. Because the serializer with the type JsonSerializerProxy doesn't use SetupReader method to pass the MaxDepth setting to the JsonReader.


Ignore non-JS requires like require('image!Kitten')

cc @amasad, perhaps the packager could autogenerate a Flow interface definition for the image files it fines.

@jeffmo is working on this, I think. We want to add a rule to flowconfig to redirect certain require patterns to a predefined mock.

Super. Looking forward to that.

Thanks for the ping. I'm currently focused on building out 'import type'/'export type' -- but I will begin working on this module-path redirection stuff right after that.

:+1: also very interested in this

+1

I think this is for Webpack users, if I've inferred correctly.

It's for anyone using the require.js spec's extensions incl RN.

Ok. Makes sense.

Update: https://github.com/facebook/flow/commit/625c25ae5d7c429cf4f7191bc3a8e948623d271d just landed which adds a config option of the form:
[options]
module_name.name_mapper = 'regexp-pattern' -> 'replacement-pattern'

When using Flow with it's [default] "node" module system, the mapper that wins is the first mapper whose regexp pattern matches and whose generated replacement results in module identifier string that represents an actual/known module in the system.
For anyone who happens to use the "haste" module system, due to the way Flow lazily matches haste module definitions to module imports/requires, the config option isn't able to consider whether a replacement candidate is a valid module at the time the conversion happens -- so the haste module system will use the first mapper whose regexp string matches.
The regexp string is just passed directly to ocaml's built-in regexp utilities, so that can serve as the reference for various supported regexp tokens and replacement templates:
http://caml.inria.fr/pub/docs/manual-ocaml/libref/Str.html#VALregexp

This is terrific @jeffmo.
@amasad - is an image source mock in the works?

@jeffmo: can replacement-pattern generate a relative module name?
@ide: Should be pretty simple. Just making this object a module: https://github.com/facebook/react-native/blob/master/packager/react-packager/src/Packager/index.js#L178-L186

@amasad: Sure. It's a string match that happens just before the lookup, so the result of running the replacement should be the same as if you put the replacement directly into the code

@jeffmo could you please provide an example of how module_name.name_mapper can actually be used, for the not so savvy? How to do a sass import, how to do an image import, etc.
thank you!

@thealjey - there are a couple tests checked in to exercise module.name_mapper. You can search for them.
Taking the first example that, shows
module.name_mapper='1Doesnt\(Exist\)' -> '\1s'

This means it will treat require('1DoesntExist) as require('Exists').  So The config_module_name_rewrite_node test is making sure this works for node module systems. In that directory there is a file Exists.js which is being required via the various renames and A.js which tests out the feature.

Is there any way to simply ignore all imports of .sass files without implementing a mock of some sort?

backing up what @jedwards1211 said - it's a little cumbersome as is.
for instance, in my use case, i'm using webpack and css modules and i'm pulling in local yaml and local css like so:
import fields from '../_fields.yaml'
import classes from './reference.css'

// react down here

understandably , both of those imports throw flow errors

pretend both of those files are in the screenshot
Looking up how to deal with this issue leads me to this url, and the flow docs
When I attempt to use the solution mentioned in the docs
module.name_mapper.extension= 'css' -> '<PROJECT_ROOT>/CSSFlowStub.js.flow'

I get this error (was mapper.extension removed?):

So, yeah. The only way I can think to handle my particular case is to declare every single local require manually in my interface file, or use a flow ignore comment (which is what I currently do)
Is there an official way to handle non js / local imports?

@rossPatton , pulling an example from the react-native codebase:
module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub'
Where this is the implementation of RelativeImageStub:
https://github.com/facebook/react-native/blob/master/Libraries/Image/RelativeImageStub.js
Since Flow loads all modules and uses that @providesModule, you could stick it anywhere in your code tree.

https://blog.iansinnott.com/getting-started-with-flow-and-webpack/ helped me to solve this problem.

like @AlexanderTserkovniy said this linked helped.
This is what I ended up with:
💩 .flowconfig
[options]
module.name_mapper.extension='css' -> '<PROJECT_ROOT>/flow/extension-resolver.js.flow'
module.name_mapper.extension='vue' -> '<PROJECT_ROOT>/flow/extension-resolver.flow'

// flow/extension-resolver.js

I using this on my .flowconfig
module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub'

but flow keeps complaining about Require module not found

@sibelius Instead of matching the whole module name, you can use extension matcher as suggested in previous posts. This works for me:
# Change
module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub'

# To
module.name_mapper.extension='\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)' -> 'RelativeImageStub'

Do we have to reset some cache or something maybe? I have never seen any of these things work.  Using 0.53.1.
module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> 'RelativeImageStub'
module.name_mapper.extension='png' -> 'RelativeImageStub'

Error: src/screens/Screens.js:25
 25:       icon: require('App/src/assets/images/tabbar-x.png'),
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ App/src/assets/images/tabbar-x.png. Required module not found
$ ls src/assets/images/tabbar-x*png
<EMAIL_ADDRESS>

Requiring images of kittens should always be allowed 😸

@jslz @sibelius Are you using react-native? RelativeImageStub is a module exported by that project, so if you don't have it then that's why flow can't find it. Personally, I used that regex, and then created a stub module manually for it. In the root of my project, I have a file called libdefs.js:
declare module 'RelativeImageStub' { declare module.exports: string }

Then, the relevant portion of my .flowconfig:
[libs]
libdefs.js

[options]
module.name_mapper.extension='\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)' -> 'RelativeImageStub'

This got rid of Required module not found on requiring images for me<EMAIL_ADDRESS>

this one worked for me https://github.com/facebook/flow/issues/345#issuecomment-319647394
in the latest version of flow

@mikaello It works for me. Thanks!

All of this actually didn't work for me. Btw I also have
[untyped]
.*/node_modules/react-native


dynamically create 'DB' item and use it until close

On native sqlite3 library i can assign db object to a class variable and use it in other methods without open everytime.
But with SQLiteC++, I cannot share the object. Assertion or memory errors occured.
All I want create SQLite::Database and assign it to class so the whole class can use the db as needed without explicitly open everytime.

Hi, I am not sure of what is the problem you get. Can you share the exact log of assertion or the type of memory errors ?
Are you sharing the Database accross multiple threads? This is not allowed by SQLite itself (at least not with default compile options)

No, Not like that. Let me explain;
class A {
public:
  static void openDb();
  static void insertValue(const char*);
private:
  static SQLite::Database db;
};

void A::openDb() {
  //something like this->db
  db(db_path, params)
}

void A::insertValue(const char *value) {
  //this->db or just db or A::db...
  SQLite::Statement query(db, "insert into...");
}

Okay, what I understand is that you want to open the db dynamically (that is, not in the constructor like in my examples) and then use it many times until closes.
Best way to do this would be to use a pointer to Database.
Let me get back home to make an example for you.

@SRombauts exactly! Thank you for the example. I am awaiting your reply on this.
BTW, For this case, which is more stable or proper? Opening every time and close at the end of execution? Or use it until app gets closed?

So, first of all, here is how I use SQLiteCpp usually, with constructors (RAII):

class A {
public:
    A(const char* path);
    void createTable();
    void insertValue(const char* value);
private:
    SQLite::Database    db;
    SQLite::Statement   insert;
};

A::A(const char* path) :
    db(path),
    insert(db, "INSERT INTO test VALUES (NULL, ?)")
{
}

void A::insertValue(const char* value)
{
    insert.bind(value);
    insert.exec();
}

int main ()
{
    A a("test.db3") // "CREATE TABLE test (id INTEGER PRIMARY KEY, msg TEXT)";
    a.insertValue("example");
}

And then, an example with dynamic allocation, using shared pointers:

#include <SQLiteCpp/SQLiteCpp.h>

#include <iostream>
#include <memory>

class A {
public:
    void open(const char* path);
    void insertValue(const char* value);

private:
    std::shared_ptr<SQLite::Database>   db;
    std::shared_ptr<SQLite::Statement>  insert;
};

void A::open(const char* path)
{
    db.reset(new SQLite::Database(path));
    insert.reset (new SQLite::Statement(*db, "INSERT INTO test VALUES (NULL, ?)"));
}

void A::insertValue(const char* value)
{
    if (db && insert)
    {
        std::cout << insert->getQuery().c_str() << " with '" << value << "'" << std::endl;
        insert->reset();
        insert->bind(value);
        insert->exec();
    }
}

int main ()
{
    A a;
    a.open("test.db3"); // "CREATE TABLE test (id INTEGER PRIMARY KEY, msg TEXT)";
    a.insertValue("example");
    return EXIT_SUCCESS;
}

All this is untested, no time presently...

@SRombauts above code worked smoothly without single error. I also managed to adapt to my static classes.
Thanks!

Very nice, I'll make à real example out of it for everyone else.
Cheers !

Just in case anyone needs to do something like this where the SQLite wrapper objects have a lifetime beyond the scope of one method call, I also tried the approach above but I used std::unique_ptr and it seems to work fine.
std::unique_ptr suits my needs better in most cases.


Rebuild v12.6.2 to include missing files

xref: https://github.com/NVIDIA/cuda-python/pull/230

Checklist

[x] Used a personal fork of the feedstock to propose changes
[x] Bumped the build number (if the version is unchanged)
[ ] Reset the build number to 0 (if the version changed)
[x] Re-rendered with the latest conda-smithy (Use the phrase @conda-forge-admin, please rerender in a comment in this PR for automated rerendering)
[x] Ensured the license file is being packaged.

@conda-forge-admin, please rerender

Hi! This is the friendly automated conda-forge-linting service.
I just wanted to let you know that I linted all conda-recipes in your PR (recipe/meta.yaml) and found it was in an excellent condition.

@jakirkham Can the cdt_name change from cos7 to conda be considered innocent? Where can I find more information about it? It does not show up in my conda subscription radar...

Can the cdt_name change from cos7 to conda be considered innocent? Where can I find more information about it? It does not show up in my conda subscription radar...

Yes please see these refs:

https://github.com/conda-forge/conda-forge-pinning-feedstock/pull/6637
https://github.com/conda-forge/cdt-builds/pull/71
https://conda-forge.org/community/minutes/2024-05-15/#your-new-agenda-items (need to scroll down a little bit or search cdt_name)

Would it make sense to add a test for this?
Perhaps something simple like...?
from cuda.ccudart cimport cudaStream_t

def func():
    cdef cudaStream_t s = <cudaStream_t>NULL

Yes please see these refs:

Thanks, John. I don't see any place explaining the meaning of cdt_name=conda and alternatives than conda. Based on Isuru's https://github.com/conda-forge/conda-forge.github.io/issues/1941#issuecomment-1519168703 I assume we are supposed to just ignore cdt_name from now on.

Yes that is what the agenda note reference states (admittedly it is hard to link to the exact line)

Tbh cdt_name is only used when a recipe depends on CDTs, which this one doesn't. So we didn't need to worry about it before either

@conda-forge-admin, please rerender

@conda-forge-admin, please rerender

Would it make sense to add a test for this?

Added a cythonize test. However, if it does not work in one shot I'll revert back to commit eecf59a and proceed to merge, as the needed files are already included as can be seen in the CI log, e.g.
https://dev.azure.com/conda-forge/feedstock-builds/_build/results?buildId=1077211&view=logs&j=1437f12d-1840-555e-1d60-298e0be353dc&t=e61a9fcc-abec-518f-6f56-33b467894cb6&l=30621
also it's been tested internally. There is no reason to block merging this (and the other) PR. We can move the nice-to-have test to a separate PR.

However, if it does not work in one shot ...

Looks like I need two shots 😛 But it should work now... Set automerge.

Thanks for your effort on this @leofang! All looks good to me.

I forgot that aarch64 is cross compiled, I wonder what happens with the tests... Are they run in QEMU (I hope so)?

Looks like it is. Neat.

Hi! This is the friendly conda-forge automerge bot!
I considered the following status checks when analyzing this PR:

linter: passed
azure: passed

Thus the PR was passing and merged! Have a great day!

Thanks Leo! 🙏


Flaky since migrating to Vite 5

Describe the bug
After the migration to Vite 5, I started having flaky failing tests, but only on the CI (GitHub actions).
Error:  ⎯⎯⎯⎯⎯⎯ Failed Suites 1 ⎯⎯⎯⎯⎯⎯⎯
Error:
Error:   FAIL  src/shared/components/safety-problem-icon/safety-problem-icon.component.test.tsx [ src/shared/components/safety-problem-icon/safety-problem-icon.component.test.tsx ]
Error:  Error: Cannot find module '/home/runner/actions-runner/_work/quality-linqueo-back/quality-linqueo-back/front/node_modules/.vitest/deps/react_jsx-runtime.js' imported from /home/runner/actions-runner/_work/quality-linqueo-back/quality-linqueo-back/front/node_modules/vite-node/dist/client.mjs
Error:  ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Error:  Serialized Error: { code: 'ERR_MODULE_NOT_FOUND' }
Error:  ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯

Note that I use Nx to run the tests.
Reproduction
I don't see home come I can provide a reproduction.
System Info
GitHub Actions
Both failing with vitest 0.X and 1.X.
Vite 5

Used Package Manager
npm
Validations

[X] Follow our Code of Conduct
[X] Read the Contributing Guidelines.
[X] Read the docs.
[X] Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
[X] Check that this is a concrete bug. For Q&A open a GitHub Discussion or join our Discord Chat Server.
[X] The provided reproduction is a minimal reproducible example of the bug.

Try disabling optimizer:
export default defineConfig({
  test: {
    deps: {
      optimizer: {
        web: { enabled: false }
      }
    }
  }
})

I think it's OK now, thank you @sheremet-va.
Though now I also have these kinds of errors:
Error:
⎯⎯⎯⎯⎯⎯ Unhandled Error ⎯⎯⎯⎯⎯⎯⎯
Error:  Error: ENOENT: no such file or directory, open '/home/runner/actions-runner/_work/x/.tmp/coverage-9.json'
Error:  ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
Error:  Serialized Error: { errno: -2, code: 'ENOENT', syscall: 'open', path: '/home/runner/actions-runner/_work/x/.tmp/coverage-9.json' }
Error:

Any idea?

This looks like an issue with coverage


Fix #1006

Problem
Fix #1006
Solution
Remove use of deprecated jQuery
Ensure correct order of JS media
Acceptance Criteria
This is hard to test formally, so someone please verify it.

Coverage decreased (-0.09%) to 95.505% when pulling 1e33e96a5b7d23d4e4651a05caa43261bcd5e775 on beruic:patch-1 into b12154dfb777e742bb480c51f8d60d951fbb22ec on django-import-export:master.

I took a look at the failing tests, and it only fails against the current master because a class has been removed, so these changes has nothing to do with the failing tests. The same goes for #1008 and #1009 which currently has the same status.

Hey @beruic ! Thanks for the contribution. To be honest, I'm no jquery wizard so I dont think Im the best to review this. If its ok with you, Id like to leave it open for a bit so we can perhaps get some other eyes on it. Is that ok?

I'm fine with that. Don't do anything you are not comfortable with :)
I'll just sum up the JS changes here below, to make it easier for any reviewer, and perhaps also for you and others likely experienced to understand the change:
https://api.jquery.com/ready/ states that:

There is also $(document).on( "ready", handler ), deprecated as of jQuery 1.8 and removed in jQuery 3.0. Note that if the DOM becomes ready before this event is attached, the handler will not be executed.
, and Django 2.2 uses jQuery 3.3.1

https://bugs.jquery.com/ticket/11719 is just the ticket tracking this change.
In addition, my change of line 13 in action_formats.js
$actionsSelect.on('change', function() { to $actionsSelect.change(function() { is mainly for readability and is based on the documentation at https://api.jquery.com/change/
I'm testing it in production soon, and so far see no issues in testing.

@bmihelac and @jdufresne , could any of you review or suggest a reviewer so we can merge this?

Hi @beruic, we have the same problem in our applications when migrating to Django 2.2.
We reviewed your code and thought of a simpler solution, can you please check https://github.com/django-import-export/django-import-export/pull/1047 ?
This would not decrease coverage and it is the recommended way going forward. The media function is supposed to be used for more sophisticated requirements. Though the code looks good and I'm sure it fixes the problem too.
The commit about jQuery deprecations should be on a different PR IMHO.
@andrewgy8, @bmihelac, can you please take a look as well? Django 2.2 has been out for a while, it would be great to agree on a fix sooner than later :)
Thanks

@beruic just checked and you are right about the jQuery deprecations, that is supposed to be affecting users since Django 2.1 https://docs.djangoproject.com/en/2.2/releases/2.1/#minor-features
So #1047 is only fixing our problems with jQuery, not the original problem in #1006

@andrewgy8 is that review not for you if @manelclos approves it?

So to sum up @beruic , this fixes what is in #1047 plus more (ie what is mentioned in #1006)? Either is good for me. Just want to be clear before merging.

@andrewgy8 yes this fixes #1006 and there is no need to merge #1047 :)


Unable to execute MLNet CLI on Apple Silicon machine

System Information (please complete the following information):

Model Builder or CLI Version: 16.2.0
Visual Studio Version (if applicable): 2019 for Mac 8.9.8 (build 7)

Describe the bug

On which page of the tutorial did you run into an issue (URL): https://dotnet.microsoft.com/learn/ml-dotnet/get-started-tutorial/train
Clear description of the problem: mlnet get killed by zsh immediately.

To Reproduce
Steps to reproduce the behavior:

Install mlnet: dotnet tool install -g mlnet
Unzip yelp_labelled.txt to current work folder.
Execute commend: mlnet classification --dataset "yelp_labelled.txt" --has-header false --label-col 1 --train-time 20
Error: zsh: killed     ~/.dotnet/tools/mlnet classification --dataset "yelp_labelled.txt"  false 1 2

Expected behavior
mlnet starts training process.
Screenshots

Additional context
Add any other context about the problem here.

Thanks for reporting and for showing interested of mlnet running on apple silicon!
Currently ML.NET framework isn't fully apple silicon compatible. We're working closely with that team and when it's available we'll release a new mlnet cli as well.
Thanks for your feedback!

Related: https://github.com/dotnet/machinelearning/pull/5628

Hi @cigoic
We recently published some updates to the CLI and you should be able to use it with M1.
You can install it with the following command:
dotnet tool install -g mlnet-osx-arm64

For more details, see the installation instructions.


Add ability to use @dynamic or map_task functionality from Flyte

Wrap @dynamic in latch (https://blog.flyte.org/dynamic-workflows-in-flyte). If used, it's currently not recognized as a workflow.
An alternative would be map_task: https://towardsdatascience.com/map-tasks-in-flyte-47f198c1772e but ideally both are supported

Closing because dynamic and map tasks are released in v1.3.0


fix #239 , use python-style templating instead of Jinja in the ec2 login_cmd_template

This file assumes Jinja templating for the port parameter and passes a Jinja-style "{{ port }}".
https://github.com/ansible/molecule/blob/main/src/molecule/command/login.py#L105
When it reaches molecule, it is subsituted in  this file and is done by python calling .format() on the string. That causes it to not render correctly and gives users issues running molecule login.
ref: https://github.com/ansible-community/molecule-plugins/issues/239

I tested by editing this change into my venv locally and can now log in correctly to ec2 instances by calling molecule login

It affects users on all plugins - updated the PR to address each.

Any news on this?

Any news on this PR?
This bug breaks some of the plugin functionality quite badly.

Can also confirm, that this fixes the issue.

@danielpodwysocki Please add a label to the PR. Would recommend to use 'patch' here. Otherwise following check is failing to success 'ack / ack / ack (pull_request_target) '.
I think, after adding this label, the process of merging will be a step nearer.

@danielpodwysocki Please add a label to the PR. Would recommend to use 'patch' here. Otherwise following check is failing to success 'ack / ack / ack (pull_request_target) '. I think, after adding this label, the process of merging will be a step nearer.

@ekin-oener-provsn I miss permissions to do that here, I could only create the PR but seems I cannot edit labels. It will need to be someone with enough access to this repo.

Confirm. Fixes the same issue for me.

Fixes the issue on Arch Linux. Seems good to merge.

Bump... the fix seems good, we just need a maintainer to add the label to the PR as the submitter asserts they lack permission to edit the labels.

Bump. Please merge this, the bug is breaking stuff.

Can confirm the PR fixed the issue locally for me, is it possible for it to be merged?

please please please get this merged, as we are re-writing all our ansible roles and this would help so much

please please please get this merged, as we are re-writing all our ansible roles and this would help so much

+1 please approve this.

@audgirka are you able to progress this PR please?

@apatard Have had a quick look at the failed builds and can see that centos:7 is failing, as thats now EOL should that be removed?

@apatard Have had a quick look at the failed builds and can see that centos:7 is failing, as thats now EOL should that be removed?

I found time to fix that the other day but didn't find enough time to clean, push and create a PR. I hope I'll do it this week

PR opened, and looks like the CI is green, so only a reviewer is needed to get it merged. This should unblock this PR

Any news here?
This is a rather annoying bug to work around and feels like something we should be addressing in weeks, not months?

Any news here?
This is a rather annoying bug to work around and feels like something we should be addressing in weeks, not months?

once the CI is fixed, this PR will be merged. As long as my PR about fixing the CI is not merged (in this form or any other form), I fear it's stuck :(

Right, looks like my PR has been merged (big thanks to @ssbarnea). Once this PR is rebased, it'll be ready to be merged I guess.

Right, looks like my PR has been merged (big thanks to @ssbarnea). Once this PR is rebased, it'll be ready to be merged I guess.

Awesome - I've rebased off of main.

Any chance to finally release? :pray:


Flatten json output for tcp-inlet delete command

Current behavior
The json output format for tcp-inlet delete is not correct because it has an unnecessary nested level.
Desired behavior
The tcp-inlet key should be removed so that the command outputs a flat object.
Implementation details
The following line should be modified to produce the described output:
https://github.com/build-trust/ockam/blob/9c49e470a574d91854aa24628584eda4554aaad0/implementations/rust/ockam/ockam_command/src/tcp/inlet/delete.rs#L61

Some tips for newcomers:

Create a new branch for the issue you are working on (don't push directly to your fork's develop branch)
Run cargo fmt. You can configure the editor to run it automatically everytime a file is saved
Run cargo clippy to make sure the code compiles + follows rust standards/best practices
You don't need to keep your branch updated with develop until there is a merge conflict. If you still want to update it, use git rebase develop instead of gir merge develop

We love helping new contributors! ❤
If you have questions or need help as you explore, please join us on Discord. If you're looking for other issues to contribute to, please checkout our good first issues.

@adrianbenavides , i would like to work on this issue, can you pls assign this to me.

@nabeel001 It seems that @Tashuuuu already has a PR https://github.com/build-trust/ockam/pull/6501 up against this issue. Please take a look at some of the other open issues we have 👍🏽
@Tashuuuu In the future, please add a comment asking to be assigned to an issue before raising a PR against it 🙏🏽

It gives us a chance to assign the issue to you
Makes it easier to track what PR closes the issue
Let's others know that this issue is being actively worked on by someone 👍🏽
Thank you for your contributions! ❤


Fix build warnings

There have lots of build warnings, should be fixed.

Fixed in https://github.com/Microsoft/devkit-sdk/pull/967


New "channel playlist link" feature non-functional

The newly added feature to remove playlist video links in channels appears to be non-functional. I've tried it with the option unchecked (which should remove the "&list=yaddayadda" from the url) and with the option checked. There is no change. I've also tried the current developer version (build 369) and the feature is broken in it as well.
I'm using Firefox 31 and the YouTubeCenter 2.1.5 userscript with Greasemonkey

Unfortunately it is broken again.
Thank you so much for your efforts YePpHa. I have written scripts myself to make Youtube usable and I know that it is constant hard work. I already have donated money to you and advertize Youtube Center to everyone. Each time vital features like this break, I feel more in dept to you.

I found this, and it works:
http://www.reddit.com/r/LifeProTips/comments/247c2u/lpt_youtube_how_to_play_all_videos_from_a_channel/
Add &feature=mfu_in_order&list=UL to the end of the URL.

Wrote Greasemonkey script that does the job: https://openuserjs.org/scripts/C0NPAQ/Youtube_Channel_Playlist