プレイヤーズ・ハイ

 雑多な日記

Mac のメンテナンス

僕の持っている MacBook Pro 15 インチ Mid 2015 に適用する前提で書いています.

僕のは El Capitan なんだけど,ずっと起動しっぱなしだと遅くなってくる気がして.詳細な原因は追っていませんが,できるだけ快適に使っていくための定期的な運用方法を考えてみました.おまけでトラブル・シューティングに関しても少しまとめました.

【目次】

マシン・パフォーマンスをできるだけ落とさないための Mac 定期運用

以下を週一回行うのが理想

  • セーフブート (色々なソフトウェア・キャッシュが削除される)
    • セーフブートのやり方は,(再)起動シーケンス中に shift キーを押しっぱなしにします.FileVault を使っていると2回ログイン画面が表示されることがあるらしいです.セーフブートすると画面の右上に赤い文字で Safe Boot と表示されます.
    • デメリットもあるかもなので注意してください.たとえば僕の環境ではディスプレイの解像度がリセットされました.これは大した問題じゃないけど他に大したものがあるかもしれません.
  • シャットダウン (根拠はないっちゃない.ただ一週間に一度は,機械ごと落としたいという気分的な問題だけ.再起動ではとおらないシーケンスもとおりそうだし.2度と起動しなくなるリスクもあるっちゃあるが,週に一度シャットダウンする運用を僕は選んだ)

だから,週に一度は,Time Machine バックアップ完了後に,シャットダウンして,セーフブートして,それからまたノーマルブート.

Mac のトラブル・シューティング

ハードウェア診断

  • ハードウェアの故障を疑う場合はハードウェア診断を行う.光学ドライブを内蔵しない MacBook Pro の場合,インターネットに接続された環境で、Mac OS X 起動時に option キーを押下しながら D キーを押下し続ける。地球儀のようなマークがでてきたら,ハードウェア診断に突入.

NVRAM クリアー

NVRAM に格納されている情報

- スピーカーの音量
- 画面の解像度
- 起動ディスクの選択
- 最近起きたカーネルパニックの情報 (存在する場合)
- タイムゾーン情報

これらが絡んでそうな問題は,NVRAM のクリアーで解決する,かも.

ちなみに NVRAM という名称は Intel Mac からで,PowerPC 時代は PRAM と呼ばれていたらしいです.

NVRAM クリアーのやり方

Mac OS X 起動時に command + option + P + R キーを押下し続ける.2回目のジャーン!でキーから手を話す.が,ジャーン!が鳴らない場合 (MacBook Pro Late 2016 は,鳴らないらしい) は最低 20 秒以上押し続ける.

最後の手段? SMC (システム管理コントローラー) のリセット

最後の手段?

かなり最後の手段っぽいので,実施前に必ず以下を参照のこと.実施方法もここに書いている.

support.apple.com

SMC リセットするしかないっぽい兆候

  • コンピューターの実行速度がかなり遅い.
  • 電源ボタンを押しても起動しない.
  • スリープからの復帰がおかしい.
  • バッテリーの充電ができない.
  • 電源アダプタを認識しない,など.

その他

Mac を快適に使うための小ネタを追記予定です.

  • Time Machine によるバックアップを常時走らせない.

などなど

以上

僕とスピンサーブ

ブログタイトルどおり,僕はスピンサーブが打てない.

ここで言うスピンサーブとは,硬式テニスの,いわゆるスピンサーブのことです(以下,テニス = 硬式テニスのことを指します.軟式は一回もやったことがありませんが,一度やってはみたい).

通っているスクールのコーチが,スクール生に向かって以下の問いかけをしていた.

「なんでサーブは2回打てると思う?」

正直,わかれへんくて,そして他の誰も分からなかった.

答えは,あらゆるテニスのショットの中で,サーブが一番むずかしいから,だそうです.

言われてみればたしかに,サーブは,打てる場所 (スタートポジション) も,あと,入れなければならないスペースも,他のどんなショットより限定されている.

ちょっと目からウロコだった(ってくらい,僕は何も考えずにテニスをやっていたわけです).

テニスコートの構造上,打ち下ろすタイプのサーブを打つには身長が2メートルくらい必要と言われています.

そんな人間はあまりいません.

