Skip to main content

Posts for year 2021 (old posts, page 1)

route53

aws command

aws route53 list-hosted-zones
aws route53 get-hosted-zone --id /hostedzone/xxxxxxxxxxxxxxxxxxxxx

aws route53 list-resource-record-sets   --hosted-zone-id /hostedzone/xxxxxxxxxxxxxxxxxxxxx --query "ResourceRecordSets[?Name == 'example.example.net.']"
aws route53 test-dns-answer --hosted-zone-id /hostedzone/xxxxxxxxxxxxxxxxxxxxx --record-name "example.example.net" --record-type "A"

aws route53 change-resource-record-sets  --hosted-zone-id /hostedzone/xxxxxxxxxxxxxxxxxxxxx --change-batch file://create.json
aws route53 get-change --id /change/xxxxxxxxxxxxxxxxxxxx
aws route53 change-resource-record-sets  --hosted-zone-id /hostedzone/xxxxxxxxxxxxxxxxxxxxx --change-batch file://delete.json
aws route53 get-change --id /change/xxxxxxxxxxxxxxxxxxxx

create.json

{
  "Changes": [
    {
      "Action": "CREATE",
      "ResourceRecordSet": {
        "Name": "example.example.net",
        "Type": "A",
        "TTL": 3600,
        "ResourceRecords": [
          {
            "Value": "xxx.xxx.xxx.xxx"
          }
        ]
      }
    }
  ]
}

delete.json

{
  "Changes": [
    {
      "Action": "DELETE",
      "ResourceRecordSet": {
        "Name": "example.example.net",
        "Type": "A",
        "TTL": 3600,
        "ResourceRecords": [
          {
            "Value": "xxx.xxx.xxx.xxx"
          }
        ]
      }
    }
  ]
}

python sample script

#! /usr/bin/python2
import boto3
import time

client = boto3.client('route53')
zones = client.list_hosted_zones()

for zone in zones['HostedZones']:
    id =zone['Id']
    name = zone['Name']
    #print(client.get_hosted_zone(Id=id).get('HostedZone'))
    for set in client.list_resource_record_sets(HostedZoneId=id).get('ResourceRecordSets'):
        print(set)
    #action = 'CREATE'
    action = 'DELETE'
    address = 'xxx.xxx.xxx.xxx'

    batch = {
        'Changes': [
            {
                'Action': action,
                'ResourceRecordSet': {
                    'Name': 'example.%s' % name,
                    'Type': 'A',
                    'TTL': 3600,
                    'ResourceRecords': [
                        {
                            "Value": address
                        },
                    ],
                }
            },
        ]
    }
    response = client.change_resource_record_sets(
        HostedZoneId=id,
        ChangeBatch=batch
    )
    print(response)
    responseid = response['ChangeInfo']['Id']
    status = response['ChangeInfo']['Status']
    while ( status != 'INSYNC'):
        response = client.get_change(Id=responseid)
        status = response['ChangeInfo']['Status']
        time.sleep(30)
    else:
        print(response)

cloud formation sample stack

aws cloudformation validate-template --template-body file://route53.yml
aws cloudformation create-stack --template-body file://route53.yml --parameters file://parameters.json --stack-name route53test
aws cloudformation describe-stack-events --stack-name route53test
aws cloudformation list-stack-resources --stack-name route53test
aws cloudformation delete-stack --stack-name route53test

route53.yml

Parameters:
  HostedZoneId:
    Type: String
  Domain:
    Type: String
  Address:
    Type: String
Resources:
  myDNSRecord:
    Type: AWS::Route53::RecordSet
    Properties:
      HostedZoneId : 
         Ref: HostedZoneId
      Name:  
        Fn::Join: 
            - '.'
            - - 'example'
              - !Ref Domain
      ResourceRecords:
      - Ref: Address
      TTL: '3600'
      Type: A

parameters.json

