Firstly, it's wrong to write a Bash shebang at the start of .profile, for two reasons: It's not an executable script, but intended to be sourced from other shell environments .profile is sourced by the user's shell, which need not be Bash. The bashisms should be rewritten if possible; those that can't (such as complete -r) should be migrated to ....


Just a minor thing, using const int sizeOfVersion = sizeof(Int16); const int sizeOfIterationCount = sizeof(Int32); would remove the "magic numbers" 2 and 4 and aid comprehension a little :)


Honestly, I didn't run it, but there's some things I can point out. In upload_to_aws, you have try: s3.upload_file(local_file, bucket, s3_file) return True except FileNotFoundError: return False except NoCredentialsError: return False excepts can actually be combined though: try: s3.upload_file(local_file, bucket, s3_file) return ...


I'd suggest using built-in libraries, especially if you're looking to solve something for production/industry. Quick search shows that there are two to consider that should be available within JDK, the JCA (Java Cryptography Architecture) for local storage of secrets, and JSSE (Java Secure Socket Extension) for comunicating with the remote service. ...


Can't help but take the low hanging fruit: awsname should be aws_name or awsName. Words are always separated somehow. awsuploading should be renamed to aws_uploading to match your other method names. I can't review more than that as I don't know Python. The title of this post is what caught my attention.

Only top voted, non community-wiki answers of a minimum length are eligible