on the other side

読んだ本とか覚えたことを記録していきたい

2018.12.16 振り返り

やったこと

読んだ

popotan322000.hatenablog.com


読み終わった

もうすぐ読み終わりそう。

かなり内容が辛くて途中で積んでしまっている。 一応最後まで目を通して感想だけは残すかも。せっかくお金払ったわけだし。

ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識

ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識

 

まだ4割しか読んでない読み進めるスピードが遅いのでサクサク読んでいきたい。

3.6.5 Documentation Python公式ドキュメントを読み始めた。知らないことだらけで反省している。

次週

Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎

Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎

 
  • 全然進められなかったのでちゃんとやっていきたい
  • Numpyを使ったパフォーマンス改善の部分を確認
エキスパートPythonプログラミング 改訂2版 (アスキードワンゴ)

エキスパートPythonプログラミング 改訂2版 (アスキードワンゴ)

 
  • クラス以外のベストプラクティス・プロファイリング・高速化の章を確認
ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識

ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識

 

3.6.5 Documentation

コンピュータはなぜ動くのか?知っておきたいハードウエア&ソフトウエアの基礎知識?

コンピュータはなぜ動くのか?知っておきたいハードウエア&ソフトウエアの基礎知識?

 

この辺読む。

まんがで身につく続ける技術

まんがで身につく 続ける技術 (Business ComicSeries)

まんがで身につく 続ける技術 (Business ComicSeries)

読んだので以下要約。

Chapter1 行動とは何か

ABCモデル

続かない、挫折してしまう原因は「行動」に焦点があたっていないため。 行動科学マネジメントでは、どんな行動にも必ず理由があるとして、以下の3つの要素から成り立つとしている。 A→先行条件 B→行動 C→結果条件 これをABCモデルという。 ある行動が発生しやすい先行条件を整えれば、行動をコントロールできる

過剰行動と不足行動

コントロールしたい行動のことをターゲット行動と呼び、ターゲット行動は過剰行動と不足行動の2種類に分けられる。 不足行動には、それを阻害するライバル行動がある。 過剰行動の場合はそれが起きにくい先行条件を整え、不足行動の場合はそれが起きやすい先行条件を整え、ライバル行動の発生を抑えると良い。

環境を整える

ターゲット行動を明確にする。すなわち、何をするのか、過剰なのか、不足なのかを明確にする。 先行条件を考える。どんな環境になればターゲット行動が起きやすくなるか、起きにくくなるか。 ライバル行動も考え、対策を決める。

Chapter2 不足行動のコントロール

フロント行動リサーチ・アフター行動リサーチ

先行条件をリサーチすることをフロント行動リサーチと呼び、どんな時にターゲット行動を取りがちなのかを詳細に考える。 結果条件を詳細にリサーチすることをアフター行動リサーチと呼び、ターゲット行動を取ることでどんなメリットが有るのかを詳細に考える。 過剰行動がターゲットの場合は、行動後のメリットを何かに置き換える(チェンジ行動)ことで発生を抑えられる。

フロント行動リサーチシート(不足行動)

  • ターゲット行動
  • 発生する頻度、持続時間
  • どんな時に発生しやすいか
  • どんな場所で発生しやすいか
  • 誰がいる時に発生しやすいか
  • 発生する前に行う行動や出来事
  • 発生する前に周囲の人が言ったことや行動
  • どんな時に発生しにくいか

フロント行動リサーチシート(ライバル行動)

  • ライバル行動
  • 発生する頻度、持続時間
  • ライバル行動のために必要なエネルギー
  • どんな時に発生しやすいか
  • どんな場所で発生しやすいか
  • 誰がいる時に発生しやすいか
  • 発生する前に行う行動や出来事
  • 発生する前に周囲の人が言ったことや行動
  • どんな時に発生しにくいか

アフター行動リサーチシート(不足行動)

  • ターゲット行動
  • 行動後に生まれるメリット
  • 行動後の周囲の人の反応
  • 行動後、何かをしなくてよくなるか
  • ライバル行動
  • ライバル行動後のメリット

不足行動の発生をさらに増やすために

行動のヘルプ

行動の数を増やす助けとなる要素。 ライバル行動に対してはこれを除外するようにする。

動機づけ条件

行動に対するメリット。 ライバル行動に対してはこのこれを除外するようにする。

行動のハードルを低くする