[
  {
      "ParameterKey": "Address",
      "ParameterValue": "xxx.xxx.xxx.xxx"
  },
  {
      "ParameterKey": "HostedZoneId",
      "ParameterValue": "xxxxxxxxxxxxxxxxxxxxx"
  },
  {
      "ParameterKey": "Domain",
      "ParameterValue": "example.net"
  }
]

Stay at home

不要不急の外出自粛が求められている中、他の多くの方と同様、自宅で過ごす時間が長くなっている。

おかげで通勤が不要になり、通勤時間にとられていた時間が自分の好きに扱えるようになった。 同時に、通勤で消費していたカロリーの消費機会が失われてしまった。

そのせいもあり、この春の人間ドッグで、見事にメタボ検診に引っかかってしまった。 内臓脂肪を減らし、血圧を下げ、血中コレステロール濃度を下げ、腹囲と体重を減らしていく努力が、今の自分には切実に求められている。 そのためには食後血糖値上昇の山を低くし、カロリー収支をマイナスにし、脂肪を減らし筋肉量を増やしていかなくてはならない。 具体的な取り組みは以下。

  • 運動: 朝食後、始業時間までの間のウォーキング。
  • 食事: 夕食では野菜を多くとり、炭水化物を減らす。脂質を減らす。朝昼晩の三食。
  • できていないこと: 日次の体重測定

保健指導員におだてられながら、取り組みを続けていきたい。

そうは言っても、自宅でくつろぐ時間は何物にも代えがたい。そんなこんなで自宅のメディア視聴・聴取環境の充実をはかっている。

spotify

Linuxデスクトップで常時Spotifyアプリを立ち上げておいて、AndroidタブレットにインストールしたSpotifyアプリからコントロールするという使い方をしている。 音声はアンプを接続したRaspberry pi に Pulseaudio で飛ばしている。(スマホのスピーカーでずっと聞いていると耳が痛くなる。大きなスピーカーだと大丈夫。)

サブスク購入していないが、タブレット・デスクトップからの聴取の制限解除 があったおかげで、垂れ流しBGM としてとても使いやすくなった。 Spotifyは日本上陸前から待ちわびていて、上陸後すぐくらいから使ってきた。このアップデートはまじで嬉しい。CM有り、シャッフル必須であっても、無料で利用できるのは、すごく助かる。

minidlna

蓄積しているデータを何らかの upnp/dlna クライアントで再生できるように。

shairport-sync

オープンソースの AirPlay サーバ。iPhone のアプリの音声を大きなスピーカーで聞きたいときに。

Fire TV Stick 4K

Amazon Prime Video に加入していないし、4K ディスプレイは持っていない。けど、便利に使っている。 アプリストアからいろんなアプリを入れられる。Android系なので、アプリもそこそこそろっており、いろいろ使える。

ぶっちゃけ Youtube 見るのに最強。

Work from home

不要不急の外出自粛が求められている中、他の多くの方と同様、自宅で勤務する日々が続いている。

PCは趣味の一つではあるものの、趣味のためにあれこれ購入するのもためらわれ、これまで自宅の作業環境はあまり整っていなかった。 そのため、在宅勤務での作業効率はあまりよくなかった。これ幸いと?仕方がないので?これまで買わずに我慢していたものをいくつか買いそろえた(自腹)。

モニター

仕事で使っているのは、貸与されてる13.3型ノートPC。FHD対応だが、それだと私には字が小さく読みにくいため解像度を1600x900に設定して使っている。 会社では比較的大きな外部モニターを接続して使用していたのだが、自宅にあるのは15.6インチ 1366x796という小さなモニターしかなかった。 趣味のコンピュータの管理ではこのモニターで対応することができていたが、仕事用としては不足だった。

これまでの突発的な在宅勤務ではこのモニターで凌いできたが、長期的に継続するとなると、もっと広いものでないと困る。

そこで購入したのが15.6型 IPS液晶のFHDモバイルモニター。VESA対応。

下記モニターアームを利用して、ノートPCと並べて使用している。13.3インチの 1600x900 と、15.6インチの1920x1080 は画素密度がかなり近いので、並べて使用していてあまり違和感があまりない。 貸与ノートPCはUSB Type-C非対応のため、HDMIとUSB(電源供給)の2本のケーブルで接続している。

