hatunina’s blog

メモと日記です

接続先サーバによってTerminalの背景を変える

概要

devやproductionごとにTerminalの背景を変えることで作業ミスを防ぎたい

環境

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.14.4
BuildVersion:   18E226

手順

  1. 接続先サーバによってTerminalの背景を変えるシェルスクリプトを書く
    1.1. 接続先サーバによって指定する背景を設定する
    1.2. 指定した背景はAppleScriptで変更可能 -> AppleScriptは/usr/bin/osascriptで実行可能
  2. 作成したシェルスクリプトsshコマンドのエイリアスに設定する

シェルスクリプト

#!/bin/bash


# Terminalの背景を変える関数
 set_profile() {
 /usr/bin/osascript -e "tell application \"Terminal\" to set current settings of first window to settings set \"$1\""
 }


# 接続先によって背景を指定する。SSHを終了するとHomebrew背景に戻る。
if [[ "$@" == *dev* ]]; then
 set_profile "Red Sands"
 ssh $@
 set_profile "Homebrew"
 elif [[ "$@" == *production* ]]; then
 set_profile "Ocean"
 ssh $@
 set_profile "Homebrew"
 else
 ssh $@
 fi

エイリアス

~/.bash_profile に追記

alias ssh="/usr/local/bin/ssh-change-theme"

確認

変更を適用

$ source ~/.bash_profile

sshしてみて確認する。

$ ssh hoge.dev.huga.co.jp

f:id:hatunina:20190707003732p:plain

$ ssh hoge.production.huga.co,jp

f:id:hatunina:20190707003807p:plain

参考

labs.septeni.co.jp maku77.github.io

「達人に学ぶDB設計徹底指南書」を読んだ

読みました。

www.shoeisha.co.jp

今後、データマートを作ることがありそうなので読みました(本当はDWHに関する本を探していたけれど良さそうなのが見つからなかった)。 真面目に仕事やってれば感覚的に知ってるよね、みたいなことが中心ですが、正規化の章でコラムとしてまとめている言葉がとてもよかったです。

常識を定式化することで誰もが利用可能なツールにすることができ、道を外れた設計を防ぐことができるようになります。


カラムに配列を持てるのとRDB木構造を扱う方法は初耳でした。 RDB木構造を扱うのは更新をあまり必要とせず検索中心であればアリなのかもしれない。 詳細は下記へ。

tech.core-j.co.jp

www.slideshare.net

絶対プロキシ突破するマン!(Win10, 認証あり, pip)

オラァ!!!!!

set HTTP_PROXY=http://user_name:passward@proxyserver:8080
set HTTPS_PROXY=http://user_name:passward@proxyserver:8080

pip --trusted-host files.pythonhosted.org --trusted-host pypi.org install hoge

user_nameにメールアドレス等が使われている場合、アットマークはhoge%40hoge.comのように%40を使うことでエスケープできます。
また、プロキシの設定だけではCERTIFICATE_VERIFY_FAILEDが発生することがあり--trusted-hostオプションをつけています。

参考

github.com

AWS Step FunctionsでTaskにParametersを設定してAWS Lambdaで読み込む

Parameters周りの話があまり見当たらなかったのでまとめました。

やりたいこと

AWS Step FunctionsとAWS LambdaでETLっぽいことをしたい!
初期パラメータはPassで渡し後ろのTaskでもパラメータを渡したい!

想定

下図のようなステートマシンを想定します。 select_taskでDB(RDS)からデータをセレクトしそれをinsert_taskでインサートします。
このとき、select_taskではParamsSettingsで設定した接続情報を使い、insert_taskではParametersで設定した接続情報を使うことにします。 f:id:hatunina:20190116215747p:plain

ステートマシンの定義

定義は下記のようになります。

{
  "Comment": "ETLフロー",
  "StartAt": "ParamsSetting",
  "States": {
    "ParamsSetting": {
      "Type": "Pass",
      "Result": {
        "rds_host": "host_1",
        "user_name": "user_1",
        "password": "password_1",
        "db_name": "db_1"
      },
      "ResultPath": "$.initial_params",
      "Next": "select_task"
    },
    "select_task": {
      "Type": "Task",
      "Resource": "Lambdaのリソース_1",
      "InputPath": "$",
      "ResultPath": "$.select_result",
      "OutputPath": "$",
      "Next": "insert_task"
    },
    "insert_task": {
      "Type": "Task",
      "Resource": "Lambdaのリソース_2",
      "InputPath": "$",
      "ResultPath": "$",
      "Parameters": {
        "rds_host": "host_2",
        "user_name": "user_2",
        "password": "password_2",
        "db_name": "db_2",
        "select_result.$": "$.select_result"
      },
    "End": true
    }
  }
}

DB接続城はキーバリュー形式でそのまま書くことができますが、select_taskの結果を参照するためには$を用います。
"select_result.$": "$.select_result"という部分ですが、キー部分にも$を含めないとバリューが変数として見なされず文字列としてTaskへ渡されてしまうので要注意です。

AWS Lambda関数

ステートマシンで定義した二つの関数です。

# select_task

def lambda_handler(event, context):
    rds_host = event['initial_params']['rds_host']
    user_name = event['initial_params']['user_name']
    password = event['initial_params']['password']
    db_name = event['initial_params']['db_name']

    # DBからデータをSELECTする処理
    # 結果をselect_dataへ格納

    response = {
        'select_data': select_data
    }
# insert_task

def lambda_handler(event, context):
    rds_host = event['rds_host']
    user_name = event['user_name']
    password = event['password']
    db_name = event['db_name']

    select_data = event['select_result']['select_data']

    # DBへINSERT処理

Parametersで設定した値はeventに格納されておりそのままのキーで読み込むことができます。
またevent['select_result']['select_data']でステートマシンで定義したキーで前のTaskの結果を読み込むことができます。

まとめ

Parametersで新しく設定する値自体は単純に読み込むことが可能ですが、前のTaskの結果を参照する場合には$を使う必要があるので要注意です。

参考

xp-cloud.jp

「データサイエンスのための統計学入門」を読んだ

読みました。

www.oreilly.co.jp
だいたい前半が統計学で後半が機械学習の話です。 数式はほぼ出てこずで各手法の特徴や使い所を中心に書いてあります。 「統計学者はこう使うがデータサイエンティストはこう使う」という話がちょいちょい出てきて面白いです。 また、アルゴリズムの説明を箇条書き風にまとめているので他の本で数式を追う際の副読本としてもいいかも。

EDAから始まり最後はブースティングで終わるなど2018年2月初版なだけあって最近の情勢に合わせている気がします。 サンプルコードはRですがモデルを動かすだけなのでほぼ気にならず。

kaggleを通して雰囲気で使っていた手法に関して確認ができたり、「あー、あれってこういうことなんだー」となる部分が所々あり、コンペが終わったタイミングだったのでちょうど良い本でした。