2020年12月22日火曜日

AWSのドキュメントの機械翻訳の間違い

機械翻訳でドキュメントを英日翻訳していて、矛盾があった場合は英語を優先するとなっています。


たまに間違っていますね。明確な間違いに気がついたのでメモしておきます。

https://docs.aws.amazon.com/ja_jp/streams/latest/dev/troubleshooting-producers.html

日本語

シングルレコードオペレーション PutRecord では、スループットスロットリングの計算結果がキロバイト単位に四捨五入されます。マルチレコードオペレーション PutRecords では、各セルのレコードの累計が四捨五入されます。たとえば、PutRecords は 1.1 KB になる 600 レコードのリクエストをスロットリングしません。

英語

Remember to round up to the nearest kilobyte for throughput throttling calculations when using the single-record operation PutRecord, while the multi-record operation PutRecords rounds on the cumulative sum of the records in each call. For example, a PutRecords request with 600 records that are 1.1 KB in size will not get throttled.


round up to the nearest kilobyte を キロバイト単位に四捨五入  と訳してしまっています。これは続きの文を読めばわかるのですが・・・。機械翻訳では数字の扱いや英文字(APIとか)がまざるとおかしなことになるようです。

そこが大事なんですが・・・機械翻訳はまだ少し改善があるのかなというところです。

2020年12月17日木曜日

人月の神話のメモ

 人と月が交換可能になるのは、多くの作業者の間でコミュニケーションを図らなくても、仕事が分担できる場合だけである。


コンセプトの完全性には、システムが1つの原理を反映していること、および、利用者から見た仕様書が少人数で考えられたものであることが必要である。


一般的に、二度目のシステムをデザインし過ぎる傾向がある。


右手がやっていることを左手が知らないせいで、スケジュールの惨憺たる状態だとか、機能がうまく合っていないとか、システムのバグといったことが一度に生じる。


変更はないなどと想定するより、あると思って準備しておいたほうが良い。目的の変更ばかりでなく、開発戦略や技術の変更も避けられない。捨て石の考え方は、人が理解が進めばデザインを変更する、という事実をまさに受け入れることなのだ。


2020年12月16日水曜日

AWS Security Speciality 勉強していたときのメモ

Secrets Manager をEnableすると、即座に1回ローテションを実行する

invalid. https://docs.aws.amazon.com/secretsmanager/latest/userguide/enable-rotation-rds.html

Enabling rotation causes the secret to rotate once immediately when you save the secret. Before you enable rotation, be sure you update all of your applications using this secret credentials to retrieve the secret from Secrets Manager. The original credentials might not be usable after the initial rotation. Any applications you fail to update break as soon as the old credentials become 

EC2のメタデータはDisableできる 

https://aws.amazon.com/jp/about-aws/whats-new/2019/11/announcing-updates-amazon-ec2-instance-metadata-service/ 

インスタンスメタデータのアクセスリクエストの機能強化を導入し、不正なメタデータアクセスに対する深層防御を追加しました。インスタンスメタデータサービスを設定して、新しいインスタンスと実行中のインスタンスの両方でこの機能をリクエストできます。さらに、インスタンスメタデータへのアクセスを完全にオフにすることもできます。


S3 ACLの使いどころ

アカウントレベル、オブジェクトレベルでも設定できる

バウンダリーポリシーなのでDenyはできない

クロスアカウントアクセスで、別アカウントにオブジェクトをアップロードしたとき、そのアカウントへのアクセスを許可するために必要。下記参照。https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/access-policy-alternatives-guidelines.html

オブジェクト ACL は、バケットの所有者が所有していないオブジェクトへのアクセスを管理する唯一の方法です。バケットを所有する AWS アカウントは、別の AWS アカウントにオブジェクトをアップロードするアクセス許可を付与できます。バケットの所有者はこれらのオブジェクトを所有していません。オブジェクトを作成した AWS アカウントは、オブジェクト ACL を使用するアクセス許可を付与する必要があります。


cmkローテーション

Customer managed keys. 1年で自動更新を"選択可能" 

AWS managed keys.  3年で自動(強制)

インポートしたkms keys 手動でローテションのみ。いつでもいい。1年未満でローテションできるのはインポートのみ。

※インポートしたキーは削除は即座に行われるので、保管しておく


CloudTrailの証跡(trail)

証跡を設定しなくても、デフォルトのCloudTrailイベント履歴で90日間は保管されている

90日以前を見たいときはは証跡をonにする必要がある


CloudFront 署名付き URL と署名付き Cookie 

https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/private-content-choosing-signed-urls-cookies.html

どちらも、コンテンツにアクセスできるユーザーを制御する

署名付き URL 

-  個別のファイルへのアクセスを制限 (アプリケーションのインストールダウンロードなど)

- ユーザーが Cookie をサポートしていないクライアント (カスタム HTTP クライアントなど) 

署名付き Cookie 

- 複数の制限されたファイル (HLS 形式の動画のすべてのファイルやウェブサイトの購読者の領域にあるすべてのファイルなど) へのアクセス

- 現在の URL を変更したくない場合


CLBでできること

CLB のみ独自の暗号化プロトコルに対応できる

CLB は 、HTTP/HTTPS に加えて、SSL接続可能

2020年12月6日日曜日

AWS の名前が紛らわしい機能についてメモ

 

Access Analyzer

IAMの機能

S3, IAM, KMS, Lambda, SQSが知らない内に共有されていないか調べる


Access Advisor

IAMの機能 Group, User, Policyのタブから見る

各サービスを、誰が、どの権限ポリシーで、最後にいつ使用したかを表示する。使用していない(削除対象の)ポリシーなどを探すのに便利。


Credential Report

IAMの機能で、CSVファイルをダウンロードできる。

各ユーザに対して以下の情報:

  • ユーザ作成日
  • パスワードが有効か、最後にいつ使われたか、最後にいつ変更したか、次のローテーションはいつか
  • MFAはアクティブか
  • アクセスキー(2つ)に関して、いつローテートしたか、最後にいつ使われたか、最後にどのリージョンで使われたか、最後にどのサービスで使われたか
  • X.509 署名証明書を所有し、その証明書のステータスが Active であるか、最後に変更された日時

Trusted Adviser 

サービスの1つ。Cost Optimization, Performance, Security, Fault Tolerance, Service Limitの5つの観点でチェック。無料でも使えるが有料にすると機能が増える。

例:

セキュリティ

- SecurityGroupが解放されている

- S3が公開されている

- EBS, RDSでスナップショットが公開になっている

- MFAがEnableになっている

コスト最適化

- 有料: EC2, ELB, EIP, RDS 使用率が低いものなど

RDS Recommendation

DB インスタンス、、リードレプリカ、DB パラメータグループなどのデータベースリソースについての推奨事項が自動で表示されます。これらの推奨事項は、、DB インスタンス構成、使用状況、パフォーマンスデータを分析して、ベストプラクティスガイダンスを提供します。

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_Recommendations.html


Redshift Advisor

Amazon Redshift Advisor は、Amazon Redshift クラスターを最適化してパフォーマンスを高め、運用コストを低減するための方法に関する推奨事項を提供します。各推奨事項の説明は、前に示したようにコンソールに表示されます。

https://docs.aws.amazon.com/ja_jp/redshift/latest/dg/advisor-recommendations.html

2020年12月3日木曜日

VSCODEのssmacroを使って全角の間の邪魔なスペースを削除する

日本語 ドキュメントをPDFなどからコピペすると、全角文字の間に半角スペースが不自然に入ったりします。修正が面倒なのでVSCODEのエクステンションssmacroに登録しました。

全ての全角文字は [^\x00-\x7F] でascii以外でマッチさせています。


ショートカットを定義するファイルを作ります。

ssmacro_delete_space_bw_zenkaku.json

[
    {
        "args":
        {
            "find": "([^\\x00-\\x7F]) ([^\\x00-\\x7F])",
            "replace": "$1$2",
            "all":true,
            "reg":true,
            "flag":"gmi"
        },
        "command": "ssmacro.replace"
    }
]

