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を停止状態から削除する

停止状態から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秒にしています。これはスクリーンセーバーの待ち時間に合わせればよいかと。

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とフォルダ共有