Example - Number Generator

I created my own version of https://github.com/florinpop17/app-ideas/blob/master/Projects/1-Beginner/Random-Number-Generator.md
Coded it in Python, I implemented all of the points, and one extra from me. The GUI is done by Tkinter-customtkinter. I added comments wherever I thought might be unknown to someone.
Here's the link to mine: https://github.com/SerjSX/Python-Number-Generator-Project

Hello everyone 👋
I hope this message finds you well. As you may know, the original repository for app ideas has not been updated in a while and is no longer actively maintained. However, I'm excited to let you know that a new repository has been created to continue this project (https://github.com/vincent0426/app-ideas).
The new repository aims to provide a comprehensive list of practical and achievable app ideas that developers of all levels can work on to improve their skills and build their portfolios. We welcome contributions from anyone who wants to add their own app ideas or improve the existing ones, and we are also looking for volunteers who can help maintain the repository and keep it up to date.
If you are interested in contributing or maintaining this project, please head over to the new repository (https://github.com/vincent0426/app-ideas) ⭐ and take a look at the existing issues and pull requests. Feel free to open a new issue if you have an app idea to suggest or if you have any questions about the project.
Thank you for your attention, and I hope to see you in the new repository soon! 💖

⚠ This message was generated by a robot 🤖, if this message reached you, consider leaving a star for this robot, repository link
⭐ https://github.com/aldairandre/github-bot ⭐

Hello everyone 👋
I hope this message finds you well. As you may know, the original repository for app ideas has not been updated in a while and is no longer actively maintained. However, I'm excited to let you know that a new repository has been created to continue this project (https://github.com/vincent0426/app-ideas).
The new repository aims to provide a comprehensive list of practical and achievable app ideas that developers of all levels can work on to improve their skills and build their portfolios. We welcome contributions from anyone who wants to add their own app ideas or improve the existing ones, and we are also looking for volunteers who can help maintain the repository and keep it up to date.
If you are interested in contributing or maintaining this project, please head over to the new repository (https://github.com/vincent0426/app-ideas) ⭐ and take a look at the existing issues and pull requests. Feel free to open a new issue if you have an app idea to suggest or if you have any questions about the project.
Thank you for your attention, and I hope to see you in the new repository soon! 💖

⚠ This message was generated by a robot 🤖, if this message reached you, consider leaving a star for this robot, repository link
⭐ https://github.com/aldairandre/github-bot ⭐

Hello everyone 👋
I hope this message finds you well. As you may know, the original repository for app ideas has not been updated in a while and is no longer actively maintained. However, I'm excited to let you know that a new repository has been created to continue this project (https://github.com/vincent0426/app-ideas).
The new repository aims to provide a comprehensive list of practical and achievable app ideas that developers of all levels can work on to improve their skills and build their portfolios. We welcome contributions from anyone who wants to add their own app ideas or improve the existing ones, and we are also looking for volunteers who can help maintain the repository and keep it up to date.
If you are interested in contributing or maintaining this project, please head over to the new repository (https://github.com/vincent0426/app-ideas) ⭐ and take a look at the existing issues and pull requests. Feel free to open a new issue if you have an app idea to suggest or if you have any questions about the project.
Thank you for your attention, and I hope to see you in the new repository soon! 💖

⚠ This message was generated by a robot 🤖, if this message reached you, consider leaving a star for this robot, repository link
⭐ https://github.com/aldairandre/github-bot ⭐

Hey Hi,
I can create Number Generator using python.
Can I Contribute for this issue?


Not working on PyTorch 2.1 and CUDA 11.8

When I run this on PyTorch 2.1 and CUDA 11.8, I get this error:
Traceback (most recent call last):
File "", line 12, in
File "/home/nzubic/anaconda3/envs/events_signals/lib/python3.11/site-packages/jax2torch/jax2torch.py", line 54, in inner
return JaxFun.apply(*bound.arguments.values())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/nzubic/anaconda3/envs/events_signals/lib/python3.11/site-packages/torch/autograd/function.py", line 542, in apply
raise RuntimeError(
RuntimeError: In order to use an autograd.Function with functorch transforms (vmap, grad, jvp, jacrev, ...), it must override the setup_context staticmethod. For more details, please see https://pytorch.org/docs/master/notes/extending.func.html

@NikolaZubic you are using functorch? yea this may be out of the scope


Bamboo Builder

This PR tries to implement what was discussed on Issue #17 by @TWME-TW
It will implement two guis that will let you select age and leave type.

I decided not to make sub-guis with age and leave type and just group them into a regular group GUI since the initial reason of creating multiple GUIs was the three different parameters. Turns out only two are relevant, which only turns out to be 6 possible combinations. So I decided to just use the group gui.


Retail Interactive tutorials. Create/Delete test resources scripts

Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly:

[ ] Make sure to open an issue as a bug/issue before writing your code!  That way we can discuss the change, evaluate designs, and agree on the general idea
[ ] Ensure the tests and linter pass
[ ] Code coverage does not decrease (if any source code was changed)
[ ] Appropriate docs were updated (if necessary)

Fixes #<issue_number_goes_here> 🦕

Thanks for splitting the samples into smaller chunks, let me now next week any PRs that are ready for review.

CLosed due to the CLA issue, the same code cahnges are duplicated in the PR #145


Support piping input

For example, it would be nice to be able to do:

    tar -cv foo | zopfli -c > foo.tar.gz

For this example to work, Zopfli would have to support direct input as well
(not just file names), e.g.

    zopfli -c -s "$(cat foo.txt)"

Original issue reported on code.google.com by<EMAIL_ADDRESS>on 29 Apr 2013 at 11:56

This would be very nice to be able to pipe to zopfli!

It's worth noting that instead of looking at the stdin every time it's also common to accept a special "-" file name which acts as a placeholder for stdin or stdout (depending on the context). Now this isn't perfect (special file names are never good) and it's probably better to have a separate parameter but it goes to show that trying to determine whether the stdin is a tty isn't necessary (and might come with its own downsides).

BTW, a third party solution exists at http://stackoverflow.com/q/38353692/2261442

@Herst That code writes the streams to temporary files, which isn't really a solution.

I really prefer using the "-c" flag, like gzip and xz. If it were based on "detecting whether stdin is a tty", that would lead to inconsistent behavior if you try to run a script in the background in certain ways, invoke it from a GUI, etc.


No response from URL; despite validating URL and Port

Good Afternoon,
I have downloaded TM1Py, tested the check.py script and returned the correct version number. I then started exploring with a few sample scripts:
from TM1py import TM1Service

with TM1Service(address='localhost', port=8001, ssl=True, user='user', password='apple') as tm1:
    dataframe = tm1.cells.execute_view_dataframe_shaped(cube_name='CUBE', view_name='VIEW')

    dataframe.head ()
    dataframe.to_excel("test.xlsx")

However, I receive a error message which read, "No response from URL. Please double-check the URL and Port number. The URL is the same as the one that I successfully used in the check.py script and the Port Number was pulled from the TM1.cfg file. The environment is hosted on IBM Cloud, so I am not sure if that impacts the script?
Any help would be greatly appreciated.
Thank you!

Hi @StreetRodRacer ,
Please try this way
from TM1py import TM1Service

with TM1Service(address='localhost', port=8001, ssl=True, user='user', password='apple') as tm1:
    dataframe = tm1.cells.execute_view_dataframe_shaped(cube_name='Currency Exchange Rates', view_name='Default',private=False)

    print(dataframe.head())
    dataframe.to_excel("test.xlsx")

print(dataframe.head())
dataframe.to_excel("test.xlsx")


registry with htpasswd not accessible

Hi, Is possible to use docker secrets to pass REGISTRY_PASS ?
I got "Internal Error There may be a problem communicating with the Registry" when accessing from browser. registry-ui container can telnet to registry normally on port 5000
Here is my compose file
version: "3.2"

services:
    registry:
        image: registry:2
        ports:
          - 5000:5000
        secrets:
          - registry.crt
          - registry.key
          - registry.htpasswd
        environment:
          - REGISTRY_HTTP_SECRET=my-http-secret
          - REGISTRY_AUTH=htpasswd
          - REGISTRY_AUTH_HTPASSWD_PATH=/run/secrets/registry.htpasswd
          - REGISTRY_AUTH_HTPASSWD_REALM=RegistryRealm
          - REGISTRY_HTTP_TLS_CERTIFICATE=/run/secrets/registry.crt
          - REGISTRY_HTTP_TLS_KEY=/run/secrets/registry.key
        deploy:
            placement:
                constraints:
                    - node.role == worker
            mode: replicated
            replicas: 1
    ui:
        image: jc21/registry-ui
        ports:
          - 10081:80
        secrets:
          - registry.password
        environment:
          - REGISTRY_SSL=true
          - REGISTRY_HOST=registry:5000
          - REGISTRY_STORAGE_DELETE_ENABLED=true
          - REGISTRY_USER=admin
          - REGISTRY_PASS=/run/secrets/registry.password
        deploy:
            placement:
                constraints:
                    - node.role == worker
            mode: replicated
            replicas: 1

secrets:
    registry.crt:
        external: true
    registry.key:
        external: true
    registry.htpasswd:
        external: true
    registry.password:
        external: true

registry last log
time="2019-12-21T02:42:10.6238993Z" level=info msg="listening on [::]:5000, tls" go.version=go1.11.2 instance.id=8e8aab69-6d4d-4003-ba9c-79fc72f0aee4 service=registry version=v2.7.1

docker-registry-ui log when accesing from browser
[12/21/2019] [2:43:19 AM] [Express ] › ⚠  warning Error: getaddrinfo ENOTFOUND admin admin:443  at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:57:26)

If i use plain text in for REGISTRY_PASS i got this error
[12/21/2019] [2:59:05 AM] [Express ] › ⚠  warning                      URIError: URI malformed
    at decodeURIComponent (<anonymous>)
    at Url.parse (url.js:336:19)
    at Object.urlParse [as parse] (url.js:146:13)
    at new Request (/app/node_modules/restler/lib/restler.js:22:18)
    at request (/app/node_modules/restler/lib/restler.js:322:17)
    at Object.get (/app/node_modules/restler/lib/restler.js:329:9)
    at Promise (/app/src/backend/lib/docker-registry.js:44:18)
    at new Promise (<anonymous>)
    at module.exports.getImages (/app/src/backend/lib/docker-registry.js:43:16)
    at Object.getAll (/app/src/backend/internal/repo.js:111:25)

I hope this pull request helps you, actually docker secrets didn't work if you don't implement it in your image because secrets are loaded from a file and you are trying to load a file content in a ENV variable but what you are doing is mapping a path not the content itself.

I hope this pull request helps you, actually docker secrets didn't work if you don't implement it in your image because secrets are loaded from a file and you are trying to load a file content in a ENV variable but what you are doing is mapping a path not the content itself.


[Regression] Expand-* functions which show logs should output fullnames

/cc @niheaven

extract_inno should be unpack_inno
https://github.com/lukesampson/scoop/blob/c7033e1079e7b3744639a2f72fb79eb12975a1d2/lib/decompress.ps1#L200-L203
See https://github.com/lukesampson/scoop-extras/blob/master/bucket/hxd.json

If it's a zip it should be extracted before trying to unpack it with innounp

I know. This is only for that log file location.
It should be full path so you can easily click it.

This should show the complete path
https://github.com/lukesampson/scoop/blob/c7033e1079e7b3744639a2f72fb79eb12975a1d2/lib/decompress.ps1#L131
It does it for me at least.

extract_inno should be unpack_inno
scoop/lib/decompress.ps1
Lines 200 to 203 in c7033e1
function extract_inno($path, $to, $removal) {
Show-DeprecationMessage $MyInvocation 'Expand-InnoArchive'
Expand-InnoArchive -Path $path -DestinationPath $to -Removal:$removal
}
See lukesampson/scoop-extras:bucket/hxd.json@master

https://github.com/lukesampson/scoop-extras/pull/1986
https://github.com/lukesampson/scoop-extras/pull/1987
Except for these two manifests, no unpack_inno is used...

It does it for me at least.

This may caused by PS version diff, see discussion in https://github.com/scoopinstaller/scoop-main/pull/6

So I made these PRs, and rename unpack_inno to extract_inno for consistency。

It should be unpack_inno for backward compatibility :smile:


feat: add download header log

Signed-off-by: Gaius<EMAIL_ADDRESS>
Description

Add download header log.

Related Issue

Motivation and Context

Screenshots (if appropriate)
Types of changes

[ ] Bug fix (non-breaking change which fixes an issue)
[x] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to change)
[ ] Documentation Update (if none of the other choices apply)

Checklist

[ ] My change requires a change to the documentation.
[ ] I have updated the documentation accordingly.
[x] I have read the CONTRIBUTING document.
[ ] I have added tests to cover my changes.

Codecov Report

Merging #1793 (53b1f7a) into main (2556626) will increase coverage by 0.04%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##             main    #1793      +/-   ##
==========================================
+ Coverage   43.84%   43.88%   +0.04%
==========================================
  Files         128      128
  Lines       15902    15902
==========================================
+ Hits         6972     6979       +7
+ Misses       8398     8394       -4
+ Partials      532      529       -3

Flag
Coverage Δ

Object-compatibility-e2etests
?

e2etests
?

unittests
43.88% <100.00%> (+0.04%)
:arrow_up:

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

client/daemon/transport/transport.go
46.50% <100.00%> (ø)

client/daemon/peer/piece_manager.go
52.99% <0.00%> (-0.41%)
:arrow_down:

client/daemon/peer/peertask_conductor.go
57.01% <0.00%> (+0.51%)
:arrow_up:

...ent/daemon/peer/peertask_piecetask_synchronizer.go
51.09% <0.00%> (+0.93%)
:arrow_up:


Frequent single node CI failures for missing physical interfaces

We see this a lot in develop:
Dec  6 16:30:16 sfci-1pfefh sh[2969]: Traceback (most recent call last):
Dec  6 16:30:16 sfci-1pfefh sh[2969]:   File "/usr/local/bin/sf-daemon", line 8, in <module>
Dec  6 16:30:16 sfci-1pfefh sh[2969]:     sys.exit(main())
Dec  6 16:30:16 sfci-1pfefh sh[2969]:   File "/usr/local/lib/python3.6/dist-packages/shakenfist/daemons/main.py", line 169, in main
Dec  6 16:30:16 sfci-1pfefh sh[2969]:     _audit_daemons()
Dec  6 16:30:16 sfci-1pfefh sh[2969]:   File "/usr/local/lib/python3.6/dist-packages/shakenfist/daemons/main.py", line 162, in _audit_daemons
Dec  6 16:30:16 sfci-1pfefh sh[2969]:     _start_daemon(d)
Dec  6 16:30:16 sfci-1pfefh sh[2969]:   File "/usr/local/lib/python3.6/dist-packages/shakenfist/daemons/main.py", line 103, in _start_daemon
Dec  6 16:30:16 sfci-1pfefh sh[2969]:     DAEMON_IMPLEMENTATIONS[d].Monitor(d).run()
Dec  6 16:30:16 sfci-1pfefh sh[2969]:   File "/usr/local/lib/python3.6/dist-packages/shakenfist/daemons/net.py", line 188, in run
Dec  6 16:30:16 sfci-1pfefh sh[2969]:     self._process_network_node_workitems()
Dec  6 16:30:16 sfci-1pfefh sh[2969]:   File "/usr/local/lib/python3.6/dist-packages/shakenfist/daemons/net.py", line 154, in _process_network_node_workitems
Dec  6 16:30:16 sfci-1pfefh sh[2969]:     n.create()
Dec  6 16:30:16 sfci-1pfefh sh[2969]:   File "/usr/local/lib/python3.6/dist-packages/shakenfist/net.py", line 320, in create
Dec  6 16:30:16 sfci-1pfefh sh[2969]:     self.deploy_nat()
Dec  6 16:30:16 sfci-1pfefh sh[2969]:   File "/usr/local/lib/python3.6/dist-packages/shakenfist/net.py", line 358, in deploy_nat
Dec  6 16:30:16 sfci-1pfefh sh[2969]:     'dev %(physical_veth_inner)s' % subst)
Dec  6 16:30:16 sfci-1pfefh sh[2969]:   File "/usr/local/lib/python3.6/dist-packages/shakenfist/util.py", line 285, in execute
Dec  6 16:30:16 sfci-1pfefh sh[2969]:     env_variables=env_variables, shell=True)
Dec  6 16:30:16 sfci-1pfefh sh[2969]:   File "/usr/local/lib/python3.6/dist-packages/oslo_concurrency/processutils.py", line 441, in execute
Dec  6 16:30:16 sfci-1pfefh sh[2969]:     cmd=sanitized_cmd)
Dec  6 16:30:16 sfci-1pfefh sh[2969]: oslo_concurrency.processutils.ProcessExecutionError: Unexpected error while running command.
Dec  6 16:30:16 sfci-1pfefh sh[2969]: Command: ip netns exec 3467bc57-8059-4fd7-9e93-3db2ed9baad4 ip addr add <IP_ADDRESS>/<IP_ADDRESS> dev phy-4-i
Dec  6 16:30:16 sfci-1pfefh sh[2969]: Exit code: 1
Dec  6 16:30:16 sfci-1pfefh sh[2969]: Stdout: ''
Dec  6 16:30:16 sfci-1pfefh sh[2969]: Stderr: 'Cannot find device "phy-4-i"\n'

