読者です 読者をやめる 読者になる 読者になる

kzk-casino.com

一人前のITエンジニアを目指して

Macのスクリーンショット保存先を変更する方法

Mac Tech Tips

Macスクリーンショットは下記の方法で取得できますが

Mac でスクリーンショットを撮る方法 - Apple サポート

その保存先が~/Desktopとなっており、大量のスクリーンショットを撮るときに不便なので

保存先の変更方法について調べてみました。


すると下記の記事がヒット

Mac - スクリーンショットで撮影した画像の保存場所を変更 - PC設定のカルマ


要するに下記のコマンドで変更できるみたいです。

$ defaults write com.apple.screencapture location ~/Pictures/
$ killall SystemUIServer

上の例だと~/Pictures/に保存先を変更しています。


しかしこのコマンドをいちいち覚えておくのは面倒くさい。

というわけで別コマンドでパッケージすることにしました。


まず「change_screenshot_path.sh」というシェルを「/usr/local/bin」に作成。

$ cd /usr/local/bin 
$ vim change_screenshot_path.sh
#!/bin/sh

# set variable 
new_path=${1}

# check path 
ls -l $new_path >/dev/null 2>&1

if [ ${?} = 1 ] ; then
  echo "$new_path is incorrect. Please set correct path"
  exit 1

else
  # set new screenshot path
  defaults write com.apple.screencapture location $new_path
  killall SystemUIServer

  # notify to user
  echo "Screenshot-saved path is changed to $new_path"
  exit 0

fi

実行権限を付与

$ chmod 755 change_screenshot_path.sh

.shを毎回呼び出すのはなんかかっこ悪いのでシンボリックリンクを作成

$ ln -s ./change_screenshot_path.sh chscpath
$ ls -l chscpath
lrwxr-xr-x  1 XXXXXXXX  XXXXXXXX  27  9  8 15:04 chscpath -> ./change_screenshot_path.sh

コマンドのPathが通っていることを確認

$ which chscpath
/usr/local/bin/chscpath


これで準備完了です。

あとは保存したい先のパスを引数として与えてあげればスクリーンショットの保存先を変更できます。

$ chscpath ~/Pictures/
Screenshot-saved path is changed to /Users/XXXXXXXX/Pictures/

存在しないパスを指定したらエラーが返ってくる

$ chscpath ~/Test
/Users/XXXXXXXX/Test is incorrect. Please set correct path


とりあえず当面はこれで困らないかと。

上に乗せた記事によると、デフォルト値に戻すのも簡単にできるそうですが、使いそうになかったので機能に入れておりません。

必要になったらそのうち入れようと思います。

ECS Clusterに特定VPCに所属させたEC2インスタンスを登録する方法

AWS docker Tech Tips DevOps

ECSのチュートリアルで作成されるクラスターに含まれるインスタンスはデフォルトのVPCに作成されてしまいます。


所定のVPCに作成したインスタンスを、ECS Clusterに登録する方法をメモします。


インスタンスの作成

EC2インスタンスを普通に作成。

注意する点は下記。

  • OSイメージは「amzn-ami-2016.03.g-amazon-ecs-optimized (ami-058a4964)」を選択
  • ネットワークで自身で構築したVPCを選択
  • 自動割り当てパブリックIPを有効化(もしくはEIPを割り当て)
  • IAMロールとしてECSの権限を付与したロールを選択


※OSイメージをUbuntuなどにする場合はecs−agentのインストールから行う必要がある

ECS Clusterの作成

ECSのクラスターを作成。

指定するクラスターネームは後から使用するので控えておく。
ちなみに今回作成したクラスターの名前は「gatebook-cluster」。

EC2インスタンスの設定

作成したEC2インスタンスにログインして下記の設定を行う。

ecs-agentの設定ファイル作成

下記コマンドでecs-agentの設定ファイルを作成。

sudo vi /etc/ecs/ecs.config

設定ファイルは下記のように記載。

ECS_CLUSTER=gatebook-cluster
ecs-agentのクリーニング

デフォルトで起動しているecs−agentをクリーニング。