聞いたことのない海外社製品で、初回購入時には不良品が届いた。いったん返品して再度購入したら、今度は問題なし。1年間使用してきて、今のところ問題は出ていない。

モニターアーム

ノートPC台が付属している、安いデュアルアームのモニターアーム。 ノートPCとモニターを左右に並べることができ、目線の高さまで上げることができ、浮かすことによって机上にスペースができる、一石三鳥グッズ。

安いので、あまり自由に調整することはできないけど、向きをあちこち動かす必要がないので特に困ることはない。これまでのところ、自分の用途では事足りている。

キーボード

メカニカル、ロープロファイル、リニア、87キーのキーボード。

ここのところ、デスクトップのキーボードもノートPCのものに近いパンタグラフのキーボードを使っていた。 メンブレンのものを含めて、安かろう悪かろうなキーボードを渡り歩いてきたので、使い心地のよいまともな外付けキーボードを使うのは、PC98xxの頃以来かもしれない。

US ASCII配列キーボードを試してもよさそうな方

これらにデメリットを感じない方

  • 日本語入力/ローマ字入力の切り替えが[半角/全角]キー一発ではなくなる
  • [無変換][変換][カタカナひらがな]キーが無い
  • ローマ字入力しかできず、かな入力ができない
  • [^][@][:] の入力に Shift が必要