The weird bit is that this shouldn't have been queued as a task. For single node CI the hypervisor node is also the network node and this should have been fast pathed to avoid the queue. I need to debug this further.

As a side comment: I think there should a single path for actions such as this - even if a small efficiency was available.
If the creation of a 'thing' uses a queue, then it should always go through the same 'thing queue'. The usual benefits of reduced code, maintainability, etc...

I think this is now resolved with randomized vxlan ids.


Mark OPENSSL_armcap_P .hidden in arm asm

Fixes https://github.com/openssl/openssl/pull/21583#issuecomment-1727057735:
ld: error: relocation R_ARM_REL32 cannot be used against symbol 'OPENSSL_armcap_P'; recompile with -fPIC

when linking a static build of openssl to a shared library for 32 bit arm on Android,
since https://github.com/openssl/openssl/pull/21583.
This source change has one observable change in readelf output (e.g. for crypto/sha/libcrypto-lib-sha512-armv4.o):
 Symbol table '.symtab' contains 12 entries:
    Num:    Value  Size Type    Bind   Vis      Ndx Name
      0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND
      1: 00000000     0 SECTION LOCAL  DEFAULT    2
      2: 00000000   640 OBJECT  LOCAL  DEFAULT    2 K512
      3: 00000000     0 NOTYPE  LOCAL  DEFAULT    2 $d.0
      4: 000002a0     0 NOTYPE  LOCAL  DEFAULT    2 $t.1
      5: 0000183a     0 NOTYPE  LOCAL  DEFAULT    2 $d.2
      6: 00000000     0 SECTION LOCAL  DEFAULT    6
      7: 00000000     0 SECTION LOCAL  DEFAULT    8
      8: 00000000     0 SECTION LOCAL  DEFAULT   11
-     9: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND OPENSSL_armcap_P
+     9: 00000000     0 NOTYPE  GLOBAL HIDDEN   UND OPENSSL_armcap_P
     10: 000002a1  1134 FUNC    GLOBAL DEFAULT    2 sha512_block_data_order
     11: 00000711  4394 FUNC    GLOBAL DEFAULT    2 sha512_block_data_order_n

