OmniAICreator/Qiita-1.07M huggingface dataset:
お名前.comのvpsの初期設定でリポジトリにつながらない。


初期費用が無料だったりして安かったのでお名前.comのvpsを借りてみた。

osはcentos7.1を選択
サーバー会社の管理画面でcentos7.1を選んだあとosの再インストール。

インストールは無事に終わったのでコンソールからログイン

とりあえず

```
yum -y update
```

と、したところリポジトリを読み込めないとエラーが出た。
ググってみたところリポジトリのミラーを近い地域の物にすると直ることがあるとのことなので、理研のものにして試してみたがダメ。

そもそもネットワークがつながっていないのではと思い

```
ip addres
```

確認したところnicのipアドレスが表示されず

```
nmcli connection
```
nicの確認をしてみるとdeviceの欄がバッチリ動いてない

```
nmcli connection up eth1
```

でnicをアクティブにした後にネットワークの接続を確認

```
nmcli connection
```

今度はokなので

再度

```
yum -y update
```
無事アップデートされた。


##あとがき

今回設定の仕方をサラッと読んだだけでvpsを試してみたらいきなりつまづいてしまいました。
pcのセットアップでネットワークインタフェースを自分でオンにした経験がなかったので気がつかなかった...。
もしかしたら標準osはもう少し初心者向けに設定されていたりするんだろうか。

##参照

[【yum】yumが動かないときの簡易対処方法集（IOError、Trying other mirror、Determining fastest mirrors、フリーズ等）](http://qiita.com/sksmnagisa/items/fb78f2cc4f5ca85a639e)
http://www.unix-power.net/centos7/network.html
ionicアプリのソースコード公開

以下の技術要素を用いた、openlist(オープンリスト)というアプリを、2014年にapple storeにリリースしました。
ionicアプリ初心者が必要とする必須機能を実装しました。apple store,android marketで販売しましたが、マネタイズできず昨年断念しました。もともと初作で、とにかく必要な技術要素を盛り込み次へつなげるためのアプリという認識もありました。

そのアプリのコード一式を、githubおかせていただきます。
ダウンロード　https://github.com/ybangit/openlist
開き方　macのxcordでopenlist>platforms<ios 以下の OpenList.xcodeproj　で開きます。

当時は知らないionicとangularを英語の情報を参考に本当に全力開発しました。

アプリを簡単に説明しますと
●基本はローカル端末内での３階層todoリスト。
●加えてソーシャルの要素でネットワークを介して好みのtodoリストを「オープンリスト」からダウンロードして利用するものです。
そこでのローカルDBの制御、外部サーバとのhttp通信(jsonでmysqlサーバから情報を引っ張る)
などの基本的な機能、プラスionicフレームワークのcssによるカスタマイズ、等々、
説明不足ですが、興味あるかたはgitからダウンロードして、ビルドして、動きを見てみて参考にしてください。
。
ダウンロード　https://github.com/ybangit/openlist
開き方　macのxcordでopenlist>platforms<ios 以下の OpenList.xcodeproj　で開きます。
----------------------------------------------------------------------------
ダウンロードされた方、どうでしょうか、感想メッセージいただけると幸いです。
----------------------------------------------------------------------------


ベース( UI UX ) ・・・　IONIC 
ビジネスモデル　・・・　angularjs
端末操作　・・・　ngcordova
端末内データベース　・・・　sqlite　
外部サーバとの接続、ダウンロード (json)  ※現在、外部サーバは非稼働状態です。
翻訳・・・angular-translate.js 
広告・・・admob

(参考)(現在発売停止中)
http://www.appdownloader.net/iOS/App/950150676/com.softpark.openlist
http://www.appdownloader.net/iOS/App/950150676/com.softpark.openlist


・主な機能
　　1.端末上での３階層のTODOリスト作成　（項目・小項目・内容）
　　2.TODOリストの共有（外部サーバへの保存、外部サーバから他ユーザのTODOリスト取得 )
　　3.ユーザ登録のロジック、言語変更（英語表示）
　 4.広告（admob)

アプリ概要
あなたは日々チェックリストやtodoリストを0 から作成していますか？ 「今日はこれをやる、明日はこれをやる。このタスクを行うためにはなにをすればよいか？」 「ゼロから作るのは大変、、もっと良いやり方はないのかな？こういう時はどうするのかな？他の人はどうしているのだろうか、、」 そんなことを思った時ふと、すでにある程度のリストができあがっていれば便利ではないか？と考えました。 アプリ内で公開されているオープンなリストを探して活用する、それがOpen Listアプリです。 あなたのやることリストに「オープンリスト」を活用しませんか？ Open Listアプリでは、他のユーザが共有の場に公開した「オープンリスト」を探し、そのリストを自分のリストのテンプレートとして活用することができます。 そのようなユーザ体験を目指すアプリがOpen Listアプリです。 Open Listのユーザがそれぞれ自分のリストを公開することで、様々なリストが「オープンリスト」という場所に誰でも利用可能な形で公開されます。ユーザは公開されている様々なリストの中から自分に合ったリストを見つけ、自分にとって有用なリストをダウンロードし、それをカスタマイズすることができます。 そうすればこれまでのように0から考える時間が減り、生活が効率化されるかもしれません。 ぜひ一度Open Listアプリをお試しください。 ※無料版は画面下部に広告がつきます。
Sinatraで遊ぶ

#Sinatraで遊ぶ