これらにメリットを感じる方

  • [無変換][変換][カタカナひらがな]キーが無い代わりに、スペースバーが長い。
  • [半角/全角] の代わりに [`][‾] が割り当てられている
  • [`] [=] を Shift なしで単独で入力できる。
  • [']["]/[;][:][-][_] を Shift の有無で打ち分けることができる
  • [Backspace][Enter][Shift(R)] がホームポジションに近い

我々が日常利用するコンピュータのソフトウェアは米国で作られてきた。 そのため、USキーボードを使用すると、日本語キーボードだけを使用していては得ることができなかった、設計思想についての気づきを得られる。

  • C のポインタ演算子 [&][*] は隣のキー
  • vi の :コマンド は誤入力防止ではないか? (要Shift)

USキーボードの大きな欠点の一つに、かな入力ができないことがある。 日常生活していく上で、ASCII文字の入力は必須であり、キー配列を覚えないことには不便で仕方ない。 ASCII文字のキー配列を覚えれば、IMEのローマ字入力機能を利用して日本語を入力することができる。

ローマ字入力ができるなら、一定以上の速度が必要とならない限り、ひらがな入力は必須ではない。 ひらがな入力のためにはキー配列を覚えなければならず、学習コストが高い。 ひらがな入力に対するインセンティブやモチベーションが高くならないので、 ひらがな入力は少数派という状況はしばらく変わらないと思う。

(スマホネイティブ世代の入力事情は考慮していない)

USBオーディオインタフェース

大層なものではない。3.5mm4極ジャックのみで、ボリュームボタン、ミュートボタンがあるだけの簡易なインタフェース。

貸与ノートPCに直接イヤフォンマイクを繋げてWeb会議に参加すると、時々音声が聞きづらいと言われたことがあった。 Bluetoothのものも試したが、別の意味で音質の評判がよくなかった。

いつものイヤフォンマイクをこのオーディオインタフェースに接続して使用するようにしてからは、特に音質が悪いと言われることがなくなった。

ヘッドフォン

Web会議ではカナル型イヤフォンマイクを使用しているのだが、耳栓用途でずっとつけていると耳が痛くなるようになった。 そこで、耳をいたわるためにオーバーヘッドの昔ながらの形の安価なヘッドフォンを購入した。

有線とBluetoothに対応しているが、有線しか試していない。音質としては不満はない。カナル型イヤフォンとはちょっと違った感じ。

眼鏡とは干渉しないのだけど、長時間つけていると(頭が大きいから?)頭が締め付けられて痛くなってしまう。

ノイズ対策としては、あれこれ買って試すのではなく、ノイズを気にしない精神力を身に着けたほうが良いような気がしてきた。

WSL2 installation

I followed the document Windows Subsystem for Linux Installation Guide for Windows 10 My environment is Windows 10 Pro 20H2 OS build 19042.685

Run powershell.exe as administrator. Then enable the Windows Subsystem for Linux.

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

And enable Virtual Machine feature

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

Download the Linux kernel update package and install it. - WSL2 Linux kernel update package for x64 machines

Set WSL 2 as the default version

wsl --set-default-version 2

Install Linux distribution from Microsoft Store Then launch it.

I could not launch it for a long time because of bug of COMODO Internet Security shown at WSL2 Converstion Failed with Error: 0x80041002 COMODO released new version for fixing it

Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: xxxx
New password:
Retype new password:
passwd: 
password updated successfully
Installation successful!

$ uname -a
Linux xxxxxxxxxxxxxxx 4.19.128-microsoft-standard #1 SMP Tue Jun 23 12:58:10 UTC 2020 x86_64 GNU/Linux

$ cat /etc/debian_version
10.8

$ df -k
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sdb       263174212   280972 249455084   1% /
tmpfs            3161096        0   3161096   0% /mnt/wsl
tools          248559384 53031224 195528160  22% /init
none             3158696        0   3158696   0% /dev
none             3161096        4   3161092   1% /run
none             3161096        0   3161096   0% /run/lock
none             3161096        0   3161096   0% /run/shm
none             3161096        0   3161096   0% /run/user
tmpfs            3161096        0   3161096   0% /sys/fs/cgroup
C:\            248559384 53031224 195528160  22% /mnt/c

From next time, we can launch it with command 'debian'. Also we can launch it with wsl command on command prompt or powershell.

> wsl --list --verbose
NAME      STATE           VERSION
* Debian    Stopped         2
> wsl -d Debian
> wsl -d Debian -e uname -a

We can omit distribution name for the default one.

> wsl
> wsl -e uname -a

We can just execute bash shell or bash shell script as below.

> bash
> bash -c "echo uname -a > test.sh"
> bash -c "./test.sh"

export and import a distribution

> wsl --export debian d:\debian.tar.gz
> wsl --import mydebian d:\wsl\ d:\debian.tar.gz
> wsl --list -v

set new distribution as a default one and set default user.

> wsl --set-default mydebian
> wsl
# If the user does not exist in this distribution, you have to create it.
echo -e "[user]\ndefault=myUsername" >> /etc/wsl.conf
exit
> wsl --shutdown
> wsl

delete distribution

> wsl --unregister debian-work
> wsl --list -v

install docker in wsl2 debian environment

We can install newest release as https://docs.docker.com/engine/install/debian/ But I prefered to install from debian package

sudo apt update
sudo apt install --no-install-recommends docker.io
sudo service docker start
sudo service docker status

At this point, I could not start dockerd. I followed this flow https://github.com/microsoft/WSL/discussions/4872#discussioncomment-99164

sudo touch /etc/fstab
sudo update-alternatives --set iptables  /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
sudo service docker start
sudo service docker status

Succeeded to start dockerd.

sudo docker run --rm -it debian:bullseye-slim

resolve domain name lookup failure problem

This workaround resolve domain name lookup failure problem on WSL2 and docker container. https://github.com/microsoft/WSL/issues/4285#issuecomment-522201021

Add these lines in /etc/wsl.conf on your distribution

[network]
generateResolvConf = false

Then shutdown wsl2 and restart your distribution

> wsl --shutdown
> wsl --list -v

Recreate /etc/resolv.conf

$ sudo rm /etc/resolv.conf
$ echo "nameserver 1.1.1.1" > /etc/resolv.conf

Then shutdown wsl2 and restart your distribution again

> wsl --shutdown
> wsl --list -v

Confirm your setting and domain name lookup on your distribution and docker container.

$ cat /etc/resolv.conf
$ curl -I www.google.com