docker stop $(docker ps -ql)
docker rm $(docker ps -ql)
sudo rm -f /var/lib/ecs/data/*

※agentが起動しているコンテナを停止・削除した後、設定データファイルの削除。

ecs-agentの起動

ecsプロセス起動サービスを利用して、新たにecs−agentのコンテナを立ち上げる。

sudo start ecs

ECS ClusterにInstanceが登録されたことを確認する。

f:id:kzk_casino:20160828002715p:plain


ポイントは"/var/lib/ecs/data"配下の設定ファイルの削除です。
ecs−agentに関する情報が記載されているので、確認してみるといいと思います。


以上

Ubuntuにmysql−serverをインストールする際にパスワードを求められないようにする

Tech Tips

Dockerfileに記載してUbuntuMysqlを自動インストールしようとすると、
rootのパスワードを入力するところで止まってしまうので、解決方法をメモ。


Ubuntuで下記コマンドを実行して、mysqlのインストールを試みたところ

apt-get install -y mysql-server


下記のようにrootパスワードの入力を求められます。
f:id:kzk_casino:20160816145252p:plain


Dockerfileなどに記載して自動インストールする際に、このInteractiveな仕様はいただけないので
解決策を探しました。


下記のように実行すれば回避できます。

echo "mysql-server mysql-server/root_password password my_password" | debconf-set-selections
echo "mysql-server mysql-server/root_password_again password my_password" | debconf-set-selections
apt-get install -y mysql-server


debconf-set-selectionsというツールを使って、パスワードを自動的に設定させます。
上の例では、「my_password」というパスワードが設定されます。

mysqld.sockの場所を調べる方法

AWS Tech Tips

rails+RDSでWebアプリケーションを作成する練習をしているのですが、

OS・ディストリビューションによってmysqld.sockの場所が異なるようなので調べる方法をメモします。

mysql_config --socket


実行したらこんな感じ

# mysql_config --socket
/var/run/mysqld/mysqld.sock

これを元にrailsのconfig/database.ymlを記載しましょう。

development:
  adapter: mysql
  encoding: utf8
  reconnect: false
  database: db
  pool: 5
  username: user
  password: ********
  socket: /var/run/mysqld/mysqld.sock
  host: *****.**************.ap-northeast-1.rds.amazonaws.com

プログラミング勉強サイト Progate 試してみた

Tech Tips プログラミング

プログラミング勉強を最近本格的に始めようと、いろいろ探してみました。

元々dotinstallで動画を見たりはしていたのですが、より手軽に勉強できるサイトを求めていると、
Progateというサイトをみつけました。

prog-8.com

試してみた結果、下記の点がすばらしいとおもいました。
(2016/7/16時点です)

豊富な対応言語・コース

Progateでは学習を3つのコースから選ぶことができます。

学習コース

プログラミングの基礎的な構文や、簡単な実践アプリの作成を行うことができます。

HTML&CSS、JSのようなフロンエンドから、JAVARubyのようなバックエンド、
Railsのようなフレームワーク合わせて9種類から選べます。

道場コース

より実践的な課題にチャレンジすることで応用力を身につけることができます。

こちらは6言語に対応しております。

プロジェクトコース

こちらはまだ触っておりませんが、「自分の力で一から開発する」力を身につけることができるそうです。

こちらは現在は2言語のみの対応となっております。
今後に期待ですね。

環境構築が不要

Progateでは、準備された環境にブラウザ経由で接続することで、簡単にプログラミングのエッセンスを
学ぶことができます。

学習画面は下記のように構成されております。

f:id:kzk_casino:20160717000348p:plain


一つの画面に、

  • ヒント・情報・コードサンプル等
  • コード記述用のテキストエディタ
  • サーバ操作用のターミナル
  • プレビュー用のブラウザ

が用意されているので、環境構築の手間を省いて簡単にプログラミングのエッセンスを勉強することができます。

また、各セクションには下記のようなスライドが用意されており、知識を体系的に学ぶのにも適しています。

f:id:kzk_casino:20160717000602p:plain


数多くあるプログラミング勉強サイトと違って、日本語で記述されているのも個人的には嬉しいポイント・・


ぜひ試してみてください。

ロジカルシンキング〜課題解決のプロセス〜研修を受けて

ビジネススキル

会社の研修でロジカルシンキング〜課題解決のプロセス〜研修を受けたのでメモします。

全体プロセス

ロジカルシンキング、中でも課題解決は下記のプロセスで実施する、というフレームワークでした。

  • What

 課題の定義

  • Where

 課題の絞り込み

  • Why

 課題の深堀り

  • How

 課題の対策

図式するとこんな感じ

f:id:kzk_casino:20160714000424p:plain


各プロセスに置いて簡単にポイントを書き留めておきます。

What

Whatは一番最初のPhaseで、課題を明確にする段階です。

漠然とした課題を明確にすることで今後のSTEPを迷いなく遂行していくために実施します。

課題とは、「あるべき姿と現実とのGAP」を「定量的に」とらえて明文化することです。

上位方針と自分の業務から目的を立て、目的に対するKGI(Key Goal Indicator)を決めて、
「いつまでに」、「どの程度」達成するのか(目標)を明確にするPhaseです。

ここで注意することは、あまりにも現実的で達成可能な目標は「弛れ」を生み、
どう考えても達成不可能な目標は「諦め」を生んでしまいます。

リソースやコストを勘案して、少しチャレンジングな目標を策定することで適度な緊張を生み、
パフォオーマンスは向上します。

Where

WhereはWhatで明確にした課題(目標)を絞り込む段階です。

Whatで明文化した課題に対して直接解決策を考えると、

  • 広すぎる課題に対して対策を立てることとなり、対策が多岐に渡るので議論が発散する
  • 課題の裏返しのような対策しか打てず、根本的な解決を促せない

といったデメリットが考えられます。

そこで、Whatで定義した目標を細分化し、対策を打つことで最も目標に対する高い効果を発揮できるであろう
エリアに絞り込むことで、効率的に議論を進めることができます。

例えば、課題として「テーマパークの売上を向上する」といったものを定義したときに、

  • 誰に対する売上を向上させるのか[who]
  • いつの売上を向上させるのか[when]
  • どの売上を向上させるのか[where]

などの軸でマトリクスを切り、最も伸び代がありそうな「テーマパーク内において平日日中帯の飲食売上を向上する」
といった課題に絞り込みます。

Why

WhyはWhereで絞り込んだ課題に対して、原因を深堀するPhaseです。

なぜWhereでしぼりこんだ課題が発生するのかを掘っていくことで、真の課題を特定し、より効果的な解決策
立てる目的で実施します。

「テーマパーク内において平日日中帯の飲食売上を向上」するためには、

  • 飲食店の数を増やせばいいのか
  • 飲食店の質を向上すればいいのか
  • 飲食店のコストを上げれば/下げればいいのか

といった複数の対策が考えられますが、これらの中から最も効果的な策を打ち立てるために必要な段階です。

掘り下げる時に注意しないといけないことは、下記です。

  • 広く掘る(ヌケモレを防止するため)
  • 深く掘る(真の原因を特定して再発防止するため)
  • 適切に掘る(不要な要素を混入させないため)
How

HowはWhyで特定した課題に対して複数の対策案を立てるPhaseです。

構造的に解決策を複数立て、それぞれに対して評価を実施することで最も効果的な解決策を策定することができます。


その後

ここまで実施できたら、後はその解決策を実行するのみです。

ここまでのPhaseは、PDCAでいう「P」の段階のみで、この後対策を実行して、効果測定して、次の対策を打つ、という
サイクルを回していく必要があります。

ただし、つぎのサイクルでもう一度Whatから検討する必要はなく、大元のWhatはすでに明確になっているので、
うまくいかなかった事象に対してWhere Why Howを検討するだけでつぎのサイクルに入っていけます。


こうしたSTEPで課題解決について議論するんだ、ということを組織全体で理解していれば、課題解決が組織の
共通言語となり、爆速でコミュニケーションをとることができるようになります。




・・・といった内容でした。

実際に2日目の最後のケーススタディでは少人数でグループワークを実施したのですが、
今どのPhaseについて話しているのかを意識することで議論が発散せず、非常に短い時間で効果的であると思われる
対策を打つことができました。

実業務においてもこのことを念頭において課題解決していきたいと思います。

dockerについて勉強してみた2「docker imageの理解・操作」

DevOps docker Tech Tips

dockerについての研修会の復習第二回です。

前回はdockerの概念と基本操作についてまとめてみました。
kzk-casino.hatenablog.com


今回はコンテナを操作する上で必要な"docker image"についてまとめたいと思います。

docker imageについて

dockerのコンテナは、イメージの上に成り立っています。
もう少し正確に言うと、イメージはコンテナの"雛形"であり、コンテナはイメージの書き込み可能領域に関する差分情報だけを持ちます。

f:id:kzk_casino:20160703121722p:plain
出典: What is Docker?

イメージは下記の特徴を持ちます。

  • イメージは複数の層(レイヤー)で構成される
  • 各イメージは"base layer"を持つ
  • 各レイヤーは読み込み専用である
  • dockerは"Copy on Write"のシステムを使う

"Copy on Write"とは、コンテナに変更が行われた時、イメージレイヤーに直接変更を書き込まず、
変更が加えられる内容のコピーをコンテナに作り、変更情報(イメージとの差分情報)をコンテナに保持させることを言います。


上述のように、イメージは読み込み専用であるため、コンテナ間で共有することもできます。

docker imageの作成

docker imageは3種類あります。

  • 新しいイメージとしてコンテナの変更内容をコミットする
  • Dockerfileから構築する
  • 独立したベースレイヤとしてtarボールからDockerに取り込む
新しいイメージとしてコンテナの変更内容をコミット

まずは新しいイメージとしてコンテナの変更内容をコミットしてみましょう。

今回はDocker Hubから提供されているUbuntuイメージにwgetvimのパッケージをインストールしたイメージを作成します。

$ docker run -i -t ubuntu:14.04 bash  #ubuntuイメージを立ち上げて標準入出力を起動する
root@2fd583b0b9c9:/# apt-get update
root@2fd583b0b9c9:/# apt-get install -y wget vim  #終了したらCtl+P+Qで抜ける
$ docker diff $(docker ps -ql)  #最新のコンテナとイメージの差分を表示する

ここまでで、Ubuntuイメージにwgetvimがインストールされたコンテナが作成されました。

次にこのコンテナをイメージとしてCommitします。

$ docker commit $(docker ps -ql) kzk_casino/myapp:1.0
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
kzk_casino/myapp    1.0                 897fe57414d3        6 seconds ago       266.7 MB
ubuntu              14.04               38c759202e30        8 days ago          196.6 MB

"kzk_casino/myapp1.0"というイメージが作成されました。

ここでは"kzk_casino"という名前で"myapp1.0"というイメージを作成しました。
Docker Hubに作成したイメージをPushする場合には名前にDocker Hubのアカウント名を指定してください。


Dockerfileに記載

次にDockerfileに記載してイメージ構築時の処理を指定しましょう。
作成するイメージは上の例と同じく、Ubuntuwgetvimをインストールしたものとします。

$ mkdir my_image
$ cd my_image/
$ vim Dockerfile

作成するDockerfileは下記です。

FROM ubuntu:14.04

RUN apt-get update
RUN apt-get install -y wget vim

では、Dockerfileからbuildしてみます。

$ docker build -t kzk_casino/myapp2:1.0 .
Sending build context to Docker daemon 2.048 kB
Step 1 : FROM ubuntu:14.04
 ---> 38c759202e30
Step 2 : RUN apt-get update
 ---> Using cache
 ---> 373f855439a2
Step 3 : RUN apt-get install -y wget vim
 ---> Running in bb050c6c3899
(中略)
Removing intermediate container bb050c6c3899
Successfully built db5bb0efac68
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
kzk_casino/myapp2   1.0                 db5bb0efac68        7 minutes ago       266.7 MB
kzk_casino/myapp    1.0                 897fe57414d3        About an hour ago   266.7 MB
ubuntu              14.04               38c759202e30        8 days ago          196.6 MB

docker imageが作成されたことがわかります。

また、Dockerはイメージ構築Stepごとにスナップショットを作成します。
処理済みのスナップショットが残っている場合、その結果を再利用します。

試しに、今使用したDockerFileを使用してイメージを再作成すると、時間がとても短くなっていることがわかります。

Dockerfileは他にもいろいろ細かな指定ができますが、ここでは一旦割愛します。

イメージの管理・配布

作成したイメージはDocker HubにPushすることで管理・配布が容易になります。

Docker Hubへのリポジトリの作成方法は割愛しますが、GitHubのように簡単にリポジトリを作成することができ、
Pushすることができるので是非自身のリポジトリを作成してみてください。


次はボリュームとネットワークについてまとめたいと思います。