毎日やるのを3日に1回に減らすなど。 ライバル行動はハードルが高くなるような環境を作る。

Chapter3 過剰行動のコントロール

フロント行動リサーチシート(過剰行動)

  • フロント行動リサーチシート(不足行動)と同一の内容

アフター行動リサーチシート(過剰行動)

  • アフター行動リサーチシート(過剰行動)と同一の内容
  • チェンジ行動

メジャーメント

メジャーメントとは行動がどれだけ増えたか、減ったかを計測すること。行動科学マネジメントでは先行条件を整えることより結果の方を重視する。

客観的にわかる定量的な表現にしなければならない。ここで思ったほどの結果が出ていないようならばリサーチし直す必要がある。

計測の期間を事前に定めておく必要がある。1週間、1ヶ月、3ヶ月という風にきかんを区切って計測する。

Chapter4 目標を達成する

ラストゴールとスモールゴール

行動を続けるのは目標があるため。その目標の設定の仕方として、ラストゴールとスモールゴールの2つを設定するとよい。

ラストゴールは最終目標。期限と数値を盛り込むこと。

スモールゴールは中間目標。ラストゴールへ近づいていくための目標となる。1年間で100万借金を返すとすれば、半年間で50万返す、3ヶ月で25万返す、といった具合。また、できるだけ低く設定する。高いと挫折しやすくなるため。

ゴールを定め、そのための行動を決め、その行動が発生する先行条件を整えるということが大切。

フィードバック

実践する中で目標の進捗を可視化することが重要。スマホや紙など何らかの手段で把握できるようにする。このときメジャーメント(行動の増減)も可視化しておく。

つまり目標のフィードバック(体重の増減の可視化)と行動のフィードバック(運動の回数の可視化)の両方を行っていく。

2018.12.9 振り返り

やったこと

  • Seabornの使い方を調べた。 qiita.com

  • jupyter notebookに拡張入れてnotebookをGistに投稿できるようにした。 github.com cartman0.hatenablog.com このへんを見て進めた。Gistへの投稿まで確認できた。 gist.github.com

  • VMとホスト間でなぜかクリップボードの共有ができていなかった問題に対処

    • 原因としてはGuestAdditionのバージョンがホストとゲストで一致していなかったこと
    • ゲスト側のGuestAdditionを削除(=CDドライブを削除)したら面倒な事態になった
    • 以下を参考にしてGuestAdditionを入れ直したらクリップボードの共有、ドラッグアンドドロップまでできるようになって完全に解決 berukann.hatenablog.jp
  • Boostnoteを使ってみることにした

読んでる本

The DevOps ハンドブック 理論・原則・実践のすべて

The DevOps ハンドブック 理論・原則・実践のすべて

ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識

ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識

まんがで身につく 続ける技術 (Business ComicSeries)

まんがで身につく 続ける技術 (Business ComicSeries)

Learn Better ― 頭の使い方が変わり、学びが深まる6つのステップ

Learn Better ― 頭の使い方が変わり、学びが深まる6つのステップ

果たして読み終える本はあるのか

次週に持ち越し

Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎

Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎

  • 研修に備えて足りてない部分の知識を整理しておく
  • 基本的に全部notebookで写経しながら進める

  • Numpyを使ったパフォーマンス改善の部分を確認

エキスパートPythonプログラミング 改訂2版 (アスキードワンゴ)

エキスパートPythonプログラミング 改訂2版 (アスキードワンゴ)

  • クラス以外のベストプラクティス・プロファイリング・高速化の章を確認

2018.12.2 振り返り

やったこと

AWS

popotan322000.hatenablog.com

 

popotan322000.hatenablog.com

やった。

機械学習

その他

  • zube.ioで作業管理を始めた

反省点

  • 何をするか迷う時があったので、優先度をきっちり決めて進めたい

次の計画

Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎

Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎

 
  • 研修に備えて足りてない部分の知識を整理しておく
  • 基本的に全部notebookで写経しながら進める

-Numpyを使ったパフォーマンス改善の部分を確認

エキスパートPythonプログラミング 改訂2版 (アスキードワンゴ)

エキスパートPythonプログラミング 改訂2版 (アスキードワンゴ)

 
  • クラス以外のベストプラクティス・プロファイリング・高速化の章を確認

qiita.com

  • seabornの基本的なインタフェースを確認

AWS無料枠使ってRedmine立てて公開した 後編(Redmine構築編)