ほんで,1本目のサーブはおもくそバコーンと打って入ればラッキーでもいいけど,セカンドサーブを相手に叩かれたくないなら,高確率で入る,かつチョンと押すような入れてけサーブではないサーブを打たなければなりません.それがスピンサーブです.もう少し具体的に言うと,ネットしないように,ネットぎりぎりではなくちょっと上をとおし,文字どおり (縦の) スピン回転をかけて,キャプテン翼のドライブシュートのようにグイっと下向きに曲げ,サービスエリアに沈めるサーブです.

あと,ラファエル・ナダルのフォアハンド・ストロークじゃないけど,ホントにスピンがかかっていると,跳ねたあとのバウンドが高くなって,慣れていないと打ちにくい.一部のプロの放つ本当にエグいスピンサーブは,洒落にならんくらい跳ねるので,力が入らない高いところリターンを打たされることになります.イズナーのスピンサーブがヤバかったかも.バウンド後ライジングで叩くのも難しく,センスや練習が要ります.でもぶっちゃけ,プロでも打つフォームでスピンサーブと分かるので,ああこれは跳ねるな〜と,事前に分かりますね.でも,どんな球種が事前に来るか分かる = 返しやすい,では必ずしもないですね(色々混ぜられるとミスさせられやすくなる).

スピンサーブの打ち方のイメージとして「ラケットヘッドをダウンさせ,背中から斜め前の上空に向けて振り出す」みたいなことが言われていて,要はボールに縦回転をかけるためにそういう感じで打つ,というのは文章では理解できるのですが,僕にはどうしても打てない.

僕がスピンサーブを打とうとすると,ほぼ百パーセント,変な回転のスライスサーブになる.

本当に変な具合に曲る.それはそれで打ちにくくて,いいのかもしれないが,スピンサーブを打とうとしているのに,スライスサーブになるんですよ.

それは屈辱以外の何物でもない(大げさ).

YouTube で,スピンサーブの打ち方動画みたいなのも結構みてて,その直後は,あそっかぁ,オレ打てるわスピンサーブ,とか思うのですが,いざ打つとまたスライスサーブになってる.

もう,この世には,生まれつき,スピンサーブを打てる人間と打てない人間の2種類が,運命的にはっきり決められているのか? と思いたくなるくらいです.

算数・数学が苦手,または外国語が苦手,みたいなコンプレックスに通ずるところも,あるのかもしれない(スピンサーブが打てるからと言って給料が上がったりはしないが).

しかし,物理的に正しくラケットをボールに当てれば絶対にスピンサーブは打てるはずで,当面それを目指してみようかなと思っています.

ちなみに,僕のテニスのレベルは,いわゆる初中級クラスで,フォアはまぁ普通.バックは片手も両手もいける,バックハンド・スライスは,浮いちゃうのと滑るのが半々くらい,ボレーは苦手意識なし,フラットサーブは (初中級レベルでは) むしろ上手い方と思っている,スマッシュは下手くそ気味 (単に練習不足の恐れあり) みたいな感じです.

サーブのフォームは,以前はおもいっきしフェデラーを意識していました.2016 年に一時期マレーにはまって,ステップインして,フォロースルーで左手が上にあがるフォームに変えました(左手はなんか自然にあがる).ジョコっぽいフォームでも打てるし,なんちゃってロディックフォームでも打てます.威力はヘボいですが.そして今,またフェデラーっぽいフォームに戻しています.ステップインしないやつ.

フォアハンド・ストローク速い人を見ると,すげえな,かっちょいいな,と思うんですけど,ちゃんとスピンサーブ打てる人は,もっと羨望の眼差しで見てしまうんですよね.

正しく努力して,グンッと落ちるスピンサーブを打てるようになり,あわよくばキックサーブも打てるようになり,そして,算数・数学への苦手意識もなくしていきたいと思っています(それはまた別の話).

【小ネタ】jid を使ってみた

jid は JSON をインタラクティブに掘っていくことができるツールです.

GitHub - simeji/jid: json incremental digger https://github.com/simeji/jid

環境

$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.2 (Maipo)
$ uname -r
3.10.0-327.28.3.el7.x86_64

jid のインストール

# cd /tmp
# curl -LO https://github.com/simeji/jid/releases/download/0.6.2/jid_linux_amd64.zip
# unzip ./jid_linux_amd64.zip
# cp ./jid_linux_amd64 /usr/local/bin/jid
# export PATH=$PATH:/usr/local/scala/bin