This change was automated using
sed -e '/[.]hidden.*OPENSSL_armcap_P/d; /[.]extern.*OPENSSL_armcap_P/ {p; s/extern/hidden/ }' -i -- crypto/*arm*pl crypto/*/asm/*arm*pl

with the filepath patterns derived from https://github.com/openssl/openssl/pull/21583.

More reading:
Commit message in https://github.com/google/boringssl/commit/16e38b2b8f50a3d048f61d2979d5ceddacd70fc3.
https://github.com/android/ndk/issues/191.

The .comm vs .extern is not relevant. The reason the .hidden solves the problem is that it now can not be a symbol overridden by another library or executable. There is no reason to support that.

@t8m
Any news?

I am looking at this (slowly, sorry)

@tom-cosgrove-arm @t8m Given those tags just added does that mean this solution is acceptable to the OpenSSL maintainers? (I'm trying to confirm that it's safe to merge @dg0yt 's patch of this in vcpkg)

@BillyONeal I don't think the final fix will look like this, but not sure exactly what it should be at the moment. This is now top of my OpenSSL list, though

@tom-cosgrove-arm OK, thanks, I'll drop this from daily checks. Please poke me when this is fixed if you remember :)

I see no problem with the patch as is

I see no problem with the patch as is

As in, it passes for the platforms vcpkg ships to but there are others that openssl cares about perl scripts or something like that, so I should merge @dg0yt's PR?

As it stands, this patch would require us to add .hidden every time we add a new assembler file - specifically, to remember to do that. That's not good for maintainability - it will just cause this issue to recur every now and them. Moreover, I don't understand why this patch works - declaring the variable .extern should be sufficient. However, the xlate script removes .extern for unknown reasons, and that doesn't seem right either. Hence: doing more investigations to understand the root cause, rather than adding a workaround

@tom-cosgrove-arm We just want to know if the current change is safe to merge in vcpkg side. meaning everytime that someone will use vcpkg openssl with this patch it will work correctly and it will be safe to use.
When you find long term solution and it will be in different PR or / and it will be on the next version, when vcpkg will update the openssl next version it will take the long term solution with the new version / new commit.
Thank you for your time.

However, the xlate script removes .extern for unknown reasons, and that doesn't seem right either.

Can you verify this? I don't see in the script, and I don't see the effect in the build dir. E.g.:
buildtrees/openssl/arm-neon-android-dbg/crypto/sha/sha512-armv4.S:.extern       OPENSSL_armcap_P
buildtrees/openssl/arm-neon-android-dbg/crypto/sha/sha512-armv4.S:.hidden       OPENSSL_armcap_P

And IIUC, OPENSSL_armcap_P would be undeclared without .extern.

As the linker complains, the code is not position independent code (PIC). With a symbol that's exported, the dynamic linker needs to be able to support replacing the symbol by one from an other library (or executable). To be able to do that, the code needs to be PIC, and you'll get a different relocation type. So there are a few solutions:

Don't export the symbol. This can be done by marking it hidden. The linker will then know no other library can replace it, and it doesn't need to be PIC.
Rewrite the code to be PIC.
Tell the linker it doesn't need to support replacing the symbol, by building the shared library using -Bsymbolic.

Note that OpenSSL builds using -Bsymbolic by default, which is why it doesn't show up for most people.

The problem is now independently reported in #22414

Hello
I tried the fix here, it works, I can compile openssl for my Android application.
Thanks.

Is the fix to a present problem still blocked by concerns about files which might be added in the future?
Isn't it possible to verify whether "the xlate script removes .extern"?

Still waiting.

@talregev Please don't put oil on the fire.

Yes, still looking at it. The issue recently fixed by https://github.com/openssl/openssl/pull/22880 meant that some of the changes we made to the handling of OPENSSL_armcap_P could be rolled back, so I am looking at doing that as an option

Another six weeks. Why contribute at all.

@tom-cosgrove-arm any progress on this?

Facing this issue. Seems there is no possible workaround at the moment. Is there anything that can be done to merge this faster? Is sponsoring possible?
https://github.com/android/ndk/issues/1992

Spring 2024.

@tom-cosgrove-arm ping?

Yes, sorry, won't be this week, but still on my radar

May 2024.

June :)

@BillyONeal I don't think the final fix will look like this, but not sure exactly what it should be at the moment. This is now top of my OpenSSL list, though
(The reason I don't think the final fix will look like this is at a minimum the duplication, and I think the fix will need something in arm-xlate.pl too)

Would you be angry at me / vcpkg for merging this as a patch in vcpkg ( https://github.com/microsoft/vcpkg/pull/33955 )? I understand that you might not want this exact change yourselves due to duplicated edits but I've interpreted your statement above as an "explicit no from upstream".
Thanks!

Would you be angry at me / vcpkg for merging this as a patch in vcpkg ( microsoft/vcpkg#33955 )? I understand that you might not want this exact change yourselves due to duplicated edits but I've interpreted your statement above as an "explicit no from upstream".

Given how long it's taking for me to get back to this, no, of course I wouldn't be angry! This is still on my list, and I'd like to get a proper fix in, but do feel free to put a workaround patch in vcpkg

One year.

Here is a tutorial for Rust on how to patch and manually compile the latest versions of OpenSSL for Android
https://ospfranco.com/compiling-openssl-in-rust-for-android/
But yeah, still waiting for a fix here

This should fix #25601 and #22414 and close #26001

24 hours has passed since 'approval: done' was set, but this PR has failing CI tests. Once the tests pass it will get moved to 'approval: ready to merge' automatically,alternatively please review and set the label manually.

I'm also okay with this being backfitted to active branches.

CI is now passing

Merged to the master, 3.4, 3.3, 3.2 and 3.1 branches. Thank you for your contribution.

@t8m could it be added to 3.0.x? we have some weird armv7a issues since switching to 3.0.15


Add One shot systems

Would be nice for setup to have some systems run initialize then remove self

Hi @delaneyj!
thanks for coming along!
You can easily do this yourself, as the systems are accessible as the resource Systems.
About like this (not tested):
func (s *MySys) Initialize(world *ecs.World) {
    // Do your stuff...

    sysRes := generic.NewResource[model.Systems](world)
    systems := sysRes.Get()
    systems.RemoveSystem(s)
}

Right, I just thought it might be clearer to have a OneShot intereface that only has Init and a System interface extends that interface to be more explicit and to auto handle to removal.

Well, ok, this is worth a consideration.


better performance for huge list

instead of emptying and re-adding in array over and over, just do it once in link function. It has performance benefits for larger list.

Please do not modify original indentation, and resolve the conflict.

I will do that in 3 months. If anyone else interested just use my repo for performance.

Thanks


Update files array defaults

The default value for the files array was created a long time ago, and there are a few enhancements I think we should make.
Here's my proposal for the updated files array.
{
    "files": [
        //current files array
        "source/**/*.*",
        "components/**/*.*",
        "images/**/*.*:",
        "manifest",

        //new entries

        "locale/**/*",
        "fonts/**/*",

        //exclude root-level node_modules folder
        "!node_modules",
        //exclude markdown files, mac and windows fs database files
        "!**/*.{md,DS_Store,db}",
    ]
}

Is there anything else I'm missing?

Maybe fonts/, libs/?

Maybe fonts/, libs/?

+1 for fonts/ as this shows up in Rokus documentation and I think some samples.
As for libs/ I think a lot of SDK's tend to tell you to add it to the source folder some where or the files tend to be under components. So not sure if that one needs to be a default.

Perhaps we should exclude files that get rejected by static analysis (such as *.md files), and also exclude filesystem database files like thumbs.db and .DS_Store.

        //exclude root-level node_modules folder
        "!node_modules",

Just want to make sure this isn't a little aggressive for anyone manually including npm dependencies that aren't using ropm.
If a project adds something like "node_modules/my-roku-module/dist/**/*.*" would that still be included? I'm assuming it would if but I'm not keen on the implementation of the file resolution.

The defaults only applies when people do not define a files array. So if someone where to define a files array and add your example they would still work like it used to.

Great question!
In this situation, you would have to define your own files array anyway. In vscode, this would auto-populate the full default list, at which point you could customize it. The LAST entry in the list will win for any given file. So as long as "node_modules/my-roku-module/dist/**/*.*" showed up after "!**/node_modules/, then they'd be good to go.
If we don't exclude node_modules in the default, then any team that has node_modules next to their roku code could accidentally include the entirety of node_modules in the .zip that we build and upload to the device (this is a fairly common issue we see when people start complaining "my app took 3 minutes to upload")

Done in #162


Feature Request: Round coordinates to nearest digit button

When copying waymark sets from PF I often end up using this plugin and manually rounding each coordinate in the preset so that every waymark is equidistant. A button that does this would be really helpful and I imagine not that difficult to implement.

Not difficult to implement, but it's added UI bloat for something that doesn't need to be done that often, and I'd like to avoid that, sorry.
Additionally, rounding doesn't necessarily make waymarks equidistant; radially symmetric positions (such as clock spots) will never all be at integer coordinates by definition (unless you only have 2 or 4 markers that are only on cardinals), so this feels very niche.


Error when parsing function value without a comma

src = '''
	{
		a: my_func
	}
'''

print(chompjs.parse_js_object(src))

Results in: json.decoder.JSONDecodeError: Invalid control character
Whereas each of the following works and results in: {'a': 'my_func'}
src = '''
	{
		a: my_func,
	}
'''

print(chompjs.parse_js_object(src))

Note the trailing comma in the example above.
src = '''
	{
		a: my_func
	}
'''

print(chompjs.parse_js_object(src.replace('\t', '').replace('\n', '')))

src = '''
	{
		a: my_func}
'''

print(chompjs.parse_js_object(src))

There are various combinations to try. I think from my brief testing, a tab or a newline after a function value without a comma results in an error. In other words, a function value either has to be immediately followed by a comma, space, or a closing bracket.

Thanks for reporting!
Care to stress-test the fix in #59 before I merge and release it?

I'm unable to thoroughly test it now but it looks good at a glance.
I appreciate the super quick response!


<EMAIL_ADDRESS>decompress error

Full log:
This is not directly supported, but i'll try to unpack it as version 5602
; Version detected: 6300
Critical error: The setup files are corrupted. Please obtain a new copy of the program.

It seems that rnote installer has changed the packaging format, which caused this decompress error.

Duplicates #13696.


[Feature request] allow set type when use let { a } = argv

Search Terms

Suggestion

allow set type when use

let { a } = argv => let { a as string } = argv
({ a } = argv); => ({ a as string } = argv);

Use Cases

Examples

Checklist
My suggestion meets these guidelines:

[x] This wouldn't be a breaking change in existing TypeScript/JavaScript code
[x] This wouldn't change the runtime behavior of existing JavaScript code
[ ] This could be implemented without emitting different JS based on the types of the expressions
[ ] This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, etc.)
[ ] This feature would agree with the rest of TypeScript's Design Goals.

You can already do this with let { a } = argv as { a: string }

@Mcfloy i don't wanna do that waym when i use let { a, b, c } = argv and only a type is incorrect

Duplicate of #7576.
Duplicate of #29526.


Bump to v1.1.0

No branch, since we only seem to do RHEL branches on this repo.

/lgtm

@mheon don't forget to push that tag :)

Oops. Can do.


Updating expiry year ID doc validation

Short description outlining key changes/additions
Updating expiry date year validation on ID Document Details entry screen.
Validation constraints:

Expiry year for ID Document must not be after 2070
Expiry year for ID Document must not be before 1970

JIRA Ticket Number
IDVA5-1599
Type of change

[ ] Bug fix
[x]  New feature
[ ]  Breaking change
[ ]  Infrastructure change

Pull request checklist

[x]  I have added unit tests for new code that I have added
[ ]  I have added/updated functional tests where appropriate
[x]  The code follows our coding standards

An exhaustive list of peer review checks can be read here

CI: No security warnings found


Boys the game goes on

https://antoinevastel.com/bot detection/2019/07/19/detecting-chrome-headless-v3.html
fpCollect is the name of the new variant: https://arh.antoinevastel.com/javascripts/fpCollect.min.js