前編はこちら。 popotongue7.hatenablog.com

目的に対する結果

  • とりあえずAWS使うとなった時にやるべきことを確認する
    • 多分確認できた。
  • 無料枠で何かやった気分になる
    • ある程度はなった。
  • VPC、EC2、RDSを使ったWebサーバ構築、公開の手順を一通り覚える
    • 覚えた。
  • あやふやなまんまなネットワーク知識を最低限整理する
    • DNSDHCPはまだよくわかってないけどサブネットの作成、ルートテーブルやセキュリティグループの設定あたりは理解できた。
  • 何が無料でできるのかを把握する
    • EC2、VPC、EIP、RDSあたりは把握した。
  • Redmineで(可能ならスクラムの手法を利用して)普通に作業を管理できるようにする

Redmine構築手順

作業アカウントについて

  • うまくいかなかった(というかめんどくさくなった)原因については途中までec2-userでsudoつけて実行していたのを途中でrootに切り替えてやるようになったということだった。
  • 最初からrootでやるべきだった。
$ export ORIG_PATH=$PATH
$ sudo -s -E
$ export PATH=$ORIG_PATH

SELinuxの無効化、ファイアウォールの設定

EC2の初期設定

とりあえず以下などを参照しつつ必要そうなものだけ実施。 qiita.com

必要なパッケージのインストール

開発ツール(Cコンパイラ等)のインストール

yum -y groupinstall "Development Tools"

groupinstallとかいう便利なコマンドがyumにはあるんだなあと感動した。

RubyとPassengerのビルドに必要なヘッダファイルなどのインストール

yum -y install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel libffi-devel

PostgreSQLとヘッダファイルのインストール

yum -y install postgresql-server postgresql-devel

Apacheとヘッダファイルのインストール

yum -y install httpd httpd-devel

ImageMagickとヘッダファイル・日本語フォントのインストール

yum -y install ImageMagick ImageMagick-devel ipa-pgothic-fonts

このあたりは特に問題なく。

Rubyインストール

  • 公式ドキュメントにはソースコード取得、ビルド、インストールの手順があったがうまくいかず。
  • Amazon Linux 2にはamazon-linux-extrasというリポジトリがあり、ここにあるパッケージはamazon-linux-extras install hogehogeでインストールできる。
  • Rubyもあったのでそれを利用し、インストール成功。
amazon-linux-extras install ruby2.4

bunlerインストール

gem install bundler --no-rdoc --no-ri

ドキュメントのインストールをスキップするオプションを付けている。

postgresql側の設定

  • RDSですべて設定済みなのでスキップできると思っていたが、そうでもないことに気づく。
  • 一応psqlでログインして\lしたところ、ロケール(照合順序とCtype)がen_US.UTF-8になっていたので、ja_JP.UTF-8に変更する必要があった。
  • 一旦使用予定だったDBを削除し、同一名称でDBを再作成した。
postgres=> CREATE DATABASE redmine_postgres LC_COLLATE 'ja_JP.UTF-8' LC_CTYPE 'ja_JP.UTF-8' ENCODING 'UTF8' TEMPLATE template0;

Redmineソースコード取得

  • 以下のコマンドでは取得できなかった。
svn co https://svn.redmine.org/redmine/branches/3.4-stable /var/lib/redmine
production:
  adapter: postgresql
  database: DB名(自分の場合はredmine_postgres)
  host: ホスト名(RDSダッシュボードからRDSのエンドポイントを確認する)
  username: DBユーザ名(RDS作成時に指定したユーザ名、普通はrootかな?)
  password: "******"
  encoding: utf8
  • 設定ファイル config/configuration.yml の作成
    • メールサーバへの接続設定などを記述するが今回はメール配信は不要だったのでスキップ。

gemパッケージのインストール

  • 以下のコマンドでインストール(できたはずだがうまくいかなかった気がする、しかしよく覚えておらず)
bundle install --without development test --path vendor/bundle
  • セッション改ざん防止用秘密鍵の作成
bundle exec rake generate_secret_token
  • データベースのテーブル作成
RAILS_ENV=production bundle exec rake db:migrate
  • デフォルトデータの登録
RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data

このあたりは何事もなく進んだ。

Passengerのインストール

  • Apache上でRedmineなどのRailsアプリケーションを実行するために使われるPhusion Passengerをインストール