JSON を掘ってみる

以下の JSON ファイルを jid コマンドで掘っていきます.

{
  "aa": "2AA2",
  "bb": {
    "aaa": [
      123,
      "cccc",
      [
        1,
        2
      ]
    ],
    "c": 321
  }
}

JSON を echo しパイプで jid コマンドに渡します(以下のようにファイルから読み込むこともできます.$ jid < file.json).

$ echo '{"aa":"2AA2","bb":{"aaa":[123,"cccc",[1,2]],"c":321}}'| jid

使い方としてはざっくりと,

jid に JSON を食わせて,TAB と ENTER キーをペコペコ押していれば使い方が掴めると思います.

全キーマップは https://github.com/simeji/jid#keymaps

TAB キーを押下すると,掘っていける候補が出力されます.以下でいうと aa bb の部分です.

[Filter]> .
 aa bb
{
  "aa": "2AA2",
  "bb": {
    "aaa": [
      123,
      "cccc",
      [
        1,
        2
      ]
    ],
    "c": 321
  }
}

掘りたい候補がハイライトされた状態で ENTER キーを押下すると,その要素を掘っていけます.

(JSON に要素があれば) 更にドットキーを押下し,TAB キーを押下して掘っていけます.

[Filter]> .bb.
 aaa c
{
  "aaa": [
    123,
    "cccc",
    [
      1,
      2
    ]
  ],
  "c": 321
}

たとえば $ aws cloudwatch describe-alarms コマンドを jid で掘っていくと,以下のようになります.

[Filter]> .MetricAlarms[0].Dimensions[0].Value                                                                                                                                                                                                              "i-0e22a8eef9eea680b"
"i-0exxxxxxxxxxxxxxx"

番外編

あるプレフィックス名を持つ CloudWatch アラームが作成されている EC2 インスタンス ID の一覧を取得する.

$ aws cloudwatch describe-alarms --alarm-name-prefix [CloudWatchアラーム名のプレフィックス] --query MetricAlarms[].Dimensions[].Value

AWS IAM 用ツール Miam の雑なまとめ

※ かなり雑です.

【目次】

環境

RHEL 7.2 (64 bit)

Ruby と Miam のインストール

システムワイドにバコーンとインストール

$ sudo yum install ruby -y

$ ruby -v
ruby 2.0.0p648 (2015-12-16) [x86_64-linux]

$ gem -v
2.0.14.1

に,2.0 ... まぁいいやこのまま続けます.

$ sudo gem install miam
Fetching: jmespath-1.3.1.gem (100%)
Successfully installed jmespath-1.3.1
Fetching: aws-sigv4-1.0.0.gem (100%)
Successfully installed aws-sigv4-1.0.0
Fetching: aws-sdk-core-2.6.28.gem (100%)
Successfully installed aws-sdk-core-2.6.28
Fetching: ruby-progressbar-1.8.1.gem (100%)
Successfully installed ruby-progressbar-1.8.1
Fetching: parallel-1.10.0.gem (100%)
Successfully installed parallel-1.10.0
Fetching: tins-1.13.0.gem (100%)
Successfully installed tins-1.13.0
Fetching: term-ansicolor-1.4.0.gem (100%)
Successfully installed term-ansicolor-1.4.0
Fetching: diffy-3.1.0.gem (100%)
Successfully installed diffy-3.1.0
Fetching: hashie-3.4.6.gem (100%)
Successfully installed hashie-3.4.6
Fetching: miam-0.2.3.gem (100%)
Successfully installed miam-0.2.3
Parsing documentation for jmespath-1.3.1
Installing ri documentation for jmespath-1.3.1
Parsing documentation for aws-sigv4-1.0.0
Installing ri documentation for aws-sigv4-1.0.0
Parsing documentation for aws-sdk-core-2.6.28
Installing ri documentation for aws-sdk-core-2.6.28
Parsing documentation for ruby-progressbar-1.8.1
Installing ri documentation for ruby-progressbar-1.8.1
Parsing documentation for parallel-1.10.0
Installing ri documentation for parallel-1.10.0
Parsing documentation for tins-1.13.0
Installing ri documentation for tins-1.13.0
Parsing documentation for term-ansicolor-1.4.0
Installing ri documentation for term-ansicolor-1.4.0
Parsing documentation for diffy-3.1.0
Installing ri documentation for diffy-3.1.0
Parsing documentation for hashie-3.4.6
Installing ri documentation for hashie-3.4.6
Parsing documentation for miam-0.2.3
Installing ri documentation for miam-0.2.3
10 gems installed