The latest version of the stealth plugin now passes all tests 😄 But I fully expect this to change in the future again (I forgot if we're the cat or mouse here).


Cannot find module problem with 3rd party lib

Hello guys,
I'm having trouble when trying to add 3rd party modules to the project.
I've downloaded the project and added the following code.
Add module to package.json
package.json
    "qs":"6.3.0",
Added the import and the following test code to component constructor.
app.component.ts
import * as qs from "qs";
Code added to constructor
`console.log('qs', qs);
var obj = qs.parse('a=c');
console.log('obj', obj);

var str = qs.stringify(obj);
console.log('str', str);`

I run npm install then npm start and here is the outcome:

But even with that webpack error the site still works:

What am I doing wrong?  Any thoughts?
Thanks,

Hey! Maybe try to require this library instead of importing it.
If you want to import it, then take a look at:
https://github.com/Microsoft/TypeScript/issues/3019
(I am not contributor, but I'm currently testing this repository, so maybe their answer will be better)

@rmarchiori add it to the vendor dll's list. For fast dev server loading, it loads up dependencies in dlls.
https://github.com/qdouble/angular-webpack2-starter/blob/master/constants.js#L65
https://github.com/qdouble/angular-webpack2-starter/blob/master/webpack.config.ts#L97


feat(comp): Add support for powershell completion

What this PR does / why we need it:
This PR adds powershell auto-completion to Helm, as it is provided by Cobra out-of-the-box.
Special notes for your reviewer:
To test it you have to have powershell installed (it is available on Mac too).  Then you can do:
$ pwsh
PowerShell 7.0.2
Copyright (c) Microsoft Corporation. All rights reserved.

https://aka.ms/powershell
Type 'help' to get help.

   A new PowerShell stable release is available: v7.1.3
   Upgrade now, or check out the release page at:
     https://aka.ms/PowerShell-Release?tag=v7.1.3

PS /Users/marckhouzam/git/helm> bin/helm completion powershell | Out-String | Invoke-Expression
PS /Users/marckhouzam/git/helm> bin/helm s<TAB>
search  (search for a keyword in charts)           status  (display the status of the named release)
show    (show information of a chart)

# Without descriptions
PS /Users/marckhouzam/git/helm> bin/helm completion powershell --no-descriptions | Out-String | Invoke-Expression
PS /Users/marckhouzam/git/helm> bin/helm s<TAB>
search  show    status

Thanks for the quick review @mattfarina (and @cndoit18)


Bump Flink 1.10 version

Upgrade to the new patch release.

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

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

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

Run Java PreCommit

Could we also update the flink version here? https://github.com/apache/beam/blob/29c9733d9a64ac5abaf7386d41bf04bbd2b74b08/.test-infra/jenkins/Flink.groovy#L20

Run Portable_Python PreCommit

Run Java PreCommit

Could we also update the flink version here?
https://github.com/apache/beam/blob/29c9733d9a64ac5abaf7386d41bf04bbd2b74b08/.test-infra/jenkins/Flink.groovy#L20

Could we also update the flink version here?
https://github.com/apache/beam/blob/29c9733d9a64ac5abaf7386d41bf04bbd2b74b08/.test-infra/jenkins/Flink.groovy#L20

Done!

Run Java PreCommit


List all available packages and filter by name

Allow filtering package names with a Lua pattern.

Done in a2480027.


Severe multithreading&system() issues, GC issues

I have a bunch of very strange behaviours, which are all triggered out of the following program. You see first the listing and below yet another summary of my findings.
# please ensure idle system (e.g. no jitsi)!
# launch with...
#    CRYSTAL_WORKERS=`nproc --all` crystal run -Dpreview_mt src/crasher.cr -- 0 -> 0% CPU after a minute
#    CRYSTAL_WORKERS=`nproc --all` crystal run -Dpreview_mt src/crasher.cr -- 1 -> CPU seems to stay high, fibers stay active, but performance degrades (e.g. after 10min)
#    CRYSTAL_WORKERS=`nproc --all` crystal run -Dpreview_mt src/crasher.cr -- 2 -> stuck fibers after a minute
#    CRYSTAL_WORKERS=`nproc --all` crystal run -Dpreview_mt src/crasher.cr -- 3 -> comparable with (1)
#    CRYSTAL_WORKERS=`nproc --all` crystal run src/crasher.cr -- 0 -> fine
#    CRYSTAL_WORKERS=`nproc --all` crystal run src/crasher.cr -- 1 -> comparable with (1) above
#    CRYSTAL_WORKERS=`nproc --all` crystal run src/crasher.cr -- 2 -> fine
#    CRYSTAL_WORKERS=`nproc --all` crystal run src/crasher.cr -- 3 -> comparable with (1) above

require "crsfml" # see https://github.com/oprypin/crystal-imgui-sfml#installation

FILE = "/path/to/a/big.jpg" # 13MB, 6000x4000
CORES = (ENV["CRYSTAL_WORKERS"]?||"4").to_i
ARG = (ARGV.size>0 ? ARGV[0] : 0).to_i
SIZE = 150
UPDATE = 10 # seconds

class Crasher
    @times : Array(Time::Span)
    @tempfiles = {} of String=>Bool
    def initialize
        @mutex = Mutex.new(Mutex::Protection::Reentrant)
        @time = Time.monotonic
        @times = Array.new(CORES, Time.monotonic)
        @work_done = 0
        GC.disable if (ARG & 1) > 0
        puts("Using #{CORES} cores")
        CORES.times do |i|
            spawn(name: i.to_s) {worker}
        end
        sleep
    end
    def worker
        while true
            thumb = File.tempfile("", ".jpg")
            @mutex.synchronize do
                raise "foo" if @tempfiles[thumb.path]?
                @tempfiles[thumb.path] = true
            end
            system("convert -define jpeg:size=#{SIZE}x#{SIZE} \"#{FILE}\" -thumbnail '#{SIZE}x#{SIZE}>' -background gray10 -auto-orient -gravity center -extent #{SIZE}x#{SIZE} #{thumb.path}")
            thumb.close
            raw = File.read(thumb.path).to_slice
            thumb.delete
            @mutex.synchronize do
                @tempfiles.delete(thumb.path)
            end
            SF::Sprite.new(SF::Texture.from_memory(raw)) if (ARG & 2) > 0
            monitor
        end
    end
    def monitor
        @mutex.synchronize do
            fiber = (Fiber.current.name || "").to_i
            t = Time.monotonic
            @work_done += 1
            @times[fiber] = t
            if (t-@time).to_f > UPDATE
                @times.each do |tfib|
                    print((t-tfib).to_f > UPDATE ? "x" : ".")
                end
                puts(" %.1ffps" % (@work_done/CORES/UPDATE))
                @work_done = 0
                if (ARG & 1) > 0
                    puts("GC.collect")
                    GC.collect
                end
                @time = t
            end
        end
    end
end

Crasher.new

And now the summary of the findings:

symptom ID
symptom description

a
0% CPU

b
performance (fps) degrades

c
fibers get stuck ("x" showing up)

d
Exception "Failed to load image from memory, no data provided"

e
Exception "foo"

Common encountered symptoms:

compile with -Dpreview_mt
run with arg
symptoms

yes
0
a

yes
1
b

yes
2
c,d

yes
3
b

no
0
fine

no
1
b

no
2
fine

no
3
b

Be aware that they are not reproducible under all circumstances. I figured out that e.g. when running Jitsi to demonstrate them... they just didn't show up. So please ensure an idle system and let it run for ~10 minutes.
BTW: "foo" got triggered as well (but I had the @tempfiles.delete(thumb.path) removed for this).
I run this on crystal 0.36.1 on ubuntu 18.04 with Ryzen 7 2700 eight-core processor × 16, but I got it also confirmed on a machine with 8 threads.

I try to give some more background info on this, but it will probably not help much...
I started making sort of an image tagging app that launches parallel thumbnailers via system. I figured out that I actually doesn't need the -Dpreview_mt for this (which was a good surprise to me), since the OS seems to take over parallelization. Nevertheless I put it in in order to find any synchronization issues in my own code.
Bad surprise was, that randomly the program hung up; so I started inserting lots of debug code and ran automated endless tests until it broke. I found that it seems to hang at all kinds of places, not at specific ones. So I thought, let's disable the GC.
Good surprise: didn't break anymore, bad surprise: performance degraded over time considerable, even when manually triggering GC.collect. No idea why. This is independent of all the other switches, so I would deduce GC is having a multithreading issue on the one hand side and trigger a performance issue independent of the configuration on the other side when being disabled.
Upon more careful examination it also seemed to make a difference if I called the one SFML function or not (bad surprise since to my understanding SFML is reentrant). And, even weirder, it seemed to make fibers stuck (which didn't happen so far) or throwing exceptions.
All of this is pretty much reproducible if I start with an idle system, so I assume timing is rather crucial (as always with such kind of bugs).
I understand if I don't use system calls the stability issues don't show up (I tried that in another program). Likewise they don't if I do away with the -Dpreview_mt. So I would deduce system has a multithreading issue.

See https://thorstenball.com/blog/2014/10/13/why-threads-cant-fork/
If you are on Linux and have time to play with this, you might try creating an interface to LibC vfork followed immediately by exec. This has different semantics in that it doesn't really create the child process until the exec.

I see, thanks for the link and proposals! I cannot tell yet if/when I manage to have a deeper look into it...
But this does not cover the GC.disable performance issues I also ran into, which are independent also of true multithreading, does it?

No, the GC impact on performance is a different issue. You didn't say much about your memory configuration and use and how much the performance is degraded. When GC is enabled, there is a thread that scans all of the allocated memory for memory blocks that can no longer be reached. The consequences of this thread are not simply its CPU usage. It also causes flushes and reloads of the L2 caches, the translation lookaside buffer, and the resident set of pages. This is of particular concern for image processing, since it's memory intensive and can have poor locality-of-reference, depending on what sort of  processing you are doing. So, your image processing processes can be contending with each other, and the GC thread, for those resources.
Here are some suggestions to help you understand your memory use, but these are less informative about the caches and TLB. https://phoenixnap.com/kb/linux-commands-check-memory-usagehttps://phoenixnap.com/kb/linux-commands-check-memory-usagehttps://phoenixnap.com/kb/linux-commands-check-memory-usagehttps://phoenixnap.com/kb/linux-commands-check-memory-usage
It is possible to tune the GC thread, essentially to slow it down, but this may result in an increase in memory use. Other things to try are to add memory, and to try a CPU with larger L1 and L2 caches.

Since you asked for the memory/performance details...
I have 16GB of memory and typically not a memory issue; on the caching I never investigated so far. The performance degradation with GC.disable and manually triggered GC.collect every 10s (program above) I get the following (postprocessed) output:
minutes		fps	fps rel.
1,0		4,0	100%
2,0		3,8	95%
3,0		3,6	90%
4,0		3,4	85%
5,0		3,3	83%
6,0		3,2	80%
7,0		3,1	78%
8,0		3,0	75%
9,0		2,9	73%
10,0		2,9	73%
11,0		2,8	70%
12,0		2,7	68%
13,0		2,6	65%
14,0		2,4	60%
15,0		2,3	58%
16,0		2,2	55%
17,0		2,1	53%
18,0		2,1	53%
19,0		2,0	50%
20,0		1,9	48%
21,0		1,9	48%
22,0		1,8	45%
23,0		1,8	45%
24,0		1,7	43%
25,0		1,7	43%
26,0		1,7	43%
27,0		1,6	40%
28,0		1,6	40%
29,0		1,6	40%
30,0		1,5	38%
31,0		1,5	38%
32,0		1,5	38%
33,0		1,5	38%
34,0		1,4	35%
35,0		1,4	35%
36,0		1,4	35%

So only 35% performance left, threads are all still alive, overall CPU usage (xosview) is also down to the ~35% after 34 minutes, CPU fan is blowing.
I also made a second run and sporadically had a look at the output of atop (be aware that 1600% here would mean 100% usage of all cores/threads and that it's not perfectly aligned with the numbers above):
@4.0fps: sys      68% | user   1528%
@2.8fps: sys     315% | user   1257%
@2.2fps: sys     331% | user    843%
@1.6fps: sys     315% | user    614%
@1.5fps: sys     311% | user    500%
@1.3fps: sys     292% | user    471%

So it's clearly visible that system load increases rapidly, user load decreases steadily.

@oprypin Please look at this. There seems to be a memory leak, perhaps in CrSFML.
Thanks

Bruce

@wolfgang371 I would guess that swap usage is going up and you could see that with top. I'd guess a memory leak. I'm unfamiliar with CrSFML, so perhaps @oprypin can help.

I had already looked at this in https://github.com/oprypin/crsfml/issues/37, and concluded that it's not CrSFML, you could easily replace that with anything that does a multi-megabyte LibC.malloc (and free in a finalizer)

@prypin Thank you.
@wolfgang371 The next thing to check would be to run the loop without the system(), and see if swap size increases. And then try it without the file manipulation.

I have the feeling this is not a memory leak issue, since the swap size does not really increase; the system load increase, however, makes me wonder.
If I replace the content in the endless loop above with just these two lines...
            system("bash -c \"sleep 0.01\"")
            monitor

... (so effectively not really doing lot of memory allocation to my understanding) and let it run for just a minute I get the following results:
CRYSTAL_WORKERS=16 crystal run src/crasher.cr -- 0 - the good case:
Using 16 cores
................ 66.2fps
................ 66.2fps
................ 66.0fps
................ 66.2fps
................ 65.8fps
................ 66.0fps

CRYSTAL_WORKERS=16 crystal run src/crasher.cr -- 1 - the bad GC case
Using 16 cores
................ 54.7fps
GC.collect
................ 30.6fps
GC.collect
................ 21.8fps
GC.collect
................ 17.8fps
GC.collect
................ 16.0fps
GC.collect
................ 14.6fps
GC.collect

CRYSTAL_WORKERS=16 crystal run -Dpreview_mt src/crasher.cr -- 0 - the bad multithreading case
Using 16 cores

(so it hangs immediately)
CRYSTAL_WORKERS=16 crystal run -Dpreview_mt src/crasher.cr -- 1 - the bad GC case, with multithreading (but without further impact)
Using 16 cores
................ 44.2fps
GC.collect
................ 25.2fps
GC.collect
................ 19.0fps
GC.collect
................ 16.0fps
GC.collect
................ 14.3fps
GC.collect
................ 12.8fps
GC.collect

Related to your answer (@BrucePerens) https://github.com/crystal-lang/crystal/issues/10403#issuecomment-783701957 above:
this would make sense to me in case the GC would use mutexes. But according to point number two originally posted by @bcardiff in https://github.com/crystal-lang/crystal/issues/10372#issuecomment-777021096:
"bdw-gc has a stop-the-world policy. All threads will be paused. You can tweak some settings or even disable the GC temporarily or completely. In some cases that is feasible."
... I would expect the system should not hang so easily. But apparantly with GC.disable it doesn't hang anymore (but we have other issues)...

The next thing to try might be to get rid of the iterative buffer allocation. Use an IO::Memory.new to create a resizeable memory buffer, and re-use it through each iteration of the loop.

The bdw-gc doesn't stop forks. Without reading the code, I'd imagine that the GC runs when there are no runnable threads (everything's waiting for IO) and nothing can be scheduled until it returns. Forks are running independently of the thread scheduler.

Honestly the way this code is written, it doesn't even try to be nice on the GC, even though it's really easy to do so. I thought maybe that was the point of the post - that Crystal can't handle heavy GC use.
If the point is to get nice working code, sure: just make sure to create the Texture object once and keep it. Only call this in a loop: https://oprypin.github.io/crsfml/api/SF/Texture.html#SF::Texture#load_from_file(filename,area)

That's a better solution, Oleg. Thanks!

Yes, I know that. As I wrote above this initial code snippet is a stripped-down version which itself has not much sense. In my image tagger application it renders 16 thumbnails in parallel and if I continue scrolling, it does that for some time. And this eventually then leads to the problems I stated and can be reproduced in mentioned initial (stupid) snippet.
What you probably missed is my updated comment from today that still shows most of the errors with almost nothing in the endless worker method (and especially also no SFML stuff).

OK. If you do a sleep in crystal instead of using system() the problems go away, right?
This gets us back to fork-based issues. And I have already suggested how to investigate that. I'm sorry that it's systems programming.

Sure, sleep(0.01) in crystal makes the bug (let's call it A) go away (I tried to put the title as precise as I could right from the start). I had a very short look into vfork and this seems not so straightforward for me since there isn't an interface existing yet. So let's leave this open.
However bug B (GC performance degradation) seems neither to be related to multithreading nor to the amount of work the GC has to do (see post https://github.com/crystal-lang/crystal/issues/10403#issuecomment-785187522 above).
So I think your original reasoning with caching etc. (https://github.com/crystal-lang/crystal/issues/10403#issuecomment-783750607 above) does not apply, does it?

OK, here is a function that uses vfork and execv from Crystal.
I would have had to write this eventually anyway, and I learned a bit more about foreign function interfaces.
lib LibC
  fun vfork : LibC::Int
  fun execv(LibC::Char*, LibC::Char**) : Void
end

def execute(pathname : String, arguments : Array(String))
  pathname.check_no_null_byte("pathname")
  args = Array(LibC::Char*).new(arguments.size + 1)
  arguments.each do |a|
    a.check_no_null_byte("argument")
    args << a.to_unsafe
  end
  args << Pointer(LibC::Char).new(0)
  if (pid = LibC.vfork) == 0
    LibC.execv(pathname.to_unsafe, args.to_unsafe)
    LibC._exit(-1) # If exec() fails.
  end
  LibC.waitpid(pid, out exit_code, 0)
end

# Argv 0 is the name of the program, the rest are arguments.
# You can just change the last argument here to your command.
pid = execute("/bin/sh", ["sh", "-c", "echo hello"])

I'm certainly willing to believe the GC is sub-optimal.
There is also an issue when using very large buffers. They are all alligned to page boundaries. This will cause cache bucket contention, because the cache buckets are hashed by the low bits of the address. So, if you have a 2-way set-associative cache and 3 operands, there will be a cache flush for every pixel.

That was quick - thank you!
So I further investigated on our bug (A).
Now I have the following code fragment instead of the original worker method above, and I use either the system or the execute/vfork:
    def worker
        while true
            # system("bash -c \"sleep 0.01\"")
            execute("/bin/sh", ["sh", "-c", "sleep 0.01"])
            monitor
        end
    end

The outcome now is:

compile with -Dpreview_mt
run with arg
symptoms with system
symptoms with execute/vfork

yes
0
a
a

yes
1
b
a

no
0
fine
f

no
1
b
f

with the symptoms

symptom ID
symptom description

a
0% CPU

b
performance (fps) degrades

c
fibers get stuck ("x" showing up)

f
all threads immediately dead but the first (".xxxxx")

So overall, we made a change for the worse since it killed the only prior option that worked plus we traded the GC performance issues for the stuck process.
Does that give you a hint on either bug (A) or (B)?

I wonder if something else in Crystal is doing a wait(), and our waitpid is hanging forever because it doesn't get to reap the dead process. I'll do some experiments, maybe this evening.

@wolfgang371 when it goes to 0 CPU, all fibers are waiting for the same process ID. Which might mean my code is bad, I'm investigating.

OK, I can't use waitpid in my own code, Crystal is catching SIGCHLD and performing its own promiscuous wait. I am going to try another approach: mutex around fork and exec, release the mutex, and then Process.wait

@wolfgang371 Here is a version of your whole test program, with the vfork-exec code changed to work with Process#wait in Crystal instead of waitpid. Please go on testing with this. Some cursory testing I ran on the first two commands listed below doesn't seem to show problems. TIL Crystal catches SIGCHLD and does a promiscuous wait, it's not possible for any other code to use wait or waitpid, you must use Process#wait.
# please ensure idle system (e.g. no jitsi)!
# launch with...
#    CRYSTAL_WORKERS=`nproc --all` crystal run -Dpreview_mt src/crasher.cr -- 0 -> 0% CPU after a minute
#    CRYSTAL_WORKERS=`nproc --all` crystal run -Dpreview_mt src/crasher.cr -- 1 -> CPU seems to stay high, fibers stay active, but performance degrades (e.g. after 10min)
#    CRYSTAL_WORKERS=`nproc --all` crystal run -Dpreview_mt src/crasher.cr -- 2 -> stuck fibers after a minute
#    CRYSTAL_WORKERS=`nproc --all` crystal run -Dpreview_mt src/crasher.cr -- 3 -> comparable with (1)
#    CRYSTAL_WORKERS=`nproc --all` crystal run src/crasher.cr -- 0 -> fine
#    CRYSTAL_WORKERS=`nproc --all` crystal run src/crasher.cr -- 1 -> comparable with (1) above
#    CRYSTAL_WORKERS=`nproc --all` crystal run src/crasher.cr -- 2 -> fine
#    CRYSTAL_WORKERS=`nproc --all` crystal run src/crasher.cr -- 3 -> comparable with (1) above

require "crsfml" # see https://github.com/oprypin/crystal-imgui-sfml#installation

FILE = "/path/to/a/big.jpg" # 13MB, 6000x4000
CORES = (ENV["CRYSTAL_WORKERS"]?||"4").to_i
ARG = (ARGV.size>0 ? ARGV[0] : 0).to_i
SIZE = 150
UPDATE = 10 # seconds

class Crasher
    @times : Array(Time::Span)
    @tempfiles = {} of String=>Bool
    def initialize
        @mutex = Mutex.new(Mutex::Protection::Reentrant)
        @time = Time.monotonic
        @times = Array.new(CORES, Time.monotonic)
        @work_done = 0
        GC.disable if (ARG & 1) > 0
        puts("Using #{CORES} cores")
        CORES.times do |i|
            spawn(name: i.to_s) {worker}
        end
        sleep
    end

    def worker
        while true
            # system("bash -c \"sleep 0.01\"")
            process = Process.vfork_exec("/bin/sh", ["sh", "-c", "sleep 0.01"])
            status = process.wait
            monitor
        end
    end

    def monitor
        @mutex.synchronize do
            fiber = (Fiber.current.name || "").to_i
            t = Time.monotonic
            @work_done += 1
            @times[fiber] = t
            if (t-@time).to_f > UPDATE
                @times.each do |tfib|
                    print((t-tfib).to_f > UPDATE ? "x" : ".")
                end
                puts(" %.1ffps" % (@work_done/CORES/UPDATE))
                @work_done = 0
                if (ARG & 1) > 0
                    puts("GC.collect")
                    GC.collect
                end
                @time = t
            end
        end
    end
end

lib LibC
  fun vfork : LibC::Int
  fun execv(LibC::Char*, LibC::Char**) : Void
end

class Process
  def self.vfork_exec(pathname : String, arguments : Array(String))
    pathname.check_no_null_byte("pathname")
    u_pathname = (pathname + "\0").to_unsafe

    args = Array(LibC::Char*).new(arguments.size + 1)
    arguments.each do |a|
      a.check_no_null_byte("argument")
      args << (a + "\0").to_unsafe
    end
    args << Pointer(LibC::Char).new(0)
    u_args = args.to_unsafe

    # Code in the vfork is careful not to write any Crystal data.
    if (pid = LibC.vfork) == 0
      LibC.execv(u_pathname, u_args)
      LibC._exit(255) # If exec() fails.
    else
      new pid
    end
  end
end

Crasher.new

@BrucePerens thanks a lot for your update.
I was quite enthusiastic at the beginning since all cases seemed to perform quite well - but you already feel there's a but coming up...
I did test a couple of things and to me it now looks like the following (I reintroduced some optional file reads, this time w/o SFML).
I don't see any performance degradation anymore, but discovered yet another GC issue here - and I'm sorry, we still have some types of freezes...
# please ensure idle system
# launch with...
#    CRYSTAL_WORKERS=128 crystal run -Dpreview_mt src/crasher2.cr -- 0 -> freezes typically in <5min
#       normal operation in atop:   sys    1070% | user    300%
#       if frozen in atop:          sys       4% | user    106%
#                      or:          sys       2% | user    991%
#    CRYSTAL_WORKERS=128 crystal run -Dpreview_mt src/crasher2.cr -- 1 -> fine (now)
#    CRYSTAL_WORKERS=128 crystal run -Dpreview_mt src/crasher2.cr -- 2 -> freezes immediately
#    CRYSTAL_WORKERS=128 crystal run -Dpreview_mt src/crasher2.cr -- 3 -> GC issue; grows w/o bounds; GC.collect does not help (also if we do no vfork_exec/system)
#    CRYSTAL_WORKERS=128 crystal run src/crasher2.cr -- 0 -> fine
#    CRYSTAL_WORKERS=128 crystal run src/crasher2.cr -- 1 -> fine
#    CRYSTAL_WORKERS=128 crystal run src/crasher2.cr -- 2 -> fine
#    CRYSTAL_WORKERS=128 crystal run src/crasher2.cr -- 3 -> GC issue; grows w/o bounds; GC.collect does not help (also if we do no vfork_exec/system)

CORES = (ENV["CRYSTAL_WORKERS"]?||"4").to_i
ARG = (ARGV.size>0 ? ARGV[0] : 0).to_i
UPDATE = 10 # seconds

lib LibC
  fun vfork : LibC::Int
  fun execv(LibC::Char*, LibC::Char**) : Void
  fun usleep(LibC::UInt) : Void
end

class Process
  def self.vfork_exec(pathname : String, arguments : Array(String))
    pathname.check_no_null_byte("pathname")
    u_pathname = (pathname + "\0").to_unsafe

    args = Array(LibC::Char*).new(arguments.size + 1)
    arguments.each do |a|
      a.check_no_null_byte("argument")
      args << (a + "\0").to_unsafe
    end
    args << Pointer(LibC::Char).new(0)
    u_args = args.to_unsafe

    # Code in the vfork is careful not to write any Crystal data.
    if (pid = LibC.vfork) == 0
      # LibC.usleep(10000) # an attempt trying to speed up hangs; didn't succeed, though
      LibC.execv(u_pathname, u_args)
      LibC._exit(255) # If exec() fails.
    else
      new pid
    end
  end
end

class Crasher
    @times : Array(Time::Span)
    def initialize
        @mutex = Mutex.new(Mutex::Protection::Reentrant)
        @time = Time.monotonic
        @times = Array.new(CORES, Time.monotonic)
        @work_done = 0
        GC.disable if (ARG & 1) > 0
        puts("Using #{CORES} cores")
        CORES.times do |i|
            spawn(name: i.to_s) {worker}
        end
        sleep
    end

    def worker
        while true
            # system("bash -c \"sleep 0.01\"")
            process = Process.vfork_exec("/bin/sh", ["sh", "-c", "sleep 0.01"])
            status = process.wait
            if (ARG & 2) > 0
                raw = File.read("/home/wolfgang/tmp/x.ppm").to_slice # some 600kB, 612x344 image
            end
            monitor
        end
    end
    def monitor
        @mutex.synchronize do
            fiber = (Fiber.current.name || "").to_i
            t = Time.monotonic
            @work_done += 1
            @times[fiber] = t
            if (t-@time).to_f > UPDATE
                @times.each do |tfib|
                    print((t-tfib).to_f > UPDATE ? "x" : ".")
                end
                puts(" %.1ffps" % (@work_done/CORES/UPDATE))
                @work_done = 0
                if (ARG & 1) > 0
                    GC.collect # has no effect (if ARG==3)!
                    puts("GC.collect")
                end
                @time = t
            end
        end
    end
end

Crasher.new

so taking one step back, I think that...

you managed that we got rid of both performance degradation issues
but we still have some sort of race condition between vfork (and/or the .wait, didn't investigate on that just occurs to me) and GC in multithreading mode
and we have a general memory leak with manual GC triggering (or I got it's usage wrong)

Try this one. It does GC.collect immediately before vfork, and does the vfork in @mutex.synchronize so that only one fiber is doing it at a time. The Process#wait is outside of the mutex, so the spawned processes run in parallel.
IMO this was hitting kernel limits. The modification I made is gentler to the kernel.
# please ensure idle system
# launch with...
#    CRYSTAL_WORKERS=128 crystal run -Dpreview_mt src/crasher2.cr -- 0 -> freezes typically in <5min
#       normal operation in atop:   sys    1070% | user    300%
#       if frozen in atop:          sys       4% | user    106%
#                      or:          sys       2% | user    991%
#    CRYSTAL_WORKERS=128 crystal run -Dpreview_mt src/crasher2.cr -- 1 -> fine (now)
#    CRYSTAL_WORKERS=128 crystal run -Dpreview_mt src/crasher2.cr -- 2 -> freezes immediately
#    CRYSTAL_WORKERS=128 crystal run -Dpreview_mt src/crasher2.cr -- 3 -> GC issue; grows w/o bounds; GC.collect does not help (also if we do no vfork_exec/system)
#    CRYSTAL_WORKERS=128 crystal run src/crasher2.cr -- 0 -> fine
#    CRYSTAL_WORKERS=128 crystal run src/crasher2.cr -- 1 -> fine
#    CRYSTAL_WORKERS=128 crystal run src/crasher2.cr -- 2 -> fine
#    CRYSTAL_WORKERS=128 crystal run src/crasher2.cr -- 3 -> GC issue; grows w/o bounds; GC.collect does not help (also if we do no vfork_exec/system)

CORES = (ENV["CRYSTAL_WORKERS"]?||"4").to_i
ARG = (ARGV.size>0 ? ARGV[0] : 0).to_i
UPDATE = 10 # seconds

lib LibC
  fun vfork : LibC::Int
  fun execv(LibC::Char*, LibC::Char**) : Void
  fun usleep(LibC::UInt) : Void
end

class Process
  def self.vfork_exec(pathname : String, arguments : Array(String))
    pathname.check_no_null_byte("pathname")
    u_pathname = (pathname + "\0").to_unsafe

    args = Array(LibC::Char*).new(arguments.size + 1)
    arguments.each do |a|
      a.check_no_null_byte("argument")
      args << (a + "\0").to_unsafe
    end
    args << Pointer(LibC::Char).new(0)
    u_args = args.to_unsafe

    # Code in the vfork is careful not to write any Crystal data.
    if (pid = LibC.vfork) == 0
      # LibC.usleep(10000) # an attempt trying to speed up hangs; didn't succeed, though
      LibC.execv(u_pathname, u_args)
      LibC._exit(255) # If exec() fails.
    else
      new pid
    end
  end
end

class Crasher
    @times : Array(Time::Span)
    def initialize
        @mutex = Mutex.new(Mutex::Protection::Reentrant)
        @time = Time.monotonic
        @times = Array.new(CORES, Time.monotonic)
        @work_done = 0
        GC.disable if (ARG & 1) > 0
        puts("Using #{CORES} cores")
        CORES.times do |i|
            spawn(name: i.to_s) {worker}
        end
        sleep
    end

    def worker
        while true
            # system("bash -c \"sleep 0.01\"")
            process = nil
            @mutex.synchronize do
              GC.collect
              process = Process.vfork_exec("/bin/sh", ["sh", "-c", "sleep 0.01"])
            end
            status = process.not_nil!.wait
            if (ARG & 2) > 0
                raw = File.read("x.ppm").to_slice # some 600kB, 612x344 image
            end
            monitor
        end
    end
    def monitor
        @mutex.synchronize do
            fiber = (Fiber.current.name || "").to_i
            t = Time.monotonic
            @work_done += 1
            @times[fiber] = t
            if (t-@time).to_f > UPDATE
                @times.each do |tfib|
                    print((t-tfib).to_f > UPDATE ? "x" : ".")
                end
                puts(" %.1ffps" % (@work_done/CORES/UPDATE))
                @work_done = 0
                if (ARG & 1) > 0
                    GC.collect # has no effect (if ARG==3)!
                    puts("GC.collect")
                end
                @time = t
            end
        end
    end
end

Crasher.new

Now I see the following changes:

performance is way lower (due to GC.collect), but not in case GC.disable (i.e. arguments 1 or 3)

hence I have to correct my prior statement: GC.enable;GC.collect;GC.disable does help, but has an asymptotic (much) higher memory consumption (of course depending on call frequency; e.g. with UPDATE = 2)

multithreading with arg. 0 still hangs, multithreading with arg. 2 as well (but needs to run a while)

I think I've validated that the vfork_exec code is better behaved than fork, and my next step should be to make a PR for posix_spawn in Process instead of fork and exec. That might even work better than vfork.
I will do a run with argument 0, but what we are seeing might just be memory fragmentation inherent in the Boehm allocator.

The GC.disable induced performance degradation is gone, that's pretty good. And I also see that the frequency of the hangs is now lower. But I'm not really sure if we're fully on the right track - it somehow feels like we're hiding this problem more than solving it.
And as for the GC "memory leak" (you probably meant on argument 3, because for the 600kB we need 2 to be set and 1 for the sporadic GC collection): I was assuming whenever I call GC.collect that...
a) this is been done unconditionally and
b) done fully.
Both does not seem to be the case.

is there a way to disable multithreading preemption in self.vfork_exec above? I would like to test this.

thinking about it, that would not be enough yet for testing.
I would also need a method to wait until the GC finishes its current activities... then stop multithreading and do the original self.vfork_exec from above.

The mutex is guarding the garbage collection and the vfork, but the spawned process runs outside of the mutex. I think the next step for this program might be to make a separate process (not a separate thread) that does not allocate big memory buffers and does the vfork/exec in response to a command from a pipe. The problems you are seeing right now are due to vfork/fork having to map a large process memory space which it then throws away.

Thanks @BrucePerens , I'm following your lead and I'll close it. Feel free to add issues with some distilled thoughts coming from this experience.


--keep-models does not work for machine tests

When I run itests with
tox -e integration-machine -- --keep-models

No models are kept.

My bad, it does work.


[Maintenance proposal] Tailwind should follow SemVer

Hello.
In node.js and especially NPM the packages must follow Semantic Versioning. However, Tailwind is released in a quite unique manner.
SemVer specs say:

If version starts with 0 - the software is not yet production ready. Any breaking changes can happen at any time. The software should be considered experimental.
If you release a new feature - change the second digit.

Recently the 0.6.6 was released with a new flag - shadowLookup. Subsequently, it should have been released as 0.7.0.
Also, AFAIK, Tailwind is production ready robust software. The version should be at least 1.0.0.
Proposal.

Re-release Tailwind 0.6.6 as 1.0.0.
Start doing SemVer compatible releases from now on.

Hey!

If you release a new feature - change the second digit.

That only applies after 1.0, before 1.0 anything can happen in both minor and even patch releases.
Up until now we include new features in patch releases, and breaking changes in minor releases, so users can safely pin a requirement like ^0.6.6 and know that they won't receive any breaking changes until they opt-in to ^0.7.0.
I want to tag 1.0 soon but there's at least one breaking change I already have planned and I'd like to get it out of the way before 1.0 so I don't have to tag 2.0 a few weeks later. We'll get to 1.0 soon enough though 👍🏻

I assume you don't like latest Chrome being v70.x.y too. :)
I understand the reasons. Thank you for taking time explaining.


🐞[Bug]: Add a carousel in the review section

Is there an existing issue for this?

[X] I have searched the existing issues

Describe the bug
The review section is static with only 2 reviews which is making the website look uninteractive.

Expected behavior
Adding more reviews to the review section in the form of a carousel will enhance website responsiveness.
Add ScreenShots
https://github.com/Anishkagupta04/RAPIDOC-HEALTHCARE-WEBSITE-/assets/124669890/3bbf77a1-1ada-49db-8390-a942906f62c6
The carousel will look somewhat like this. But I'll make it according to the theme of this website.
What browsers are you seeing the problem on?
No response
Record

[X] I have read the Contributing Guidelines
[X] I'm a GSSOC'24 contributor
[X] I have starred the repository

@varshith257 please assign this task to me.


Screenity, privacy-friendly screen recorder extension

Is your feature request related to a problem? Please describe.
Users often face challenges when record screen using existing extensions due to limited functionality, lack of user guidance, accessibility issues, and inadequate error handling.
Describe the solution you'd like
Enhance the extension's capabilities by providing comprehensive user instructions, improving accessibility features, implementing robust error handling mechanisms, and integrating a feedback system to gather user suggestions and bug reports.
Describe alternatives you've considered
An alternative approach could involve creating standalone documentation or utilizing external tools for collecting user feedback. However, integrating these features directly into the extension would offer a more seamless user experience.
Additional context
This feature aims to address usability and accessibility concerns, providing users with a more intuitive and effective tool for recording their content seamlessly .
What problem is this feature trying to solve?
This feature seeks to solve the challenges users encounter when trying to record screen or window browser extensions. By enhancing functionality and usability, users can efficiently customize their browsing experience.
How do we know when the feature is complete?
The feature can be considered complete when the extension provides clear user instructions, implements accessibility features, handles errors effectively, and incorporates a feedback mechanism. Additionally, user feedback and testing can help ensure the extension meets user needs and expectations.

Another contributor is working #732


Core | Grid: Row tags

Implement row tags that will provide capability to tag rows, save the tags to the database and work with it

This issue has been mirrored in Jira: https://reddata.atlassian.net/browse/GROK-14897

Sticky meta can be used for it https://datagrok.ai/help/govern/catalog/sticky-meta


Updated Readme

Overview
Task
Co-authored-by: Upasana Natarajan @unatarajan

[ ] Bug
[ ] Feature
[x] Documentation

Description
Added a thorough readme to prep for launch.

Let's rock and roll!


Check quickAction.action is set before trying to display in popover

Details
On a fresh group chat, props.quickAction is [], so it enters this block and then fails to get a translation for
props.quickAction.action, which is not set
cc @Gonals
Fixed Issues
$ https://github.com/Expensify/App/issues/38972
Tests
Tested locally with fix on web, app does not crash after fix is in place

[x] Verify that no errors appear in the JS console

Offline tests

QA Steps

[ ] Verify that no errors appear in the JS console

PR Author Checklist

[x] I linked the correct issue in the ### Fixed Issues section above
[x] I wrote clear testing steps that cover the changes made in this PR

[x] I added steps for local testing in the Tests section
[x] I added steps for the expected offline behavior in the Offline steps section
[x] I added steps for Staging and/or Production testing in the QA steps section
[x] I added steps to cover failure scenarios (i.e. verify an input displays the correct error message if the entered data is not correct)
[x] I turned off my network connection and tested it while offline to ensure it matches the expected behavior (i.e. verify the default avatar icon is displayed if app is offline)
[x] I tested this PR with a High Traffic account against the staging or production API to ensure there are no regressions (e.g. long loading states that impact usability).

[x] I included screenshots or videos for tests on all platforms
[x] I ran the tests on all platforms & verified they passed on:

[x] Android: Native
[x] Android: mWeb Chrome
[x] iOS: Native
[x] iOS: mWeb Safari
[x] MacOS: Chrome / Safari
[x] MacOS: Desktop

[x] I verified there are no console errors (if there's a console error not related to the PR, report it or open an issue for it to be fixed)
[x] I followed proper code patterns (see Reviewing the code)

[x] I verified that any callback methods that were added or modified are named for what the method does and never what callback they handle (i.e. toggleReport and not onIconClick)
[x] I verified that the left part of a conditional rendering a React component is a boolean and NOT a string, e.g. myBool && <MyComponent />.
[x] I verified that comments were added to code that is not self explanatory
[x] I verified that any new or modified comments were clear, correct English, and explained "why" the code was doing something instead of only explaining "what" the code was doing.
[x] I verified any copy / text shown in the product is localized by adding it to src/languages/* files and using the translation method

[x] If any non-english text was added/modified, I verified the translation was requested/reviewed in #expensify-open-source and it was approved by an internal Expensify engineer. Link to Slack message:

[x] I verified all numbers, amounts, dates and phone numbers shown in the product are using the localization methods
[x] I verified any copy / text that was added to the app is grammatically correct in English. It adheres to proper capitalization guidelines (note: only the first word of header/labels should be capitalized), and is either coming verbatim from figma or has been approved by marketing (in order to get marketing approval, ask the Bug Zero team member to add the Waiting for copy label to the issue)
[x] I verified proper file naming conventions were followed for any new files or renamed files. All non-platform specific files are named after what they export and are not named "index.js". All platform-specific files are named for the platform the code supports as outlined in the README.
[x] I verified the JSDocs style guidelines (in STYLE.md) were followed

[x] If a new code pattern is added I verified it was agreed to be used by multiple Expensify engineers
[x] I followed the guidelines as stated in the Review Guidelines
[x] I tested other components that can be impacted by my changes (i.e. if the PR modifies a shared library or component like Avatar, I verified the components using Avatar are working as expected)
[x] I verified all code is DRY (the PR doesn't include any logic written more than once, with the exception of tests)
[x] I verified any variables that can be defined as constants (ie. in CONST.js or at the top of the file that uses the constant) are defined as such
[x] I verified that if a function's arguments changed that all usages have also been updated correctly
[x] If any new file was added I verified that:

[x] The file has a description of what it does and/or why is needed at the top of the file if the code is not self explanatory

[x] If a new CSS style is added I verified that:

[x] A similar style doesn't already exist
[x] The style can't be created with an existing StyleUtils function (i.e. StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))

[x] If the PR modifies code that runs when editing or sending messages, I tested and verified there is no unexpected behavior for all supported markdown - URLs, single line code, code blocks, quotes, headings, bold, strikethrough, and italic.
[x] If the PR modifies a generic component, I tested and verified that those changes do not break usages of that component in the rest of the App (i.e. if a shared library or component like Avatar is modified, I verified that Avatar is working as expected in all cases)
[x] If the PR modifies a component related to any of the existing Storybook stories, I tested and verified all stories for that component are still working as expected.
[x] If the PR modifies a component or page that can be accessed by a direct deeplink, I verified that the code functions as expected when the deeplink is used - from a logged in and logged out account.
[x] If the PR modifies the UI (e.g. new buttons, new UI components, changing the padding/spacing/sizing, moving components, etc) or modifies the form input styles:

[x] I verified that all the inputs inside a form are aligned with each other.
[x] I added Design label and/or tagged @Expensify/design so the design team can review the changes.

[x] If a new page is added, I verified it's using the ScrollView component to make it scrollable when more elements are added to the page.
[x] If the main branch was merged into this PR after a review, I tested again and verified the outcome was still expected according to the Test steps.

Screenshots/Videos

Android: Native

Android: mWeb Chrome

iOS: Native

iOS: mWeb Safari

MacOS: Chrome / Safari

MacOS: Desktop

Working on the checklist, will tag you for review when it's ready.

Defaulting nvp_quickActionGlobalCreate to [] causes this warning:

We expect an object:
https://github.com/Expensify/App/blob/76264c1dda10c770153ea7410bd8c0038149c94e/src/pages/home/sidebar/SidebarScreen/FloatingActionButtonAndPopover.js#L106-L112
Is it expected that [] will come from the BE? Can't we change it to return null or at least an empty object instead?

I think the backend will return an empty object. Double-checking

Defaulting nvp_quickActionGlobalCreate to [] causes this warning:

We expect an object:
https://github.com/Expensify/App/blob/76264c1dda10c770153ea7410bd8c0038149c94e/src/pages/home/sidebar/SidebarScreen/FloatingActionButtonAndPopover.js#L106-L112
Is it expected that [] will come from the BE? Can't we change it to return null or at least an empty object instead?

I think the backend will return an empty object. Double-checking

Nope. We currently return an empty array, likely by mistake, as objects are just arrays in PHP:
'value' => $nvps[NVP::QUICK_ACTION_GLOBAL_CREATE] ?? [],

Fixing that in a bit

Backend fix here: https://github.com/Expensify/Web-Expensify/pull/41443

Ah thanks @Gonals - I had tested that yesterday but didn't get a chance to put up a PR, so I'll review yours

Thanks @Gonals for your help with the PR author checklist. @paultsimura looks like you are almost done with testing on different platforms, so please merge when ready. Thanks!

We have plenty of internal reviews, don't need another one 😄

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


Ensure channel handler close() is not skipped in !hasDisconnect case

Motivation
The optimization in #8988 didn't correctly handle the specific case where the channel hasDisconnect == false, and a ChannelOutboundHandlerAdapter subclass overrides only the close(ctx, promise) method without also overriding the disconnect(ctx, promise) method.
Modifications
Adjust AbstractChannelHandler.disconnect(...) method to divert to close(...) in !hasDisconnect case before computing target context for the event.
Result
Fixes #9092

@netty-bot test this please

@njhill thanks a lot!


Error on chapter 11

From the two methods provided to estimate Asian share by state, only the second one is right. The first one calculates Asian /(Asian +tot pop).
That is why results are not identical

Thanks @friosavila. Just fixed this and am updating the book website now.


.net port

Thanks a lot for your library. It was helpful since apple documentation is hard to read and not always clear.
I made a port of it to .net in case someone is interested : https://github.com/dragouf/AppStoreServerApi

Nice work! Glad you found the library helpful. I'll go ahead and close this issue but I will update the readme with a link to your project when I get a chance. 😊


Updated container base images to fix certain vulnerabilities

Context

Changes & Results

Testing

Checklist
PR

[] My Pull Request title is descriptive, accurate and follows the
semantic-release format and guidelines.

Code

[] My code has been well-documented (function documentation, inline comments,
etc.)

Public Documentation Updates

[] The documentation page has been updated as necessary for any public API
additions or removals.

Tested Environment

[] OS:
[] Node version:
[] Browser:

Self reviewed


elasticsearch: copy plugins to dataDir

resolves #325

@secobarbital can you check if this works for you?
Also, I have included a test to check for plugin installation.

Wow, thank you for the quick turnaround! Yes, this does work for me, it is almost the same as the workaround I came back to report:
                cp -RL ${esPlugins}/plugins "${config.dataDir}"
                find "${config.dataDir}/plugins" -type d -exec chmod u+w {} \;

I find that only the directories needed their permissions fixed to get it to work, not the files.
However, I also found this in the official elasticsearch Dockerfile and I wonder if we should follow their permissions as canonical. It looks like they intentionally package the files with no permissions and expect consumer to modify them?
RUN sed -i -e 's/ES_DISTRIBUTION_TYPE=tar/ES_DISTRIBUTION_TYPE=docker/' bin/elasticsearch-env && \
    mkdir data && \
    mv config/log4j2.properties config/log4j2.file.properties && \
    mv config/log4j2.docker.properties config/log4j2.properties && \
    find . -type d -exec chmod 0555 {} + && \
    find . -type f -exec chmod 0444 {} + && \
    chmod 0555 bin/* jdk/bin/* jdk/lib/jspawnhelper modules/x-pack-ml/platform/linux-*/bin/* && \
    chmod 0775 bin config config/jvm.options.d data logs plugins && \
    find config -type f -exec chmod 0664 {} +

Thanks @secobarbital


Move chart components to a separate repo

Reduce coupling of the chart components and move them to a different repo (flpo-vuetify-charts), publishing them as a npm package.

Done. moved to smartlab-charts.


upload files in separate thread.

We currently write file data and upload in the same thread as the one the bot logic is running in.
I think we can write the file data in the same thread but uploading the file data needs to happen in a separate thread.

Due to GIL (global interpreter lock), there is a good chance the file upload will need to be a separate process/script.

spawning a process to handle this should be fairly easy.
Maybe we make the server converter internally maintain its own process?


Code Coverage support

Here's the pull request as discussed yesterday.
Both local code coverage (with simplecov enabled via COVERAGE=1) as well as coveralls reporting on travis are working fine.
Fixes #8

Nice! Thanks you for testing it on Travis @stesie
@cantino Are you okay with with monkey patch?

I'm okay with the monkeypatch since it's only loaded in tests. One question about the paths.

Thanks again @stesie  :)


[1306][Check text input in list] PoC for giving specific error messages for partial autocompletes

Context
The goal here is handling the case where a user types something into an
autocomplete field but doesn’t select anything from the resulting
dropdown. Existing behaviour will either ignore the user’s input and
keep the field filled with the previous value, or just blank it out,
which can be confusing.
We want to retain what the user entered into the text field when
re-rendering the page with errors, and provide a specific error message
for that field being partially submitted.
This PR is a spike that makes this change on one page - course details.
Changes proposed in this pull request
This approach validates that the text input is in a list of the options
that were presented to the user. This should be more resilient to any
type of autocomplete we want, but the implementation seems very messy
as it requires reassigning all the errors after the form object has
been validated, see code comment for more details.
Guidance to review
Please ignore the failing tests and rubocop errors as this is just a spike 😄
and enjoy this gif demonstrating it working
Feel free to pull this PR down and run it locally and have a play around with the course details
edit page

 [SPIKE] [1day] Improve handling of freetext responses to autocompletes that require a fixed answer


Fixed formatting issue causing a dead link

Due to incorrect markdown formatting (extra parentheses), the hyperlink to the "insights from our research" URL is leading to a dead link--see: http://creativecommons.github.io/gsoc-2019/project-ideas/all/#reward-and-delight
I've removed the extra parentheses

thanks for fixing this!


Glimpse.Ado does not have a strong name

In order to incorporate Glimpse.Ado into one of our projects it needs to have a strong name.

We don't currently have plans to sign the assemblies.
I would encourage you to either use one of the "auto-signing" tools that are out there, or building and signing Glimpse from source.


Make the docker-engine RPM depend on same version for selinux package.

Currently using >= means installing a specific version of docker-engine
means that you still get the latest version of docker-engine-selinux.
This is currently causing a problem with installing on systems that
don't have access to a newer version of the packages that the 1.13.0
docker-engine-selinux requires when installing older versions of Docker.
Fixes #30377
Signed-off-by: Ben Reser<EMAIL_ADDRESS>

/cc @cpuguy83 @runcom

/cc @rhatdan as well

I'm not sure why this would help.
The version that is specified is the minimum version required.
Making it = only instead of >= means that if there's a new version of the package, even if the new version works fine with the existing package, technically, the installation will fail.

@cpuguy83 I'm almost sure that's not true.  As long as you install docker-engine and docker-engine-selinux together it should be just fine.  What you're saying would be true if it was a PreRequires but it's a Requires.
It's very common to have exact version requirements like this between two highly related packages.  For instance in REHL/CentOS the subversion package has a requirement on the subversion-libs of the exact same version:
Requires: subversion-libs%{?_isa} = %{version}-%{release}

If what you're saying was true it would be impossible to upgrade subversion with this requirement, but it's not.

@cpuguy83 Ohh and as far as not being sure how this helps.  It doesn't really solve the pickle we're in now.  But it does prevent the problem continuing in the future.  I'll add some thoughts on issue #30377 as far as how to fix things for current users.

@cpuguy83 It occurs to me that you might be confusing the change as a change to the selinux-policy requirements.  That is not what this change does.  It changes the requirement of docker-engine to require a docker-engine-selinux package with the same version and release.  So for instance 1.13.0-1 of docker-engine would require 1.13.0-1 of docker-engine-selinux.  The selinux-policy requirements are still >=.

Oh sorry, yes, you are correct.
This seems good. Sorry. This was before ☕

You don't want to lock these together.  We are moving container-selinux into  a different stream, and it will be reving at a different rate then docker.  So creating a >= should be fine.

What if you leave the >= but add an option to the manifest to specify the version of docker-engine-selinux?  We just added that to our profile for the time being, but it really would belong in install.pp.

ping @andrewhsu

LGTM

Going to take @rhatdan's advice here and not accept this.
If you are trying to install a specific version of Docker and the resolved docker-engine-selinux package version is not installable you can also specify the correct policy version.
I think this would also cause issues with patch releases of the policy package.
Thanks for submitting. Feel free to continue to discuss here. 🙇 👼


Use-case: Dump database schema for DbContext

For EF 6, I created a helper function using automatic migrations and the SQL Generator to dump the entire SQL schema for a DbContext model to a schema.sql file. The schema.sql file was checked into source control. This supports the following objectives:

Transfer EF schema changes to a corresponding SSDT (Sql Server Data Tools) project. We migrate and deploy using SSDT, not EF migrations, for a number of reasons, explained below. The schema.sql file can either be imported into the SSDT project, or we can use EF schema diffs to manually make corresponding schema changes in the SSDT project.
Monitor the result of model changes on the EF-expected database schema
(By running schema generation in a unit test) Automated validation that there are no errors when generating the EF schema

The DDL script generator requires(?) automatic migrations, which I understand will not be supported in EF Core (#6214).
I'm creating this issue for 2 reasons: First, to explain our use-cases to the EF Core team for general awareness; Second, to ask whether there is a straightforward way to dump the whole DbContext schema as a SQL script in EF Core?
In the absence of direct support for this, I think I can work out an implementation starting from here.
EF6 implementation
My EF 6 class looks like this (simplified to exclude our custom SqlGenerator):
/// <summary>
/// Helper methods for generating DDL scripts for entity framework <see cref="DbContext"/>s.
/// </summary>
public static class DdlScriptHelper
{

	public static string GenerateDdlScriptFor<TDbContext>(DbMigrationsConfiguration<TDbContext> migrationsConfiguration = null, string sqlProviderName = "System.Data.SqlClient")
		where TDbContext : DbContext
	{
		if (migrationsConfiguration == null)
		{
			migrationsConfiguration = new DbMigrationsConfiguration<TDbContext>()
										{
											AutomaticMigrationsEnabled = true
										};
		}

		// Use a custom HistoryContext table, so it isn't affected by the presence of a dbo.__MigrationHistory table.
		migrationsConfiguration.SetHistoryContextFactory(sqlProviderName, CreateHistoryContext);

		DbMigrator dbMigrator = new DbMigrator(migrationsConfiguration);
		var loggingMigrator = new MigratorLoggingDecorator(dbMigrator, new ConsoleMigrationsLogger());
		MigratorScriptingDecorator scriptMigrator = new MigratorScriptingDecorator(loggingMigrator);
		return scriptMigrator.ScriptUpdate(DbMigrator.InitialDatabase, null);
	}

	private static HistoryContext CreateHistoryContext(DbConnection dbConnection, string s)
	{
		// Return a HistoryContext that purposefully does not match the standard dbo.__MigrationHistory table.
		return new HistoryContext(dbConnection, "notdbo");
	}

}

Why SSDT
The list of reasons why we use SSDT for managing our database projects is long; here are a top few reasons:

Give us the ability to manage the contents of a database using SQL source code files and source control. A DbContext is a portion of a database, it is not the whole database in most real-world scenarios. In many cases multiple DbContexts are combined in a single database.
Gives us a project to hold sproc, index, trigger etc SQL source code.
Separates migration script generation from deployment. Our flow is EF -> SSDT -> dbup -> database for production updates. We usually use EF -> SSDT -> database during development for integration databases. The migration scripts generated by SSDT are reviewed by DBAs and tested against production database backups.

I probably should write a blog post describing the setup we came up with. It gives us push-button production deploys and the safety of code-reviewing and tweaking migration scripts that may cause data loss.
Further technical details
EF Core version: 2.0
Database Provider: Microsoft.EntityFrameworkCore.SqlServer
IDE: VS 2017

Dupe of #2943?

Yes! Thank you - I tried the snippet in #2943 and it meets my needs. So, the primary ask here is addressed, though you can also consider this a vote to make that a standard extension method.
I hope that the additional info on EF -> SSDT is useful for design decisions around migrations.

Yes, we should definitely consider it as part of #4321.

@johncrim FYI: I am adding this to my "EF Core Power Tools"