##はじめに
[こちら](http://qiita.com/kimioka0/items/751e460cbb59c70379c6)の投稿を試してみた。
今日はここまで！細々といじっていきます。（随時更新）

![Capture 2016-04-04 23.32.14.png](https://qiita-image-store.s3.amazonaws.com/0/65994/00f32f71-b978-34da-475b-c75243f77468.png)
VimでNeoBundleを使えるようにしてMarkdownの環境を整える

最近Githubを使うことが多くなってきたので，Markdownを書けるようになりたいなと思って環境構築．

- OS X El Capitan バージョン 10.11.3
- VIM version 7.3

#NeoBundle とは
参考：[NeoBundle - neovim/vim入門](http://kaworu.jpn.org/vim/NeoBundle)
>NeoBundleとは、vimのプラグイン管理(プラグインマネージャ)のプラグインです。NeoBundleは、Vundleをベースにしています。Vundleとは違うコマンド名になっています。もし、今からプラグインマネージャーを使うのであれば、Vundleではなく、NeoBundleを使うべきです。vimのプラグインのインストールやアップデートを簡単に行えます。非同期実行のサポート、unite.vimの対応、リビジョン指定など、大幅に機能が強化されています。NeoBundleの開発は終了したため、VimとNeoVimのプラグインマネージャDein.vim を利用しましょう。

#NeoBundleのインストール
参考:[Shougo/neobundle.vim / Quick start - GitHub](https://github.com/Shougo/neobundle.vim#quick-start)
NeoBundleが置かれているGitHubレポジトリのQuick startを参考．

1. Setup NeoBundle:
ターミナルで以下のコマンドを実行

```
$ mkdir -p ~/.vim/bundle
$ git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim
```

2. Configure bundles:
.vimrcに以下の設定を記述．

```vim:.vimrc

 " Note: Skip initialization for vim-tiny or vim-small.
 if 0 | endif

 if &compatible
   set nocompatible               " Be iMproved
 endif

 " Required:
 set runtimepath^=~/.vim/bundle/neobundle.vim/

 " Required:
 call neobundle#begin(expand('~/.vim/bundle/'))

 " Let NeoBundle manage NeoBundle
 " Required:
 NeoBundleFetch 'Shougo/neobundle.vim'

 " My Bundles here:
 " Refer to |:NeoBundle-examples|.
 " Note: You don't set neobundle setting in .gvimrc!

 call neobundle#end()

 " Required:
 filetype plugin indent on

 " If there are uninstalled bundles found on startup,
 " this will conveniently prompt you to install them.
 NeoBundleCheck
```

書いたら```:wq```で一旦Vimを終了して，，以下のコマンドを実行．

```
$ vim +NeoBundleInstall +qall
```

これでNeoBundleの環境が整ったはず．

#Markdownの環境を整える．
参考(VimでMarkdownの環境を整える)[http://www.key-p.com/blog/staff/archives/9032]

以下のプラグインを導入します．

- [vim-markdown](https://github.com/plasticboy/vim-markdown)
  - syntax highlightingとかやってくれる．
- [open-browser.vim](https://github.com/tyru/open-browser.vim)
  - Vimで```:PrevimOpen```するとブラウザでMarkdownファイルのプレビューができる．
- [previm](https://github.com/kannokanno/previm)
  - プレビュー用のプラグイン.```:w```するとopen-browserで開いているプレビューも更新してくれる．

.vimrcに下記を追加．

```vim:.vimrc
NeoBundle 'plasticboy/vim-markdown'
NeoBundle 'kannokanno/previm'
NeoBundle 'tyru/open-browser.vim'
```

追記したら，
```:w```で保存．
```source $MYVIMRC```で.vimrcを再読み込み．
```:NeoBundleInstall```でプラグインを導入．

このままｍだと拡張子が.mkdのファイルに対してハイライトが適用されるらしいので，.mdファイルもMarkdownとして読み込むよう設定．

```vim:.vimrc
au BufRead,BufNewFile *.md set filetype=markdown
```

# 動作確認
下記のファイルを作成．

```md:test.md
# Header 1
## Header 2
### Header 3

- item 1
- item 2

>This is a blockquotes

| Left align | Right align | Center align |
|:-----------|------------:|:------------:|
| This       |        This |     This     |
| column     |      column |    column    |
| will       |        will |     will     |
| be         |          be |      be      |
| left       |       right |    center    |
| aligned    |     aligned |   aligned    |

```

書いたら```:w```で保存．
```:PrevimOpen```でブラウザがオープンする．
こんな感じで表示されたら終わり．
![スクリーンショット 2016-04-04 23.34.20.png](https://qiita-image-store.s3.amazonaws.com/0/90215/549f2771-192e-4a6b-2baa-a9fa917fc6e7.png)
ObjectStorage@BluemixをLinuxから見てみる

マニュアルに従ってやったら素直にできた。
https://console.ng.bluemix.net/docs/services/ObjectStorage/index.html#using-swift-cli

## ObjectStorage利用に必要なUserID等の情報を確認する
Bluemixのダッシュボードから、ObjectStorageのサービスを開くと、「サービス資格情報」というのがあるので、そこで各種情報を確認します。

![スクリーンショット 2016-04-04 23.29.07.png](https://qiita-image-store.s3.amazonaws.com/0/119378/af0e2256-23af-04fd-c50d-3de14bd63042.png)

## 使用するLinux環境で接続情報を設定ファイルに書く

設定ファイルといっても使うユーザの.bash_profileです。

```bash
$ cat .bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
	. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH
#以下を、さきほど調べた資格情報を元に追記をします。
export OS_USER_ID=xxxxxxxx
export OS_PASSWORD=xxxxxxxx~
export OS_PROJECT_ID=xxxxxxxx
export OS_AUTH_URL=https://identity.open.softlayer.com/v3
export OS_REGION_NAME=xxxxxxxx
export OS_IDENTITY_API_VERSION=3
export OS_AUTH_VERSION=3

#設定ファイルを読み込んで内容を反映させます
$ source .bash_profile

```

##ObjectStorageの内容にアクセスしてみる
swiftコマンドですぐにアクセスできます。

```bash
#以下コマンドで内容をダウンロード。
#test1というコンテナからtest_textをダウンロード
$ swift download test1 test_text
test_text [auth 0.841s, headers 1.607s, total 1.607s, 0.000 MB/s]

#ダウンロードできたかを確認
$ ls
test_text

#内容確認
[ibmcloud@testvm ~]$ cat test_text
Object Storage用のtest text
```

かんたん！
web製作に使う用語集

web製作に使われる基本的な用語をまとめました。

## ページ関連
### Webサイト内のパーツを示す用語
- ヘッダー
- フッター
- パンくずリスト
- グローバルナビゲーション
- サイドバー
- ファビコン
- アンカーリンク

## SEO関連
- sitemap.xml
- robots.txt
- canonical属性
- alternate属性
- titleタグ
- meta description
- h1タグ

## セキュリティ関連
- SSL
- SSL証明書
- オレオレ証明書
- BASIC認証
- SQLインジェクション
- CSRF (クロスサイトリクエストフォージェリ)
- XSS (クロスサイトスクリプティング)

## デザイン関連
- レスポンシブデザイン
- ワイヤーフレーム

## 開発関連
- CI (Continuous Integration)
- デプロイ
- トルツメ
- ユーザーエージェント
シンプルモダンなデザインのボタンサンプル

以下のようなシンプルモダンなデザインのボタンをつくりたいときの
サンプルコードです。
カーソルを合わせた時の色も変化します。

![btn.png](https://qiita-image-store.s3.amazonaws.com/0/117147/11b49bf8-b8a9-47ba-6afc-5abdb9b93217.png)

```html
  <div id="btn">ボタンを押す</div>
```

```css
    #btn{
      margin: 30px auto;
      width: 180px;
      border-radius: 5px;
      box-shadow: 0 4px 0 #e91b0c;
      background: #f44336;
      color:#fff;
      cursor: pointer;
      padding: 7px;
    }
    #btn:hover{
      opacity: 0.8;
    }
```
IPアドレス(v4)について説明してくださいと要求された

社会人一年目の時、OO年目の先輩からタイトルのような質問を受けました。当時、基本情報と.com masterシングルを二連敗するぐらい、ITリテラシーの低かった私は「パソコンの位置を特定する４つの数字の組み合わせですよね？」と答えた記憶があります。あれから数年経った今日、まったく同じ質問を同僚が社会人一年目の人にしていました。

IPアドレスについて説明すると聞くと、簡単なようですごく奥が深いように思います。アプリケーションにすごく詳しい方や、ベテランエンジニアであってもIPアドレスに対してまったく説明できない方もいたり、、、。私が一年目の時、先輩から受けた質問は「基礎知識をきちんと理解することが大切だよ。」という意図があったのでしょう。

今日、質問を受けた一年目の人は「32bitで表現される、情報機器の論理的な位置情報で、L3のネットワークにおけるEtoEの通信を実現します」と答えていました。。。一年目の人は優秀すぎる。。。
GitHub Pages でデモ用 Web サイトを無料公開する方法

Qiita の記事を書いているときデモ用の Web サイトを作成して公開したいときがある。そんなときに GitHub Pages で静的な Web サイトを無料公開するのが便利なのでメモっとく。

# GitHub にリポジトリを作成する

この記事では Repository name を github-pages-demo でリポジトリを作成する。

![Screen Shot 2016-04-04 at 23.10.35.png](https://qiita-image-store.s3.amazonaws.com/0/67627/b16d3889-1dc5-d200-f46c-bc4ebdd14e11.png)

# デモ用 Web サイトを制作する

```bash
$ mkdir github-pages-demo
$ cd github-pages-demo
$ cat > index.html << EOS
<!DOCTYPE html>
<title>Demo Website</title>
<h1>Demo Website</h1>
EOS
```

# ローカルに Git リポジトリを作成してコミットする

```bash
$ git init
$ git add .
$ git commit -m "Add a demo website"
```

# master ブランチを gh-pages ブランチに変更する

gh-pages ブランチのコンテンツが Web サイトとして公開される。GitHub Pages を利用したいだけのリポジトリなので master ブランチは不要。

```bash
$ git branch -m master gh-pages
```

# gh-pages ブランチを GitHub リポジトリにプッシュする

```bash
$ git remote add origin https://github.com/takuya0301/github-pages-demo.git
$ git push origin gh-pages
```

# takuya0301.github.io/github-pages-demo に公開される

http://takuya0301.github.io/github-pages-demo

![Screen Shot 2016-04-04 at 23.19.25.png](https://qiita-image-store.s3.amazonaws.com/0/67627/7184bdbb-116a-c51d-bd0d-4edf4909ef33.png)
ミニマリストのためのVim + Tex環境

# 最低限度のTex編集環境をVimで実現する。

下記の４つをとりあえず実現したい。

- VimでLaTeXコードを編集
- そこそこのハイライトと編集補助
- 編集しながらコンパイル＋結果の閲覧
- （いずれ）コンパイル命令を選択（英文ならpdflatex、luatexなら日本語など）


いろいろ迷った結果、結局 「[latexmk](http://users.phys.psu.edu/~collins/software/latexmk-jcc/) + [vimtex](https://github.com/lervag/vimtex/)プラグイン + vimrc」を選択した。
欲しい機能を実現しつつ、なるべくブラックボックス化しないことを心がけた。
latexmkは、texコードのコンパイルを支援するアプリケーションで、これ自体はVimとは関係ない。texコードのコンパイルは、相互参照の反映のために複数回走らせる必要があるが、latexmkはどんな命令が何回どういう順序で必要なのかをコードの中身から判定し、その通りに走らせてくれる。もちろｎ、Vim以外でも使用可能。
一方、vimtexプラグインは、Vim編集中にlatexmkを用いて文書をコンパイルしたり閲覧したりする機能を提供している。また、ハイライトと編集補助も多少ついてくる。
必要な追加機能はvimrcのカスタマイズで実現する。

環境はUbuntuを想定している。


# latexmk のインストール

texliveを入れた時についてきていたらしい。
適当なtexファイルを用意して、端末から

```
latexmk -pdf test.tex
```
としてPDFファイルが出力されればインストールできている。


# vimtexプラグインのインストール

Vimのプラグインの管理ツールはいくつか有名どころがあるそうだが、僕は [vim-plug](https://github.com/junegunn/vim-plug) というツールを使うことにした。必要十分な機能に絞られていて、あまり煩くないのが良いと思う。


## vim-plugのインストール

[Githubページ](https://github.com/junegunn/vim-plug)のREADMEに従い、本体の[plug.vim](https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim)
 をダウンロードして、 `~/.vim/autoload/` に保存する。

Vimを開いて、

```
:PlugInstall
```
というコマンドが入っていれば成功している。


## vimtexのインストール

[Githubページ](https://github.com/lervag/vimtex/)のREADMEに従い、自分の.vimrcファイルに以下を追加する。`Plug 'xxx/yyy'`というのは、Githubからインストールするための省略記法らしい。

```
call plug#begin('~/.vim/plugged')

Plug 'lervag/vimtex'

call plug#end()
```

再びVimを開いて、`:PlugInstal`を走らせると、指定されたプラグインがインストールされる。
終わったら、`:nmap`としてみて、vimtexが提供されるマッピングがリストに入っていれば成功している。たとえば、vimtex-view vimtex-compile-toggle など。


## vimrcでカスタマイズ

僕は、普段は pdflatexをコンパイルに使っているので、.vimrcには下記を追加している。
`latexmk -pdf` はpdflatexでコンパイルさせるオプションらしい。
いずれ、日本語のコンパイルが必要になった時にはluatexに切り替えるためのマッピングを書こうと思う。

```
let g:latex_latexmk_options = '-pdf'
```

# 動作確認

適当なTexファイルをVimで開いて、コマンド `<localleader>ll` を打つ。すると、continuousモード（保存するたび再コンパイル）のオンオフが切り替わる。出力結果を見るためには、 `<localleader>lv` とする。するとデフォルトのPDFビューアで文書が開かれる。Continuousモードなら、スクリプトを更新して保存するたびに文書も更新される。
Rails勉強備忘録

知り合いがまとめてくれた記事。
http://qiita.com/runamoon@github/items/5277970364dca43b1204

# ActiveRecord::Aggregations::ClassMethods

バリューオブジェクト関連のメソッド。

```rb
class Customer < ActiveRecord::Base
  composed_of :balance, class_name: "Money", mapping: %w(balance amount)
  composed_of :address, mapping: [ %w(address_street street), %w(address_city city) ]
end
```

# ActionDispatch::Routing::Mapper::Concerns

```rb
concern :commentable do
  resources :comments
end

concern :image_attachable do
  resources :images, only: :index
end

resources :messages, concerns: [:commentable, :image_attachable]
```

# ActiveModel::AttributeMethods::ClassMethods

alias_attribute(new_name, old_name)

```rb
class Person
  include ActiveModel::AttributeMethods

  attr_accessor :name
  alias_attribute :nickname, :name
end

person = Person.new
person.name = 'Bob'
person.name            # => "Bob"
person.nickname        # => "Bob"
```

# ActiveRecord::Associations::ClassMethods

Polymorphic Associations の実装方法

```rb
class Asset < ActiveRecord::Base
  belongs_to :attachable, polymorphic: true
end

class Post < ActiveRecord::Base
  has_many :assets, as: :attachable
end
```

# ActiveRecord::AttributeMethods::Serialization::ClassMethods

serialize のデフォルトはYAML

```rb
class User < ActiveRecord::Base
  serialize :preferences, JSON
end

class User < ActiveRecord::Base
  serialize :preferences, Hash
end
```

# ActiveRecord::Store

serialize のラッパー。

```rb
class User < ActiveRecord::Base
  store :settings, accessors: [ :color, :homepage ], coder: JSON
end
```

# ActiveRecord::Querying

find_by_sql の戻り値は配列

# ActiveRecord::Batches

find_in_batches のオプションは batch_size と start

# ActiveSupport::Testing::Assertions

assert_difference の書き方は3パターン

```rb
assert_difference 'Article.count' do
  post :create, article: {...}
end

assert_difference [ 'Article.count', 'Post.count' ], 2 do
  post :create, article: {...}
end

assert_difference ->{ Article.count }, 2 do
  post :create, article: {...}
end
```

# Rails 固有のアサーション

* assert_difference
* assert_no_difference
* assert_recognizes
* assert_generates
* assert_response
* assert_redirected_to
* assert_template
[git] コミットログから差分ファイルの抽出・一覧作成の方法

gitのリポジトリのあるフォルダ内で下記を実行する

# 差分ファイル（パッチ）の作成方法

```
git diff --no-prefix XXXXXX HEAD > ~/Desktop/patch.`date +"%Y%m%d"`.diff
```

※ XXXXXX ： gitのコミットの番号（短い方で大丈夫のようです）

# 差分ファイルのファイル名のみの一覧の作成方法

```
git diff --stat --name-only --no-prefix XXXXXX HEAD > ~/Desktop/list.`date +"%Y%m%d"`.txt
```

# 差分ファイルのみをコピーしてzip圧縮

```
git archive --format=zip --prefix=archive/ HEAD `git diff --name-only --diff-filter=ACRM  XXXXXX HEAD` -o ~/Desktop/archive.`date +"%Y%m%d"`.zip
```

※ diff-filter 参考： http://qiita.com/usamik26/items/bfc2196f510d68b3c2cc

# 差分ファイル適用方法

※ patch.201601XX.diff が差分ファイルとする

## dry-run(仮適用)で動作確認

```
patch -p0 --dry-run < patch.201601XX.diff
```


## 本適用

```
patch -p0 < patch.201601XX.diff
```
Macからログイン画面経ずにAWS Management Console行くで！(CLIワンライナー編)

# Macからログイン画面経ずにAWS Management Console行くで！(CLIワンライナー編)

[前回の記事](http://qiita.com/uji52/items/c779ceb447cd5c3b3a0f)ではNode.jsでポリシ切って真面目にログインしてたけども

そこをワンライナーでPolicyガバガバで深夜テンションでやっただけの記事。

前回のん読んでなくても読める感じに書いてます。

## ターゲット

+ AWS使う人
+ ログイン画面でログインするのが面倒くさい人
+ Macユーザ(じゃなくても良いけど、openコマンド使ってるので窓の場合はそこの書き換えが必要)
+ cliをちょっとは触ったことがある。

## 技術要素とライブラリ

技術要素

+ AWS IAM
+ AWS STS
+ AWS-CLI
+ jq
+ sed
+ xargs
+ sed
+ xargs
+ sed

## やったこと

+ IAMでロールを作成
+ ワンライナーを書く

### Role

Roleの作成としては

+ AssumeRole52というロールを
+ AdministratorAccessのポリシを当てて
+ 信頼関係から、使うユーザがそのロールを使うための権限を与える

ポリシに関しては下図の通り

![Role1.png](https://qiita-image-store.s3.amazonaws.com/0/103725/20773f5d-f1f6-0346-02d4-18eeb4bd6dce.png "Role1.png")

信頼関係タブから「信頼関係の編集」を選んで下の感じでユーザを書き足したらOK

```
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com",
        "AWS": "arn:aws:iam::数字:user/ユーザのID"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

追加したら画面にユーザの情報が追加される

![Role2.png](https://qiita-image-store.s3.amazonaws.com/0/103725/2742f9a0-5dc2-c01d-81cf-d40148c32318.png "Role2.png")

ただ、今回のワンライナーはで払い出されるセッションはまるまるこのロールが与えられるから、AdministratorAccessなんぞ絶対許可せず、触りたいサービスの許可したいActionだけに絞ってRoleを与えるくらいの認可制御しなきゃなんやで。

### コード

下のワンライナーの__ロールのARN__って書いてるとこを、さっき作ったロールのARNに置き換えたら、デフォルト通り900秒使えるManagement Consoleが帰ってくるんやで！

```
aws sts assume-role --role-arn ロールのARN --role-session-name uji52|jq -r '"%7B%22sessionId%22%3A%22"+.Credentials.AccessKeyId+"%22%2C%22sessionKey%22%3A%22"+.Credentials.SecretAccessKey+"%22%2C%22sessionToken%22%3A%22"+.Credentials.SessionToken+"%22%7D"'|sed -e "s/=/%3D/g"|sed -e "s/+/%2B/g"|sed -e "s/\//%2F/g"|xargs echo "https://signin.aws.amazon.com/federation?Action=getSigninToken&SessionType=json&Session="|sed -e "s/ //g"|xargs curl -s|jq -r ".SigninToken"|xargs echo "https://signin.aws.amazon.com/federation?Action=login&Issuer=oneliner52&Destination=https%3A%2F%2Fap-northeast-1.console.aws.amazon.com%2Fconsole&SigninToken="|sed -e "s/ //g"|xargs open
```

## まとめ

昼間に「あれ？ワンライナーで書けるんじゃね？」って思ってしまったばっかりに、無駄な挑戦を行い、人生初のワンライナー(700文字弱)が完成。

aws stsの引数でお好きなポリシー切ったりセッションの時間伸ばす等して、各々楽しんでくださいませ。
C++使えそうなものメモ

メモも兼ねて見つけたら追加

# ライブラリ
- Json
    - https://github.com/nlohmann/json
- Websocket
    - http://pocoproject.org/docs/Poco.Net.WebSocket.html
        - 有名らしい
    - https://github.com/zaphoyd/websocketpp
        - boostに依存
    - https://github.com/dhbaird/easywsclient
        - 依存が少なくて必要最低限なclient機能
- Networking Engine
    - https://github.com/OculusVR/RakNet
        - RPCとかマッチングとか盛りだくさん。日本語ドキュメント少ない気がする
- preprocess
    - http://mcpp.sourceforge.net/
        - Unreal Engineで使ってるらしい


# 実装手法
- Fiber
    - https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%90%E3%83%BC_%28%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%29

# C++11
- type alias
    - http://en.cppreference.com/w/cpp/language/type_alias
        - 独自allocatorを使ったstd::stringの名前付でstructでラップしたり::type_tとか付けなくてよくなる
- emplace
    - http://kyasu.sakura.ne.jp/?type=single&id=20141124033430
        - コンテナへの要素追加でコピーコンストラクタ呼び出し減らせる
- constexpr
    - http://kaworu.jpn.org/cpp/constexpr
        - コンパイル時定数。コンパイル時点で文字列ハッシュ値を拾えたりする
        - http://blog.wonderrabbitproject.net/2014/01/c-constexprswitch.html

# C＋＋とは全然関係ないけど便利そうなもの
- 構造化DBエディタ
    - CastleDB http://castledb.org/
    - JSONフォーマットな表形式エディタ。OSSなゲーム開発ツールの一部らしい
    - Excel(基本データ)→CastlrDB(編集)→JSON(登録用データ)みたいなフロー

- Meteor
    - https://www.meteor.com/
    - Node.js, JS, HTML+CSSなアプリケーション開発プラットフォーム
    - JS周りの豊富なライブラリを利用でき、UIもいい感じにしやすい
    - ちょっとした表編集アプリくらいならすぐ作れそう

- Electron
    - http://electron.atom.io/
    - Node.js, JavaScript, HTML, CSSなアプリ開発環境
    - Atomに使われているので実績豊富
    - Electron + Photonkit + React + babel + gulpあたりが基本的な開発セット？
    - 表を表示したいときはFacebookの表ライブラリがよさげ
        - https://facebook.github.io/fixed-data-table/
未経験エンジニアの学習内容一覧【随時更新】

#未経験から始めた場合、開発エンジニアとして学習してほしい内容
弊社では社内勉強会がありまして、
その中で年間のカリキュラムを作成しています。
そのカリキュラムの内容を参考にしながら一覧として並べ、
それをqiitaにまとめていきたいな、と勝手に考えています。
毎年少しずつ違ったりするのですが、大きな幹の部分は以下の内容がメインとなります。

##・HTMLの基礎
webアプリの画面作成に必要なHTMLの基礎を学ぶ。
[HTMLの学習【新人エンジニア：未経験者向け】](http://qiita.com/book_o_bitch/items/413b0ce7e6db43c1f4e8)

[HTMLの学習その2【新人エンジニア：未経験者向け】]
(http://qiita.com/book_o_bitch/items/c36980a2350d59b3e1c1)

[HTMLの学習その3【新人エンジニア：未経験者向け】]
(http://qiita.com/book_o_bitch/items/93caff9d8b0774ec0d15)

##・CSSの基礎
webアプリの画面作成に必要なCSSの基礎を学ぶ。
詳細は別途投稿して、リンクをここに貼っていきたいと思います。

##・Javascriptの基礎
webアプリのクライアントサイドに必要なJavascriptの基礎を学ぶ。
[JavaScriptの学習 〜ブラウザオブジェクトを操作してみよう〜]
(http://qiita.com/shigeru_cw/items/39773a48283616679866)

##・Javaの基礎
webアプリのサーバーサイドに必要なJavaの基礎を学ぶ。
詳細は別途投稿して、リンクをここに貼っていきたいと思います。
[Javaの学習【新人エンジニア：未経験者向け】](http://qiita.com/book_o_bitch/items/ad3e52d059ff18150ad4)

##・テスト手法の基礎
webアプリ作成時に必須となるテスト手法について学ぶ。
詳細は別途投稿して、リンクをここに貼っていきたいと思います。

##・SQLの基礎
DB操作に必須となるSQLの基礎を学ぶ。
詳細は別途投稿して、リンクをここに貼っていきたいと思います。

##・Excel操作の基礎
資料作成時に役立つExcel(VBAも)の基礎を学ぶ。
詳細は別途投稿して、リンクをここに貼っていきたいと思います。

##・webアプリケーションの作成
上記学習を踏まえ、webアプリケーション作成を学ぶ。
詳細は別途投稿して、リンクをここに貼っていきたいと思います。
Androidのmipmap/drawableの縮小画像を自動生成するPluginを作った

# Androidのdrawableとmipmap

Androidアプリ開発ではたくさんの端末解像度に対応するため、画像ファイルを下記のようなディレクトリに分けてアプリに組み込む。そうすると、OSは自動的に最適解像度の画像を拾ってアプリに渡してくれる。

 * drawable-mdpi
 * drawable-hdpi
 * drawable-xhdpi
 * 以下略

ただし、このディレクトリ数は嫌になるほど多いし、メンテも大変になる。その他にもmipmapが入ってきたりすると、画像を出力するのもそれを正しいディレクトリに配置するのも、もし不要になったら削除するのも一苦労だ。

そうなってくると、どうにかコイツらを自動的に管理したい。やろうと思えばShellでもなんでもできるが、Gradleのpluginにしてしまったほうが再利用しやすいので、Pluginとして公開した。

# このプラグインでやれること

drawable/mipmapの画像メンテを１枚のみに絞れるので、リソースの出力や管理コストを減らせる。デザイナーから大量に*.pngを受け取って、配置に四苦八苦することもなくなるぞ！

# いつもどおりgithubで公開している

 * https://github.com/eaglesakura/plugin-android-mipmap
 * やってることは単純なので、修正も多分簡単に出来るよ。

# 使用例

例として、デザイナーにxxhdpi用の画像を出力してもらったとしよう。

本来であれば、デザイナーに「じゃあそれをdrawable-xxhdpiに配置して、xhdpiとhdpiとmdpiとldpiディレクトリにも配置してね。解像度はガンバって計算してね。ヨロシク」と言ってぶん投げることになる。もしくは自分でそれをヤルことになる。

メンドウである。

プラグインを使った場合、 `/app/images/drawable/xxhdpi` 配下に件の画像を配置し、gradleの `androidBuildMipmap` か `aBM` コマンドを叩くだけで画像の生成と配置を行ってくれる。

* プラグインをbuild.gradleに追記する

```groovy

buildscript {
    repositories {
        maven { url "http://eaglesakura.github.io/maven/" }
    }

    dependencies {
        classpath "com.eaglesakura:plugin-android-mipmap:1.0.5"
    }
}

```

* plugin追加して、mipmapブロックを追加して、指定項目を埋める

```groovy

apply plugin: 'com.eaglesakura.android-mipmap'

// Mipmapの入力・出力ディレクトリを指定する
mipmap {
    sources = file("images/");
    output = file("src/main/generated/images");
    toolsPath.identify = new File("C:\\dev-home\\tools\\imagemagick\\identify.exe");
    toolsPath.convert = new File("C:\\dev-home\\tools\\imagemagick\\convert.exe");
}

```
* pluginをapplyすると、 `androidGenMipmap` タスクが追加されるので、実行する
* 元画像をこうやって配置する
    * mipmapを生成したい場合は、 `/app/images/drawable/xxxhdpi` 配下にリソースを置いておけば良い。

<img src="https://github.com/eaglesakura/plugin-android-mipmap/raw/v1.0.x/doc/images/sources.png" width="450"/>
* 生成された画像はこんな感じに配置される
<img src="https://github.com/eaglesakura/plugin-android-mipmap/raw/v1.0.x/doc/images/output.png" width="450"/>

* あとはアプリ側のandroidブロックをこんな感じに追記すれば、勝手に生成されたdrawableがアプリ側に認識される

```groovy

android {
    sourceSets {
        main {
            res.srcDirs = [
                    "src/main/res", "src/main/generated/images"
            ];
        }
    }
}
```

## 既知の問題点

このプラグインはImageMagickというツールと連携して、画像の縮小を行うようになっている。ImageMagickのコマンドと連携するため、追加のインストールが必要という点や、インストールディレクトリがバラバラだった場合の統一がメンドウという問題点は残っている。

複数の人間がタスクを使う場合は、環境変数とかを上手く使おう。

やろうと思えばJavaで縮小処理を行えるが、画質を考慮すると既存ツールを利用したほうが良いのは確定的に明らかである。

今のところWindows環境でのみチェックしてるので、MacやUbuntuで正しく動くかは不明。

# これは車輪の再発明なのか

ガンバって探したけど、これを実現してくれるいい感じのツールが見つからなかったので、もっと便利なものがあったらそっちを使いたい。

むしろ、みんな使ってるデファクトスタンダードなツールを俺が知らないだけでは？という気分になっている。
gulp-uglifyでJavaScriptを圧縮する (CentOS 7)

# 環境

```
$ cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 
```

# インストール

```
$ sudo yum install npm
$ sudo npm install gulp -g
$ echo '{}' > package.json
$ npm install gulp --save-dev
$ npm install gulp-uglify --save-dev
$ gulp -v
[22:10:40] CLI version 3.9.1
```

# 設定ファイル記述

gulpfile.jsというファイルを作って下記記述

```js:gulpfile.js
var gulp = require("gulp");
var uglify = require('gulp-uglify');

var src = './source';
var dst = './destination';

gulp.task('default', function(){
  gulp.src(src+'/*.js')
    .pipe(uglify())
    .pipe(gulp.dest(dst));
});
```

# 実行

非圧縮ファイルを./source配下に配置

```js:source/sample.js
var hogehogefugafuga = 12345//67890
console.log(hogehogefugafuga);
```

圧縮

```
$ gulp
[22:25:26] Using gulpfile ~/gulpfile.js
[22:25:26] Starting 'default'...
--------- uglify task ----------
[22:25:26] Finished 'default' after 14 ms
```

./destination配下で結果を確認

```js:destination/sample.js
var hogehogefugafuga=12345;console.log(hogehogefugafuga);
```

# 参考

- [gulpとは何か | CodeGrid](https://app.codegrid.net/entry/gulp-1)
- [Gulp導入メモ - Qiita](http://qiita.com/nogson/items/aed0727305add9d237b0)
VSSerの為のGit入門

##さきがき

>GitをVSSで説明する。それはウーロン茶を麦茶で説明するようなものだ。
> - 2016.04.04 ORE


##VSSerの悲しい宿命
VSS(※1)とは、人類が火を得たころに全盛期だったシュレッダーだ。
何故だか、今でも脈々と伝統が受け継がれている。

おそらく、多くのVSSer(※2)はこう思っている。
「Git怖い」、と。(て言うか今日会った。)

VSSerは次の言葉が理解できないはずだ。
「Git立ててリポジトリ新しく切りました。今までの分はマージしてあるので、
一旦クローンして中を確かめてください。今後はイシューでブランチ切っていきます。
その後は担当ごとにブランチ切るもよし。Commit,Pushは各リーダにチャットで飛ぶようにできるので、
適宜マージをお願いします。」

VSSerにとっては謎だろう。だが、こんなこと言う管理者はいない。
(安心していいわけじゃない。)

なぜなら、「リポジトリ切りました」で通じるからだ。


だが、安心してほしい。
今こそ、VSSerの門扉を開きたい。GitとVSSの精神世界を結ぼう。

Vivaおっさん。

尚、GitをむりくりVSSで説明しているので、
「こっちの方が分かりやすい」と言う突込みがあれば、
是非編集リクエストを送ってほしい。
（て言うか、ぜひお願いします）

##VSSer用のGitを説明
以降、「○○○」はVSSで言う所の「×××」で説明して行く。
最終的に最初の暗号文が解けるようになれば幸いだ。

# 「Gitを立てた」は「VSSをインストールできる端末を用意した」
「VSSを用意した」ではない。VSSをインストールできる端末を用意したのだ。利用するためには「リポジトリ」なる物が必要だ。

# 「リポジトリを切った」は「VSSをインストールした」
　かなり語弊があるが、例なのではっきり言おう。リポジトリが一つのVSSと思ってほしい。

# 「クローンする」は「ローカルに最新バージョンをコピーする」
　『上書きはどうした？』何て言わないでほしい。腕のあるVSSerたちはVSSがいつ壊れてもいいようにソースを複数ローカルコピーしているのだ。

# 「ブランチを切る」は「VSSを新しくインストールして元のVSSからコピーしてきたファイルをチェックインする」
　新しいVSSは何をしても元のVSSに影響を与えない事が重要。

# 「マージ」は「VSS管理者が依頼されたVSSの内容で自身のVSSを上書きする事」
　ちょっとややこしいが、次の項目を読んでほしい。

# 「マージリクエストを送る」は「自身のVSSの内容で管理者のVSSの内容を上書きしてほしいと管理者へ依頼する事」
　あくまで自分のVSSを管理者に精査してもらって問題なければ上書きしてしてもらう。

# 「イシュー(ISSUE)」は「ラベル」
　要は仕様変更など大きな作業単位に付けるラベル。

# 「Commit」は「ローカルPCで保存してVSS管理者へ変更内容を伝える事」
　あくまでチェックインでない事に注意。「こんな変更があるよ」と伝える事が重要。

# 「Push」は「チェックインする」
　VSSer大好きチェックイン。説明なんていらない。


# もう一回先頭の文を読みなおそう。
「Git立ててリポジトリ新しく切りました。今までの分はマージしてあるので、
一旦クローンして中を確かめてください。今後はイシューでブランチ切っていきます。
その後は担当ごとにブランチ切るもよし。Commit,Pushは各リーダにチャットで飛ぶようにできるので、
適宜マージをお願いします。」


何となく、VSSと世界が繋がっていないだろうか。


尚、ココまで読んで、VSSerは不思議に思うだろう。
「Checkoutどこ行った」と、
はっきり言おう。

VSSで言う所のcheckoutは無い。
と言うか必要ない。

何故ななら、
[commit->push->merge]の三段階で何とかなるからだ。
排他なんていらないのだ。

※1 : Visual Source Shredderはマイクロソフトが生み出した当時扱いやすかったソース管理ソフト今やVSSと言うと別の意味になってる。
※2 : ソース管理でVSSオンリーの経験しかない人。
gradle の FindBugs プラグインで progress 出力を無効化する

とあるプロジェクトで、 gradle で findbugs task を実行したときに

```
Pass 1: Analyzing classes (538 / 552) - 97% complete
Pass 1: Analyzing classes (539 / 552) - 97% complete
```

みたいな内容がブワーッと出力されて、大事なログが埋もれてしまうようになってしまった。

必ずしも (どのようなプロジェクトでも) おきるわけではなくって、

* gradle task を parallel 実行している (`org.gradle.parallel=true`)
    * しかも並列度が高い場合？
* FindBugs の実行対象が多い

場合に再現するようである。

これを、根本治療が難しかったので、ちょっと hack をしてログに出力されないようにした、というお話。

# 原因

* gradle (現時点で 2.12) で parallel processing を有効にしている場合、 標準出力を capture する機構 (`logging.captureStandardOutput()`) がうまくいかない (ことがある?) [GRADLE-3000](https://issues.gradle.org/browse/GRADLE-3000)
* gradle の FindBugs plugin は、実行時オプションとして `-progress` を[つけている](https://github.com/gradle/gradle/blob/4437eb/subprojects/code-quality/src/main/groovy/org/gradle/api/plugins/quality/internal/findbugs/FindBugsSpecBuilder.java#L160)
    * `Pass 1: Analyzing classes` みたいに出力しているのは progress option の結果
    * 上記の stdout capturing がうまく働いた場合、この progress の出力も capture されて log には出力されないはず

# 対処

[GRADLE-3000](https://issues.gradle.org/browse/GRADLE-3000) が直れば一番いいんだけど、一年以上対応される様子もなく、簡単に直す方法も思いつかなかった。ので、とりあえず FindBugs にわたすオプションから `-progress` を削除することで対処した。

ざっくりいうと、デフォルトの FindBugs plugin (`org.gradle.api.plugins.quality.FindBugsPlugin`) を継承して `-progress` を渡さない plugin をつくり、それを使用する、ということ。

具体的には、プロジェクトに 
`buildSrc/src/main/groovy/FindBugsWithoutProgressPlugin.groovy` という名前で以下のファイルをおいておく。

```groovy
// groovy は package scope の関数等にアクセスできるみたいだけど一応 package を揃えとく
package org.gradle.api.plugins.quality

import org.gradle.api.JavaVersion
import org.gradle.api.logging.LogLevel
import org.gradle.api.plugins.quality.internal.findbugs.*

class FindBugsWithoutProgressPlugin extends FindBugsPlugin {
    // 本来必要ないけど configureTaskDefaults() で extension 使っているので用意しておく
    private FindBugsExtension extension

    @Override
    protected Class<FindBugs> getTaskType() {
        return FindBugsWithoutProgress
    }

    // ここで extension 埋めておく
    @Override
    protected CodeQualityExtension createExtension() {
        extension = super.createExtension() as FindBugsExtension
        return extension
    }
}

class FindBugsWithoutProgress extends FindBugs {
    // FindBugs#run() のほぼそのままのコピペ
    @Override
    void run() {
        new FindBugsClasspathValidator(JavaVersion.current()).validateClasspath(getFindbugsClasspath().files*.name)

        // FindBugs の options から -progress を除去する
        FindBugsSpec spec = generateSpec()
        List<String> args = spec.getArguments()
        args.remove(args.indexOf("-progress"))

        FindBugsWorkerManager manager = new FindBugsWorkerManager()

        logging.captureStandardOutput(LogLevel.DEBUG)
        logging.captureStandardError(LogLevel.DEBUG)

        FindBugsResult result = manager.runWorker(getProject().getProjectDir(), workerProcessBuilderFactory, getFindbugsClasspath(), spec)
        evaluateResult(result);
    }
}
```

あとは

```groovy
apply plugin: "findbugs"
```

のように plugin を読み込んでいるところを

```groovy
apply plugin: FindBugsWithoutProgressPlugin
```

のように変えればよい。 (findbugs plugin の設定部分はそのままでよい)
OpenAMのダッシュボードにAWSマネジメントコンソールを表示させる方法

# 概要
「[OpenAMを使ってAWSマネジメントコンソールにSSOする](http://qiita.com/Tom3/items/c1d457850a6f3f0b9f9f)」までで構築してきた環境をより快適にすべく、OpenAMのダッシュボード機能を使う設定を行います。

# 目的
これまでに構築してきた環境は、SSOする際に<http://example.com:8080/openam/idpssoinit?metaAlias=/idp&spEntityID=urn:amazon:webservices> というようなURLにアクセスするような紹介をしてきましたが、これでは利便性が悪いのでOpenAMのダッシュボードにアプリ登録する形で利便性を向上させます。

# 前提
OpenAMとAMC(Amazon Web Console)におけるWebSSOが構築されていること。

# 手順
以下の手順を紹介します。
1. OpenAMに管理者アカウントでログインします。
2. [CONFIGURATION]>[Global]>[Dashboard]の順で選択して、[New]をクリックします。
3. 各項目に以下のように入力を行い、[Add]をクリックします。
    　- Name:AWSConsole
    　- Dashboard Class Name:SAML2ApplicationClass
    　- Dashboard Display Name:AWS Management Console
    　- Dashboard Login:http:http://example.com:3030/opnam/XUI/#dashboard/
    　- Dashboard Name:AWS Management Console
    　- ICF Identifier:(未入力)
    　- dashboard Icon:(任意)
4. 次に[Top Level Realm]>[Services]>[Add]の順で選択する
5. [New Value]に、'Dashboard Class Name'を入力して[Finish]をクリックします。
6. 再度[Top Level Realm]>[対象ユーザ]>[Services]>[Dashboard]の順で選択し、'Dashboard Class Name'を入力して[Save]をクリックします。

# 動作確認
<http://example.com:8080/opnam/XUI/#dashboard/>にアクセスして、ログインした後ダッシュボードにAMCのアイコンが表示されます。あとはアイコンをクリックすればSSOアクセスできます。その他のツール（例えば、redmine などのチケット管理）も同様にダッシュボードに追加すると、より便利になると思います。
![OpenAM-Dashboard.png](https://qiita-image-store.s3.amazonaws.com/0/118448/39f4271e-a37f-bfa5-29f7-5069b3d28f74.png)

以上。
参考メモ/VirtualBox 4.x + Windows7 Host + Linux Guest で全角/半角キーのリピート問題(最新では発生しない？)参考URLメモ

1-2年前に、VirtualBox 4.3 とかでWindows7 Host + Linux Guest 使ってた時、Linux Guest で全角/半角キーを押すとずーっとIMの切り替えが続き、連打状態になった時がありました。
その時にググったメモです。

- #5543 (Japanese KB Hankaku key on linux guest (keycode = 49) is repeated incessantly !) – Oracle VM VirtualBox
  - https://www.virtualbox.org/ticket/5543
- VirtualBox での漢字キーリピート不具合の対処 | DeVlog - 銀の翼で翔べ -
  - http://www.devlog.alt-area.org/?p=1917
- [opensuse-ja] VirtualBox on Windows の 半角/全角 キー問題
  - http://lists.opensuse.org/opensuse-ja/2013-02/msg00033.html
- VirtualBox on Windowsで半角/全角キーが連打状態になる問題の対処法 - kamaruのメモその他諸々
  - http://d.hatena.ne.jp/ka_maru/20090607/1244311102
- 【Ubuntu】Virtualbox(Host : Windows Vista)上で動かすと半角/全角キーが連打(オートリピート)状態になる問題 (原因調査にshowkeyコマンド)：なんでもかんでもコンピュータ：So-netブログ
  - http://ankyo.blog.so-net.ne.jp/2011-05-17

以下を入れると良いらしいです。

```
$ xset -r 49
```

ただ、先日最新のVirtualBox 5系にバージョンアップして、さらにOSもCentOS 7.2と最新系にしてみたところ、上のコマンド入れなくても、特にリピート問題発生しなかったので、Host OSとGuest OSの組み合わせの問題か、あるいは何かの表紙で修正されたか・・・だと思います。

もし再発したときは、上のコマンド試してみるということで、メモでした。
参考メモ/Javaのシステムコール呼び出しをstraceで確認するメモ

Javaアプリケーションがソケットやファイル入出力を行う際の、システムコール呼び出しをstraceでトレースしてみたメモです。

```
検証環境：
$ cat /etc/centos-release
CentOS Linux release 7.2.1511 (Core) 

$ strace -V
strace -- version 4.8

$ java -version
java version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)
```

# straceしてみるJavaサンプル

- アプリケーション自体はスレッドを3つ使う。
  - /dev/zero, /dev/urandom から 1秒間隔で32バイト読み込むのが2スレッド。
  - mainスレッドではHOME環境変数のディレクトリ一覧を1秒間隔で読み込む。

```java:StraceDemo.java 
import java.io.*;

public class StraceDemo extends Thread {

    final String file;

    public StraceDemo(String file) {
        this.file = file;
    }

    public void run() {
        byte[] dummy = new byte[32];
        try (InputStream is = new FileInputStream(file)) {
            int c = 0;
            while (true) {
                int b = is.read(dummy);
                System.out.println(this.file + ":" + c + ":" + b);
                Thread.sleep(1000);
            }
        } catch (Exception ignore) {
        }
    }

    public static void main(String[] args) throws Exception {
        (new StraceDemo("/dev/zero")).start();
        (new StraceDemo("/dev/urandom")).start();

        File homedir = new File(System.getenv("HOME"));
        while (true) {
            File[] files = homedir.listFiles();
            System.out.println("HOME : " + files.length + " entries.");
            Thread.sleep(1000);
        }
    }
}
```

# straceでJavaアプリをトレース

straceの説明と使い方は `man 1 strace` 参照。今回使うのは以下のオプション。

```
-f : fork(2)/vfork(2)/clone(2) で作られた子プロセスもトレースする。
-t : タイムスタンプをトレースに出力
-x : 非ASCII文字を16進数で表示
-e expr : トレースしたいシステムコールをフィルタ
-o filename : トレース結果をファイルに出力
-p pid : トレースしたいプロセスID
-P path : 指定したファイルパスについてのシステムコールのみトレース
-s len : 文字列表示の最大サイズ
```

## 複数スレッドのシステムコールをトレース

mainスレッドから作ったスレッドのシステムコールをトレースするため `-f` オプションを指定する。

```
$ strace -f -t -x -s 1024 -o strace_demo1.log java StraceDemo
```

## ファイル関連のシステムコールだけトレースしたい

`-e trace=file` だけだとread(2)やwrite(2)、その他ファイルディスクリプタ関連のシステムコールをトレースできないので、追加で指定する。

```
$ strace -f -t -x -s 1024 -o strace_demo2.log -e trace=file,read,write,desc java StraceDemo
```

## 起動済みのマルチスレッドJavaアプリをトレース

`-f` + `-p PID` で、そのプロセスIDだけでなく、PIDが等しいスレッドもまとめてトレースしてくれる。

```
$ strace -f -t -x -s 1024 -p (PID of target java) -o strace_demo3.log
```

## あるファイルパスについてのシステムコールのみトレース

```
$ strace -f -t -x -s 1024 -o strace_demo4.log -e trace=file,read,write,desc -P /dev/zero java StraceDemo
```

# 参考URL

- strace コマンドの使い方をまとめてみた - sonots:blog
  - http://blog.livedoor.jp/sonots/archives/18193659.html
- 7 Strace Examples to Debug the Execution of a Program in Linux
  - http://www.thegeekstuff.com/2011/11/strace-examples/
- Using strace to attach to a multi-threaded process (like a JVM/Java) – ITSA Consulting, LLC
  - https://itsecureadmin.com/2010/12/using-strace-to-attach-to-a-multi-threaded-process-like-a-jvmjava/
参考メモ/Java6からのUnicode正規化(java.text.Normalizer)による全角英数記号と日本語特殊文字の変換メモ

Javaで以下のような変換を行いたかったので、Java6からのUnicode正規化(java.text.Normalizer)を試してみたので参考URLなどのメモです。

- 全角英数記号を半角英数記号に。
- 一文字にまとまった「（株）」とか「平成」「昭和」などの年号、「ミリ」や「キロ」などを、ばらばらの全角文字に。
- Windows/Macそれぞれで入力された濁音・半濁音のかな/カナを、揃えたい。

# Unicode正規化の参考URL

- Unicode正規化
  - http://nomenclator.la.coocan.jp/unicode/normalization.htm
- Normalizing Text (The Java™ Tutorials > Internationalization > Working with Text)
  - http://docs.oracle.com/javase/tutorial/i18n/text/normalizerapi.html
- Normalizer.Form (Java Platform SE 8 )
  - https://docs.oracle.com/javase/jp/8/docs/api/java/text/Normalizer.Form.html
- Java SE 6 じゃじゃ馬ならし Unicode の正規化
  - http://www.javainthebox.net/laboratory/JavaSE6/normalizer/normalizer.html
- Java技術最前線 - 「Java SE 6完全攻略」第56回 文字列の正規化：ITpro
  - http://itpro.nikkeibp.co.jp/article/COLUMN/20071130/288467/?rt=nocnt
- Java6にはUnicode正規化の機能がいるそうな : mwSoft blog
  - http://blog.mwsoft.jp/article/34823291.html
- Unicodeにあるハイフン/マイナス/長音符/波線/チルダのコレクション | hydroculのメモ
  - http://hydrocul.github.io/wiki/blog/2014/1101-hyphen-minus-wave-tilde.html
- PHPのmb_convert_kanaとUnicodeのNFKC正規化 | hydroculのメモ
  - http://hydrocul.github.io/wiki/blog/2014/1127-unicode-nfkd-mb-convert-kana.html

# Javaでのサンプルコード

https://github.com/msakamoto-sf/javasnack/blob/5853d88d0e043e85decf37272e07b1e5ce076ac1/src/test/java/javasnack/langspecs/TestUnicodeNormalize1.java

# 今回の用途で最適だったのはNFKC

今回の用途で最適だったのはNFKC(互換分解とそれに続く正規合成, Normalizer.Form.NFKC)でした。
サンプルコードからの以下の結果がポイントでした。

- 1文字の全角文字「が」「ぱ」「っ」などは変わらない。
- 「か」+濁音などの組み合わせもそのまま変わらない。
- 半角カナ + 濁音などの組み合わせは、相当する1文字の全角文字に変換してくれる（「ヴ」など）。
- 全角英数記号を相当する半角英数記号に変換してくれる。
- 可能なかぎり、丸文字や年号・単位・ギリシャ数字などの1文字を、相当する複数の文字に分解してくれる。

扱う文字列が、記号などかなりの率で混在する上に、Windows/Macでそれぞれ入力された濁音・半濁音のかな/カナ文字が混在してくるデータだったので、互換分解した後に正規合成するNFKCが（多分）正規化して「揃える」のには一番適してるのではないでしょうか。
参考メモ/JavaでXPathを扱う参考URLメモ

JavaでXPathを扱うのを調べた時の参考URLのブックマークです。

XPathの基本：

- Java 入門 | XPath
  - http://msugai.fc2web.com/java/XML/XPath.html
- XPath | TECHSCORE(テックスコア)
  - http://www.techscore.com/tech/XML/XPath/index.html/
- Java で XPath を使う方法 - vivid memo
  - http://d.hatena.ne.jp/vividcode/20090923/1253717165
- W3C DOM 3 XPath の勧告に従った方法で XPath を評価する - vivid memo
  - http://d.hatena.ne.jp/vividcode/20091012/1255362840
- Generate/get xpath from XML node java - Stack Overflow
  - http://stackoverflow.com/questions/4746299/generate-get-xpath-from-xml-node-java
- java - Get Xpath from the org.w3c.dom.Node - Stack Overflow
  - http://stackoverflow.com/questions/5046174/get-xpath-from-the-org-w3c-dom-node


dom4jを使ったXPathの処理：

- dom4jやXPathを使って、JavaでXML文書を読み込むサンプル - 感謝のプログラミング 10000時間
  - http://blog.codebook-10000.com/entry/20130710/1373465211
- dom4jとXPathを使用しXML文書から特定要素の取出し | TomoSoft
  - http://tomosoft.jp/design/?p=3257

HTMLパーサのValidator.nu を使ったXPathの処理：

- JavaでHTML5をDOMパースしてXPATHを使えるようにする - Validator.nu HTML Parser - Qiita
  - http://qiita.com/mychaelstyle/items/511f3dd170ad87459424
- The Validator.nu HTML Parser
  - https://about.validator.nu/htmlparser/
FuelPHPでfacebookログインを実装したときのまとめ

# FuelPHPでfacebookログインを実装したい

## 調査結果
Opauthを利用するのが良さそう
ここ( https://github.com/andreoav/fuel-opauth )からFuelPHP用のパッケージを利用できそう
Opauthは， PHPでOauthログインをするためのフレームワークです(ざっくり)


## 使ってみた
とても丁寧にREADMEが書かれており， 簡単に実装できた(見習いたい)
__しかし__ , メールアドレスが取得できない．．．

## メールアドレス取得できない原因
随分更新されていないようで， 最近の(?)facebook SDK のアップデートによってデフォルトでは取得できなくなっているらしい
その他の項目もパーミッションが必要になっているものがたくさんありました
参考( https://developers.facebook.com/docs/facebook-login/permissions#requirereview )

## メールアドレスも取得したい
ということで， 2016/04/04現在のfacebook SDKでメールアドレスが取得できるように変更してみました
( https://github.com/kdotsaito/fuel-opauth )

## 結果
facebookでログインしてもらったユーザの名前， メールアドレス， プロフィール写真などを取得できるようになった
PostgreSQLにデータロード（Compose.io＠Bluemixの話）

結論的には**「ローカルにPostgreSQLを立てるのと同じ操作感で普通にロードできちゃいました」**です。

composeでは、DBユーザにadmin権限をもらえません。
よって、王道である「copy」コマンドは使えません。PostgreSQLが入っているOSにログインができるわけでもないのでpg_restore等も使えません。なので。。。

・「¥copy」コマンドを使う（頭の「¥」がポイント）　**今回はこれ！**
・JavaやPerlからJDBC接続等でデータを入れる
・なんかツールがあるらしい？Transporter？
　https://www.compose.io/articles/how-postgresql-fits-compose/

##データロードの概要
・データの場所：作業用PCのローカル
・ロード先：Compose（クラウド）上のPostgreSQL
・作業用PCから、Compose上のPostgreSQLにログインをして、ローカルのファイルをベースにデータロード。
![スクリーンショット 2016-04-04 22.11.18.png](https://qiita-image-store.s3.amazonaws.com/0/119378/3ff45d83-fb54-4cbf-55e2-3f727bf426c5.png)

## 手順１：PostgreSQLにCLIで接続する
Overviewタブをクリックすると「Connect info」に書いてあるpsqlの定義をそのままコピペ（パスワードが最初は伏せ字になってますから、show/changeのところをクリックしてみて表示させる）。コピペしたコマンドを実行します（いろいろ伏せ字になってますのでご注意）。

```bash
$ psql  --host 'hostname.com' --port 99999 --username 'admin' 'test'
psql (9.3.1, server 9.4.6)
WARNING: psql major version 9.3, server major version 9.4.
         Some psql features might not work.
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.

test=>
```
**DB名 =>**　と出てくれば、接続完了です。

## 手順２：¥copyコマンドでデータをロードする
なんかMarkdown記法のせいで変な色になってますが気にしないでください。

```bash
#時間を測定するように設定する
test=> \timing
Timing is on.

#PostgreSQLでPCローカルのデータをロード。¥copyコマンドを使用。ちなみにテキストのサイズは23MB。
test=> \copy customer from '/datadir/customer.txt' (delimiter '|');
Time: 18355.775 ms

#データがきちんとロードできているか確認
test=> select count(*) from customer;
 count
--------
 150000
(1 row)
```
##手順３：データロードの時間はこんなかんじ
TPC-Hのデータを1GB分にしてデータロード。インターネットは家庭用の光回線です。
![スクリーンショット 2016-04-04 22.08.58.png](https://qiita-image-store.s3.amazonaws.com/0/119378/a5f1ba15-448d-73b0-2b61-35b99c2e6b53.png)

だいたい足し算すると、1GBを10分ちょいでロード、、といったところでしょうか。
このロードにはPostgreSQLにデータをinsertした時間だけじゃなくて、**自分のPCのローカルにあるファイルをクラウド上にアップして、それをPostgreSQLにinsertした時間**、なわけですので自宅のインターネットの速度を考えてみたら、、かなり普通な値じゃないかなと思います。

##まとめ：家のインターネット経由で、普通にPostgreSQLを使う感覚でComposeのDBaaS環境にデータをロードできた

できました！特にクラウドだからなんか遅いとかは感じなかったです。
要は普通に「PostgreSQL」の環境がクラウドで提供されているってことでした。
Qiitaの接続がおかしい > Safari: Not Found / Chrome: 読込み遅い > ルーターとMac再起動で対応 / Safari: 502 Bad Gateway

```txt:動作環境
Mac OS X 10.8.5
Safari v6.2.8
Chrome v49.0.2623.110 (64-bit)
```

Qiita.comへの接続

- Safari: お探しのページは見つかりません。 (404: Not Found)
- Chrome: 接続できるが、トップページの読込みに１０秒程度かかる

数日前までSafariでは3秒程度で読込みできていた。Chromeで遅いのは１ヶ月くらいそうだ。

今日はSafariがおかしい。
よく分からない状況だ。

困った。

Mountain Lion を El Captian にしたら解決するのだろうか。

<hr>
ルーターを再起動してMacを再起動したら、Safariですぐにつながるようになった。

<hr>
(追記 2015/04/06)

Safariで接続中、通知のページから記事に飛ぼうとすると以下のエラーとなった。

> 502: Bad Gateway

Chromeでは遅いが上記の問題は出ない。

何が原因なのか。
101 RULES > 0 Don't sweat the small stuff.

@ C++ Coding Standards - 101 Rules, Guidelines, and Best Practices by Herb Sutter and Andrei Alexandrescu

> 0 Don't sweat the small stuff. (Or: Know what not to standarize.)

> Issues that are really just perosonal taste and don't affect correctness or readability don't belong in a coding standard. Any professional programmer can easily read and write code that is formatted a little differently than they're used to.


2年ほど前に購入した101Rules

内容について気になったが、上記のことだった。

correctness と readability に影響しない小さなものは気にしない、ということ。

readability の定義は人によって変わるかも、と思う。
git log をいい感じに alias して色付きで見やすくしておく

## TL;DR

```bash
git config --global alias.tree \
  "log --graph --date=iso --pretty='[%ad]%C(auto) %h%d %Cgreen%an%Creset : %s'"
```

イメージ:

![git-tree.png](https://qiita-image-store.s3.amazonaws.com/0/39648/a0ee7541-b0a4-10b1-8d5e-636919429ed2.png)

## 参考

- [Google検索: "git log 見やすく"](https://www.google.co.jp/search?q=git+log+%E8%A6%8B%E3%82%84%E3%81%99%E3%81%8F)

## 余談

今まであまり頑張ってなかったのですが、最近設定しました。

`git log --graph --decorate --oneline` でもそれなりによかったのですが、Author 名も出しておきたかったのと、色を付けたかったので、 `git log --help` を見ながら設定しました。
TweetDeckライクなGitHubとBacklogのタイムラインビューワーを作ってみた

GitHub のダッシュボードが絶望的に使いづらいので、タイトル通りタイムラインビューワーを作りました。
https://tilfin.github.io/deck/
[![Deck](https://qiita-image-store.s3.amazonaws.com/0/8924/3184b63b-8918-15f6-51bf-4ee9776b477e.jpeg)](https://tilfin.github.io/deck/)

GitHub のイベントダッシュボードは「誰が何をしたのか」はわかるのですが、結局情報が不足してるためにわざわざ詳細ページに飛ぶ必要があります。そこをどうにかしたかったのが開発理由です。また普段 Nulab さんの Backlog を使っているので、こちらのプロジェクト更新履歴も同じく表示できるようにしました。

サイトの [See a Demo] ボタンからデモとして、GitHub の Public イベントといくつかの有名リポジトリと組織のタイムラインの見られます。（これは非認証状態での API 利用なので社内からのアクセスですと IP アドレスのリミットでエラーになるかもしれません。）

両方とも API がクロスオリジンで呼び出せたので単純な静的ページアプリ（SPA）として作って Github Page で公開しました。そのため各 API のアクセストークンやタイムラインの情報は全てブラウザのローカルストレージに保存する仕様です。JSON でインポート・エクスポートできるのとレスポンシブデザインにしているため、PC で設定をエクスポートして、スマホでホーム画面登録してインポートすることも可能です。

以下は設定方法を説明しておきます。

## 設定方法
[Get Started Now] ボタンからタイムラインの編集画面に飛びます。追加するタイムラインのサービス毎に [GitHub], [Backlog] ボタンがあります。下記スクリーンショットはそれぞれの My Timeline を追加したものです。カラム幅と通知のオンオフが設定できます。

![deck_setting-timeline.jpg](https://qiita-image-store.s3.amazonaws.com/0/8924/177f56ef-3899-1797-c80d-9f8d7b135ae6.jpeg)

### GitHub タイムラインの追加

![deck_setting-github.jpg](https://qiita-image-store.s3.amazonaws.com/0/8924/400da566-a371-b18b-9df2-620d83118009.jpeg)

まずアクセストークンを生成してください。
https://github.com/settings/tokens から [Generate new token] ボタンをクリックして、「Select scopes」から <b>repo</b>, admin:org/<b>read:org</b>, <b>notifications</b> を選択して、トークンを下記の最初の [Access Token] にセットします。

2番目は GitHub Enterprize を使っている場合は、ルート URL を入れます（この機能は自分自身が利用していないので未確認です）。GitHub.com の場合は空のままにして、[Activate] ボタンを押すと認証が通ると下部の組織タイムラインもしくはリポジトリ(例．microsoft, facebook/react）の指定、または GitHub 全体の Public タイムラインを追加できます。

### Backlog タイムラインの追加
「API Root URL」にお使いの Backlog サイトのルート URL をセットします。さらに Backlog サイトで個人設定ページを開いて、左のメニューの API から新しいAPIキーを発行をして、「API Token」にセットします。

![deck_setting-backlog.jpg](https://qiita-image-store.s3.amazonaws.com/0/8924/f9dd605c-8bee-e1b2-907c-506436b54478.jpeg)

[Load Project] ボタンをクリックして認証が通るとプロジェクト一覧がロードされるので、選択して追加します。

[tilfin's note](http://tilfin.hatenablog.com/entry/2016/04/04/214641) よりクロスポスト
ESP-WROOM-02 Arduino互換ボード 設定からたくさんのセンサーを使うまで【まとめ】

# スイッチサイエンス製 ESP-WROOM-02 Arduino互換ボード
スイッチサイエンスから[ESP-WROOM-02 Arduino互換ボード](https://www.switch-science.com/catalog/2620/)が発売されました。今まではESP-WROOM-02(ESP8266)をArduinoのスケッチを書き込んで使うためには、モジュールをはんだ付けしてブレッドボード上で使用したりと少々使いづらい部分がありました。それをこの互換ボードが解消してくれます :pray: 

[ESP-WROOM-02 Arduino互換ボード](https://www.switch-science.com/catalog/2620/)
![2620_1.jpg](https://qiita-image-store.s3.amazonaws.com/0/55103/0694e9d1-177b-dedb-000d-38c2446ce73b.jpeg)

# ESP-WROOM-02 Arduino互換ボードについて編
- [ついにESP-WROOM-02のArduino互換ボードが発売！ 欲しくなるポイントまとめ](http://qiita.com/umi_kappa/items/8b7fe76812c197fd2ac6)  
ボードのおすすめポイントを紹介しています。何と言っても2,980円は安い :purse: 

# 設定編
- [Arduino IDEでESP-WROOM-02のボード設定について](http://qiita.com/umi_kappa/items/ced90c258a14be165291)  
Arduino IDEで使うときのボード設定について。

# 使い方編
- [ESP-WROOM-02 Arduino互換ボードのGPIOはこうやって使う](http://qiita.com/umi_kappa/items/ac3d37db44a2dcfe71fd)  
見た目はArduino Unoと似ているものの、やはりピン配置は違う。ちょっとどのピンがどうか覚えられないので備忘録として :ghost: 
- [ESP-WROOM-02 Arduino互換ボードにWi-Fi経由でスケッチを書き込む](http://qiita.com/umi_kappa/items/9d06904322a76a6d0d85)  
「OTA」という機能を使って、USBケーブルではなくWi-Fi経由でボードにスケッチを書き込む
- [ESP-WROOM-02でWi-Fiのアクセスポイントをスキャンする](http://qiita.com/umi_kappa/items/366e1ab937ae98b14eba)  
厳密に言うとネットにはつないでいないですが、キャッチしているアクセスポイントの情報を一覧できます。

# ネットとつないじゃったよ編
- [ESP-WROOM-02 Arduino互換ボードでサクッとHTTP通信できたよ](http://qiita.com/umi_kappa/items/c3c929c6f42c5bdf3143)  
ESP8266をArduino IDEで使えるようにするESP8266 Arduino Coreのサンプルスケッチで、簡単にHTTP通信できた話。
- [ESP-WROOM-02 Arduino互換ボードとIFTTTでスマートフォンにプッシュ通知を飛ばす](http://qiita.com/umi_kappa/items/89991cbf9832b629b419)  
ArduinoからIFTTTに対してプッシュ通知を飛ばすように要求。IFTTTからAndroid、iOSのスマートフォンに対してプッシュ通知を送信 :chicken: 

# センサーの使い方編
- [ESP-WROOM-02 Arduino互換ボードでタクトスイッチを使う](http://qiita.com/umi_kappa/items/8293acd39ade1f47f1aa)
- [ESP-WROOM-02 Arduino互換ボードで光センサーを使う](http://qiita.com/umi_kappa/items/9a48208a45b78efc2fc1)
- [ESP-WROOM-02 Arduino互換ボードで温湿度センサーを使う](http://qiita.com/umi_kappa/items/95ef40c930ef6b9bfed0)
- [ESP-WROOM-02 Arduino互換ボードと焦電センサーで動体を検知する](http://qiita.com/umi_kappa/items/c4df607cc25c346df44e)
- [ESP-WROOM-02 Arduino互換ボードと圧電スピーカーで振動を検知する](http://qiita.com/umi_kappa/items/ba4bfa9f301880d94030)
- [ESP-WROOM-02 Arduino互換ボードと圧力センサーで圧力を計測する](http://qiita.com/umi_kappa/items/e72d458b7bd60a227c24)
- [ESP-WROOM-02 Arduino互換ボードと曲げセンサーで曲がり具合を検知する](http://qiita.com/umi_kappa/items/d771aba29b8e98ac3a92)
- [ESP-WROOM-02 Arduino互換ボードでサーボモーターを回す](http://qiita.com/umi_kappa/items/57fee6aa9d4a9f1236e9)

# まとめ
まだまだ遊べることがたくさんあるESP-WROOM-02 Arduino互換ボード。新たなネタを投稿したら、こちらにまとめますね :sun_with_face:
ec2で運用中のWordPressをKUSANAGIにしたらサーバー監視に使っていたNew Relicが使えなくなった話


## 結論から先に申しますと

New Relic が HHVM(KUSANAGIでデフォルトで使用しています) に対応しておらず、動作させるまでかなりの手間がかかったので、別の監視ツール[SavaMoni](https://savamoni.com/)を導入しました。
結果的に New Relic とほぼ変わらず使うことができているといった印象です。

## 環境

```
KUSANAGI: 7.8.1
CentOS  : 7.2.1511
Nginx   : 1.9.11
```

## 前提
New Relicを入れている目的はサーバーのパフォーマンスと死活監視です。特に記事がバズってサーバーの返答が遅くなることが頻繁に起きていたので、そこを監視するために入れました。

そのNew Relic を KUSANAGI 環境でも使おうとして調べたことなど書いていきます。

## New Relic vs HHVM

HHVMユーザー「New Relicさん！HHVM対応してくださいよ！！」
New Relic開発者 「わかりました。」

のようなやり取りがずっと行われています。

参考: https://discuss.newrelic.com/t/php-agent-and-hhvm/2805

## ネットに落ちてる対応策
とは言っても様々な方が対応してくれています。

### その1
https://github.com/chregu/hhvm-newrelic-ext
こちらは非公式のHHVM用のNew Relic の拡張です。

ただ、途中で `$ sudo apt-get install hhvm-dev` をやれと言われ詰みます。

### その2
https://blog.newrelic.com/2014/02/10/agentsdk-blog-post/
New Relicのブログ記事ですが、これも途中の __Building the Agent SDK hhvm extension__ あたりで何言ってるんだと思いやめてしまいました。
（今冷静に読み返してみるとその2のブログの通り進めていけば対応できそうですね・・・）

調査など含めて半日以上費やしていたので、もういいやと思い、別サービスを使うことにしました。

### New Relic から SavaMoniへ
新しい監視ツールの条件としては

* 複数サーバー見れる
* slackに通知できる
* 無料
* CPUやメモリを見れる

がありました。そこで[SavaMoni](https://savamoni.com/)を見つけまして使ってみたところ条件を満たしていたのでNew Relicから乗り換えました。

New Relicはダッシュボードの表示速度と機能量の多さが気になっていたのですが、SaveMoniは表示速度はあまり気にならず機能的にもシンプルなので丁度良いサービスかなと思っています。