gem install passenger -v 5.1.12 --no-rdoc --no-ri
  • PassengerのApache用モジュールのインストール
passenger-install-apache2-module --auto --languages ruby

Apache用設定内容の確認

  • 下記コマンドを実行するとApacheに追加すべき設定が表示される。この情報はこの後Apacheの設定を行うときに使用する。
passenger-install-apache2-module --snippet

Apacheの設定

  • /etc/httpd/conf.d/redmine.conf の以下の箇所を修正
# Redmineの画像ファイル・CSSファイル等へのアクセスを許可する設定。
# Apache 2.4のデフォルトではサーバ上の全ファイルへのアクセスが禁止されている。
<Directory "/var/lib/redmine/public"> # {インストールディレクトリ/publicを指定}
  Require all granted
</Directory>

# Passengerの基本設定。
# passenger-install-apache2-module --snippet で表示された設定を記述。
# 環境によって設定値が異なるため以下の5行はそのまま転記せず、必ず
# passenger-install-apache2-module --snippet で表示されたものを使用すること。
#
LoadModule passenger_module /usr/local/lib/ruby/gems/2.4.0/gems/passenger-5.1.5/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /usr/local/lib/ruby/gems/2.4.0/gems/passenger-5.1.5
  PassengerDefaultRuby /usr/local/bin/ruby
</IfModule>

Apacheの起動および自動起動の設定

  • 下記コマンドを実行し、Apacheを起動するとともにシステム起動時に自動起動されるよう設定。
systemctl start httpd.service
systemctl enable httpd.service

Apache上のPassengerでRedmineを実行するための設定

  • Redmineを配置したディレクトリ以下のファイルを、Apacheを実行するユーザー・グループ(CentOSの場合はいずれも"apache")で読み書きできるよう、オーナーを変更する。
chown -R apache:apache /var/lib/redmine

Apacheのコンフィグファイル(/etc/httpd/conf.d/redmine.conf)の設定

  • サブディレクトリでredmineを実行したい(他のアプリも実行できるようにしたい)場合は以下のように設定する。
Alias /redmine /var/lib/redmine/public
<Location /redmine>
  PassengerBaseURI /redmine
  PassengerAppRoot /var/lib/redmine
</Location>

実行

service httpd configtest
systemctl restart httpd.service

反省点

  • 色々ハマったところがあったけどちゃんとメモらずに作業を進めてしまった
  • 以下について何の知識もないままだったので復習しておきたい
    • gem
    • bundler
    • Apache
    • Passenger
  • こういう記事初めて書いてみたけど、手順のコピペみたいになってるのでもうちょっとうまく書けるようになりたい

次は

  • 今回やったような作業を可能な限り自動化してやってみる
  • S3、EFS使って何かしたい

AWS無料枠使ってRedmine立てて公開した 前編(AWS環境構築編)

目的

  • とりあえずAWS使うとなった時にやるべきことを確認する
  • 無料枠で何かやった気分になる
  • VPC、EC2、RDSを使ったWebサーバ構築、公開の手順を一通り覚える
  • あやふやなまんまなネットワーク知識を最低限整理する
  • 何が無料でできるのかを把握する
  • Redmineで(可能ならスクラムの手法を利用して)普通に作業を管理できるようにする

手順

AWSアカウントの作成

  1. 必要情報(アカウント名、メールアドレス、氏名、住所、電話番号など)を登録しアカウント仮登録
  2. 支払情報を登録
    • 支払いはクレカのみらしい
  3. 電話による自動音声で本人確認
  4. サポートプラン(ベーシックプランは無料)を選択
  5. AWSマネジメントコンソールにAWSアカウントでログイン
  6. AWSアカウント(ルートアカウント)にMFA(多段階認証)の設定をする

IAMユーザの作成

  1. IAMユーザの追加
    • ルートアカウントで作業すべきではないため変わりのAWS管理者用アカウントを追加する。
  2. IAMグループの作成
    • グループごと(例えば管理者グループ、開発者グループ、運用者グループ、のような形)にアクセス権限を設定できる。
    • 今回は管理者グループを作成
  3. IAMポリシーの作成
    • AWS管理権限の設定のこと。
    • IAMユーザ単位、IAMグループ単位、IAMロール単位に付与可能。
    • 今回は管理者グループ用にすべてのサービスとリソースへのアクセス権限を与えるポリシーを作成、付与する。
    • ただしデフォルトでは請求情報がIAMユーザだと閲覧できなくなっているため、ルートアカウントで請求ダッシュボードから許可を出す必要がある。
  4. アクセスキーの取得
    • IAMユーザを作成するとアクセスキー(CSV)をダウンロードできる。
    • 当たり前だがアクセスキーは公開してはならない。
    • 基本的にアクセスキーを使わずに制御できるようにすべきである(IAMロールを利用する)。
  5. IAMユーザでのログイン確認
    • 以降の作業はすべてIAMユーザで実施する。