$ echo $?
0

色々入った.

既存 IAM 設定のエクスポート

$ miam -e -o IAMfile

IAM 設定の適用

  • IAM 定義用 DSL ファイルを編集

$ vi IAMfile

  • ドライラン

$ miam -a --dry-run

  • 適用

$ miam -a

/usr/local/bin を環境変数 PATH に追加

あとは書き出された IAMfile, GitHub の IAMfile example を読み,Ruby のコードが読めれば大体わかるはず,という雑な説明ですみません.

Miam のオプション

これも GitHub の README.md を読めば大体わかると思いますがいくつか説明します.

--account-output FILE

?

--export-concurrency N

文字通り,export の多重度を上げるオプションです.

$ miam -e --export-concurrency 2 -o /tmp/IAMfile

--format=FORMAT

エクスポートするファイルのフォーマットを,Ruby ファイル形式,もしくは JSON 形式に指定します.

$ miam -e --export-concurrency 2 -o /tmp/IAMfile.rb --format=ruby
$ miam -e --export-concurrency 2 -o /tmp/IAMfile.json --format=json

--split

出力結果を分割します.IAM ユーザーとかグループとかロールとか.

$ miam -e --export-concurrency 2 -o /tmp/IAMfile.json --format=json --split
Export IAM
                                                                                                                                                                                                                                                          ᗧ 100%
  write `/tmp/users.iam.json`
  write `/tmp/groups.iam.json`
  write `/tmp/roles.iam.json`
  write `/tmp/instance_profiles.iam.json`
  write `/tmp/policies.iam.json`

--split-more

もっと分割します.1 IAM ユーザー毎とか.

--target REGEXP

?

適用範囲を正規表現で指定?

--ignore-login-profile

?

ヤツの名は Subiam

GREE さん製で,Miam からフォークした Subiam というのがあるそうなのでそっちも試してみます!!

Subiamを使いAWSのIAM管理をコードベースでおこなう | GREE Engineers' Blog http://labs.gree.jp/blog/2016/06/15988/

以上

【小ネタ】AWS CLI とか SDK とかで使える AWS 関連の環境変数

まとめ

項目 AWS 環境変数 AWS 設定ファイル変数 オプション
アクセスキー ID AWS_ACCESS_KEY_ID aws_access_key_id -
シークレットアクセスキー AWS_SECRET_ACCESS_KEY aws_secret_access_key -
セッショントークン AWS_SESSION_TOKEN aws_session_token -
セキュリティートークン AWS_SECURITY_TOKEN aws_security_token -
プロファイル AWS_DEFAULT_PROFILE profile --profile
リージョン AWS_DEFAULT_REGION region --region
出力形式 AWS_DEFAULT_OUTPUT output --output
設定ファイル AWS_CONFIG_FILE - -
共用クレデンシャル AWS_SHARED_CREDENTIALS_FILE - -
  • AWS セッショントークンは,期限付き認証のときに,~/.aws/config or ~/.aws/credentials ファイルに書く
  • AWS_CONFIG_FILE は,デフォルトの ~/.aws/config のパスを変更
  • AWS_SHARED_CREDENTIALS_FILE は,デフォルトの ~/.aws/credentials のパスを変更

つよさ

  • 設定ファイル変数 < 環境変数 < オプション

ちなみにどの IAM 権限が使われるかですが,EC2 インスタンスプロファイルが設定された Linux なり Windows なりでは,EC2 インスタンスプロファイルの IAM 権限がまず使われ,--profile で特定のプロファイル (~/.aws/credentials に設定したプロファイル) を使うこともできます.

おまけ AWS CLI コマンド補完機能の設定

bash

  • 設定
$ complete -C aws_completer aws
  • 確認
$ complete -p
  • 常態化
echo 'complete -C aws_completer aws' >> ~/.bash_profile

zsh

$ which aws
/usr/local/bin/aws
$ source /usr/local/bin/aws_zsh_completer.sh

以上