キーバインドでCtrl+8 にセットします。キーバインドのファイルはUserのkeybindings.jsonにしています。 上のマクロのjsonのフルパスを指定します。フルパス以外は使えないようです。

Code\User\keybindings.json

[
    {
        "key": "ctrl+8",
        "command": "ssmacro.macro", "args": {"path": "/fullpath/to/ssmacro_delete_space_bw_zenkaku.json"}
    },

]


これで例えば「あ<半角>あ」が「ああ」になります。

ssmacroの定義するファイルはコメントが入れられないのがちょっとだけ不便です。JSONだから仕方ないですかね。

私の場合、他にもAWSの用語を省略するときに便利に使っています。


正規表現Tips

例えば、negative lookforward で、microsoftをMSにしたいけど、ピリオドが次に来るときは除外したいときはこうなります。ピリオドはエスケープするために\\がついています。
{
        "args": {
            "find": "Microsoft(?!\\.)",
            "replace": "MS",
            "all": true,
            "reg": true,
            "flag": "gmi"
        },
        "command": "ssmacro.replace"
    },

URL中にないauthenticationにマッチしたいとき

 "find": "(?<!https*://)authentication"

negative lookbehind でこのように書きます。

2020年11月29日日曜日

AWS RDS/Auroraを停止状態から削除する

  • 1.Secrets Manager をEnableすると、即座に1回ローテションを実行する
  • 2.EC2のメタデータはDisableできる 
  • 3.S3 ACLの使いどころ
  • 4.cmkローテーション
  • 5.CloudTrailの証跡(trail)
  • 6.CloudFront 署名付き URL と署名付き Cookie 
  •     - 署名付き URL 
  • 7.CLBでできること
  • 8.Access Analyzer
  • 9.Access Advisor
  • 10.Credential Report
  • 11.Trusted Adviser 
  • 12.RDS Recommendation
  • 13.Redshift Advisor
  •   - 正規表現Tips
  • 14.停止状態からAWSのDBを削除できるか
  •     - RDSを消す
  •     - Auroraを消す
  •     - Auroraを消すときの手順
  •     - コンソールで消せなくなるとき
  •   - 余談
  • 15.結論:
  • 16.エラー:
  • 17.環境
  • 18.やったこと
  • 19.Consoleから変更するとき
  • 20.CLIでRCU, WCUを変更する例
  •   - 準備
  •   - CLIコマンド
  •   - KMSを作る
  •   - LambdaのRoleにつけるPolicy
  • 21.Publically Accessible
  • 22.変更は、CLI、APIで
  • 23.以前は変更できなかったらしい
  • 24.CloudFormation 
  • 25.先に結論
  • 26.PSIその1 PCカレッジ東梅田校
  • 27.PSIその2 大阪駅前テストセンター
  • 28.ピアソンVUE 大阪第3ビルのテストセンター
  • 29.PSI/VUEどちらも同じ
  • 30.英語の日本語訳について
  • 31.直前の申し込みについて
  • 32.試験中の服装
  • 33.試験中のトイレ
  • 34.試験中の休憩
  • 35.試験結果の通知
  • 36.模擬試験について
  • 37.バウチャーについて
  • 38.ベータ試験
  • 39.AWS受験メモ
  •   - とりあえず回避方法
  •   - 出ていたエラーメッセージ
  •   - フリーズから強制終了して起動したら(とりあえず)復旧
  •   - 考えられる原因?
  •   - 別の古いPCでは再起動の問題が起きない
  • 40.希望
  • 41.3つのアプリの機能まとめ
  • 42.AWS Organizationのチュートリアル
  • 43.Codebuildのチュートリアル
  • 44.10minites hands-on Build a Basic Web Application
  • 45.CodeCommitのチュートリアル
  • 46.UdemyのCotnito handson
  • 47.Running Containerized Microservices on AWS
  • 48.Pandasでリストをcsvに保存する。
  • 49.re.escapeで自動でエスケープしてくれる。
  • 50.データフレームから1行取り出してタプル
  • 51.JupyterでNot trustedという表示が出る
  • 52.Pythonでvirtual環境を消すのはディレクトリを消す
  • 53.WSLでUbuntuからWindowsのフォルダにアクセス
  • 54.WSLでWindowsからUbuntuのhomeにアクセス
  •   - まずupdate, upgrade
  •   - Anti-virus
  •   - VIM
  •   - VIMカラースキーム設定 molokai
  •   -  VSCode 
  • 55.その他
  • 停止状態からAWSのDBを削除できるか

    RDS DBを止めた状態(stopped)から消す、をいうことを試していたときのメモ。

    RDSを消す

    RDSは停止状態から消せます。
    ちなみにDeletion Policyも、停止したままで変更できます。

    Auroraを消す


    Auroraは停止状態では消すことができません。
    Startしてからでないと消せません。

    こういうエラーが出ます。(database-2というDB名)

    $ aws rds delete-db-instance --db-instance-identifier database-2-instance-1

    An error occurred (InvalidDBClusterStateFault) when calling the DeleteDBInstance operation: Db cluster database-2 is in stopped state


    Auroraを消すときの手順

    クラスター内のインスタンスを全て消してからクラスターを消します。 

    https://aws.amazon.com/premiumsupport/knowledge-center/rds-error-delete-aurora-cluster/


    最後の1つのインスタンスを消すと、同時にクラスターも削除されます。
    https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/USER_DeleteInstance.html


    クラスターでDeletion ProtectionがEnableとなっていても、中のインスタンスは削除できます。ただし、最後の1つのインスタンスを消しても、クラスターが残っていて、データも残っている扱いになるようです。再開するにはインスタンスを追加します。
    Aurora clusters with a single DB instance
    If you try to delete the last DB instance in your Aurora cluster, the behavior depends on the method you use. You can delete the last DB instance using the AWS Management Console. Doing so also deletes the DB cluster. You can also delete the last DB instance through the AWS CLI or API, even if the DB cluster has deletion protection enabled. In this case, the DB cluster itself still exists and your data is preserved. You can access the data again by attaching a new DB instance to the cluster.

    コンソールで消せなくなるとき

    最後にRegionalだけを残したら、Consoleでは消せなくなりました。CLIでこのようにして消しました。

    $ aws rds delete-db-cluster  --db-cluster-identifier database-2 --skip-final-snapshot


    余談

     DBは停止していても7日で自動で動き始めるので注意が必要です。それに関しては対策が公式blogで紹介されています。

    https://aws.amazon.com/blogs/architecture/field-notes-stopping-an-automatically-started-database-instance-with-amazon-rds/

    2020年11月23日月曜日

    AWS DMSで Cannot connect to ODBC provider ODBC general error

    Database Migration ServiceでAuroraを別リージョンに移動させるときにエラー。結局別リージョンは関係なかったのですが。

    結論:

    • Source EndpointをAuroraにするときは、(クラスターではなく)インスタンスがエンドポイント。これは選択候補に現れる
    • Target EndpointをAuroraにするときは、reader(ro)をエンドポイントにする。別リージョンのときは自分で入力しないといけない
    • Connection Testをすること
    • AssessmentはPassしていてもConnectionはエラーになることがある


    設定して開始できない状態。

    AssessmentをやってみるとPassしている



    Connectionを見ると、エラーになっている・・・。開始するにはコネクションを直さないと、ということのようでした。



    調べたら、これが出てきました。

    https://aws.amazon.com/premiumsupport/knowledge-center/dms-endpoint-connectivity-failures/

    To resolve these errors, confirm that the following endpoint details are set correctly:

    Username and Password

    ServerName (DB instance endpoint name)

    Port

    接続の問題なのでそこを見直しなさいということで。


    ---

    何かの英語の資料でAuroraでは別リージョンにはDMSできないという記事があったのですが、、何かが間違っていたのでしょう。

     



    AWS DMSでFailed Table has LOBs but no primary keyになった

    結論:

    Selection rulesで Schema nameを % にしていたので失敗した。 


    エラー:

    Database Migration Serviceを練習しようとして、エラーが出ていました。

    - LOB column(s) not nullable

    - Table has LOBs but no primary key

    というエラーです。


    変更したのはこの部分。今回はmydbと入れています。デフォルトでは%になっています。table名は%のままでいけました。。



    うろ覚えでやっていたのでいろいろ失敗しました。

    ・エンドポイントを登録したらテストをする

    ・premigration assessmentをしておけば、本番と同じ失敗になる(失敗があれば)


    トラブルシューティングには


    Tasks fail when a primary key is created on a LOB column

    In FULL LOB or LIMITED LOB mode, AWS DMS doesn't support replication of primary keys that are LOB data types.


    DMS initially migrates a row with a LOB column as null, then later updates the LOB column. So, when the primary key is created on a LOB column, the initial insert fails since the primary key can't be null. As a workaround, add another column as primary key and remove the primary key from the LOB column.


    ・・・とか書いてあり、よく分からなかったのですが結局スキーマの問題ということで。

    2020年11月21日土曜日

    Raspberry Pi にVSCODEをインストールする

    2020年10月から、Raspberry PiにVSCode公式版がインストールできるようになったそうです。それまでは、いろんな手段で無理やりインストールしていた模様。


    環境

    Raspberry Pi 3B+

    VSCODE 1.51


    やったこと

    https://code.visualstudio.com/#alt-downloads にアクセス。


    deb のARM版をダウンロード。ARM64は64bit用ですからNGです。




    今回ダウンロードしたファイルは code_1.51.1-1605051085_armhf.deb

    でした。インストールするには

    sudo dpkg -i code_1.51.1-1605051085_armhf.deb

    とします。で完了です。問題なくうごいています。

    しかし3B+ではパワー不足でマルチタブで編集しているとフリーズ気味です。

    2020年11月19日木曜日

    DynamoDBで、RCU,WCUを変更したいとき、


    Consoleから変更するとき

    Capacityタブを選択して、変更できます。



    この画像では、2WCU, 2RCUで1.33USB/monthという費用が示されています。


    CLIでRCU, WCUを変更する例

    準備

    Moviesというテーブルを作成します。https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.Python.01.html


    dynamodb = boto3.resource('dynamodb', endpoint_url="http://localhost:8000")

    の、Download版に接続するためのlocalhostの記述を消して、boto3.resource('dynamodb') とすると、AWS上で作成されます。

            ProvisionedThroughput={

                'ReadCapacityUnits': 10,

                'WriteCapacityUnits': 10

            }

    となっているのでRCU,WCUは10で作成することになります。

    CLIコマンド

    RCU、WCUを1に変更するには、CLIでupdate-tableメソッドを使ってこのようにします。

    $ aws dynamodb update-table --table-name Movies --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1

    https://docs.aws.amazon.com/cli/latest/reference/dynamodb/update-table.html 

    2020年11月18日水曜日

    DynamoDBのCLIで、JSONの中で改行するとエラーになる件

    CLIでDynamoDBテーブルにitemを入れるとき、JSONの書き方が改行ありなしで2種類紹介されています。しかし、後者の改行ありのやり方ではできませんでした。 
    https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tools.CLI.html 


    Error parsing parameter '--item': Invalid JSON: Expecting property name enclosed in double quotes: line 1 column 33 (char 32)  

    というエラーが出ています。{}の中での 改行がエラーになるようです。



    aws dynamodb put-item \
    --table-name Music  \
    --item \
        '{"Artist": {"S": "No One You Know"}, "SongTitle": {"S": "Call Me Today"}, "AlbumTitle": {"S": "Somewhat Famous"}}' \
    --return-consumed-capacity TOTAL  
    
    aws dynamodb put-item \
        --table-name Music \
        --item '{ \
            "Artist": {"S": "Acme Band"}, \
            "SongTitle": {"S": "Happy Day"}, \
            "AlbumTitle": {"S": "Songs About Life"} }' \
        --return-consumed-capacity TOTAL 

    2020年11月16日月曜日

    AWS LambdaでKMSをDisableする

     ベストプラクティスにはKMSの無効化についてLambdaを使うとか書かれています。


    AWS KMS のセキュリティの自動化

    CMK の監視中に、特定のアクションが検出された場合、CMK を無効にするか、ローカルのセキュリティポリシーで指示されているその他のインシデント対応アクションを実行するように AWS Lambda 関数を設定することができます。AWS 内の自動化ツールを活用することにより、人間の介入なしで潜在的な露出を数分で遮断することができます。


    ということで作りました。LambdaはPython3.8です。

    KMSを作る

    Create Key
    -> Symmetric
    -> Next
    -> Alias
    -> Next
    -> Define key admin permissions
    -> Define key usage premissions

    KMSのIDを後で使います。

    LambdaのRoleにつけるPolicy

    DisableKMS: ManagedPolicyから作ります。

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": [
                    "kms:DisableKey"
                ],
                "Resource": "*"
            }
        ]
    }
    InlineはLambdaのARNが必要なので、あとでつけました。 Region, AccountIDを変えます。

    環境変数を取得するためのポリシー(inline policy)
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "lambda:GetFunctionConfiguration",
                "Resource": "arn:aws:lambda:Region:AccountID:function:DisableKMS"
            }
        ]
    }

    CloudWatchにつなぐためのポリシー。Region, AccountIDを変えます。(inline policy)
    ※Lambdaを作るときにポリシーを作ると、これが同時にできるはず。
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "logs:CreateLogGroup",
                "Resource": "arn:aws:logs:Resion:AccountID:*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "logs:CreateLogStream",
                    "logs:PutLogEvents"
                ],
                "Resource": [
                    "arn:aws:logs:Resion:AccountID:log-group:/aws/lambda/DisableKMS:*"
                ]
            }
        ]
    }

    DisableKMSという名前のLambdaを作ります。Lambdaのcodeは以下です。環境変数にKMSID=ターゲットKMSのIDを指定します。
    import botocore
    import boto3
    from botocore.exceptions import ClientError
    
    
    def lambda_handler(event, context):
        client = boto3.client('kms')
        lambdaFunc = boto3.client('lambda')
        print('Trying to get Environment variable')
        try:
            funcResponse = lambdaFunc.get_function_configuration(
                FunctionName='DisableDMS'
            )
            KMSID = funcResponse['Environment']['Variables']['KMSID']
            print('Disabling KMD id: ' + KMSID)
        except ClientError as e:
            print(e)
        try:
            response = client.disable_key(
                KeyId=KMSID
            )
            print('Success :: ')
            return response
        except ClientError as e:
            print(e)
        return
        {
            'message': "Script execution completed. See Cloudwatch logs for complete output"
        }

    とりあえずは動作するのですが、ベストかというと謎ですが・・・。


    おまけ

    LambdaからCloudWatchへのアクセスのポリシーがないとき、CloudWatchコンソールを開くとこんなエラーが出ていました。



    2020年11月14日土曜日

    RDSのpublic accessオプションをコンソールで変更できない

    Publically Accessible

    RDS/Auroraには Publically Accessibleという設定項目があって、VPC外部からのアクセスの許可に使われます。

    このPublically Accessibleは、作成時にはチェックボックスがありますが、変更はコンソールからはできないようです。(けっこう探してしまった・・・)

    しかも作成時は折り畳まれた設定部分にあるので見つけにくいです。下のAdditional connectivity configurationを開きます。



    展開すると、チェックボックスが出てきます。




    データベースインスタンスの画面で確認すると、Public accessibilityがYesになっています。





    変更は、CLI、APIで

    即時有効、ダウンタイムなし 

    CLI option:

    --publicly-accessible|--no-publicly-accessible

    RDS API parameter:

    PubliclyAccessible

    https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html


    とりあえず現状を見てみます(database-1)。attributeを見る方法がよく解らず、grepで

    $ aws rds describe-db-instances --db-instance-identifier database-1 | grep PubliclyAccessible

    とやると

    "PubliclyAccessible": true,

    が返ります。

    trueなので、--no-publicly-accessibleを使ってfaluseにしてみます。

    $ aws rds modify-db-instance --no-publicly-accessible --db-instance-identifier database-1 

    と思ったらStoppedだから変更できません。

    An error occurred (InvalidDBInstanceState) when calling the ModifyDBInstance operation: Cannot modify a stopped DB Instance


    再び実行すると、JSONの結果がズラッと出てきました(describe-dbと同じ結果が出力)。

    数分待つと変更できていました。


    以前は変更できなかったらしい

    2015年以前(?)は、途中で変更できず、インスタンスを作り直すしかなかったらしいです。

    Posted on: Jun 16, 2013 8:31 PM

    You can create a snapshot of the current RDS database and launch it with the publicly accessible option.

    https://forums.aws.amazon.com/thread.jspa?threadID=127344

    EC2インスタンスにIPv4でアクセスするときはhttpでという話

     EC2のIPアドレスをブラウザで開くとき、コピーしてChromeのアドレスバーに貼っていたのですが、エラーが出ていました。



    This site can't be reached took too long time. ERR_CONNECTION_TIMED_OUT....

    何故なのか解らず調べていたのですが、スマートフォンでは繋がるということで、ブラウザ側の問題だろうと思ってクッキー消して見たりしましたが(そういうエラーは出ていないんですが)、よく解らず・・・。

    結局のところ、Chromeにアドレスを貼り付けるとHTTPS扱いになってしまっているのが理由でした。HTTPで繋げば大丈夫でした。初歩的・・・。





    awsのドキュメントページが見れなくなってcookieを削除した

     https://docs.aws.amazon.com/

    が繋がらない状態になりました。英語のページ/en_us/がNGで、日本語ページは繋がります。メンテナンスとかで停止しているのかな、と思いきや、クッキーを削除してみてくださいとのこと。


    https://support.google.com/chrome/answer/95647

    こちらの通りにChoromのSettingsから該当のdocs.aws.amazon.comを消したら復活しました。docのページでDarkモードにできるのですが、それが何か引き起こしたんでしょうか。


    ちなみにAndroidスマートフォンでも同様に落ちていました(PC画面はキャプチャし忘れたのでこちらを)



    スマートフォンのChromeではcookieをサイト毎に消せないようで、まとめて消しました。復活。


    2020年11月11日水曜日

    EC2のlink local addressでメタデータを見る

    EC2にログインした状態で link-local address (169.254.169.254)にアクセスします。curlで情報を取得できます。

    t2.microのデフォルト設定で起動して、connectします。

    [ec2-user@ip-xxxx ~]$ curl -s http://169.254.169.254/latest/meta-data

    でメタデータを見ると、以下のように出力されました。

    ami-id ami-launch-index ami-manifest-path block-device-mapping/ events/ hibernation/ hostname identity-credentials/ instance-action instance-id instance-life-cycle instance-type local-hostname local-ipv4 mac managed-ssh-keys/ metrics/ network/ placement/ profile public-hostname public-ipv4 public-keys/ reservation-id security-groups

    さらにセキュリティグループは、このようにして得られます。

    $ curl -s http://169.254.169.254/latest/meta-data/security-groups/

    launch-wizard-3

    と出力されます。コンソールから確認すると、確かにsecurity group nameになっています。この方法で得られるのは、あくまで名前だけで、詳細な設定は見れないようです。





    2020年11月9日月曜日

    AWSのエラーのメモ

    出たエラーをメモ


    CloudFormation 

     The following resource(s) failed to create: [ServerSecurityGroup, SSHSecurityGroup]. . Rollback requested by user.


    SSHSecurityGroup CREATE_FAILED Resource creation cancelled


    ServerSecurityGroup CREATE_FAILED The request must contain the parameter GroupDescription (Service: AmazonEC2; Status Code: 400; Error Code: MissingParameter; Request ID: XXXX; Proxy: null)


    原因: 別のリージョンで展開しようとしていた。Cfnがtokyoにあるのに、us-west-1aを使おうとしていた。

    ---

    The following resource(s) failed to create: [MyInstance]. . Rollback requested by user.

    CREATE_FAILED The image id '[ami-a4c7edb2]' does not exist (Service: AmazonEC2; Status Code: 400; Error Code: InvalidAMIID.NotFound; Request ID: XXXX; Proxy: null) 


    原因: 存在しないAMIを呼び出して使おうとしていた。

    ---

    Cfnのテンプレートをつなげる"---"はハイフン3つでないとエラー

    次の行でエラーが出てしまう

    ---

    テンプレートがCompleteしてから、Stack policyだけを追加しようとするとこのエラーが出て、変更できません。試しにタグも追加してみると更新できました。

    There was an error creating this change set

    The submitted information didn't contain changes. Submit different information to create a change set.

    ---

    Cfnでインスタンスのtypeを指定しなかった場合、m1.smallで起動されていました。 

    2020年10月31日土曜日

    AWS認定試験メモ(PSIとピアソン比較@大阪)

    AWS認定試験のテストセンター会場(大阪駅近辺)とテスト会社比較とTipsです。試験の問題等については書いていません。

    大阪駅近辺での会場は複数あり、PSIとピアソンVUEどちらでも受験できます。同じ会場でも、PSI、VUEどちらも可能な場所があります。

    なお、2021年7月以降はAWS試験は受けていませんので、情報が古いかもしれません。


    先に結論

    いろいろ書いていますが、総合的には受験場所での差はあまりないと思います。ときと場合や人によってルールが細かく変わったりもしています。困ったことがあればスタッフの方を迷わず呼べばよいと思います。

    私は試験中にメモを書くタイプなので、メモのペンが普通のボールペンを使えたほうがいいのでPSI@大阪テストセンターが良いです。

    ピアソンVUE@大阪駅前第3ビルは太めのホワイトボードマーカーであることを除けば他は全てベターなのですが。

    追記: 試験システムがピアソンの方が好きなので、細いホワイトボードマーカーが使えるピアソン試験@大阪テストセンターが最終的にはよかったです。

    --

    ※「ときがあった」という表記は、1回以上そういうことがあったが毎回ではない、という意味です。いろいろ状況が変わっていっていますので・・。

    PSIその1 PCカレッジ東梅田校

    場所: PCカレッジ東梅田校(泉の広場を出たところ。出口が8ヶ所くらいあるので注意。1Fがメディアカフェポパイというネットカフェ) 若干看板が見えにくいです。と言うか看板がない。

    試験日程: 開催日は少なめ。全く開催されていない(PSIサイトで会場選択肢に現れない)ときもある。日曜開催、月、火、土曜は開催無しが多い。10:00から or 14:00から

    試験環境

    • テスト中に机に本人確認証をおいておくという指示はない
    • テスト前に写真を撮ることはない
    • 監視は特に気になりません。厳しいという情報がありましたが別に厳しいということはない(ピアソン本体ではないから?)
    • 机は長机に手作り感のある仕切り(プラダン)をつけている。
    • PCはノートのときもあり、デスクトップのあときもあり
    • [以下、PSIでは共通]
    • 問題の画面で、文字をドラッグできない
    • メモは紙と普通のボールペン
    • 日本語訳が自然。ピアソンよりは良い気がする(でも少しは英語原文を確認しないといけないときがあり、切替に2,3秒かかるのが微妙) 追記:試験によっては誤訳もあり、英語を読まないと正答が出せないものもありました。
    • 試験後にその場でスタッフを呼ぶ。合否の画面が出たままなので、微妙に恥ずかしい

    PSIその2 大阪駅前テストセンター

    場所: 大阪駅前テストセンター(ヨドバシカメラの北の方・洋服の青山が1Fにあるビル)。※案内には5Fと書いてありますが、実際は4Fで受け付けでした。

    試験日程:ほぼ毎日開催 10:00から or 14:00から

    試験環境
    • テスト中に机に本人確認証をおいておくという指示あり
    • テスト前に写真を撮ることはない
    • 監視は特に気になりません。
    • 机は専用のがっしりした作りのもの。
    • イヤーマフの遮音性能が他の所より低いときがあった。
    • PCはデスクトップ。モニタが横長のときがあり、問題が読み辛かったときがあった。
    • [PSIでは共通:上記と同様]
    ※大阪駅前テストセンターでのピアソンVUE試験

    実は大阪駅前テストセンターではピアソンの試験も受けられます。概ね第3ビルと同じです。ホワイトボードマーカーが細かったです。名前ペンの細字くらいでしょうか。

    ピアソンVUE 大阪第3ビルのテストセンター

    場所: 大阪第3ビルのテストセンター。2021年以降は部屋が新しく分かれていました。

    試験日程:  ほぼ毎日開催。日曜は開催無しが多い。時間は9:30から15分刻みで選べて自由度が高い。

    ※システムメンテナンスが第3日曜にあり、その日はテスト開催無し、オンラインでの手続きもできない。

    ※9:00頃に開場するが、早めにいくと予約時刻を待たずに受けさせてくれることもある(何回も行っているからかもしれませんが)。

    試験環境:

    • テスト中に本人確認証を机においておく
    • ハンカチ、ティッシュ、目薬は持ち込み可能
    • 受け付けで顔写真を撮影→受検直前にパソコン画面に現れてびっくりする
    • 監視は特に気になりません。マスクを外していたらつけるように声かけられましたこともあります
    • 机はがっしりした感じの長い専用机を仕切っている。スペースは広め
    • PCはデスクトップ+モニタ。モニタの幅は広くはない
    • 問題の画面で、文字をドラッグできる(ピアソンの仕様)
    • メモはホワイトボードとペン(名前ペンの極太字くらいの太さ。はっきり言って使いにくい)
    • 日本語訳が適当でイマイチで、訳抜けもある。ただし、日本語英語の切替はポップアップなので時間がかからない。※訳文の精度はテストによるかもしれません。
    • 試験後は自分で外に出ていけばよい
    • 15分毎に試験が開始されるため、人が頻繁に入ってくる(説明の声も聞こえる)

    ---

    PSI/VUEどちらも同じ

    • イヤーマフあり。人が入ってくるタイミング(説明の声がして気になる)だけ着けたりしています。慣れていないと、圧迫されるのが辛いです。
    • スタッフの方を呼ぶボタンがあります。
    • スタッフの方は親切です。
    • 別の試験で混んでいたりするのは運次第です。

    英語の日本語訳について

    知られていることですが、AWS試験の日本語訳はおかしいときが頻繁にあります。誤訳もありますし、文自体が抜けていて、英文を読まないと正答できない場合もあります。変だなと思ったら英語を確認してみるのが良いかもしれません。上にも書いていますが、ピアソンVUEは日本語英語の切替が速いですが、PSIは遅いです。

    ちなみに、英語の文も間違えているときはあります。

    直前の申し込みについて

    • ピアソンは試験開始の24時間前まで申し込み可能です。(※月1回の日曜日。システムメンテナンスでアクセス不可 https://www.pearsonvue.co.jp/Test-takers/Outage-schedule.aspx)
    • PSIは試験の前々日(の24時?)まで申し込み可能。前日では申し込めないようです。(追記2021年6月。24時間前まで申し込めるようになったようです)

    試験中の服装

    大阪テストセンターでは、試験中に服を脱いだり着たりしてはいけない、と言われました。寒かったらブランケットを貸してくれるそうです。実際のところ、空調は特に気になりませんでした。(言われるまでは知らずに着たり脱いだりしていたのですが・・・厳しくなったのかも) 

    試験中のトイレ

    • ピアソンの試験中に1度トイレに行きましたが、ボタンでスタッフの方を呼んで、普通に行かせてもらえました。
    • PSIの試験では、トイレ途中では行けないので事前に行くように、と確認がありました。(たぶん、言ったらいけると思いますが・・・)
    • どの試験場も同じフロアのすぐ近くにトイレがあります。トイレ大事です。

    試験中の休憩

    これは難しいような気がします(できるのかもしれないが)。AWSの公式トレーニング動画では、「試験が長いので、途中で席をはずしてストレッチをしたり、飲み物を飲んだりしましょう」と言っている場面がありますが・・・。

    試験結果の通知

    合否はその場で判りますが、点数は後からメールで通知が来て、認定コンソールから確認できるようになります。午前中に受験すると、翌日の朝4時、5時くらいにそのメールが来ます。(ネットの情報によると夕方に受験すると、翌々日の朝にメールが届くようです)。2021年5月末に受検したら、午前中に受検すると当日の夕方にバッジとスコアレポートが来ました。試験プラットフォームにもよるかもしれません。

    ちなみに、合格時は、試験当日にオンラインの認定バッジの案内メールが先に来ます。


    模擬試験について

    模擬試験の結果は受験後30分くらいでメールで届きます。


    バウチャーについて

    AWS認定試験に合格する度に、次回使えるオンラインバウチャー(クーポン)が貰えます。模擬試験が無料、本試験が50%オフです。このときの模擬試験はPSIでしか申し込めないです。本試験はVUE、PSIどちらでも申し込めます。

    ベータ試験

    ベータ試験ではもともと50%オフなので、バウチャーは使えませんでした。

    ===

    AWS受験メモ






    2020年10月22日木曜日

    Gmailのアイコンが変わった

    2020/10/22に、別タブを開いたらアイコンが変わっていたのでスクリーンショットとりました。


    Before





    After

    Eric Sink on the Business of Software 革新的ソフトウェア企業の作り方

    気になる部分を引用。 

    私達が新製品のアイデアについてその可能性を議論するとき、それは売れるか売れないかのどちらかだと考えやすい。しかしマーケットはそんなふうになっているわけではない。私達は「みんなこの製品を買うだろうか?」と聞くのではなく、「どれだけの人がこの製品を買うだろうか?」と聞くべきなのだ。この違いはとても重要だ。


    私が言いたいのはマイクロISVは本業を続けながらでも始められるということだ。ここでもまた、バージョン1.0をすごく焦点を絞ったものにするということが鍵になる。


    教訓:契約はすべて弁護士にレビューしてもらう必要がある。例外はない。


    会社にいて欲しいのは、プログラマ(コードを書くことに特化した人)ではなく、必要なのは"開発者"(製品の成功のためにたくさんの面で貢献する人)なのだ。


    顧客対象がアーリーアダプタから実務家への移行がキャズムがある。実務家に製品をうまく売り込もうと思うなら、キャズムを超える必要がある。


    実務家は互いに他の人が買っているのを見るまで買わない。鍵となるのは、切羽詰まった実務家を見るけることだ。ムーアの言葉で言うなら「苦しんでいる実務家」だ。彼らは問題を抱えており、その解決を切実に求めている。実際、あまりに切実に解決を求めるあまり、実務家仲間の習慣に反して新しい製品を最初に試す。この「苦しんでいる実務家」と特別な関係を結ぶ必要がある。本当はベンダから買いたがるが、あなたの製品を買うという選択をする。あなたの製品がキャズムを超える後押しをしてくれる。だからあなたは彼らを特別に扱う必要がある。彼らが満足するまでやめないこと。


    あなたの製品は競合の製品と何が違っているのか?この質問にはごく短い答えがあってすぐに答えられる必要がある。ひとつ重要な警告をしておくと、もし主たる差別化要因が価格だというのなら、考え直した方がいい。差別化要因というのは極めて重要なものであい、低価格を主要な差別化要因とするなら、よく踏みならされた失敗への道を歩むことになる。

     

    2020年10月5日月曜日

    Ubuntu20.04 で再起動フリーズ。blk_update_request: I/O error

    追記2021/10/22

    初めて再起動が何も問題なくできました。アップデートで解決したのかもしれません。

    ーーー

    Ubuntu20.04 で、再起動すると起動しなくなってフリーズしてしまいます。起動しようとしてそうだけど、ずっと止まっていることもあります。

    とりあえず回避方法

    ・再起動はNGで、シャットダウン→起動の方が成功しやすい 

    ・さらに失敗(フリーズ)したら、電源長押しでシャットダウン→起動する を繰り返す


    ---

    出ていたエラーメッセージ


    blk_update_request: I/O error, dev sbd, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0

    Buffer I/O error on dev sbd, logical block 0, async page read 


    フリーズから強制終了して起動したら(とりあえず)復旧

    電源長押しでシャットダウンしてから起動して、無事復旧しました。



    考えられる原因?

    (blueman のエラーが出ていましたが、コピペメモし忘れた。20.04ではこの部分にエラーが出ているらしい)

    直前にUpdateをする/しないは関係なくフリーズしていました

    SSD、HDDをUSBに挿しっぱなしだったこと→関係なさそう

    HDDディスクの劣化(3年半くらいたっている)→??


    -- 調べた--

    メディアのブロックが書き込めないエラーで、

    ディスク破損・接続問題・ブロックが涸渇して小さい領域が使われてしまった?などが理由

    https://serverfault.com/questions/866109/centos7-buffer-i-o-error-on-dev-sda-logical-block-xxxxxxxxx-lost-async-page


    別の古いPCでは再起動の問題が起きない

    古いノートPC(レッツノートR8)にもUbuntu20.04を入れているのですが、再起動に関しては問題ありません。このノートには、Bluetooth、Wi-Fiが付いていません。ハードウェア的な問題なんでしょうか。

    2020年9月30日水曜日

    Postgresの要求スペックに応じたconfigを計算してくれるサイト

    https://pgtune.leopard.in.ua/#/

    例えばこんな感じで計算してくれます。


    ax_connections = 10

    shared_buffers = 512MB

    effective_cache_size = 48GB

    maintenance_work_mem = 2047MB

    checkpoint_completion_target = 0.7

    wal_buffers = 16MB

    default_statistics_target = 100

    random_page_cost = 4

    work_mem = 554871kB

    min_wal_size = 1GB

    max_wal_size = 2GB

    max_worker_processes = 8

    max_parallel_workers_per_gather = 4


    2020年9月28日月曜日

    マイコンリンク集



    よく分かる! シリアル通信基礎講座

    https://lab.fujiele.co.jp/articles/8191/


    Adafruit Tutorial 良い

    https://learn.adafruit.com/adafruit-huzzah-esp8266-breakout/using-arduino-ide


    ESP8266公式のドキュメントUDP

    https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/udp-examples.html


    ESP-WROOM-02を2台使って通信してみる

    3部作になっている

    http://discexuno.wp.xdomain.jp/arduino/esp-wroom-02_client/


    ESP-WROOM-02でLチカとWi-Fiの動作試験をする(3)

    詳しい

    https://synapse.kyoto/hard/ESP-WROOM-02_blink/page003.html


    第34回 Arduinoマイコンとしても使える小型WifiモジュールESP-WROOM-02を使ってみる(Arduino利用編)

    https://deviceplus.jp/hobby/entry034/


    ESP-WROOM-02

    めちゃくちゃ丁寧で詳しい

    https://ht-deko.com/arduino/esp-wroom-02.html


    [Solved] ESP8266 WiFI.h fatal error

    ESP8266WiFi.h not ESP8266WIFI.h 大文字小文字の問題

    https://community.blynk.cc/t/solved-esp8266-wifi-h-fatal-error/1191/9


    Arduinoで電流・電圧(INA219)の測定をする 自作のいろいろ

    https://garchiving.com/current-voltage-measurement-with-arduino/


    A Beginner's Guide to the ESP8266

    https://tttapa.github.io/ESP8266/Chap01%20-%20ESP8266.html



    電流電圧測定チップINA226をArduinoでライブラリを通して使う方法

    https://asukiaaa.blogspot.com/2019/10/ina226arduino.html


    AmbientとArduino ESP8266でマイコンの消費電流モニターを作る

    バッファとかの話がよさそう

    https://ambidata.io/samples/current/current-logger/


    サイレックス

    Bluetoothのはなし(1)

    https://www.silex.jp/blog/wireless/2012/09/bluetooth1.html



    「技適マーク」がない機器の日本国内での利用が一部認められる件について

    https://techlog.iij.ad.jp/archives/2689



    Bluetoothによるシリアル通信

    https://fabkura.gitbooks.io/arduino-docs/content/bluetooth.html


    Arduino講座 1000円で作れる簡易USBオシロスコープ

    https://sites.google.com/site/memorandumjavaandalgorithm/arduino-jiang-zuo-jian-yioshirowo-shittemiyou


    電力計測機器の自作

    https://sites.google.com/a/gclue.jp/ble-docs/dian-li-ji-ce/dian-li-ji-ce-ji-qino-zi-zuo



    “Bad request” error (HTTP) awhile posting to PHP server using Arduino and ESP8266


    / がなくてエラー


    https://arduino.stackexchange.com/questions/50760/bad-request-error-http-while-posting-to-php-server-using-arduino-and-esp8266 

    2020年9月22日火曜日

    メモ用アプリを選ぶ件

    ノートアプリを検討しています。今はバラバラにいろいろ使っています。PCでメモしてモバイルでも見れて、量が増えてもよいというもので、無料のものが良いのですが。

    3大ノートアプリ?をざっくりいうと

    EverNote。無料の場合、月間の制限が来ると使えなくなる。History機能が無料では使えない。

    OneNote 起動が遅すぎる。もっさりしている。

    GoogleDocument 複数のファイルをメニューで表示できない(画面遷移しないと見れない)



    希望

    ・使いやすいこと。速い、操作性がよいこと

    ・画像は少なくテキストメイン

    ・PCメイン。クラウドで同期してモバイルでも使えること

    ・消してしまってもHistory機能で復活できること

    ・無料


    3つのアプリの機能まとめ


    特徴

    Evernote

    OneNote

    Google Document

    軽量

    ×遅い

    起動時間

    数秒

    〜30秒

    数秒

    History機能

    有料

    無料

    無料

    検索・置換

    ×

    アプリの使いやすさ

    使いやすさ

    メニュー表示

    △操作性悪

    ×できない

    × ブラウザでは

    可能

    可能

    有料時

    年6,000円、

    upload制限60MB無

    年10,000円/office、Webアプリが使える

    常に無料

    その他


    Ctrl+C,Vできない




    今の所の結論
    ・Googleがよいですかね・・・
    検討の余地あり
     Evernote課金すれば一番使いやすいのですが。年3000円ならするかも。
    ・EvernoteのHistoryを自分でバックアップしておけばいいのでは??たぶん面倒くさい
    ・VSCodeで編集してGitで組み合わせればよいのでは?VSCodeは使いやすいのでこれが無難か?Githubだと編集はできるがしやすくはない。
    ・VSCodeで編集しておいてバックアップはGoogleDocumentにすればいいのでは?これで同期できれば、モバイルでも編集しやすいかも。

    2020年9月21日月曜日

    AWS TutorialとWhitepaperのメモ


    やったチュートリアル、読んだホワイトペーパーについて書きます。

    AWS Organizationのチュートリアル

    ・組織、OUやメンバーアカウントを作ったりする
    ・OUやメンバーが作られたときにCloudWatchで検知、Lambdaでログを書く。CloudWatchからSNSに通知してメール発信。


    Codebuildのチュートリアル

    ・java のビルドをする
    ・S3を2つ作る(input, output)


    10minites hands-on Build a Basic Web Application


    Amplify 
    API gateway 
    Lambda 
    DynamoDB



    CodeCommitのチュートリアル


    CodeCommitでレポジトリを作ってファイルをアップロード、差分を見る、プルリクエスト出す

    https://docs.aws.amazon.com/codecommit/latest/userguide/getting-started-cc.html#getting-started-cc-create-repo


    UdemyのCotnito handson


    Cognito User pool を流れ通りに作るだけでOK
    カスタムで作るを選ぶと、何が設定できるかなどを見れる
    パスワードの強さなどを設定
    ログイン成功時にリダイレクトされるページを指定できるが、tokenとかは出てこない


    Running Containerized Microservices on AWS

    コンテナというよりも、マイクロサービスの粗結合について書いてある。

    https://d1.awsstatic.com/whitepapers/DevOps/running-containerized-microservices-on-aws.pdf

    国勢調査の回答はUbuntuではできない

    国勢調査のオンライン回答は、Ubuntuではできないようです。まぁ当たり前かもしれませんが。Yahoo Browserというのが採用されて食い込んでいるのがちょっとおもしろいですね。 




    Python ユニットテストのテンプレート

    ユニットテストのテンプレートです。
    ・testedpy.py はテストされる関数のあるpy
    ・unittest_py.py はユニットテストをする側
    この2ファイルは同じディレクトリにある。

    実行は
    python3 unittest_py.py -v

    -v で verbose

    ---
    testedpy.py
    # required to use in function
    class OutOfRangeError(ValueError):
        pass
    
    # if needed, write variable used in tested_func
    
    
    # input n, return result
    # Test result is as expected.
    # Test n is as expected.
    def tested_func(n):
        """what this func does"""
        if XXXX == XXXX:  # condition with n
            raise OutOfRangeError("about input n, why this func fail and what should be")
    
        result = ""
        """some calculation"""
    
        return result
    unittest_py.py
    """
    class arg MUST be (unittest.Testcase)
    
    function name MUST start from test_...
    
    self.assertRaises() for bad input
    
    self.assertEqual() for expected results
    
    unittest use .py name and funcname to get expected result
    result = testedpy.tested_func(integer)
    """
    
    import unittest
    
    import testedpy  # .py to be tested
    
    # Test n for testedpy.tested_func is as expected.
    class XxxxBadInput(unittest.TestCase):
        def test_xxxx(self):
            """explanation why this test fail"""
            self.assertRaises(testedpy.OutOfRangeError, testedpy.tested_func, xxxx)
    
    # Test result from testedpy.tested_func(n) is as expected.
    class KnownValues(unittest.TestCase):
        known_values = (
            """(integer, result_known)"""
        )
    
        def test_tested_func_known_values(self):
            """tested_func should give known result with known input"""
            for integer, result_known in self.known_values:
                result_from_func = testedpy.tested_func(integer)
                self.assertEqual(result_known, result_from_func)
    
    
    if __name__ == "__main__":
        unittest.main()

    2020年9月20日日曜日

    Powershellでハッシュを見て同じファイルがないかを確認

    ついつい同じファイルを別のディレクトリに保存してしまうので、整理のために確認することにしました。

    Powershellの get-filehash (> Powershell 4) を使います。結果はcwdのfilehash.csvに保存しています。


    PS C:\Users\...\python> dir | Get-FileHash -Algorithm {MD5}|Select-Object -Property Path, Hash | Export-Csv -Encoding utf8 .\filehash.csv


    -Algorithm {MD5} でハッシュアルゴリズムを選んでいます。

    デフォルトはSHA256 なのですが、ファイルの同一性だけを見たかったのと時間と出力の重さを考えてMD5にしました。MD5:128bitとSHA256:256bitの違いです。


    これで各ファイルに対してハッシュ値が得られます。あとは同じハッシュがないかを探せばよいです。

    その後はPythonで処理しています。Powershell側で同一の検索などもできると思うのですが・・・。

    注意としては、バックアップファイルは同じハッシュ値を持っています。例:jupyter ipynb_checkpoint


    2020年9月18日金曜日

    ファイルの最終更新時間をPythonで出力する

    import glob

    import os

    import time


    file = glob.glob('.*')[0]


    # filename

    print(os.path.basename(file))


    # os.path.getmtime()  # last modified time

    print(os.path.getmtime(file))


    # time.ctime() UNIX時間から変換する

    print("last modified: {}".format(time.ctime(os.path.getmtime(file))))


    """

    .ipynb_checkpoints

    1600315202.9459374

    last modified: Thu Sep 17 13:00:02 2020

    """

    Jupyter(IPython)で表示される数字の桁数を変える

    Jupyterで小数点以下の数字の表示桁数を変えます

    デフォルト 16桁

    numpy 8桁

    import numpy as np


    # 16桁

    >>> 1/3

    0.3333333333333333


    # 8桁

    >>> np.array([1.0/3])

    array([0.33333333])


    # マジックコマンドで変えます。

    # 通常の数字もnumpyの数字も変わります

    # 3桁にします

    >>> %precision 3

    '%.3f'


    # 3桁

    >>> 1/3

    0.333


    # 3桁

    >>> np.array([1.0/3])

    array([0.333])


    # np.set_printoptionsでは、npに対して変化します。

    # 5桁にします

    >>> np.set_printoptions(precision=5)


    # 3桁のまま

    >>> 1/3

    0.333


    # 5桁になります

    >>> np.array([1.0/3])

    array([0.33333]) 

    Visual Studio CodeからGoogle Driveが使えるExtension

    Google Drive™ for VSCode というエクステンションを使ったときのメモ。

    VSCodeからGoogleDriveにファイルのアップロード、ダウンロードできる。※ファイルが自動的に同期できるわけではないです。


    2020年7,8月にできたエクステンションで、9月18日の時点で990インストールでした。

    公式の説明はここ https://github.com/GustavoASC/google-drive-vscode

    GoogleDriveの設定は説明にあるようにここにアクセス

     https://developers.google.com/drive/api/v3/quickstart/nodejs

    Enableを押す

    名前はQuickStartになっているが変えてもよさそう

    Desktop app になっているのを確認 Create をクリック

    認証情報をjsonでダウンロードする(credential.json)

    ---

    VScodeのコマンドペレットでConfigurationを選択

    credential.jsonをアップロードする

    ブラウザが開いてOathの認証ページになる。

    認証すると、

    「このコードをコピーし、アプリケーションに切り替えて貼り付けてください。」というコードが出るので、VSCodeのウィンドウに貼り付ける。


    これでOK。


    使ってみた感じ、もともとあったGoogleDriveのディレクトリやファイルは認識できません。

    コマンドペレットView: Show Google Drive

    でツリーが出ます。あとはGoogle Driveコマンドでからアップロードしたりはできますが、コマンドを2回打たないと実行されないような・・・??

    VSCodeからGoogleDriveにファイルのアップロード、ダウンロードはできますが、ファイルが自動的に同期できるわけではないです。

    結局、継続的には使っていません。今後の発展に期待です。



    2020年9月9日水曜日

    PythonのことでStackOverflowで調べた メモ

    Pandasでリストをcsvに保存する。

    result = [,,,,]

    リストからDataFrameにしてto_csvで保存する。そのとき日本語がまじるときはencoding="shift-jis"にする。cp932はNG。

    pd.DataFrame(result).to_csv("result_4.csv", header=None, index=None, mode='a', encoding="shift-jis")


    re.escapeで自動でエスケープしてくれる。


    re.escape("(test)")

    > '\\(test\\)'

    "." などもエスケープしていまい、選択できない。

    カッコだけをエスケープするには

    re.sub(r"([()])", r"\\\1", "(test)")

    全角の括弧に対応するには、[]の中に全角の括弧()を増やせばよい

    re.sub(r"([()()])", r"\\\1", "((test))")


    データフレームから1行取り出してタプル

    tuple(df.iloc[0].tolist()) としてタプルにすると、numpy属性が残っていて、

    ProgrammingError: can't adapt type 'numpy.int64' 

    というエラーがでる

    tuple(df.iloc[0].values)

    ならOK


    JupyterでNot trustedという表示が出る


    特に気にすることはない。

    Trustボタンを押せばいいらしい。任意のコードが実行出来る状態を防ぎたいようだ。

    個別のファイルに対してjupyter trust ..ipynbと実行すると回避できる。

    https://stackoverflow.com/questions/44943646/jupyter-notebook-not-trusted


    Pythonでvirtual環境を消すのはディレクトリを消す

    venvに消すコマンドはないということです。直接ディレクトリを消せばOK。

    https://stackoverflow.com/questions/11005457/how-do-i-remove-delete-a-virtualenv

    2020年9月7日月曜日

    PCがスリープにならないように小刻みに動くマウスのダミーを使う

    PCが スリープやスクリーンセーバー移らないようにマウスをちょこちょこ動かすためのデバイスを買いました。DigiSparkのデバイスで、mouse jiggler またはwigglerと呼ばれています。

    1個500円くらいで売られています。

    http://digistump.com/products/1

    USBに指すだけで動作します。Windows10では特に問題ありませんでした。LinuxではUSBが認識されず断念しました(あまり調べてませんが)。

    Arduinoでの準備はこちらの公式を参考に

    https://digistump.com/wiki/digispark/tutorials/connecting

    Windows10でインストールするとIDE上に「信頼されていないコントリビューションです。スクリプトの実行をスキップしています。 C:.../.../XXXX.bat」と出ます。そのフォルダまでいってbatをダブルクリックするとデバイスドライバのインストール画面になるので、インストールします。


    こちらのコードでは待ち時間を100秒にしています。これはスクリーンセーバーの待ち時間に合わせればよいかと。

    // DigiMouse Mouse Wiggler
    // Originally wrote by Jeff White (jwhite@white.nu)
    // MIT License
    // to write
    // 1. Start without inserting Digispark.
    // 2. When you see "Please plug in the device ... " message, insert Degispark.
    // setting: set "mode" 0 or 1
    // see http://digistump.com/wiki/digispark/tutorials/modelbi2c
    #include "DigiMouse.h"
    unsigned int mode = 1; //1 or 0: LED is connected pin0 or pin1 depend on model
    unsigned int moveamount_px = 1;
    unsigned int time_led_flash = 100; // ms
    unsigned int time_waitnext = 1000000; // ms
    void setup() {
    pinMode(mode, OUTPUT);
    DigiMouse.begin();
    }
    void LEDon() {
    digitalWrite(mode, HIGH);
    }
    void LEDoff() {
    digitalWrite(mode, LOW);
    }
    void loop() {
    LEDon();
    DigiMouse.moveX(moveamount);
    DigiMouse.delay(time_led_flash);
    DigiMouse.moveX(-moveamount);
    LEDoff();
    DigiMouse.delay(time_waitnext);
    }

    WSLでUbuntuとWindowsで相互にフォルダにアクセス

    WSLでUbuntuからWindowsのフォルダにアクセス

    /mnt を探します

    $ cd /mnt/c/User/..

    とすればOK

    WSLでWindowsからUbuntuのhomeにアクセス

    C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.Ubuntuon_some_version\LocalState\rootfs

    にある。

    バージョンによってpathが変わっているようです。

    https://superuser.com/questions/1083962/windows-linux-subsystem-accessing-files-outside-of-ubuntu

    https://silatori.hatenablog.com/entry/2018/07/23


    画像ファイルのサイズとDPIのことを調べた

    サイズ  印刷時の実サイズ。ディスプレイでは解像度で変わる。

    DPI(dot per inch )  1インチににある点(ドット)の数。100dpiであれば1インチに横100点あることになる。


    ファイルのサイズは、保存したときからは見ることができない??←できるはず

    プロパティから見ることができるDPIは異なっている可能性がある。

    ★Pillow でDPIが出ないときはそもそも設定されていない

    ペイントではDPIが設定されている(Windowsでのプロパティ詳細も同様)のにPillowで

    im =Image.open('test.jpg')

    im.info

    {'jfif': 257, 'jfif_density': (1, 1), 'jfif_unit': 0, 'jfif_version': (1, 1)}

    となってDPIが出ないときがあります。これはjfif_unit = 0 はDPIが情報としてないことを示しています。

    一方、ペイントでは、画像に情報がなくとも自動でDPI 96 で計算したりするようです。


    https://github.com/python-pillow/Pillow/issues/2524

    https://github.com/python-pillow/Pillow/issues/2912


    2020年9月3日木曜日

    aws cliのv1をアンインストールしてv2をインストールする(Linux)

    Ubuntu20.04でやりました。


    aws cli v1を使っていたら、v2でないと出来ないコマンドがチュートリアルに出てきたのでアップデートしました。


    まず、v2のインストール説明によると、

    AWS CLI versions 1 and 2 use the same aws command name. If you have both versions installed, your computer uses the first one found in your search path. If you previously installed AWS CLI version 1, we recommend that you do one of the following to use AWS CLI version 2:

    https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-linux.html

    v1とv2を共存させると、Pathを順に見るから面倒で、v1は消すのをおおすすめしますよ、とのこと。


    こちらのv1の説明で、

    $ sudo rm -rf /usr/local/aws

    $ sudo rm /usr/local/bin/aws

    https://docs.aws.amazon.com/cli/latest/userguide/install-linux.html


    が紹介されていましたが、2行目は、自分の環境では /usr/local/bin/aws ではなくて、/usr/bin/awsでした。

    あとはv2のインストールをそのままやりました。


    curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"

    unzip awscliv2.zip

    sudo ./aws/install

    これら3つを実行すると

    You can now run: /usr/local/bin/aws --version

    と出るのでやってみますと、

    aws --version
    aws-cli/2.0.45 Python/3.7.3 Linux/5.4.0-42-generic exe/x86_64.ubuntu.20
    と出ました。確かにインストールできています。 

    2020年8月28日金曜日

    デジタルマルチメーター KAIWEETS 4000カウント を買った


    KAIWEETS 4000カウント テスター デジタルマルチメーター AC|DC電流 AC|DC電圧 静電容量 抵抗 ダイオード 導通測定 真の有効値 自動レンジ NCV機能付き 日本語説明書 三年保証期間付き

    2299円 から7%引きで実質2138円

    Amazonへのリンク ・・・2020/08/28現在売り切れています。


    箱です。意外に小さいんだなと思いました

    保護フィルムがいちおう貼ってあります。本体サイズは実測で、幅7.5 x 高さ15 x 厚み5 センチ

    スタンド。上部にLEDライトがあります

    スタンドを上げたところ。ネジを外すと電池ボックスが見えます

    プローブつけたところ

    裏側にセットできます

    先端がカバーから出ているのが気になります

    電池は単4を二本です

    2020年8月27日木曜日

    Raspberry Piで最初にやること

    RaspberryPi新規立ち上げ時にやること。自分用メモ。

    (ネットワーク設定はできているとする)
    (python3は入っている)

    まずupdate, upgrade


    sudo apt-get update
    sudo apt-get upgrade
    (けっこう時間かかるかも)

    Anti-virus

    sudo apt-get install clamav clamav-daemon

    VIM

    sudo apt install vim-gtk3

    # githubで保存している.ファイル, rc/ を取ってくる

    # HOME に .ファイルを置く
    # .vimrc
    # .gvimrc
    # .flake8

    # HOMEに.vimディレクトリを作る

    $ mkdir .vim/

    # .vim/rc/.. を置く

    フォントを大きくする

    ~/.gvimrc にこれを
    set guifont=Mono\ 14
    (スラッシュ・スペース14 なので注意。 help guifont)

    VIMカラースキーム設定 molokai

    # ~/.vim/colorsにmolokai.vimを追加し、~/.vimrcを設定する。

    $ mkdir ~/.vim/colors

    $ git clone https://github.com/tomasr/molokai

    $ mv molokai/colors/molokai.vim ~/.vim/colors/

    # ~/.vimrcを下記のように設定する。
    #
    # syntax on
    # colorscheme molokai
    # set t_Co=256

    # Vim Python formatting
    sudo pip3 black
    sudo pip3 Flake8


    molokai設定はこちらのコピペ
    http://pyoonn.hatenablog.com/entry/2014/10/04/225321


     VSCode 

    重いかもしれない。3B +では重すぎて使わず。


    その他


    Samba
    他のPCとフォルダ共有