VPCの構築

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)

Amazon Web Services パターン別構築・運用ガイド 改訂第2版 (Informatics&IDEA)

参考書読みながら以下の手順で進める。全部無料。

  1. VPCの作成
    • VPC:指定したリージョン(物理的な地域、日本だと東京がある、当然東京を指定した方がレスポンス速い)上の論理的に分離されたネットワークを作成できるサービス。
    • CIDR表記:IPアドレスのうちネットワーク部のビット長を/ビット長で示す表記。例えばVPCなら「10.0.0.0/16」というようにアドレス空間を表記する。10.0までがネットワークアドレスで、17ビット目以降から好きにサブネットやサーバにIPを割り振れる。
  2. サブネットの作成(公開サブネット、非公開サブネット)
    • サブネット:LAN内でネットワークを分けたい時に定義する論理的に分離されたネットワーク。アベイラビリティゾーン(物理的なゾーン単位、これが一致しているノード間の通信は速い)を指定する。今回の場合はインターネットからアクセスできる公開サブネット、アクセスさせない非公開サブネットを作成する。VPCと同じようにアドレス空間をCIDR表記で決めてやる必要がある。
  3. インターネットゲートウェイの作成
    • インターネットゲートウェイVPC内からインターネットに接続するためのもの。これを作成してVPNにインターネット回線を引き込む。
  4. ルートテーブルの作成
    • ルートテーブル:一般にはルーティングテーブルなどと呼ばれる。パケットの宛先IPアドレスがどの空間に属しているとき、どのネットワークにパケットを渡せばいいかが設定されたテーブル。例えばVPCのアドレス10.0.0.0/16宛てのパケットをlocal(自分のいるネットワーク)へ、という設定や0.0.0.0/0宛てのパケットをインターネットゲートウェイ(=デフォルトゲートウェイ)へ、などの設定をする。
  5. セキュリティグループの作成
    • セキュリティグループ:インスタンス単位で追加できるグループ。グループごとに通信(外からのローカルへの通信、ローカルから外への通信)のプロトコルごと、の許可設定をする。今回の例だと、公開するサブネットに置くインスタンス用のグループと、非公開サブネットに置くインスタンス用のグループを作ってやる。
    • 公開用セキュリティグループには、自宅IPからのSSH、自宅IPからのHTTPを許可。
    • 非公開用セキュリティグループには、公開用セキュリティグループからのpostgresql接続を許可。

RDSの作成

  1. DBサブネットグループの作成
    • VPC上にRDSインスタンスを置く場合DBサブネットグループを作成しRDSインスタンスを置く非公開サブネットを所属させる必要がある。
    • 可用性のためRDS用サブネットは複数用意し、所属させる必要がある(マルチ-AZ対応のため)。
  2. RDSインスタンスの作成
    • Redmine公式CentOS向けインストール手順に従ってPostgresql10を選択。
    • 先ほど作成したDBサブネットグループを選択。
    • 非公開用セキュリティグループを選択。
    • 作成には若干時間がかかる。

EC2の作成

  1. EC2の作成
    • せっかくなのでAmazon Linux 2を選択。
    • 公開用サブネット、公開用セキュリティグループを選択。
  2. ElasticIPの取得、EC2への割当
    • ElasticIPは固定IPを無料で確保できるサービス。ただし起動中のインスタンスに割当中のみ無料で、停止していたり、割当しているインスタンス無いままだと課金されていく。
  3. キーペアの作成
    • 公開鍵(キーペア)を作成して、自宅からEC2へ安全にSSHログインできるようにする。
    • 当たり前だが他の人に公開してはならない、サーバ作業者にだけ渡す。
  4. SSHログイン確認
    • EC2は一定時間通信がないと切断する仕様があるので、それが嫌ならKeep Aliveの設定をクライアント側で行っておく(15秒に1回にした)。